aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/ihex.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/include/linux/ihex.h b/include/linux/ihex.h
index df89edd890ae..2baace2788a7 100644
--- a/include/linux/ihex.h
+++ b/include/linux/ihex.h
@@ -9,6 +9,7 @@
9 9
10#include <linux/types.h> 10#include <linux/types.h>
11#include <linux/firmware.h> 11#include <linux/firmware.h>
12#include <linux/device.h>
12 13
13/* Intel HEX files actually limit the length to 256 bytes, but we have 14/* Intel HEX files actually limit the length to 256 bytes, but we have
14 drivers which would benefit from using separate records which are 15 drivers which would benefit from using separate records which are
@@ -47,4 +48,27 @@ static inline int ihex_validate_fw(const struct firmware *fw)
47 } 48 }
48 return -EINVAL; 49 return -EINVAL;
49} 50}
51
52/* Request firmware and validate it so that we can trust we won't
53 * run off the end while reading records... */
54static inline int request_ihex_firmware(const struct firmware **fw,
55 const char *fw_name,
56 struct device *dev)
57{
58 const struct firmware *lfw;
59 int ret;
60
61 ret = request_firmware(&lfw, fw_name, dev);
62 if (ret)
63 return ret;
64 ret = ihex_validate_fw(lfw);
65 if (ret) {
66 dev_err(dev, "Firmware \"%s\" not valid IHEX records\n",
67 fw_name);
68 release_firmware(lfw);
69 return ret;
70 }
71 *fw = lfw;
72 return 0;
73}
50#endif /* __LINUX_IHEX_H__ */ 74#endif /* __LINUX_IHEX_H__ */