瀏覽代碼

ihex: request_ihex_firmware() function to load and validate firmware

Provide a helper to load the file and validate it in one call, to
simplify error handling in the drivers which are going to use it.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
David Woodhouse 17 年之前
父節點
當前提交
f1485f3deb
共有 1 個文件被更改,包括 24 次插入0 次删除
  1. 24 0
      include/linux/ihex.h

+ 24 - 0
include/linux/ihex.h

@@ -9,6 +9,7 @@
 
 
 #include <linux/types.h>
 #include <linux/types.h>
 #include <linux/firmware.h>
 #include <linux/firmware.h>
+#include <linux/device.h>
 
 
 /* Intel HEX files actually limit the length to 256 bytes, but we have
 /* Intel HEX files actually limit the length to 256 bytes, but we have
    drivers which would benefit from using separate records which are
    drivers which would benefit from using separate records which are
@@ -47,4 +48,27 @@ static inline int ihex_validate_fw(const struct firmware *fw)
 	}
 	}
 	return -EINVAL;
 	return -EINVAL;
 }
 }
+
+/* Request firmware and validate it so that we can trust we won't
+ * run off the end while reading records... */
+static inline int request_ihex_firmware(const struct firmware **fw,
+					const char *fw_name,
+					struct device *dev)
+{
+	const struct firmware *lfw;
+	int ret;
+
+	ret = request_firmware(&lfw, fw_name, dev);
+	if (ret)
+		return ret;
+	ret = ihex_validate_fw(lfw);
+	if (ret) {
+		dev_err(dev, "Firmware \"%s\" not valid IHEX records\n",
+			fw_name);
+		release_firmware(lfw);
+		return ret;
+	}
+	*fw = lfw;
+	return 0;
+}
 #endif /* __LINUX_IHEX_H__ */
 #endif /* __LINUX_IHEX_H__ */