Lines Matching +full:firmware +full:- +full:name
1 // SPDX-License-Identifier: GPL-2.0
12 #include "firmware.h"
15 * firmware fallback mechanism
19 * use small loading timeout for caching devices' firmware because all these
20 * firmware images have been loaded successfully at lease once, also system is
21 * ready for completing firmware loading now. The maximum size of firmware in
57 if (kill_all || !fw_priv->need_uevent) in kill_pending_fw_fallback_reqs()
68 * fw_load_sysfs_fallback() - load a firmware via the sysfs fallback mechanism
69 * @fw_sysfs: firmware sysfs information for the firmware to load
72 * In charge of constructing a sysfs fallback interface for firmware loading.
77 struct device *f_dev = &fw_sysfs->dev; in fw_load_sysfs_fallback()
78 struct fw_priv *fw_priv = fw_sysfs->fw_priv; in fw_load_sysfs_fallback()
81 if (!fw_priv->data) in fw_load_sysfs_fallback()
82 fw_priv->is_paged_buf = true; in fw_load_sysfs_fallback()
95 retval = -EINTR; in fw_load_sysfs_fallback()
98 list_add(&fw_priv->pending_list, &pending_fw_head); in fw_load_sysfs_fallback()
101 if (fw_priv->opt_flags & FW_OPT_UEVENT) { in fw_load_sysfs_fallback()
102 fw_priv->need_uevent = true; in fw_load_sysfs_fallback()
104 dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_name); in fw_load_sysfs_fallback()
105 kobject_uevent(&fw_sysfs->dev.kobj, KOBJ_ADD); in fw_load_sysfs_fallback()
111 if (retval < 0 && retval != -ENOENT) { in fw_load_sysfs_fallback()
118 if (retval == -ERESTARTSYS) in fw_load_sysfs_fallback()
119 retval = -EINTR; in fw_load_sysfs_fallback()
120 } else if (fw_priv->is_paged_buf && !fw_priv->data) in fw_load_sysfs_fallback()
121 retval = -ENOMEM; in fw_load_sysfs_fallback()
130 static int fw_load_from_user_helper(struct firmware *firmware, in fw_load_from_user_helper() argument
131 const char *name, struct device *device, in fw_load_from_user_helper() argument
142 dev_dbg(device, "firmware: %s loading timed out\n", in fw_load_from_user_helper()
143 name); in fw_load_from_user_helper()
144 return -EBUSY; in fw_load_from_user_helper()
149 dev_err(device, "firmware: %s will not be loaded\n", in fw_load_from_user_helper()
150 name); in fw_load_from_user_helper()
155 fw_sysfs = fw_create_instance(firmware, name, device, opt_flags); in fw_load_from_user_helper()
161 fw_sysfs->fw_priv = firmware->priv; in fw_load_from_user_helper()
165 ret = assign_fw(firmware, device); in fw_load_from_user_helper()
187 pr_info_once("Ignoring firmware sysfs fallback due to sysctl knob\n"); in fw_run_sysfs_fallback()
194 /* Also permit LSMs and IMA to fail firmware sysfs fallback */ in fw_run_sysfs_fallback()
203 * firmware_fallback_sysfs() - use the fallback mechanism to find firmware
204 * @fw: pointer to firmware image
205 * @name: name of firmware file to look for
206 * @device: device for which firmware is being loaded
207 * @opt_flags: options to control firmware loading behaviour, as defined by
211 * This function is called if direct lookup for the firmware failed, it enables
213 * interface. Userspace is in charge of loading the firmware through the sysfs
224 int firmware_fallback_sysfs(struct firmware *fw, const char *name, in firmware_fallback_sysfs() argument
234 name); in firmware_fallback_sysfs()
237 name); in firmware_fallback_sysfs()
238 return fw_load_from_user_helper(fw, name, device, opt_flags); in firmware_fallback_sysfs()