summaryrefslogtreecommitdiffstats
path: root/drivers/base/firmware_loader/main.c
diff options
context:
space:
mode:
authorLuis Chamberlain <mcgrof@kernel.org>2021-10-21 08:58:34 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-10-22 14:13:44 +0200
commit48d09e97876bed4bcc503d528bdba8c907e43cb3 (patch)
tree19c98782f93da87cf9e1b2c6a0ac817e0c9fa9bf /drivers/base/firmware_loader/main.c
parentc87761db2100677a69be551365105125d872af5b (diff)
downloadlinux-stable-48d09e97876bed4bcc503d528bdba8c907e43cb3.tar.gz
linux-stable-48d09e97876bed4bcc503d528bdba8c907e43cb3.tar.bz2
linux-stable-48d09e97876bed4bcc503d528bdba8c907e43cb3.zip
firmware_loader: formalize built-in firmware API
Formalize the built-in firmware with a proper API. This can later be used by other callers where all they need is built-in firmware. We export the firmware_request_builtin() call for now only under the TEST_FIRMWARE symbol namespace as there are no direct modular users for it. If they pop up they are free to export it generally. Built-in code always gets access to the callers and we'll demonstrate a hidden user which has been lurking in the kernel for a while and the reason why using a proper API was better long term. Reviewed-by: Borislav Petkov <bp@suse.de> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> Link: https://lore.kernel.org/r/20211021155843.1969401-2-mcgrof@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base/firmware_loader/main.c')
-rw-r--r--drivers/base/firmware_loader/main.c78
1 files changed, 1 insertions, 77 deletions
diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c
index d95b5fe5f700..94d1789a233e 100644
--- a/drivers/base/firmware_loader/main.c
+++ b/drivers/base/firmware_loader/main.c
@@ -93,82 +93,6 @@ DEFINE_MUTEX(fw_lock);
static struct firmware_cache fw_cache;
-/* Builtin firmware support */
-
-#ifdef CONFIG_FW_LOADER
-
-extern struct builtin_fw __start_builtin_fw[];
-extern struct builtin_fw __end_builtin_fw[];
-
-static bool fw_copy_to_prealloc_buf(struct firmware *fw,
- void *buf, size_t size)
-{
- if (!buf)
- return true;
- if (size < fw->size)
- return false;
- memcpy(buf, fw->data, fw->size);
- return true;
-}
-
-static bool firmware_request_builtin(struct firmware *fw, const char *name)
-{
- struct builtin_fw *b_fw;
-
- if (!fw)
- return false;
-
- for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++) {
- if (strcmp(name, b_fw->name) == 0) {
- fw->size = b_fw->size;
- fw->data = b_fw->data;
- return true;
- }
- }
-
- return false;
-}
-
-static bool firmware_request_builtin_buf(struct firmware *fw, const char *name,
- void *buf, size_t size)
-{
- if (!firmware_request_builtin(fw, name))
- return false;
- return fw_copy_to_prealloc_buf(fw, buf, size);
-}
-
-static bool fw_is_builtin_firmware(const struct firmware *fw)
-{
- struct builtin_fw *b_fw;
-
- for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++)
- if (fw->data == b_fw->data)
- return true;
-
- return false;
-}
-
-#else /* Module case - no builtin firmware support */
-
-static inline bool firmware_request_builtin(struct firmware *fw,
- const char *name)
-{
- return false;
-}
-
-static inline bool firmware_request_builtin_buf(struct firmware *fw,
- const char *name, void *buf,
- size_t size)
-{
- return false;
-}
-
-static inline bool fw_is_builtin_firmware(const struct firmware *fw)
-{
- return false;
-}
-#endif
-
static void fw_state_init(struct fw_priv *fw_priv)
{
struct fw_state *fw_st = &fw_priv->fw_st;
@@ -1068,7 +992,7 @@ EXPORT_SYMBOL(request_partial_firmware_into_buf);
void release_firmware(const struct firmware *fw)
{
if (fw) {
- if (!fw_is_builtin_firmware(fw))
+ if (!firmware_is_builtin(fw))
firmware_free_data(fw);
kfree(fw);
}