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