static bool fw_get_filesystem_firmware(struct firmware_buf *buf) { int i; bool success = false; char *path = __getname(); for (i = 0; i < ARRAY_SIZE(fw_path); i++) { struct file *file; /* skip the unset customized path */ if (!fw_path[i][0]) continue; snprintf(path, PATH_MAX, "%s/%s", fw_path[i], buf->fw_id); file = filp_open(path, O_RDONLY, 0); if (IS_ERR(file)) continue; success = fw_read_file_contents(file, buf); fput(file); if (success) break; } __putname(path); return success; }
static bool fw_get_filesystem_firmware(struct device *device, struct firmware_buf *buf, phys_addr_t dest_addr, size_t dest_size) { int i; bool success = false; char *path = __getname(); for (i = 0; i < ARRAY_SIZE(fw_path); i++) { struct file *file; /* skip the unset customized path */ if (!fw_path[i][0]) continue; snprintf(path, PATH_MAX, "%s/%s", fw_path[i], buf->fw_id); file = filp_open(path, O_RDONLY, 0); if (IS_ERR(file)) continue; success = fw_read_file_contents(file, buf); fput(file); filp_close(file, NULL); if (success) break; } __putname(path); if (success) { dev_dbg(device, "firmware: direct-loading firmware %s\n", buf->fw_id); mutex_lock(&fw_lock); set_bit(FW_STATUS_DONE, &buf->status); complete_all(&buf->completion); mutex_unlock(&fw_lock); } return success; }