From: Daniel Wagner <daniel.wagner@xxxxxxxxxxxx> Loading firmware is an operation many drivers implement in various ways around the completion API. And most of them do it almost in the same way. Let's reuse the firmware_stat API which is used also by the firmware_class loader. Apart of streamlining the firmware loading states we also document it slightly better. Signed-off-by: Daniel Wagner <daniel.wagner@xxxxxxxxxxxx> --- drivers/net/wireless/intel/iwlegacy/4965-mac.c | 8 ++++---- drivers/net/wireless/intel/iwlegacy/common.h | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/wireless/intel/iwlegacy/4965-mac.c index a91d170..d5e5808 100644 --- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c +++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c @@ -5005,7 +5005,7 @@ il4965_ucode_callback(const struct firmware *ucode_raw, void *context) /* We have our copies now, allow OS release its copies */ release_firmware(ucode_raw); - complete(&il->_4965.firmware_loading_complete); + fw_loading_done(il->_4965.fw_st); return; try_again: @@ -5019,7 +5019,7 @@ err_pci_alloc: IL_ERR("failed to allocate pci memory\n"); il4965_dealloc_ucode_pci(il); out_unbind: - complete(&il->_4965.firmware_loading_complete); + fw_loading_done(il->_4965.fw_st); device_release_driver(&il->pci_dev->dev); release_firmware(ucode_raw); } @@ -6678,7 +6678,7 @@ il4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) il_power_initialize(il); - init_completion(&il->_4965.firmware_loading_complete); + firmware_stat_init(&il->_4965.fw_st); err = il4965_request_firmware(il, true); if (err) @@ -6716,7 +6716,7 @@ il4965_pci_remove(struct pci_dev *pdev) if (!il) return; - wait_for_completion(&il->_4965.firmware_loading_complete); + fw_loading_wait(il->_4965.fw_st); D_INFO("*** UNLOAD DRIVER ***\n"); diff --git a/drivers/net/wireless/intel/iwlegacy/common.h b/drivers/net/wireless/intel/iwlegacy/common.h index 726ede3..94af7b7 100644 --- a/drivers/net/wireless/intel/iwlegacy/common.h +++ b/drivers/net/wireless/intel/iwlegacy/common.h @@ -32,6 +32,7 @@ #include <linux/leds.h> #include <linux/wait.h> #include <linux/io.h> +#include <linux/firmware.h> #include <net/mac80211.h> #include <net/ieee80211_radiotap.h> @@ -1357,7 +1358,7 @@ struct il_priv { bool last_phy_res_valid; u32 ampdu_ref; - struct completion firmware_loading_complete; + struct firmware_stat fw_st; /* * chain noise reset and gain commands are the -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html