]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Efi/Include/EfiDevicePath.h
Add in the 1st version of ECP.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Efi / Include / EfiDevicePath.h
1 /*++
2
3 Copyright (c) 2004 - 2007, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 EfiDevicePath.h
15
16 Abstract:
17
18 EFI Device Path definitions
19
20 --*/
21
22 #ifndef _EFI_DEVICE_PATH_H
23 #define _EFI_DEVICE_PATH_H
24
25
26
27 #pragma pack(1)
28
29
30 //
31 // Device Path defines and macros
32 //
33 #define EFI_DP_TYPE_MASK 0x7F
34 #define EFI_DP_TYPE_UNPACKED 0x80
35 #define END_DEVICE_PATH_TYPE 0x7f
36 #define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff
37 #define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01
38 #define END_DEVICE_PATH_LENGTH (sizeof(EFI_DEVICE_PATH_PROTOCOL))
39
40 #define DP_IS_END_TYPE(a)
41 #define DP_IS_END_SUBTYPE(a) ( ((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE )
42
43 #define DevicePathType(a) ( ((a)->Type) & EFI_DP_TYPE_MASK )
44 #define DevicePathSubType(a) ( (a)->SubType )
45 #define DevicePathNodeLength(a) ( ((a)->Length[0]) | ((a)->Length[1] << 8) )
46 #define NextDevicePathNode(a) ( (EFI_DEVICE_PATH_PROTOCOL *) ( ((UINT8 *) (a)) + DevicePathNodeLength(a)))
47 #define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE )
48 #define IsDevicePathEndSubType(a) ( (a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE )
49 #define IsDevicePathEnd(a) ( IsDevicePathEndType(a) && IsDevicePathEndSubType(a) )
50 #define IsDevicePathUnpacked(a) ( (a)->Type & EFI_DP_TYPE_UNPACKED )
51
52
53 #define SetDevicePathNodeLength(a,l) { \
54 (a)->Length[0] = (UINT8) (l); \
55 (a)->Length[1] = (UINT8) ((l) >> 8); \
56 }
57
58 #define SetDevicePathEndNode(a) { \
59 (a)->Type = END_DEVICE_PATH_TYPE; \
60 (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \
61 (a)->Length[0] = sizeof(EFI_DEVICE_PATH_PROTOCOL); \
62 (a)->Length[1] = 0; \
63 }
64
65 //
66 // Hardware Device Paths
67 //
68 #define HARDWARE_DEVICE_PATH 0x01
69
70 #define HW_PCI_DP 0x01
71 typedef struct {
72 EFI_DEVICE_PATH_PROTOCOL Header;
73 UINT8 Function;
74 UINT8 Device;
75 } PCI_DEVICE_PATH;
76
77 #define HW_PCCARD_DP 0x02
78 typedef struct {
79 EFI_DEVICE_PATH_PROTOCOL Header;
80 UINT8 FunctionNumber;
81 } PCCARD_DEVICE_PATH;
82
83 #define HW_MEMMAP_DP 0x03
84 typedef struct {
85 EFI_DEVICE_PATH_PROTOCOL Header;
86 UINT32 MemoryType;
87 EFI_PHYSICAL_ADDRESS StartingAddress;
88 EFI_PHYSICAL_ADDRESS EndingAddress;
89 } MEMMAP_DEVICE_PATH;
90
91 #define HW_VENDOR_DP 0x04
92 typedef struct {
93 EFI_DEVICE_PATH_PROTOCOL Header;
94 EFI_GUID Guid;
95 } VENDOR_DEVICE_PATH;
96
97 #define HW_CONTROLLER_DP 0x05
98 typedef struct {
99 EFI_DEVICE_PATH_PROTOCOL Header;
100 UINT32 Controller;
101 } CONTROLLER_DEVICE_PATH;
102
103 //
104 // ACPI Device Paths
105 //
106 #define ACPI_DEVICE_PATH 0x02
107
108 #define ACPI_DP 0x01
109 typedef struct {
110 EFI_DEVICE_PATH_PROTOCOL Header;
111 UINT32 HID;
112 UINT32 UID;
113 } ACPI_HID_DEVICE_PATH;
114
115 #define ACPI_EXTENDED_DP 0x02
116 typedef struct {
117 EFI_DEVICE_PATH_PROTOCOL Header;
118 UINT32 HID;
119 UINT32 UID;
120 UINT32 CID;
121 //
122 // Optional variable length _HIDSTR
123 // Optional variable length _UIDSTR
124 //
125 } ACPI_EXTENDED_HID_DEVICE_PATH;
126
127 #define ACPI_ADR_DP 0x03
128
129 typedef struct {
130 EFI_DEVICE_PATH_PROTOCOL Header;
131 UINT32 ADR;
132 } ACPI_ADR_DEVICE_PATH;
133
134 #define ACPI_ADR_DISPLAY_TYPE_OTHER 0
135 #define ACPI_ADR_DISPLAY_TYPE_VGA 1
136 #define ACPI_ADR_DISPLAY_TYPE_TV 2
137 #define ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL 3
138 #define ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL 4
139
140 #define ACPI_DISPLAY_ADR(_DeviceIdScheme, _HeadId, _NonVgaOutput, _BiosCanDetect, _VendorInfo, _Type, _Port, _Index) \
141 ((UINT32) ( (((_DeviceIdScheme) & 0x1) << 31) | \
142 (((_HeadId) & 0x7) << 18) | \
143 (((_NonVgaOutput) & 0x1) << 17) | \
144 (((_BiosCanDetect) & 0x1) << 16) | \
145 (((_VendorInfo) & 0xf) << 12) | \
146 (((_Type) & 0xf) << 8) | \
147 (((_Port) & 0xf) << 4) | \
148 ((_Index) & 0xf) ))
149
150 //
151 // EISA ID Macro
152 // EISA ID Definition 32-bits
153 // bits[15:0] - three character compressed ASCII EISA ID.
154 // bits[31:16] - binary number
155 // Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z'
156 //
157 #define PNP_EISA_ID_CONST 0x41d0
158 #define EISA_ID(_Name, _Num) ((UINT32) ((_Name) | (_Num) << 16))
159 #define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
160 #define EFI_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
161
162 #define PNP_EISA_ID_MASK 0xffff
163 #define EISA_ID_TO_NUM(_Id) ((_Id) >> 16)
164
165 //
166 // Messaging Device Paths
167 //
168 #define MESSAGING_DEVICE_PATH 0x03
169
170 #define MSG_ATAPI_DP 0x01
171 typedef struct {
172 EFI_DEVICE_PATH_PROTOCOL Header;
173 UINT8 PrimarySecondary;
174 UINT8 SlaveMaster;
175 UINT16 Lun;
176 } ATAPI_DEVICE_PATH;
177
178 #define MSG_SCSI_DP 0x02
179 typedef struct {
180 EFI_DEVICE_PATH_PROTOCOL Header;
181 UINT16 Pun;
182 UINT16 Lun;
183 } SCSI_DEVICE_PATH;
184
185 #define MSG_FIBRECHANNEL_DP 0x03
186 typedef struct {
187 EFI_DEVICE_PATH_PROTOCOL Header;
188 UINT32 Reserved;
189 UINT64 WWN;
190 UINT64 Lun;
191 } FIBRECHANNEL_DEVICE_PATH;
192
193 #define MSG_1394_DP 0x04
194 typedef struct {
195 EFI_DEVICE_PATH_PROTOCOL Header;
196 UINT32 Reserved;
197 UINT64 Guid;
198 } F1394_DEVICE_PATH;
199
200 #define MSG_USB_DP 0x05
201 typedef struct {
202 EFI_DEVICE_PATH_PROTOCOL Header;
203 UINT8 ParentPortNumber;
204 UINT8 InterfaceNumber;
205 } USB_DEVICE_PATH;
206
207 #define MSG_USB_CLASS_DP 0x0f
208 typedef struct {
209 EFI_DEVICE_PATH_PROTOCOL Header;
210 UINT16 VendorId;
211 UINT16 ProductId;
212 UINT8 DeviceClass;
213 UINT8 DeviceSubClass;
214 UINT8 DeviceProtocol;
215 } USB_CLASS_DEVICE_PATH;
216
217 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
218 #define MSG_USB_WWID_DP 0x10
219 typedef struct {
220 EFI_DEVICE_PATH_PROTOCOL Header;
221 UINT16 InterfaceNumber;
222 UINT16 VendorId;
223 UINT16 ProductId;
224 //
225 // CHAR16 SerialNumber[];
226 //
227 } USB_WWID_DEVICE_PATH;
228
229 #define MSG_DEVICE_LOGICAL_UNIT_DP 0x11
230 typedef struct {
231 EFI_DEVICE_PATH_PROTOCOL Header;
232 UINT8 Lun;
233 } DEVICE_LOGICAL_UNIT_DEVICE_PATH;
234 #endif
235
236 #define MSG_SATA_DP 0x12
237 typedef struct {
238 EFI_DEVICE_PATH_PROTOCOL Header;
239 UINT16 HBAPortNumber;
240 UINT16 PortMultiplierPortNumber;
241 UINT16 Lun;
242 } SATA_DEVICE_PATH;
243
244 #define MSG_I2O_DP 0x06
245 typedef struct {
246 EFI_DEVICE_PATH_PROTOCOL Header;
247 UINT32 Tid;
248 } I2O_DEVICE_PATH;
249
250 #define MSG_MAC_ADDR_DP 0x0b
251 typedef struct {
252 EFI_DEVICE_PATH_PROTOCOL Header;
253 EFI_MAC_ADDRESS MacAddress;
254 UINT8 IfType;
255 } MAC_ADDR_DEVICE_PATH;
256
257 #define MSG_IPv4_DP 0x0c
258 typedef struct {
259 EFI_DEVICE_PATH_PROTOCOL Header;
260 EFI_IPv4_ADDRESS LocalIpAddress;
261 EFI_IPv4_ADDRESS RemoteIpAddress;
262 UINT16 LocalPort;
263 UINT16 RemotePort;
264 UINT16 Protocol;
265 BOOLEAN StaticIpAddress;
266 } IPv4_DEVICE_PATH;
267
268 #define MSG_IPv6_DP 0x0d
269 typedef struct {
270 EFI_DEVICE_PATH_PROTOCOL Header;
271 EFI_IPv6_ADDRESS LocalIpAddress;
272 EFI_IPv6_ADDRESS RemoteIpAddress;
273 UINT16 LocalPort;
274 UINT16 RemotePort;
275 UINT16 Protocol;
276 BOOLEAN StaticIpAddress;
277 } IPv6_DEVICE_PATH;
278
279 #define MSG_INFINIBAND_DP 0x09
280 typedef struct {
281 EFI_DEVICE_PATH_PROTOCOL Header;
282 UINT32 ResourceFlags;
283 UINT8 PortGid[16];
284 UINT64 ServiceId;
285 UINT64 TargetPortId;
286 UINT64 DeviceId;
287 } INFINIBAND_DEVICE_PATH;
288
289 #define INFINIBAND_RESOURCE_FLAG_IOC_SERVICE 0x01
290 #define INFINIBAND_RESOURCE_FLAG_EXTENDED_BOOT_ENVIRONMENT 0x02
291 #define INFINIBAND_RESOURCE_FLAG_CONSOLE_PROTOCOL 0x04
292 #define INFINIBAND_RESOURCE_FLAG_STORAGE_PROTOCOL 0x08
293 #define INFINIBAND_RESOURCE_FLAG_NETWORK_PROTOCOL 0x10
294
295 #define MSG_UART_DP 0x0e
296 typedef struct {
297 EFI_DEVICE_PATH_PROTOCOL Header;
298 UINT32 Reserved;
299 UINT64 BaudRate;
300 UINT8 DataBits;
301 UINT8 Parity;
302 UINT8 StopBits;
303 } UART_DEVICE_PATH;
304
305 //
306 // Use VENDOR_DEVICE_PATH struct
307 //
308 #define MSG_VENDOR_DP 0x0a
309
310 #define DEVICE_PATH_MESSAGING_PC_ANSI \
311 { 0xe0c14753, 0xf9be, 0x11d2, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
312
313 #define DEVICE_PATH_MESSAGING_VT_100 \
314 { 0xdfa66065, 0xb419, 0x11d3, 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d }
315
316 #define DEVICE_PATH_MESSAGING_VT_100_PLUS \
317 { 0x7baec70b, 0x57e0, 0x4c76, 0x8e, 0x87, 0x2f, 0x9e, 0x28, 0x08, 0x83, 0x43 }
318
319 #define DEVICE_PATH_MESSAGING_VT_UTF8 \
320 { 0xad15a0d6, 0x8bec, 0x4acf, 0xa0, 0x73, 0xd0, 0x1d, 0xe7, 0x7e, 0x2d, 0x88 }
321
322 #define DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL \
323 { 0x37499a9d, 0x542f, 0x4c89, 0xa0, 0x26, 0x35, 0xda, 0x14, 0x20, 0x94, 0xe4 }
324
325 typedef struct {
326 EFI_DEVICE_PATH_PROTOCOL Header;
327 EFI_GUID Guid;
328 UINT32 FlowControlMap;
329 } UART_FLOW_CONTROL_DEVICE_PATH;
330
331 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
332
333 #define DEVICE_PATH_MESSAGING_SAS \
334 { 0xd487ddb4, 0x008b, 0x11d9, 0xaf, 0xdc, 0x00, 0x10, 0x83, 0xff, 0xca, 0x4d }
335
336 typedef struct {
337 EFI_DEVICE_PATH_PROTOCOL Header;
338 EFI_GUID Guid;
339 UINT32 Reserved;
340 UINT64 SasAddress;
341 UINT64 Lun;
342 UINT16 DeviceTopology;
343 UINT16 RelativeTargetPort;
344 } SAS_DEVICE_PATH;
345
346 #define MSG_ISCSI_DP 0x13
347 typedef struct {
348 EFI_DEVICE_PATH_PROTOCOL Header;
349 UINT16 NetworkProtocol;
350 UINT16 LoginOption;
351 UINT64 Lun;
352 UINT16 TargetPortalGroupTag;
353 // CHAR8 iSCSI Target Name
354 } ISCSI_DEVICE_PATH;
355
356 #define ISCSI_LOGIN_OPTION_NO_HEADER_DIGEST 0x0000
357 #define ISCSI_LOGIN_OPTION_HEADER_DIGEST_USING_CRC32C 0x0002
358 #define ISCSI_LOGIN_OPTION_NO_DATA_DIGEST 0x0000
359 #define ISCSI_LOGIN_OPTION_DATA_DIGEST_USING_CRC32C 0x0008
360 #define ISCSI_LOGIN_OPTION_AUTHMETHOD_CHAP 0x0000
361 #define ISCSI_LOGIN_OPTION_AUTHMETHOD_NON 0x1000
362 #define ISCSI_LOGIN_OPTION_CHAP_BI 0x0000
363 #define ISCSI_LOGIN_OPTION_CHAP_UNI 0x2000
364
365 #endif
366
367 //
368 // Media Device Path
369 //
370 #define MEDIA_DEVICE_PATH 0x04
371
372 #define MEDIA_HARDDRIVE_DP 0x01
373 typedef struct {
374 EFI_DEVICE_PATH_PROTOCOL Header;
375 UINT32 PartitionNumber;
376 UINT64 PartitionStart;
377 UINT64 PartitionSize;
378 UINT8 Signature[16];
379 UINT8 MBRType;
380 UINT8 SignatureType;
381 } HARDDRIVE_DEVICE_PATH;
382
383 #define MBR_TYPE_PCAT 0x01
384 #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
385
386 #define SIGNATURE_TYPE_MBR 0x01
387 #define SIGNATURE_TYPE_GUID 0x02
388
389 #define MEDIA_CDROM_DP 0x02
390 typedef struct {
391 EFI_DEVICE_PATH_PROTOCOL Header;
392 UINT32 BootEntry;
393 UINT64 PartitionStart;
394 UINT64 PartitionSize;
395 } CDROM_DEVICE_PATH;
396
397 //
398 // Use VENDOR_DEVICE_PATH struct
399 //
400 #define MEDIA_VENDOR_DP 0x03
401
402 #define MEDIA_FILEPATH_DP 0x04
403 typedef struct {
404 EFI_DEVICE_PATH_PROTOCOL Header;
405 CHAR16 PathName[1];
406 } FILEPATH_DEVICE_PATH;
407
408 #define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName)
409
410 #define MEDIA_PROTOCOL_DP 0x05
411 typedef struct {
412 EFI_DEVICE_PATH_PROTOCOL Header;
413 EFI_GUID Protocol;
414 } MEDIA_PROTOCOL_DEVICE_PATH;
415
416 #if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
417
418 #define MEDIA_FV_DP 0x06
419 typedef struct {
420 EFI_DEVICE_PATH_PROTOCOL Header;
421 EFI_GUID NameGuid;
422 } MEDIA_FW_VOL_DEVICE_PATH;
423
424 #define MEDIA_FV_FILEPATH_DP 0x07
425 typedef struct {
426 EFI_DEVICE_PATH_PROTOCOL Header;
427 EFI_GUID NameGuid;
428 } MEDIA_FW_VOL_FILEPATH_DEVICE_PATH;
429
430 #endif
431
432 //
433 // BBS Device Path
434 //
435 #define BBS_DEVICE_PATH 0x05
436 #define BBS_BBS_DP 0x01
437 typedef struct {
438 EFI_DEVICE_PATH_PROTOCOL Header;
439 UINT16 DeviceType;
440 UINT16 StatusFlag;
441 CHAR8 String[1];
442 } BBS_BBS_DEVICE_PATH;
443
444 //
445 // DeviceType definitions - from BBS specification
446 //
447 #define BBS_TYPE_FLOPPY 0x01
448 #define BBS_TYPE_HARDDRIVE 0x02
449 #define BBS_TYPE_CDROM 0x03
450 #define BBS_TYPE_PCMCIA 0x04
451 #define BBS_TYPE_USB 0x05
452 #define BBS_TYPE_EMBEDDED_NETWORK 0x06
453 #define BBS_TYPE_BEV 0x80
454 #define BBS_TYPE_UNKNOWN 0xFF
455
456 #define UNKNOWN_DEVICE_GUID \
457 { 0xcf31fac5, 0xc24e, 0x11d2, 0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b }
458
459 typedef struct {
460 VENDOR_DEVICE_PATH DevicePath;
461 UINT8 LegacyDriveLetter;
462 } UNKNOWN_DEVICE_VENDOR_DEVICE_PATH;
463
464
465 //
466 // Union of all possible Device Paths and pointers to Device Paths
467 //
468
469 typedef union {
470 EFI_DEVICE_PATH_PROTOCOL DevPath;
471 PCI_DEVICE_PATH Pci;
472 PCCARD_DEVICE_PATH PcCard;
473 MEMMAP_DEVICE_PATH MemMap;
474 VENDOR_DEVICE_PATH Vendor;
475
476 UNKNOWN_DEVICE_VENDOR_DEVICE_PATH UnknownVendor;
477
478 CONTROLLER_DEVICE_PATH Controller;
479 ACPI_HID_DEVICE_PATH Acpi;
480
481 ATAPI_DEVICE_PATH Atapi;
482 SCSI_DEVICE_PATH Scsi;
483 FIBRECHANNEL_DEVICE_PATH FibreChannel;
484 SATA_DEVICE_PATH Sata;
485
486 F1394_DEVICE_PATH F1394;
487 USB_DEVICE_PATH Usb;
488 USB_CLASS_DEVICE_PATH UsbClass;
489 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
490 USB_WWID_DEVICE_PATH UsbWwid;
491 #endif
492 I2O_DEVICE_PATH I2O;
493 MAC_ADDR_DEVICE_PATH MacAddr;
494 IPv4_DEVICE_PATH Ipv4;
495 IPv6_DEVICE_PATH Ipv6;
496 INFINIBAND_DEVICE_PATH InfiniBand;
497 UART_DEVICE_PATH Uart;
498 UART_FLOW_CONTROL_DEVICE_PATH UartFlowControl;
499 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
500 SAS_DEVICE_PATH Sas;
501 ISCSI_DEVICE_PATH Iscsi;
502 #endif
503 HARDDRIVE_DEVICE_PATH HardDrive;
504 CDROM_DEVICE_PATH CD;
505
506 FILEPATH_DEVICE_PATH FilePath;
507 MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol;
508
509 BBS_BBS_DEVICE_PATH Bbs;
510 } EFI_DEV_PATH;
511
512
513
514 typedef union {
515 EFI_DEVICE_PATH_PROTOCOL *DevPath;
516 PCI_DEVICE_PATH *Pci;
517 PCCARD_DEVICE_PATH *PcCard;
518 MEMMAP_DEVICE_PATH *MemMap;
519 VENDOR_DEVICE_PATH *Vendor;
520
521 UNKNOWN_DEVICE_VENDOR_DEVICE_PATH *UnknownVendor;
522
523 CONTROLLER_DEVICE_PATH *Controller;
524 ACPI_HID_DEVICE_PATH *Acpi;
525 ACPI_EXTENDED_HID_DEVICE_PATH *ExtendedAcpi;
526
527 ATAPI_DEVICE_PATH *Atapi;
528 SCSI_DEVICE_PATH *Scsi;
529 FIBRECHANNEL_DEVICE_PATH *FibreChannel;
530 SATA_DEVICE_PATH *Sata;
531
532 F1394_DEVICE_PATH *F1394;
533 USB_DEVICE_PATH *Usb;
534 USB_CLASS_DEVICE_PATH *UsbClass;
535 I2O_DEVICE_PATH *I2O;
536 MAC_ADDR_DEVICE_PATH *MacAddr;
537 IPv4_DEVICE_PATH *Ipv4;
538 IPv6_DEVICE_PATH *Ipv6;
539 INFINIBAND_DEVICE_PATH *InfiniBand;
540 UART_DEVICE_PATH *Uart;
541
542 HARDDRIVE_DEVICE_PATH *HardDrive;
543 CDROM_DEVICE_PATH *CD;
544
545 FILEPATH_DEVICE_PATH *FilePath;
546 MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol;
547
548 BBS_BBS_DEVICE_PATH *Bbs;
549 UINT8 *Raw;
550 } EFI_DEV_PATH_PTR;
551
552 #pragma pack()
553
554
555 #endif