1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
#ifndef DEVICE_PATH_H
#define DEVICE_PATH_H
enum device_path_type {
DEVICE_PATH_NONE = 0,
DEVICE_PATH_ROOT,
DEVICE_PATH_PCI,
DEVICE_PATH_PNP,
DEVICE_PATH_I2C,
DEVICE_PATH_APIC,
DEVICE_PATH_DOMAIN,
DEVICE_PATH_CPU_CLUSTER,
DEVICE_PATH_CPU,
DEVICE_PATH_CPU_BUS,
DEVICE_PATH_IOAPIC,
DEVICE_PATH_GENERIC,
DEVICE_PATH_SPI,
DEVICE_PATH_MMIO,
/*
* When adding path types to this table, please also update the
* DEVICE_PATH_NAMES macro below.
*/
};
#define DEVICE_PATH_NAMES { \
"DEVICE_PATH_NONE", \
"DEVICE_PATH_ROOT", \
"DEVICE_PATH_PCI", \
"DEVICE_PATH_PNP", \
"DEVICE_PATH_I2C", \
"DEVICE_PATH_APIC", \
"DEVICE_PATH_DOMAIN", \
"DEVICE_PATH_CPU_CLUSTER", \
"DEVICE_PATH_CPU", \
"DEVICE_PATH_CPU_BUS", \
"DEVICE_PATH_IOAPIC", \
"DEVICE_PATH_GENERIC", \
"DEVICE_PATH_SPI", \
"DEVICE_PATH_MMIO", \
}
struct domain_path {
unsigned int domain;
};
struct pci_path {
unsigned int devfn;
};
struct pnp_path {
unsigned int port;
unsigned int device;
};
struct i2c_path {
unsigned int device;
unsigned int mode_10bit;
};
struct spi_path {
unsigned int cs;
};
struct apic_path {
unsigned int apic_id;
unsigned int package_id;
unsigned int node_id;
unsigned int core_id;
unsigned int thread_id;
};
struct ioapic_path {
unsigned int ioapic_id;
};
struct cpu_cluster_path {
unsigned int cluster;
};
struct cpu_path {
unsigned int id;
};
struct cpu_bus_path {
unsigned int id;
};
struct generic_path {
unsigned int id;
unsigned int subid;
};
struct mmio_path {
uintptr_t addr;
};
struct device_path {
enum device_path_type type;
union {
struct pci_path pci;
struct pnp_path pnp;
struct i2c_path i2c;
struct apic_path apic;
struct ioapic_path ioapic;
struct domain_path domain;
struct cpu_cluster_path cpu_cluster;
struct cpu_path cpu;
struct cpu_bus_path cpu_bus;
struct generic_path generic;
struct spi_path spi;
struct mmio_path mmio;
};
};
#define DEVICE_PATH_MAX 30
#define BUS_PATH_MAX (DEVICE_PATH_MAX+10)
extern int path_eq(struct device_path *path1, struct device_path *path2);
extern const char *dev_path_name(enum device_path_type type);
#endif /* DEVICE_PATH_H */
|