Lines Matching refs:buf

182 	struct firmware_buf *buf;  in __allocate_fw_buf()  local
184 buf = kzalloc(sizeof(*buf), GFP_ATOMIC); in __allocate_fw_buf()
185 if (!buf) in __allocate_fw_buf()
188 buf->fw_id = kstrdup_const(fw_name, GFP_ATOMIC); in __allocate_fw_buf()
189 if (!buf->fw_id) { in __allocate_fw_buf()
190 kfree(buf); in __allocate_fw_buf()
194 kref_init(&buf->ref); in __allocate_fw_buf()
195 buf->fwc = fwc; in __allocate_fw_buf()
196 init_completion(&buf->completion); in __allocate_fw_buf()
198 INIT_LIST_HEAD(&buf->pending_list); in __allocate_fw_buf()
201 pr_debug("%s: fw-%s buf=%p\n", __func__, fw_name, buf); in __allocate_fw_buf()
203 return buf; in __allocate_fw_buf()
219 struct firmware_buf **buf) in fw_lookup_and_allocate_buf() argument
228 *buf = tmp; in fw_lookup_and_allocate_buf()
236 *buf = tmp; in fw_lookup_and_allocate_buf()
244 struct firmware_buf *buf = to_fwbuf(ref); in __fw_free_buf() local
245 struct firmware_cache *fwc = buf->fwc; in __fw_free_buf()
248 __func__, buf->fw_id, buf, buf->data, in __fw_free_buf()
249 (unsigned int)buf->size); in __fw_free_buf()
251 list_del(&buf->list); in __fw_free_buf()
255 if (buf->is_paged_buf) { in __fw_free_buf()
257 vunmap(buf->data); in __fw_free_buf()
258 for (i = 0; i < buf->nr_pages; i++) in __fw_free_buf()
259 __free_page(buf->pages[i]); in __fw_free_buf()
260 kfree(buf->pages); in __fw_free_buf()
263 vfree(buf->data); in __fw_free_buf()
264 kfree_const(buf->fw_id); in __fw_free_buf()
265 kfree(buf); in __fw_free_buf()
268 static void fw_free_buf(struct firmware_buf *buf) in fw_free_buf() argument
270 struct firmware_cache *fwc = buf->fwc; in fw_free_buf()
272 if (!kref_put(&buf->ref, __fw_free_buf)) in fw_free_buf()
297 char *buf; in fw_read_file_contents() local
305 buf = vmalloc(size); in fw_read_file_contents()
306 if (!buf) in fw_read_file_contents()
308 rc = kernel_read(file, 0, buf, size); in fw_read_file_contents()
314 rc = security_kernel_fw_from_file(file, buf, size); in fw_read_file_contents()
317 fw_buf->data = buf; in fw_read_file_contents()
321 vfree(buf); in fw_read_file_contents()
326 struct firmware_buf *buf) in fw_get_filesystem_firmware() argument
344 fw_path[i], buf->fw_id); in fw_get_filesystem_firmware()
353 rc = fw_read_file_contents(file, buf); in fw_get_filesystem_firmware()
365 buf->fw_id); in fw_get_filesystem_firmware()
367 set_bit(FW_STATUS_DONE, &buf->status); in fw_get_filesystem_firmware()
368 complete_all(&buf->completion); in fw_get_filesystem_firmware()
387 static void fw_set_page_data(struct firmware_buf *buf, struct firmware *fw) in fw_set_page_data() argument
389 fw->priv = buf; in fw_set_page_data()
391 fw->pages = buf->pages; in fw_set_page_data()
393 fw->size = buf->size; in fw_set_page_data()
394 fw->data = buf->data; in fw_set_page_data()
397 __func__, buf->fw_id, buf, buf->data, in fw_set_page_data()
398 (unsigned int)buf->size); in fw_set_page_data()
470 struct firmware_buf *buf; member
479 static void __fw_load_abort(struct firmware_buf *buf) in __fw_load_abort() argument
485 if (test_bit(FW_STATUS_DONE, &buf->status)) in __fw_load_abort()
488 list_del_init(&buf->pending_list); in __fw_load_abort()
489 set_bit(FW_STATUS_ABORT, &buf->status); in __fw_load_abort()
490 complete_all(&buf->completion); in __fw_load_abort()
495 struct firmware_buf *buf = fw_priv->buf; in fw_load_abort() local
497 __fw_load_abort(buf); in fw_load_abort()
500 fw_priv->buf = NULL; in fw_load_abort()
503 #define is_fw_load_aborted(buf) \ argument
504 test_bit(FW_STATUS_ABORT, &(buf)->status)
526 char *buf) in timeout_show() argument
528 return sprintf(buf, "%d\n", loading_timeout); in timeout_show()
545 const char *buf, size_t count) in timeout_store() argument
547 loading_timeout = simple_strtol(buf, NULL, 10); in timeout_store()
568 if (add_uevent_var(env, "FIRMWARE=%s", fw_priv->buf->fw_id)) in do_firmware_uevent()
584 if (fw_priv->buf) in firmware_uevent()
598 struct device_attribute *attr, char *buf) in firmware_loading_show() argument
604 if (fw_priv->buf) in firmware_loading_show()
605 loading = test_bit(FW_STATUS_LOADING, &fw_priv->buf->status); in firmware_loading_show()
608 return sprintf(buf, "%d\n", loading); in firmware_loading_show()
617 static int fw_map_pages_buf(struct firmware_buf *buf) in fw_map_pages_buf() argument
619 if (!buf->is_paged_buf) in fw_map_pages_buf()
622 vunmap(buf->data); in fw_map_pages_buf()
623 buf->data = vmap(buf->pages, buf->nr_pages, 0, PAGE_KERNEL_RO); in fw_map_pages_buf()
624 if (!buf->data) in fw_map_pages_buf()
644 const char *buf, size_t count) in firmware_loading_store() argument
649 int loading = simple_strtol(buf, NULL, 10); in firmware_loading_store()
653 fw_buf = fw_priv->buf; in firmware_loading_store()
724 struct firmware_buf *buf; in firmware_data_read() local
728 buf = fw_priv->buf; in firmware_data_read()
729 if (!buf || test_bit(FW_STATUS_DONE, &buf->status)) { in firmware_data_read()
733 if (offset > buf->size) { in firmware_data_read()
737 if (count > buf->size - offset) in firmware_data_read()
738 count = buf->size - offset; in firmware_data_read()
748 page_data = kmap(buf->pages[page_nr]); in firmware_data_read()
752 kunmap(buf->pages[page_nr]); in firmware_data_read()
764 struct firmware_buf *buf = fw_priv->buf; in fw_realloc_buffer() local
768 if (buf->page_array_size < pages_needed) { in fw_realloc_buffer()
770 buf->page_array_size * 2); in fw_realloc_buffer()
779 memcpy(new_pages, buf->pages, in fw_realloc_buffer()
780 buf->page_array_size * sizeof(void *)); in fw_realloc_buffer()
781 memset(&new_pages[buf->page_array_size], 0, sizeof(void *) * in fw_realloc_buffer()
782 (new_array_size - buf->page_array_size)); in fw_realloc_buffer()
783 kfree(buf->pages); in fw_realloc_buffer()
784 buf->pages = new_pages; in fw_realloc_buffer()
785 buf->page_array_size = new_array_size; in fw_realloc_buffer()
788 while (buf->nr_pages < pages_needed) { in fw_realloc_buffer()
789 buf->pages[buf->nr_pages] = in fw_realloc_buffer()
792 if (!buf->pages[buf->nr_pages]) { in fw_realloc_buffer()
796 buf->nr_pages++; in fw_realloc_buffer()
819 struct firmware_buf *buf; in firmware_data_write() local
826 buf = fw_priv->buf; in firmware_data_write()
827 if (!buf || test_bit(FW_STATUS_DONE, &buf->status)) { in firmware_data_write()
844 page_data = kmap(buf->pages[page_nr]); in firmware_data_write()
848 kunmap(buf->pages[page_nr]); in firmware_data_write()
854 buf->size = max_t(size_t, offset, buf->size); in firmware_data_write()
919 struct firmware_buf *buf = fw_priv->buf; in _request_firmware_load() local
922 buf->is_paged_buf = true; in _request_firmware_load()
933 list_add(&buf->pending_list, &pending_fw_head); in _request_firmware_load()
937 buf->need_uevent = true; in _request_firmware_load()
939 dev_dbg(f_dev, "firmware: requesting %s\n", buf->fw_id); in _request_firmware_load()
945 retval = wait_for_completion_interruptible_timeout(&buf->completion, in _request_firmware_load()
955 if (is_fw_load_aborted(buf)) in _request_firmware_load()
957 else if (!buf->data) in _request_firmware_load()
976 fw_priv->buf = firmware->priv; in fw_load_from_user_helper()
984 struct firmware_buf *buf; in kill_requests_without_uevent() local
988 list_for_each_entry_safe(buf, next, &pending_fw_head, pending_list) { in kill_requests_without_uevent()
989 if (!buf->need_uevent) in kill_requests_without_uevent()
990 __fw_load_abort(buf); in kill_requests_without_uevent()
1006 #define is_fw_load_aborted(buf) false argument
1016 static int sync_cached_firmware_buf(struct firmware_buf *buf) in sync_cached_firmware_buf() argument
1021 while (!test_bit(FW_STATUS_DONE, &buf->status)) { in sync_cached_firmware_buf()
1022 if (is_fw_load_aborted(buf)) { in sync_cached_firmware_buf()
1027 ret = wait_for_completion_interruptible(&buf->completion); in sync_cached_firmware_buf()
1043 struct firmware_buf *buf; in _request_firmware_prepare() local
1058 ret = fw_lookup_and_allocate_buf(name, &fw_cache, &buf); in _request_firmware_prepare()
1064 firmware->priv = buf; in _request_firmware_prepare()
1067 ret = sync_cached_firmware_buf(buf); in _request_firmware_prepare()
1069 fw_set_page_data(buf, firmware); in _request_firmware_prepare()
1082 struct firmware_buf *buf = fw->priv; in assign_firmware_buf() local
1085 if (!buf->size || is_fw_load_aborted(buf)) { in assign_firmware_buf()
1099 fw_add_devm_name(device, buf->fw_id); in assign_firmware_buf()
1105 if (buf->fwc->state == FW_LOADER_START_CACHE) { in assign_firmware_buf()
1106 if (fw_cache_piggyback_on_request(buf->fw_id)) in assign_firmware_buf()
1107 kref_get(&buf->ref); in assign_firmware_buf()
1111 fw_set_page_data(buf, fw); in assign_firmware_buf()
1401 struct firmware_buf *buf; in uncache_firmware() local
1409 buf = fw_lookup_buf(fw_name); in uncache_firmware()
1410 if (buf) { in uncache_firmware()
1411 fw_free_buf(buf); in uncache_firmware()