https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
		
			
				
	
	
		
			1393 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1393 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   The device path protocol as defined in UEFI 2.0.
 | |
| 
 | |
|   The device path represents a programmatic path to a device,
 | |
|   from a software point of view. The path must persist from boot to boot, so
 | |
|   it can not contain things like PCI bus numbers that change from boot to boot.
 | |
| 
 | |
| Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __EFI_DEVICE_PATH_H__
 | |
| #define __EFI_DEVICE_PATH_H__
 | |
| 
 | |
| #include <Guid/PcAnsi.h>
 | |
| #include <IndustryStandard/Acpi3_0.h>
 | |
| #include <IndustryStandard/Bluetooth.h>
 | |
| 
 | |
| ///
 | |
| /// Device Path protocol.
 | |
| ///
 | |
| #define EFI_DEVICE_PATH_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
 | |
|   }
 | |
| 
 | |
| ///
 | |
| /// Device Path guid definition for backward-compatible with EFI1.1.
 | |
| ///
 | |
| #define DEVICE_PATH_PROTOCOL  EFI_DEVICE_PATH_PROTOCOL_GUID
 | |
| 
 | |
| #pragma pack(1)
 | |
| 
 | |
| #if defined(_MSC_EXTENSIONS)
 | |
| //
 | |
| // Disable warning when last field of data structure is a zero sized array.
 | |
| //
 | |
| #pragma warning ( disable : 4200 )
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|   This protocol can be used on any device handle to obtain generic path/location
 | |
|   information concerning the physical device or logical device. If the handle does
 | |
|   not logically map to a physical device, the handle may not necessarily support
 | |
|   the device path protocol. The device path describes the location of the device
 | |
|   the handle is for. The size of the Device Path can be determined from the structures
 | |
|   that make up the Device Path.
 | |
| **/
 | |
| typedef struct {
 | |
|   UINT8 Type;       ///< 0x01 Hardware Device Path.
 | |
|                     ///< 0x02 ACPI Device Path.
 | |
|                     ///< 0x03 Messaging Device Path.
 | |
|                     ///< 0x04 Media Device Path.
 | |
|                     ///< 0x05 BIOS Boot Specification Device Path.
 | |
|                     ///< 0x7F End of Hardware Device Path.
 | |
| 
 | |
|   UINT8 SubType;    ///< Varies by Type
 | |
|                     ///< 0xFF End Entire Device Path, or
 | |
|                     ///< 0x01 End This Instance of a Device Path and start a new
 | |
|                     ///< Device Path.
 | |
| 
 | |
|   UINT8 Length[2];  ///< Specific Device Path data. Type and Sub-Type define
 | |
|                     ///< type of data. Size of data is included in Length.
 | |
| 
 | |
| } EFI_DEVICE_PATH_PROTOCOL;
 | |
| 
 | |
| ///
 | |
| /// Device Path protocol definition for backward-compatible with EFI1.1.
 | |
| ///
 | |
| typedef EFI_DEVICE_PATH_PROTOCOL  EFI_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Hardware Device Paths.
 | |
| ///
 | |
| #define HARDWARE_DEVICE_PATH      0x01
 | |
| 
 | |
| ///
 | |
| /// PCI Device Path SubType.
 | |
| ///
 | |
| #define HW_PCI_DP                 0x01
 | |
| 
 | |
| ///
 | |
| /// PCI Device Path.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// PCI Function Number.
 | |
|   ///
 | |
|   UINT8                           Function;
 | |
|   ///
 | |
|   /// PCI Device Number.
 | |
|   ///
 | |
|   UINT8                           Device;
 | |
| } PCI_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// PCCARD Device Path SubType.
 | |
| ///
 | |
| #define HW_PCCARD_DP              0x02
 | |
| 
 | |
| ///
 | |
| /// PCCARD Device Path.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Function Number (0 = First Function).
 | |
|   ///
 | |
|   UINT8                           FunctionNumber;
 | |
| } PCCARD_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Memory Mapped Device Path SubType.
 | |
| ///
 | |
| #define HW_MEMMAP_DP             0x03
 | |
| 
 | |
| ///
 | |
| /// Memory Mapped Device Path.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// EFI_MEMORY_TYPE
 | |
|   ///
 | |
|   UINT32                          MemoryType;
 | |
|   ///
 | |
|   /// Starting Memory Address.
 | |
|   ///
 | |
|   EFI_PHYSICAL_ADDRESS            StartingAddress;
 | |
|   ///
 | |
|   /// Ending Memory Address.
 | |
|   ///
 | |
|   EFI_PHYSICAL_ADDRESS            EndingAddress;
 | |
| } MEMMAP_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Hardware Vendor Device Path SubType.
 | |
| ///
 | |
| #define HW_VENDOR_DP              0x04
 | |
| 
 | |
| ///
 | |
| /// The Vendor Device Path allows the creation of vendor-defined Device Paths. A vendor must
 | |
| /// allocate a Vendor GUID for a Device Path. The Vendor GUID can then be used to define the
 | |
| /// contents on the n bytes that follow in the Vendor Device Path node.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Vendor-assigned GUID that defines the data that follows.
 | |
|   ///
 | |
|   EFI_GUID                        Guid;
 | |
|   ///
 | |
|   /// Vendor-defined variable size data.
 | |
|   ///
 | |
| } VENDOR_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Controller Device Path SubType.
 | |
| ///
 | |
| #define HW_CONTROLLER_DP          0x05
 | |
| 
 | |
| ///
 | |
| /// Controller Device Path.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Controller number.
 | |
|   ///
 | |
|   UINT32                          ControllerNumber;
 | |
| } CONTROLLER_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// BMC Device Path SubType.
 | |
| ///
 | |
| #define HW_BMC_DP                 0x06
 | |
| 
 | |
| ///
 | |
| /// BMC Device Path.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Interface Type.
 | |
|   ///
 | |
|   UINT8                           InterfaceType;
 | |
|   ///
 | |
|   /// Base Address.
 | |
|   ///
 | |
|   UINT8                           BaseAddress[8];
 | |
| } BMC_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// ACPI Device Paths.
 | |
| ///
 | |
| #define ACPI_DEVICE_PATH          0x02
 | |
| 
 | |
| ///
 | |
| /// ACPI Device Path SubType.
 | |
| ///
 | |
| #define ACPI_DP                   0x01
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Device's PnP hardware ID stored in a numeric 32-bit
 | |
|   /// compressed EISA-type ID. This value must match the
 | |
|   /// corresponding _HID in the ACPI name space.
 | |
|   ///
 | |
|   UINT32                          HID;
 | |
|   ///
 | |
|   /// Unique ID that is required by ACPI if two devices have the
 | |
|   /// same _HID. This value must also match the corresponding
 | |
|   /// _UID/_HID pair in the ACPI name space. Only the 32-bit
 | |
