Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7be0f5b5 authored by Avinash Patil's avatar Avinash Patil Committed by Kalle Valo
Browse files

mwifiex: enable MSI interrupt support in pcie



Newer pcie devices (8897 onwards) support MSI. This
patch enables it.

Signed-off-by: default avatarAvinash Patil <patila@marvell.com>
Signed-off-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent f3b35f28
Loading
Loading
Loading
Loading
+25 −8
Original line number Original line Diff line number Diff line
@@ -2599,6 +2599,30 @@ static void mwifiex_pcie_cleanup(struct mwifiex_adapter *adapter)
	kfree(card);
	kfree(card);
}
}


static int mwifiex_pcie_request_irq(struct mwifiex_adapter *adapter)
{
	int ret;
	struct pcie_service_card *card = adapter->card;
	struct pci_dev *pdev = card->dev;

	if (pci_enable_msi(pdev) != 0)
		pci_disable_msi(pdev);
	else
		card->msi_enable = 1;

	mwifiex_dbg(adapter, INFO, "msi_enable = %d\n", card->msi_enable);

	ret = request_irq(pdev->irq, mwifiex_pcie_interrupt, IRQF_SHARED,
			  "MRVL_PCIE", pdev);
	if (ret) {
		pr_err("request_irq failed: ret=%d\n", ret);
		adapter->card = NULL;
		return -1;
	}

	return 0;
}

/*
/*
 * This function registers the PCIE device.
 * This function registers the PCIE device.
 *
 *
@@ -2606,21 +2630,14 @@ static void mwifiex_pcie_cleanup(struct mwifiex_adapter *adapter)
 */
 */
static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
{
{
	int ret;
	struct pcie_service_card *card = adapter->card;
	struct pcie_service_card *card = adapter->card;
	struct pci_dev *pdev = card->dev;
	struct pci_dev *pdev = card->dev;


	/* save adapter pointer in card */
	/* save adapter pointer in card */
	card->adapter = adapter;
	card->adapter = adapter;


	ret = request_irq(pdev->irq, mwifiex_pcie_interrupt, IRQF_SHARED,
	if (mwifiex_pcie_request_irq(adapter))
			  "MRVL_PCIE", pdev);
	if (ret) {
		mwifiex_dbg(adapter, ERROR,
			    "request_irq failed: ret=%d\n", ret);
		adapter->card = NULL;
		return -1;
		return -1;
	}


	adapter->dev = &pdev->dev;
	adapter->dev = &pdev->dev;
	adapter->tx_buf_size = card->pcie.tx_buf_size;
	adapter->tx_buf_size = card->pcie.tx_buf_size;
+1 −0
Original line number Original line Diff line number Diff line
@@ -326,6 +326,7 @@ struct pcie_service_card {
	dma_addr_t sleep_cookie_pbase;
	dma_addr_t sleep_cookie_pbase;
	void __iomem *pci_mmap;
	void __iomem *pci_mmap;
	void __iomem *pci_mmap1;
	void __iomem *pci_mmap1;
	int msi_enable;
};
};


static inline int
static inline int