summaryrefslogtreecommitdiff
path: root/src/include/device/path.h
blob: 5690badc4cfdace2c4b39c7c16be41e19992ae5d (plain)
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
#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_ESPI,
	DEVICE_PATH_LPC,

	/*
	 * 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_ESPI",		\
		"DEVICE_PATH_LPC",		\
}

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 usb_path {
	unsigned int port_type;
	unsigned int port_id;
};

struct mmio_path {
	uintptr_t addr;
};

struct espi_path {
	uintptr_t addr;
};

struct lpc_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 usb_path		usb;
		struct mmio_path	mmio;
		struct espi_path	espi;
		struct lpc_path		lpc;
	};
};

#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 */