Lines Matching defs:fw_req

46 	struct fw_request *fw_req = container_of(kref, struct fw_request, kref);
48 dev_dbg(fw_req->fw_download->parent, "firmware %s released\n",
49 fw_req->name);
51 release_firmware(fw_req->fw);
65 if (!fw_req->timedout)
66 ida_free(&fw_req->fw_download->id_map, fw_req->firmware_id);
68 kfree(fw_req);
76 * get_fw_req() increments the reference count before returning a fw_req pointer
80 * it guarantees that every user of fw_req has taken a kref-reference by now and
83 * Once the last user drops the reference, the fw_req structure is freed.
85 static void put_fw_req(struct fw_request *fw_req)
87 kref_put(&fw_req->kref, fw_req_release);
94 struct fw_request *fw_req;
98 list_for_each_entry(fw_req, &fw_download->fw_requests, node) {
99 if (fw_req->firmware_id == firmware_id) {
100 kref_get(&fw_req->kref);
105 fw_req = NULL;
110 return fw_req;
114 struct fw_request *fw_req)
117 if (fw_req->disabled)
121 list_del(&fw_req->node);
124 fw_req->disabled = true;
125 put_fw_req(fw_req);
131 struct fw_request *fw_req = container_of(dwork,
133 struct fw_download *fw_download = fw_req->fw_download;
137 fw_req->firmware_id);
139 fw_req->timedout = true;
140 free_firmware(fw_download, fw_req);
143 static int exceeds_release_timeout(struct fw_request *fw_req)
145 struct fw_download *fw_download = fw_req->fw_download;
147 if (time_before(jiffies, fw_req->release_timeout_j))
152 fw_req->firmware_id);
154 fw_req->timedout = true;
155 free_firmware(fw_download, fw_req);
165 struct fw_request *fw_req;
168 fw_req = kzalloc(sizeof(*fw_req), GFP_KERNEL);
169 if (!fw_req)
179 fw_req->firmware_id = ret;
181 snprintf(fw_req->name, sizeof(fw_req->name),
187 fw_req->name);
189 ret = request_firmware(&fw_req->fw, fw_req->name, fw_download->parent);
192 "firmware request failed for %s (%d)\n", fw_req->name,
197 fw_req->fw_download = fw_download;
198 kref_init(&fw_req->kref);
201 list_add(&fw_req->node, &fw_download->fw_requests);
205 req_count = DIV_ROUND_UP(fw_req->fw->size, MIN_FETCH_SIZE);
206 fw_req->release_timeout_j = jiffies + req_count * NEXT_REQ_TIMEOUT_J;
208 INIT_DELAYED_WORK(&fw_req->dwork, fw_request_timedout);
209 schedule_delayed_work(&fw_req->dwork, NEXT_REQ_TIMEOUT_J);
211 return fw_req;
214 ida_free(&fw_download->id_map, fw_req->firmware_id);
216 kfree(fw_req);
227 struct fw_request *fw_req;
248 fw_req = find_firmware(fw_download, tag);
249 if (IS_ERR(fw_req))
250 return PTR_ERR(fw_req);
254 free_firmware(fw_download, fw_req);
259 response->firmware_id = fw_req->firmware_id;
260 response->size = cpu_to_le32(fw_req->fw->size);
263 "firmware size is %zu bytes\n", fw_req->fw->size);
273 struct fw_request *fw_req;
292 fw_req = get_fw_req(fw_download, firmware_id);
293 if (!fw_req) {
300 cancel_delayed_work_sync(&fw_req->dwork);
303 if (fw_req->disabled) {
313 ret = exceeds_release_timeout(fw_req);
317 fw = fw_req->fw;
343 schedule_delayed_work(&fw_req->dwork, NEXT_REQ_TIMEOUT_J);
346 put_fw_req(fw_req);
356 struct fw_request *fw_req;
369 fw_req = get_fw_req(fw_download, firmware_id);
370 if (!fw_req) {
376 cancel_delayed_work_sync(&fw_req->dwork);
378 free_firmware(fw_download, fw_req);
379 put_fw_req(fw_req);
439 struct fw_request *fw_req, *tmp;
452 list_for_each_entry(fw_req, &fw_download->fw_requests, node)
453 kref_get(&fw_req->kref);
457 list_for_each_entry_safe(fw_req, tmp, &fw_download->fw_requests, node) {
458 cancel_delayed_work_sync(&fw_req->dwork);
459 free_firmware(fw_download, fw_req);
460 put_fw_req(fw_req);