mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	 96a3e8af5a
			
		
	
	
		96a3e8af5a
		
	
	
	
	
		
			
			PCI device hotplug
     - Remove ACPI PCI subdrivers (Jiang Liu, Myron Stowe)
     - Make acpiphp builtin only, not modular (Jiang Liu)
     - Add acpiphp mutual exclusion (Jiang Liu)
 
   Power management
     - Skip "PME enabled/disabled" messages when not supported (Rafael Wysocki)
     - Fix fallback to PCI_D0 (Rafael Wysocki)
 
   Miscellaneous
     - Factor quirk_io_region (Yinghai Lu)
     - Cache MSI capability offsets & cleanup (Gavin Shan, Bjorn Helgaas)
     - Clean up EISA resource initialization and logging (Bjorn Helgaas)
     - Fix prototype warnings (Andy Shevchenko, Bjorn Helgaas)
     - MIPS: Initialize of_node before scanning bus (Gabor Juhos)
     - Fix pcibios_get_phb_of_node() declaration "weak" annotation (Gabor Juhos)
     - Add MSI INTX_DISABLE quirks for AR8161/AR8162/etc (Xiong Huang)
     - Fix aer_inject return values (Prarit Bhargava)
     - Remove PME/ACPI dependency (Andrew Murray)
     - Use shared PCI_BUS_NUM() and PCI_DEVID() (Shuah Khan)
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.11 (GNU/Linux)
 
 iQIcBAABAgAGBQJRfhSWAAoJEFmIoMA60/r8GrYQAIHDsyZIuJSf6g+8Td1h+PIC
 YD3wQhbyrDqQDuKU4+9cz+JsbHmnozUGA4UmlwmOGBxEa/Uauspb6yX1P1+x9Ok1
 WD7Ar3BlA5OuYI/1L1mgCiA428MTujwoR4fPnC0+KFy8xk1tBpmhzzeOFohbKyFF
 hMBO/Xt9tCzPATJ1LhjIH4xAykfDkbnPNHNcUKRoAkRo0CO0lS8gcTk0shXXSNng
 p9kQ6c4cYZvlRIJTwlawWV09nr7mDsBYa3JClqXYZufUWfEwvIuhisJxCJ57sWi9
 t+Ev8dm7VM6Cr5dV+ORArlboBFrq4f/W5U9j9GPFrRplwf+WbNT6tNGSpSDq8XhU
 Q7JjNgPWVdWXe1vIsMwaO49zi45/bNehuCSFLZiyPZwedMk764tys+iYw+tMRtv1
 tBR7lwESSXfagmvWyQAuQOTy6Rj26BPd2T8e2lMsvsuQO9mCyTK6Ey3YyKuqKQK/
 l5Gns4vv4eaCjGXqqDGiydUjSes+r/v1bu43XiRnwPQJUKb5kr5SjN5/zSMBuUgm
 TLT/bnv8qvdFxCpVQJFv4k/uzULARMdbvLtTy8osB14vNHX9jPn+xORjLaZNiO6O
 7fFispMU8Om56hNkD6C451r3icRjjGlD7OA8KOlbZ8f876sLzGV9i6P9gwCoRdEB
 wclDPsN7kAzw/V2sEE60
 =bj8i
 -----END PGP SIGNATURE-----
Merge tag 'pci-v3.10-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
Pull PCI updates from Bjorn Helgaas:
 "PCI changes for the v3.10 merge window:
  PCI device hotplug
   - Remove ACPI PCI subdrivers (Jiang Liu, Myron Stowe)
   - Make acpiphp builtin only, not modular (Jiang Liu)
   - Add acpiphp mutual exclusion (Jiang Liu)
  Power management
   - Skip "PME enabled/disabled" messages when not supported (Rafael
     Wysocki)
   - Fix fallback to PCI_D0 (Rafael Wysocki)
  Miscellaneous
   - Factor quirk_io_region (Yinghai Lu)
   - Cache MSI capability offsets & cleanup (Gavin Shan, Bjorn Helgaas)
   - Clean up EISA resource initialization and logging (Bjorn Helgaas)
   - Fix prototype warnings (Andy Shevchenko, Bjorn Helgaas)
   - MIPS: Initialize of_node before scanning bus (Gabor Juhos)
   - Fix pcibios_get_phb_of_node() declaration "weak" annotation (Gabor
     Juhos)
   - Add MSI INTX_DISABLE quirks for AR8161/AR8162/etc (Xiong Huang)
   - Fix aer_inject return values (Prarit Bhargava)
   - Remove PME/ACPI dependency (Andrew Murray)
   - Use shared PCI_BUS_NUM() and PCI_DEVID() (Shuah Khan)"
