mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-05 20:55:13 +07:00
mwifiex: wait firmware dump complete during card remove process
Wait for firmware dump complete in card remove function. For sdio interface, there are two diffenrent cases, card reset trigger sdio_work and firmware dump trigger sdio_work. Do code rearrangement for distinguish between these two cases. Signed-off-by: Xinming Hu <huxm@marvell.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Reviewed-by: Brian Norris <briannorris@chromium.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
d27121fca1
commit
41efaf5824
@ -51,6 +51,9 @@ static int mwifiex_pcie_probe_of(struct device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mwifiex_pcie_work(struct work_struct *work);
|
||||
static DECLARE_WORK(pcie_work, mwifiex_pcie_work);
|
||||
|
||||
static int
|
||||
mwifiex_map_pci_memory(struct mwifiex_adapter *adapter, struct sk_buff *skb,
|
||||
size_t size, int flags)
|
||||
@ -254,6 +257,8 @@ static void mwifiex_pcie_remove(struct pci_dev *pdev)
|
||||
if (!adapter || !adapter->priv_num)
|
||||
return;
|
||||
|
||||
cancel_work_sync(&pcie_work);
|
||||
|
||||
if (user_rmmod && !adapter->mfg_mode) {
|
||||
mwifiex_deauthenticate_all(adapter);
|
||||
|
||||
@ -2732,7 +2737,6 @@ static void mwifiex_pcie_work(struct work_struct *work)
|
||||
mwifiex_pcie_device_dump_work(save_adapter);
|
||||
}
|
||||
|
||||
static DECLARE_WORK(pcie_work, mwifiex_pcie_work);
|
||||
/* This function dumps FW information */
|
||||
static void mwifiex_pcie_device_dump(struct mwifiex_adapter *adapter)
|
||||
{
|
||||
|
@ -46,6 +46,9 @@
|
||||
*/
|
||||
static u8 user_rmmod;
|
||||
|
||||
static void mwifiex_sdio_work(struct work_struct *work);
|
||||
static DECLARE_WORK(sdio_work, mwifiex_sdio_work);
|
||||
|
||||
static struct mwifiex_if_ops sdio_ops;
|
||||
static unsigned long iface_work_flags;
|
||||
|
||||
@ -218,7 +221,7 @@ static int mwifiex_sdio_resume(struct device *dev)
|
||||
* This function removes the interface and frees up the card structure.
|
||||
*/
|
||||
static void
|
||||
mwifiex_sdio_remove(struct sdio_func *func)
|
||||
__mwifiex_sdio_remove(struct sdio_func *func)
|
||||
{
|
||||
struct sdio_mmc_card *card;
|
||||
struct mwifiex_adapter *adapter;
|
||||
@ -247,6 +250,13 @@ mwifiex_sdio_remove(struct sdio_func *func)
|
||||
mwifiex_remove_card(adapter);
|
||||
}
|
||||
|
||||
static void
|
||||
mwifiex_sdio_remove(struct sdio_func *func)
|
||||
{
|
||||
cancel_work_sync(&sdio_work);
|
||||
__mwifiex_sdio_remove(func);
|
||||
}
|
||||
|
||||
/*
|
||||
* SDIO suspend.
|
||||
*
|
||||
@ -2222,7 +2232,7 @@ static void mwifiex_recreate_adapter(struct sdio_mmc_card *card)
|
||||
* discovered and initializes them from scratch.
|
||||
*/
|
||||
|
||||
mwifiex_sdio_remove(func);
|
||||
__mwifiex_sdio_remove(func);
|
||||
|
||||
/*
|
||||
* Normally, we would let the driver core take care of releasing these.
|
||||
@ -2569,7 +2579,6 @@ static void mwifiex_sdio_work(struct work_struct *work)
|
||||
mwifiex_sdio_card_reset_work(save_adapter);
|
||||
}
|
||||
|
||||
static DECLARE_WORK(sdio_work, mwifiex_sdio_work);
|
||||
/* This function resets the card */
|
||||
static void mwifiex_sdio_card_reset(struct mwifiex_adapter *adapter)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user