1 /*++
2 
3 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
4 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] = (UINT8) 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 #define MSG_USB_WWID_DP           0x10
218 typedef struct {
219   EFI_DEVICE_PATH_PROTOCOL        Header;
220   UINT16                          InterfaceNumber;
221   UINT16                          VendorId;
222   UINT16                          ProductId;
223   //
224   // CHAR16                     SerialNumber[];
225   //
226 } USB_WWID_DEVICE_PATH;
227 
228 #define MSG_DEVICE_LOGICAL_UNIT_DP  0x11
229 typedef struct {
230   EFI_DEVICE_PATH_PROTOCOL        Header;
231   UINT8                           Lun;
232 } DEVICE_LOGICAL_UNIT_DEVICE_PATH;
233 
234 #define MSG_SATA_DP               0x12
235 typedef struct {
236   EFI_DEVICE_PATH_PROTOCOL        Header;
237   UINT16                          HBAPortNumber;
238   UINT16                          PortMultiplierPortNumber;
239   UINT16                          Lun;
240 } SATA_DEVICE_PATH;
241 
242 #define SATA_HBA_DIRECT_CONNECT_FLAG 0x8000
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 #define DEVICE_PATH_MESSAGING_SAS \
332     { 0xd487ddb4, 0x008b, 0x11d9, {0xaf, 0xdc, 0x00, 0x10, 0x83, 0xff, 0xca, 0x4d} }
333 
334 typedef struct {
335   EFI_DEVICE_PATH_PROTOCOL        Header;
336   EFI_GUID                        Guid;
337   UINT32                          Reserved;
338   UINT64                          SasAddress;
339   UINT64                          Lun;
340   UINT16                          DeviceTopology;
341   UINT16                          RelativeTargetPort;
342 } SAS_DEVICE_PATH;
343 
344 #define MSG_ISCSI_DP              0x13
345 typedef struct {
346   EFI_DEVICE_PATH_PROTOCOL        Header;
347   UINT16                          NetworkProtocol;
348   UINT16                          LoginOption;
349   UINT64                          Lun;
350   UINT16                          TargetPortalGroupTag;
351   // CHAR8                        iSCSI Target Name
352 } ISCSI_DEVICE_PATH;
353 
354 #define ISCSI_LOGIN_OPTION_NO_HEADER_DIGEST             0x0000
355 #define ISCSI_LOGIN_OPTION_HEADER_DIGEST_USING_CRC32C   0x0002
356 #define ISCSI_LOGIN_OPTION_NO_DATA_DIGEST               0x0000
357 #define ISCSI_LOGIN_OPTION_DATA_DIGEST_USING_CRC32C     0x0008
358 #define ISCSI_LOGIN_OPTION_AUTHMETHOD_CHAP              0x0000
359 #define ISCSI_LOGIN_OPTION_AUTHMETHOD_NON               0x1000
360 #define ISCSI_LOGIN_OPTION_CHAP_BI                      0x0000
361 #define ISCSI_LOGIN_OPTION_CHAP_UNI                     0x2000
362 
363 ///
364 /// VLAN Device Path SubType.
365 ///
366 #define MSG_VLAN_DP               0x14
367 typedef struct {
368   EFI_DEVICE_PATH_PROTOCOL        Header;
369   ///
370   /// VLAN identifier (0-4094).
371   ///
372   UINT16                          VlanId;
373 } VLAN_DEVICE_PATH;
374 
375 
376 //
377 // Media Device Path
378 //
379 #define MEDIA_DEVICE_PATH         0x04
380 
381 #define MEDIA_HARDDRIVE_DP        0x01
382 typedef struct {
383   EFI_DEVICE_PATH_PROTOCOL        Header;
384   UINT32                          PartitionNumber;
385   UINT64                          PartitionStart;
386   UINT64                          PartitionSize;
387   UINT8                           Signature[16];
388   UINT8                           MBRType;
389   UINT8                           SignatureType;
390 } HARDDRIVE_DEVICE_PATH;
391 
392 #define MBR_TYPE_PCAT             0x01
393 #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
394 
395 #define SIGNATURE_TYPE_MBR        0x01
396 #define SIGNATURE_TYPE_GUID       0x02
397 
398 #define MEDIA_CDROM_DP            0x02
399 typedef struct {
400   EFI_DEVICE_PATH_PROTOCOL        Header;
401   UINT32                          BootEntry;
402   UINT64                          PartitionStart;
403   UINT64                          PartitionSize;
404 } CDROM_DEVICE_PATH;
405 
406 //
407 // Use VENDOR_DEVICE_PATH struct
408 //
409 #define MEDIA_VENDOR_DP           0x03
410 
411 #define MEDIA_FILEPATH_DP         0x04
412 typedef struct {
413   EFI_DEVICE_PATH_PROTOCOL        Header;
414   CHAR16                          PathName[1];
415 } FILEPATH_DEVICE_PATH;
416 
417 #define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName)
418 
419 #define MEDIA_PROTOCOL_DP         0x05
420 typedef struct {
421   EFI_DEVICE_PATH_PROTOCOL        Header;
422   EFI_GUID                        Protocol;
423 } MEDIA_PROTOCOL_DEVICE_PATH;
424 
425 #define MEDIA_FV_DP  0x07
426 typedef struct {
427   EFI_DEVICE_PATH_PROTOCOL  Header;
428   EFI_GUID                  NameGuid;
429 } MEDIA_FW_VOL_DEVICE_PATH;
430 
431 #define MEDIA_FV_FILEPATH_DP  0x06
432 typedef struct {
433   EFI_DEVICE_PATH_PROTOCOL  Header;
434   EFI_GUID                  NameGuid;
435 } MEDIA_FW_VOL_FILEPATH_DEVICE_PATH;
436 
437 #define MEDIA_RELATIVE_OFFSET_RANGE_DP 0x08
438 typedef struct {
439   EFI_DEVICE_PATH_PROTOCOL  Header;
440   UINT32                    Reserved;
441   UINT64                    StartingOffset;
442   UINT64                    EndingOffset;
443 } MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH;
444 
445 //
446 // BBS Device Path
447 //
448 #define BBS_DEVICE_PATH           0x05
449 #define BBS_BBS_DP                0x01
450 typedef struct {
451   EFI_DEVICE_PATH_PROTOCOL        Header;
452   UINT16                          DeviceType;
453   UINT16                          StatusFlag;
454   CHAR8                           String[1];
455 } BBS_BBS_DEVICE_PATH;
456 
457 //
458 // DeviceType definitions - from BBS specification
459 //
460 #define BBS_TYPE_FLOPPY           0x01
461 #define BBS_TYPE_HARDDRIVE        0x02
462 #define BBS_TYPE_CDROM            0x03
463 #define BBS_TYPE_PCMCIA           0x04
464 #define BBS_TYPE_USB              0x05
465 #define BBS_TYPE_EMBEDDED_NETWORK 0x06
466 #define BBS_TYPE_BEV              0x80
467 #define BBS_TYPE_UNKNOWN          0xFF
468 
469 #define UNKNOWN_DEVICE_GUID \
470   { 0xcf31fac5, 0xc24e, 0x11d2,  {0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b}  }
471 
472 typedef struct {
473   VENDOR_DEVICE_PATH              DevicePath;
474   UINT8                           LegacyDriveLetter;
475 } UNKNOWN_DEVICE_VENDOR_DEVICE_PATH;
476 
477 
478 //
479 // Union of all possible Device Paths and pointers to Device Paths
480 //
481 
482 typedef union {
483   EFI_DEVICE_PATH_PROTOCOL             DevPath;
484   PCI_DEVICE_PATH                      Pci;
485   PCCARD_DEVICE_PATH                   PcCard;
486   MEMMAP_DEVICE_PATH                   MemMap;
487   VENDOR_DEVICE_PATH                   Vendor;
488 
489   UNKNOWN_DEVICE_VENDOR_DEVICE_PATH    UnknownVendor;
490 
491   CONTROLLER_DEVICE_PATH               Controller;
492   ACPI_HID_DEVICE_PATH                 Acpi;
493   ACPI_EXTENDED_HID_DEVICE_PATH        ExtendedAcpi;
494 
495   ATAPI_DEVICE_PATH                    Atapi;
496   SCSI_DEVICE_PATH                     Scsi;
497   FIBRECHANNEL_DEVICE_PATH             FibreChannel;
498   SATA_DEVICE_PATH                     Sata;
499 
500   F1394_DEVICE_PATH                    F1394;
501   USB_DEVICE_PATH                      Usb;
502   USB_CLASS_DEVICE_PATH                UsbClass;
503   USB_WWID_DEVICE_PATH                 UsbWwid;
504   DEVICE_LOGICAL_UNIT_DEVICE_PATH      LogicUnit;
505   I2O_DEVICE_PATH                      I2O;
506   MAC_ADDR_DEVICE_PATH                 MacAddr;
507   IPv4_DEVICE_PATH                     Ipv4;
508   IPv6_DEVICE_PATH                     Ipv6;
509   INFINIBAND_DEVICE_PATH               InfiniBand;
510   UART_DEVICE_PATH                     Uart;
511   UART_FLOW_CONTROL_DEVICE_PATH        UartFlowControl;
512   SAS_DEVICE_PATH                      Sas;
513   ISCSI_DEVICE_PATH                    Iscsi;
514   HARDDRIVE_DEVICE_PATH                HardDrive;
515   CDROM_DEVICE_PATH                    CD;
516 
517   FILEPATH_DEVICE_PATH                 FilePath;
518   MEDIA_PROTOCOL_DEVICE_PATH           MediaProtocol;
519 
520   MEDIA_FW_VOL_DEVICE_PATH             PiwgFirmwareVolume;
521   MEDIA_FW_VOL_FILEPATH_DEVICE_PATH    PiwgFirmwareFile;
522   MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH
523                                        Offset;
524 
525   BBS_BBS_DEVICE_PATH                  Bbs;
526 } EFI_DEV_PATH;
527 
528 
529 
530 typedef union {
531   EFI_DEVICE_PATH_PROTOCOL             *DevPath;
532   PCI_DEVICE_PATH                      *Pci;
533   PCCARD_DEVICE_PATH                   *PcCard;
534   MEMMAP_DEVICE_PATH                   *MemMap;
535   VENDOR_DEVICE_PATH                   *Vendor;
536 
537   UNKNOWN_DEVICE_VENDOR_DEVICE_PATH    *UnknownVendor;
538 
539   CONTROLLER_DEVICE_PATH               *Controller;
540   ACPI_HID_DEVICE_PATH                 *Acpi;
541   ACPI_EXTENDED_HID_DEVICE_PATH        *ExtendedAcpi;
542 
543   ATAPI_DEVICE_PATH                    *Atapi;
544   SCSI_DEVICE_PATH                     *Scsi;
545   FIBRECHANNEL_DEVICE_PATH             *FibreChannel;
546   SATA_DEVICE_PATH                     *Sata;
547 
548   F1394_DEVICE_PATH                    *F1394;
549   USB_DEVICE_PATH                      *Usb;
550   USB_CLASS_DEVICE_PATH                *UsbClass;
551   USB_WWID_DEVICE_PATH                 *UsbWwid;
552   DEVICE_LOGICAL_UNIT_DEVICE_PATH      *LogicUnit;
553   I2O_DEVICE_PATH                      *I2O;
554   MAC_ADDR_DEVICE_PATH                 *MacAddr;
555   IPv4_DEVICE_PATH                     *Ipv4;
556   IPv6_DEVICE_PATH                     *Ipv6;
557   INFINIBAND_DEVICE_PATH               *InfiniBand;
558   UART_DEVICE_PATH                     *Uart;
559   UART_FLOW_CONTROL_DEVICE_PATH        *UartFlowControl;
560 
561   SAS_DEVICE_PATH                      *Sas;
562   ISCSI_DEVICE_PATH                    *Iscsi;
563 
564   HARDDRIVE_DEVICE_PATH                *HardDrive;
565   CDROM_DEVICE_PATH                    *CD;
566 
567   FILEPATH_DEVICE_PATH                 *FilePath;
568   MEDIA_PROTOCOL_DEVICE_PATH           *MediaProtocol;
569 
570   MEDIA_FW_VOL_DEVICE_PATH             *PiwgFirmwareVolume;
571   MEDIA_FW_VOL_FILEPATH_DEVICE_PATH    *PiwgFirmwareFile;
572   MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH
573                                        *Offset;
574 
575   BBS_BBS_DEVICE_PATH                  *Bbs;
576   UINT8                                *Raw;
577 } EFI_DEV_PATH_PTR;
578 
579 #pragma pack()
580 
581 
582 #endif
583