]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - arch/x86/include/asm/pci.h
UBUNTU: Ubuntu-5.15.0-39.42
[mirror_ubuntu-jammy-kernel.git] / arch / x86 / include / asm / pci.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
1965aae3
PA
2#ifndef _ASM_X86_PCI_H
3#define _ASM_X86_PCI_H
f3e6f164
GKH
4
5#include <linux/mm.h> /* for struct page */
6#include <linux/types.h>
7#include <linux/slab.h>
8#include <linux/string.h>
84be456f 9#include <linux/scatterlist.h>
98fa15f3 10#include <linux/numa.h>
f3e6f164 11#include <asm/io.h>
eb243d1d 12#include <asm/memtype.h>
294ee6f8 13#include <asm/x86_init.h>
f3e6f164 14
f3e6f164
GKH
15struct pci_sysdata {
16 int domain; /* PCI domain */
17 int node; /* NUMA node */
6c0cc950 18#ifdef CONFIG_ACPI
7b199811 19 struct acpi_device *companion; /* ACPI companion device */
6c0cc950 20#endif
f3e6f164 21#ifdef CONFIG_X86_64
69bdb7bc 22 void *iommu; /* IOMMU private data */
f3e6f164 23#endif
92016ba5
JO
24#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
25 void *fwnode; /* IRQ domain for MSI assignment */
26#endif
3161832d 27#if IS_ENABLED(CONFIG_VMD)
34067c56 28 struct pci_dev *vmd_dev; /* VMD Device if in Intel VMD domain */
3161832d 29#endif
f3e6f164
GKH
30};
31
07156509 32extern int pci_routeirq;
a9322f64 33extern int noioapicquirk;
41b9eb26 34extern int noioapicreroute;
07156509 35
aad6aa0c
CH
36static inline struct pci_sysdata *to_pci_sysdata(const struct pci_bus *bus)
37{
38 return bus->sysdata;
39}
40
b9303bb1
JD
41#ifdef CONFIG_PCI
42
23b90cfd 43#ifdef CONFIG_PCI_DOMAINS
f3e6f164
GKH
44static inline int pci_domain_nr(struct pci_bus *bus)
45{
aad6aa0c 46 return to_pci_sysdata(bus)->domain;
f3e6f164
GKH
47}
48
49static inline int pci_proc_domain(struct pci_bus *bus)
50{
51 return pci_domain_nr(bus);
52}
23b90cfd 53#endif
f3e6f164 54
92016ba5
JO
55#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
56static inline void *_pci_root_bus_fwnode(struct pci_bus *bus)
57{
aad6aa0c 58 return to_pci_sysdata(bus)->fwnode;
92016ba5
JO
59}
60
61#define pci_root_bus_fwnode _pci_root_bus_fwnode
62#endif
63
aad6aa0c 64#if IS_ENABLED(CONFIG_VMD)
3161832d
KB
65static inline bool is_vmd(struct pci_bus *bus)
66{
34067c56 67 return to_pci_sysdata(bus)->vmd_dev != NULL;
3161832d 68}
aad6aa0c
CH
69#else
70#define is_vmd(bus) false
71#endif /* CONFIG_VMD */
3161832d 72
f3e6f164
GKH
73/* Can be used to override the logic in pci_scan_bus for skipping
74 already-configured bus numbers - to be used for buggy BIOSes
75 or architectures with incomplete PCI setup by the loader */
76
f3e6f164 77extern unsigned int pcibios_assign_all_busses(void);
b72d0db9 78extern int pci_legacy_init(void);
f3e6f164 79#else
9304d162 80static inline int pcibios_assign_all_busses(void) { return 0; }
f3e6f164 81#endif
f3e6f164
GKH
82
83extern unsigned long pci_mem_start;
84#define PCIBIOS_MIN_IO 0x1000
85#define PCIBIOS_MIN_MEM (pci_mem_start)
86
87#define PCIBIOS_MIN_CARDBUS_IO 0x4000
88
5bd5a452 89extern int pcibios_enabled;
49886cf4 90void pcibios_scan_root(int bus);
f3e6f164 91
f3e6f164
GKH
92struct irq_routing_table *pcibios_get_irq_routing_table(void);
93int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
94
95
96#define HAVE_PCI_MMAP
ae749c7a 97#define arch_can_pci_mmap_wc() pat_enabled()
5c2d5ce2 98#define ARCH_GENERIC_PCI_MMAP_RESOURCE
f3e6f164
GKH
99
100#ifdef CONFIG_PCI
376ff035 101extern void early_quirks(void);
376ff035
TG
102#else
103static inline void early_quirks(void) { }
f3e6f164
GKH
104#endif
105
cfb80c9e
JF
106extern void pci_iommu_alloc(void);
107
f3e6f164
GKH
108/* generic pci stuff */
109#include <asm-generic/pci.h>
110
b4ea9299
TG
111#ifdef CONFIG_NUMA
112/* Returns the node based on pci bus */
393d68fb 113static inline int __pcibus_to_node(const struct pci_bus *bus)
b4ea9299 114{
aad6aa0c 115 return to_pci_sysdata(bus)->node;
b4ea9299 116}
f3e6f164 117
393d68fb
RR
118static inline const struct cpumask *
119cpumask_of_pcibus(const struct pci_bus *bus)
120{
7715a1e8
DR
121 int node;
122
123 node = __pcibus_to_node(bus);
98fa15f3 124 return (node == NUMA_NO_NODE) ? cpu_online_mask :
7715a1e8 125 cpumask_of_node(node);
393d68fb 126}
b4ea9299 127#endif
f3e6f164 128
dd5fc854
MG
129struct pci_setup_rom {
130 struct setup_data data;
131 uint16_t vendor;
132 uint16_t devid;
133 uint64_t pcilen;
134 unsigned long segment;
135 unsigned long bus;
136 unsigned long device;
137 unsigned long function;
138 uint8_t romdata[0];
139};
140
1965aae3 141#endif /* _ASM_X86_PCI_H */