4
#include <linux/mm.h> /* for struct page */
5
#include <linux/types.h>
6
#include <linux/slab.h>
7
#include <linux/string.h>
8
#include <asm/scatterlist.h>
10
#include <asm/x86_init.h>
15
int domain; /* PCI domain */
16
int node; /* NUMA node */
18
void *iommu; /* IOMMU private data */
22
extern int pci_routeirq;
23
extern int noioapicquirk;
24
extern int noioapicreroute;
26
/* scan a bus after allocating a pci_sysdata for it */
27
extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops,
29
extern struct pci_bus *pci_scan_bus_with_sysdata(int busno);
33
#ifdef CONFIG_PCI_DOMAINS
34
static inline int pci_domain_nr(struct pci_bus *bus)
36
struct pci_sysdata *sd = bus->sysdata;
40
static inline int pci_proc_domain(struct pci_bus *bus)
42
return pci_domain_nr(bus);
46
/* Can be used to override the logic in pci_scan_bus for skipping
47
already-configured bus numbers - to be used for buggy BIOSes
48
or architectures with incomplete PCI setup by the loader */
50
extern unsigned int pcibios_assign_all_busses(void);
51
extern int pci_legacy_init(void);
53
# define x86_default_pci_init pci_acpi_init
55
# define x86_default_pci_init pci_legacy_init
58
# define pcibios_assign_all_busses() 0
59
# define x86_default_pci_init NULL
62
extern unsigned long pci_mem_start;
63
#define PCIBIOS_MIN_IO 0x1000
64
#define PCIBIOS_MIN_MEM (pci_mem_start)
66
#define PCIBIOS_MIN_CARDBUS_IO 0x4000
68
extern int pcibios_enabled;
69
void pcibios_config_init(void);
70
struct pci_bus *pcibios_scan_root(int bus);
72
void pcibios_set_master(struct pci_dev *dev);
73
void pcibios_penalize_isa_irq(int irq, int active);
74
struct irq_routing_table *pcibios_get_irq_routing_table(void);
75
int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
79
extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
80
enum pci_mmap_state mmap_state,
85
extern void early_quirks(void);
86
static inline void pci_dma_burst_advice(struct pci_dev *pdev,
87
enum pci_dma_burst_strategy *strat,
88
unsigned long *strategy_parameter)
90
*strat = PCI_DMA_BURST_INFINITY;
91
*strategy_parameter = ~0UL;
94
static inline void early_quirks(void) { }
97
extern void pci_iommu_alloc(void);
100
/* MSI arch specific hooks */
101
static inline int x86_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
103
return x86_msi.setup_msi_irqs(dev, nvec, type);
106
static inline void x86_teardown_msi_irqs(struct pci_dev *dev)
108
x86_msi.teardown_msi_irqs(dev);
111
static inline void x86_teardown_msi_irq(unsigned int irq)
113
x86_msi.teardown_msi_irq(irq);
115
#define arch_setup_msi_irqs x86_setup_msi_irqs
116
#define arch_teardown_msi_irqs x86_teardown_msi_irqs
117
#define arch_teardown_msi_irq x86_teardown_msi_irq
118
/* implemented in arch/x86/kernel/apic/io_apic. */
119
int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
120
void native_teardown_msi_irq(unsigned int irq);
121
/* default to the implementation in drivers/lib/msi.c */
122
#define HAVE_DEFAULT_MSI_TEARDOWN_IRQS
123
void default_teardown_msi_irqs(struct pci_dev *dev);
125
#define native_setup_msi_irqs NULL
126
#define native_teardown_msi_irq NULL
127
#define default_teardown_msi_irqs NULL
130
#define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys)
132
#endif /* __KERNEL__ */
138
/* implement the pci_ DMA API in terms of the generic device dma_ one */
139
#include <asm-generic/pci-dma-compat.h>
141
/* generic pci stuff */
142
#include <asm-generic/pci.h>
143
#define PCIBIOS_MAX_MEM_32 0xffffffff
146
/* Returns the node based on pci bus */
147
static inline int __pcibus_to_node(const struct pci_bus *bus)
149
const struct pci_sysdata *sd = bus->sysdata;
154
static inline const struct cpumask *
155
cpumask_of_pcibus(const struct pci_bus *bus)
159
node = __pcibus_to_node(bus);
160
return (node == -1) ? cpu_online_mask :
161
cpumask_of_node(node);
165
#endif /* _ASM_X86_PCI_H */