summaryrefslogtreecommitdiff
path: root/Include/Protocol/DevicePath.h
diff options
context:
space:
mode:
Diffstat (limited to 'Include/Protocol/DevicePath.h')
-rw-r--r--Include/Protocol/DevicePath.h570
1 files changed, 570 insertions, 0 deletions
diff --git a/Include/Protocol/DevicePath.h b/Include/Protocol/DevicePath.h
new file mode 100644
index 0000000..304d92c
--- /dev/null
+++ b/Include/Protocol/DevicePath.h
@@ -0,0 +1,570 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+//**********************************************************************
+// $Header: /Alaska/BIN/Core/Include/Protocol/DevicePath.h 16 4/10/12 12:50p Artems $
+//
+// $Revision: 16 $
+//
+// $Date: 4/10/12 12:50p $
+//*****************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/BIN/Core/Include/Protocol/DevicePath.h $
+//
+// 16 4/10/12 12:50p Artems
+// EIP 87234: SCT devicepath test error - added support for SAS Ex device
+// path
+//
+// 15 10/20/11 7:01p Artems
+// Added new DevicePath types as described in UEFI spec v.2.3.1
+//
+// 14 5/05/11 12:05p Artems
+// Added support for new device types. Minor changes done to reduce
+// difference with EDKII
+//
+// 13 4/21/11 12:53p Artems
+// EIP 58707: Added changes introduced in UEFI specification v. 2.3.1
+//
+// 11 11/15/10 4:34p Felixp
+// MSG_SATA_DP constant is added.
+//
+// 10 28/02/08 7:38p Anandakrishnanl
+// Added sata device path length definition
+//
+// 9 3/19/07 2:21p Felixp
+//
+// 8 1/17/07 9:54a Felixp
+// New device path types added
+//
+// 4 1/12/07 5:24p Felixp
+//
+// 3 12/06/06 11:46a Vyacheslava
+//
+// 6 5/19/06 10:20p Felixp
+// SET_NODE_LENGTH & NODE_LENGTH macros added
+//
+// 5 3/13/06 1:40a Felixp
+//
+// 4 4/20/05 4:54p Andriyn
+// USB_DEVICE_PATH added
+//
+// 2 2/03/05 4:56p Felixp
+// NEXT_NODE macros added
+//
+// 1 1/28/05 12:44p Felixp
+//
+// 2 1/18/05 3:21p Felixp
+// PrintDebugMessage renamed to Trace
+//
+// 1 12/23/04 9:41a Felixp
+//
+// 17 12/22/04 11:10a Markw
+// Added the rest of the device paths.
+//
+// 16 12/21/04 5:53p Markw
+// Added several device path structures.
+//
+// 15 12/21/04 5:00p Markw
+// Modified device path defines for consistency and added defines for all
+// types and subtypes.
+//
+// 14 12/21/04 4:21p Markw
+// Renamed hardware device path definition for consistency and some more
+// hardware paths.
+//
+// 13 12/13/04 3:36p Markw
+// Device Path checked erasing previous changes. Fixed. Added Vendor
+// Define Device Path Terminal GUIDs.
+//
+// 12 12/10/04 4:24p Felixp
+//
+// 11 12/08/04 8:57a Radhikav
+// Added UART Devicpath.
+
+// 10 12/02/04 6:27p Markw
+// Added Vendor Define Device Path and Terminal GUIDs.
+//
+// 9 11/16/04 6:15p Robert
+// Updated errors in the Hard drive device path and the cdrom device path
+// structures
+//
+// 8 10/11/04 5:54p Olegi
+//
+// 7 10/01/04 5:46p Robert
+// Added support for Hard drives and CDROM device paths
+//
+// 6 9/27/04 12:09p Felixp
+//
+// 5 7/16/04 3:57p Felixp
+// Changes to support both 7f and ff values for the device path end type
+//
+// 4 3/18/04 5:22p Markw
+// Add memory mapped device path.
+//
+// 3 2/17/04 4:38p Felixp
+// Media device path added
+//
+// 2 2/09/04 2:23p Markw
+// header/typedef fixes
+//
+// 1 2/09/04 1:25p Markw
+//
+//*****************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: DevicePath.h
+//
+// Description: This file is an include file used to define the Protocol and
+// definitions for the Device Path.
+//
+//<AMI_FHDR_END>
+//*****************************************************************************
+
+#ifndef __DEVICE_PATH_PROTOCOL_H__
+#define __DEVICE_PATH_PROTOCOL_H__
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <EFI.h>
+
+#define EFI_DEVICE_PATH_PROTOCOL_GUID \
+ { 0x09576e91, 0x6d3f, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b}
+
+GUID_VARIABLE_DECLARATION(gEfiDevicePathProtocolGuid, EFI_DEVICE_PATH_PROTOCOL_GUID);
+
+#define NODE_LENGTH(pPath) (*(UINT16*)&(pPath)->Length[0])
+#define SET_NODE_LENGTH(pPath,Length) (NODE_LENGTH(pPath)=(Length))
+#define NEXT_NODE(pPath) ((EFI_DEVICE_PATH_PROTOCOL*)((UINT8*)(pPath)+NODE_LENGTH(pPath)))
+
+#define END_DEVICE_PATH 0x7F
+#define END_DEVICE_PATH1 0xFF
+ #define END_INSTANCE_SUBTYPE 0x01
+ #define END_ENTIRE_SUBTYPE 0xFF
+ #define END_DEVICE_PATH_LENGTH 0x04
+
+#define isEndNode(pDp) ((pDp)->Type==END_DEVICE_PATH||(pDp)->Type==END_DEVICE_PATH1)
+
+#define HARDWARE_DEVICE_PATH 0x01
+ #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_PCI_DEVICE_PATH_LENGTH 0x06
+
+#define ACPI_DEVICE_PATH 0x02
+ #define ACPI_DP 0x01
+ #define ACPI_DEVICE_PATH_LENGTH 0x0C
+ #define ACPI_EXTENDED_DP 0x02
+ #define ACPI_ADR_DP 0x03
+
+#define MESSAGING_DEVICE_PATH 0x03
+ #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_CLASS_DP 0x10
+ #define MSG_USB_LOGICAL_UNIT_CLASS_DP 0x11
+ #define MSG_USB_SATA_DP 0x12
+ #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_DEVICE_PATH_LENGTH 0x08
+ #define ATAPI_DEVICE_PATH_LENGTH 0x08
+ #define SATA_DEVICE_PATH_LENGTH 0x0A
+ #define UART_DEVICE_PATH_LENGTH 0x13
+
+#define MEDIA_DEVICE_PATH 0x04
+ #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_FV_FILEPATH_DP 0x06
+ #define MEDIA_FV_DP 0x07
+ #define MEDIA_RELATIVE_OFFSET_RANGE_DP 0x08
+
+//Does not follow our device path naming convensions but
+//this is how it is defined in the CSM Spec
+#define BBS_DEVICE_PATH 0x05
+ #define BBS_BBS_DP 0x01
+
+//EFI defined Vendor defined device path guids.
+#define EFI_PC_ANSI_GUID \
+ {0xe0c14753,0xf9be,0x11d2,0x9a,0x0c,0x00,0x90,0x27,0x3f,0xc1,0x4d}
+#define EFI_VT_100_GUID \
+ {0xdfa66065,0xb419,0x11d3,0x9a,0x2d,0x00,0x90,0x27,0x3f,0xc1,0x4d}
+#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 DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL \
+ {0x37499A9D,0x542F,0x4C89,0xA0,0x26,0x35,0xDA,0x14,0x20,0x94,0xE4}
+#define EFI_SAS_PROTOCOL_GUID \
+ {0xd487ddb4,0x008b,0x11d9,0xaf,0xdc,0x00,0x10,0x83,0xff,0xca,0x4d}
+#define EFI_DEBUGPORT_PROTOCOL_GUID \
+ {0xEBA4E8D2,0x3858,0x41EC,0xA2,0x81,0x26,0x47,0xBA,0x96,0x60,0xD0}
+
+GUID_VARIABLE_DECLARATION(gEfiPcAnsiGuid, EFI_PC_ANSI_GUID);
+GUID_VARIABLE_DECLARATION(gEfiVT100Guid, EFI_VT_100_GUID);
+GUID_VARIABLE_DECLARATION(gEfiVT100PlusGuid, EFI_VT_100_PLUS_GUID);
+GUID_VARIABLE_DECLARATION(gEfiVTUTF8Guid, EFI_VT_UTF8_GUID);
+GUID_VARIABLE_DECLARATION(gEfiUartDevicePathGuid, DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL);
+GUID_VARIABLE_DECLARATION(gEfiSasDevicePathGuid, EFI_SAS_PROTOCOL_GUID);
+GUID_VARIABLE_DECLARATION(gEfiDebugPortProtocolGuid, EFI_DEBUGPORT_PROTOCOL_GUID);
+
+#pragma pack (push) //May not be alligned on a boundary.
+#pragma pack (1)
+
+//Hardware Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT8 Function;
+ UINT8 Device;
+} PCI_DEVICE_PATH;
+
+//Hardware Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT8 Function;
+} PCCARD_DEVICE_PATH;
+
+//Hardware Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ EFI_MEMORY_TYPE MemoryType;
+ EFI_PHYSICAL_ADDRESS StartingAddress;
+ EFI_PHYSICAL_ADDRESS EndingAddress;
+} MEMMAP_DEVICE_PATH;
+
+//Hardware Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ EFI_GUID Guid;
+ //Variable Length Vendor Defined Data
+} VENDOR_DEVICE_PATH;
+
+//Hardware Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 Controller;
+} CONTROLLER_DEVICE_PATH;
+
+//ACPI Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 HID;
+ UINT32 UID;
+} ACPI_HID_DEVICE_PATH;
+
+//ACPI Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 HID;
+ UINT32 UID;
+ UINT32 CID;
+ //Variable Length _HIDSTR string
+ //Variable Length _UIDSTR string
+ //Variable Length _CIDSTR string
+} ACPI_EXTENDED_HID_DEVICE_PATH;
+
+#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 Address Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 ADR;
+} ACPI_ADR_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT8 PrimarySecondary;
+ UINT8 SlaveMaster;
+ UINT16 Lun;
+} ATAPI_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT16 Pun;
+ UINT16 Lun;
+} SCSI_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 Reserved;
+ UINT64 WWN;
+ UINT64 Lun;
+} FIBRECHANNEL_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 Reserved;
+ UINT8 WWN[8];
+ UINT8 Lun[8];
+} FIBRECHANNELEX_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 Reserved;
+ UINT64 Guid; //Different than EFI_GUID.
+} F1394_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT8 ParentPortNumber;
+ UINT8 InterfaceNumber;
+} USB_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT16 VendorId;
+ UINT16 ProductId;
+ UINT8 DeviceClass;
+ UINT8 DeviceSubClass;
+ UINT8 DeviceProtocol;
+} USB_CLASS_DEVICE_PATH;
+
+//USB WWID Device Path
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT16 InterfaceNumber;
+ UINT16 VendorId;
+ UINT16 ProductId;
+} USB_WWID_DEVICE_PATH;
+
+// Device Logical Unit
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT8 Lun;
+} LOGICAL_UNIT_DEVICE_PATH;
+
+//SATA Device Path
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT16 PortNumber;
+ UINT16 MultiplierPortNumber;
+ UINT16 LogicalUnitNumber;
+} SATA_DEVICE_PATH;
+
+#define SATA_HBA_DIRECT_CONNECT_FLAG 0x8000
+
+//iSCSI Device Path Node
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT16 NetworkProtocol;
+ UINT16 LoginOption;
+ UINT64 Lun;
+ UINT16 TargetPortalGroupTag;
+ // CHAR8 iSCSI Target Name
+} iSCSI_DEVICE_PATH;
+
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT16 VlanId;
+} VLAN_DEVICE_PATH;
+
+//Serial Attached SCSI (SAS) Device Path
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ EFI_GUID Guid;
+ UINT32 Reserved;
+ UINT64 SasAddress;
+ UINT64 Lun;
+ UINT16 DeviceTopology;
+ UINT16 RelativeTargetPort;
+} SAS_DEVICE_PATH;
+
+//Serial Attached SCSI (SAS) Ex Device Path
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT8 SasAddress[8];
+ UINT8 Lun[8];
+ UINT16 DeviceTopology;
+ UINT16 RelativeTargetPort;
+} SASEX_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 Tid;
+} I20_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ EFI_MAC_ADDRESS MacAddr;
+ UINT8 IfType;
+} MAC_ADDRESS_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ EFI_IPv4_ADDRESS LocalIpAddress;
+ EFI_IPv4_ADDRESS RemoteIpAddress;
+ UINT16 LocalPort;
+ UINT16 RemotePort;
+ UINT16 Protocol;
+ BOOLEAN StaticIpAddress;
+ EFI_IPv4_ADDRESS GatewayIpAddress;
+ EFI_IPv4_ADDRESS SubnetMask;
+} IPv4_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ EFI_IPv6_ADDRESS LocalIp;
+ EFI_IPv6_ADDRESS RemoteIp;
+ UINT16 LocalPort;
+ UINT16 RemotePort;
+ UINT16 Protocol;
+ UINT8 IpAddressOrigin;
+ UINT8 PrefixLength;
+ EFI_IPv6_ADDRESS GatewayIpAddress;
+} IPv6_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 ResourceFlags;
+ UINT64 PortGid[2];
+ UINT64 ServiceId;
+ UINT64 TargetPortId;
+ UINT64 DeviceId;
+} INFINIBAND_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 Reserved;
+ UINT64 BaudRate;
+ UINT8 DataBits;
+ UINT8 Parity;
+ UINT8 StopBits;
+} UART_DEVICE_PATH;
+
+//Messaging Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ EFI_GUID Guid;
+ UINT32 FlowControlMap;
+} UART_FLOW_CONTROL_DEVICE_PATH;
+
+//Media Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 PartitionNumber;
+ UINT64 PartitionStart;
+ UINT64 PartitionSize;
+ UINT8 Signature[16];
+ UINT8 MBRType;
+ UINT8 SignatureType;
+} HARDDRIVE_DEVICE_PATH;
+
+#define MBR_TYPE_MASTER_BOOT_RECORD 0x01
+#define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
+
+#define SIGNATURE_TYPE_MBR 0x01
+#define SIGNATURE_TYPE_GUID 0x02
+
+//Media Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 BootEntry;
+ UINT64 PartitionStart;
+ UINT64 PartitionSize;
+} CDROM_DEVICE_PATH;
+
+//Media Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ CHAR16 PathName[1];
+} FILEPATH_DEVICE_PATH;
+
+//Media Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ EFI_GUID NameGuid;
+ //Variable Unicode Path String.
+} MEDIA_FW_VOL_FILEPATH_DEVICE_PATH;
+
+//Media Device Path Type
+typedef struct {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ EFI_GUID ProtocolGuid;
+} PROTOCOL_DEVICE_PATH;
+
+// Media relative offset range device path.
+typedef struct _{
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT32 Reserved;
+ UINT64 StartingOffset;
+ UINT64 EndingOffset;
+} MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH;
+
+//BIOS Boot Specification Device Path
+//Does not follow our device path naming convensions but
+//this is how it is defined in the CSM Spec
+typedef struct _BBS_BBS_DEVICE_PATH {
+ EFI_DEVICE_PATH_PROTOCOL Header;
+ UINT16 DeviceType;
+ UINT16 StatusFlag;
+ CHAR8 String[1];
+} BBS_BBS_DEVICE_PATH;
+#pragma pack (pop)
+
+
+/****** DO NOT WRITE BELOW THIS LINE *******/
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************