|   /// numeric value type of _UID is supported. Thus, strings must
 | |
|   /// not be used for the _UID in the ACPI name space.
 | |
|   ///
 | |
|   UINT32                          UID;
 | |
| } ACPI_HID_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Expanded ACPI Device Path SubType.
 | |
| ///
 | |
| #define ACPI_EXTENDED_DP          0x02
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Device's PnP hardware ID stored in a numeric 32-bit
 | |
|   /// compressed EISA-type ID. This value must match the
 | |
|   /// corresponding _HID in the ACPI name space.
 | |
|   ///
 | |
|   UINT32                          HID;
 | |
|   ///
 | |
|   /// Unique ID that is required by ACPI if two devices have the
 | |
|   /// same _HID. This value must also match the corresponding
 | |
|   /// _UID/_HID pair in the ACPI name space.
 | |
|   ///
 | |
|   UINT32                          UID;
 | |
|   ///
 | |
|   /// Device's compatible PnP hardware ID stored in a numeric
 | |
|   /// 32-bit compressed EISA-type ID. This value must match at
 | |
|   /// least one of the compatible device IDs returned by the
 | |
|   /// corresponding _CID in the ACPI name space.
 | |
|   ///
 | |
|   UINT32                          CID;
 | |
|   ///
 | |
|   /// Optional variable length _HIDSTR.
 | |
|   /// Optional variable length _UIDSTR.
 | |
|   /// Optional variable length _CIDSTR.
 | |
|   ///
 | |
| } ACPI_EXTENDED_HID_DEVICE_PATH;
 | |
| 
 | |
| //
 | |
| //  EISA ID Macro
 | |
| //  EISA ID Definition 32-bits
 | |
| //   bits[15:0] - three character compressed ASCII EISA ID.
 | |
| //   bits[31:16] - binary number
 | |
| //    Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z'
 | |
| //
 | |
| #define PNP_EISA_ID_CONST         0x41d0
 | |
| #define EISA_ID(_Name, _Num)      ((UINT32)((_Name) | (_Num) << 16))
 | |
| #define EISA_PNP_ID(_PNPId)       (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
 | |
| #define EFI_PNP_ID(_PNPId)        (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
 | |
| 
 | |
| #define PNP_EISA_ID_MASK          0xffff
 | |
| #define EISA_ID_TO_NUM(_Id)       ((_Id) >> 16)
 | |
| 
 | |
| ///
 | |
| /// ACPI _ADR Device Path SubType.
 | |
| ///
 | |
| #define ACPI_ADR_DP               0x03
 | |
| 
 | |
| ///
 | |
| /// The _ADR device path is used to contain video output device attributes to support the Graphics
 | |
| /// Output Protocol. The device path can contain multiple _ADR entries if multiple video output
 | |
| /// devices are displaying the same output.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// _ADR value. For video output devices the value of this
 | |
|   /// field comes from Table B-2 of the ACPI 3.0 specification. At
 | |
|   /// least one _ADR value is required.
 | |
|   ///
 | |
|   UINT32                          ADR;
 | |
|   //
 | |
|   // This device path may optionally contain more than one _ADR entry.
 | |
|   //
 | |
| } ACPI_ADR_DEVICE_PATH;
 | |
| 
 | |
| #define ACPI_ADR_DISPLAY_TYPE_OTHER             0
 | |
| #define ACPI_ADR_DISPLAY_TYPE_VGA               1
 | |
| #define ACPI_ADR_DISPLAY_TYPE_TV                2
 | |
| #define ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL  3
 | |
| #define ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL  4
 | |
| 
 | |
| #define ACPI_DISPLAY_ADR(_DeviceIdScheme, _HeadId, _NonVgaOutput, _BiosCanDetect, _VendorInfo, _Type, _Port, _Index) \
 | |
|           ((UINT32)(  ((UINT32)((_DeviceIdScheme) & 0x1) << 31) |  \
 | |
|                       (((_HeadId)                 & 0x7) << 18) |  \
 | |
|                       (((_NonVgaOutput)           & 0x1) << 17) |  \
 | |
|                       (((_BiosCanDetect)          & 0x1) << 16) |  \
 | |
|                       (((_VendorInfo)             & 0xf) << 12) |  \
 | |
|                       (((_Type)                   & 0xf) << 8)  |  \
 | |
|                       (((_Port)                   & 0xf) << 4)  |  \
 | |
|                        ((_Index)                  & 0xf) ))
 | |
| 
 | |
| ///
 | |
| /// Messaging Device Paths.
 | |
| /// This Device Path is used to describe the connection of devices outside the resource domain of the
 | |
| /// system. This Device Path can describe physical messaging information like SCSI ID, or abstract
 | |
| /// information like networking protocol IP addresses.
 | |
| ///
 | |
| #define MESSAGING_DEVICE_PATH     0x03
 | |
| 
 | |
| ///
 | |
| /// ATAPI Device Path SubType
 | |
| ///
 | |
| #define MSG_ATAPI_DP              0x01
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Set to zero for primary, or one for secondary.
 | |
|   ///
 | |
|   UINT8                           PrimarySecondary;
 | |
|   ///
 | |
|   /// Set to zero for master, or one for slave mode.
 | |
|   ///
 | |
|   UINT8                           SlaveMaster;
 | |
|   ///
 | |
|   /// Logical Unit Number.
 | |
|   ///
 | |
|   UINT16                          Lun;
 | |
| } ATAPI_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// SCSI Device Path SubType.
 | |
| ///
 | |
| #define MSG_SCSI_DP               0x02
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Target ID on the SCSI bus (PUN).
 | |
|   ///
 | |
|   UINT16                          Pun;
 | |
|   ///
 | |
|   /// Logical Unit Number (LUN).
 | |
|   ///
 | |
|   UINT16                          Lun;
 | |
| } SCSI_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Fibre Channel SubType.
 | |
| ///
 | |
| #define MSG_FIBRECHANNEL_DP       0x03
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Reserved for the future.
 | |
|   ///
 | |
|   UINT32                          Reserved;
 | |
|   ///
 | |
|   /// Fibre Channel World Wide Number.
 | |
|   ///
 | |
|   UINT64                          WWN;
 | |
|   ///
 | |
|   /// Fibre Channel Logical Unit Number.
 | |
|   ///
 | |
|   UINT64                          Lun;
 | |
| } FIBRECHANNEL_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Fibre Channel Ex SubType.
 | |
| ///
 | |
| #define MSG_FIBRECHANNELEX_DP     0x15
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Reserved for the future.
 | |
|   ///
 | |
|   UINT32                          Reserved;
 | |
|   ///
 | |
|   /// 8 byte array containing Fibre Channel End Device Port Name.
 | |
|   ///
 | |
|   UINT8                           WWN[8];
 | |
|   ///
 | |
|   /// 8 byte array containing Fibre Channel Logical Unit Number.
 | |
