mwifiex: pcie: de-duplicate buffer allocation code
This code was duplicated as part of the PCIe FLR code added to this driver. Let's de-duplicate it to: * make things easier to read (mwifiex_pcie_free_buffers() now has a corresponding mwifiex_pcie_alloc_buffers()) * reduce likelihood of bugs * make error logging equally verbose * save lines of code! Also drop some of the commentary that isn't really needed. Signed-off-by: Brian Norris <briannorris@chromium.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
@@ -2860,6 +2860,61 @@ static void mwifiex_pcie_card_reset(struct mwifiex_adapter *adapter)
|
|||||||
schedule_work(&card->work);
|
schedule_work(&card->work);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mwifiex_pcie_alloc_buffers(struct mwifiex_adapter *adapter)
|
||||||
|
{
|
||||||
|
struct pcie_service_card *card = adapter->card;
|
||||||
|
const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
card->cmdrsp_buf = NULL;
|
||||||
|
ret = mwifiex_pcie_create_txbd_ring(adapter);
|
||||||
|
if (ret) {
|
||||||
|
mwifiex_dbg(adapter, ERROR, "Failed to create txbd ring\n");
|
||||||
|
goto err_cre_txbd;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = mwifiex_pcie_create_rxbd_ring(adapter);
|
||||||
|
if (ret) {
|
||||||
|
mwifiex_dbg(adapter, ERROR, "Failed to create rxbd ring\n");
|
||||||
|
goto err_cre_rxbd;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = mwifiex_pcie_create_evtbd_ring(adapter);
|
||||||
|
if (ret) {
|
||||||
|
mwifiex_dbg(adapter, ERROR, "Failed to create evtbd ring\n");
|
||||||
|
goto err_cre_evtbd;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = mwifiex_pcie_alloc_cmdrsp_buf(adapter);
|
||||||
|
if (ret) {
|
||||||
|
mwifiex_dbg(adapter, ERROR, "Failed to allocate cmdbuf buffer\n");
|
||||||
|
goto err_alloc_cmdbuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reg->sleep_cookie) {
|
||||||
|
ret = mwifiex_pcie_alloc_sleep_cookie_buf(adapter);
|
||||||
|
if (ret) {
|
||||||
|
mwifiex_dbg(adapter, ERROR, "Failed to allocate sleep_cookie buffer\n");
|
||||||
|
goto err_alloc_cookie;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
card->sleep_cookie_vbase = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_alloc_cookie:
|
||||||
|
mwifiex_pcie_delete_cmdrsp_buf(adapter);
|
||||||
|
err_alloc_cmdbuf:
|
||||||
|
mwifiex_pcie_delete_evtbd_ring(adapter);
|
||||||
|
err_cre_evtbd:
|
||||||
|
mwifiex_pcie_delete_rxbd_ring(adapter);
|
||||||
|
err_cre_rxbd:
|
||||||
|
mwifiex_pcie_delete_txbd_ring(adapter);
|
||||||
|
err_cre_txbd:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void mwifiex_pcie_free_buffers(struct mwifiex_adapter *adapter)
|
static void mwifiex_pcie_free_buffers(struct mwifiex_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct pcie_service_card *card = adapter->card;
|
struct pcie_service_card *card = adapter->card;
|
||||||
@@ -2877,20 +2932,12 @@ static void mwifiex_pcie_free_buffers(struct mwifiex_adapter *adapter)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* This function initializes the PCI-E host memory space, WCB rings, etc.
|
* This function initializes the PCI-E host memory space, WCB rings, etc.
|
||||||
*
|
|
||||||
* The following initializations steps are followed -
|
|
||||||
* - Allocate TXBD ring buffers
|
|
||||||
* - Allocate RXBD ring buffers
|
|
||||||
* - Allocate event BD ring buffers
|
|
||||||
* - Allocate command response ring buffer
|
|
||||||
* - Allocate sleep cookie buffer
|
|
||||||
*/
|
*/
|
||||||
static int mwifiex_init_pcie(struct mwifiex_adapter *adapter)
|
static int mwifiex_init_pcie(struct mwifiex_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct pcie_service_card *card = adapter->card;
|
struct pcie_service_card *card = adapter->card;
|
||||||
int ret;
|
int ret;
|
||||||
struct pci_dev *pdev = card->dev;
|
struct pci_dev *pdev = card->dev;
|
||||||
const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
|
|
||||||
|
|
||||||
pci_set_drvdata(pdev, card);
|
pci_set_drvdata(pdev, card);
|
||||||
|
|
||||||
@@ -2939,37 +2986,13 @@ static int mwifiex_init_pcie(struct mwifiex_adapter *adapter)
|
|||||||
pr_notice("PCI memory map Virt0: %p PCI memory map Virt2: %p\n",
|
pr_notice("PCI memory map Virt0: %p PCI memory map Virt2: %p\n",
|
||||||
card->pci_mmap, card->pci_mmap1);
|
card->pci_mmap, card->pci_mmap1);
|
||||||
|
|
||||||
card->cmdrsp_buf = NULL;
|
ret = mwifiex_pcie_alloc_buffers(adapter);
|
||||||
ret = mwifiex_pcie_create_txbd_ring(adapter);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_cre_txbd;
|
goto err_alloc_buffers;
|
||||||
ret = mwifiex_pcie_create_rxbd_ring(adapter);
|
|
||||||
if (ret)
|
|
||||||
goto err_cre_rxbd;
|
|
||||||
ret = mwifiex_pcie_create_evtbd_ring(adapter);
|
|
||||||
if (ret)
|
|
||||||
goto err_cre_evtbd;
|
|
||||||
ret = mwifiex_pcie_alloc_cmdrsp_buf(adapter);
|
|
||||||
if (ret)
|
|
||||||
goto err_alloc_cmdbuf;
|
|
||||||
if (reg->sleep_cookie) {
|
|
||||||
ret = mwifiex_pcie_alloc_sleep_cookie_buf(adapter);
|
|
||||||
if (ret)
|
|
||||||
goto err_alloc_cookie;
|
|
||||||
} else {
|
|
||||||
card->sleep_cookie_vbase = NULL;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
err_alloc_cookie:
|
return 0;
|
||||||
mwifiex_pcie_delete_cmdrsp_buf(adapter);
|
|
||||||
err_alloc_cmdbuf:
|
err_alloc_buffers:
|
||||||
mwifiex_pcie_delete_evtbd_ring(adapter);
|
|
||||||
err_cre_evtbd:
|
|
||||||
mwifiex_pcie_delete_rxbd_ring(adapter);
|
|
||||||
err_cre_rxbd:
|
|
||||||
mwifiex_pcie_delete_txbd_ring(adapter);
|
|
||||||
err_cre_txbd:
|
|
||||||
pci_iounmap(pdev, card->pci_mmap1);
|
pci_iounmap(pdev, card->pci_mmap1);
|
||||||
err_iomap2:
|
err_iomap2:
|
||||||
pci_release_region(pdev, 2);
|
pci_release_region(pdev, 2);
|
||||||
@@ -3183,73 +3206,25 @@ static void mwifiex_unregister_dev(struct mwifiex_adapter *adapter)
|
|||||||
card->adapter = NULL;
|
card->adapter = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function initializes the PCI-E host memory space, WCB rings, etc.
|
/*
|
||||||
*
|
* This function initializes the PCI-E host memory space, WCB rings, etc.,
|
||||||
* The following initializations steps are followed -
|
* similar to mwifiex_init_pcie(), but without resetting PCI-E state.
|
||||||
* - Allocate TXBD ring buffers
|
|
||||||
* - Allocate RXBD ring buffers
|
|
||||||
* - Allocate event BD ring buffers
|
|
||||||
* - Allocate command response ring buffer
|
|
||||||
* - Allocate sleep cookie buffer
|
|
||||||
* Part of mwifiex_init_pcie(), not reset the PCIE registers
|
|
||||||
*/
|
*/
|
||||||
static void mwifiex_pcie_up_dev(struct mwifiex_adapter *adapter)
|
static void mwifiex_pcie_up_dev(struct mwifiex_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct pcie_service_card *card = adapter->card;
|
struct pcie_service_card *card = adapter->card;
|
||||||
int ret;
|
int ret;
|
||||||
struct pci_dev *pdev = card->dev;
|
struct pci_dev *pdev = card->dev;
|
||||||
const struct mwifiex_pcie_card_reg *reg = card->pcie.reg;
|
|
||||||
|
|
||||||
/* tx_buf_size might be changed to 3584 by firmware during
|
/* tx_buf_size might be changed to 3584 by firmware during
|
||||||
* data transfer, we should reset it to default size.
|
* data transfer, we should reset it to default size.
|
||||||
*/
|
*/
|
||||||
adapter->tx_buf_size = card->pcie.tx_buf_size;
|
adapter->tx_buf_size = card->pcie.tx_buf_size;
|
||||||
|
|
||||||
card->cmdrsp_buf = NULL;
|
ret = mwifiex_pcie_alloc_buffers(adapter);
|
||||||
ret = mwifiex_pcie_create_txbd_ring(adapter);
|
if (!ret)
|
||||||
if (ret) {
|
return;
|
||||||
mwifiex_dbg(adapter, ERROR, "Failed to create txbd ring\n");
|
|
||||||
goto err_cre_txbd;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = mwifiex_pcie_create_rxbd_ring(adapter);
|
|
||||||
if (ret) {
|
|
||||||
mwifiex_dbg(adapter, ERROR, "Failed to create rxbd ring\n");
|
|
||||||
goto err_cre_rxbd;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = mwifiex_pcie_create_evtbd_ring(adapter);
|
|
||||||
if (ret) {
|
|
||||||
mwifiex_dbg(adapter, ERROR, "Failed to create evtbd ring\n");
|
|
||||||
goto err_cre_evtbd;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = mwifiex_pcie_alloc_cmdrsp_buf(adapter);
|
|
||||||
if (ret) {
|
|
||||||
mwifiex_dbg(adapter, ERROR, "Failed to allocate cmdbuf buffer\n");
|
|
||||||
goto err_alloc_cmdbuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reg->sleep_cookie) {
|
|
||||||
ret = mwifiex_pcie_alloc_sleep_cookie_buf(adapter);
|
|
||||||
if (ret) {
|
|
||||||
mwifiex_dbg(adapter, ERROR, "Failed to allocate sleep_cookie buffer\n");
|
|
||||||
goto err_alloc_cookie;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
card->sleep_cookie_vbase = NULL;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
err_alloc_cookie:
|
|
||||||
mwifiex_pcie_delete_cmdrsp_buf(adapter);
|
|
||||||
err_alloc_cmdbuf:
|
|
||||||
mwifiex_pcie_delete_evtbd_ring(adapter);
|
|
||||||
err_cre_evtbd:
|
|
||||||
mwifiex_pcie_delete_rxbd_ring(adapter);
|
|
||||||
err_cre_rxbd:
|
|
||||||
mwifiex_pcie_delete_txbd_ring(adapter);
|
|
||||||
err_cre_txbd:
|
|
||||||
pci_iounmap(pdev, card->pci_mmap1);
|
pci_iounmap(pdev, card->pci_mmap1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user