efidevp.h revision 1.1.1.3 1 1.1 jakllsch /* $NetBSD: efidevp.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
2 1.1 jakllsch
3 1.1 jakllsch #ifndef _DEVPATH_H
4 1.1 jakllsch #define _DEVPATH_H
5 1.1 jakllsch
6 1.1 jakllsch /*++
7 1.1 jakllsch
8 1.1 jakllsch Copyright (c) 1998 Intel Corporation
9 1.1 jakllsch
10 1.1 jakllsch Module Name:
11 1.1 jakllsch
12 1.1 jakllsch devpath.h
13 1.1 jakllsch
14 1.1 jakllsch Abstract:
15 1.1 jakllsch
16 1.1 jakllsch Defines for parsing the EFI Device Path structures
17 1.1 jakllsch
18 1.1 jakllsch
19 1.1 jakllsch
20 1.1 jakllsch Revision History
21 1.1 jakllsch
22 1.1 jakllsch --*/
23 1.1 jakllsch
24 1.1 jakllsch //
25 1.1 jakllsch // Device Path structures - Section C
26 1.1 jakllsch //
27 1.1 jakllsch
28 1.1.1.2 jmcneill typedef struct _EFI_DEVICE_PATH_PROTOCOL {
29 1.1 jakllsch UINT8 Type;
30 1.1 jakllsch UINT8 SubType;
31 1.1 jakllsch UINT8 Length[2];
32 1.1.1.2 jmcneill } EFI_DEVICE_PATH_PROTOCOL;
33 1.1.1.2 jmcneill
34 1.1.1.2 jmcneill typedef struct _EFI_DEVICE_PATH_PROTOCOL _EFI_DEVICE_PATH;
35 1.1.1.2 jmcneill typedef EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH;
36 1.1 jakllsch
37 1.1 jakllsch #define EFI_DP_TYPE_MASK 0x7F
38 1.1 jakllsch #define EFI_DP_TYPE_UNPACKED 0x80
39 1.1 jakllsch
40 1.1 jakllsch //#define END_DEVICE_PATH_TYPE 0xff
41 1.1 jakllsch #define END_DEVICE_PATH_TYPE 0x7f
42 1.1 jakllsch //#define END_DEVICE_PATH_TYPE_UNPACKED 0x7f
43 1.1 jakllsch
44 1.1 jakllsch #define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff
45 1.1 jakllsch #define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01
46 1.1.1.2 jmcneill #define END_DEVICE_PATH_LENGTH (sizeof(EFI_DEVICE_PATH_PROTOCOL))
47 1.1 jakllsch
48 1.1 jakllsch
49 1.1 jakllsch #define DP_IS_END_TYPE(a)
50 1.1 jakllsch #define DP_IS_END_SUBTYPE(a) ( ((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE )
51 1.1 jakllsch
52 1.1 jakllsch #define DevicePathType(a) ( ((a)->Type) & EFI_DP_TYPE_MASK )
53 1.1 jakllsch #define DevicePathSubType(a) ( (a)->SubType )
54 1.1 jakllsch #define DevicePathNodeLength(a) ( ((a)->Length[0]) | ((a)->Length[1] << 8) )
55 1.1.1.2 jmcneill #define NextDevicePathNode(a) ( (EFI_DEVICE_PATH_PROTOCOL *) ( ((UINT8 *) (a)) + DevicePathNodeLength(a)))
56 1.1 jakllsch //#define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE_UNPACKED )
57 1.1 jakllsch #define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE )
58 1.1 jakllsch #define IsDevicePathEndSubType(a) ( (a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE )
59 1.1 jakllsch #define IsDevicePathEnd(a) ( IsDevicePathEndType(a) && IsDevicePathEndSubType(a) )
60 1.1 jakllsch #define IsDevicePathUnpacked(a) ( (a)->Type & EFI_DP_TYPE_UNPACKED )
61 1.1 jakllsch
62 1.1 jakllsch
63 1.1 jakllsch #define SetDevicePathNodeLength(a,l) { \
64 1.1 jakllsch (a)->Length[0] = (UINT8) (l); \
65 1.1 jakllsch (a)->Length[1] = (UINT8) ((l) >> 8); \
66 1.1 jakllsch }
67 1.1 jakllsch
68 1.1 jakllsch #define SetDevicePathEndNode(a) { \
69 1.1 jakllsch (a)->Type = END_DEVICE_PATH_TYPE; \
70 1.1 jakllsch (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \
71 1.1.1.2 jmcneill (a)->Length[0] = sizeof(EFI_DEVICE_PATH_PROTOCOL); \
72 1.1 jakllsch (a)->Length[1] = 0; \
73 1.1 jakllsch }
74 1.1 jakllsch
75 1.1 jakllsch
76 1.1 jakllsch /*
77 1.1.1.2 jmcneill * Hardware Device Path (UEFI 2.4 specification, version 2.4 9.3.2.)
78 1.1 jakllsch */
79 1.1.1.2 jmcneill
80 1.1 jakllsch #define HARDWARE_DEVICE_PATH 0x01
81 1.1 jakllsch
82 1.1 jakllsch #define HW_PCI_DP 0x01
83 1.1 jakllsch typedef struct _PCI_DEVICE_PATH {
84 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
85 1.1 jakllsch UINT8 Function;
86 1.1 jakllsch UINT8 Device;
87 1.1 jakllsch } PCI_DEVICE_PATH;
88 1.1 jakllsch
89 1.1 jakllsch #define HW_PCCARD_DP 0x02
90 1.1 jakllsch typedef struct _PCCARD_DEVICE_PATH {
91 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
92 1.1.1.2 jmcneill UINT8 FunctionNumber ;
93 1.1 jakllsch } PCCARD_DEVICE_PATH;
94 1.1 jakllsch
95 1.1 jakllsch #define HW_MEMMAP_DP 0x03
96 1.1 jakllsch typedef struct _MEMMAP_DEVICE_PATH {
97 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
98 1.1 jakllsch UINT32 MemoryType;
99 1.1 jakllsch EFI_PHYSICAL_ADDRESS StartingAddress;
100 1.1 jakllsch EFI_PHYSICAL_ADDRESS EndingAddress;
101 1.1 jakllsch } MEMMAP_DEVICE_PATH;
102 1.1 jakllsch
103 1.1 jakllsch #define HW_VENDOR_DP 0x04
104 1.1 jakllsch typedef struct _VENDOR_DEVICE_PATH {
105 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
106 1.1 jakllsch EFI_GUID Guid;
107 1.1 jakllsch } VENDOR_DEVICE_PATH;
108 1.1 jakllsch
109 1.1 jakllsch #define UNKNOWN_DEVICE_GUID \
110 1.1 jakllsch { 0xcf31fac5, 0xc24e, 0x11d2, {0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b} }
111 1.1 jakllsch
112 1.1 jakllsch typedef struct _UKNOWN_DEVICE_VENDOR_DP {
113 1.1 jakllsch VENDOR_DEVICE_PATH DevicePath;
114 1.1 jakllsch UINT8 LegacyDriveLetter;
115 1.1 jakllsch } UNKNOWN_DEVICE_VENDOR_DEVICE_PATH;
116 1.1 jakllsch
117 1.1 jakllsch #define HW_CONTROLLER_DP 0x05
118 1.1 jakllsch typedef struct _CONTROLLER_DEVICE_PATH {
119 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
120 1.1.1.2 jmcneill UINT32 Controller;
121 1.1 jakllsch } CONTROLLER_DEVICE_PATH;
122 1.1 jakllsch
123 1.1.1.2 jmcneill
124 1.1 jakllsch /*
125 1.1.1.2 jmcneill * ACPI Device Path (UEFI 2.4 specification, version 2.4 9.3.3 and 9.3.4.)
126 1.1 jakllsch */
127 1.1.1.3 jmcneill #define ACPI_DEVICE_PATH 0x02
128 1.1 jakllsch
129 1.1 jakllsch #define ACPI_DP 0x01
130 1.1 jakllsch typedef struct _ACPI_HID_DEVICE_PATH {
131 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
132 1.1 jakllsch UINT32 HID;
133 1.1 jakllsch UINT32 UID;
134 1.1 jakllsch } ACPI_HID_DEVICE_PATH;
135 1.1 jakllsch
136 1.1.1.3 jmcneill #define EXPANDED_ACPI_DP 0x02
137 1.1 jakllsch typedef struct _EXPANDED_ACPI_HID_DEVICE_PATH {
138 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
139 1.1.1.3 jmcneill UINT32 HID;
140 1.1.1.3 jmcneill UINT32 UID;
141 1.1.1.3 jmcneill UINT32 CID;
142 1.1.1.3 jmcneill UINT8 HidStr[1];
143 1.1 jakllsch } EXPANDED_ACPI_HID_DEVICE_PATH;
144 1.1 jakllsch
145 1.1.1.2 jmcneill #define ACPI_ADR_DP 3
146 1.1.1.2 jmcneill typedef struct _ACPI_ADR_DEVICE_PATH {
147 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ;
148 1.1.1.2 jmcneill UINT32 ADR ;
149 1.1.1.2 jmcneill } ACPI_ADR_DEVICE_PATH ;
150 1.1.1.2 jmcneill
151 1.1 jakllsch //
152 1.1 jakllsch // EISA ID Macro
153 1.1 jakllsch // EISA ID Definition 32-bits
154 1.1 jakllsch // bits[15:0] - three character compressed ASCII EISA ID.
155 1.1 jakllsch // bits[31:16] - binary number
156 1.1 jakllsch // Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z'
157 1.1 jakllsch //
158 1.1.1.2 jmcneill #define PNP_EISA_ID_CONST 0x41d0
159 1.1.1.2 jmcneill #define EISA_ID(_Name, _Num) ((UINT32) ((_Name) | (_Num) << 16))
160 1.1 jakllsch #define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
161 1.1 jakllsch
162 1.1 jakllsch #define PNP_EISA_ID_MASK 0xffff
163 1.1 jakllsch #define EISA_ID_TO_NUM(_Id) ((_Id) >> 16)
164 1.1.1.2 jmcneill
165 1.1.1.2 jmcneill
166 1.1 jakllsch /*
167 1.1.1.2 jmcneill * Messaging Device Path (UEFI 2.4 specification, version 2.4 9.3.5.)
168 1.1 jakllsch */
169 1.1.1.2 jmcneill #define MESSAGING_DEVICE_PATH 0x03
170 1.1 jakllsch
171 1.1 jakllsch #define MSG_ATAPI_DP 0x01
172 1.1 jakllsch typedef struct _ATAPI_DEVICE_PATH {
173 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
174 1.1 jakllsch UINT8 PrimarySecondary;
175 1.1 jakllsch UINT8 SlaveMaster;
176 1.1 jakllsch UINT16 Lun;
177 1.1 jakllsch } ATAPI_DEVICE_PATH;
178 1.1 jakllsch
179 1.1 jakllsch #define MSG_SCSI_DP 0x02
180 1.1 jakllsch typedef struct _SCSI_DEVICE_PATH {
181 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
182 1.1 jakllsch UINT16 Pun;
183 1.1.1.2 jmcneill UINT16 Lun;
184 1.1 jakllsch } SCSI_DEVICE_PATH;
185 1.1 jakllsch
186 1.1 jakllsch #define MSG_FIBRECHANNEL_DP 0x03
187 1.1 jakllsch typedef struct _FIBRECHANNEL_DEVICE_PATH {
188 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
189 1.1 jakllsch UINT32 Reserved;
190 1.1 jakllsch UINT64 WWN;
191 1.1 jakllsch UINT64 Lun;
192 1.1 jakllsch } FIBRECHANNEL_DEVICE_PATH;
193 1.1 jakllsch
194 1.1.1.2 jmcneill /**
195 1.1.1.2 jmcneill * Fibre Channel Ex SubType.
196 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.5.6.
197 1.1.1.2 jmcneill */
198 1.1.1.2 jmcneill #define MSG_FIBRECHANNELEX_DP 21
199 1.1.1.2 jmcneill typedef struct _FIBRECHANNELEX_DEVICE_PATH {
200 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ;
201 1.1.1.2 jmcneill UINT32 Reserved ;
202 1.1.1.2 jmcneill UINT8 WWN[ 8 ] ; /* World Wide Name */
203 1.1.1.2 jmcneill UINT8 Lun[ 8 ] ; /* Logical unit, T-10 SCSI Architecture Model 4 specification */
204 1.1.1.2 jmcneill } FIBRECHANNELEX_DEVICE_PATH ;
205 1.1.1.2 jmcneill
206 1.1 jakllsch #define MSG_1394_DP 0x04
207 1.1 jakllsch typedef struct _F1394_DEVICE_PATH {
208 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
209 1.1 jakllsch UINT32 Reserved;
210 1.1 jakllsch UINT64 Guid;
211 1.1 jakllsch } F1394_DEVICE_PATH;
212 1.1 jakllsch
213 1.1 jakllsch #define MSG_USB_DP 0x05
214 1.1 jakllsch typedef struct _USB_DEVICE_PATH {
215 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
216 1.1 jakllsch UINT8 Port;
217 1.1 jakllsch UINT8 Endpoint;
218 1.1 jakllsch } USB_DEVICE_PATH;
219 1.1 jakllsch
220 1.1.1.2 jmcneill /**
221 1.1.1.2 jmcneill * SATA Device Path SubType.
222 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.5.6.
223 1.1.1.2 jmcneill */
224 1.1.1.2 jmcneill #define MSG_SATA_DP 18
225 1.1.1.2 jmcneill typedef struct _SATA_DEVICE_PATH {
226 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ;
227 1.1.1.2 jmcneill UINT16 HBAPortNumber ;
228 1.1.1.2 jmcneill UINT16 PortMultiplierPortNumber ;
229 1.1.1.2 jmcneill UINT16 Lun ; /* Logical Unit Number */
230 1.1.1.2 jmcneill } SATA_DEVICE_PATH ;
231 1.1.1.2 jmcneill
232 1.1.1.2 jmcneill /**
233 1.1.1.2 jmcneill * USB WWID Device Path SubType.
234 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.5.7.
235 1.1.1.2 jmcneill */
236 1.1.1.2 jmcneill #define MSG_USB_WWID_DP 16
237 1.1.1.2 jmcneill typedef struct _USB_WWID_DEVICE_PATH {
238 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ;
239 1.1.1.2 jmcneill UINT16 InterfaceNumber ;
240 1.1.1.2 jmcneill UINT16 VendorId ;
241 1.1.1.2 jmcneill UINT16 ProductId ;
242 1.1.1.2 jmcneill CHAR16 SerialNumber[ 1 ] ; /* UTF-16 characters of the USB serial number */
243 1.1.1.2 jmcneill } USB_WWID_DEVICE_PATH ;
244 1.1.1.2 jmcneill
245 1.1.1.2 jmcneill /**
246 1.1.1.2 jmcneill * Device Logical Unit SubType.
247 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.5.8.
248 1.1.1.2 jmcneill */
249 1.1.1.2 jmcneill #define MSG_DEVICE_LOGICAL_UNIT_DP 17
250 1.1.1.2 jmcneill typedef struct _DEVICE_LOGICAL_UNIT_DEVICE_PATH {
251 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ;
252 1.1.1.2 jmcneill UINT8 Lun ; /* Logical Unit Number */
253 1.1.1.2 jmcneill } DEVICE_LOGICAL_UNIT_DEVICE_PATH ;
254 1.1.1.2 jmcneill
255 1.1 jakllsch #define MSG_USB_CLASS_DP 0x0F
256 1.1 jakllsch typedef struct _USB_CLASS_DEVICE_PATH {
257 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
258 1.1 jakllsch UINT16 VendorId;
259 1.1 jakllsch UINT16 ProductId;
260 1.1 jakllsch UINT8 DeviceClass;
261 1.1 jakllsch UINT8 DeviceSubclass;
262 1.1 jakllsch UINT8 DeviceProtocol;
263 1.1 jakllsch } USB_CLASS_DEVICE_PATH;
264 1.1 jakllsch
265 1.1 jakllsch #define MSG_I2O_DP 0x06
266 1.1 jakllsch typedef struct _I2O_DEVICE_PATH {
267 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
268 1.1 jakllsch UINT32 Tid;
269 1.1 jakllsch } I2O_DEVICE_PATH;
270 1.1 jakllsch
271 1.1 jakllsch #define MSG_MAC_ADDR_DP 0x0b
272 1.1 jakllsch typedef struct _MAC_ADDR_DEVICE_PATH {
273 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
274 1.1 jakllsch EFI_MAC_ADDRESS MacAddress;
275 1.1 jakllsch UINT8 IfType;
276 1.1 jakllsch } MAC_ADDR_DEVICE_PATH;
277 1.1 jakllsch
278 1.1 jakllsch #define MSG_IPv4_DP 0x0c
279 1.1 jakllsch typedef struct _IPv4_DEVICE_PATH {
280 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
281 1.1 jakllsch EFI_IPv4_ADDRESS LocalIpAddress;
282 1.1 jakllsch EFI_IPv4_ADDRESS RemoteIpAddress;
283 1.1 jakllsch UINT16 LocalPort;
284 1.1 jakllsch UINT16 RemotePort;
285 1.1 jakllsch UINT16 Protocol;
286 1.1 jakllsch BOOLEAN StaticIpAddress;
287 1.1.1.2 jmcneill /* new from UEFI version 2, code must check Length field in Header */
288 1.1.1.2 jmcneill EFI_IPv4_ADDRESS GatewayIpAddress ;
289 1.1.1.2 jmcneill EFI_IPv4_ADDRESS SubnetMask ;
290 1.1 jakllsch } IPv4_DEVICE_PATH;
291 1.1 jakllsch
292 1.1 jakllsch #define MSG_IPv6_DP 0x0d
293 1.1 jakllsch typedef struct _IPv6_DEVICE_PATH {
294 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
295 1.1 jakllsch EFI_IPv6_ADDRESS LocalIpAddress;
296 1.1 jakllsch EFI_IPv6_ADDRESS RemoteIpAddress;
297 1.1 jakllsch UINT16 LocalPort;
298 1.1 jakllsch UINT16 RemotePort;
299 1.1 jakllsch UINT16 Protocol;
300 1.1.1.2 jmcneill BOOLEAN IPAddressOrigin ;
301 1.1.1.2 jmcneill /* new from UEFI version 2, code must check Length field in Header */
302 1.1.1.2 jmcneill UINT8 PrefixLength ;
303 1.1.1.2 jmcneill EFI_IPv6_ADDRESS GatewayIpAddress ;
304 1.1 jakllsch } IPv6_DEVICE_PATH;
305 1.1 jakllsch
306 1.1.1.2 jmcneill
307 1.1.1.2 jmcneill /**
308 1.1.1.2 jmcneill * Uniform Resource Identifiers SubType.
309 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4C 9.3.5.23.
310 1.1.1.2 jmcneill */
311 1.1.1.2 jmcneill #define MSG_URI_DP 24
312 1.1.1.2 jmcneill typedef struct _URI_DEVICE_PATH {
313 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
314 1.1.1.2 jmcneill CHAR8 Uri[1];
315 1.1.1.2 jmcneill } URI_DEVICE_PATH;
316 1.1.1.2 jmcneill
317 1.1.1.2 jmcneill /**
318 1.1.1.2 jmcneill * Device Logical Unit SubType.
319 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.5.8.
320 1.1.1.2 jmcneill */
321 1.1.1.2 jmcneill #define MSG_VLAN_DP 20
322 1.1.1.2 jmcneill typedef struct _VLAN_DEVICE_PATH {
323 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ;
324 1.1.1.2 jmcneill UINT16 VlanId ;
325 1.1.1.2 jmcneill } VLAN_DEVICE_PATH;
326 1.1.1.2 jmcneill
327 1.1 jakllsch #define MSG_INFINIBAND_DP 0x09
328 1.1 jakllsch typedef struct _INFINIBAND_DEVICE_PATH {
329 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
330 1.1.1.3 jmcneill UINT32 ResourceFlags;
331 1.1.1.3 jmcneill UINT8 PortGid[16];
332 1.1.1.3 jmcneill UINT64 ServiceId;
333 1.1.1.3 jmcneill UINT64 TargetPortId;
334 1.1.1.3 jmcneill UINT64 DeviceId;
335 1.1 jakllsch } INFINIBAND_DEVICE_PATH;
336 1.1 jakllsch
337 1.1 jakllsch #define MSG_UART_DP 0x0e
338 1.1 jakllsch typedef struct _UART_DEVICE_PATH {
339 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
340 1.1 jakllsch UINT32 Reserved;
341 1.1 jakllsch UINT64 BaudRate;
342 1.1 jakllsch UINT8 DataBits;
343 1.1 jakllsch UINT8 Parity;
344 1.1 jakllsch UINT8 StopBits;
345 1.1 jakllsch } UART_DEVICE_PATH;
346 1.1 jakllsch
347 1.1 jakllsch #define MSG_VENDOR_DP 0x0A
348 1.1 jakllsch /* Use VENDOR_DEVICE_PATH struct */
349 1.1 jakllsch
350 1.1.1.2 jmcneill #define EFI_PC_ANSI_GUID \
351 1.1.1.2 jmcneill { 0xe0c14753, 0xf9be, 0x11d2, {0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
352 1.1.1.2 jmcneill #define DEVICE_PATH_MESSAGING_PC_ANSI EFI_PC_ANSI_GUID
353 1.1.1.2 jmcneill
354 1.1.1.2 jmcneill #define EFI_VT_100_GUID \
355 1.1.1.2 jmcneill { 0xdfa66065, 0xb419, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
356 1.1.1.2 jmcneill #define DEVICE_PATH_MESSAGING_VT_100 EFI_VT_100_GUID
357 1.1.1.2 jmcneill
358 1.1.1.2 jmcneill #define EFI_VT_100_PLUS_GUID \
359 1.1.1.2 jmcneill { 0x7baec70b, 0x57e0, 0x4c76, {0x8e, 0x87, 0x2f, 0x9e, 0x28, 0x08, 0x83, 0x43} }
360 1.1.1.2 jmcneill #define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID
361 1.1.1.2 jmcneill
362 1.1.1.2 jmcneill #define EFI_VT_UTF8_GUID \
363 1.1.1.2 jmcneill { 0xad15a0d6, 0x8bec, 0x4acf, {0xa0, 0x73, 0xd0, 0x1d, 0xe7, 0x7e, 0x2d, 0x88} }
364 1.1.1.2 jmcneill #define DEVICE_PATH_MESSAGING_VT_UTF8 EFI_VT_UTF8_GUID
365 1.1 jakllsch
366 1.1 jakllsch
367 1.1.1.2 jmcneill /*
368 1.1.1.2 jmcneill * Media Device Path (UEFI 2.4 specification, version 2.4 9.3.6.)
369 1.1.1.2 jmcneill */
370 1.1 jakllsch #define MEDIA_DEVICE_PATH 0x04
371 1.1 jakllsch
372 1.1 jakllsch #define MEDIA_HARDDRIVE_DP 0x01
373 1.1 jakllsch typedef struct _HARDDRIVE_DEVICE_PATH {
374 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
375 1.1 jakllsch UINT32 PartitionNumber;
376 1.1 jakllsch UINT64 PartitionStart;
377 1.1 jakllsch UINT64 PartitionSize;
378 1.1 jakllsch UINT8 Signature[16];
379 1.1 jakllsch UINT8 MBRType;
380 1.1 jakllsch UINT8 SignatureType;
381 1.1 jakllsch } HARDDRIVE_DEVICE_PATH;
382 1.1 jakllsch
383 1.1 jakllsch #define MBR_TYPE_PCAT 0x01
384 1.1 jakllsch #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
385 1.1 jakllsch
386 1.1 jakllsch #define SIGNATURE_TYPE_MBR 0x01
387 1.1 jakllsch #define SIGNATURE_TYPE_GUID 0x02
388 1.1 jakllsch
389 1.1 jakllsch #define MEDIA_CDROM_DP 0x02
390 1.1 jakllsch typedef struct _CDROM_DEVICE_PATH {
391 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
392 1.1 jakllsch UINT32 BootEntry;
393 1.1 jakllsch UINT64 PartitionStart;
394 1.1 jakllsch UINT64 PartitionSize;
395 1.1 jakllsch } CDROM_DEVICE_PATH;
396 1.1 jakllsch
397 1.1 jakllsch #define MEDIA_VENDOR_DP 0x03
398 1.1 jakllsch /* Use VENDOR_DEVICE_PATH struct */
399 1.1 jakllsch
400 1.1 jakllsch #define MEDIA_FILEPATH_DP 0x04
401 1.1 jakllsch typedef struct _FILEPATH_DEVICE_PATH {
402 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
403 1.1 jakllsch CHAR16 PathName[1];
404 1.1 jakllsch } FILEPATH_DEVICE_PATH;
405 1.1 jakllsch
406 1.1 jakllsch #define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName)
407 1.1 jakllsch
408 1.1 jakllsch #define MEDIA_PROTOCOL_DP 0x05
409 1.1 jakllsch typedef struct _MEDIA_PROTOCOL_DEVICE_PATH {
410 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
411 1.1 jakllsch EFI_GUID Protocol;
412 1.1 jakllsch } MEDIA_PROTOCOL_DEVICE_PATH;
413 1.1 jakllsch
414 1.1.1.2 jmcneill /**
415 1.1.1.2 jmcneill * PIWG Firmware File SubType.
416 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.6.6.
417 1.1.1.2 jmcneill */
418 1.1.1.2 jmcneill #define MEDIA_PIWG_FW_FILE_DP 6
419 1.1.1.2 jmcneill typedef struct _MEDIA_FW_VOL_FILEPATH_DEVICE_PATH {
420 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ;
421 1.1.1.2 jmcneill EFI_GUID FvFileName ;
422 1.1.1.2 jmcneill } MEDIA_FW_VOL_FILEPATH_DEVICE_PATH ;
423 1.1.1.2 jmcneill
424 1.1.1.2 jmcneill /**
425 1.1.1.2 jmcneill * PIWG Firmware Volume Device Path SubType.
426 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.6.7.
427 1.1.1.2 jmcneill */
428 1.1.1.2 jmcneill #define MEDIA_PIWG_FW_VOL_DP 7
429 1.1.1.2 jmcneill typedef struct _MEDIA_FW_VOL_DEVICE_PATH {
430 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ;
431 1.1.1.2 jmcneill EFI_GUID FvName ;
432 1.1.1.2 jmcneill } MEDIA_FW_VOL_DEVICE_PATH ;
433 1.1.1.2 jmcneill
434 1.1.1.2 jmcneill /**
435 1.1.1.2 jmcneill * Media relative offset range device path.
436 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.6.8.
437 1.1.1.2 jmcneill */
438 1.1.1.2 jmcneill #define MEDIA_RELATIVE_OFFSET_RANGE_DP 8
439 1.1.1.2 jmcneill typedef struct _MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH {
440 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ;
441 1.1.1.2 jmcneill UINT32 Reserved ;
442 1.1.1.2 jmcneill UINT64 StartingOffset ;
443 1.1.1.2 jmcneill UINT64 EndingOffset ;
444 1.1.1.2 jmcneill } MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH ;
445 1.1.1.2 jmcneill
446 1.1 jakllsch
447 1.1.1.2 jmcneill /*
448 1.1.1.2 jmcneill * BIOS Boot Specification Device Path (UEFI 2.4 specification, version 2.4 9.3.7.)
449 1.1.1.2 jmcneill */
450 1.1 jakllsch #define BBS_DEVICE_PATH 0x05
451 1.1.1.2 jmcneill
452 1.1 jakllsch #define BBS_BBS_DP 0x01
453 1.1 jakllsch typedef struct _BBS_BBS_DEVICE_PATH {
454 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header;
455 1.1 jakllsch UINT16 DeviceType;
456 1.1 jakllsch UINT16 StatusFlag;
457 1.1 jakllsch CHAR8 String[1];
458 1.1 jakllsch } BBS_BBS_DEVICE_PATH;
459 1.1 jakllsch
460 1.1 jakllsch /* DeviceType definitions - from BBS specification */
461 1.1 jakllsch #define BBS_TYPE_FLOPPY 0x01
462 1.1 jakllsch #define BBS_TYPE_HARDDRIVE 0x02
463 1.1 jakllsch #define BBS_TYPE_CDROM 0x03
464 1.1 jakllsch #define BBS_TYPE_PCMCIA 0x04
465 1.1 jakllsch #define BBS_TYPE_USB 0x05
466 1.1 jakllsch #define BBS_TYPE_EMBEDDED_NETWORK 0x06
467 1.1 jakllsch #define BBS_TYPE_DEV 0x80
468 1.1 jakllsch #define BBS_TYPE_UNKNOWN 0xFF
469 1.1 jakllsch
470 1.1 jakllsch typedef union {
471 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL DevPath;
472 1.1 jakllsch PCI_DEVICE_PATH Pci;
473 1.1 jakllsch PCCARD_DEVICE_PATH PcCard;
474 1.1 jakllsch MEMMAP_DEVICE_PATH MemMap;
475 1.1 jakllsch VENDOR_DEVICE_PATH Vendor;
476 1.1.1.2 jmcneill UNKNOWN_DEVICE_VENDOR_DEVICE_PATH UnknownVendor;
477 1.1 jakllsch CONTROLLER_DEVICE_PATH Controller;
478 1.1 jakllsch ACPI_HID_DEVICE_PATH Acpi;
479 1.1 jakllsch
480 1.1 jakllsch ATAPI_DEVICE_PATH Atapi;
481 1.1 jakllsch SCSI_DEVICE_PATH Scsi;
482 1.1 jakllsch FIBRECHANNEL_DEVICE_PATH FibreChannel;
483 1.1 jakllsch
484 1.1 jakllsch F1394_DEVICE_PATH F1394;
485 1.1 jakllsch USB_DEVICE_PATH Usb;
486 1.1 jakllsch USB_CLASS_DEVICE_PATH UsbClass;
487 1.1 jakllsch I2O_DEVICE_PATH I2O;
488 1.1 jakllsch MAC_ADDR_DEVICE_PATH MacAddr;
489 1.1 jakllsch IPv4_DEVICE_PATH Ipv4;
490 1.1 jakllsch IPv6_DEVICE_PATH Ipv6;
491 1.1.1.2 jmcneill URI_DEVICE_PATH Uri;
492 1.1 jakllsch INFINIBAND_DEVICE_PATH InfiniBand;
493 1.1 jakllsch UART_DEVICE_PATH Uart;
494 1.1 jakllsch
495 1.1 jakllsch HARDDRIVE_DEVICE_PATH HardDrive;
496 1.1 jakllsch CDROM_DEVICE_PATH CD;
497 1.1 jakllsch
498 1.1 jakllsch FILEPATH_DEVICE_PATH FilePath;
499 1.1 jakllsch MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol;
500 1.1 jakllsch
501 1.1 jakllsch BBS_BBS_DEVICE_PATH Bbs;
502 1.1 jakllsch
503 1.1 jakllsch } EFI_DEV_PATH;
504 1.1 jakllsch
505 1.1 jakllsch typedef union {
506 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL *DevPath;
507 1.1 jakllsch PCI_DEVICE_PATH *Pci;
508 1.1 jakllsch PCCARD_DEVICE_PATH *PcCard;
509 1.1 jakllsch MEMMAP_DEVICE_PATH *MemMap;
510 1.1 jakllsch VENDOR_DEVICE_PATH *Vendor;
511 1.1.1.2 jmcneill UNKNOWN_DEVICE_VENDOR_DEVICE_PATH *UnknownVendor;
512 1.1 jakllsch CONTROLLER_DEVICE_PATH *Controller;
513 1.1 jakllsch ACPI_HID_DEVICE_PATH *Acpi;
514 1.1 jakllsch
515 1.1 jakllsch ATAPI_DEVICE_PATH *Atapi;
516 1.1 jakllsch SCSI_DEVICE_PATH *Scsi;
517 1.1 jakllsch FIBRECHANNEL_DEVICE_PATH *FibreChannel;
518 1.1 jakllsch
519 1.1 jakllsch F1394_DEVICE_PATH *F1394;
520 1.1 jakllsch USB_DEVICE_PATH *Usb;
521 1.1 jakllsch USB_CLASS_DEVICE_PATH *UsbClass;
522 1.1 jakllsch I2O_DEVICE_PATH *I2O;
523 1.1 jakllsch MAC_ADDR_DEVICE_PATH *MacAddr;
524 1.1 jakllsch IPv4_DEVICE_PATH *Ipv4;
525 1.1 jakllsch IPv6_DEVICE_PATH *Ipv6;
526 1.1.1.2 jmcneill URI_DEVICE_PATH *Uri;
527 1.1 jakllsch INFINIBAND_DEVICE_PATH *InfiniBand;
528 1.1 jakllsch UART_DEVICE_PATH *Uart;
529 1.1 jakllsch
530 1.1 jakllsch HARDDRIVE_DEVICE_PATH *HardDrive;
531 1.1 jakllsch
532 1.1 jakllsch FILEPATH_DEVICE_PATH *FilePath;
533 1.1 jakllsch MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol;
534 1.1 jakllsch
535 1.1 jakllsch CDROM_DEVICE_PATH *CD;
536 1.1 jakllsch BBS_BBS_DEVICE_PATH *Bbs;
537 1.1 jakllsch
538 1.1 jakllsch } EFI_DEV_PATH_PTR;
539 1.1 jakllsch
540 1.1.1.2 jmcneill #define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID \
541 1.1.1.2 jmcneill { 0x8b843e20, 0x8132, 0x4852, {0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c} }
542 1.1.1.2 jmcneill
543 1.1.1.2 jmcneill typedef
544 1.1.1.2 jmcneill CHAR16*
545 1.1.1.2 jmcneill (EFIAPI *EFI_DEVICE_PATH_TO_TEXT_NODE) (
546 1.1.1.2 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DeviceNode,
547 1.1.1.2 jmcneill IN BOOLEAN DisplayOnly,
548 1.1.1.2 jmcneill IN BOOLEAN AllowShortcuts
549 1.1.1.2 jmcneill );
550 1.1.1.2 jmcneill
551 1.1.1.2 jmcneill typedef
552 1.1.1.2 jmcneill CHAR16*
553 1.1.1.2 jmcneill (EFIAPI *EFI_DEVICE_PATH_TO_TEXT_PATH) (
554 1.1.1.2 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
555 1.1.1.2 jmcneill IN BOOLEAN DisplayOnly,
556 1.1.1.2 jmcneill IN BOOLEAN AllowShortcuts
557 1.1.1.2 jmcneill );
558 1.1.1.2 jmcneill
559 1.1.1.2 jmcneill typedef struct _EFI_DEVICE_PATH_TO_TEXT_PROTOCOL {
560 1.1.1.3 jmcneill EFI_DEVICE_PATH_TO_TEXT_NODE ConvertDeviceNodeToText;
561 1.1.1.3 jmcneill EFI_DEVICE_PATH_TO_TEXT_PATH ConvertDevicePathToText;
562 1.1.1.2 jmcneill } EFI_DEVICE_PATH_TO_TEXT_PROTOCOL;
563 1.1.1.2 jmcneill
564 1.1.1.2 jmcneill #define EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL_GUID \
565 1.1.1.2 jmcneill { 0x5c99a21, 0xc70f, 0x4ad2, {0x8a, 0x5f, 0x35, 0xdf, 0x33, 0x43, 0xf5, 0x1e} }
566 1.1.1.2 jmcneill
567 1.1.1.2 jmcneill typedef
568 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL*
569 1.1.1.2 jmcneill (EFIAPI *EFI_DEVICE_PATH_FROM_TEXT_NODE) (
570 1.1.1.2 jmcneill IN CONST CHAR16 *TextDeviceNode
571 1.1.1.2 jmcneill );
572 1.1.1.2 jmcneill
573 1.1.1.2 jmcneill typedef
574 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL*
575 1.1.1.2 jmcneill (EFIAPI *EFI_DEVICE_PATH_FROM_TEXT_PATH) (
576 1.1.1.2 jmcneill IN CONST CHAR16 *TextDevicePath
577 1.1.1.2 jmcneill );
578 1.1.1.2 jmcneill
579 1.1.1.2 jmcneill typedef struct {
580 1.1.1.2 jmcneill EFI_DEVICE_PATH_FROM_TEXT_NODE ConvertTextToDeviceNode;
581 1.1.1.2 jmcneill EFI_DEVICE_PATH_FROM_TEXT_PATH ConvertTextToDevicePath;
582 1.1.1.2 jmcneill } EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL;
583 1.1 jakllsch
584 1.1.1.3 jmcneill #define EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID \
585 1.1.1.3 jmcneill { 0x379be4e, 0xd706, 0x437d, {0xb0, 0x37, 0xed, 0xb8, 0x2f, 0xb7, 0x72, 0xa4} }
586 1.1.1.3 jmcneill
587 1.1.1.3 jmcneill typedef
588 1.1.1.3 jmcneill UINTN
589 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE) (
590 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath
591 1.1.1.3 jmcneill );
592 1.1.1.3 jmcneill
593 1.1.1.3 jmcneill typedef
594 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL*
595 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH) (
596 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath
597 1.1.1.3 jmcneill );
598 1.1.1.3 jmcneill
599 1.1.1.3 jmcneill typedef
600 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL*
601 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_PATH) (
602 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *Src1,
603 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *Src2
604 1.1.1.3 jmcneill );
605 1.1.1.3 jmcneill
606 1.1.1.3 jmcneill typedef
607 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL*
608 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_NODE) (
609 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
610 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DeviceNode
611 1.1.1.3 jmcneill );
612 1.1.1.3 jmcneill
613 1.1.1.3 jmcneill typedef
614 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL*
615 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_INSTANCE) (
616 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
617 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePathInstance
618 1.1.1.3 jmcneill );
619 1.1.1.3 jmcneill
620 1.1.1.3 jmcneill typedef
621 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL*
622 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE) (
623 1.1.1.3 jmcneill IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathInstance,
624 1.1.1.3 jmcneill OUT UINTN *DevicePathInstanceSize OPTIONAL
625 1.1.1.3 jmcneill );
626 1.1.1.3 jmcneill
627 1.1.1.3 jmcneill typedef
628 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL*
629 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_CREATE_NODE) (
630 1.1.1.3 jmcneill IN UINT8 NodeType,
631 1.1.1.3 jmcneill IN UINT8 NodeSubType,
632 1.1.1.3 jmcneill IN UINT16 NodeLength
633 1.1.1.3 jmcneill );
634 1.1.1.3 jmcneill
635 1.1.1.3 jmcneill typedef
636 1.1.1.3 jmcneill BOOLEAN
637 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE) (
638 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath
639 1.1.1.3 jmcneill );
640 1.1.1.3 jmcneill
641 1.1.1.3 jmcneill typedef struct _EFI_DEVICE_PATH_UTILITIES_PROTOCOL {
642 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE GetDevicePathSize;
643 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH DuplicateDevicePath;
644 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_APPEND_PATH AppendDevicePath;
645 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_APPEND_NODE AppendDeviceNode;
646 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_APPEND_INSTANCE AppendDevicePathInstance;
647 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE GetNextDevicePathInstance;
648 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE IsDevicePathMultiInstance;
649 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_CREATE_NODE CreateDeviceNode;
650 1.1.1.3 jmcneill } EFI_DEVICE_PATH_UTILITIES_PROTOCOL;
651 1.1.1.3 jmcneill
652 1.1 jakllsch #endif
653