Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6:
PCI: Run k8t_sound_hostbridge quirk only when needed
PCI: disable MSI on RX790
PCI: disable MSI on RD580
PCI: disable MSI on RS690
PCI: make pcie_get_readrq visible in pci.h
PCI: lets kill the 'PCI hidden behind bridge' message
pci/hotplug/cpqphp_ctrl.c: remove stale BKL use
PCI: Document pci_iomap()
PCI: quirk_e100_interrupt() called too early
PCI: Move prototypes for pci_bus_find_capability to include/linux/pci.h

+42 -23
+2 -1
Documentation/DocBook/deviceiobook.tmpl
··· 316 316 317 317 <chapter id="pubfunctions"> 318 318 <title>Public Functions Provided</title> 319 - !Einclude/asm-i386/io.h 319 + !Iinclude/asm-i386/io.h 320 + !Elib/iomap.c 320 321 </chapter> 321 322 322 323 </book>
+1 -3
drivers/pci/hotplug/cpqphp_ctrl.c
··· 1746 1746 static int event_thread(void* data) 1747 1747 { 1748 1748 struct controller *ctrl; 1749 - lock_kernel(); 1749 + 1750 1750 daemonize("phpd_event"); 1751 - 1752 - unlock_kernel(); 1753 1751 1754 1752 while (1) { 1755 1753 dbg("!!!!event_thread sleeping\n");
+1 -7
drivers/pci/pci.h
··· 5 5 extern int pci_create_sysfs_dev_files(struct pci_dev *pdev); 6 6 extern void pci_remove_sysfs_dev_files(struct pci_dev *pdev); 7 7 extern void pci_cleanup_rom(struct pci_dev *dev); 8 - extern int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, 9 - resource_size_t size, resource_size_t align, 10 - resource_size_t min, unsigned int type_mask, 11 - void (*alignf)(void *, struct resource *, 12 - resource_size_t, resource_size_t), 13 - void *alignf_data); 8 + 14 9 /* Firmware callbacks */ 15 10 extern pci_power_t (*platform_pci_choose_state)(struct pci_dev *dev, pm_message_t state); 16 11 extern int (*platform_pci_set_power_state)(struct pci_dev *dev, pci_power_t state); ··· 30 35 31 36 /* Functions for PCI Hotplug drivers to use */ 32 37 extern unsigned int pci_do_scan_bus(struct pci_bus *bus); 33 - extern int pci_bus_find_capability (struct pci_bus *bus, unsigned int devfn, int cap); 34 38 35 39 extern void pci_remove_legacy_files(struct pci_bus *bus); 36 40
+9 -9
drivers/pci/probe.c
··· 653 653 654 654 sprintf(child->name, (is_cardbus ? "PCI CardBus #%02x" : "PCI Bus #%02x"), child->number); 655 655 656 + /* Has only triggered on CardBus, fixup is in yenta_socket */ 656 657 while (bus->parent) { 657 658 if ((child->subordinate > bus->subordinate) || 658 659 (child->number > bus->subordinate) || 659 660 (child->number < bus->number) || 660 661 (child->subordinate < bus->number)) { 661 - printk(KERN_WARNING "PCI: Bus #%02x (-#%02x) is " 662 - "hidden behind%s bridge #%02x (-#%02x)%s\n", 663 - child->number, child->subordinate, 664 - bus->self->transparent ? " transparent" : " ", 665 - bus->number, bus->subordinate, 666 - pcibios_assign_all_busses() ? " " : 667 - " (try 'pci=assign-busses')"); 668 - printk(KERN_WARNING "Please report the result to " 669 - "<bk@suse.de> to fix this permanently\n"); 662 + pr_debug("PCI: Bus #%02x (-#%02x) is %s" 663 + "hidden behind%s bridge #%02x (-#%02x)\n", 664 + child->number, child->subordinate, 665 + (bus->number > child->subordinate && 666 + bus->subordinate < child->number) ? 667 + "wholly " : " partially", 668 + bus->self->transparent ? " transparent" : " ", 669 + bus->number, bus->subordinate); 670 670 } 671 671 bus = bus->parent; 672 672 }
+5 -2
drivers/pci/quirks.c
··· 947 947 unsigned char val; 948 948 949 949 pci_read_config_byte(dev, 0x50, &val); 950 - if (val == 0x88 || val == 0xc8) { 950 + if (val == 0xc8) { 951 951 /* Assume it's probably a MSI-K8T-Neo2Fir */ 952 952 printk(KERN_INFO "PCI: MSI-K8T-Neo2Fir, attempting to turn soundcard ON\n"); 953 953 pci_write_config_byte(dev, 0x50, val & (~0x40)); ··· 1485 1485 1486 1486 iounmap(csr); 1487 1487 } 1488 - DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_e100_interrupt); 1488 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_e100_interrupt); 1489 1489 1490 1490 static void __devinit fixup_rev1_53c810(struct pci_dev* dev) 1491 1491 { ··· 1650 1650 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000_PCIX, quirk_disable_all_msi); 1651 1651 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi); 1652 1652 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi); 1653 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RD580, quirk_disable_all_msi); 1654 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RX790, quirk_disable_all_msi); 1655 + DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS690, quirk_disable_all_msi); 1653 1656 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi); 1654 1657 1655 1658 /* Disable MSI on chipsets that are known to not support it */
+3
include/asm-i386/io.h
··· 112 112 * writew/writel functions and the other mmio helpers. The returned 113 113 * address is not guaranteed to be usable directly as a virtual 114 114 * address. 115 + * 116 + * If the area you are trying to map is a PCI BAR you should have a 117 + * look at pci_iomap(). 115 118 */ 116 119 117 120 static inline void __iomem * ioremap(unsigned long offset, unsigned long size)
+4
include/linux/pci.h
··· 557 557 int pcix_get_max_mmrbc(struct pci_dev *dev); 558 558 int pcix_get_mmrbc(struct pci_dev *dev); 559 559 int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc); 560 + int pcie_get_readrq(struct pci_dev *dev); 560 561 int pcie_set_readrq(struct pci_dev *dev, int rq); 561 562 void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); 562 563 int __must_check pci_assign_resource(struct pci_dev *dev, int i); ··· 578 577 int pci_set_power_state(struct pci_dev *dev, pci_power_t state); 579 578 pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); 580 579 int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable); 580 + 581 + /* Functions for PCI Hotplug drivers to use */ 582 + int pci_bus_find_capability (struct pci_bus *bus, unsigned int devfn, int cap); 581 583 582 584 /* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */ 583 585 void pci_bus_assign_resources(struct pci_bus *bus);
+3
include/linux/pci_ids.h
··· 360 360 #define PCI_DEVICE_ID_ATI_RS400_166 0x5a32 361 361 #define PCI_DEVICE_ID_ATI_RS400_200 0x5a33 362 362 #define PCI_DEVICE_ID_ATI_RS480 0x5950 363 + #define PCI_DEVICE_ID_ATI_RD580 0x5952 364 + #define PCI_DEVICE_ID_ATI_RX790 0x5957 365 + #define PCI_DEVICE_ID_ATI_RS690 0x7910 363 366 /* ATI IXP Chipset */ 364 367 #define PCI_DEVICE_ID_ATI_IXP200_IDE 0x4349 365 368 #define PCI_DEVICE_ID_ATI_IXP200_SMBUS 0x4353
+14 -1
lib/iomap.c
··· 240 240 EXPORT_SYMBOL(ioport_map); 241 241 EXPORT_SYMBOL(ioport_unmap); 242 242 243 - /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ 243 + /** 244 + * pci_iomap - create a virtual mapping cookie for a PCI BAR 245 + * @dev: PCI device that owns the BAR 246 + * @bar: BAR number 247 + * @maxlen: length of the memory to map 248 + * 249 + * Using this function you will get a __iomem address to your device BAR. 250 + * You can access it using ioread*() and iowrite*(). These functions hide 251 + * the details if this is a MMIO or PIO address space and will just do what 252 + * you expect from them in the correct way. 253 + * 254 + * @maxlen specifies the maximum length to map. If you want to get access to 255 + * the complete BAR without checking for its length first, pass %0 here. 256 + * */ 244 257 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) 245 258 { 246 259 unsigned long start = pci_resource_start(dev, bar);