From: Ingo Molnar Date: Tue, 28 Oct 2008 15:26:12 +0000 (+0100) Subject: Merge commit 'v2.6.28-rc2' into x86/pci-ioapic-boot-irq-quirks X-Git-Tag: v2.6.29-rc1~587^2~4^21 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=7a9787e1eba95a166265e6a260cf30af04ef0a99;p=linux-2.6-omap-h63xx.git Merge commit 'v2.6.28-rc2' into x86/pci-ioapic-boot-irq-quirks --- 7a9787e1eba95a166265e6a260cf30af04ef0a99 diff --cc arch/x86/include/asm/pci.h index 00000000000,875b38edf19..647781298e7 mode 000000,100644..100644 --- a/arch/x86/include/asm/pci.h +++ b/arch/x86/include/asm/pci.h @@@ -1,0 -1,114 +1,116 @@@ + #ifndef _ASM_X86_PCI_H + #define _ASM_X86_PCI_H + + #include /* for struct page */ + #include + #include + #include + #include + #include + + #ifdef __KERNEL__ + + struct pci_sysdata { + int domain; /* PCI domain */ + int node; /* NUMA node */ + #ifdef CONFIG_X86_64 + void *iommu; /* IOMMU private data */ + #endif + }; + + extern int pci_routeirq; ++extern int noioapicquirk; ++extern int noioapicreroute; + + /* scan a bus after allocating a pci_sysdata for it */ + extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops, + int node); + extern struct pci_bus *pci_scan_bus_with_sysdata(int busno); + + static inline int pci_domain_nr(struct pci_bus *bus) + { + struct pci_sysdata *sd = bus->sysdata; + return sd->domain; + } + + static inline int pci_proc_domain(struct pci_bus *bus) + { + return pci_domain_nr(bus); + } + + + /* Can be used to override the logic in pci_scan_bus for skipping + already-configured bus numbers - to be used for buggy BIOSes + or architectures with incomplete PCI setup by the loader */ + + #ifdef CONFIG_PCI + extern unsigned int pcibios_assign_all_busses(void); + #else + #define pcibios_assign_all_busses() 0 + #endif + #define pcibios_scan_all_fns(a, b) 0 + + extern unsigned long pci_mem_start; + #define PCIBIOS_MIN_IO 0x1000 + #define PCIBIOS_MIN_MEM (pci_mem_start) + + #define PCIBIOS_MIN_CARDBUS_IO 0x4000 + + void pcibios_config_init(void); + struct pci_bus *pcibios_scan_root(int bus); + + void pcibios_set_master(struct pci_dev *dev); + void pcibios_penalize_isa_irq(int irq, int active); + struct irq_routing_table *pcibios_get_irq_routing_table(void); + int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq); + + + #define HAVE_PCI_MMAP + extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, + enum pci_mmap_state mmap_state, + int write_combine); + + + #ifdef CONFIG_PCI + extern void early_quirks(void); + static inline void pci_dma_burst_advice(struct pci_dev *pdev, + enum pci_dma_burst_strategy *strat, + unsigned long *strategy_parameter) + { + *strat = PCI_DMA_BURST_INFINITY; + *strategy_parameter = ~0UL; + } + #else + static inline void early_quirks(void) { } + #endif + + #endif /* __KERNEL__ */ + + #ifdef CONFIG_X86_32 + # include "pci_32.h" + #else + # include "pci_64.h" + #endif + + /* implement the pci_ DMA API in terms of the generic device dma_ one */ + #include + + /* generic pci stuff */ + #include + + #ifdef CONFIG_NUMA + /* Returns the node based on pci bus */ + static inline int __pcibus_to_node(struct pci_bus *bus) + { + struct pci_sysdata *sd = bus->sysdata; + + return sd->node; + } + + static inline cpumask_t __pcibus_to_cpumask(struct pci_bus *bus) + { + return node_to_cpumask(__pcibus_to_node(bus)); + } + #endif + + #endif /* _ASM_X86_PCI_H */ diff --cc include/linux/pci.h index cfc2297c3e2,c75b82bda32..9194adf82e2 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@@ -124,13 -130,10 +130,15 @@@ enum pci_dev_flags * generation too. */ PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) 1, + /* Device configuration is irrevocably lost if disabled into D3 */ + PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) 2, }; +enum pci_irq_reroute_variant { + INTEL_IRQ_REROUTE_VARIANT = 1, + MAX_IRQ_REROUTE_VARIANTS = 3 +}; + typedef unsigned short __bitwise pci_bus_flags_t; enum pci_bus_flags { PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1, @@@ -215,9 -218,9 +223,10 @@@ struct pci_dev unsigned int no_msi:1; /* device may not use msi */ unsigned int block_ucfg_access:1; /* userspace config space access is blocked */ unsigned int broken_parity_status:1; /* Device generates false positive parity */ + unsigned int irq_reroute_variant:2; /* device needs IRQ rerouting variant */ unsigned int msi_enabled:1; unsigned int msix_enabled:1; + unsigned int ari_enabled:1; /* ARI forwarding */ unsigned int is_managed:1; unsigned int is_pcie:1; pci_dev_flags_t dev_flags;