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: Heiner Kallweit <hkallweit1@gmail.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
ec94c2696f
commit
fc0f9f4d2f
@@ -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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
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);
|
|||||||
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);
|
||||||
|
Reference in New Issue
Block a user