Lines Matching refs:fw_priv
58 static inline bool fw_sysfs_done(struct fw_priv *fw_priv) in fw_sysfs_done() argument
60 return __fw_state_check(fw_priv, FW_STATUS_DONE); in fw_sysfs_done()
63 static inline bool fw_sysfs_loading(struct fw_priv *fw_priv) in fw_sysfs_loading() argument
65 return __fw_state_check(fw_priv, FW_STATUS_LOADING); in fw_sysfs_loading()
68 static inline int fw_sysfs_wait_timeout(struct fw_priv *fw_priv, long timeout) in fw_sysfs_wait_timeout() argument
70 return __fw_state_wait_common(fw_priv, timeout); in fw_sysfs_wait_timeout()
76 struct fw_priv *fw_priv; member
85 static void __fw_load_abort(struct fw_priv *fw_priv) in __fw_load_abort() argument
91 if (fw_sysfs_done(fw_priv)) in __fw_load_abort()
94 list_del_init(&fw_priv->pending_list); in __fw_load_abort()
95 fw_state_aborted(fw_priv); in __fw_load_abort()
100 struct fw_priv *fw_priv = fw_sysfs->fw_priv; in fw_load_abort() local
102 __fw_load_abort(fw_priv); in fw_load_abort()
109 struct fw_priv *fw_priv; in kill_pending_fw_fallback_reqs() local
110 struct fw_priv *next; in kill_pending_fw_fallback_reqs()
113 list_for_each_entry_safe(fw_priv, next, &pending_fw_head, in kill_pending_fw_fallback_reqs()
115 if (!fw_priv->need_uevent || !only_kill_custom) in kill_pending_fw_fallback_reqs()
116 __fw_load_abort(fw_priv); in kill_pending_fw_fallback_reqs()
169 if (add_uevent_var(env, "FIRMWARE=%s", fw_sysfs->fw_priv->fw_name)) in do_firmware_uevent()
185 if (fw_sysfs->fw_priv) in firmware_uevent()
215 if (fw_sysfs->fw_priv) in firmware_loading_show()
216 loading = fw_sysfs_loading(fw_sysfs->fw_priv); in firmware_loading_show()
240 struct fw_priv *fw_priv; in firmware_loading_store() local
245 fw_priv = fw_sysfs->fw_priv; in firmware_loading_store()
246 if (fw_state_is_aborted(fw_priv)) in firmware_loading_store()
252 if (!fw_sysfs_done(fw_priv)) { in firmware_loading_store()
253 fw_free_paged_buf(fw_priv); in firmware_loading_store()
254 fw_state_start(fw_priv); in firmware_loading_store()
258 if (fw_sysfs_loading(fw_priv)) { in firmware_loading_store()
267 rc = fw_map_paged_buf(fw_priv); in firmware_loading_store()
273 fw_priv->data, fw_priv->size, in firmware_loading_store()
280 list_del_init(&fw_priv->pending_list); in firmware_loading_store()
282 fw_state_aborted(fw_priv); in firmware_loading_store()
285 fw_state_done(fw_priv); in firmware_loading_store()
304 static void firmware_rw_data(struct fw_priv *fw_priv, char *buffer, in firmware_rw_data() argument
308 memcpy(buffer, fw_priv->data + offset, count); in firmware_rw_data()
310 memcpy(fw_priv->data + offset, buffer, count); in firmware_rw_data()
313 static void firmware_rw(struct fw_priv *fw_priv, char *buffer, in firmware_rw() argument
322 page_data = kmap(fw_priv->pages[page_nr]); in firmware_rw()
329 kunmap(fw_priv->pages[page_nr]); in firmware_rw()
342 struct fw_priv *fw_priv; in firmware_data_read() local
346 fw_priv = fw_sysfs->fw_priv; in firmware_data_read()
347 if (!fw_priv || fw_sysfs_done(fw_priv)) { in firmware_data_read()
351 if (offset > fw_priv->size) { in firmware_data_read()
355 if (count > fw_priv->size - offset) in firmware_data_read()
356 count = fw_priv->size - offset; in firmware_data_read()
360 if (fw_priv->data) in firmware_data_read()
361 firmware_rw_data(fw_priv, buffer, offset, count, true); in firmware_data_read()
363 firmware_rw(fw_priv, buffer, offset, count, true); in firmware_data_read()
374 err = fw_grow_paged_buf(fw_sysfs->fw_priv, in fw_realloc_pages()
399 struct fw_priv *fw_priv; in firmware_data_write() local
406 fw_priv = fw_sysfs->fw_priv; in firmware_data_write()
407 if (!fw_priv || fw_sysfs_done(fw_priv)) { in firmware_data_write()
412 if (fw_priv->data) { in firmware_data_write()
413 if (offset + count > fw_priv->allocated_size) { in firmware_data_write()
417 firmware_rw_data(fw_priv, buffer, offset, count, false); in firmware_data_write()
425 firmware_rw(fw_priv, buffer, offset, count, false); in firmware_data_write()
428 fw_priv->size = max_t(size_t, offset + count, fw_priv->size); in firmware_data_write()
500 struct fw_priv *fw_priv = fw_sysfs->fw_priv; in fw_load_sysfs_fallback() local
503 if (!fw_priv->data) in fw_load_sysfs_fallback()
504 fw_priv->is_paged_buf = true; in fw_load_sysfs_fallback()
515 list_add(&fw_priv->pending_list, &pending_fw_head); in fw_load_sysfs_fallback()
519 fw_priv->need_uevent = true; in fw_load_sysfs_fallback()
521 dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_name); in fw_load_sysfs_fallback()
527 retval = fw_sysfs_wait_timeout(fw_priv, timeout); in fw_load_sysfs_fallback()
534 if (fw_state_is_aborted(fw_priv)) { in fw_load_sysfs_fallback()
539 } else if (fw_priv->is_paged_buf && !fw_priv->data) in fw_load_sysfs_fallback()
579 fw_sysfs->fw_priv = firmware->priv; in fw_load_from_user_helper()