xref: /freebsd/sys/contrib/edk2/Include/Protocol/DevicePath.h (revision 3245fa215aca18d135839a15c80ae1c905666a37)
10d1ba665SWarner Losh /** @file
20d1ba665SWarner Losh   The device path protocol as defined in UEFI 2.0.
30d1ba665SWarner Losh 
40d1ba665SWarner Losh   The device path represents a programmatic path to a device,
50d1ba665SWarner Losh   from a software point of view. The path must persist from boot to boot, so
60d1ba665SWarner Losh   it can not contain things like PCI bus numbers that change from boot to boot.
70d1ba665SWarner Losh 
8*3245fa21SMitchell Horne Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
9*3245fa21SMitchell Horne SPDX-License-Identifier: BSD-2-Clause-Patent
100d1ba665SWarner Losh 
110d1ba665SWarner Losh **/
120d1ba665SWarner Losh 
130d1ba665SWarner Losh #ifndef __EFI_DEVICE_PATH_PROTOCOL_H__
140d1ba665SWarner Losh #define __EFI_DEVICE_PATH_PROTOCOL_H__
150d1ba665SWarner Losh 
160d1ba665SWarner Losh #include <Guid/PcAnsi.h>
170d1ba665SWarner Losh #include <IndustryStandard/Bluetooth.h>
180d1ba665SWarner Losh #include <IndustryStandard/Acpi60.h>
190d1ba665SWarner Losh 
200d1ba665SWarner Losh ///
210d1ba665SWarner Losh /// Device Path protocol.
220d1ba665SWarner Losh ///
230d1ba665SWarner Losh #define EFI_DEVICE_PATH_PROTOCOL_GUID \
240d1ba665SWarner Losh   { \
250d1ba665SWarner Losh     0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
260d1ba665SWarner Losh   }
270d1ba665SWarner Losh 
280d1ba665SWarner Losh ///
290d1ba665SWarner Losh /// Device Path guid definition for backward-compatible with EFI1.1.
300d1ba665SWarner Losh ///
310d1ba665SWarner Losh #define DEVICE_PATH_PROTOCOL  EFI_DEVICE_PATH_PROTOCOL_GUID
320d1ba665SWarner Losh 
330d1ba665SWarner Losh #pragma pack(1)
340d1ba665SWarner Losh 
350d1ba665SWarner Losh /**
360d1ba665SWarner Losh   This protocol can be used on any device handle to obtain generic path/location
370d1ba665SWarner Losh   information concerning the physical device or logical device. If the handle does
380d1ba665SWarner Losh   not logically map to a physical device, the handle may not necessarily support
390d1ba665SWarner Losh   the device path protocol. The device path describes the location of the device
400d1ba665SWarner Losh   the handle is for. The size of the Device Path can be determined from the structures
410d1ba665SWarner Losh   that make up the Device Path.
420d1ba665SWarner Losh **/
430d1ba665SWarner Losh typedef struct {
440d1ba665SWarner Losh   UINT8 Type;       ///< 0x01 Hardware Device Path.
450d1ba665SWarner Losh                     ///< 0x02 ACPI Device Path.
460d1ba665SWarner Losh                     ///< 0x03 Messaging Device Path.
470d1ba665SWarner Losh                     ///< 0x04 Media Device Path.
480d1ba665SWarner Losh                     ///< 0x05 BIOS Boot Specification Device Path.
490d1ba665SWarner Losh                     ///< 0x7F End of Hardware Device Path.
500d1ba665SWarner Losh 
510d1ba665SWarner Losh   UINT8 SubType;    ///< Varies by Type
520d1ba665SWarner Losh                     ///< 0xFF End Entire Device Path, or
530d1ba665SWarner Losh                     ///< 0x01 End This Instance of a Device Path and start a new
540d1ba665SWarner Losh                     ///< Device Path.
550d1ba665SWarner Losh 
560d1ba665SWarner Losh   UINT8 Length[2];  ///< Specific Device Path data. Type and Sub-Type define
570d1ba665SWarner Losh                     ///< type of data. Size of data is included in Length.
580d1ba665SWarner Losh 
590d1ba665SWarner Losh } EFI_DEVICE_PATH_PROTOCOL;
600d1ba665SWarner Losh 
610d1ba665SWarner Losh ///
620d1ba665SWarner Losh /// Device Path protocol definition for backward-compatible with EFI1.1.
630d1ba665SWarner Losh ///
640d1ba665SWarner Losh typedef EFI_DEVICE_PATH_PROTOCOL  EFI_DEVICE_PATH;
650d1ba665SWarner Losh 
660d1ba665SWarner Losh ///
670d1ba665SWarner Losh /// Hardware Device Paths.
680d1ba665SWarner Losh ///
690d1ba665SWarner Losh #define HARDWARE_DEVICE_PATH      0x01
700d1ba665SWarner Losh 
710d1ba665SWarner Losh ///
720d1ba665SWarner Losh /// PCI Device Path SubType.
730d1ba665SWarner Losh ///
740d1ba665SWarner Losh #define HW_PCI_DP                 0x01
750d1ba665SWarner Losh 
760d1ba665SWarner Losh ///
770d1ba665SWarner Losh /// PCI Device Path.
780d1ba665SWarner Losh ///
790d1ba665SWarner Losh typedef struct {
800d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
810d1ba665SWarner Losh   ///
820d1ba665SWarner Losh   /// PCI Function Number.
830d1ba665SWarner Losh   ///
840d1ba665SWarner Losh   UINT8                           Function;
850d1ba665SWarner Losh   ///
860d1ba665SWarner Losh   /// PCI Device Number.
870d1ba665SWarner Losh   ///
880d1ba665SWarner Losh   UINT8                           Device;
890d1ba665SWarner Losh } PCI_DEVICE_PATH;
900d1ba665SWarner Losh 
910d1ba665SWarner Losh ///
920d1ba665SWarner Losh /// PCCARD Device Path SubType.
930d1ba665SWarner Losh ///
940d1ba665SWarner Losh #define HW_PCCARD_DP              0x02
950d1ba665SWarner Losh 
960d1ba665SWarner Losh ///
970d1ba665SWarner Losh /// PCCARD Device Path.
980d1ba665SWarner Losh ///
990d1ba665SWarner Losh typedef struct {
1000d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1010d1ba665SWarner Losh   ///
1020d1ba665SWarner Losh   /// Function Number (0 = First Function).
1030d1ba665SWarner Losh   ///
1040d1ba665SWarner Losh   UINT8                           FunctionNumber;
1050d1ba665SWarner Losh } PCCARD_DEVICE_PATH;
1060d1ba665SWarner Losh 
1070d1ba665SWarner Losh ///
1080d1ba665SWarner Losh /// Memory Mapped Device Path SubType.
1090d1ba665SWarner Losh ///
1100d1ba665SWarner Losh #define HW_MEMMAP_DP              0x03
1110d1ba665SWarner Losh 
1120d1ba665SWarner Losh ///
1130d1ba665SWarner Losh /// Memory Mapped Device Path.
1140d1ba665SWarner Losh ///
1150d1ba665SWarner Losh typedef struct {
1160d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1170d1ba665SWarner Losh   ///
1180d1ba665SWarner Losh   /// EFI_MEMORY_TYPE
1190d1ba665SWarner Losh   ///
1200d1ba665SWarner Losh   UINT32                          MemoryType;
1210d1ba665SWarner Losh   ///
1220d1ba665SWarner Losh   /// Starting Memory Address.
1230d1ba665SWarner Losh   ///
1240d1ba665SWarner Losh   EFI_PHYSICAL_ADDRESS            StartingAddress;
1250d1ba665SWarner Losh   ///
1260d1ba665SWarner Losh   /// Ending Memory Address.
1270d1ba665SWarner Losh   ///
1280d1ba665SWarner Losh   EFI_PHYSICAL_ADDRESS            EndingAddress;
1290d1ba665SWarner Losh } MEMMAP_DEVICE_PATH;
1300d1ba665SWarner Losh 
1310d1ba665SWarner Losh ///
1320d1ba665SWarner Losh /// Hardware Vendor Device Path SubType.
1330d1ba665SWarner Losh ///
1340d1ba665SWarner Losh #define HW_VENDOR_DP              0x04
1350d1ba665SWarner Losh 
1360d1ba665SWarner Losh ///
1370d1ba665SWarner Losh /// The Vendor Device Path allows the creation of vendor-defined Device Paths. A vendor must
1380d1ba665SWarner Losh /// allocate a Vendor GUID for a Device Path. The Vendor GUID can then be used to define the
1390d1ba665SWarner Losh /// contents on the n bytes that follow in the Vendor Device Path node.
1400d1ba665SWarner Losh ///
1410d1ba665SWarner Losh typedef struct {
1420d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1430d1ba665SWarner Losh   ///
1440d1ba665SWarner Losh   /// Vendor-assigned GUID that defines the data that follows.
1450d1ba665SWarner Losh   ///
1460d1ba665SWarner Losh   EFI_GUID                        Guid;
1470d1ba665SWarner Losh   ///
1480d1ba665SWarner Losh   /// Vendor-defined variable size data.
1490d1ba665SWarner Losh   ///
1500d1ba665SWarner Losh } VENDOR_DEVICE_PATH;
1510d1ba665SWarner Losh 
1520d1ba665SWarner Losh ///
1530d1ba665SWarner Losh /// Controller Device Path SubType.
1540d1ba665SWarner Losh ///
1550d1ba665SWarner Losh #define HW_CONTROLLER_DP          0x05
1560d1ba665SWarner Losh 
1570d1ba665SWarner Losh ///
1580d1ba665SWarner Losh /// Controller Device Path.
1590d1ba665SWarner Losh ///
1600d1ba665SWarner Losh typedef struct {
1610d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1620d1ba665SWarner Losh   ///
1630d1ba665SWarner Losh   /// Controller number.
1640d1ba665SWarner Losh   ///
1650d1ba665SWarner Losh   UINT32                          ControllerNumber;
1660d1ba665SWarner Losh } CONTROLLER_DEVICE_PATH;
1670d1ba665SWarner Losh 
1680d1ba665SWarner Losh ///
1690d1ba665SWarner Losh /// BMC Device Path SubType.
1700d1ba665SWarner Losh ///
1710d1ba665SWarner Losh #define HW_BMC_DP                 0x06
1720d1ba665SWarner Losh 
1730d1ba665SWarner Losh ///
1740d1ba665SWarner Losh /// BMC Device Path.
1750d1ba665SWarner Losh ///
1760d1ba665SWarner Losh typedef struct {
1770d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1780d1ba665SWarner Losh   ///
1790d1ba665SWarner Losh   /// Interface Type.
1800d1ba665SWarner Losh   ///
1810d1ba665SWarner Losh   UINT8                           InterfaceType;
1820d1ba665SWarner Losh   ///
1830d1ba665SWarner Losh   /// Base Address.
1840d1ba665SWarner Losh   ///
1850d1ba665SWarner Losh   UINT8                           BaseAddress[8];
1860d1ba665SWarner Losh } BMC_DEVICE_PATH;
1870d1ba665SWarner Losh 
1880d1ba665SWarner Losh ///
1890d1ba665SWarner Losh /// ACPI Device Paths.
1900d1ba665SWarner Losh ///
1910d1ba665SWarner Losh #define ACPI_DEVICE_PATH          0x02
1920d1ba665SWarner Losh 
1930d1ba665SWarner Losh ///
1940d1ba665SWarner Losh /// ACPI Device Path SubType.
1950d1ba665SWarner Losh ///
1960d1ba665SWarner Losh #define ACPI_DP                   0x01
1970d1ba665SWarner Losh typedef struct {
1980d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1990d1ba665SWarner Losh   ///
2000d1ba665SWarner Losh   /// Device's PnP hardware ID stored in a numeric 32-bit
2010d1ba665SWarner Losh   /// compressed EISA-type ID. This value must match the
2020d1ba665SWarner Losh   /// corresponding _HID in the ACPI name space.
2030d1ba665SWarner Losh   ///
2040d1ba665SWarner Losh   UINT32                          HID;
2050d1ba665SWarner Losh   ///
2060d1ba665SWarner Losh   /// Unique ID that is required by ACPI if two devices have the
2070d1ba665SWarner Losh   /// same _HID. This value must also match the corresponding
2080d1ba665SWarner Losh   /// _UID/_HID pair in the ACPI name space. Only the 32-bit
2090d1ba665SWarner Losh   /// numeric value type of _UID is supported. Thus, strings must
2100d1ba665SWarner Losh   /// not be used for the _UID in the ACPI name space.
2110d1ba665SWarner Losh   ///
2120d1ba665SWarner Losh   UINT32                          UID;
2130d1ba665SWarner Losh } ACPI_HID_DEVICE_PATH;
2140d1ba665SWarner Losh 
2150d1ba665SWarner Losh ///
2160d1ba665SWarner Losh /// Expanded ACPI Device Path SubType.
2170d1ba665SWarner Losh ///
2180d1ba665SWarner Losh #define ACPI_EXTENDED_DP          0x02
2190d1ba665SWarner Losh typedef struct {
2200d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
2210d1ba665SWarner Losh   ///
2220d1ba665SWarner Losh   /// Device's PnP hardware ID stored in a numeric 32-bit
2230d1ba665SWarner Losh   /// compressed EISA-type ID. This value must match the
2240d1ba665SWarner Losh   /// corresponding _HID in the ACPI name space.
2250d1ba665SWarner Losh   ///
2260d1ba665SWarner Losh   UINT32                          HID;
2270d1ba665SWarner Losh   ///
2280d1ba665SWarner Losh   /// Unique ID that is required by ACPI if two devices have the
2290d1ba665SWarner Losh   /// same _HID. This value must also match the corresponding
2300d1ba665SWarner Losh   /// _UID/_HID pair in the ACPI name space.
2310d1ba665SWarner Losh   ///
2320d1ba665SWarner Losh   UINT32                          UID;
2330d1ba665SWarner Losh   ///
2340d1ba665SWarner Losh   /// Device's compatible PnP hardware ID stored in a numeric
2350d1ba665SWarner Losh   /// 32-bit compressed EISA-type ID. This value must match at
2360d1ba665SWarner Losh   /// least one of the compatible device IDs returned by the
2370d1ba665SWarner Losh   /// corresponding _CID in the ACPI name space.
2380d1ba665SWarner Losh   ///
2390d1ba665SWarner Losh   UINT32                          CID;
2400d1ba665SWarner Losh   ///
2410d1ba665SWarner Losh   /// Optional variable length _HIDSTR.
2420d1ba665SWarner Losh   /// Optional variable length _UIDSTR.
2430d1ba665SWarner Losh   /// Optional variable length _CIDSTR.
2440d1ba665SWarner Losh   ///
2450d1ba665SWarner Losh } ACPI_EXTENDED_HID_DEVICE_PATH;
2460d1ba665SWarner Losh 
2470d1ba665SWarner Losh //
2480d1ba665SWarner Losh //  EISA ID Macro
2490d1ba665SWarner Losh //  EISA ID Definition 32-bits
2500d1ba665SWarner Losh //   bits[15:0] - three character compressed ASCII EISA ID.
2510d1ba665SWarner Losh //   bits[31:16] - binary number
2520d1ba665SWarner Losh //    Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z'
2530d1ba665SWarner Losh //
2540d1ba665SWarner Losh #define PNP_EISA_ID_CONST         0x41d0
2550d1ba665SWarner Losh #define EISA_ID(_Name, _Num)      ((UINT32)((_Name) | (_Num) << 16))
2560d1ba665SWarner Losh #define EISA_PNP_ID(_PNPId)       (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
2570d1ba665SWarner Losh #define EFI_PNP_ID(_PNPId)        (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
2580d1ba665SWarner Losh 
2590d1ba665SWarner Losh #define PNP_EISA_ID_MASK          0xffff
2600d1ba665SWarner Losh #define EISA_ID_TO_NUM(_Id)       ((_Id) >> 16)
2610d1ba665SWarner Losh 
2620d1ba665SWarner Losh ///
2630d1ba665SWarner Losh /// ACPI _ADR Device Path SubType.
2640d1ba665SWarner Losh ///
2650d1ba665SWarner Losh #define ACPI_ADR_DP               0x03
2660d1ba665SWarner Losh 
2670d1ba665SWarner Losh ///
2680d1ba665SWarner Losh /// The _ADR device path is used to contain video output device attributes to support the Graphics
2690d1ba665SWarner Losh /// Output Protocol. The device path can contain multiple _ADR entries if multiple video output
2700d1ba665SWarner Losh /// devices are displaying the same output.
2710d1ba665SWarner Losh ///
2720d1ba665SWarner Losh typedef struct {
2730d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
2740d1ba665SWarner Losh   ///
2750d1ba665SWarner Losh   /// _ADR value. For video output devices the value of this
2760d1ba665SWarner Losh   /// field comes from Table B-2 of the ACPI 3.0 specification. At
2770d1ba665SWarner Losh   /// least one _ADR value is required.
2780d1ba665SWarner Losh   ///
2790d1ba665SWarner Losh   UINT32                          ADR;
2800d1ba665SWarner Losh   //
2810d1ba665SWarner Losh   // This device path may optionally contain more than one _ADR entry.
2820d1ba665SWarner Losh   //
2830d1ba665SWarner Losh } ACPI_ADR_DEVICE_PATH;
2840d1ba665SWarner Losh 
285*3245fa21SMitchell Horne ///
286*3245fa21SMitchell Horne /// ACPI NVDIMM Device Path SubType.
287*3245fa21SMitchell Horne ///
288*3245fa21SMitchell Horne #define ACPI_NVDIMM_DP               0x04
289*3245fa21SMitchell Horne ///
290*3245fa21SMitchell Horne ///
291*3245fa21SMitchell Horne typedef struct {
292*3245fa21SMitchell Horne   EFI_DEVICE_PATH_PROTOCOL        Header;
293*3245fa21SMitchell Horne   ///
294*3245fa21SMitchell Horne   /// NFIT Device Handle, the _ADR of the NVDIMM device.
295*3245fa21SMitchell Horne   /// The value of this field comes from Section 9.20.3 of the ACPI 6.2A specification.
296*3245fa21SMitchell Horne   ///
297*3245fa21SMitchell Horne   UINT32                          NFITDeviceHandle;
298*3245fa21SMitchell Horne } ACPI_NVDIMM_DEVICE_PATH;
299*3245fa21SMitchell Horne 
3000d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_OTHER             0
3010d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_VGA               1
3020d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_TV                2
3030d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL  3
3040d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL  4
3050d1ba665SWarner Losh 
3060d1ba665SWarner Losh #define ACPI_DISPLAY_ADR(_DeviceIdScheme, _HeadId, _NonVgaOutput, _BiosCanDetect, _VendorInfo, _Type, _Port, _Index) \
3070d1ba665SWarner Losh           ((UINT32)(  ((UINT32)((_DeviceIdScheme) & 0x1) << 31) |  \
3080d1ba665SWarner Losh                       (((_HeadId)                 & 0x7) << 18) |  \
3090d1ba665SWarner Losh                       (((_NonVgaOutput)           & 0x1) << 17) |  \
3100d1ba665SWarner Losh                       (((_BiosCanDetect)          & 0x1) << 16) |  \
3110d1ba665SWarner Losh                       (((_VendorInfo)             & 0xf) << 12) |  \
3120d1ba665SWarner Losh                       (((_Type)                   & 0xf) << 8)  |  \
3130d1ba665SWarner Losh                       (((_Port)                   & 0xf) << 4)  |  \
3140d1ba665SWarner Losh                        ((_Index)                  & 0xf) ))
3150d1ba665SWarner Losh 
3160d1ba665SWarner Losh ///
3170d1ba665SWarner Losh /// Messaging Device Paths.
3180d1ba665SWarner Losh /// This Device Path is used to describe the connection of devices outside the resource domain of the
3190d1ba665SWarner Losh /// system. This Device Path can describe physical messaging information like SCSI ID, or abstract
3200d1ba665SWarner Losh /// information like networking protocol IP addresses.
3210d1ba665SWarner Losh ///
3220d1ba665SWarner Losh #define MESSAGING_DEVICE_PATH     0x03
3230d1ba665SWarner Losh 
3240d1ba665SWarner Losh ///
3250d1ba665SWarner Losh /// ATAPI Device Path SubType
3260d1ba665SWarner Losh ///
3270d1ba665SWarner Losh #define MSG_ATAPI_DP              0x01
3280d1ba665SWarner Losh typedef struct {
3290d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
3300d1ba665SWarner Losh   ///
3310d1ba665SWarner Losh   /// Set to zero for primary, or one for secondary.
3320d1ba665SWarner Losh   ///
3330d1ba665SWarner Losh   UINT8                           PrimarySecondary;
3340d1ba665SWarner Losh   ///
3350d1ba665SWarner Losh   /// Set to zero for master, or one for slave mode.
3360d1ba665SWarner Losh   ///
3370d1ba665SWarner Losh   UINT8                           SlaveMaster;
3380d1ba665SWarner Losh   ///
3390d1ba665SWarner Losh   /// Logical Unit Number.
3400d1ba665SWarner Losh   ///
3410d1ba665SWarner Losh   UINT16                          Lun;
3420d1ba665SWarner Losh } ATAPI_DEVICE_PATH;
3430d1ba665SWarner Losh 
3440d1ba665SWarner Losh ///
3450d1ba665SWarner Losh /// SCSI Device Path SubType.
3460d1ba665SWarner Losh ///
3470d1ba665SWarner Losh #define MSG_SCSI_DP               0x02
3480d1ba665SWarner Losh typedef struct {
3490d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
3500d1ba665SWarner Losh   ///
3510d1ba665SWarner Losh   /// Target ID on the SCSI bus (PUN).
3520d1ba665SWarner Losh   ///
3530d1ba665SWarner Losh   UINT16                          Pun;
3540d1ba665SWarner Losh   ///
3550d1ba665SWarner Losh   /// Logical Unit Number (LUN).
3560d1ba665SWarner Losh   ///
3570d1ba665SWarner Losh   UINT16                          Lun;
3580d1ba665SWarner Losh } SCSI_DEVICE_PATH;
3590d1ba665SWarner Losh 
3600d1ba665SWarner Losh ///
3610d1ba665SWarner Losh /// Fibre Channel SubType.
3620d1ba665SWarner Losh ///
3630d1ba665SWarner Losh #define MSG_FIBRECHANNEL_DP       0x03
3640d1ba665SWarner Losh typedef struct {
3650d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
3660d1ba665SWarner Losh   ///
3670d1ba665SWarner Losh   /// Reserved for the future.
3680d1ba665SWarner Losh   ///
3690d1ba665SWarner Losh   UINT32                          Reserved;
3700d1ba665SWarner Losh   ///
3710d1ba665SWarner Losh   /// Fibre Channel World Wide Number.
3720d1ba665SWarner Losh   ///
3730d1ba665SWarner Losh   UINT64                          WWN;
3740d1ba665SWarner Losh   ///
3750d1ba665SWarner Losh   /// Fibre Channel Logical Unit Number.
3760d1ba665SWarner Losh   ///
3770d1ba665SWarner Losh   UINT64                          Lun;
3780d1ba665SWarner Losh } FIBRECHANNEL_DEVICE_PATH;
3790d1ba665SWarner Losh 
3800d1ba665SWarner Losh ///
3810d1ba665SWarner Losh /// Fibre Channel Ex SubType.
3820d1ba665SWarner Losh ///
3830d1ba665SWarner Losh #define MSG_FIBRECHANNELEX_DP     0x15
3840d1ba665SWarner Losh typedef struct {
3850d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
3860d1ba665SWarner Losh   ///
3870d1ba665SWarner Losh   /// Reserved for the future.
3880d1ba665SWarner Losh   ///
3890d1ba665SWarner Losh   UINT32                          Reserved;
3900d1ba665SWarner Losh   ///
3910d1ba665SWarner Losh   /// 8 byte array containing Fibre Channel End Device Port Name.
3920d1ba665SWarner Losh   ///
3930d1ba665SWarner Losh   UINT8                           WWN[8];
3940d1ba665SWarner Losh   ///
3950d1ba665SWarner Losh   /// 8 byte array containing Fibre Channel Logical Unit Number.
3960d1ba665SWarner Losh   ///
3970d1ba665SWarner Losh   UINT8                           Lun[8];
3980d1ba665SWarner Losh } FIBRECHANNELEX_DEVICE_PATH;
3990d1ba665SWarner Losh 
4000d1ba665SWarner Losh ///
4010d1ba665SWarner Losh /// 1394 Device Path SubType
4020d1ba665SWarner Losh ///
4030d1ba665SWarner Losh #define MSG_1394_DP               0x04
4040d1ba665SWarner Losh typedef struct {
4050d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
4060d1ba665SWarner Losh   ///
4070d1ba665SWarner Losh   /// Reserved for the future.
4080d1ba665SWarner Losh   ///
4090d1ba665SWarner Losh   UINT32                          Reserved;
4100d1ba665SWarner Losh   ///
4110d1ba665SWarner Losh   /// 1394 Global Unique ID (GUID).
4120d1ba665SWarner Losh   ///
4130d1ba665SWarner Losh   UINT64                          Guid;
4140d1ba665SWarner Losh } F1394_DEVICE_PATH;
4150d1ba665SWarner Losh 
4160d1ba665SWarner Losh ///
4170d1ba665SWarner Losh /// USB Device Path SubType.
4180d1ba665SWarner Losh ///
4190d1ba665SWarner Losh #define MSG_USB_DP                0x05
4200d1ba665SWarner Losh typedef struct {
4210d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL      Header;
4220d1ba665SWarner Losh   ///
4230d1ba665SWarner Losh   /// USB Parent Port Number.
4240d1ba665SWarner Losh   ///
4250d1ba665SWarner Losh   UINT8                         ParentPortNumber;
4260d1ba665SWarner Losh   ///
4270d1ba665SWarner Losh   /// USB Interface Number.
4280d1ba665SWarner Losh   ///
4290d1ba665SWarner Losh   UINT8                         InterfaceNumber;
4300d1ba665SWarner Losh } USB_DEVICE_PATH;
4310d1ba665SWarner Losh 
4320d1ba665SWarner Losh ///
4330d1ba665SWarner Losh /// USB Class Device Path SubType.
4340d1ba665SWarner Losh ///
4350d1ba665SWarner Losh #define MSG_USB_CLASS_DP          0x0f
4360d1ba665SWarner Losh typedef struct {
4370d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL      Header;
4380d1ba665SWarner Losh   ///
4390d1ba665SWarner Losh   /// Vendor ID assigned by USB-IF. A value of 0xFFFF will
4400d1ba665SWarner Losh   /// match any Vendor ID.
4410d1ba665SWarner Losh   ///
4420d1ba665SWarner Losh   UINT16                        VendorId;
4430d1ba665SWarner Losh   ///
4440d1ba665SWarner Losh   /// Product ID assigned by USB-IF. A value of 0xFFFF will
4450d1ba665SWarner Losh   /// match any Product ID.
4460d1ba665SWarner Losh   ///
4470d1ba665SWarner Losh   UINT16                        ProductId;
4480d1ba665SWarner Losh   ///
4490d1ba665SWarner Losh   /// The class code assigned by the USB-IF. A value of 0xFF
4500d1ba665SWarner Losh   /// will match any class code.
4510d1ba665SWarner Losh   ///
4520d1ba665SWarner Losh   UINT8                         DeviceClass;
4530d1ba665SWarner Losh   ///
4540d1ba665SWarner Losh   /// The subclass code assigned by the USB-IF. A value of
4550d1ba665SWarner Losh   /// 0xFF will match any subclass code.
4560d1ba665SWarner Losh   ///
4570d1ba665SWarner Losh   UINT8                         DeviceSubClass;
4580d1ba665SWarner Losh   ///
4590d1ba665SWarner Losh   /// The protocol code assigned by the USB-IF. A value of
4600d1ba665SWarner Losh   /// 0xFF will match any protocol code.
4610d1ba665SWarner Losh   ///
4620d1ba665SWarner Losh   UINT8                         DeviceProtocol;
4630d1ba665SWarner Losh } USB_CLASS_DEVICE_PATH;
4640d1ba665SWarner Losh 
4650d1ba665SWarner Losh ///
4660d1ba665SWarner Losh /// USB WWID Device Path SubType.
4670d1ba665SWarner Losh ///
4680d1ba665SWarner Losh #define MSG_USB_WWID_DP           0x10
4690d1ba665SWarner Losh 
4700d1ba665SWarner Losh ///
4710d1ba665SWarner Losh /// This device path describes a USB device using its serial number.
4720d1ba665SWarner Losh ///
4730d1ba665SWarner Losh typedef struct {
4740d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL      Header;
4750d1ba665SWarner Losh   ///
4760d1ba665SWarner Losh   /// USB interface number.
4770d1ba665SWarner Losh   ///
4780d1ba665SWarner Losh   UINT16                        InterfaceNumber;
4790d1ba665SWarner Losh   ///
4800d1ba665SWarner Losh   /// USB vendor id of the device.
4810d1ba665SWarner Losh   ///
4820d1ba665SWarner Losh   UINT16                        VendorId;
4830d1ba665SWarner Losh   ///
4840d1ba665SWarner Losh   /// USB product id of the device.
4850d1ba665SWarner Losh   ///
4860d1ba665SWarner Losh   UINT16                        ProductId;
4870d1ba665SWarner Losh   ///
4880d1ba665SWarner Losh   /// Last 64-or-fewer UTF-16 characters of the USB
4890d1ba665SWarner Losh   /// serial number. The length of the string is
4900d1ba665SWarner Losh   /// determined by the Length field less the offset of the
4910d1ba665SWarner Losh   /// Serial Number field (10)
4920d1ba665SWarner Losh   ///
4930d1ba665SWarner Losh   /// CHAR16                     SerialNumber[...];
4940d1ba665SWarner Losh } USB_WWID_DEVICE_PATH;
4950d1ba665SWarner Losh 
4960d1ba665SWarner Losh ///
4970d1ba665SWarner Losh /// Device Logical Unit SubType.
4980d1ba665SWarner Losh ///
4990d1ba665SWarner Losh #define MSG_DEVICE_LOGICAL_UNIT_DP  0x11
5000d1ba665SWarner Losh typedef struct {
5010d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL      Header;
5020d1ba665SWarner Losh   ///
5030d1ba665SWarner Losh   /// Logical Unit Number for the interface.
5040d1ba665SWarner Losh   ///
5050d1ba665SWarner Losh   UINT8                         Lun;
5060d1ba665SWarner Losh } DEVICE_LOGICAL_UNIT_DEVICE_PATH;
5070d1ba665SWarner Losh 
5080d1ba665SWarner Losh ///
5090d1ba665SWarner Losh /// SATA Device Path SubType.
5100d1ba665SWarner Losh ///
5110d1ba665SWarner Losh #define MSG_SATA_DP               0x12
5120d1ba665SWarner Losh typedef struct {
5130d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
5140d1ba665SWarner Losh   ///
5150d1ba665SWarner Losh   /// The HBA port number that facilitates the connection to the
5160d1ba665SWarner Losh   /// device or a port multiplier. The value 0xFFFF is reserved.
5170d1ba665SWarner Losh   ///
5180d1ba665SWarner Losh   UINT16                          HBAPortNumber;
5190d1ba665SWarner Losh   ///
5200d1ba665SWarner Losh   /// The Port multiplier port number that facilitates the connection
5210d1ba665SWarner Losh   /// to the device. Must be set to 0xFFFF if the device is directly
5220d1ba665SWarner Losh   /// connected to the HBA.
5230d1ba665SWarner Losh   ///
5240d1ba665SWarner Losh   UINT16                          PortMultiplierPortNumber;
5250d1ba665SWarner Losh   ///
5260d1ba665SWarner Losh   /// Logical Unit Number.
5270d1ba665SWarner Losh   ///
5280d1ba665SWarner Losh   UINT16                          Lun;
5290d1ba665SWarner Losh } SATA_DEVICE_PATH;
5300d1ba665SWarner Losh 
5310d1ba665SWarner Losh ///
5320d1ba665SWarner Losh /// Flag for if the device is directly connected to the HBA.
5330d1ba665SWarner Losh ///
5340d1ba665SWarner Losh #define SATA_HBA_DIRECT_CONNECT_FLAG 0x8000
5350d1ba665SWarner Losh 
5360d1ba665SWarner Losh ///
5370d1ba665SWarner Losh /// I2O Device Path SubType.
5380d1ba665SWarner Losh ///
5390d1ba665SWarner Losh #define MSG_I2O_DP                0x06
5400d1ba665SWarner Losh typedef struct {
5410d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
5420d1ba665SWarner Losh   ///
5430d1ba665SWarner Losh   /// Target ID (TID) for a device.
5440d1ba665SWarner Losh   ///
5450d1ba665SWarner Losh   UINT32                          Tid;
5460d1ba665SWarner Losh } I2O_DEVICE_PATH;
5470d1ba665SWarner Losh 
5480d1ba665SWarner Losh ///
5490d1ba665SWarner Losh /// MAC Address Device Path SubType.
5500d1ba665SWarner Losh ///
5510d1ba665SWarner Losh #define MSG_MAC_ADDR_DP           0x0b
5520d1ba665SWarner Losh typedef struct {
5530d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
5540d1ba665SWarner Losh   ///
5550d1ba665SWarner Losh   /// The MAC address for a network interface padded with 0s.
5560d1ba665SWarner Losh   ///
5570d1ba665SWarner Losh   EFI_MAC_ADDRESS                 MacAddress;
5580d1ba665SWarner Losh   ///
5590d1ba665SWarner Losh   /// Network interface type(i.e. 802.3, FDDI).
5600d1ba665SWarner Losh   ///
5610d1ba665SWarner Losh   UINT8                           IfType;
5620d1ba665SWarner Losh } MAC_ADDR_DEVICE_PATH;
5630d1ba665SWarner Losh 
5640d1ba665SWarner Losh ///
5650d1ba665SWarner Losh /// IPv4 Device Path SubType
5660d1ba665SWarner Losh ///
5670d1ba665SWarner Losh #define MSG_IPv4_DP               0x0c
5680d1ba665SWarner Losh typedef struct {
5690d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
5700d1ba665SWarner Losh   ///
5710d1ba665SWarner Losh   /// The local IPv4 address.
5720d1ba665SWarner Losh   ///
5730d1ba665SWarner Losh   EFI_IPv4_ADDRESS                LocalIpAddress;
5740d1ba665SWarner Losh   ///
5750d1ba665SWarner Losh   /// The remote IPv4 address.
5760d1ba665SWarner Losh   ///
5770d1ba665SWarner Losh   EFI_IPv4_ADDRESS                RemoteIpAddress;
5780d1ba665SWarner Losh   ///
5790d1ba665SWarner Losh   /// The local port number.
5800d1ba665SWarner Losh   ///
5810d1ba665SWarner Losh   UINT16                          LocalPort;
5820d1ba665SWarner Losh   ///
5830d1ba665SWarner Losh   /// The remote port number.
5840d1ba665SWarner Losh   ///
5850d1ba665SWarner Losh   UINT16                          RemotePort;
5860d1ba665SWarner Losh   ///
5870d1ba665SWarner Losh   /// The network protocol(i.e. UDP, TCP).
5880d1ba665SWarner Losh   ///
5890d1ba665SWarner Losh   UINT16                          Protocol;
5900d1ba665SWarner Losh   ///
5910d1ba665SWarner Losh   /// 0x00 - The Source IP Address was assigned though DHCP.
5920d1ba665SWarner Losh   /// 0x01 - The Source IP Address is statically bound.
5930d1ba665SWarner Losh   ///
5940d1ba665SWarner Losh   BOOLEAN                         StaticIpAddress;
5950d1ba665SWarner Losh   ///
5960d1ba665SWarner Losh   /// The gateway IP address
5970d1ba665SWarner Losh   ///
5980d1ba665SWarner Losh   EFI_IPv4_ADDRESS                GatewayIpAddress;
5990d1ba665SWarner Losh   ///
6000d1ba665SWarner Losh   /// The subnet mask
6010d1ba665SWarner Losh   ///
6020d1ba665SWarner Losh   EFI_IPv4_ADDRESS                SubnetMask;
6030d1ba665SWarner Losh } IPv4_DEVICE_PATH;
6040d1ba665SWarner Losh 
6050d1ba665SWarner Losh ///
6060d1ba665SWarner Losh /// IPv6 Device Path SubType.
6070d1ba665SWarner Losh ///
6080d1ba665SWarner Losh #define MSG_IPv6_DP               0x0d
6090d1ba665SWarner Losh typedef struct {
6100d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
6110d1ba665SWarner Losh   ///
6120d1ba665SWarner Losh   /// The local IPv6 address.
6130d1ba665SWarner Losh   ///
6140d1ba665SWarner Losh   EFI_IPv6_ADDRESS                LocalIpAddress;
6150d1ba665SWarner Losh   ///
6160d1ba665SWarner Losh   /// The remote IPv6 address.
6170d1ba665SWarner Losh   ///
6180d1ba665SWarner Losh   EFI_IPv6_ADDRESS                RemoteIpAddress;
6190d1ba665SWarner Losh   ///
6200d1ba665SWarner Losh   /// The local port number.
6210d1ba665SWarner Losh   ///
6220d1ba665SWarner Losh   UINT16                          LocalPort;
6230d1ba665SWarner Losh   ///
6240d1ba665SWarner Losh   /// The remote port number.
6250d1ba665SWarner Losh   ///
6260d1ba665SWarner Losh   UINT16                          RemotePort;
6270d1ba665SWarner Losh   ///
6280d1ba665SWarner Losh   /// The network protocol(i.e. UDP, TCP).
6290d1ba665SWarner Losh   ///
6300d1ba665SWarner Losh   UINT16                          Protocol;
6310d1ba665SWarner Losh   ///
6320d1ba665SWarner Losh   /// 0x00 - The Local IP Address was manually configured.
6330d1ba665SWarner Losh   /// 0x01 - The Local IP Address is assigned through IPv6
6340d1ba665SWarner Losh   /// stateless auto-configuration.
6350d1ba665SWarner Losh   /// 0x02 - The Local IP Address is assigned through IPv6
6360d1ba665SWarner Losh   /// stateful configuration.
6370d1ba665SWarner Losh   ///
6380d1ba665SWarner Losh   UINT8                           IpAddressOrigin;
6390d1ba665SWarner Losh   ///
6400d1ba665SWarner Losh   /// The prefix length
6410d1ba665SWarner Losh   ///
6420d1ba665SWarner Losh   UINT8                           PrefixLength;
6430d1ba665SWarner Losh   ///
6440d1ba665SWarner Losh   /// The gateway IP address
6450d1ba665SWarner Losh   ///
6460d1ba665SWarner Losh   EFI_IPv6_ADDRESS                GatewayIpAddress;
6470d1ba665SWarner Losh } IPv6_DEVICE_PATH;
6480d1ba665SWarner Losh 
6490d1ba665SWarner Losh ///
6500d1ba665SWarner Losh /// InfiniBand Device Path SubType.
6510d1ba665SWarner Losh ///
6520d1ba665SWarner Losh #define MSG_INFINIBAND_DP         0x09
6530d1ba665SWarner Losh typedef struct {
6540d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
6550d1ba665SWarner Losh   ///
6560d1ba665SWarner Losh   /// Flags to help identify/manage InfiniBand device path elements:
6570d1ba665SWarner Losh   /// Bit 0 - IOC/Service (0b = IOC, 1b = Service).
6580d1ba665SWarner Losh   /// Bit 1 - Extend Boot Environment.
6590d1ba665SWarner Losh   /// Bit 2 - Console Protocol.
6600d1ba665SWarner Losh   /// Bit 3 - Storage Protocol.
6610d1ba665SWarner Losh   /// Bit 4 - Network Protocol.
6620d1ba665SWarner Losh   /// All other bits are reserved.
6630d1ba665SWarner Losh   ///
6640d1ba665SWarner Losh   UINT32                          ResourceFlags;
6650d1ba665SWarner Losh   ///
6660d1ba665SWarner Losh   /// 128-bit Global Identifier for remote fabric port.
6670d1ba665SWarner Losh   ///
6680d1ba665SWarner Losh   UINT8                           PortGid[16];
6690d1ba665SWarner Losh   ///
6700d1ba665SWarner Losh   /// 64-bit unique identifier to remote IOC or server process.
6710d1ba665SWarner Losh   /// Interpretation of field specified by Resource Flags (bit 0).
6720d1ba665SWarner Losh   ///
6730d1ba665SWarner Losh   UINT64                          ServiceId;
6740d1ba665SWarner Losh   ///
6750d1ba665SWarner Losh   /// 64-bit persistent ID of remote IOC port.
6760d1ba665SWarner Losh   ///
6770d1ba665SWarner Losh   UINT64                          TargetPortId;
6780d1ba665SWarner Losh   ///
6790d1ba665SWarner Losh   /// 64-bit persistent ID of remote device.
6800d1ba665SWarner Losh   ///
6810d1ba665SWarner Losh   UINT64                          DeviceId;
6820d1ba665SWarner Losh } INFINIBAND_DEVICE_PATH;
6830d1ba665SWarner Losh 
6840d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_IOC_SERVICE                0x01
6850d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_EXTENDED_BOOT_ENVIRONMENT  0x02
6860d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_CONSOLE_PROTOCOL           0x04
6870d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_STORAGE_PROTOCOL           0x08
6880d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_NETWORK_PROTOCOL           0x10
6890d1ba665SWarner Losh 
6900d1ba665SWarner Losh ///
6910d1ba665SWarner Losh /// UART Device Path SubType.
6920d1ba665SWarner Losh ///
6930d1ba665SWarner Losh #define MSG_UART_DP               0x0e
6940d1ba665SWarner Losh typedef struct {
6950d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
6960d1ba665SWarner Losh   ///
6970d1ba665SWarner Losh   /// Reserved.
6980d1ba665SWarner Losh   ///
6990d1ba665SWarner Losh   UINT32                          Reserved;
7000d1ba665SWarner Losh   ///
7010d1ba665SWarner Losh   /// The baud rate setting for the UART style device. A value of 0
7020d1ba665SWarner Losh   /// means that the device's default baud rate will be used.
7030d1ba665SWarner Losh   ///
7040d1ba665SWarner Losh   UINT64                          BaudRate;
7050d1ba665SWarner Losh   ///
7060d1ba665SWarner Losh   /// The number of data bits for the UART style device. A value
7070d1ba665SWarner Losh   /// of 0 means that the device's default number of data bits will be used.
7080d1ba665SWarner Losh   ///
7090d1ba665SWarner Losh   UINT8                           DataBits;
7100d1ba665SWarner Losh   ///
7110d1ba665SWarner Losh   /// The parity setting for the UART style device.
7120d1ba665SWarner Losh   /// Parity 0x00 - Default Parity.
7130d1ba665SWarner Losh   /// Parity 0x01 - No Parity.
7140d1ba665SWarner Losh   /// Parity 0x02 - Even Parity.
7150d1ba665SWarner Losh   /// Parity 0x03 - Odd Parity.
7160d1ba665SWarner Losh   /// Parity 0x04 - Mark Parity.
7170d1ba665SWarner Losh   /// Parity 0x05 - Space Parity.
7180d1ba665SWarner Losh   ///
7190d1ba665SWarner Losh   UINT8                           Parity;
7200d1ba665SWarner Losh   ///
7210d1ba665SWarner Losh   /// The number of stop bits for the UART style device.
7220d1ba665SWarner Losh   /// Stop Bits 0x00 - Default Stop Bits.
7230d1ba665SWarner Losh   /// Stop Bits 0x01 - 1 Stop Bit.
7240d1ba665SWarner Losh   /// Stop Bits 0x02 - 1.5 Stop Bits.
7250d1ba665SWarner Losh   /// Stop Bits 0x03 - 2 Stop Bits.
7260d1ba665SWarner Losh   ///
7270d1ba665SWarner Losh   UINT8                           StopBits;
7280d1ba665SWarner Losh } UART_DEVICE_PATH;
7290d1ba665SWarner Losh 
730*3245fa21SMitchell Horne ///
731*3245fa21SMitchell Horne /// NVDIMM Namespace Device Path SubType.
732*3245fa21SMitchell Horne ///
733*3245fa21SMitchell Horne #define NVDIMM_NAMESPACE_DP               0x20
734*3245fa21SMitchell Horne typedef struct {
735*3245fa21SMitchell Horne   EFI_DEVICE_PATH_PROTOCOL        Header;
736*3245fa21SMitchell Horne   ///
737*3245fa21SMitchell Horne   /// Namespace unique label identifier UUID.
738*3245fa21SMitchell Horne   ///
739*3245fa21SMitchell Horne   EFI_GUID Uuid;
740*3245fa21SMitchell Horne } NVDIMM_NAMESPACE_DEVICE_PATH;
741*3245fa21SMitchell Horne 
7420d1ba665SWarner Losh //
7430d1ba665SWarner Losh // Use VENDOR_DEVICE_PATH struct
7440d1ba665SWarner Losh //
7450d1ba665SWarner Losh #define MSG_VENDOR_DP             0x0a
7460d1ba665SWarner Losh typedef VENDOR_DEVICE_PATH        VENDOR_DEFINED_DEVICE_PATH;
7470d1ba665SWarner Losh 
7480d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_PC_ANSI     EFI_PC_ANSI_GUID
7490d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_100      EFI_VT_100_GUID
7500d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID
7510d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_UTF8     EFI_VT_UTF8_GUID
7520d1ba665SWarner Losh 
7530d1ba665SWarner Losh ///
7540d1ba665SWarner Losh /// A new device path node is defined to declare flow control characteristics.
7550d1ba665SWarner Losh /// UART Flow Control Messaging Device Path
7560d1ba665SWarner Losh ///
7570d1ba665SWarner Losh typedef struct {
7580d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
7590d1ba665SWarner Losh   ///
7600d1ba665SWarner Losh   /// DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL GUID.
7610d1ba665SWarner Losh   ///
7620d1ba665SWarner Losh   EFI_GUID                        Guid;
7630d1ba665SWarner Losh   ///
7640d1ba665SWarner Losh   /// Bitmap of supported flow control types.
7650d1ba665SWarner Losh   /// Bit 0 set indicates hardware flow control.
7660d1ba665SWarner Losh   /// Bit 1 set indicates Xon/Xoff flow control.
7670d1ba665SWarner Losh   /// All other bits are reserved and are clear.
7680d1ba665SWarner Losh   ///
7690d1ba665SWarner Losh   UINT32                          FlowControlMap;
7700d1ba665SWarner Losh } UART_FLOW_CONTROL_DEVICE_PATH;
7710d1ba665SWarner Losh 
7720d1ba665SWarner Losh #define UART_FLOW_CONTROL_HARDWARE         0x00000001
7730d1ba665SWarner Losh #define UART_FLOW_CONTROL_XON_XOFF         0x00000010
7740d1ba665SWarner Losh 
7750d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_SAS          EFI_SAS_DEVICE_PATH_GUID
7760d1ba665SWarner Losh ///
7770d1ba665SWarner Losh /// Serial Attached SCSI (SAS) Device Path.
7780d1ba665SWarner Losh ///
7790d1ba665SWarner Losh typedef struct {
7800d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
7810d1ba665SWarner Losh   ///
7820d1ba665SWarner Losh   /// DEVICE_PATH_MESSAGING_SAS GUID.
7830d1ba665SWarner Losh   ///
7840d1ba665SWarner Losh   EFI_GUID                        Guid;
7850d1ba665SWarner Losh   ///
7860d1ba665SWarner Losh   /// Reserved for future use.
7870d1ba665SWarner Losh   ///
7880d1ba665SWarner Losh   UINT32                          Reserved;
7890d1ba665SWarner Losh   ///
7900d1ba665SWarner Losh   /// SAS Address for Serial Attached SCSI Target.
7910d1ba665SWarner Losh   ///
7920d1ba665SWarner Losh   UINT64                          SasAddress;
7930d1ba665SWarner Losh   ///
7940d1ba665SWarner Losh   /// SAS Logical Unit Number.
7950d1ba665SWarner Losh   ///
7960d1ba665SWarner Losh   UINT64                          Lun;
7970d1ba665SWarner Losh   ///
7980d1ba665SWarner Losh   /// More Information about the device and its interconnect.
7990d1ba665SWarner Losh   ///
8000d1ba665SWarner Losh   UINT16                          DeviceTopology;
8010d1ba665SWarner Losh   ///
8020d1ba665SWarner Losh   /// Relative Target Port (RTP).
8030d1ba665SWarner Losh   ///
8040d1ba665SWarner Losh   UINT16                          RelativeTargetPort;
8050d1ba665SWarner Losh } SAS_DEVICE_PATH;
8060d1ba665SWarner Losh 
8070d1ba665SWarner Losh ///
8080d1ba665SWarner Losh /// Serial Attached SCSI (SAS) Ex Device Path SubType
8090d1ba665SWarner Losh ///
8100d1ba665SWarner Losh #define MSG_SASEX_DP              0x16
8110d1ba665SWarner Losh typedef struct {
8120d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
8130d1ba665SWarner Losh   ///
8140d1ba665SWarner Losh   /// 8-byte array of the SAS Address for Serial Attached SCSI Target Port.
8150d1ba665SWarner Losh   ///
8160d1ba665SWarner Losh   UINT8                           SasAddress[8];
8170d1ba665SWarner Losh   ///
8180d1ba665SWarner Losh   /// 8-byte array of the SAS Logical Unit Number.
8190d1ba665SWarner Losh   ///
8200d1ba665SWarner Losh   UINT8                           Lun[8];
8210d1ba665SWarner Losh   ///
8220d1ba665SWarner Losh   /// More Information about the device and its interconnect.
8230d1ba665SWarner Losh   ///
8240d1ba665SWarner Losh   UINT16                          DeviceTopology;
8250d1ba665SWarner Losh   ///
8260d1ba665SWarner Losh   /// Relative Target Port (RTP).
8270d1ba665SWarner Losh   ///
8280d1ba665SWarner Losh   UINT16                          RelativeTargetPort;
8290d1ba665SWarner Losh } SASEX_DEVICE_PATH;
8300d1ba665SWarner Losh 
8310d1ba665SWarner Losh ///
8320d1ba665SWarner Losh /// NvmExpress Namespace Device Path SubType.
8330d1ba665SWarner Losh ///
8340d1ba665SWarner Losh #define MSG_NVME_NAMESPACE_DP     0x17
8350d1ba665SWarner Losh typedef struct {
8360d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
8370d1ba665SWarner Losh   UINT32                          NamespaceId;
8380d1ba665SWarner Losh   UINT64                          NamespaceUuid;
8390d1ba665SWarner Losh } NVME_NAMESPACE_DEVICE_PATH;
8400d1ba665SWarner Losh 
8410d1ba665SWarner Losh ///
842*3245fa21SMitchell Horne /// DNS Device Path SubType
843*3245fa21SMitchell Horne ///
844*3245fa21SMitchell Horne #define MSG_DNS_DP                0x1F
845*3245fa21SMitchell Horne typedef struct {
846*3245fa21SMitchell Horne   EFI_DEVICE_PATH_PROTOCOL        Header;
847*3245fa21SMitchell Horne   ///
848*3245fa21SMitchell Horne   /// Indicates the DNS server address is IPv4 or IPv6 address.
849*3245fa21SMitchell Horne   ///
850*3245fa21SMitchell Horne   UINT8                           IsIPv6;
851*3245fa21SMitchell Horne   ///
852*3245fa21SMitchell Horne   /// Instance of the DNS server address.
853*3245fa21SMitchell Horne   ///
854*3245fa21SMitchell Horne   EFI_IP_ADDRESS                  DnsServerIp[];
855*3245fa21SMitchell Horne } DNS_DEVICE_PATH;
856*3245fa21SMitchell Horne 
857*3245fa21SMitchell Horne ///
8580d1ba665SWarner Losh /// Uniform Resource Identifiers (URI) Device Path SubType
8590d1ba665SWarner Losh ///
8600d1ba665SWarner Losh #define MSG_URI_DP                0x18
8610d1ba665SWarner Losh typedef struct {
8620d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
8630d1ba665SWarner Losh   ///
8640d1ba665SWarner Losh   /// Instance of the URI pursuant to RFC 3986.
8650d1ba665SWarner Losh   ///
8660d1ba665SWarner Losh   CHAR8                           Uri[];
8670d1ba665SWarner Losh } URI_DEVICE_PATH;
8680d1ba665SWarner Losh 
8690d1ba665SWarner Losh ///
8700d1ba665SWarner Losh /// Universal Flash Storage (UFS) Device Path SubType.
8710d1ba665SWarner Losh ///
8720d1ba665SWarner Losh #define MSG_UFS_DP                0x19
8730d1ba665SWarner Losh typedef struct {
8740d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
8750d1ba665SWarner Losh   ///
8760d1ba665SWarner Losh   /// Target ID on the UFS bus (PUN).
8770d1ba665SWarner Losh   ///
8780d1ba665SWarner Losh   UINT8                           Pun;
8790d1ba665SWarner Losh   ///
8800d1ba665SWarner Losh   /// Logical Unit Number (LUN).
8810d1ba665SWarner Losh   ///
8820d1ba665SWarner Losh   UINT8                           Lun;
8830d1ba665SWarner Losh } UFS_DEVICE_PATH;
8840d1ba665SWarner Losh 
8850d1ba665SWarner Losh ///
8860d1ba665SWarner Losh /// SD (Secure Digital) Device Path SubType.
8870d1ba665SWarner Losh ///
8880d1ba665SWarner Losh #define MSG_SD_DP                 0x1A
8890d1ba665SWarner Losh typedef struct {
8900d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
8910d1ba665SWarner Losh   UINT8                           SlotNumber;
8920d1ba665SWarner Losh } SD_DEVICE_PATH;
8930d1ba665SWarner Losh 
8940d1ba665SWarner Losh ///
8950d1ba665SWarner Losh /// EMMC (Embedded MMC) Device Path SubType.
8960d1ba665SWarner Losh ///
8970d1ba665SWarner Losh #define MSG_EMMC_DP                 0x1D
8980d1ba665SWarner Losh typedef struct {
8990d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
9000d1ba665SWarner Losh   UINT8                           SlotNumber;
9010d1ba665SWarner Losh } EMMC_DEVICE_PATH;
9020d1ba665SWarner Losh 
9030d1ba665SWarner Losh ///
9040d1ba665SWarner Losh /// iSCSI Device Path SubType
9050d1ba665SWarner Losh ///
9060d1ba665SWarner Losh #define MSG_ISCSI_DP              0x13
9070d1ba665SWarner Losh typedef struct {
9080d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
9090d1ba665SWarner Losh   ///
9100d1ba665SWarner Losh   /// Network Protocol (0 = TCP, 1+ = reserved).
9110d1ba665SWarner Losh   ///
9120d1ba665SWarner Losh   UINT16                          NetworkProtocol;
9130d1ba665SWarner Losh   ///
9140d1ba665SWarner Losh   /// iSCSI Login Options.
9150d1ba665SWarner Losh   ///
9160d1ba665SWarner Losh   UINT16                          LoginOption;
9170d1ba665SWarner Losh   ///
9180d1ba665SWarner Losh   /// iSCSI Logical Unit Number.
9190d1ba665SWarner Losh   ///
9200d1ba665SWarner Losh   UINT64                          Lun;
9210d1ba665SWarner Losh   ///
9220d1ba665SWarner Losh   /// iSCSI Target Portal group tag the initiator intends
9230d1ba665SWarner Losh   /// to establish a session with.
9240d1ba665SWarner Losh   ///
9250d1ba665SWarner Losh   UINT16                          TargetPortalGroupTag;
9260d1ba665SWarner Losh   ///
9270d1ba665SWarner Losh   /// iSCSI NodeTarget Name. The length of the name
9280d1ba665SWarner Losh   /// is determined by subtracting the offset of this field from Length.
9290d1ba665SWarner Losh   ///
9300d1ba665SWarner Losh   /// CHAR8                        iSCSI Target Name.
9310d1ba665SWarner Losh } ISCSI_DEVICE_PATH;
9320d1ba665SWarner Losh 
9330d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_NO_HEADER_DIGEST             0x0000
9340d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_HEADER_DIGEST_USING_CRC32C   0x0002
9350d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_NO_DATA_DIGEST               0x0000
9360d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_DATA_DIGEST_USING_CRC32C     0x0008
9370d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_AUTHMETHOD_CHAP              0x0000
9380d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_AUTHMETHOD_NON               0x1000
9390d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_CHAP_BI                      0x0000
9400d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_CHAP_UNI                     0x2000
9410d1ba665SWarner Losh 
9420d1ba665SWarner Losh ///
9430d1ba665SWarner Losh /// VLAN Device Path SubType.
9440d1ba665SWarner Losh ///
9450d1ba665SWarner Losh #define MSG_VLAN_DP               0x14
9460d1ba665SWarner Losh typedef struct {
9470d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
9480d1ba665SWarner Losh   ///
9490d1ba665SWarner Losh   /// VLAN identifier (0-4094).
9500d1ba665SWarner Losh   ///
9510d1ba665SWarner Losh   UINT16                          VlanId;
9520d1ba665SWarner Losh } VLAN_DEVICE_PATH;
9530d1ba665SWarner Losh 
9540d1ba665SWarner Losh ///
9550d1ba665SWarner Losh /// Bluetooth Device Path SubType.
9560d1ba665SWarner Losh ///
9570d1ba665SWarner Losh #define MSG_BLUETOOTH_DP     0x1b
9580d1ba665SWarner Losh typedef struct {
9590d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
9600d1ba665SWarner Losh   ///
9610d1ba665SWarner Losh   /// 48bit Bluetooth device address.
9620d1ba665SWarner Losh   ///
9630d1ba665SWarner Losh   BLUETOOTH_ADDRESS               BD_ADDR;
9640d1ba665SWarner Losh } BLUETOOTH_DEVICE_PATH;
9650d1ba665SWarner Losh 
9660d1ba665SWarner Losh ///
9670d1ba665SWarner Losh /// Wi-Fi Device Path SubType.
9680d1ba665SWarner Losh ///
9690d1ba665SWarner Losh #define MSG_WIFI_DP               0x1C
9700d1ba665SWarner Losh typedef struct {
9710d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
9720d1ba665SWarner Losh   ///
9730d1ba665SWarner Losh   /// Service set identifier. A 32-byte octets string.
9740d1ba665SWarner Losh   ///
9750d1ba665SWarner Losh   UINT8                           SSId[32];
9760d1ba665SWarner Losh } WIFI_DEVICE_PATH;
9770d1ba665SWarner Losh 
978*3245fa21SMitchell Horne ///
979*3245fa21SMitchell Horne /// Bluetooth LE Device Path SubType.
980*3245fa21SMitchell Horne ///
981*3245fa21SMitchell Horne #define MSG_BLUETOOTH_LE_DP       0x1E
982*3245fa21SMitchell Horne typedef struct {
983*3245fa21SMitchell Horne   EFI_DEVICE_PATH_PROTOCOL        Header;
984*3245fa21SMitchell Horne   BLUETOOTH_LE_ADDRESS            Address;
985*3245fa21SMitchell Horne } BLUETOOTH_LE_DEVICE_PATH;
986*3245fa21SMitchell Horne 
9870d1ba665SWarner Losh //
9880d1ba665SWarner Losh // Media Device Path
9890d1ba665SWarner Losh //
9900d1ba665SWarner Losh #define MEDIA_DEVICE_PATH         0x04
9910d1ba665SWarner Losh 
9920d1ba665SWarner Losh ///
9930d1ba665SWarner Losh /// Hard Drive Media Device Path SubType.
9940d1ba665SWarner Losh ///
9950d1ba665SWarner Losh #define MEDIA_HARDDRIVE_DP        0x01
9960d1ba665SWarner Losh 
9970d1ba665SWarner Losh ///
9980d1ba665SWarner Losh /// The Hard Drive Media Device Path is used to represent a partition on a hard drive.
9990d1ba665SWarner Losh ///
10000d1ba665SWarner Losh typedef struct {
10010d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
10020d1ba665SWarner Losh   ///
10030d1ba665SWarner Losh   /// Describes the entry in a partition table, starting with entry 1.
10040d1ba665SWarner Losh   /// Partition number zero represents the entire device. Valid
10050d1ba665SWarner Losh   /// partition numbers for a MBR partition are [1, 4]. Valid
10060d1ba665SWarner Losh   /// partition numbers for a GPT partition are [1, NumberOfPartitionEntries].
10070d1ba665SWarner Losh   ///
10080d1ba665SWarner Losh   UINT32                          PartitionNumber;
10090d1ba665SWarner Losh   ///
10100d1ba665SWarner Losh   /// Starting LBA of the partition on the hard drive.
10110d1ba665SWarner Losh   ///
10120d1ba665SWarner Losh   UINT64                          PartitionStart;
10130d1ba665SWarner Losh   ///
10140d1ba665SWarner Losh   /// Size of the partition in units of Logical Blocks.
10150d1ba665SWarner Losh   ///
10160d1ba665SWarner Losh   UINT64                          PartitionSize;
10170d1ba665SWarner Losh   ///
10180d1ba665SWarner Losh   /// Signature unique to this partition:
10190d1ba665SWarner Losh   /// If SignatureType is 0, this field has to be initialized with 16 zeros.
10200d1ba665SWarner Losh   /// If SignatureType is 1, the MBR signature is stored in the first 4 bytes of this field.
10210d1ba665SWarner Losh   /// The other 12 bytes are initialized with zeros.
10220d1ba665SWarner Losh   /// If SignatureType is 2, this field contains a 16 byte signature.
10230d1ba665SWarner Losh   ///
10240d1ba665SWarner Losh   UINT8                           Signature[16];
10250d1ba665SWarner Losh   ///
10260d1ba665SWarner Losh   /// Partition Format: (Unused values reserved).
10270d1ba665SWarner Losh   /// 0x01 - PC-AT compatible legacy MBR.
10280d1ba665SWarner Losh   /// 0x02 - GUID Partition Table.
10290d1ba665SWarner Losh   ///
10300d1ba665SWarner Losh   UINT8                           MBRType;
10310d1ba665SWarner Losh   ///
10320d1ba665SWarner Losh   /// Type of Disk Signature: (Unused values reserved).
10330d1ba665SWarner Losh   /// 0x00 - No Disk Signature.
10340d1ba665SWarner Losh   /// 0x01 - 32-bit signature from address 0x1b8 of the type 0x01 MBR.
10350d1ba665SWarner Losh   /// 0x02 - GUID signature.
10360d1ba665SWarner Losh   ///
10370d1ba665SWarner Losh   UINT8                           SignatureType;
10380d1ba665SWarner Losh } HARDDRIVE_DEVICE_PATH;
10390d1ba665SWarner Losh 
10400d1ba665SWarner Losh #define MBR_TYPE_PCAT             0x01
10410d1ba665SWarner Losh #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
10420d1ba665SWarner Losh 
10430d1ba665SWarner Losh #define NO_DISK_SIGNATURE         0x00
10440d1ba665SWarner Losh #define SIGNATURE_TYPE_MBR        0x01
10450d1ba665SWarner Losh #define SIGNATURE_TYPE_GUID       0x02
10460d1ba665SWarner Losh 
10470d1ba665SWarner Losh ///
10480d1ba665SWarner Losh /// CD-ROM Media Device Path SubType.
10490d1ba665SWarner Losh ///
10500d1ba665SWarner Losh #define MEDIA_CDROM_DP            0x02
10510d1ba665SWarner Losh 
10520d1ba665SWarner Losh ///
10530d1ba665SWarner Losh /// The CD-ROM Media Device Path is used to define a system partition that exists on a CD-ROM.
10540d1ba665SWarner Losh ///
10550d1ba665SWarner Losh typedef struct {
10560d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
10570d1ba665SWarner Losh   ///
10580d1ba665SWarner Losh   /// Boot Entry number from the Boot Catalog. The Initial/Default entry is defined as zero.
10590d1ba665SWarner Losh   ///
10600d1ba665SWarner Losh   UINT32                          BootEntry;
10610d1ba665SWarner Losh   ///
10620d1ba665SWarner Losh   /// Starting RBA of the partition on the medium. CD-ROMs use Relative logical Block Addressing.
10630d1ba665SWarner Losh   ///
10640d1ba665SWarner Losh   UINT64                          PartitionStart;
10650d1ba665SWarner Losh   ///
10660d1ba665SWarner Losh   /// Size of the partition in units of Blocks, also called Sectors.
10670d1ba665SWarner Losh   ///
10680d1ba665SWarner Losh   UINT64                          PartitionSize;
10690d1ba665SWarner Losh } CDROM_DEVICE_PATH;
10700d1ba665SWarner Losh 
10710d1ba665SWarner Losh //
10720d1ba665SWarner Losh // Use VENDOR_DEVICE_PATH struct
10730d1ba665SWarner Losh //
10740d1ba665SWarner Losh #define MEDIA_VENDOR_DP           0x03  ///< Media vendor device path subtype.
10750d1ba665SWarner Losh 
10760d1ba665SWarner Losh ///
10770d1ba665SWarner Losh /// File Path Media Device Path SubType
10780d1ba665SWarner Losh ///
10790d1ba665SWarner Losh #define MEDIA_FILEPATH_DP         0x04
10800d1ba665SWarner Losh typedef struct {
10810d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
10820d1ba665SWarner Losh   ///
10830d1ba665SWarner Losh   /// A NULL-terminated Path string including directory and file names.
10840d1ba665SWarner Losh   ///
10850d1ba665SWarner Losh   CHAR16                          PathName[1];
10860d1ba665SWarner Losh } FILEPATH_DEVICE_PATH;
10870d1ba665SWarner Losh 
10880d1ba665SWarner Losh #define SIZE_OF_FILEPATH_DEVICE_PATH  OFFSET_OF(FILEPATH_DEVICE_PATH,PathName)
10890d1ba665SWarner Losh 
10900d1ba665SWarner Losh ///
10910d1ba665SWarner Losh /// Media Protocol Device Path SubType.
10920d1ba665SWarner Losh ///
10930d1ba665SWarner Losh #define MEDIA_PROTOCOL_DP         0x05
10940d1ba665SWarner Losh 
10950d1ba665SWarner Losh ///
10960d1ba665SWarner Losh /// The Media Protocol Device Path is used to denote the protocol that is being
10970d1ba665SWarner Losh /// used in a device path at the location of the path specified.
10980d1ba665SWarner Losh /// Many protocols are inherent to the style of device path.
10990d1ba665SWarner Losh ///
11000d1ba665SWarner Losh typedef struct {
11010d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
11020d1ba665SWarner Losh   ///
11030d1ba665SWarner Losh   /// The ID of the protocol.
11040d1ba665SWarner Losh   ///
11050d1ba665SWarner Losh   EFI_GUID                        Protocol;
11060d1ba665SWarner Losh } MEDIA_PROTOCOL_DEVICE_PATH;
11070d1ba665SWarner Losh 
11080d1ba665SWarner Losh ///
11090d1ba665SWarner Losh /// PIWG Firmware File SubType.
11100d1ba665SWarner Losh ///
11110d1ba665SWarner Losh #define MEDIA_PIWG_FW_FILE_DP     0x06
11120d1ba665SWarner Losh 
11130d1ba665SWarner Losh ///
11140d1ba665SWarner Losh /// This device path is used by systems implementing the UEFI PI Specification 1.0 to describe a firmware file.
11150d1ba665SWarner Losh ///
11160d1ba665SWarner Losh typedef struct {
11170d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
11180d1ba665SWarner Losh   ///
11190d1ba665SWarner Losh   /// Firmware file name
11200d1ba665SWarner Losh   ///
11210d1ba665SWarner Losh   EFI_GUID                        FvFileName;
11220d1ba665SWarner Losh } MEDIA_FW_VOL_FILEPATH_DEVICE_PATH;
11230d1ba665SWarner Losh 
11240d1ba665SWarner Losh ///
11250d1ba665SWarner Losh /// PIWG Firmware Volume Device Path SubType.
11260d1ba665SWarner Losh ///
11270d1ba665SWarner Losh #define MEDIA_PIWG_FW_VOL_DP      0x07
11280d1ba665SWarner Losh 
11290d1ba665SWarner Losh ///
11300d1ba665SWarner Losh /// This device path is used by systems implementing the UEFI PI Specification 1.0 to describe a firmware volume.
11310d1ba665SWarner Losh ///
11320d1ba665SWarner Losh typedef struct {
11330d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
11340d1ba665SWarner Losh   ///
11350d1ba665SWarner Losh   /// Firmware volume name.
11360d1ba665SWarner Losh   ///
11370d1ba665SWarner Losh   EFI_GUID                        FvName;
11380d1ba665SWarner Losh } MEDIA_FW_VOL_DEVICE_PATH;
11390d1ba665SWarner Losh 
11400d1ba665SWarner Losh ///
11410d1ba665SWarner Losh /// Media relative offset range device path.
11420d1ba665SWarner Losh ///
11430d1ba665SWarner Losh #define MEDIA_RELATIVE_OFFSET_RANGE_DP 0x08
11440d1ba665SWarner Losh 
11450d1ba665SWarner Losh ///
11460d1ba665SWarner Losh /// Used to describe the offset range of media relative.
11470d1ba665SWarner Losh ///
11480d1ba665SWarner Losh typedef struct {
11490d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL  Header;
11500d1ba665SWarner Losh   UINT32                    Reserved;
11510d1ba665SWarner Losh   UINT64                    StartingOffset;
11520d1ba665SWarner Losh   UINT64                    EndingOffset;
11530d1ba665SWarner Losh } MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH;
11540d1ba665SWarner Losh 
11550d1ba665SWarner Losh ///
11560d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting a raw disk format in volatile memory.
11570d1ba665SWarner Losh ///
11580d1ba665SWarner Losh #define EFI_VIRTUAL_DISK_GUID               EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE
11590d1ba665SWarner Losh 
11600d1ba665SWarner Losh extern  EFI_GUID                            gEfiVirtualDiskGuid;
11610d1ba665SWarner Losh 
11620d1ba665SWarner Losh ///
11630d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting an ISO image in volatile memory.
11640d1ba665SWarner Losh ///
11650d1ba665SWarner Losh #define EFI_VIRTUAL_CD_GUID                 EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE
11660d1ba665SWarner Losh 
11670d1ba665SWarner Losh extern  EFI_GUID                            gEfiVirtualCdGuid;
11680d1ba665SWarner Losh 
11690d1ba665SWarner Losh ///
11700d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting a raw disk format in persistent memory.
11710d1ba665SWarner Losh ///
11720d1ba665SWarner Losh #define EFI_PERSISTENT_VIRTUAL_DISK_GUID    EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT
11730d1ba665SWarner Losh 
11740d1ba665SWarner Losh extern  EFI_GUID                            gEfiPersistentVirtualDiskGuid;
11750d1ba665SWarner Losh 
11760d1ba665SWarner Losh ///
11770d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting an ISO image in persistent memory.
11780d1ba665SWarner Losh ///
11790d1ba665SWarner Losh #define EFI_PERSISTENT_VIRTUAL_CD_GUID      EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT
11800d1ba665SWarner Losh 
11810d1ba665SWarner Losh extern  EFI_GUID                            gEfiPersistentVirtualCdGuid;
11820d1ba665SWarner Losh 
11830d1ba665SWarner Losh ///
11840d1ba665SWarner Losh /// Media ram disk device path.
11850d1ba665SWarner Losh ///
11860d1ba665SWarner Losh #define MEDIA_RAM_DISK_DP         0x09
11870d1ba665SWarner Losh 
11880d1ba665SWarner Losh ///
11890d1ba665SWarner Losh /// Used to describe the ram disk device path.
11900d1ba665SWarner Losh ///
11910d1ba665SWarner Losh typedef struct {
11920d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
11930d1ba665SWarner Losh   ///
11940d1ba665SWarner Losh   /// Starting Memory Address.
11950d1ba665SWarner Losh   ///
11960d1ba665SWarner Losh   UINT32                          StartingAddr[2];
11970d1ba665SWarner Losh   ///
11980d1ba665SWarner Losh   /// Ending Memory Address.
11990d1ba665SWarner Losh   ///
12000d1ba665SWarner Losh   UINT32                          EndingAddr[2];
12010d1ba665SWarner Losh   ///
12020d1ba665SWarner Losh   /// GUID that defines the type of the RAM Disk.
12030d1ba665SWarner Losh   ///
12040d1ba665SWarner Losh   EFI_GUID                        TypeGuid;
12050d1ba665SWarner Losh   ///
12060d1ba665SWarner Losh   /// RAM Diskinstance number, if supported. The default value is zero.
12070d1ba665SWarner Losh   ///
12080d1ba665SWarner Losh   UINT16                          Instance;
12090d1ba665SWarner Losh } MEDIA_RAM_DISK_DEVICE_PATH;
12100d1ba665SWarner Losh 
12110d1ba665SWarner Losh ///
12120d1ba665SWarner Losh /// BIOS Boot Specification Device Path.
12130d1ba665SWarner Losh ///
12140d1ba665SWarner Losh #define BBS_DEVICE_PATH           0x05
12150d1ba665SWarner Losh 
12160d1ba665SWarner Losh ///
12170d1ba665SWarner Losh /// BIOS Boot Specification Device Path SubType.
12180d1ba665SWarner Losh ///
12190d1ba665SWarner Losh #define BBS_BBS_DP                0x01
12200d1ba665SWarner Losh 
12210d1ba665SWarner Losh ///
12220d1ba665SWarner Losh /// This Device Path is used to describe the booting of non-EFI-aware operating systems.
12230d1ba665SWarner Losh ///
12240d1ba665SWarner Losh typedef struct {
12250d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
12260d1ba665SWarner Losh   ///
12270d1ba665SWarner Losh   /// Device Type as defined by the BIOS Boot Specification.
12280d1ba665SWarner Losh   ///
12290d1ba665SWarner Losh   UINT16                          DeviceType;
12300d1ba665SWarner Losh   ///
12310d1ba665SWarner Losh   /// Status Flags as defined by the BIOS Boot Specification.
12320d1ba665SWarner Losh   ///
12330d1ba665SWarner Losh   UINT16                          StatusFlag;
12340d1ba665SWarner Losh   ///
12350d1ba665SWarner Losh   /// Null-terminated ASCII string that describes the boot device to a user.
12360d1ba665SWarner Losh   ///
12370d1ba665SWarner Losh   CHAR8                           String[1];
12380d1ba665SWarner Losh } BBS_BBS_DEVICE_PATH;
12390d1ba665SWarner Losh 
12400d1ba665SWarner Losh //
12410d1ba665SWarner Losh // DeviceType definitions - from BBS specification
12420d1ba665SWarner Losh //
12430d1ba665SWarner Losh #define BBS_TYPE_FLOPPY           0x01
12440d1ba665SWarner Losh #define BBS_TYPE_HARDDRIVE        0x02
12450d1ba665SWarner Losh #define BBS_TYPE_CDROM            0x03
12460d1ba665SWarner Losh #define BBS_TYPE_PCMCIA           0x04
12470d1ba665SWarner Losh #define BBS_TYPE_USB              0x05
12480d1ba665SWarner Losh #define BBS_TYPE_EMBEDDED_NETWORK 0x06
12490d1ba665SWarner Losh #define BBS_TYPE_BEV              0x80
12500d1ba665SWarner Losh #define BBS_TYPE_UNKNOWN          0xFF
12510d1ba665SWarner Losh 
12520d1ba665SWarner Losh 
12530d1ba665SWarner Losh ///
12540d1ba665SWarner Losh /// Union of all possible Device Paths and pointers to Device Paths.
12550d1ba665SWarner Losh ///
12560d1ba665SWarner Losh typedef union {
12570d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL                   DevPath;
12580d1ba665SWarner Losh   PCI_DEVICE_PATH                            Pci;
12590d1ba665SWarner Losh   PCCARD_DEVICE_PATH                         PcCard;
12600d1ba665SWarner Losh   MEMMAP_DEVICE_PATH                         MemMap;
12610d1ba665SWarner Losh   VENDOR_DEVICE_PATH                         Vendor;
12620d1ba665SWarner Losh 
12630d1ba665SWarner Losh   CONTROLLER_DEVICE_PATH                     Controller;
12640d1ba665SWarner Losh   BMC_DEVICE_PATH                            Bmc;
12650d1ba665SWarner Losh   ACPI_HID_DEVICE_PATH                       Acpi;
12660d1ba665SWarner Losh   ACPI_EXTENDED_HID_DEVICE_PATH              ExtendedAcpi;
12670d1ba665SWarner Losh   ACPI_ADR_DEVICE_PATH                       AcpiAdr;
12680d1ba665SWarner Losh 
12690d1ba665SWarner Losh   ATAPI_DEVICE_PATH                          Atapi;
12700d1ba665SWarner Losh   SCSI_DEVICE_PATH                           Scsi;
12710d1ba665SWarner Losh   ISCSI_DEVICE_PATH                          Iscsi;
12720d1ba665SWarner Losh   FIBRECHANNEL_DEVICE_PATH                   FibreChannel;
12730d1ba665SWarner Losh   FIBRECHANNELEX_DEVICE_PATH                 FibreChannelEx;
12740d1ba665SWarner Losh 
12750d1ba665SWarner Losh   F1394_DEVICE_PATH                          F1394;
12760d1ba665SWarner Losh   USB_DEVICE_PATH                            Usb;
12770d1ba665SWarner Losh   SATA_DEVICE_PATH                           Sata;
12780d1ba665SWarner Losh   USB_CLASS_DEVICE_PATH                      UsbClass;
12790d1ba665SWarner Losh   USB_WWID_DEVICE_PATH                       UsbWwid;
12800d1ba665SWarner Losh   DEVICE_LOGICAL_UNIT_DEVICE_PATH            LogicUnit;
12810d1ba665SWarner Losh   I2O_DEVICE_PATH                            I2O;
12820d1ba665SWarner Losh   MAC_ADDR_DEVICE_PATH                       MacAddr;
12830d1ba665SWarner Losh   IPv4_DEVICE_PATH                           Ipv4;
12840d1ba665SWarner Losh   IPv6_DEVICE_PATH                           Ipv6;
12850d1ba665SWarner Losh   VLAN_DEVICE_PATH                           Vlan;
12860d1ba665SWarner Losh   INFINIBAND_DEVICE_PATH                     InfiniBand;
12870d1ba665SWarner Losh   UART_DEVICE_PATH                           Uart;
12880d1ba665SWarner Losh   UART_FLOW_CONTROL_DEVICE_PATH              UartFlowControl;
12890d1ba665SWarner Losh   SAS_DEVICE_PATH                            Sas;
12900d1ba665SWarner Losh   SASEX_DEVICE_PATH                          SasEx;
12910d1ba665SWarner Losh   NVME_NAMESPACE_DEVICE_PATH                 NvmeNamespace;
1292*3245fa21SMitchell Horne   DNS_DEVICE_PATH                            Dns;
12930d1ba665SWarner Losh   URI_DEVICE_PATH                            Uri;
12940d1ba665SWarner Losh   BLUETOOTH_DEVICE_PATH                      Bluetooth;
12950d1ba665SWarner Losh   WIFI_DEVICE_PATH                           WiFi;
12960d1ba665SWarner Losh   UFS_DEVICE_PATH                            Ufs;
12970d1ba665SWarner Losh   SD_DEVICE_PATH                             Sd;
12980d1ba665SWarner Losh   EMMC_DEVICE_PATH                           Emmc;
12990d1ba665SWarner Losh   HARDDRIVE_DEVICE_PATH                      HardDrive;
13000d1ba665SWarner Losh   CDROM_DEVICE_PATH                          CD;
13010d1ba665SWarner Losh 
13020d1ba665SWarner Losh   FILEPATH_DEVICE_PATH                       FilePath;
13030d1ba665SWarner Losh   MEDIA_PROTOCOL_DEVICE_PATH                 MediaProtocol;
13040d1ba665SWarner Losh 
13050d1ba665SWarner Losh   MEDIA_FW_VOL_DEVICE_PATH                   FirmwareVolume;
13060d1ba665SWarner Losh   MEDIA_FW_VOL_FILEPATH_DEVICE_PATH          FirmwareFile;
13070d1ba665SWarner Losh   MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH    Offset;
13080d1ba665SWarner Losh   MEDIA_RAM_DISK_DEVICE_PATH                 RamDisk;
13090d1ba665SWarner Losh   BBS_BBS_DEVICE_PATH                        Bbs;
13100d1ba665SWarner Losh } EFI_DEV_PATH;
13110d1ba665SWarner Losh 
13120d1ba665SWarner Losh 
13130d1ba665SWarner Losh 
13140d1ba665SWarner Losh typedef union {
13150d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL                   *DevPath;
13160d1ba665SWarner Losh   PCI_DEVICE_PATH                            *Pci;
13170d1ba665SWarner Losh   PCCARD_DEVICE_PATH                         *PcCard;
13180d1ba665SWarner Losh   MEMMAP_DEVICE_PATH                         *MemMap;
13190d1ba665SWarner Losh   VENDOR_DEVICE_PATH                         *Vendor;
13200d1ba665SWarner Losh 
13210d1ba665SWarner Losh   CONTROLLER_DEVICE_PATH                     *Controller;
13220d1ba665SWarner Losh   BMC_DEVICE_PATH                            *Bmc;
13230d1ba665SWarner Losh   ACPI_HID_DEVICE_PATH                       *Acpi;
13240d1ba665SWarner Losh   ACPI_EXTENDED_HID_DEVICE_PATH              *ExtendedAcpi;
13250d1ba665SWarner Losh   ACPI_ADR_DEVICE_PATH                       *AcpiAdr;
13260d1ba665SWarner Losh 
13270d1ba665SWarner Losh   ATAPI_DEVICE_PATH                          *Atapi;
13280d1ba665SWarner Losh   SCSI_DEVICE_PATH                           *Scsi;
13290d1ba665SWarner Losh   ISCSI_DEVICE_PATH                          *Iscsi;
13300d1ba665SWarner Losh   FIBRECHANNEL_DEVICE_PATH                   *FibreChannel;
13310d1ba665SWarner Losh   FIBRECHANNELEX_DEVICE_PATH                 *FibreChannelEx;
13320d1ba665SWarner Losh 
13330d1ba665SWarner Losh   F1394_DEVICE_PATH                          *F1394;
13340d1ba665SWarner Losh   USB_DEVICE_PATH                            *Usb;
13350d1ba665SWarner Losh   SATA_DEVICE_PATH                           *Sata;
13360d1ba665SWarner Losh   USB_CLASS_DEVICE_PATH                      *UsbClass;
13370d1ba665SWarner Losh   USB_WWID_DEVICE_PATH                       *UsbWwid;
13380d1ba665SWarner Losh   DEVICE_LOGICAL_UNIT_DEVICE_PATH            *LogicUnit;
13390d1ba665SWarner Losh   I2O_DEVICE_PATH                            *I2O;
13400d1ba665SWarner Losh   MAC_ADDR_DEVICE_PATH                       *MacAddr;
13410d1ba665SWarner Losh   IPv4_DEVICE_PATH                           *Ipv4;
13420d1ba665SWarner Losh   IPv6_DEVICE_PATH                           *Ipv6;
13430d1ba665SWarner Losh   VLAN_DEVICE_PATH                           *Vlan;
13440d1ba665SWarner Losh   INFINIBAND_DEVICE_PATH                     *InfiniBand;
13450d1ba665SWarner Losh   UART_DEVICE_PATH                           *Uart;
13460d1ba665SWarner Losh   UART_FLOW_CONTROL_DEVICE_PATH              *UartFlowControl;
13470d1ba665SWarner Losh   SAS_DEVICE_PATH                            *Sas;
13480d1ba665SWarner Losh   SASEX_DEVICE_PATH                          *SasEx;
13490d1ba665SWarner Losh   NVME_NAMESPACE_DEVICE_PATH                 *NvmeNamespace;
1350*3245fa21SMitchell Horne   DNS_DEVICE_PATH                            *Dns;
13510d1ba665SWarner Losh   URI_DEVICE_PATH                            *Uri;
13520d1ba665SWarner Losh   BLUETOOTH_DEVICE_PATH                      *Bluetooth;
13530d1ba665SWarner Losh   WIFI_DEVICE_PATH                           *WiFi;
13540d1ba665SWarner Losh   UFS_DEVICE_PATH                            *Ufs;
13550d1ba665SWarner Losh   SD_DEVICE_PATH                             *Sd;
13560d1ba665SWarner Losh   EMMC_DEVICE_PATH                           *Emmc;
13570d1ba665SWarner Losh   HARDDRIVE_DEVICE_PATH                      *HardDrive;
13580d1ba665SWarner Losh   CDROM_DEVICE_PATH                          *CD;
13590d1ba665SWarner Losh 
13600d1ba665SWarner Losh   FILEPATH_DEVICE_PATH                       *FilePath;
13610d1ba665SWarner Losh   MEDIA_PROTOCOL_DEVICE_PATH                 *MediaProtocol;
13620d1ba665SWarner Losh 
13630d1ba665SWarner Losh   MEDIA_FW_VOL_DEVICE_PATH                   *FirmwareVolume;
13640d1ba665SWarner Losh   MEDIA_FW_VOL_FILEPATH_DEVICE_PATH          *FirmwareFile;
13650d1ba665SWarner Losh   MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH    *Offset;
13660d1ba665SWarner Losh   MEDIA_RAM_DISK_DEVICE_PATH                 *RamDisk;
13670d1ba665SWarner Losh   BBS_BBS_DEVICE_PATH                        *Bbs;
13680d1ba665SWarner Losh   UINT8                                      *Raw;
13690d1ba665SWarner Losh } EFI_DEV_PATH_PTR;
13700d1ba665SWarner Losh 
13710d1ba665SWarner Losh #pragma pack()
13720d1ba665SWarner Losh 
13730d1ba665SWarner Losh #define END_DEVICE_PATH_TYPE                 0x7f
13740d1ba665SWarner Losh #define END_ENTIRE_DEVICE_PATH_SUBTYPE       0xFF
13750d1ba665SWarner Losh #define END_INSTANCE_DEVICE_PATH_SUBTYPE     0x01
13760d1ba665SWarner Losh 
13770d1ba665SWarner Losh extern EFI_GUID gEfiDevicePathProtocolGuid;
13780d1ba665SWarner Losh 
13790d1ba665SWarner Losh #endif
1380