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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef DEVICE_PATH_H
#define DEVICE_PATH_H
#include <stdint.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_USB,
DEVICE_PATH_MMIO,
DEVICE_PATH_GPIO,
DEVICE_PATH_MDIO,
DEVICE_PATH_GICC_V3,
/*
* 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_USB", \
"DEVICE_PATH_MMIO", \
"DEVICE_PATH_GPIO", \
"DEVICE_PATH_MDIO", \
"DEVICE_PATH_GICC_V3", \
}
struct domain_path {
unsigned int domain_id;
};
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 initial_lapicid;
unsigned int apic_id;
unsigned int package_id;
unsigned int node_id;
unsigned int core_id;
unsigned int thread_id;
unsigned char core_type;
};
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 usb_path {
unsigned int port_type;
unsigned int port_id;
};
struct mmio_path {
uintptr_t addr;
};
struct gpio_path {
unsigned int id;
};
struct mdio_path {
unsigned int addr;
};
struct gicc_v3_path {
unsigned long long mpidr;
unsigned int vgic_mi;
unsigned int pi_gsiv;
};
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 usb_path usb;
struct mmio_path mmio;
struct gpio_path gpio;
struct mdio_path mdio;
struct gicc_v3_path gicc_v3;
};
};
#define DEVICE_PATH_MAX 40
#define BUS_PATH_MAX (DEVICE_PATH_MAX+10)
extern const char *dev_path_name(enum device_path_type type);
#endif /* DEVICE_PATH_H */
|