|   ///
 | |
|   UINT8                           Lun[8];
 | |
| } FIBRECHANNELEX_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// 1394 Device Path SubType
 | |
| ///
 | |
| #define MSG_1394_DP               0x04
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Reserved for the future.
 | |
|   ///
 | |
|   UINT32                          Reserved;
 | |
|   ///
 | |
|   /// 1394 Global Unique ID (GUID).
 | |
|   ///
 | |
|   UINT64                          Guid;
 | |
| } F1394_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// USB Device Path SubType.
 | |
| ///
 | |
| #define MSG_USB_DP                0x05
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL      Header;
 | |
|   ///
 | |
|   /// USB Parent Port Number.
 | |
|   ///
 | |
|   UINT8                         ParentPortNumber;
 | |
|   ///
 | |
|   /// USB Interface Number.
 | |
|   ///
 | |
|   UINT8                         InterfaceNumber;
 | |
| } USB_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// USB Class Device Path SubType.
 | |
| ///
 | |
| #define MSG_USB_CLASS_DP          0x0f
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL      Header;
 | |
|   ///
 | |
|   /// Vendor ID assigned by USB-IF. A value of 0xFFFF will
 | |
|   /// match any Vendor ID.
 | |
|   ///
 | |
|   UINT16                        VendorId;
 | |
|   ///
 | |
|   /// Product ID assigned by USB-IF. A value of 0xFFFF will
 | |
|   /// match any Product ID.
 | |
|   ///
 | |
|   UINT16                        ProductId;
 | |
|   ///
 | |
|   /// The class code assigned by the USB-IF. A value of 0xFF
 | |
|   /// will match any class code.
 | |
|   ///
 | |
|   UINT8                         DeviceClass;
 | |
|   ///
 | |
|   /// The subclass code assigned by the USB-IF. A value of
 | |
|   /// 0xFF will match any subclass code.
 | |
|   ///
 | |
|   UINT8                         DeviceSubClass;
 | |
|   ///
 | |
|   /// The protocol code assigned by the USB-IF. A value of
 | |
|   /// 0xFF will match any protocol code.
 | |
|   ///
 | |
|   UINT8                         DeviceProtocol;
 | |
| } USB_CLASS_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// USB WWID Device Path SubType.
 | |
| ///
 | |
| #define MSG_USB_WWID_DP           0x10
 | |
| 
 | |
| ///
 | |
| /// This device path describes a USB device using its serial number.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL      Header;
 | |
|   ///
 | |
|   /// USB interface number.
 | |
|   ///
 | |
|   UINT16                        InterfaceNumber;
 | |
|   ///
 | |
|   /// USB vendor id of the device.
 | |
|   ///
 | |
|   UINT16                        VendorId;
 | |
|   ///
 | |
|   /// USB product id of the device.
 | |
|   ///
 | |
|   UINT16                        ProductId;
 | |
|   ///
 | |
|   /// Last 64-or-fewer UTF-16 characters of the USB
 | |
|   /// serial number. The length of the string is
 | |
|   /// determined by the Length field less the offset of the
 | |
|   /// Serial Number field (10)
 | |
|   ///
 | |
|   /// CHAR16                     SerialNumber[...];
 | |
| } USB_WWID_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Device Logical Unit SubType.
 | |
| ///
 | |
| #define MSG_DEVICE_LOGICAL_UNIT_DP  0x11
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL      Header;
 | |
|   ///
 | |
|   /// Logical Unit Number for the interface.
 | |
|   ///
 | |
|   UINT8                         Lun;
 | |
| } DEVICE_LOGICAL_UNIT_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// SATA Device Path SubType.
 | |
| ///
 | |
| #define MSG_SATA_DP               0x12
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// The HBA port number that facilitates the connection to the
 | |
|   /// device or a port multiplier. The value 0xFFFF is reserved.
 | |
|   ///
 | |
|   UINT16                          HBAPortNumber;
 | |
|   ///
 | |
|   /// The Port multiplier port number that facilitates the connection
 | |
|   /// to the device. Must be set to 0xFFFF if the device is directly
 | |
|   /// connected to the HBA.
 | |
|   ///
 | |
|   UINT16                          PortMultiplierPortNumber;
 | |
|   ///
 | |
|   /// Logical Unit Number.
 | |
|   ///
 | |
|   UINT16                          Lun;
 | |
| } SATA_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Flag for if the device is directly connected to the HBA.
 | |
| ///
 | |
| #define SATA_HBA_DIRECT_CONNECT_FLAG 0x8000
 | |
| 
 | |
| ///
 | |
| /// I2O Device Path SubType.
 | |
| ///
 | |
| #define MSG_I2O_DP                0x06
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Target ID (TID) for a device.
 | |
|   ///
 | |
|   UINT32                          Tid;
 | |
| } I2O_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// MAC Address Device Path SubType.
 | |
| ///
 | |
| #define MSG_MAC_ADDR_DP           0x0b
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// The MAC address for a network interface padded with 0s.
 | |
|   ///
 | |
|   EFI_MAC_ADDRESS                 MacAddress;
 | |
|   ///
 | |
|   /// Network interface type(i.e. 802.3, FDDI).
 | |
|   ///
 | |
|   UINT8                           IfType;
 | |
| } MAC_ADDR_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// IPv4 Device Path SubType
 | |
| ///
 | |
| #define MSG_IPv4_DP               0x0c
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// The local IPv4 address.
 | |
|   ///
 | |
|   EFI_IPv4_ADDRESS                LocalIpAddress;
 | |
|   ///
 | |
|   /// The remote IPv4 address.
 | |
|   ///
 | |
|   EFI_IPv4_ADDRESS                RemoteIpAddress;
 | |
|   ///
 | |
|   /// The local port number.
 | |
|   ///
 | |
|   UINT16                          LocalPort;
 | |
|   ///
 | |
|   /// The remote port number.
 | |
|   ///
 | |
|   UINT16                          RemotePort;
 | |
|   ///
 | |
|   /// The network protocol(i.e. UDP, TCP).
 | |
|   ///
 | |
|   UINT16                          Protocol;
 | |
|   ///
 | |
|   /// 0x00 - The Source IP Address was assigned though DHCP.
 | |
|   /// 0x01 - The Source IP Address is statically bound.
 | |
|   ///
 | |
|   BOOLEAN                         StaticIpAddress;
 | |
|   ///
 | |
|   /// The gateway IP address
 | |
|   ///
 | |
|   EFI_IPv4_ADDRESS                GatewayIpAddress;
 | |
|   ///
 | |
|   /// The subnet mask
 | |
|   ///
 | |
|   EFI_IPv4_ADDRESS                SubnetMask;
 | |
| } IPv4_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// IPv6 Device Path SubType.
 | |
| ///
 | |
| #define MSG_IPv6_DP               0x0d
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// The local IPv6 address.
 | |
|   ///
 | |
