blob: ba7661d6c4783ce9581684ad504b57985a33b86d [file] [log] [blame]
Eric Biedermane9a271e32003-09-02 03:36:25 +00001#ifndef DEVICE_PATH_H
2#define DEVICE_PATH_H
3
4enum device_path_type {
5 DEVICE_PATH_NONE = 0,
Eric Biederman83b991a2003-10-11 06:20:25 +00006 DEVICE_PATH_ROOT,
Eric Biedermane9a271e32003-09-02 03:36:25 +00007 DEVICE_PATH_PCI,
8 DEVICE_PATH_PNP,
9 DEVICE_PATH_I2C,
Eric Biedermanb78c1972004-10-14 20:54:17 +000010 DEVICE_PATH_APIC,
Stefan Reinauer4aff4452013-02-12 14:17:15 -080011 DEVICE_PATH_DOMAIN,
Stefan Reinauer0aa37c42013-02-12 15:20:54 -080012 DEVICE_PATH_CPU_CLUSTER,
Eric Biedermana9e632c2004-11-18 22:38:08 +000013 DEVICE_PATH_CPU,
14 DEVICE_PATH_CPU_BUS,
Sven Schnelle0fa50a12012-06-21 22:19:48 +020015 DEVICE_PATH_IOAPIC,
Lee Leahya95baf92016-02-13 06:10:04 -080016
17 /*
18 * When adding path types to this table, please also update the
19 * DEVICE_PATH_NAMES macro below.
20 */
Eric Biederman216525d2004-10-16 02:48:37 +000021};
22
Lee Leahya95baf92016-02-13 06:10:04 -080023#define DEVICE_PATH_NAMES { \
24 "DEVICE_PATH_NONE", \
25 "DEVICE_PATH_ROOT", \
26 "DEVICE_PATH_PCI", \
27 "DEVICE_PATH_PNP", \
28 "DEVICE_PATH_I2C", \
29 "DEVICE_PATH_APIC", \
30 "DEVICE_PATH_DOMAIN", \
31 "DEVICE_PATH_CPU_CLUSTER", \
32 "DEVICE_PATH_CPU", \
33 "DEVICE_PATH_CPU_BUS", \
34 "DEVICE_PATH_IOAPIC" \
35}
36
Stefan Reinauer4aff4452013-02-12 14:17:15 -080037struct domain_path
Eric Biederman216525d2004-10-16 02:48:37 +000038{
39 unsigned domain;
Eric Biedermane9a271e32003-09-02 03:36:25 +000040};
41
42struct pci_path
43{
Eric Biedermane9a271e32003-09-02 03:36:25 +000044 unsigned devfn;
45};
46
47struct pnp_path
48{
49 unsigned port;
50 unsigned device;
51};
52
53struct i2c_path
54{
55 unsigned device;
56};
57
Eric Biedermanb78c1972004-10-14 20:54:17 +000058struct apic_path
59{
60 unsigned apic_id;
Kyösti Mälkkic33f1e92012-08-07 17:12:11 +030061 unsigned package_id;
Stefan Reinauerf622d592005-11-26 16:56:05 +000062 unsigned node_id;
63 unsigned core_id;
Kyösti Mälkkic33f1e92012-08-07 17:12:11 +030064 unsigned thread_id;
Eric Biedermanb78c1972004-10-14 20:54:17 +000065};
66
Sven Schnelle0fa50a12012-06-21 22:19:48 +020067struct ioapic_path
68{
69 unsigned ioapic_id;
70};
71
Stefan Reinauer0aa37c42013-02-12 15:20:54 -080072struct cpu_cluster_path
Eric Biederman216525d2004-10-16 02:48:37 +000073{
74 unsigned cluster;
75};
76
Eric Biedermana9e632c2004-11-18 22:38:08 +000077struct cpu_path
78{
79 unsigned id;
80};
81
82struct cpu_bus_path
83{
84 unsigned id;
85};
86
Eric Biederman216525d2004-10-16 02:48:37 +000087
Eric Biedermane9a271e32003-09-02 03:36:25 +000088struct device_path {
89 enum device_path_type type;
90 union {
Stefan Reinauer0aa37c42013-02-12 15:20:54 -080091 struct pci_path pci;
92 struct pnp_path pnp;
93 struct i2c_path i2c;
94 struct apic_path apic;
95 struct ioapic_path ioapic;
96 struct domain_path domain;
97 struct cpu_cluster_path cpu_cluster;
98 struct cpu_path cpu;
99 struct cpu_bus_path cpu_bus;
Stefan Reinauer2b34db82009-02-28 20:10:20 +0000100 };
Eric Biedermane9a271e32003-09-02 03:36:25 +0000101};
102
103
104#define DEVICE_PATH_MAX 30
Yinghai Lu13f1c2a2005-07-08 02:49:49 +0000105#define BUS_PATH_MAX (DEVICE_PATH_MAX+10)
Eric Biedermane9a271e32003-09-02 03:36:25 +0000106
107extern int path_eq(struct device_path *path1, struct device_path *path2);
Lee Leahya95baf92016-02-13 06:10:04 -0800108extern const char *dev_path_name(enum device_path_type type);
Eric Biedermane9a271e32003-09-02 03:36:25 +0000109
110#endif /* DEVICE_PATH_H */