Lines Matching refs:buf
182 struct firmware_buf *buf; in __allocate_fw_buf() local
184 buf = kzalloc(sizeof(*buf) + strlen(fw_name) + 1, GFP_ATOMIC); in __allocate_fw_buf()
186 if (!buf) in __allocate_fw_buf()
187 return buf; in __allocate_fw_buf()
189 kref_init(&buf->ref); in __allocate_fw_buf()
190 strcpy(buf->fw_id, fw_name); in __allocate_fw_buf()
191 buf->fwc = fwc; in __allocate_fw_buf()
192 init_completion(&buf->completion); in __allocate_fw_buf()
194 INIT_LIST_HEAD(&buf->pending_list); in __allocate_fw_buf()
197 pr_debug("%s: fw-%s buf=%p\n", __func__, fw_name, buf); in __allocate_fw_buf()
199 return buf; in __allocate_fw_buf()
215 struct firmware_buf **buf) in fw_lookup_and_allocate_buf() argument
224 *buf = tmp; in fw_lookup_and_allocate_buf()
232 *buf = tmp; in fw_lookup_and_allocate_buf()
240 struct firmware_buf *buf = to_fwbuf(ref); in __fw_free_buf() local
241 struct firmware_cache *fwc = buf->fwc; in __fw_free_buf()
244 __func__, buf->fw_id, buf, buf->data, in __fw_free_buf()
245 (unsigned int)buf->size); in __fw_free_buf()
247 list_del(&buf->list); in __fw_free_buf()
251 if (buf->is_paged_buf) { in __fw_free_buf()
253 vunmap(buf->data); in __fw_free_buf()
254 for (i = 0; i < buf->nr_pages; i++) in __fw_free_buf()
255 __free_page(buf->pages[i]); in __fw_free_buf()
256 kfree(buf->pages); in __fw_free_buf()
259 vfree(buf->data); in __fw_free_buf()
260 kfree(buf); in __fw_free_buf()
263 static void fw_free_buf(struct firmware_buf *buf) in fw_free_buf() argument
265 struct firmware_cache *fwc = buf->fwc; in fw_free_buf()
267 if (!kref_put(&buf->ref, __fw_free_buf)) in fw_free_buf()
292 char *buf; in fw_read_file_contents() local
300 buf = vmalloc(size); in fw_read_file_contents()
301 if (!buf) in fw_read_file_contents()
303 rc = kernel_read(file, 0, buf, size); in fw_read_file_contents()
309 rc = security_kernel_fw_from_file(file, buf, size); in fw_read_file_contents()
312 fw_buf->data = buf; in fw_read_file_contents()
316 vfree(buf); in fw_read_file_contents()
321 struct firmware_buf *buf) in fw_get_filesystem_firmware() argument
334 snprintf(path, PATH_MAX, "%s/%s", fw_path[i], buf->fw_id); in fw_get_filesystem_firmware()
339 rc = fw_read_file_contents(file, buf); in fw_get_filesystem_firmware()
351 buf->fw_id); in fw_get_filesystem_firmware()
353 set_bit(FW_STATUS_DONE, &buf->status); in fw_get_filesystem_firmware()
354 complete_all(&buf->completion); in fw_get_filesystem_firmware()
373 static void fw_set_page_data(struct firmware_buf *buf, struct firmware *fw) in fw_set_page_data() argument
375 fw->priv = buf; in fw_set_page_data()
377 fw->pages = buf->pages; in fw_set_page_data()
379 fw->size = buf->size; in fw_set_page_data()
380 fw->data = buf->data; in fw_set_page_data()
383 __func__, buf->fw_id, buf, buf->data, in fw_set_page_data()
384 (unsigned int)buf->size); in fw_set_page_data()
451 struct firmware_buf *buf; member
460 static void __fw_load_abort(struct firmware_buf *buf) in __fw_load_abort() argument
466 if (test_bit(FW_STATUS_DONE, &buf->status)) in __fw_load_abort()
469 list_del_init(&buf->pending_list); in __fw_load_abort()
470 set_bit(FW_STATUS_ABORT, &buf->status); in __fw_load_abort()
471 complete_all(&buf->completion); in __fw_load_abort()
476 struct firmware_buf *buf = fw_priv->buf; in fw_load_abort() local
478 __fw_load_abort(buf); in fw_load_abort()
481 fw_priv->buf = NULL; in fw_load_abort()
484 #define is_fw_load_aborted(buf) \ argument
485 test_bit(FW_STATUS_ABORT, &(buf)->status)
507 char *buf) in timeout_show() argument
509 return sprintf(buf, "%d\n", loading_timeout); in timeout_show()
526 const char *buf, size_t count) in timeout_store() argument
528 loading_timeout = simple_strtol(buf, NULL, 10); in timeout_store()
549 if (add_uevent_var(env, "FIRMWARE=%s", fw_priv->buf->fw_id)) in do_firmware_uevent()
565 if (fw_priv->buf) in firmware_uevent()
579 struct device_attribute *attr, char *buf) in firmware_loading_show() argument
585 if (fw_priv->buf) in firmware_loading_show()
586 loading = test_bit(FW_STATUS_LOADING, &fw_priv->buf->status); in firmware_loading_show()
589 return sprintf(buf, "%d\n", loading); in firmware_loading_show()
598 static int fw_map_pages_buf(struct firmware_buf *buf) in fw_map_pages_buf() argument
600 if (!buf->is_paged_buf) in fw_map_pages_buf()
603 vunmap(buf->data); in fw_map_pages_buf()
604 buf->data = vmap(buf->pages, buf->nr_pages, 0, PAGE_KERNEL_RO); in fw_map_pages_buf()
605 if (!buf->data) in fw_map_pages_buf()
625 const char *buf, size_t count) in firmware_loading_store() argument
630 int loading = simple_strtol(buf, NULL, 10); in firmware_loading_store()
634 fw_buf = fw_priv->buf; in firmware_loading_store()
705 struct firmware_buf *buf; in firmware_data_read() local
709 buf = fw_priv->buf; in firmware_data_read()
710 if (!buf || test_bit(FW_STATUS_DONE, &buf->status)) { in firmware_data_read()
714 if (offset > buf->size) { in firmware_data_read()
718 if (count > buf->size - offset) in firmware_data_read()
719 count = buf->size - offset; in firmware_data_read()
729 page_data = kmap(buf->pages[page_nr]); in firmware_data_read()
733 kunmap(buf->pages[page_nr]); in firmware_data_read()
745 struct firmware_buf *buf = fw_priv->buf; in fw_realloc_buffer() local
749 if (buf->page_array_size < pages_needed) { in fw_realloc_buffer()
751 buf->page_array_size * 2); in fw_realloc_buffer()
760 memcpy(new_pages, buf->pages, in fw_realloc_buffer()
761 buf->page_array_size * sizeof(void *)); in fw_realloc_buffer()
762 memset(&new_pages[buf->page_array_size], 0, sizeof(void *) * in fw_realloc_buffer()
763 (new_array_size - buf->page_array_size)); in fw_realloc_buffer()
764 kfree(buf->pages); in fw_realloc_buffer()
765 buf->pages = new_pages; in fw_realloc_buffer()
766 buf->page_array_size = new_array_size; in fw_realloc_buffer()
769 while (buf->nr_pages < pages_needed) { in fw_realloc_buffer()
770 buf->pages[buf->nr_pages] = in fw_realloc_buffer()
773 if (!buf->pages[buf->nr_pages]) { in fw_realloc_buffer()
777 buf->nr_pages++; in fw_realloc_buffer()
800 struct firmware_buf *buf; in firmware_data_write() local
807 buf = fw_priv->buf; in firmware_data_write()
808 if (!buf || test_bit(FW_STATUS_DONE, &buf->status)) { in firmware_data_write()
825 page_data = kmap(buf->pages[page_nr]); in firmware_data_write()
829 kunmap(buf->pages[page_nr]); in firmware_data_write()
835 buf->size = max_t(size_t, offset, buf->size); in firmware_data_write()
900 struct firmware_buf *buf = fw_priv->buf; in _request_firmware_load() local
903 buf->is_paged_buf = true; in _request_firmware_load()
914 list_add(&buf->pending_list, &pending_fw_head); in _request_firmware_load()
918 buf->need_uevent = true; in _request_firmware_load()
920 dev_dbg(f_dev, "firmware: requesting %s\n", buf->fw_id); in _request_firmware_load()
926 retval = wait_for_completion_interruptible_timeout(&buf->completion, in _request_firmware_load()
936 if (is_fw_load_aborted(buf)) in _request_firmware_load()
938 else if (!buf->data) in _request_firmware_load()
957 fw_priv->buf = firmware->priv; in fw_load_from_user_helper()
965 struct firmware_buf *buf; in kill_requests_without_uevent() local
969 list_for_each_entry_safe(buf, next, &pending_fw_head, pending_list) { in kill_requests_without_uevent()
970 if (!buf->need_uevent) in kill_requests_without_uevent()
971 __fw_load_abort(buf); in kill_requests_without_uevent()
987 #define is_fw_load_aborted(buf) false argument
997 static int sync_cached_firmware_buf(struct firmware_buf *buf) in sync_cached_firmware_buf() argument
1002 while (!test_bit(FW_STATUS_DONE, &buf->status)) { in sync_cached_firmware_buf()
1003 if (is_fw_load_aborted(buf)) { in sync_cached_firmware_buf()
1008 ret = wait_for_completion_interruptible(&buf->completion); in sync_cached_firmware_buf()
1024 struct firmware_buf *buf; in _request_firmware_prepare() local
1039 ret = fw_lookup_and_allocate_buf(name, &fw_cache, &buf); in _request_firmware_prepare()
1045 firmware->priv = buf; in _request_firmware_prepare()
1048 ret = sync_cached_firmware_buf(buf); in _request_firmware_prepare()
1050 fw_set_page_data(buf, firmware); in _request_firmware_prepare()
1063 struct firmware_buf *buf = fw->priv; in assign_firmware_buf() local
1066 if (!buf->size || is_fw_load_aborted(buf)) { in assign_firmware_buf()
1080 fw_add_devm_name(device, buf->fw_id); in assign_firmware_buf()
1086 if (buf->fwc->state == FW_LOADER_START_CACHE) { in assign_firmware_buf()
1087 if (fw_cache_piggyback_on_request(buf->fw_id)) in assign_firmware_buf()
1088 kref_get(&buf->ref); in assign_firmware_buf()
1092 fw_set_page_data(buf, fw); in assign_firmware_buf()
1376 struct firmware_buf *buf; in uncache_firmware() local
1384 buf = fw_lookup_buf(fw_name); in uncache_firmware()
1385 if (buf) { in uncache_firmware()
1386 fw_free_buf(buf); in uncache_firmware()