|   EFI_IPv6_ADDRESS                LocalIpAddress;
 | |
|   ///
 | |
|   /// The remote IPv6 address.
 | |
|   ///
 | |
|   EFI_IPv6_ADDRESS                RemoteIpAddress;
 | |
|   ///
 | |
|   /// The local port number.
 | |
|   ///
 | |
|   UINT16                          LocalPort;
 | |
|   ///
 | |
|   /// The remote port number.
 | |
|   ///
 | |
|   UINT16                          RemotePort;
 | |
|   ///
 | |
|   /// The network protocol(i.e. UDP, TCP).
 | |
|   ///
 | |
|   UINT16                          Protocol;
 | |
|   ///
 | |
|   /// 0x00 - The Local IP Address was manually configured.
 | |
|   /// 0x01 - The Local IP Address is assigned through IPv6
 | |
|   /// stateless auto-configuration.
 | |
|   /// 0x02 - The Local IP Address is assigned through IPv6
 | |
|   /// stateful configuration.
 | |
|   ///
 | |
|   UINT8                           IpAddressOrigin;
 | |
|   ///
 | |
|   /// The prefix length
 | |
|   ///
 | |
|   UINT8                           PrefixLength;
 | |
|   ///
 | |
|   /// The gateway IP address
 | |
|   ///
 | |
|   EFI_IPv6_ADDRESS                GatewayIpAddress;
 | |
| } IPv6_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// InfiniBand Device Path SubType.
 | |
| ///
 | |
| #define MSG_INFINIBAND_DP         0x09
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Flags to help identify/manage InfiniBand device path elements:
 | |
|   /// Bit 0 - IOC/Service (0b = IOC, 1b = Service).
 | |
|   /// Bit 1 - Extend Boot Environment.
 | |
|   /// Bit 2 - Console Protocol.
 | |
|   /// Bit 3 - Storage Protocol.
 | |
|   /// Bit 4 - Network Protocol.
 | |
|   /// All other bits are reserved.
 | |
|   ///
 | |
|   UINT32                          ResourceFlags;
 | |
|   ///
 | |
|   /// 128-bit Global Identifier for remote fabric port.
 | |
|   ///
 | |
|   UINT8                           PortGid[16];
 | |
|   ///
 | |
|   /// 64-bit unique identifier to remote IOC or server process.
 | |
|   /// Interpretation of field specified by Resource Flags (bit 0).
 | |
|   ///
 | |
|   UINT64                          ServiceId;
 | |
|   ///
 | |
|   /// 64-bit persistent ID of remote IOC port.
 | |
|   ///
 | |
|   UINT64                          TargetPortId;
 | |
|   ///
 | |
|   /// 64-bit persistent ID of remote device.
 | |
|   ///
 | |
|   UINT64                          DeviceId;
 | |
| } INFINIBAND_DEVICE_PATH;
 | |
| 
 | |
| #define INFINIBAND_RESOURCE_FLAG_IOC_SERVICE                0x01
 | |
| #define INFINIBAND_RESOURCE_FLAG_EXTENDED_BOOT_ENVIRONMENT  0x02
 | |
| #define INFINIBAND_RESOURCE_FLAG_CONSOLE_PROTOCOL           0x04
 | |
| #define INFINIBAND_RESOURCE_FLAG_STORAGE_PROTOCOL           0x08
 | |
| #define INFINIBAND_RESOURCE_FLAG_NETWORK_PROTOCOL           0x10
 | |
| 
 | |
| ///
 | |
| /// UART Device Path SubType.
 | |
| ///
 | |
| #define MSG_UART_DP               0x0e
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Reserved.
 | |
|   ///
 | |
|   UINT32                          Reserved;
 | |
|   ///
 | |
|   /// The baud rate setting for the UART style device. A value of 0
 | |
|   /// means that the device's default baud rate will be used.
 | |
|   ///
 | |
|   UINT64                          BaudRate;
 | |
|   ///
 | |
|   /// The number of data bits for the UART style device. A value
 | |
|   /// of 0 means that the device's default number of data bits will be used.
 | |
|   ///
 | |
|   UINT8                           DataBits;
 | |
|   ///
 | |
|   /// The parity setting for the UART style device.
 | |
|   /// Parity 0x00 - Default Parity.
 | |
|   /// Parity 0x01 - No Parity.
 | |
|   /// Parity 0x02 - Even Parity.
 | |
|   /// Parity 0x03 - Odd Parity.
 | |
|   /// Parity 0x04 - Mark Parity.
 | |
|   /// Parity 0x05 - Space Parity.
 | |
|   ///
 | |
|   UINT8                           Parity;
 | |
|   ///
 | |
|   /// The number of stop bits for the UART style device.
 | |
|   /// Stop Bits 0x00 - Default Stop Bits.
 | |
|   /// Stop Bits 0x01 - 1 Stop Bit.
 | |
|   /// Stop Bits 0x02 - 1.5 Stop Bits.
 | |
|   /// Stop Bits 0x03 - 2 Stop Bits.
 | |
|   ///
 | |
|   UINT8                           StopBits;
 | |
| } UART_DEVICE_PATH;
 | |
| 
 | |
| //
 | |
| // Use VENDOR_DEVICE_PATH struct
 | |
| //
 | |
| #define MSG_VENDOR_DP             0x0a
 | |
| typedef VENDOR_DEVICE_PATH        VENDOR_DEFINED_DEVICE_PATH;
 | |
| 
 | |
| #define DEVICE_PATH_MESSAGING_PC_ANSI     EFI_PC_ANSI_GUID
 | |
| #define DEVICE_PATH_MESSAGING_VT_100      EFI_VT_100_GUID
 | |
| #define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID
 | |
| #define DEVICE_PATH_MESSAGING_VT_UTF8     EFI_VT_UTF8_GUID
 | |
| 
 | |
| ///
 | |
| /// A new device path node is defined to declare flow control characteristics.
 | |
| /// UART Flow Control Messaging Device Path
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL GUID.
 | |
|   ///
 | |
|   EFI_GUID                        Guid;
 | |
|   ///
 | |
|   /// Bitmap of supported flow control types.
 | |
|   /// Bit 0 set indicates hardware flow control.
 | |
|   /// Bit 1 set indicates Xon/Xoff flow control.
 | |
|   /// All other bits are reserved and are clear.
 | |
|   ///
 | |
|   UINT32                          FlowControlMap;
 | |
| } UART_FLOW_CONTROL_DEVICE_PATH;
 | |
| 
 | |
| #define UART_FLOW_CONTROL_HARDWARE         0x00000001
 | |
| #define UART_FLOW_CONTROL_XON_XOFF         0x00000010
 | |
| 
 | |
| #define DEVICE_PATH_MESSAGING_SAS          EFI_SAS_DEVICE_PATH_GUID
 | |
| ///
 | |
