mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 16:12:59 +02:00
Merge branch 'pci/devres'
- Update resource request API documentation to encourage callers to supply a driver name when requesting resources (Philipp Stanner) - Export pci_intx_unmanaged() and pcim_intx() (always managed) so callers of pci_intx() (which is sometimes managed) can explicitly choose the one they need (Philipp Stanner) - Convert drivers from pci_intx() to always-managed pcim_intx() or never-managed pci_intx_unmanaged(): amd_sfh, ata (ahci, ata_piix, pata_rdc, sata_sil24, sata_sis, sata_uli, sata_vsc), bnx2x, bna, ntb, qtnfmac, rtsx, tifm_7xx1, vfio, xen-pciback (Philipp Stanner) - Remove pci_intx_unmanaged() since pci_intx() is now always unmanaged and pcim_intx() is always managed (Philipp Stanner) * pci/devres: PCI: Remove devres from pci_intx() net/ethernet: Use never-managed version of pci_intx() HID: amd_sfh: Use always-managed version of pcim_intx() wifi: qtnfmac: use always-managed version of pcim_intx() ata: Use always-managed version of pci_intx() PCI/MSI: Use never-managed version of pci_intx() vfio/pci: Use never-managed version of pci_intx() misc: Use never-managed version of pci_intx() ntb: Use never-managed version of pci_intx() drivers/xen: Use never-managed version of pci_intx() PCI: Export pci_intx_unmanaged() and pcim_intx() PCI: Encourage resource request API users to supply driver name
This commit is contained in:
commit
a3eda0e333
|
|
@ -1987,7 +1987,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
if (ahci_init_msi(pdev, n_ports, hpriv) < 0) {
|
||||
/* legacy intx interrupts */
|
||||
pci_intx(pdev, 1);
|
||||
pcim_intx(pdev, 1);
|
||||
}
|
||||
hpriv->irq = pci_irq_vector(pdev, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -1725,7 +1725,7 @@ static int piix_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
* message-signalled interrupts currently).
|
||||
*/
|
||||
if (port_flags & PIIX_FLAG_CHECKINTR)
|
||||
pci_intx(pdev, 1);
|
||||
pcim_intx(pdev, 1);
|
||||
|
||||
if (piix_check_450nx_errata(pdev)) {
|
||||
/* This writes into the master table but it does not
|
||||
|
|
|
|||
|
|
@ -340,7 +340,7 @@ static int rdc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
return rc;
|
||||
host->private_data = hpriv;
|
||||
|
||||
pci_intx(pdev, 1);
|
||||
pcim_intx(pdev, 1);
|
||||
|
||||
host->flags |= ATA_HOST_PARALLEL_SCAN;
|
||||
|
||||
|
|
|
|||
|
|
@ -1317,7 +1317,7 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
if (sata_sil24_msi && !pci_enable_msi(pdev)) {
|
||||
dev_info(&pdev->dev, "Using MSI\n");
|
||||
pci_intx(pdev, 0);
|
||||
pcim_intx(pdev, 0);
|
||||
}
|
||||
|
||||
pci_set_master(pdev);
|
||||
|
|
|
|||
|
|
@ -290,7 +290,7 @@ static int sis_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
}
|
||||
|
||||
pci_set_master(pdev);
|
||||
pci_intx(pdev, 1);
|
||||
pcim_intx(pdev, 1);
|
||||
return ata_host_activate(host, pdev->irq, ata_bmdma_interrupt,
|
||||
IRQF_SHARED, &sis_sht);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ static int uli_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
}
|
||||
|
||||
pci_set_master(pdev);
|
||||
pci_intx(pdev, 1);
|
||||
pcim_intx(pdev, 1);
|
||||
return ata_host_activate(host, pdev->irq, ata_bmdma_interrupt,
|
||||
IRQF_SHARED, &uli_sht);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -384,7 +384,7 @@ static int vsc_sata_init_one(struct pci_dev *pdev,
|
|||
pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x80);
|
||||
|
||||
if (pci_enable_msi(pdev) == 0)
|
||||
pci_intx(pdev, 0);
|
||||
pcim_intx(pdev, 0);
|
||||
|
||||
/*
|
||||
* Config offset 0x98 is "Extended Control and Status Register 0"
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ int amd_sfh_irq_init_v2(struct amd_mp2_dev *privdata)
|
|||
{
|
||||
int rc;
|
||||
|
||||
pci_intx(privdata->pdev, true);
|
||||
pcim_intx(privdata->pdev, true);
|
||||
|
||||
rc = devm_request_irq(&privdata->pdev->dev, privdata->pdev->irq,
|
||||
amd_sfh_irq_handler, 0, DRIVER_NAME, privdata);
|
||||
|
|
@ -248,7 +248,7 @@ static void amd_mp2_pci_remove(void *privdata)
|
|||
struct amd_mp2_dev *mp2 = privdata;
|
||||
amd_sfh_hid_client_deinit(privdata);
|
||||
mp2->mp2_ops->stop_all(mp2);
|
||||
pci_intx(mp2->pdev, false);
|
||||
pcim_intx(mp2->pdev, false);
|
||||
amd_sfh_clear_intr(mp2);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -289,7 +289,7 @@ static void amd_mp2_pci_remove(void *privdata)
|
|||
sfh_deinit_emp2();
|
||||
amd_sfh_hid_client_deinit(privdata);
|
||||
mp2->mp2_ops->stop_all(mp2);
|
||||
pci_intx(mp2->pdev, false);
|
||||
pcim_intx(mp2->pdev, false);
|
||||
amd_sfh_clear_intr(mp2);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ static void qtnf_pcie_init_irq(struct qtnf_pcie_bus_priv *priv, bool use_msi)
|
|||
|
||||
if (!priv->msi_enabled) {
|
||||
pr_warn("legacy PCIE interrupts enabled\n");
|
||||
pci_intx(pdev, 1);
|
||||
pcim_intx(pdev, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ static inline void pcim_addr_devres_clear(struct pcim_addr_devres *res)
|
|||
* @bar: BAR the range is within
|
||||
* @offset: offset from the BAR's start address
|
||||
* @maxlen: length in bytes, beginning at @offset
|
||||
* @name: name associated with the request
|
||||
* @name: name of the driver requesting the resource
|
||||
* @req_flags: flags for the request, e.g., for kernel-exclusive requests
|
||||
*
|
||||
* Returns: 0 on success, a negative error code on failure.
|
||||
|
|
@ -411,31 +411,12 @@ static inline bool mask_contains_bar(int mask, int bar)
|
|||
return mask & BIT(bar);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is a copy of pci_intx() used to bypass the problem of recursive
|
||||
* function calls due to the hybrid nature of pci_intx().
|
||||
*/
|
||||
static void __pcim_intx(struct pci_dev *pdev, int enable)
|
||||
{
|
||||
u16 pci_command, new;
|
||||
|
||||
pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
|
||||
|
||||
if (enable)
|
||||
new = pci_command & ~PCI_COMMAND_INTX_DISABLE;
|
||||
else
|
||||
new = pci_command | PCI_COMMAND_INTX_DISABLE;
|
||||
|
||||
if (new != pci_command)
|
||||
pci_write_config_word(pdev, PCI_COMMAND, new);
|
||||
}
|
||||
|
||||
static void pcim_intx_restore(struct device *dev, void *data)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
struct pcim_intx_devres *res = data;
|
||||
|
||||
__pcim_intx(pdev, res->orig_intx);
|
||||
pci_intx(pdev, res->orig_intx);
|
||||
}
|
||||
|
||||
static struct pcim_intx_devres *get_or_create_intx_devres(struct device *dev)
|
||||
|
|
@ -472,10 +453,11 @@ int pcim_intx(struct pci_dev *pdev, int enable)
|
|||
return -ENOMEM;
|
||||
|
||||
res->orig_intx = !enable;
|
||||
__pcim_intx(pdev, enable);
|
||||
pci_intx(pdev, enable);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pcim_intx);
|
||||
|
||||
static void pcim_disable_device(void *pdev_raw)
|
||||
{
|
||||
|
|
@ -723,7 +705,7 @@ EXPORT_SYMBOL(pcim_iounmap);
|
|||
* pcim_iomap_region - Request and iomap a PCI BAR
|
||||
* @pdev: PCI device to map IO resources for
|
||||
* @bar: Index of a BAR to map
|
||||
* @name: Name associated with the request
|
||||
* @name: Name of the driver requesting the resource
|
||||
*
|
||||
* Returns: __iomem pointer on success, an IOMEM_ERR_PTR on failure.
|
||||
*
|
||||
|
|
@ -790,7 +772,7 @@ EXPORT_SYMBOL(pcim_iounmap_region);
|
|||
* pcim_iomap_regions - Request and iomap PCI BARs (DEPRECATED)
|
||||
* @pdev: PCI device to map IO resources for
|
||||
* @mask: Mask of BARs to request and iomap
|
||||
* @name: Name associated with the requests
|
||||
* @name: Name of the driver requesting the resources
|
||||
*
|
||||
* Returns: 0 on success, negative error code on failure.
|
||||
*
|
||||
|
|
@ -855,9 +837,9 @@ static int _pcim_request_region(struct pci_dev *pdev, int bar, const char *name,
|
|||
|
||||
/**
|
||||
* pcim_request_region - Request a PCI BAR
|
||||
* @pdev: PCI device to requestion region for
|
||||
* @pdev: PCI device to request region for
|
||||
* @bar: Index of BAR to request
|
||||
* @name: Name associated with the request
|
||||
* @name: Name of the driver requesting the resource
|
||||
*
|
||||
* Returns: 0 on success, a negative error code on failure.
|
||||
*
|
||||
|
|
@ -874,9 +856,9 @@ EXPORT_SYMBOL(pcim_request_region);
|
|||
|
||||
/**
|
||||
* pcim_request_region_exclusive - Request a PCI BAR exclusively
|
||||
* @pdev: PCI device to requestion region for
|
||||
* @pdev: PCI device to request region for
|
||||
* @bar: Index of BAR to request
|
||||
* @name: Name associated with the request
|
||||
* @name: Name of the driver requesting the resource
|
||||
*
|
||||
* Returns: 0 on success, a negative error code on failure.
|
||||
*
|
||||
|
|
@ -932,7 +914,7 @@ static void pcim_release_all_regions(struct pci_dev *pdev)
|
|||
/**
|
||||
* pcim_request_all_regions - Request all regions
|
||||
* @pdev: PCI device to map IO resources for
|
||||
* @name: name associated with the request
|
||||
* @name: name of the driver requesting the resources
|
||||
*
|
||||
* Returns: 0 on success, negative error code on failure.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -3941,15 +3941,14 @@ EXPORT_SYMBOL(pci_release_region);
|
|||
* __pci_request_region - Reserved PCI I/O and memory resource
|
||||
* @pdev: PCI device whose resources are to be reserved
|
||||
* @bar: BAR to be reserved
|
||||
* @res_name: Name to be associated with resource.
|
||||
* @name: name of the driver requesting the resource
|
||||
* @exclusive: whether the region access is exclusive or not
|
||||
*
|
||||
* Returns: 0 on success, negative error code on failure.
|
||||
*
|
||||
* Mark the PCI region associated with PCI device @pdev BAR @bar as
|
||||
* being reserved by owner @res_name. Do not access any
|
||||
* address inside the PCI regions unless this call returns
|
||||
* successfully.
|
||||
* Mark the PCI region associated with PCI device @pdev BAR @bar as being
|
||||
* reserved by owner @name. Do not access any address inside the PCI regions
|
||||
* unless this call returns successfully.
|
||||
*
|
||||
* If @exclusive is set, then the region is marked so that userspace
|
||||
* is explicitly not allowed to map the resource via /dev/mem or
|
||||
|
|
@ -3959,13 +3958,13 @@ EXPORT_SYMBOL(pci_release_region);
|
|||
* message is also printed on failure.
|
||||
*/
|
||||
static int __pci_request_region(struct pci_dev *pdev, int bar,
|
||||
const char *res_name, int exclusive)
|
||||
const char *name, int exclusive)
|
||||
{
|
||||
if (pci_is_managed(pdev)) {
|
||||
if (exclusive == IORESOURCE_EXCLUSIVE)
|
||||
return pcim_request_region_exclusive(pdev, bar, res_name);
|
||||
return pcim_request_region_exclusive(pdev, bar, name);
|
||||
|
||||
return pcim_request_region(pdev, bar, res_name);
|
||||
return pcim_request_region(pdev, bar, name);
|
||||
}
|
||||
|
||||
if (pci_resource_len(pdev, bar) == 0)
|
||||
|
|
@ -3973,11 +3972,11 @@ static int __pci_request_region(struct pci_dev *pdev, int bar,
|
|||
|
||||
if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) {
|
||||
if (!request_region(pci_resource_start(pdev, bar),
|
||||
pci_resource_len(pdev, bar), res_name))
|
||||
pci_resource_len(pdev, bar), name))
|
||||
goto err_out;
|
||||
} else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) {
|
||||
if (!__request_mem_region(pci_resource_start(pdev, bar),
|
||||
pci_resource_len(pdev, bar), res_name,
|
||||
pci_resource_len(pdev, bar), name,
|
||||
exclusive))
|
||||
goto err_out;
|
||||
}
|
||||
|
|
@ -3994,14 +3993,13 @@ static int __pci_request_region(struct pci_dev *pdev, int bar,
|
|||
* pci_request_region - Reserve PCI I/O and memory resource
|
||||
* @pdev: PCI device whose resources are to be reserved
|
||||
* @bar: BAR to be reserved
|
||||
* @res_name: Name to be associated with resource
|
||||
* @name: name of the driver requesting the resource
|
||||
*
|
||||
* Returns: 0 on success, negative error code on failure.
|
||||
*
|
||||
* Mark the PCI region associated with PCI device @pdev BAR @bar as
|
||||
* being reserved by owner @res_name. Do not access any
|
||||
* address inside the PCI regions unless this call returns
|
||||
* successfully.
|
||||
* Mark the PCI region associated with PCI device @pdev BAR @bar as being
|
||||
* reserved by owner @name. Do not access any address inside the PCI regions
|
||||
* unless this call returns successfully.
|
||||
*
|
||||
* Returns 0 on success, or %EBUSY on error. A warning
|
||||
* message is also printed on failure.
|
||||
|
|
@ -4011,9 +4009,9 @@ static int __pci_request_region(struct pci_dev *pdev, int bar,
|
|||
* when pcim_enable_device() has been called in advance. This hybrid feature is
|
||||
* DEPRECATED! If you want managed cleanup, use the pcim_* functions instead.
|
||||
*/
|
||||
int pci_request_region(struct pci_dev *pdev, int bar, const char *res_name)
|
||||
int pci_request_region(struct pci_dev *pdev, int bar, const char *name)
|
||||
{
|
||||
return __pci_request_region(pdev, bar, res_name, 0);
|
||||
return __pci_request_region(pdev, bar, name, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_request_region);
|
||||
|
||||
|
|
@ -4036,13 +4034,13 @@ void pci_release_selected_regions(struct pci_dev *pdev, int bars)
|
|||
EXPORT_SYMBOL(pci_release_selected_regions);
|
||||
|
||||
static int __pci_request_selected_regions(struct pci_dev *pdev, int bars,
|
||||
const char *res_name, int excl)
|
||||
const char *name, int excl)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < PCI_STD_NUM_BARS; i++)
|
||||
if (bars & (1 << i))
|
||||
if (__pci_request_region(pdev, i, res_name, excl))
|
||||
if (__pci_request_region(pdev, i, name, excl))
|
||||
goto err_out;
|
||||
return 0;
|
||||
|
||||
|
|
@ -4059,7 +4057,7 @@ static int __pci_request_selected_regions(struct pci_dev *pdev, int bars,
|
|||
* pci_request_selected_regions - Reserve selected PCI I/O and memory resources
|
||||
* @pdev: PCI device whose resources are to be reserved
|
||||
* @bars: Bitmask of BARs to be requested
|
||||
* @res_name: Name to be associated with resource
|
||||
* @name: Name of the driver requesting the resources
|
||||
*
|
||||
* Returns: 0 on success, negative error code on failure.
|
||||
*
|
||||
|
|
@ -4069,9 +4067,9 @@ static int __pci_request_selected_regions(struct pci_dev *pdev, int bars,
|
|||
* DEPRECATED! If you want managed cleanup, use the pcim_* functions instead.
|
||||
*/
|
||||
int pci_request_selected_regions(struct pci_dev *pdev, int bars,
|
||||
const char *res_name)
|
||||
const char *name)
|
||||
{
|
||||
return __pci_request_selected_regions(pdev, bars, res_name, 0);
|
||||
return __pci_request_selected_regions(pdev, bars, name, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_request_selected_regions);
|
||||
|
||||
|
|
@ -4079,7 +4077,7 @@ EXPORT_SYMBOL(pci_request_selected_regions);
|
|||
* pci_request_selected_regions_exclusive - Request regions exclusively
|
||||
* @pdev: PCI device to request regions from
|
||||
* @bars: bit mask of BARs to request
|
||||
* @res_name: name to be associated with the requests
|
||||
* @name: name of the driver requesting the resources
|
||||
*
|
||||
* Returns: 0 on success, negative error code on failure.
|
||||
*
|
||||
|
|
@ -4089,9 +4087,9 @@ EXPORT_SYMBOL(pci_request_selected_regions);
|
|||
* DEPRECATED! If you want managed cleanup, use the pcim_* functions instead.
|
||||
*/
|
||||
int pci_request_selected_regions_exclusive(struct pci_dev *pdev, int bars,
|
||||
const char *res_name)
|
||||
const char *name)
|
||||
{
|
||||
return __pci_request_selected_regions(pdev, bars, res_name,
|
||||
return __pci_request_selected_regions(pdev, bars, name,
|
||||
IORESOURCE_EXCLUSIVE);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_request_selected_regions_exclusive);
|
||||
|
|
@ -4114,12 +4112,11 @@ EXPORT_SYMBOL(pci_release_regions);
|
|||
/**
|
||||
* pci_request_regions - Reserve PCI I/O and memory resources
|
||||
* @pdev: PCI device whose resources are to be reserved
|
||||
* @res_name: Name to be associated with resource.
|
||||
* @name: name of the driver requesting the resources
|
||||
*
|
||||
* Mark all PCI regions associated with PCI device @pdev as
|
||||
* being reserved by owner @res_name. Do not access any
|
||||
* address inside the PCI regions unless this call returns
|
||||
* successfully.
|
||||
* Mark all PCI regions associated with PCI device @pdev as being reserved by
|
||||
* owner @name. Do not access any address inside the PCI regions unless this
|
||||
* call returns successfully.
|
||||
*
|
||||
* Returns 0 on success, or %EBUSY on error. A warning
|
||||
* message is also printed on failure.
|
||||
|
|
@ -4129,22 +4126,22 @@ EXPORT_SYMBOL(pci_release_regions);
|
|||
* when pcim_enable_device() has been called in advance. This hybrid feature is
|
||||
* DEPRECATED! If you want managed cleanup, use the pcim_* functions instead.
|
||||
*/
|
||||
int pci_request_regions(struct pci_dev *pdev, const char *res_name)
|
||||
int pci_request_regions(struct pci_dev *pdev, const char *name)
|
||||
{
|
||||
return pci_request_selected_regions(pdev,
|
||||
((1 << PCI_STD_NUM_BARS) - 1), res_name);
|
||||
((1 << PCI_STD_NUM_BARS) - 1), name);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_request_regions);
|
||||
|
||||
/**
|
||||
* pci_request_regions_exclusive - Reserve PCI I/O and memory resources
|
||||
* @pdev: PCI device whose resources are to be reserved
|
||||
* @res_name: Name to be associated with resource.
|
||||
* @name: name of the driver requesting the resources
|
||||
*
|
||||
* Returns: 0 on success, negative error code on failure.
|
||||
*
|
||||
* Mark all PCI regions associated with PCI device @pdev as being reserved
|
||||
* by owner @res_name. Do not access any address inside the PCI regions
|
||||
* by owner @name. Do not access any address inside the PCI regions
|
||||
* unless this call returns successfully.
|
||||
*
|
||||
* pci_request_regions_exclusive() will mark the region so that /dev/mem
|
||||
|
|
@ -4158,10 +4155,10 @@ EXPORT_SYMBOL(pci_request_regions);
|
|||
* when pcim_enable_device() has been called in advance. This hybrid feature is
|
||||
* DEPRECATED! If you want managed cleanup, use the pcim_* functions instead.
|
||||
*/
|
||||
int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)
|
||||
int pci_request_regions_exclusive(struct pci_dev *pdev, const char *name)
|
||||
{
|
||||
return pci_request_selected_regions_exclusive(pdev,
|
||||
((1 << PCI_STD_NUM_BARS) - 1), res_name);
|
||||
((1 << PCI_STD_NUM_BARS) - 1), name);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_request_regions_exclusive);
|
||||
|
||||
|
|
@ -4488,11 +4485,6 @@ void pci_disable_parity(struct pci_dev *dev)
|
|||
* @enable: boolean: whether to enable or disable PCI INTx
|
||||
*
|
||||
* Enables/disables PCI INTx for device @pdev
|
||||
*
|
||||
* NOTE:
|
||||
* This is a "hybrid" function: It's normally unmanaged, but becomes managed
|
||||
* when pcim_enable_device() has been called in advance. This hybrid feature is
|
||||
* DEPRECATED! If you want managed cleanup, use pcim_intx() instead.
|
||||
*/
|
||||
void pci_intx(struct pci_dev *pdev, int enable)
|
||||
{
|
||||
|
|
@ -4505,15 +4497,10 @@ void pci_intx(struct pci_dev *pdev, int enable)
|
|||
else
|
||||
new = pci_command | PCI_COMMAND_INTX_DISABLE;
|
||||
|
||||
if (new != pci_command) {
|
||||
/* Preserve the "hybrid" behavior for backwards compatibility */
|
||||
if (pci_is_managed(pdev)) {
|
||||
WARN_ON_ONCE(pcim_intx(pdev, enable) != 0);
|
||||
return;
|
||||
}
|
||||
if (new == pci_command)
|
||||
return;
|
||||
|
||||
pci_write_config_word(pdev, PCI_COMMAND, new);
|
||||
}
|
||||
pci_write_config_word(pdev, PCI_COMMAND, new);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pci_intx);
|
||||
|
||||
|
|
|
|||
|
|
@ -2297,6 +2297,7 @@ static inline void pci_fixup_device(enum pci_fixup_pass pass,
|
|||
struct pci_dev *dev) { }
|
||||
#endif
|
||||
|
||||
int pcim_intx(struct pci_dev *pdev, int enabled);
|
||||
int pcim_request_all_regions(struct pci_dev *pdev, const char *name);
|
||||
void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
|
||||
void __iomem *pcim_iomap_region(struct pci_dev *pdev, int bar,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user