devres: implement pcim_iomap_regions_request_all()
Some drivers need to reserve all PCI BARs to prevent other drivers misusing unoccupied BARs. pcim_iomap_regions_request_all() requests all BARs and iomap specified BARs. Signed-off-by: Tejun Heo <htejun@gmail.com> Cc: Greg Kroah-Hartman <gregkh@suse.de> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Jeff Garzik <jeff@garzik.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
Родитель
233f112042
Коммит
916fbfb7ae
|
@ -1045,6 +1045,8 @@ void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
|
|||
void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
|
||||
void __iomem * const *pcim_iomap_table(struct pci_dev *pdev);
|
||||
int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name);
|
||||
int pcim_iomap_regions_request_all(struct pci_dev *pdev, u16 mask,
|
||||
const char *name);
|
||||
void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask);
|
||||
|
||||
extern int pci_pci_problems;
|
||||
|
|
25
lib/devres.c
25
lib/devres.c
|
@ -297,6 +297,31 @@ int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name)
|
|||
}
|
||||
EXPORT_SYMBOL(pcim_iomap_regions);
|
||||
|
||||
/**
|
||||
* pcim_iomap_regions_request_all - Request all BARs and iomap specified ones
|
||||
* @pdev: PCI device to map IO resources for
|
||||
* @mask: Mask of BARs to iomap
|
||||
* @name: Name used when requesting regions
|
||||
*
|
||||
* Request all PCI BARs and iomap regions specified by @mask.
|
||||
*/
|
||||
int pcim_iomap_regions_request_all(struct pci_dev *pdev, u16 mask,
|
||||
const char *name)
|
||||
{
|
||||
int request_mask = ((1 << 6) - 1) & ~mask;
|
||||
int rc;
|
||||
|
||||
rc = pci_request_selected_regions(pdev, request_mask, name);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = pcim_iomap_regions(pdev, mask, name);
|
||||
if (rc)
|
||||
pci_release_selected_regions(pdev, request_mask);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(pcim_iomap_regions_request_all);
|
||||
|
||||
/**
|
||||
* pcim_iounmap_regions - Unmap and release PCI BARs
|
||||
* @pdev: PCI device to map IO resources for
|
||||
|
|
Загрузка…
Ссылка в новой задаче