| /// Serial Attached SCSI (SAS) Device Path.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// DEVICE_PATH_MESSAGING_SAS GUID.
 | |
|   ///
 | |
|   EFI_GUID                        Guid;
 | |
|   ///
 | |
|   /// Reserved for future use.
 | |
|   ///
 | |
|   UINT32                          Reserved;
 | |
|   ///
 | |
|   /// SAS Address for Serial Attached SCSI Target.
 | |
|   ///
 | |
|   UINT64                          SasAddress;
 | |
|   ///
 | |
|   /// SAS Logical Unit Number.
 | |
|   ///
 | |
|   UINT64                          Lun;
 | |
|   ///
 | |
|   /// More Information about the device and its interconnect.
 | |
|   ///
 | |
|   UINT16                          DeviceTopology;
 | |
|   ///
 | |
|   /// Relative Target Port (RTP).
 | |
|   ///
 | |
|   UINT16                          RelativeTargetPort;
 | |
| } SAS_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Serial Attached SCSI (SAS) Ex Device Path SubType
 | |
| ///
 | |
| #define MSG_SASEX_DP              0x16
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// 8-byte array of the SAS Address for Serial Attached SCSI Target Port.
 | |
|   ///
 | |
|   UINT8                           SasAddress[8];
 | |
|   ///
 | |
|   /// 8-byte array of the SAS Logical Unit Number.
 | |
|   ///
 | |
|   UINT8                           Lun[8];
 | |
|   ///
 | |
|   /// More Information about the device and its interconnect.
 | |
|   ///
 | |
|   UINT16                          DeviceTopology;
 | |
|   ///
 | |
|   /// Relative Target Port (RTP).
 | |
|   ///
 | |
|   UINT16                          RelativeTargetPort;
 | |
| } SASEX_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// NvmExpress Namespace Device Path SubType.
 | |
| ///
 | |
| #define MSG_NVME_NAMESPACE_DP     0x17
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   UINT32                          NamespaceId;
 | |
|   UINT64                          NamespaceUuid;
 | |
| } NVME_NAMESPACE_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// DNS Device Path SubType
 | |
| ///
 | |
| #define MSG_DNS_DP                0x1F
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Indicates the DNS server address is IPv4 or IPv6 address.
 | |
|   ///
 | |
|   UINT8                           IsIPv6;
 | |
|   ///
 | |
|   /// Instance of the DNS server address.
 | |
|   ///
 | |
|   EFI_IP_ADDRESS                  DnsServerIp[];
 | |
| } DNS_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Uniform Resource Identifiers (URI) Device Path SubType
 | |
| ///
 | |
| #define MSG_URI_DP                0x18
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Instance of the URI pursuant to RFC 3986.
 | |
|   ///
 | |
|   CHAR8                           Uri[];
 | |
| } URI_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Universal Flash Storage (UFS) Device Path SubType.
 | |
| ///
 | |
| #define MSG_UFS_DP                0x19
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Target ID on the UFS bus (PUN).
 | |
|   ///
 | |
|   UINT8                           Pun;
 | |
|   ///
 | |
|   /// Logical Unit Number (LUN).
 | |
|   ///
 | |
|   UINT8                           Lun;
 | |
| } UFS_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// SD (Secure Digital) Device Path SubType.
 | |
| ///
 | |
| #define MSG_SD_DP                 0x1A
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   UINT8                           SlotNumber;
 | |
| } SD_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// EMMC (Embedded MMC) Device Path SubType.
 | |
| ///
 | |
| #define MSG_EMMC_DP                 0x1D
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   UINT8                           SlotNumber;
 | |
| } EMMC_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// iSCSI Device Path SubType
 | |
| ///
 | |
| #define MSG_ISCSI_DP              0x13
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Network Protocol (0 = TCP, 1+ = reserved).
 | |
|   ///
 | |
|   UINT16                          NetworkProtocol;
 | |
|   ///
 | |
|   /// iSCSI Login Options.
 | |
|   ///
 | |
|   UINT16                          LoginOption;
 | |
|   ///
 | |
|   /// iSCSI Logical Unit Number.
 | |
|   ///
 | |
|   UINT64                          Lun;
 | |
|   ///
 | |
|   /// iSCSI Target Portal group tag the initiator intends
 | |
|   /// to establish a session with.
 | |
|   ///
 | |
|   UINT16                          TargetPortalGroupTag;
 | |
|   ///
 | |
|   /// iSCSI NodeTarget Name. The length of the name
 | |
|   /// is determined by subtracting the offset of this field from Length.
 | |
|   ///
 | |
|   /// CHAR8                        iSCSI Target Name.
 | |
| } ISCSI_DEVICE_PATH;
 | |
| 
 | |
| #define ISCSI_LOGIN_OPTION_NO_HEADER_DIGEST             0x0000
 | |
| #define ISCSI_LOGIN_OPTION_HEADER_DIGEST_USING_CRC32C   0x0002
 | |
| #define ISCSI_LOGIN_OPTION_NO_DATA_DIGEST               0x0000
 | |
| #define ISCSI_LOGIN_OPTION_DATA_DIGEST_USING_CRC32C     0x0008
 | |
| #define ISCSI_LOGIN_OPTION_AUTHMETHOD_CHAP              0x0000
 | |
| #define ISCSI_LOGIN_OPTION_AUTHMETHOD_NON               0x1000
 | |
| #define ISCSI_LOGIN_OPTION_CHAP_BI                      0x0000
 | |
| #define ISCSI_LOGIN_OPTION_CHAP_UNI                     0x2000
 | |
| 
 | |
| ///
 | |
| /// VLAN Device Path SubType.
 | |
| ///
 | |
| #define MSG_VLAN_DP               0x14
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// VLAN identifier (0-4094).
 | |
|   ///
 | |
|   UINT16                          VlanId;
 | |
| } VLAN_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Bluetooth Device Path SubType.
 | |
| ///
 | |
| #define MSG_BLUETOOTH_DP     0x1b
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// 48bit Bluetooth device address.
 | |
|   ///
 | |
|   BLUETOOTH_ADDRESS               BD_ADDR;
 | |
| } BLUETOOTH_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Wi-Fi Device Path SubType.
 | |
| ///
 | |
| #define MSG_WIFI_DP               0x1C
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Service set identifier. A 32-byte octets string.
 | |
|   ///
 | |
|   UINT8                           SSId[32];
 | |
| } WIFI_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Bluetooth LE Device Path SubType.
 | |
| ///
 | |
| #define MSG_BLUETOOTH_LE_DP       0x1E
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   BLUETOOTH_LE_ADDRESS            Address;
 | |
| } BLUETOOTH_LE_DEVICE_PATH;
 | |
| 
 | |
| //
 | |
| // Media Device Path
 | |
| //
 | |
| #define MEDIA_DEVICE_PATH         0x04
 | |
| 
 | |
| ///
 | |