* tag 'pci-v3.10-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (63 commits)
  vfio-pci: Use cached MSI/MSI-X capabilities
  vfio-pci: Use PCI_MSIX_TABLE_BIR, not PCI_MSIX_FLAGS_BIRMASK
  PCI: Remove "extern" from function declarations
  PCI: Use PCI_MSIX_TABLE_BIR, not PCI_MSIX_FLAGS_BIRMASK
  PCI: Drop msi_mask_reg() and remove drivers/pci/msi.h
  PCI: Use msix_table_size() directly, drop multi_msix_capable()
  PCI: Drop msix_table_offset_reg() and msix_pba_offset_reg() macros
  PCI: Drop is_64bit_address() and is_mask_bit_support() macros
  PCI: Drop msi_data_reg() macro
  PCI: Drop msi_lower_address_reg() and msi_upper_address_reg() macros
  PCI: Drop msi_control_reg() macro and use PCI_MSI_FLAGS directly
  PCI: Use cached MSI/MSI-X offsets from dev, not from msi_desc
  PCI: Clean up MSI/MSI-X capability #defines
  PCI: Use cached MSI-X cap while enabling MSI-X
  PCI: Use cached MSI cap while enabling MSI interrupts
  PCI: Remove MSI/MSI-X cap check in pci_msi_check_device()
  PCI: Cache MSI/MSI-X capability offsets in struct pci_dev
  PCI: Use u8, not int, for PM capability offset
  [SCSI] megaraid_sas: Use correct #define for MSI-X capability
  PCI: Remove "extern" from function declarations
  ...
		
	
			
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Minimalist driver for a generic PCI-to-EISA bridge.
 | |
|  *
 | |
|  * (C) 2003 Marc Zyngier <maz@wild-wind.fr.eu.org>
 | |
|  *
 | |
|  * This code is released under the GPL version 2.
 | |
|  *
 | |
|  * Ivan Kokshaysky <ink@jurassic.park.msu.ru> :
 | |
|  * Generalisation from i82375 to PCI_CLASS_BRIDGE_EISA.
 | |
|  */
 | |
| 
 | |
| #include <linux/kernel.h>
 | |
| #include <linux/device.h>
 | |
| #include <linux/eisa.h>
 | |
| #include <linux/pci.h>
 | |
| #include <linux/module.h>
 | |
| #include <linux/init.h>
 | |
| 
 | |
| /* There is only *one* pci_eisa device per machine, right ? */
 | |
| static struct eisa_root_device pci_eisa_root;
 | |
| 
 | |
| static int __init pci_eisa_init(struct pci_dev *pdev)
 | |
| {
 | |
| 	int rc, i;
 | |
| 	struct resource *res, *bus_res = NULL;
 | |
| 
 | |
| 	if ((rc = pci_enable_device (pdev))) {
 | |
| 		dev_err(&pdev->dev, "Could not enable device\n");
 | |
| 		return rc;
 | |
| 	}
 | |
| 
 | |
| 	/*
 | |
| 	 * The Intel 82375 PCI-EISA bridge is a subtractive-decode PCI
 | |
| 	 * device, so the resources available on EISA are the same as those
 | |
| 	 * available on the 82375 bus.  This works the same as a PCI-PCI
 | |
| 	 * bridge in subtractive-decode mode (see pci_read_bridge_bases()).
 | |
| 	 * We assume other PCI-EISA bridges are similar.
 | |
| 	 *
 | |
| 	 * eisa_root_register() can only deal with a single io port resource,
 | |
| 	*  so we use the first valid io port resource.
 | |
| 	 */
 | |
| 	pci_bus_for_each_resource(pdev->bus, res, i)
 | |
| 		if (res && (res->flags & IORESOURCE_IO)) {
 | |
| 			bus_res = res;
 | |
| 			break;
 | |
| 		}
 | |
| 
 | |
| 	if (!bus_res) {
 | |
| 		dev_err(&pdev->dev, "No resources available\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	pci_eisa_root.dev              = &pdev->dev;
 | |
| 	pci_eisa_root.res	       = bus_res;
 | |
| 	pci_eisa_root.bus_base_addr    = bus_res->start;
 | |
| 	pci_eisa_root.slots	       = EISA_MAX_SLOTS;
 | |
| 	pci_eisa_root.dma_mask         = pdev->dma_mask;
 | |
| 	dev_set_drvdata(pci_eisa_root.dev, &pci_eisa_root);
 | |
| 
 | |
| 	if (eisa_root_register (&pci_eisa_root)) {
 | |
| 		dev_err(&pdev->dev, "Could not register EISA root\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * We have to call pci_eisa_init_early() before pnpacpi_init()/isapnp_init().
 | |
|  *   Otherwise pnp resource will get enabled early and could prevent eisa
 | |
|  *   to be initialized.
 | |
|  * Also need to make sure pci_eisa_init_early() is called after
 | |
|  * x86/pci_subsys_init().
 | |
|  * So need to use subsys_initcall_sync with it.
 | |
|  */
 | |
| static int __init pci_eisa_init_early(void)
 | |
| {
 | |
| 	struct pci_dev *dev = NULL;
 | |
| 	int ret;
 | |
| 
 | |
| 	for_each_pci_dev(dev)
 | |
| 		if ((dev->class >> 8) == PCI_CLASS_BRIDGE_EISA) {
 | |
| 			ret = pci_eisa_init(dev);
 | |
| 			if (ret)
 | |
| 				return ret;
 | |
| 		}
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| subsys_initcall_sync(pci_eisa_init_early);
 |