alcyone/SDK/INC/EFI/efidevp.h
Quinn Stephens 5f0a5d0588 [SDK] Fix preprocessor usage
Signed-off-by: Quinn Stephens <quinn@osmora.org>
2025-06-12 14:03:21 -04:00

1059 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.
--*/
#pragma once
#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 */