Commit fc0f9f4d authored by Heiner Kallweit's avatar Heiner Kallweit Committed by David S. Miller

PCI: Add pcim_set_mwi(), a device-managed pci_set_mwi()

Add pcim_set_mwi(), a device-managed version of pci_set_mwi().
First user is the Realtek r8169 driver.
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Acked-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ec94c269
...@@ -1458,6 +1458,7 @@ struct pci_devres { ...@@ -1458,6 +1458,7 @@ struct pci_devres {
unsigned int pinned:1; unsigned int pinned:1;
unsigned int orig_intx:1; unsigned int orig_intx:1;
unsigned int restore_intx:1; unsigned int restore_intx:1;
unsigned int mwi:1;
u32 region_mask; u32 region_mask;
}; };
...@@ -1476,6 +1477,9 @@ static void pcim_release(struct device *gendev, void *res) ...@@ -1476,6 +1477,9 @@ static void pcim_release(struct device *gendev, void *res)
if (this->region_mask & (1 << i)) if (this->region_mask & (1 << i))
pci_release_region(dev, i); pci_release_region(dev, i);
if (this->mwi)
pci_clear_mwi(dev);
if (this->restore_intx) if (this->restore_intx)
pci_intx(dev, this->orig_intx); pci_intx(dev, this->orig_intx);
...@@ -3760,6 +3764,27 @@ int pci_set_mwi(struct pci_dev *dev) ...@@ -3760,6 +3764,27 @@ int pci_set_mwi(struct pci_dev *dev)
} }
EXPORT_SYMBOL(pci_set_mwi); EXPORT_SYMBOL(pci_set_mwi);
/**
* pcim_set_mwi - a device-managed pci_set_mwi()
* @dev: the PCI device for which MWI is enabled
*
* Managed pci_set_mwi().
*
* RETURNS: An appropriate -ERRNO error value on error, or zero for success.
*/
int pcim_set_mwi(struct pci_dev *dev)
{
struct pci_devres *dr;
dr = find_pci_dr(dev);
if (!dr)
return -ENOMEM;
dr->mwi = 1;
return pci_set_mwi(dev);
}
EXPORT_SYMBOL(pcim_set_mwi);
/** /**
* pci_try_set_mwi - enables memory-write-invalidate PCI transaction * pci_try_set_mwi - enables memory-write-invalidate PCI transaction
* @dev: the PCI device for which MWI is enabled * @dev: the PCI device for which MWI is enabled
......
...@@ -1072,6 +1072,7 @@ int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state); ...@@ -1072,6 +1072,7 @@ int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
int pci_set_cacheline_size(struct pci_dev *dev); int pci_set_cacheline_size(struct pci_dev *dev);
#define HAVE_PCI_SET_MWI #define HAVE_PCI_SET_MWI
int __must_check pci_set_mwi(struct pci_dev *dev); int __must_check pci_set_mwi(struct pci_dev *dev);
int __must_check pcim_set_mwi(struct pci_dev *dev);
int pci_try_set_mwi(struct pci_dev *dev); int pci_try_set_mwi(struct pci_dev *dev);
void pci_clear_mwi(struct pci_dev *dev); void pci_clear_mwi(struct pci_dev *dev);
void pci_intx(struct pci_dev *dev, int enable); void pci_intx(struct pci_dev *dev, int enable);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment