1057 lines
20 KiB
C
1057 lines
20 KiB
C
/*++
|
|
|
|
Copyright (c) 2024-2025, Quinn Stephens.
|
|
Provided under the BSD 3-Clause license.
|
|
|
|
Module Name:
|
|
|
|
efidevp.h
|
|
|
|
Abstract:
|
|
|
|
Provides EFI device path definitions.
|
|
|
|
--*/
|
|
|
|
#ifndef _EFIDEVP_H
|
|
#define _EFIDEVP_H
|
|
|
|
#pragma pack(1)
|
|
|
|
//
|
|
// Device path node.
|
|
//
|
|
typedef struct {
|
|
UINT8 Type;
|
|
UINT8 SubType;
|
|
|
|
//
|
|
// Usage is determined by type and subtype.
|
|
//
|
|
UINT8 Length[2];
|
|
} EFI_DEVICE_PATH_PROTOCOL;
|
|
|
|
//
|
|
// For backwards-compatibility with EFI 1.1.
|
|
//
|
|
typedef EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH;
|
|
|
|
//
|
|
// Device path types.
|
|
//
|
|
|
|
#define HARDWARE_DEVICE_PATH 0x01
|
|
#define ACPI_DEVICE_PATH 0x02
|
|
#define MESSAGING_DEVICE_PATH 0x03
|
|
#define MEDIA_DEVICE_PATH 0x04
|
|
#define BBS_DEVICE_PATH 0x05
|
|
#define END_DEVICE_PATH_TYPE 0x7F
|
|
|
|
#define EFI_DP_TYPE_MASK 0x7F
|
|
#define EFI_DP_TYPE_UNPACKED 0x80
|
|
|
|
//
|
|
// End device path subtypes.
|
|
//
|
|
#define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01
|
|
#define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xFF
|
|
|
|
//
|
|
// End device path length.
|
|
//
|
|
#define END_DEVICE_PATH_LENGTH (sizeof(EFI_DEVICE_PATH_PROTOCOL))
|
|
|
|
//
|
|
// Hardware device path subtypes.
|
|
//
|
|
#define HW_PCI_DP 0x01
|
|
#define HW_PCCARD_DP 0x02
|
|
#define HW_MEMMAP_DP 0x03
|
|
#define HW_VENDOR_DP 0x04
|
|
#define HW_CONTROLLER_DP 0x05
|
|
#define HW_BMC_DP 0x06
|
|
|
|
//
|
|
// PCI (Peripheral Component Interconnect) hardware subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT8 Function;
|
|
UINT8 Device;
|
|
} PCI_DEVICE_PATH;
|
|
|
|
//
|
|
// PCCard hardware subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT8 FunctionNumber;
|
|
} PCCARD_DEVICE_PATH;
|
|
|
|
//
|
|
// Memory map hardware subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// EFI_MEMORY_TYPE.
|
|
//
|
|
UINT32 MemoryType;
|
|
|
|
EFI_PHYSICAL_ADDRESS StartingAddress;
|
|
EFI_PHYSICAL_ADDRESS EndingAddress;
|
|
} MEMMAP_DEVICE_PATH;
|
|
|
|
//
|
|
// Vendor hardware subtype.
|
|
//
|
|
|
|
#define UNKNOWN_DEVICE_GUID \
|
|
{ 0xCF31FAC5, 0xC24E, 0x11D2, {0x85, 0xF3, 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B} }
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// Vendor-assigned GUID.
|
|
//
|
|
EFI_GUID Guid;
|
|
|
|
//
|
|
// Vendor-defined variable-size data.
|
|
//
|
|
} VENDOR_DEVICE_PATH;
|
|
|
|
typedef struct {
|
|
VENDOR_DEVICE_PATH DevicePath;
|
|
UINT8 LegacyDriveLetter;
|
|
} UNKNOWN_DEVICE_VENDOR_DEVICE_PATH;
|
|
|
|
//
|
|
// Controller hardware subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT32 ControllerNumber;
|
|
} CONTROLLER_DEVICE_PATH;
|
|
|
|
//
|
|
// BMC (Baseboard Management Controller) hardware sutype.
|
|
//
|
|
|
|
#define BMC_INTERFACE_TYPE_UNKNOWN 0x00
|
|
#define BMC_INTERFACE_TYPE_KCS 0x01
|
|
#define BMC_INTERFACE_TYPE_SMIC 0x02
|
|
#define BMC_INTERFACE_TYPE_BT 0x03
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT8 InterfaceType;
|
|
UINT64 BaseAddress;
|
|
} BMC_DEVICE_PATH;
|
|
|
|
//
|
|
// ACPI (Advanced Configuration and Power Interface) device path subtypes.
|
|
//
|
|
#define ACPI_DP 0x01
|
|
#define ACPI_EXTENDED_DP 0x02
|
|
#define ACPI_ADR_DP 0x03
|
|
#define ACPI_NVDIMM_DP 0x04
|
|
|
|
//
|
|
// EISA ID constants.
|
|
//
|
|
#define PNP_EISA_ID_CONST 0x41D0
|
|
#define PNP_EISA_ID_MASK 0xFFFF
|
|
|
|
//
|
|
// EISA ID helpers.
|
|
//
|
|
#define EISA_ID(name, num) ((num) << 16) | (UINT32)((name))
|
|
#define EISA_ID_TO_NUM(id) ((id) >> 16)
|
|
#define EISA_PNP_ID(pnpId) (EISA_ID(PNP_EISA_ID_CONST, (pnpId)))
|
|
#define EFI_PNP_ID EISA_PNP_ID
|
|
|
|
//
|
|
// ACPI subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// EISA-compressed PnP hardware ID.
|
|
//
|
|
UINT32 HID;
|
|
|
|
//
|
|
// Unique ID.
|
|
//
|
|
UINT32 UID;
|
|
} ACPI_HID_DEVICE_PATH;
|
|
|
|
//
|
|
// Extended ACPI subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// EISA-compressed PnP hardware ID.
|
|
//
|
|
UINT32 HID;
|
|
|
|
//
|
|
// Unique ID.
|
|
//
|
|
UINT32 UID;
|
|
|
|
//
|
|
// EISA-compressed compatible PnP hardware ID.
|
|
//
|
|
UINT32 CID;
|
|
} ACPI_EXTENDED_HID_DEVICE_PATH;
|
|
|
|
//
|
|
// ADR ACPI subtype.
|
|
//
|
|
|
|
#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(scheme, headId, nonVgaOutput, biosCanDetect, vendorInfo, type, port, index) \
|
|
((UINT32)( \
|
|
((UINT32)((scheme) & 0x1) << 31) | \
|
|
(((headId) & 0x7) << 18) | \
|
|
(((nonVgaOutput) & 0x1) << 17) | \
|
|
(((biosCanDetect) & 0x1) << 16) | \
|
|
(((vendorInfo) & 0xF) << 12) | \
|
|
(((type) & 0xF) << 8) | \
|
|
(((port) & 0xF) << 4) | \
|
|
((index) & 0xF) \
|
|
))
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// ACPI _ADR value.
|
|
//
|
|
UINT32 ADR;
|
|
} ACPI_ADR_DEVICE_PATH;
|
|
|
|
//
|
|
// NVDIMM ACPI subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// Unique physical identifier of NFIT device.
|
|
//
|
|
UINT32 NFITDeviceHandle;
|
|
} ACPI_NVDIMM_DEVICE_PATH;
|
|
|
|
//
|
|
// Messaging device subtypes.
|
|
//
|
|
#define MSG_ATAPI_DP 0x01
|
|
#define MSG_SCSI_DP 0x02
|
|
#define MSG_FIBRECHANNEL_DP 0x03
|
|
#define MSG_1394_DP 0x04
|
|
#define MSG_USB_DP 0x05
|
|
#define MSG_I2O_DP 0x06
|
|
#define MSG_INFINIBAND_DP 0x09
|
|
#define MSG_VENDOR_DP 0x0A
|
|
#define MSG_MAC_ADDR_DP 0x0B
|
|
#define MSG_IPv4_DP 0x0C
|
|
#define MSG_IPv6_DP 0x0D
|
|
#define MSG_UART_DP 0x0E
|
|
#define MSG_USB_CLASS_DP 0x0F
|
|
#define MSG_USB_WWID_DP 0x10
|
|
#define MSG_DEVICE_LOGICAL_UNIT_DP 0x11
|
|
#define MSG_SATA_DP 0x12
|
|
#define MSG_ISCSI_DP 0x13
|
|
#define MSG_VLAN_DP 0x14
|
|
#define MSG_FIBRECHANNELEX_DP 0x15
|
|
#define MSG_SASEX_DP 0x16
|
|
#define MSG_NVME_NAMESPACE_DP 0x17
|
|
#define MSG_URI_DP 0x18
|
|
#define MSG_UFS_DP 0x19
|
|
#define MSG_SD_DP 0x1A
|
|
#define MSG_BLUETOOTH_DP 0x1B
|
|
#define MSG_WIFI_DP 0x1C
|
|
#define MSG_EMMC_DP 0x1D
|
|
#define MSG_BLUETOOTH_LE_DP 0x1E
|
|
#define MSG_DNS_DP 0x1F
|
|
#define MSG_NVDIMM_NAMESPACE_DP 0x20
|
|
#define MSG_NVME_OF_NAMESPACE_DP 0x22
|
|
|
|
//
|
|
// ATAPI (ATA Packet Interface) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// 0 (primary) or 1 (secondary).
|
|
//
|
|
UINT8 PrimarySecondary;
|
|
|
|
//
|
|
// 0 (master) or 1 (slave).
|
|
//
|
|
UINT8 SlaveMaster;
|
|
|
|
//
|
|
// LUN (Logical Unit Number).
|
|
//
|
|
UINT16 Lun;
|
|
} ATAPI_DEVICE_PATH;
|
|
|
|
//
|
|
// SCSI (Small Computer System Interface) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// PUN (Physical Unit Number), aka SCSI ID.
|
|
//
|
|
UINT16 Pun;
|
|
|
|
//
|
|
// LUN (Logical Unit Number).
|
|
//
|
|
UINT16 Lun;
|
|
} SCSI_DEVICE_PATH;
|
|
|
|
//
|
|
// Fibre Channel messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT32 Reserved;
|
|
|
|
//
|
|
// WWN (WorldWide Number).
|
|
//
|
|
UINT64 WWN;
|
|
|
|
//
|
|
// LUN (Logical Unit Number).
|
|
//
|
|
UINT64 Lun;
|
|
} FIBRECHANNEL_DEVICE_PATH;
|
|
|
|
//
|
|
// 1394 messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT32 Reserved;
|
|
UINT64 Guid;
|
|
} F1394_DEVICE_PATH;
|
|
|
|
//
|
|
// USB (Universal Serial Bus) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT8 ParentPortNumber;
|
|
UINT8 InterfaceNumber;
|
|
} USB_DEVICE_PATH;
|
|
|
|
//
|
|
// I2O (Intelligent I/O) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// TID (Target ID).
|
|
//
|
|
UINT32 Tid;
|
|
} I2O_DEVICE_PATH;
|
|
|
|
//
|
|
// InfiniBand messaging subtype.
|
|
//
|
|
|
|
#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
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// INFINIBAND_RESOURCE_FLAG_*.
|
|
//
|
|
UINT32 ResourceFlags;
|
|
|
|
UINT8 PortGid[16];
|
|
UINT64 ServiceId;
|
|
UINT64 TargetPortId;
|
|
UINT64 DeviceId;
|
|
} INFINIBAND_DEVICE_PATH;
|
|
|
|
//
|
|
// Vendor messaging subtype.
|
|
// Use VENDOR_DEVICE_PATH struct.
|
|
//
|
|
|
|
//
|
|
// UART flow control vendor protocol.
|
|
//
|
|
|
|
#define EFI_VT_100_PLUS_GUID \
|
|
{ 0x7BAEC70B, 0x57E0, 0x4C76, {0x8E, 0x87, 0x2F, 0x9E, 0x28, 0x08, 0x83, 0x43} }
|
|
|
|
#define EFI_VT_UTF8_GUID \
|
|
{ 0xAD15A0D6, 0x8BEC, 0x4ACF, {0xA0, 0x73, 0xD0, 0x1D, 0xE7, 0x7E, 0x2D, 0x88} }
|
|
|
|
#define EFI_VT_100_GUID \
|
|
{ 0xDFA66065, 0xB419, 0x11D3, {0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
|
|
|
|
#define EFI_PC_ANSI_GUID \
|
|
{ 0xE0C14753, 0xF9BE, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
|
|
|
|
#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
|
|
|
|
#define UART_FLOW_CONTROL_HARDWARE 0x00000001
|
|
#define UART_FLOW_CONTROL_XON_XOFF 0x00000010
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
EFI_GUID Guid;
|
|
UINT32 FlowControlMap;
|
|
} UART_FLOW_CONTROL_DEVICE_PATH;
|
|
|
|
//
|
|
// SAS (Serial-Attached SCSI) vendor protocol.
|
|
//
|
|
|
|
#define DEVICE_PATH_MESSAGING_SAS EFI_SAS_DEVICE_PATH_GUID
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
EFI_GUID Guid;
|
|
UINT32 Reserved;
|
|
|
|
//
|
|
// SAS address.
|
|
//
|
|
UINT64 SasAddress;
|
|
|
|
//
|
|
// LUN (Logical Unit Number).
|
|
//
|
|
UINT64 Lun;
|
|
|
|
UINT16 DeviceTopology;
|
|
UINT16 RelativeTargetPort;
|
|
} SAS_DEVICE_PATH;
|
|
|
|
//
|
|
// MAC (Medium Access Control) address messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
EFI_MAC_ADDRESS MacAddress;
|
|
|
|
//
|
|
// Interface type (802.11 etc).
|
|
//
|
|
UINT8 IfType;
|
|
} MAC_ADDR_DEVICE_PATH;
|
|
|
|
//
|
|
// IPv4 messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
EFI_IPv4_ADDRESS LocalIpAddress;
|
|
EFI_IPv4_ADDRESS RemoteIpAddress;
|
|
UINT16 LocalPort;
|
|
UINT16 RemotePort;
|
|
UINT16 Protocol;
|
|
BOOLEAN StaticIpAddress;
|
|
|
|
//
|
|
// UEFI 2.0+ only.
|
|
//
|
|
EFI_IPv4_ADDRESS GatewayIpAddress;
|
|
EFI_IPv4_ADDRESS SubnetMask;
|
|
} IPv4_DEVICE_PATH;
|
|
|
|
//
|
|
// IPv6 messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
EFI_IPv6_ADDRESS LocalIpAddress;
|
|
EFI_IPv6_ADDRESS RemoteIpAddress;
|
|
UINT16 LocalPort;
|
|
UINT16 RemotePort;
|
|
UINT16 Protocol;
|
|
UINT8 IpAddressOrigin;
|
|
|
|
//
|
|
// UEFI 2.0+ only.
|
|
//
|
|
UINT8 PrefixLength;
|
|
EFI_IPv6_ADDRESS GatewayIpAddress;
|
|
} IPv6_DEVICE_PATH;
|
|
|
|
//
|
|
// UART messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT32 Reserved;
|
|
UINT64 BaudRate;
|
|
UINT8 DataBits;
|
|
|
|
//
|
|
// Parity configuration.
|
|
// 0x00 - Default.
|
|
// 0x01 - None.
|
|
// 0x02 - Even.
|
|
// 0x03 - Odd.
|
|
// 0x04 - Mark.
|
|
// 0x05 - Space.
|
|
//
|
|
UINT8 Parity;
|
|
|
|
//
|
|
// Number of stop bits.
|
|
// 0x00 - Default.
|
|
// 0x01 - 1.
|
|
// 0x02 - 1.5.
|
|
// 0x03 - 2.
|
|
//
|
|
UINT8 StopBits;
|
|
} UART_DEVICE_PATH;
|
|
|
|
//
|
|
// USB class messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// 0xFFFF will match any vendor/product ID.
|
|
//
|
|
UINT16 VendorId;
|
|
UINT16 ProductId;
|
|
|
|
//
|
|
// 0xFF will match any class/subclass/protocol.
|
|
//
|
|
UINT8 DeviceClass;
|
|
UINT8 DeviceSubClass;
|
|
UINT8 DeviceProtocol;
|
|
} USB_CLASS_DEVICE_PATH;
|
|
|
|
//
|
|
// USB WWID (WorldWide IDentifier) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT16 InterfaceNumber;
|
|
UINT16 VendorId;
|
|
UINT16 ProductId;
|
|
CHAR16 SerialNumber[];
|
|
} USB_WWID_DEVICE_PATH;
|
|
|
|
//
|
|
// Device LUN (Logical Unit Number) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// LUN (Logical Unit Number).
|
|
//
|
|
UINT8 Lun;
|
|
} DEVICE_LOGICAL_UNIT_DEVICE_PATH;
|
|
|
|
//
|
|
// SATA (Serial ATA) messaging subtype.
|
|
//
|
|
|
|
#define SATA_HBA_DIRECT_CONNECT_FLAG 0x8000
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// 0xFFFF is reserved.
|
|
//
|
|
UINT16 HBAPortNumber;
|
|
|
|
//
|
|
// 0xFFFF if directly connected to HBA.
|
|
//
|
|
UINT16 PortMultiplierPortNumber;
|
|
|
|
//
|
|
// LUN (Logical Unit Number).
|
|
//
|
|
UINT16 Lun;
|
|
} SATA_DEVICE_PATH;
|
|
|
|
//
|
|
// iSCSI (Internet SCSI) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// 0 if TCP.
|
|
//
|
|
UINT16 NetworkProtocol;
|
|
|
|
UINT16 LoginOption;
|
|
|
|
//
|
|
// LUN (Logical Unit Number).
|
|
//
|
|
UINT64 Lun;
|
|
|
|
UINT16 TargetPortalGroupTag;
|
|
} ISCSI_DEVICE_PATH;
|
|
|
|
//
|
|
// VLAN (Virtual LAN) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// Must be in range 0-4094.
|
|
//
|
|
UINT16 VlanId;
|
|
} VLAN_DEVICE_PATH;
|
|
|
|
//
|
|
// Extended Fibre Channel messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT32 Reserved;
|
|
|
|
//
|
|
// WWN (WorldWide Number).
|
|
//
|
|
UINT8 WWN[8];
|
|
|
|
//
|
|
// LUN (Logical Unit Number).
|
|
//
|
|
UINT8 Lun[8];
|
|
} FIBRECHANNELEX_DEVICE_PATH;
|
|
|
|
//
|
|
// Extended SAS (Serial-Attached SCSI) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT8 SasAddress[8];
|
|
|
|
//
|
|
// LUN (Logical Unit Number).
|
|
//
|
|
UINT8 Lun[8];
|
|
|
|
UINT16 DeviceTopology;
|
|
UINT16 RelativeTargetPort;
|
|
} SASEX_DEVICE_PATH;
|
|
|
|
//
|
|
// NVME (NVM Express) namespace messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT32 NamespaceId;
|
|
UINT64 NamespaceUuid;
|
|
} NVME_NAMESPACE_DEVICE_PATH;
|
|
|
|
//
|
|
// URI (Uniform Resource Identifier) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
CHAR8 Uri[];
|
|
} URI_DEVICE_PATH;
|
|
|
|
//
|
|
// UFS (Universal Flash Storage) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// PUN (Physical Unit Number).
|
|
//
|
|
UINT8 Pun;
|
|
|
|
//
|
|
// LUN (Logical Unit Number).
|
|
//
|
|
UINT8 Lun;
|
|
} UFS_DEVICE_PATH;
|
|
|
|
//
|
|
// SD (Secure Digital) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT8 SlotNumber;
|
|
} SD_DEVICE_PATH;
|
|
|
|
//
|
|
// Bluetooth messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
BLUETOOTH_ADDRESS Address;
|
|
} BLUETOOTH_DEVICE_PATH;
|
|
|
|
//
|
|
// Wi-Fi messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
|
|
//
|
|
// SSID (Service Set Identifier).
|
|
//
|
|
UINT8 SSId[32];
|
|
} WIFI_DEVICE_PATH;
|
|
|
|
//
|
|
// EMMC (Embedded MMC) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT8 SlotNumber;
|
|
} EMMC_DEVICE_PATH;
|
|
|
|
//
|
|
// Bluetooth LE (Low Energy) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
BLUETOOTH_LE_ADDRESS Address;
|
|
} BLUETOOTH_LE_DEVICE_PATH;
|
|
|
|
//
|
|
// DNS (Domain Name Service) messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT8 IsIPv6;
|
|
EFI_IP_ADDRESS DnsServerIp[];
|
|
} DNS_DEVICE_PATH;
|
|
|
|
//
|
|
// NVDIMM (Non-Volatile DIMM) namespace messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
EFI_GUID Uuid;
|
|
} NVDIMM_NAMESPACE_DEVICE_PATH;
|
|
|
|
//
|
|
// NVME-oF (NVME over Fabric) namespace messaging subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT8 NamespaceIdType;
|
|
UINT8 NamespaceId[16];
|
|
CHAR8 SubsystemNqn[];
|
|
} NVME_OF_NAMESPACE_DEVICE_PATH;
|
|
|
|
//
|
|
// Media device path subtypes.
|
|
//
|
|
#define MEDIA_HARDDRIVE_DP 0x01
|
|
#define MEDIA_CDROM_DP 0x02
|
|
#define MEDIA_VENDOR_DP 0x03
|
|
#define MEDIA_FILEPATH_DP 0x04
|
|
#define MEDIA_PROTOCOL_DP 0x05
|
|
#define MEDIA_PIWG_FW_FILE_DP 0x06
|
|
#define MEDIA_PIWG_FW_VOL_DP 0x07
|
|
#define MEDIA_RELATIVE_OFFSET_RANGE_DP 0x08
|
|
#define MEDIA_RAM_DISK_DP 0x09
|
|
|
|
//
|
|
// Hard drive media subtype.
|
|
//
|
|
|
|
#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
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT32 PartitionNumber;
|
|
UINT64 PartitionStart;
|
|
UINT64 PartitionSize;
|
|
UINT8 Signature[16];
|
|
UINT8 MBRType;
|
|
UINT8 SignatureType;
|
|
} HARDDRIVE_DEVICE_PATH;
|
|
|
|
//
|
|
// CD-ROM (CD Read-Only Memory) media subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT32 BootEntry;
|
|
UINT64 PartitionStart;
|
|
UINT64 PartitionSize;
|
|
} CDROM_DEVICE_PATH;
|
|
|
|
//
|
|
// Vendor media subtype.
|
|
// Use VENDOR_DEVICE_PATH structure.
|
|
//
|
|
|
|
//
|
|
// File path media subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
CHAR16 PathName[1];
|
|
} FILEPATH_DEVICE_PATH;
|
|
|
|
//
|
|
// Protocol media subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
EFI_GUID Protocol;
|
|
} MEDIA_PROTOCOL_DEVICE_PATH;
|
|
|
|
//
|
|
// PIWG (Platform Initialization Working Group) firmware file media subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
EFI_GUID FvFileName;
|
|
} MEDIA_FW_VOL_FILEPATH_DEVICE_PATH;
|
|
|
|
//
|
|
// PIWG (Platform Initialization Working Group) firmware volume media subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
EFI_GUID FvName;
|
|
} MEDIA_FW_VOL_DEVICE_PATH;
|
|
|
|
//
|
|
// Relative offset range media subtype.
|
|
//
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT32 Reserved;
|
|
UINT64 StartingOffset;
|
|
UINT64 EndingOffset;
|
|
} MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH;
|
|
|
|
//
|
|
// RAM disk media subtype.
|
|
//
|
|
|
|
#define EFI_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE
|
|
#define EFI_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE
|
|
#define EFI_PERSISTENT_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT
|
|
#define EFI_PERSISTENT_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT32 StartingAddr[2];
|
|
UINT32 EndingAddr[2];
|
|
EFI_GUID TypeGuid;
|
|
UINT16 Instance;
|
|
} MEDIA_RAM_DISK_DEVICE_PATH;
|
|
|
|
//
|
|
// BBS (BIOS Boot Specification) device path subtypes.
|
|
//
|
|
#define BBS_BBS_DP 0x01
|
|
|
|
//
|
|
// BBS (BIOS Boot Specification) BBS subtype.
|
|
//
|
|
|
|
#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_DEV 0x80
|
|
#define BBS_TYPE_UNKNOWN 0xFF
|
|
|
|
typedef struct {
|
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
|
UINT16 DeviceType;
|
|
UINT16 StatusFlag;
|
|
CHAR8 String[1];
|
|
} BBS_BBS_DEVICE_PATH;
|
|
|
|
//
|
|
// Device path helpers.
|
|
//
|
|
|
|
FORCEINLINE
|
|
UINT8
|
|
DevicePathType (
|
|
IN CONST VOID *Node
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Gets the type of a device path node.
|
|
|
|
Arguments:
|
|
|
|
Node - The node to get the type from.
|
|
|
|
Return Value:
|
|
|
|
The type of the node.
|
|
|
|
--*/
|
|
|
|
{
|
|
return ((EFI_DEVICE_PATH *)(Node))->Type & EFI_DP_TYPE_MASK;
|
|
}
|
|
|
|
FORCEINLINE
|
|
UINT8
|
|
DevicePathSubType (
|
|
IN CONST VOID *Node
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Gets the subtype of a device path node.
|
|
|
|
Arguments:
|
|
|
|
Node - The node to get the subtype from.
|
|
|
|
Return Value:
|
|
|
|
The subtype of the node.
|
|
|
|
--*/
|
|
|
|
{
|
|
return ((EFI_DEVICE_PATH *)(Node))->SubType;
|
|
}
|
|
|
|
FORCEINLINE
|
|
UINTN
|
|
DevicePathNodeLength (
|
|
IN CONST VOID *Node
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Gets the length of a device path node.
|
|
|
|
Arguments:
|
|
|
|
Node - The node to get the length from.
|
|
|
|
Return Value:
|
|
|
|
The length of the node.
|
|
|
|
--*/
|
|
|
|
{
|
|
return *((UINT16 *)&((EFI_DEVICE_PATH *)(Node))->Length[0]);
|
|
}
|
|
|
|
FORCEINLINE
|
|
EFI_DEVICE_PATH *
|
|
NextDevicePathNode (
|
|
IN CONST VOID *Node
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Finds the next node in a device path.
|
|
|
|
Arguments:
|
|
|
|
Node - The current node to find the next node from.
|
|
|
|
Return Value:
|
|
|
|
A pointer to the next node.
|
|
|
|
--*/
|
|
|
|
{
|
|
return (EFI_DEVICE_PATH *)((UINT8 *)(Node) + DevicePathNodeLength(Node));
|
|
}
|
|
|
|
FORCEINLINE
|
|
BOOLEAN
|
|
IsDevicePathEndType (
|
|
IN CONST VOID *Node
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Checks if a device path node is an end node.
|
|
|
|
Arguments:
|
|
|
|
Node - The node to check.
|
|
|
|
Return Value:
|
|
|
|
TRUE if the node is an end node.
|
|
|
|
FALSE if the node is not an end node.
|
|
|
|
--*/
|
|
|
|
{
|
|
return (BOOLEAN)(DevicePathType(Node) == END_DEVICE_PATH_TYPE);
|
|
}
|
|
|
|
#pragma pack()
|
|
|
|
#endif /* !_EFIDEVP_H */
|