aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2008-05-31 08:20:37 -0400
committerDavid Woodhouse <David.Woodhouse@intel.com>2008-07-10 09:47:38 -0400
commitf1485f3deb89e6ae10c4d34662ec9e692855ab5d (patch)
tree8d7d03cabfbd38e904d76c96aa1b5a1e830dac22
parentbacfe09dd7545467965e8d8f1eab20bc62dce00d (diff)
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>
-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__ */