| /// Hard Drive Media Device Path SubType.
 | |
| ///
 | |
| #define MEDIA_HARDDRIVE_DP        0x01
 | |
| 
 | |
| ///
 | |
| /// The Hard Drive Media Device Path is used to represent a partition on a hard drive.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Describes the entry in a partition table, starting with entry 1.
 | |
|   /// Partition number zero represents the entire device. Valid
 | |
|   /// partition numbers for a MBR partition are [1, 4]. Valid
 | |
|   /// partition numbers for a GPT partition are [1, NumberOfPartitionEntries].
 | |
|   ///
 | |
|   UINT32                          PartitionNumber;
 | |
|   ///
 | |
|   /// Starting LBA of the partition on the hard drive.
 | |
|   ///
 | |
|   UINT64                          PartitionStart;
 | |
|   ///
 | |
|   /// Size of the partition in units of Logical Blocks.
 | |
|   ///
 | |
|   UINT64                          PartitionSize;
 | |
|   ///
 | |
|   /// Signature unique to this partition:
 | |
|   /// If SignatureType is 0, this field has to be initialized with 16 zeros.
 | |
|   /// If SignatureType is 1, the MBR signature is stored in the first 4 bytes of this field.
 | |
|   /// The other 12 bytes are initialized with zeros.
 | |
|   /// If SignatureType is 2, this field contains a 16 byte signature.
 | |
|   ///
 | |
|   UINT8                           Signature[16];
 | |
|   ///
 | |
|   /// Partition Format: (Unused values reserved).
 | |
|   /// 0x01 - PC-AT compatible legacy MBR.
 | |
|   /// 0x02 - GUID Partition Table.
 | |
|   ///
 | |
|   UINT8                           MBRType;
 | |
|   ///
 | |
|   /// Type of Disk Signature: (Unused values reserved).
 | |
|   /// 0x00 - No Disk Signature.
 | |
|   /// 0x01 - 32-bit signature from address 0x1b8 of the type 0x01 MBR.
 | |
|   /// 0x02 - GUID signature.
 | |
|   ///
 | |
|   UINT8                           SignatureType;
 | |
| } HARDDRIVE_DEVICE_PATH;
 | |
| 
 | |
| #define MBR_TYPE_PCAT             0x01
 | |
| #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
 | |
| 
 | |
| #define NO_DISK_SIGNATURE         0x00
 | |
| #define SIGNATURE_TYPE_MBR        0x01
 | |
| #define SIGNATURE_TYPE_GUID       0x02
 | |
| 
 | |
| ///
 | |
| /// CD-ROM Media Device Path SubType.
 | |
| ///
 | |
| #define MEDIA_CDROM_DP            0x02
 | |
| 
 | |
| ///
 | |
| /// The CD-ROM Media Device Path is used to define a system partition that exists on a CD-ROM.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Boot Entry number from the Boot Catalog. The Initial/Default entry is defined as zero.
 | |
|   ///
 | |
|   UINT32                          BootEntry;
 | |
|   ///
 | |
|   /// Starting RBA of the partition on the medium. CD-ROMs use Relative logical Block Addressing.
 | |
|   ///
 | |
|   UINT64                          PartitionStart;
 | |
|   ///
 | |
|   /// Size of the partition in units of Blocks, also called Sectors.
 | |
|   ///
 | |
|   UINT64                          PartitionSize;
 | |
| } CDROM_DEVICE_PATH;
 | |
| 
 | |
| //
 | |
| // Use VENDOR_DEVICE_PATH struct
 | |
| //
 | |
| #define MEDIA_VENDOR_DP           0x03  ///< Media vendor device path subtype.
 | |
| 
 | |
| ///
 | |
| /// File Path Media Device Path SubType
 | |
| ///
 | |
| #define MEDIA_FILEPATH_DP         0x04
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// A NULL-terminated Path string including directory and file names.
 | |
|   ///
 | |
|   CHAR16                          PathName[1];
 | |
| } FILEPATH_DEVICE_PATH;
 | |
| 
 | |
| #define SIZE_OF_FILEPATH_DEVICE_PATH  OFFSET_OF(FILEPATH_DEVICE_PATH,PathName)
 | |
| 
 | |
| ///
 | |
| /// Media Protocol Device Path SubType.
 | |
| ///
 | |
| #define MEDIA_PROTOCOL_DP         0x05
 | |
| 
 | |
| ///
 | |
| /// The Media Protocol Device Path is used to denote the protocol that is being
 | |
| /// used in a device path at the location of the path specified.
 | |
| /// Many protocols are inherent to the style of device path.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// The ID of the protocol.
 | |
|   ///
 | |
|   EFI_GUID                        Protocol;
 | |
| } MEDIA_PROTOCOL_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// PIWG Firmware File SubType.
 | |
| ///
 | |
| #define MEDIA_PIWG_FW_FILE_DP     0x06
 | |
| 
 | |
| ///
 | |
| /// This device path is used by systems implementing the UEFI PI Specification 1.0 to describe a firmware file.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Firmware file name
 | |
|   ///
 | |
|   EFI_GUID                        FvFileName;
 | |
| } MEDIA_FW_VOL_FILEPATH_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// PIWG Firmware Volume Device Path SubType.
 | |
| ///
 | |
| #define MEDIA_PIWG_FW_VOL_DP      0x07
 | |
| 
 | |
| ///
 | |
| /// This device path is used by systems implementing the UEFI PI Specification 1.0 to describe a firmware volume.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Firmware volume name.
 | |
|   ///
 | |
|   EFI_GUID                        FvName;
 | |
| } MEDIA_FW_VOL_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// Media relative offset range device path.
 | |
| ///
 | |
| #define MEDIA_RELATIVE_OFFSET_RANGE_DP 0x08
 | |
| 
 | |
| ///
 | |
| /// Used to describe the offset range of media relative.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL  Header;
 | |
|   UINT32                    Reserved;
 | |
|   UINT64                    StartingOffset;
 | |
|   UINT64                    EndingOffset;
 | |
| } MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// This GUID defines a RAM Disk supporting a raw disk format in volatile memory.
 | |
| ///
 | |
| #define EFI_VIRTUAL_DISK_GUID \
 | |
|   { \
 | |
|     0x77AB535A, 0x45FC, 0x624B, {0x55, 0x60, 0xF7, 0xB2, 0x81, 0xD1, 0xF9, 0x6E } \
 | |
|   }
 | |
| 
 | |
| extern  EFI_GUID                            gEfiVirtualDiskGuid;
 | |
| 
 | |
| ///
 | |
| /// This GUID defines a RAM Disk supporting an ISO image in volatile memory.
 | |
| ///
 | |
| #define EFI_VIRTUAL_CD_GUID \
 | |
|   { \
 | |
|     0x3D5ABD30, 0x4175, 0x87CE, {0x6D, 0x64, 0xD2, 0xAD, 0xE5, 0x23, 0xC4, 0xBB } \
 | |
|   }
 | |
