Browse Source

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 years ago
parent
commit
f1485f3deb
1 changed files with 24 additions and 0 deletions
  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__ */