| extern  EFI_GUID                            gEfiVirtualCdGuid;
 | |
| 
 | |
| ///
 | |
| /// This GUID defines a RAM Disk supporting a raw disk format in persistent memory.
 | |
| ///
 | |
| #define EFI_PERSISTENT_VIRTUAL_DISK_GUID \
 | |
|   { \
 | |
|     0x5CEA02C9, 0x4D07, 0x69D3, {0x26, 0x9F ,0x44, 0x96, 0xFB, 0xE0, 0x96, 0xF9 } \
 | |
|   }
 | |
| 
 | |
| extern  EFI_GUID                            gEfiPersistentVirtualDiskGuid;
 | |
| 
 | |
| ///
 | |
| /// This GUID defines a RAM Disk supporting an ISO image in persistent memory.
 | |
| ///
 | |
| #define EFI_PERSISTENT_VIRTUAL_CD_GUID \
 | |
|   { \
 | |
|     0x08018188, 0x42CD, 0xBB48, {0x10, 0x0F, 0x53, 0x87, 0xD5, 0x3D, 0xED, 0x3D } \
 | |
|   }
 | |
| 
 | |
| extern  EFI_GUID                            gEfiPersistentVirtualCdGuid;
 | |
| 
 | |
| ///
 | |
| /// Media ram disk device path.
 | |
| ///
 | |
| #define MEDIA_RAM_DISK_DP         0x09
 | |
| 
 | |
| ///
 | |
| /// Used to describe the ram disk device path.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Starting Memory Address.
 | |
|   ///
 | |
|   UINT32                          StartingAddr[2];
 | |
|   ///
 | |
|   /// Ending Memory Address.
 | |
|   ///
 | |
|   UINT32                          EndingAddr[2];
 | |
|   ///
 | |
|   /// GUID that defines the type of the RAM Disk.
 | |
|   ///
 | |
|   EFI_GUID                        TypeGuid;
 | |
|   ///
 | |
|   /// RAM Diskinstance number, if supported. The default value is zero.
 | |
|   ///
 | |
|   UINT16                          Instance;
 | |
| } MEDIA_RAM_DISK_DEVICE_PATH;
 | |
| 
 | |
| ///
 | |
| /// BIOS Boot Specification Device Path.
 | |
| ///
 | |
| #define BBS_DEVICE_PATH           0x05
 | |
| 
 | |
| ///
 | |
| /// BIOS Boot Specification Device Path SubType.
 | |
| ///
 | |
| #define BBS_BBS_DP                0x01
 | |
| 
 | |
| ///
 | |
| /// This Device Path is used to describe the booting of non-EFI-aware operating systems.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL        Header;
 | |
|   ///
 | |
|   /// Device Type as defined by the BIOS Boot Specification.
 | |
|   ///
 | |
|   UINT16                          DeviceType;
 | |
|   ///
 | |
|   /// Status Flags as defined by the BIOS Boot Specification.
 | |
|   ///
 | |
|   UINT16                          StatusFlag;
 | |
|   ///
 | |
|   /// Null-terminated ASCII string that describes the boot device to a user.
 | |
|   ///
 | |
|   CHAR8                           String[1];
 | |
| } BBS_BBS_DEVICE_PATH;
 | |
| 
 | |
| //
 | |
| // DeviceType definitions - from BBS specification
 | |
| //
 | |
| #define BBS_TYPE_FLOPPY           0x01
 | |
| #define BBS_TYPE_HARDDRIVE        0x02
 | |
| #define BBS_TYPE_CDROM            0x03
 | |
| #define BBS_TYPE_PCMCIA           0x04
 | |
| #define BBS_TYPE_USB              0x05
 | |
| #define BBS_TYPE_EMBEDDED_NETWORK 0x06
 | |
| #define BBS_TYPE_BEV              0x80
 | |
| #define BBS_TYPE_UNKNOWN          0xFF
 | |
| 
 | |
| 
 | |
| ///
 | |
| /// Union of all possible Device Paths and pointers to Device Paths.
 | |
| ///
 | |
| typedef union {
 | |
|   EFI_DEVICE_PATH_PROTOCOL                   DevPath;
 | |
|   PCI_DEVICE_PATH                            Pci;
 | |
|   PCCARD_DEVICE_PATH                         PcCard;
 | |
|   MEMMAP_DEVICE_PATH                         MemMap;
 | |
|   VENDOR_DEVICE_PATH                         Vendor;
 | |
| 
 | |
|   CONTROLLER_DEVICE_PATH                     Controller;
 | |
|   BMC_DEVICE_PATH                            Bmc;
 | |
|   ACPI_HID_DEVICE_PATH                       Acpi;
 | |
|   ACPI_EXTENDED_HID_DEVICE_PATH              ExtendedAcpi;
 | |
|   ACPI_ADR_DEVICE_PATH                       AcpiAdr;
 | |
| 
 | |
|   ATAPI_DEVICE_PATH                          Atapi;
 | |
|   SCSI_DEVICE_PATH                           Scsi;
 | |
|   ISCSI_DEVICE_PATH                          Iscsi;
 | |
|   FIBRECHANNEL_DEVICE_PATH                   FibreChannel;
 | |
|   FIBRECHANNELEX_DEVICE_PATH                 FibreChannelEx;
 | |
| 
 | |
|   F1394_DEVICE_PATH                          F1394;
 | |
|   USB_DEVICE_PATH                            Usb;
 | |
|   SATA_DEVICE_PATH                           Sata;
 | |
|   USB_CLASS_DEVICE_PATH                      UsbClass;
 | |
|   USB_WWID_DEVICE_PATH                       UsbWwid;
 | |
|   DEVICE_LOGICAL_UNIT_DEVICE_PATH            LogicUnit;
 | |
|   I2O_DEVICE_PATH                            I2O;
 | |
|   MAC_ADDR_DEVICE_PATH                       MacAddr;
 | |
|   IPv4_DEVICE_PATH                           Ipv4;
 | |
|   IPv6_DEVICE_PATH                           Ipv6;
 | |
|   VLAN_DEVICE_PATH                           Vlan;
 | |
|   INFINIBAND_DEVICE_PATH                     InfiniBand;
 | |
|   UART_DEVICE_PATH                           Uart;
 | |
|   UART_FLOW_CONTROL_DEVICE_PATH              UartFlowControl;
 | |
|   SAS_DEVICE_PATH                            Sas;
 | |
|   SASEX_DEVICE_PATH                          SasEx;
 | |
|   NVME_NAMESPACE_DEVICE_PATH                 NvmeNamespace;
 | |
|   DNS_DEVICE_PATH                            Dns;
 | |
|   URI_DEVICE_PATH                            Uri;
 | |
|   BLUETOOTH_DEVICE_PATH                      Bluetooth;
 | |
|   WIFI_DEVICE_PATH                           WiFi;
 | |
|   UFS_DEVICE_PATH                            Ufs;
 | |
|   SD_DEVICE_PATH                             Sd;
 | |
|   EMMC_DEVICE_PATH                           Emmc;
 | |
|   HARDDRIVE_DEVICE_PATH                      HardDrive;
 | |
|   CDROM_DEVICE_PATH                          CD;
 | |
| 
 | |
|   FILEPATH_DEVICE_PATH                       FilePath;
 | |
|   MEDIA_PROTOCOL_DEVICE_PATH                 MediaProtocol;
 | |
| 
 | |
|   MEDIA_FW_VOL_DEVICE_PATH                   FirmwareVolume;
 | |
|   MEDIA_FW_VOL_FILEPATH_DEVICE_PATH          FirmwareFile;
 | |
|   MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH    Offset;
 | |
|   MEDIA_RAM_DISK_DEVICE_PATH                 RamDisk;
 | |
|   BBS_BBS_DEVICE_PATH                        Bbs;
 | |
| } EFI_DEV_PATH;
 | |
| 
 | |
| 
 | |
| 
 | |
| typedef union {
 | |
|   EFI_DEVICE_PATH_PROTOCOL                   *DevPath;
 | |
|   PCI_DEVICE_PATH                            *Pci;
 | |
|   PCCARD_DEVICE_PATH                         *PcCard;
 | |
|   MEMMAP_DEVICE_PATH                         *MemMap;
 | |
|   VENDOR_DEVICE_PATH                         *Vendor;
 | |
| 
 | |
|   CONTROLLER_DEVICE_PATH                     *Controller;
 | |
|   BMC_DEVICE_PATH                            *Bmc;
 | |
|   ACPI_HID_DEVICE_PATH                       *Acpi;
 | |
|   ACPI_EXTENDED_HID_DEVICE_PATH              *ExtendedAcpi;
 | |
|   ACPI_ADR_DEVICE_PATH                       *AcpiAdr;
 | |
| 
 | |
|   ATAPI_DEVICE_PATH                          *Atapi;
 | |
|   SCSI_DEVICE_PATH                           *Scsi;
 | |
|   ISCSI_DEVICE_PATH                          *Iscsi;
 | |
|   FIBRECHANNEL_DEVICE_PATH                   *FibreChannel;
 | |
|   FIBRECHANNELEX_DEVICE_PATH                 *FibreChannelEx;
 | |
| 
 | |
|   F1394_DEVICE_PATH                          *F1394;
 | |
|   USB_DEVICE_PATH                            *Usb;
 | |
|   SATA_DEVICE_PATH                           *Sata;
 | |
|   USB_CLASS_DEVICE_PATH                      *UsbClass;
 | |
|   USB_WWID_DEVICE_PATH                       *UsbWwid;
 | |
|   DEVICE_LOGICAL_UNIT_DEVICE_PATH            *LogicUnit;
 | |
|   I2O_DEVICE_PATH                            *I2O;
 | |
|   MAC_ADDR_DEVICE_PATH                       *MacAddr;
 | |
|   IPv4_DEVICE_PATH                           *Ipv4;
 | |
|   IPv6_DEVICE_PATH                           *Ipv6;
 | |
|   VLAN_DEVICE_PATH                           *Vlan;
 | |
|   INFINIBAND_DEVICE_PATH                     *InfiniBand;
 | |
|   UART_DEVICE_PATH                           *Uart;
 | |
|   UART_FLOW_CONTROL_DEVICE_PATH              *UartFlowControl;
 | |
|   SAS_DEVICE_PATH                            *Sas;
 | |
|   SASEX_DEVICE_PATH                          *SasEx;
 | |
|   NVME_NAMESPACE_DEVICE_PATH                 *NvmeNamespace;
 | |
|   DNS_DEVICE_PATH                            *Dns;
 | |
|   URI_DEVICE_PATH                            *Uri;
 | |
|   BLUETOOTH_DEVICE_PATH                      *Bluetooth;
 | |
|   WIFI_DEVICE_PATH                           *WiFi;
 | |
|   UFS_DEVICE_PATH                            *Ufs;
 | |
|   SD_DEVICE_PATH                             *Sd;
 | |
|   EMMC_DEVICE_PATH                           *Emmc;
 | |
|   HARDDRIVE_DEVICE_PATH                      *HardDrive;
 | |
|   CDROM_DEVICE_PATH                          *CD;
 | |
| 
 | |
|   FILEPATH_DEVICE_PATH                       *FilePath;
 | |
|   MEDIA_PROTOCOL_DEVICE_PATH                 *MediaProtocol;
 | |
| 
 | |
|   MEDIA_FW_VOL_DEVICE_PATH                   *FirmwareVolume;
 | |
|   MEDIA_FW_VOL_FILEPATH_DEVICE_PATH          *FirmwareFile;
 | |
|   MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH    *Offset;
 | |
|   MEDIA_RAM_DISK_DEVICE_PATH                 *RamDisk;
 | |
|   BBS_BBS_DEVICE_PATH                        *Bbs;
 | |
|   UINT8                                      *Raw;
 | |
| } EFI_DEV_PATH_PTR;
 | |
| 
 | |
| #define EFI_DEBUGPORT_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0xEBA4E8D2, 0x3858, 0x41EC, {0xA2, 0x81, 0x26, 0x47, 0xBA, 0x96, 0x60, 0xD0 } \
 | |
|   }
 | |
| //
 | |
| // DEBUGPORT variable definitions...
 | |
| //
 | |
| #define EFI_DEBUGPORT_VARIABLE_NAME L"DEBUGPORT"
 | |
| #define EFI_DEBUGPORT_VARIABLE_GUID EFI_DEBUGPORT_PROTOCOL_GUID
 | |
| extern EFI_GUID  gEfiDebugPortVariableGuid;
 | |
| 
 | |
| //
 | |
| // DebugPort device path definitions...
 | |
| //
 | |
| #define DEVICE_PATH_MESSAGING_DEBUGPORT EFI_DEBUGPORT_PROTOCOL_GUID
 | |
| extern EFI_GUID  gEfiDebugPortProtocolGuid;
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_DEVICE_PATH_PROTOCOL  Header;
 | |
|   EFI_GUID                  Guid;
 | |
| } DEBUGPORT_DEVICE_PATH;
 | |
| 
 | |
| #pragma pack()
 | |
| 
 | |
| #define END_DEVICE_PATH_TYPE                 0x7f
 | |
| #define END_ENTIRE_DEVICE_PATH_SUBTYPE       0xFF
 | |
| #define END_INSTANCE_DEVICE_PATH_SUBTYPE     0x01
 | |
| 
 | |
| extern EFI_GUID gEfiDevicePathProtocolGuid;
 | |
| 
 | |
| #endif
 |