1*0d1ba665SWarner Losh /** @file 2*0d1ba665SWarner Losh The device path protocol as defined in UEFI 2.0. 3*0d1ba665SWarner Losh 4*0d1ba665SWarner Losh The device path represents a programmatic path to a device, 5*0d1ba665SWarner Losh from a software point of view. The path must persist from boot to boot, so 6*0d1ba665SWarner Losh it can not contain things like PCI bus numbers that change from boot to boot. 7*0d1ba665SWarner Losh 8*0d1ba665SWarner Losh Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR> 9*0d1ba665SWarner Losh This program and the accompanying materials are licensed and made available under 10*0d1ba665SWarner Losh the terms and conditions of the BSD License that accompanies this distribution. 11*0d1ba665SWarner Losh The full text of the license may be found at 12*0d1ba665SWarner Losh http://opensource.org/licenses/bsd-license.php. 13*0d1ba665SWarner Losh 14*0d1ba665SWarner Losh THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 15*0d1ba665SWarner Losh WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 16*0d1ba665SWarner Losh 17*0d1ba665SWarner Losh **/ 18*0d1ba665SWarner Losh 19*0d1ba665SWarner Losh #ifndef __EFI_DEVICE_PATH_PROTOCOL_H__ 20*0d1ba665SWarner Losh #define __EFI_DEVICE_PATH_PROTOCOL_H__ 21*0d1ba665SWarner Losh 22*0d1ba665SWarner Losh #include <Guid/PcAnsi.h> 23*0d1ba665SWarner Losh #include <IndustryStandard/Bluetooth.h> 24*0d1ba665SWarner Losh #include <IndustryStandard/Acpi60.h> 25*0d1ba665SWarner Losh 26*0d1ba665SWarner Losh /// 27*0d1ba665SWarner Losh /// Device Path protocol. 28*0d1ba665SWarner Losh /// 29*0d1ba665SWarner Losh #define EFI_DEVICE_PATH_PROTOCOL_GUID \ 30*0d1ba665SWarner Losh { \ 31*0d1ba665SWarner Losh 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ 32*0d1ba665SWarner Losh } 33*0d1ba665SWarner Losh 34*0d1ba665SWarner Losh /// 35*0d1ba665SWarner Losh /// Device Path guid definition for backward-compatible with EFI1.1. 36*0d1ba665SWarner Losh /// 37*0d1ba665SWarner Losh #define DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL_GUID 38*0d1ba665SWarner Losh 39*0d1ba665SWarner Losh #pragma pack(1) 40*0d1ba665SWarner Losh 41*0d1ba665SWarner Losh /** 42*0d1ba665SWarner Losh This protocol can be used on any device handle to obtain generic path/location 43*0d1ba665SWarner Losh information concerning the physical device or logical device. If the handle does 44*0d1ba665SWarner Losh not logically map to a physical device, the handle may not necessarily support 45*0d1ba665SWarner Losh the device path protocol. The device path describes the location of the device 46*0d1ba665SWarner Losh the handle is for. The size of the Device Path can be determined from the structures 47*0d1ba665SWarner Losh that make up the Device Path. 48*0d1ba665SWarner Losh **/ 49*0d1ba665SWarner Losh typedef struct { 50*0d1ba665SWarner Losh UINT8 Type; ///< 0x01 Hardware Device Path. 51*0d1ba665SWarner Losh ///< 0x02 ACPI Device Path. 52*0d1ba665SWarner Losh ///< 0x03 Messaging Device Path. 53*0d1ba665SWarner Losh ///< 0x04 Media Device Path. 54*0d1ba665SWarner Losh ///< 0x05 BIOS Boot Specification Device Path. 55*0d1ba665SWarner Losh ///< 0x7F End of Hardware Device Path. 56*0d1ba665SWarner Losh 57*0d1ba665SWarner Losh UINT8 SubType; ///< Varies by Type 58*0d1ba665SWarner Losh ///< 0xFF End Entire Device Path, or 59*0d1ba665SWarner Losh ///< 0x01 End This Instance of a Device Path and start a new 60*0d1ba665SWarner Losh ///< Device Path. 61*0d1ba665SWarner Losh 62*0d1ba665SWarner Losh UINT8 Length[2]; ///< Specific Device Path data. Type and Sub-Type define 63*0d1ba665SWarner Losh ///< type of data. Size of data is included in Length. 64*0d1ba665SWarner Losh 65*0d1ba665SWarner Losh } EFI_DEVICE_PATH_PROTOCOL; 66*0d1ba665SWarner Losh 67*0d1ba665SWarner Losh /// 68*0d1ba665SWarner Losh /// Device Path protocol definition for backward-compatible with EFI1.1. 69*0d1ba665SWarner Losh /// 70*0d1ba665SWarner Losh typedef EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH; 71*0d1ba665SWarner Losh 72*0d1ba665SWarner Losh /// 73*0d1ba665SWarner Losh /// Hardware Device Paths. 74*0d1ba665SWarner Losh /// 75*0d1ba665SWarner Losh #define HARDWARE_DEVICE_PATH 0x01 76*0d1ba665SWarner Losh 77*0d1ba665SWarner Losh /// 78*0d1ba665SWarner Losh /// PCI Device Path SubType. 79*0d1ba665SWarner Losh /// 80*0d1ba665SWarner Losh #define HW_PCI_DP 0x01 81*0d1ba665SWarner Losh 82*0d1ba665SWarner Losh /// 83*0d1ba665SWarner Losh /// PCI Device Path. 84*0d1ba665SWarner Losh /// 85*0d1ba665SWarner Losh typedef struct { 86*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 87*0d1ba665SWarner Losh /// 88*0d1ba665SWarner Losh /// PCI Function Number. 89*0d1ba665SWarner Losh /// 90*0d1ba665SWarner Losh UINT8 Function; 91*0d1ba665SWarner Losh /// 92*0d1ba665SWarner Losh /// PCI Device Number. 93*0d1ba665SWarner Losh /// 94*0d1ba665SWarner Losh UINT8 Device; 95*0d1ba665SWarner Losh } PCI_DEVICE_PATH; 96*0d1ba665SWarner Losh 97*0d1ba665SWarner Losh /// 98*0d1ba665SWarner Losh /// PCCARD Device Path SubType. 99*0d1ba665SWarner Losh /// 100*0d1ba665SWarner Losh #define HW_PCCARD_DP 0x02 101*0d1ba665SWarner Losh 102*0d1ba665SWarner Losh /// 103*0d1ba665SWarner Losh /// PCCARD Device Path. 104*0d1ba665SWarner Losh /// 105*0d1ba665SWarner Losh typedef struct { 106*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 107*0d1ba665SWarner Losh /// 108*0d1ba665SWarner Losh /// Function Number (0 = First Function). 109*0d1ba665SWarner Losh /// 110*0d1ba665SWarner Losh UINT8 FunctionNumber; 111*0d1ba665SWarner Losh } PCCARD_DEVICE_PATH; 112*0d1ba665SWarner Losh 113*0d1ba665SWarner Losh /// 114*0d1ba665SWarner Losh /// Memory Mapped Device Path SubType. 115*0d1ba665SWarner Losh /// 116*0d1ba665SWarner Losh #define HW_MEMMAP_DP 0x03 117*0d1ba665SWarner Losh 118*0d1ba665SWarner Losh /// 119*0d1ba665SWarner Losh /// Memory Mapped Device Path. 120*0d1ba665SWarner Losh /// 121*0d1ba665SWarner Losh typedef struct { 122*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 123*0d1ba665SWarner Losh /// 124*0d1ba665SWarner Losh /// EFI_MEMORY_TYPE 125*0d1ba665SWarner Losh /// 126*0d1ba665SWarner Losh UINT32 MemoryType; 127*0d1ba665SWarner Losh /// 128*0d1ba665SWarner Losh /// Starting Memory Address. 129*0d1ba665SWarner Losh /// 130*0d1ba665SWarner Losh EFI_PHYSICAL_ADDRESS StartingAddress; 131*0d1ba665SWarner Losh /// 132*0d1ba665SWarner Losh /// Ending Memory Address. 133*0d1ba665SWarner Losh /// 134*0d1ba665SWarner Losh EFI_PHYSICAL_ADDRESS EndingAddress; 135*0d1ba665SWarner Losh } MEMMAP_DEVICE_PATH; 136*0d1ba665SWarner Losh 137*0d1ba665SWarner Losh /// 138*0d1ba665SWarner Losh /// Hardware Vendor Device Path SubType. 139*0d1ba665SWarner Losh /// 140*0d1ba665SWarner Losh #define HW_VENDOR_DP 0x04 141*0d1ba665SWarner Losh 142*0d1ba665SWarner Losh /// 143*0d1ba665SWarner Losh /// The Vendor Device Path allows the creation of vendor-defined Device Paths. A vendor must 144*0d1ba665SWarner Losh /// allocate a Vendor GUID for a Device Path. The Vendor GUID can then be used to define the 145*0d1ba665SWarner Losh /// contents on the n bytes that follow in the Vendor Device Path node. 146*0d1ba665SWarner Losh /// 147*0d1ba665SWarner Losh typedef struct { 148*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 149*0d1ba665SWarner Losh /// 150*0d1ba665SWarner Losh /// Vendor-assigned GUID that defines the data that follows. 151*0d1ba665SWarner Losh /// 152*0d1ba665SWarner Losh EFI_GUID Guid; 153*0d1ba665SWarner Losh /// 154*0d1ba665SWarner Losh /// Vendor-defined variable size data. 155*0d1ba665SWarner Losh /// 156*0d1ba665SWarner Losh } VENDOR_DEVICE_PATH; 157*0d1ba665SWarner Losh 158*0d1ba665SWarner Losh /// 159*0d1ba665SWarner Losh /// Controller Device Path SubType. 160*0d1ba665SWarner Losh /// 161*0d1ba665SWarner Losh #define HW_CONTROLLER_DP 0x05 162*0d1ba665SWarner Losh 163*0d1ba665SWarner Losh /// 164*0d1ba665SWarner Losh /// Controller Device Path. 165*0d1ba665SWarner Losh /// 166*0d1ba665SWarner Losh typedef struct { 167*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 168*0d1ba665SWarner Losh /// 169*0d1ba665SWarner Losh /// Controller number. 170*0d1ba665SWarner Losh /// 171*0d1ba665SWarner Losh UINT32 ControllerNumber; 172*0d1ba665SWarner Losh } CONTROLLER_DEVICE_PATH; 173*0d1ba665SWarner Losh 174*0d1ba665SWarner Losh /// 175*0d1ba665SWarner Losh /// BMC Device Path SubType. 176*0d1ba665SWarner Losh /// 177*0d1ba665SWarner Losh #define HW_BMC_DP 0x06 178*0d1ba665SWarner Losh 179*0d1ba665SWarner Losh /// 180*0d1ba665SWarner Losh /// BMC Device Path. 181*0d1ba665SWarner Losh /// 182*0d1ba665SWarner Losh typedef struct { 183*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 184*0d1ba665SWarner Losh /// 185*0d1ba665SWarner Losh /// Interface Type. 186*0d1ba665SWarner Losh /// 187*0d1ba665SWarner Losh UINT8 InterfaceType; 188*0d1ba665SWarner Losh /// 189*0d1ba665SWarner Losh /// Base Address. 190*0d1ba665SWarner Losh /// 191*0d1ba665SWarner Losh UINT8 BaseAddress[8]; 192*0d1ba665SWarner Losh } BMC_DEVICE_PATH; 193*0d1ba665SWarner Losh 194*0d1ba665SWarner Losh /// 195*0d1ba665SWarner Losh /// ACPI Device Paths. 196*0d1ba665SWarner Losh /// 197*0d1ba665SWarner Losh #define ACPI_DEVICE_PATH 0x02 198*0d1ba665SWarner Losh 199*0d1ba665SWarner Losh /// 200*0d1ba665SWarner Losh /// ACPI Device Path SubType. 201*0d1ba665SWarner Losh /// 202*0d1ba665SWarner Losh #define ACPI_DP 0x01 203*0d1ba665SWarner Losh typedef struct { 204*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 205*0d1ba665SWarner Losh /// 206*0d1ba665SWarner Losh /// Device's PnP hardware ID stored in a numeric 32-bit 207*0d1ba665SWarner Losh /// compressed EISA-type ID. This value must match the 208*0d1ba665SWarner Losh /// corresponding _HID in the ACPI name space. 209*0d1ba665SWarner Losh /// 210*0d1ba665SWarner Losh UINT32 HID; 211*0d1ba665SWarner Losh /// 212*0d1ba665SWarner Losh /// Unique ID that is required by ACPI if two devices have the 213*0d1ba665SWarner Losh /// same _HID. This value must also match the corresponding 214*0d1ba665SWarner Losh /// _UID/_HID pair in the ACPI name space. Only the 32-bit 215*0d1ba665SWarner Losh /// numeric value type of _UID is supported. Thus, strings must 216*0d1ba665SWarner Losh /// not be used for the _UID in the ACPI name space. 217*0d1ba665SWarner Losh /// 218*0d1ba665SWarner Losh UINT32 UID; 219*0d1ba665SWarner Losh } ACPI_HID_DEVICE_PATH; 220*0d1ba665SWarner Losh 221*0d1ba665SWarner Losh /// 222*0d1ba665SWarner Losh /// Expanded ACPI Device Path SubType. 223*0d1ba665SWarner Losh /// 224*0d1ba665SWarner Losh #define ACPI_EXTENDED_DP 0x02 225*0d1ba665SWarner Losh typedef struct { 226*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 227*0d1ba665SWarner Losh /// 228*0d1ba665SWarner Losh /// Device's PnP hardware ID stored in a numeric 32-bit 229*0d1ba665SWarner Losh /// compressed EISA-type ID. This value must match the 230*0d1ba665SWarner Losh /// corresponding _HID in the ACPI name space. 231*0d1ba665SWarner Losh /// 232*0d1ba665SWarner Losh UINT32 HID; 233*0d1ba665SWarner Losh /// 234*0d1ba665SWarner Losh /// Unique ID that is required by ACPI if two devices have the 235*0d1ba665SWarner Losh /// same _HID. This value must also match the corresponding 236*0d1ba665SWarner Losh /// _UID/_HID pair in the ACPI name space. 237*0d1ba665SWarner Losh /// 238*0d1ba665SWarner Losh UINT32 UID; 239*0d1ba665SWarner Losh /// 240*0d1ba665SWarner Losh /// Device's compatible PnP hardware ID stored in a numeric 241*0d1ba665SWarner Losh /// 32-bit compressed EISA-type ID. This value must match at 242*0d1ba665SWarner Losh /// least one of the compatible device IDs returned by the 243*0d1ba665SWarner Losh /// corresponding _CID in the ACPI name space. 244*0d1ba665SWarner Losh /// 245*0d1ba665SWarner Losh UINT32 CID; 246*0d1ba665SWarner Losh /// 247*0d1ba665SWarner Losh /// Optional variable length _HIDSTR. 248*0d1ba665SWarner Losh /// Optional variable length _UIDSTR. 249*0d1ba665SWarner Losh /// Optional variable length _CIDSTR. 250*0d1ba665SWarner Losh /// 251*0d1ba665SWarner Losh } ACPI_EXTENDED_HID_DEVICE_PATH; 252*0d1ba665SWarner Losh 253*0d1ba665SWarner Losh // 254*0d1ba665SWarner Losh // EISA ID Macro 255*0d1ba665SWarner Losh // EISA ID Definition 32-bits 256*0d1ba665SWarner Losh // bits[15:0] - three character compressed ASCII EISA ID. 257*0d1ba665SWarner Losh // bits[31:16] - binary number 258*0d1ba665SWarner Losh // Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z' 259*0d1ba665SWarner Losh // 260*0d1ba665SWarner Losh #define PNP_EISA_ID_CONST 0x41d0 261*0d1ba665SWarner Losh #define EISA_ID(_Name, _Num) ((UINT32)((_Name) | (_Num) << 16)) 262*0d1ba665SWarner Losh #define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId))) 263*0d1ba665SWarner Losh #define EFI_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId))) 264*0d1ba665SWarner Losh 265*0d1ba665SWarner Losh #define PNP_EISA_ID_MASK 0xffff 266*0d1ba665SWarner Losh #define EISA_ID_TO_NUM(_Id) ((_Id) >> 16) 267*0d1ba665SWarner Losh 268*0d1ba665SWarner Losh /// 269*0d1ba665SWarner Losh /// ACPI _ADR Device Path SubType. 270*0d1ba665SWarner Losh /// 271*0d1ba665SWarner Losh #define ACPI_ADR_DP 0x03 272*0d1ba665SWarner Losh 273*0d1ba665SWarner Losh /// 274*0d1ba665SWarner Losh /// The _ADR device path is used to contain video output device attributes to support the Graphics 275*0d1ba665SWarner Losh /// Output Protocol. The device path can contain multiple _ADR entries if multiple video output 276*0d1ba665SWarner Losh /// devices are displaying the same output. 277*0d1ba665SWarner Losh /// 278*0d1ba665SWarner Losh typedef struct { 279*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 280*0d1ba665SWarner Losh /// 281*0d1ba665SWarner Losh /// _ADR value. For video output devices the value of this 282*0d1ba665SWarner Losh /// field comes from Table B-2 of the ACPI 3.0 specification. At 283*0d1ba665SWarner Losh /// least one _ADR value is required. 284*0d1ba665SWarner Losh /// 285*0d1ba665SWarner Losh UINT32 ADR; 286*0d1ba665SWarner Losh // 287*0d1ba665SWarner Losh // This device path may optionally contain more than one _ADR entry. 288*0d1ba665SWarner Losh // 289*0d1ba665SWarner Losh } ACPI_ADR_DEVICE_PATH; 290*0d1ba665SWarner Losh 291*0d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_OTHER 0 292*0d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_VGA 1 293*0d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_TV 2 294*0d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL 3 295*0d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL 4 296*0d1ba665SWarner Losh 297*0d1ba665SWarner Losh #define ACPI_DISPLAY_ADR(_DeviceIdScheme, _HeadId, _NonVgaOutput, _BiosCanDetect, _VendorInfo, _Type, _Port, _Index) \ 298*0d1ba665SWarner Losh ((UINT32)( ((UINT32)((_DeviceIdScheme) & 0x1) << 31) | \ 299*0d1ba665SWarner Losh (((_HeadId) & 0x7) << 18) | \ 300*0d1ba665SWarner Losh (((_NonVgaOutput) & 0x1) << 17) | \ 301*0d1ba665SWarner Losh (((_BiosCanDetect) & 0x1) << 16) | \ 302*0d1ba665SWarner Losh (((_VendorInfo) & 0xf) << 12) | \ 303*0d1ba665SWarner Losh (((_Type) & 0xf) << 8) | \ 304*0d1ba665SWarner Losh (((_Port) & 0xf) << 4) | \ 305*0d1ba665SWarner Losh ((_Index) & 0xf) )) 306*0d1ba665SWarner Losh 307*0d1ba665SWarner Losh /// 308*0d1ba665SWarner Losh /// Messaging Device Paths. 309*0d1ba665SWarner Losh /// This Device Path is used to describe the connection of devices outside the resource domain of the 310*0d1ba665SWarner Losh /// system. This Device Path can describe physical messaging information like SCSI ID, or abstract 311*0d1ba665SWarner Losh /// information like networking protocol IP addresses. 312*0d1ba665SWarner Losh /// 313*0d1ba665SWarner Losh #define MESSAGING_DEVICE_PATH 0x03 314*0d1ba665SWarner Losh 315*0d1ba665SWarner Losh /// 316*0d1ba665SWarner Losh /// ATAPI Device Path SubType 317*0d1ba665SWarner Losh /// 318*0d1ba665SWarner Losh #define MSG_ATAPI_DP 0x01 319*0d1ba665SWarner Losh typedef struct { 320*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 321*0d1ba665SWarner Losh /// 322*0d1ba665SWarner Losh /// Set to zero for primary, or one for secondary. 323*0d1ba665SWarner Losh /// 324*0d1ba665SWarner Losh UINT8 PrimarySecondary; 325*0d1ba665SWarner Losh /// 326*0d1ba665SWarner Losh /// Set to zero for master, or one for slave mode. 327*0d1ba665SWarner Losh /// 328*0d1ba665SWarner Losh UINT8 SlaveMaster; 329*0d1ba665SWarner Losh /// 330*0d1ba665SWarner Losh /// Logical Unit Number. 331*0d1ba665SWarner Losh /// 332*0d1ba665SWarner Losh UINT16 Lun; 333*0d1ba665SWarner Losh } ATAPI_DEVICE_PATH; 334*0d1ba665SWarner Losh 335*0d1ba665SWarner Losh /// 336*0d1ba665SWarner Losh /// SCSI Device Path SubType. 337*0d1ba665SWarner Losh /// 338*0d1ba665SWarner Losh #define MSG_SCSI_DP 0x02 339*0d1ba665SWarner Losh typedef struct { 340*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 341*0d1ba665SWarner Losh /// 342*0d1ba665SWarner Losh /// Target ID on the SCSI bus (PUN). 343*0d1ba665SWarner Losh /// 344*0d1ba665SWarner Losh UINT16 Pun; 345*0d1ba665SWarner Losh /// 346*0d1ba665SWarner Losh /// Logical Unit Number (LUN). 347*0d1ba665SWarner Losh /// 348*0d1ba665SWarner Losh UINT16 Lun; 349*0d1ba665SWarner Losh } SCSI_DEVICE_PATH; 350*0d1ba665SWarner Losh 351*0d1ba665SWarner Losh /// 352*0d1ba665SWarner Losh /// Fibre Channel SubType. 353*0d1ba665SWarner Losh /// 354*0d1ba665SWarner Losh #define MSG_FIBRECHANNEL_DP 0x03 355*0d1ba665SWarner Losh typedef struct { 356*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 357*0d1ba665SWarner Losh /// 358*0d1ba665SWarner Losh /// Reserved for the future. 359*0d1ba665SWarner Losh /// 360*0d1ba665SWarner Losh UINT32 Reserved; 361*0d1ba665SWarner Losh /// 362*0d1ba665SWarner Losh /// Fibre Channel World Wide Number. 363*0d1ba665SWarner Losh /// 364*0d1ba665SWarner Losh UINT64 WWN; 365*0d1ba665SWarner Losh /// 366*0d1ba665SWarner Losh /// Fibre Channel Logical Unit Number. 367*0d1ba665SWarner Losh /// 368*0d1ba665SWarner Losh UINT64 Lun; 369*0d1ba665SWarner Losh } FIBRECHANNEL_DEVICE_PATH; 370*0d1ba665SWarner Losh 371*0d1ba665SWarner Losh /// 372*0d1ba665SWarner Losh /// Fibre Channel Ex SubType. 373*0d1ba665SWarner Losh /// 374*0d1ba665SWarner Losh #define MSG_FIBRECHANNELEX_DP 0x15 375*0d1ba665SWarner Losh typedef struct { 376*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 377*0d1ba665SWarner Losh /// 378*0d1ba665SWarner Losh /// Reserved for the future. 379*0d1ba665SWarner Losh /// 380*0d1ba665SWarner Losh UINT32 Reserved; 381*0d1ba665SWarner Losh /// 382*0d1ba665SWarner Losh /// 8 byte array containing Fibre Channel End Device Port Name. 383*0d1ba665SWarner Losh /// 384*0d1ba665SWarner Losh UINT8 WWN[8]; 385*0d1ba665SWarner Losh /// 386*0d1ba665SWarner Losh /// 8 byte array containing Fibre Channel Logical Unit Number. 387*0d1ba665SWarner Losh /// 388*0d1ba665SWarner Losh UINT8 Lun[8]; 389*0d1ba665SWarner Losh } FIBRECHANNELEX_DEVICE_PATH; 390*0d1ba665SWarner Losh 391*0d1ba665SWarner Losh /// 392*0d1ba665SWarner Losh /// 1394 Device Path SubType 393*0d1ba665SWarner Losh /// 394*0d1ba665SWarner Losh #define MSG_1394_DP 0x04 395*0d1ba665SWarner Losh typedef struct { 396*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 397*0d1ba665SWarner Losh /// 398*0d1ba665SWarner Losh /// Reserved for the future. 399*0d1ba665SWarner Losh /// 400*0d1ba665SWarner Losh UINT32 Reserved; 401*0d1ba665SWarner Losh /// 402*0d1ba665SWarner Losh /// 1394 Global Unique ID (GUID). 403*0d1ba665SWarner Losh /// 404*0d1ba665SWarner Losh UINT64 Guid; 405*0d1ba665SWarner Losh } F1394_DEVICE_PATH; 406*0d1ba665SWarner Losh 407*0d1ba665SWarner Losh /// 408*0d1ba665SWarner Losh /// USB Device Path SubType. 409*0d1ba665SWarner Losh /// 410*0d1ba665SWarner Losh #define MSG_USB_DP 0x05 411*0d1ba665SWarner Losh typedef struct { 412*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 413*0d1ba665SWarner Losh /// 414*0d1ba665SWarner Losh /// USB Parent Port Number. 415*0d1ba665SWarner Losh /// 416*0d1ba665SWarner Losh UINT8 ParentPortNumber; 417*0d1ba665SWarner Losh /// 418*0d1ba665SWarner Losh /// USB Interface Number. 419*0d1ba665SWarner Losh /// 420*0d1ba665SWarner Losh UINT8 InterfaceNumber; 421*0d1ba665SWarner Losh } USB_DEVICE_PATH; 422*0d1ba665SWarner Losh 423*0d1ba665SWarner Losh /// 424*0d1ba665SWarner Losh /// USB Class Device Path SubType. 425*0d1ba665SWarner Losh /// 426*0d1ba665SWarner Losh #define MSG_USB_CLASS_DP 0x0f 427*0d1ba665SWarner Losh typedef struct { 428*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 429*0d1ba665SWarner Losh /// 430*0d1ba665SWarner Losh /// Vendor ID assigned by USB-IF. A value of 0xFFFF will 431*0d1ba665SWarner Losh /// match any Vendor ID. 432*0d1ba665SWarner Losh /// 433*0d1ba665SWarner Losh UINT16 VendorId; 434*0d1ba665SWarner Losh /// 435*0d1ba665SWarner Losh /// Product ID assigned by USB-IF. A value of 0xFFFF will 436*0d1ba665SWarner Losh /// match any Product ID. 437*0d1ba665SWarner Losh /// 438*0d1ba665SWarner Losh UINT16 ProductId; 439*0d1ba665SWarner Losh /// 440*0d1ba665SWarner Losh /// The class code assigned by the USB-IF. A value of 0xFF 441*0d1ba665SWarner Losh /// will match any class code. 442*0d1ba665SWarner Losh /// 443*0d1ba665SWarner Losh UINT8 DeviceClass; 444*0d1ba665SWarner Losh /// 445*0d1ba665SWarner Losh /// The subclass code assigned by the USB-IF. A value of 446*0d1ba665SWarner Losh /// 0xFF will match any subclass code. 447*0d1ba665SWarner Losh /// 448*0d1ba665SWarner Losh UINT8 DeviceSubClass; 449*0d1ba665SWarner Losh /// 450*0d1ba665SWarner Losh /// The protocol code assigned by the USB-IF. A value of 451*0d1ba665SWarner Losh /// 0xFF will match any protocol code. 452*0d1ba665SWarner Losh /// 453*0d1ba665SWarner Losh UINT8 DeviceProtocol; 454*0d1ba665SWarner Losh } USB_CLASS_DEVICE_PATH; 455*0d1ba665SWarner Losh 456*0d1ba665SWarner Losh /// 457*0d1ba665SWarner Losh /// USB WWID Device Path SubType. 458*0d1ba665SWarner Losh /// 459*0d1ba665SWarner Losh #define MSG_USB_WWID_DP 0x10 460*0d1ba665SWarner Losh 461*0d1ba665SWarner Losh /// 462*0d1ba665SWarner Losh /// This device path describes a USB device using its serial number. 463*0d1ba665SWarner Losh /// 464*0d1ba665SWarner Losh typedef struct { 465*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 466*0d1ba665SWarner Losh /// 467*0d1ba665SWarner Losh /// USB interface number. 468*0d1ba665SWarner Losh /// 469*0d1ba665SWarner Losh UINT16 InterfaceNumber; 470*0d1ba665SWarner Losh /// 471*0d1ba665SWarner Losh /// USB vendor id of the device. 472*0d1ba665SWarner Losh /// 473*0d1ba665SWarner Losh UINT16 VendorId; 474*0d1ba665SWarner Losh /// 475*0d1ba665SWarner Losh /// USB product id of the device. 476*0d1ba665SWarner Losh /// 477*0d1ba665SWarner Losh UINT16 ProductId; 478*0d1ba665SWarner Losh /// 479*0d1ba665SWarner Losh /// Last 64-or-fewer UTF-16 characters of the USB 480*0d1ba665SWarner Losh /// serial number. The length of the string is 481*0d1ba665SWarner Losh /// determined by the Length field less the offset of the 482*0d1ba665SWarner Losh /// Serial Number field (10) 483*0d1ba665SWarner Losh /// 484*0d1ba665SWarner Losh /// CHAR16 SerialNumber[...]; 485*0d1ba665SWarner Losh } USB_WWID_DEVICE_PATH; 486*0d1ba665SWarner Losh 487*0d1ba665SWarner Losh /// 488*0d1ba665SWarner Losh /// Device Logical Unit SubType. 489*0d1ba665SWarner Losh /// 490*0d1ba665SWarner Losh #define MSG_DEVICE_LOGICAL_UNIT_DP 0x11 491*0d1ba665SWarner Losh typedef struct { 492*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 493*0d1ba665SWarner Losh /// 494*0d1ba665SWarner Losh /// Logical Unit Number for the interface. 495*0d1ba665SWarner Losh /// 496*0d1ba665SWarner Losh UINT8 Lun; 497*0d1ba665SWarner Losh } DEVICE_LOGICAL_UNIT_DEVICE_PATH; 498*0d1ba665SWarner Losh 499*0d1ba665SWarner Losh /// 500*0d1ba665SWarner Losh /// SATA Device Path SubType. 501*0d1ba665SWarner Losh /// 502*0d1ba665SWarner Losh #define MSG_SATA_DP 0x12 503*0d1ba665SWarner Losh typedef struct { 504*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 505*0d1ba665SWarner Losh /// 506*0d1ba665SWarner Losh /// The HBA port number that facilitates the connection to the 507*0d1ba665SWarner Losh /// device or a port multiplier. The value 0xFFFF is reserved. 508*0d1ba665SWarner Losh /// 509*0d1ba665SWarner Losh UINT16 HBAPortNumber; 510*0d1ba665SWarner Losh /// 511*0d1ba665SWarner Losh /// The Port multiplier port number that facilitates the connection 512*0d1ba665SWarner Losh /// to the device. Must be set to 0xFFFF if the device is directly 513*0d1ba665SWarner Losh /// connected to the HBA. 514*0d1ba665SWarner Losh /// 515*0d1ba665SWarner Losh UINT16 PortMultiplierPortNumber; 516*0d1ba665SWarner Losh /// 517*0d1ba665SWarner Losh /// Logical Unit Number. 518*0d1ba665SWarner Losh /// 519*0d1ba665SWarner Losh UINT16 Lun; 520*0d1ba665SWarner Losh } SATA_DEVICE_PATH; 521*0d1ba665SWarner Losh 522*0d1ba665SWarner Losh /// 523*0d1ba665SWarner Losh /// Flag for if the device is directly connected to the HBA. 524*0d1ba665SWarner Losh /// 525*0d1ba665SWarner Losh #define SATA_HBA_DIRECT_CONNECT_FLAG 0x8000 526*0d1ba665SWarner Losh 527*0d1ba665SWarner Losh /// 528*0d1ba665SWarner Losh /// I2O Device Path SubType. 529*0d1ba665SWarner Losh /// 530*0d1ba665SWarner Losh #define MSG_I2O_DP 0x06 531*0d1ba665SWarner Losh typedef struct { 532*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 533*0d1ba665SWarner Losh /// 534*0d1ba665SWarner Losh /// Target ID (TID) for a device. 535*0d1ba665SWarner Losh /// 536*0d1ba665SWarner Losh UINT32 Tid; 537*0d1ba665SWarner Losh } I2O_DEVICE_PATH; 538*0d1ba665SWarner Losh 539*0d1ba665SWarner Losh /// 540*0d1ba665SWarner Losh /// MAC Address Device Path SubType. 541*0d1ba665SWarner Losh /// 542*0d1ba665SWarner Losh #define MSG_MAC_ADDR_DP 0x0b 543*0d1ba665SWarner Losh typedef struct { 544*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 545*0d1ba665SWarner Losh /// 546*0d1ba665SWarner Losh /// The MAC address for a network interface padded with 0s. 547*0d1ba665SWarner Losh /// 548*0d1ba665SWarner Losh EFI_MAC_ADDRESS MacAddress; 549*0d1ba665SWarner Losh /// 550*0d1ba665SWarner Losh /// Network interface type(i.e. 802.3, FDDI). 551*0d1ba665SWarner Losh /// 552*0d1ba665SWarner Losh UINT8 IfType; 553*0d1ba665SWarner Losh } MAC_ADDR_DEVICE_PATH; 554*0d1ba665SWarner Losh 555*0d1ba665SWarner Losh /// 556*0d1ba665SWarner Losh /// IPv4 Device Path SubType 557*0d1ba665SWarner Losh /// 558*0d1ba665SWarner Losh #define MSG_IPv4_DP 0x0c 559*0d1ba665SWarner Losh typedef struct { 560*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 561*0d1ba665SWarner Losh /// 562*0d1ba665SWarner Losh /// The local IPv4 address. 563*0d1ba665SWarner Losh /// 564*0d1ba665SWarner Losh EFI_IPv4_ADDRESS LocalIpAddress; 565*0d1ba665SWarner Losh /// 566*0d1ba665SWarner Losh /// The remote IPv4 address. 567*0d1ba665SWarner Losh /// 568*0d1ba665SWarner Losh EFI_IPv4_ADDRESS RemoteIpAddress; 569*0d1ba665SWarner Losh /// 570*0d1ba665SWarner Losh /// The local port number. 571*0d1ba665SWarner Losh /// 572*0d1ba665SWarner Losh UINT16 LocalPort; 573*0d1ba665SWarner Losh /// 574*0d1ba665SWarner Losh /// The remote port number. 575*0d1ba665SWarner Losh /// 576*0d1ba665SWarner Losh UINT16 RemotePort; 577*0d1ba665SWarner Losh /// 578*0d1ba665SWarner Losh /// The network protocol(i.e. UDP, TCP). 579*0d1ba665SWarner Losh /// 580*0d1ba665SWarner Losh UINT16 Protocol; 581*0d1ba665SWarner Losh /// 582*0d1ba665SWarner Losh /// 0x00 - The Source IP Address was assigned though DHCP. 583*0d1ba665SWarner Losh /// 0x01 - The Source IP Address is statically bound. 584*0d1ba665SWarner Losh /// 585*0d1ba665SWarner Losh BOOLEAN StaticIpAddress; 586*0d1ba665SWarner Losh /// 587*0d1ba665SWarner Losh /// The gateway IP address 588*0d1ba665SWarner Losh /// 589*0d1ba665SWarner Losh EFI_IPv4_ADDRESS GatewayIpAddress; 590*0d1ba665SWarner Losh /// 591*0d1ba665SWarner Losh /// The subnet mask 592*0d1ba665SWarner Losh /// 593*0d1ba665SWarner Losh EFI_IPv4_ADDRESS SubnetMask; 594*0d1ba665SWarner Losh } IPv4_DEVICE_PATH; 595*0d1ba665SWarner Losh 596*0d1ba665SWarner Losh /// 597*0d1ba665SWarner Losh /// IPv6 Device Path SubType. 598*0d1ba665SWarner Losh /// 599*0d1ba665SWarner Losh #define MSG_IPv6_DP 0x0d 600*0d1ba665SWarner Losh typedef struct { 601*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 602*0d1ba665SWarner Losh /// 603*0d1ba665SWarner Losh /// The local IPv6 address. 604*0d1ba665SWarner Losh /// 605*0d1ba665SWarner Losh EFI_IPv6_ADDRESS LocalIpAddress; 606*0d1ba665SWarner Losh /// 607*0d1ba665SWarner Losh /// The remote IPv6 address. 608*0d1ba665SWarner Losh /// 609*0d1ba665SWarner Losh EFI_IPv6_ADDRESS RemoteIpAddress; 610*0d1ba665SWarner Losh /// 611*0d1ba665SWarner Losh /// The local port number. 612*0d1ba665SWarner Losh /// 613*0d1ba665SWarner Losh UINT16 LocalPort; 614*0d1ba665SWarner Losh /// 615*0d1ba665SWarner Losh /// The remote port number. 616*0d1ba665SWarner Losh /// 617*0d1ba665SWarner Losh UINT16 RemotePort; 618*0d1ba665SWarner Losh /// 619*0d1ba665SWarner Losh /// The network protocol(i.e. UDP, TCP). 620*0d1ba665SWarner Losh /// 621*0d1ba665SWarner Losh UINT16 Protocol; 622*0d1ba665SWarner Losh /// 623*0d1ba665SWarner Losh /// 0x00 - The Local IP Address was manually configured. 624*0d1ba665SWarner Losh /// 0x01 - The Local IP Address is assigned through IPv6 625*0d1ba665SWarner Losh /// stateless auto-configuration. 626*0d1ba665SWarner Losh /// 0x02 - The Local IP Address is assigned through IPv6 627*0d1ba665SWarner Losh /// stateful configuration. 628*0d1ba665SWarner Losh /// 629*0d1ba665SWarner Losh UINT8 IpAddressOrigin; 630*0d1ba665SWarner Losh /// 631*0d1ba665SWarner Losh /// The prefix length 632*0d1ba665SWarner Losh /// 633*0d1ba665SWarner Losh UINT8 PrefixLength; 634*0d1ba665SWarner Losh /// 635*0d1ba665SWarner Losh /// The gateway IP address 636*0d1ba665SWarner Losh /// 637*0d1ba665SWarner Losh EFI_IPv6_ADDRESS GatewayIpAddress; 638*0d1ba665SWarner Losh } IPv6_DEVICE_PATH; 639*0d1ba665SWarner Losh 640*0d1ba665SWarner Losh /// 641*0d1ba665SWarner Losh /// InfiniBand Device Path SubType. 642*0d1ba665SWarner Losh /// 643*0d1ba665SWarner Losh #define MSG_INFINIBAND_DP 0x09 644*0d1ba665SWarner Losh typedef struct { 645*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 646*0d1ba665SWarner Losh /// 647*0d1ba665SWarner Losh /// Flags to help identify/manage InfiniBand device path elements: 648*0d1ba665SWarner Losh /// Bit 0 - IOC/Service (0b = IOC, 1b = Service). 649*0d1ba665SWarner Losh /// Bit 1 - Extend Boot Environment. 650*0d1ba665SWarner Losh /// Bit 2 - Console Protocol. 651*0d1ba665SWarner Losh /// Bit 3 - Storage Protocol. 652*0d1ba665SWarner Losh /// Bit 4 - Network Protocol. 653*0d1ba665SWarner Losh /// All other bits are reserved. 654*0d1ba665SWarner Losh /// 655*0d1ba665SWarner Losh UINT32 ResourceFlags; 656*0d1ba665SWarner Losh /// 657*0d1ba665SWarner Losh /// 128-bit Global Identifier for remote fabric port. 658*0d1ba665SWarner Losh /// 659*0d1ba665SWarner Losh UINT8 PortGid[16]; 660*0d1ba665SWarner Losh /// 661*0d1ba665SWarner Losh /// 64-bit unique identifier to remote IOC or server process. 662*0d1ba665SWarner Losh /// Interpretation of field specified by Resource Flags (bit 0). 663*0d1ba665SWarner Losh /// 664*0d1ba665SWarner Losh UINT64 ServiceId; 665*0d1ba665SWarner Losh /// 666*0d1ba665SWarner Losh /// 64-bit persistent ID of remote IOC port. 667*0d1ba665SWarner Losh /// 668*0d1ba665SWarner Losh UINT64 TargetPortId; 669*0d1ba665SWarner Losh /// 670*0d1ba665SWarner Losh /// 64-bit persistent ID of remote device. 671*0d1ba665SWarner Losh /// 672*0d1ba665SWarner Losh UINT64 DeviceId; 673*0d1ba665SWarner Losh } INFINIBAND_DEVICE_PATH; 674*0d1ba665SWarner Losh 675*0d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_IOC_SERVICE 0x01 676*0d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_EXTENDED_BOOT_ENVIRONMENT 0x02 677*0d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_CONSOLE_PROTOCOL 0x04 678*0d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_STORAGE_PROTOCOL 0x08 679*0d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_NETWORK_PROTOCOL 0x10 680*0d1ba665SWarner Losh 681*0d1ba665SWarner Losh /// 682*0d1ba665SWarner Losh /// UART Device Path SubType. 683*0d1ba665SWarner Losh /// 684*0d1ba665SWarner Losh #define MSG_UART_DP 0x0e 685*0d1ba665SWarner Losh typedef struct { 686*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 687*0d1ba665SWarner Losh /// 688*0d1ba665SWarner Losh /// Reserved. 689*0d1ba665SWarner Losh /// 690*0d1ba665SWarner Losh UINT32 Reserved; 691*0d1ba665SWarner Losh /// 692*0d1ba665SWarner Losh /// The baud rate setting for the UART style device. A value of 0 693*0d1ba665SWarner Losh /// means that the device's default baud rate will be used. 694*0d1ba665SWarner Losh /// 695*0d1ba665SWarner Losh UINT64 BaudRate; 696*0d1ba665SWarner Losh /// 697*0d1ba665SWarner Losh /// The number of data bits for the UART style device. A value 698*0d1ba665SWarner Losh /// of 0 means that the device's default number of data bits will be used. 699*0d1ba665SWarner Losh /// 700*0d1ba665SWarner Losh UINT8 DataBits; 701*0d1ba665SWarner Losh /// 702*0d1ba665SWarner Losh /// The parity setting for the UART style device. 703*0d1ba665SWarner Losh /// Parity 0x00 - Default Parity. 704*0d1ba665SWarner Losh /// Parity 0x01 - No Parity. 705*0d1ba665SWarner Losh /// Parity 0x02 - Even Parity. 706*0d1ba665SWarner Losh /// Parity 0x03 - Odd Parity. 707*0d1ba665SWarner Losh /// Parity 0x04 - Mark Parity. 708*0d1ba665SWarner Losh /// Parity 0x05 - Space Parity. 709*0d1ba665SWarner Losh /// 710*0d1ba665SWarner Losh UINT8 Parity; 711*0d1ba665SWarner Losh /// 712*0d1ba665SWarner Losh /// The number of stop bits for the UART style device. 713*0d1ba665SWarner Losh /// Stop Bits 0x00 - Default Stop Bits. 714*0d1ba665SWarner Losh /// Stop Bits 0x01 - 1 Stop Bit. 715*0d1ba665SWarner Losh /// Stop Bits 0x02 - 1.5 Stop Bits. 716*0d1ba665SWarner Losh /// Stop Bits 0x03 - 2 Stop Bits. 717*0d1ba665SWarner Losh /// 718*0d1ba665SWarner Losh UINT8 StopBits; 719*0d1ba665SWarner Losh } UART_DEVICE_PATH; 720*0d1ba665SWarner Losh 721*0d1ba665SWarner Losh // 722*0d1ba665SWarner Losh // Use VENDOR_DEVICE_PATH struct 723*0d1ba665SWarner Losh // 724*0d1ba665SWarner Losh #define MSG_VENDOR_DP 0x0a 725*0d1ba665SWarner Losh typedef VENDOR_DEVICE_PATH VENDOR_DEFINED_DEVICE_PATH; 726*0d1ba665SWarner Losh 727*0d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_PC_ANSI EFI_PC_ANSI_GUID 728*0d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_100 EFI_VT_100_GUID 729*0d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID 730*0d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_UTF8 EFI_VT_UTF8_GUID 731*0d1ba665SWarner Losh 732*0d1ba665SWarner Losh /// 733*0d1ba665SWarner Losh /// A new device path node is defined to declare flow control characteristics. 734*0d1ba665SWarner Losh /// UART Flow Control Messaging Device Path 735*0d1ba665SWarner Losh /// 736*0d1ba665SWarner Losh typedef struct { 737*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 738*0d1ba665SWarner Losh /// 739*0d1ba665SWarner Losh /// DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL GUID. 740*0d1ba665SWarner Losh /// 741*0d1ba665SWarner Losh EFI_GUID Guid; 742*0d1ba665SWarner Losh /// 743*0d1ba665SWarner Losh /// Bitmap of supported flow control types. 744*0d1ba665SWarner Losh /// Bit 0 set indicates hardware flow control. 745*0d1ba665SWarner Losh /// Bit 1 set indicates Xon/Xoff flow control. 746*0d1ba665SWarner Losh /// All other bits are reserved and are clear. 747*0d1ba665SWarner Losh /// 748*0d1ba665SWarner Losh UINT32 FlowControlMap; 749*0d1ba665SWarner Losh } UART_FLOW_CONTROL_DEVICE_PATH; 750*0d1ba665SWarner Losh 751*0d1ba665SWarner Losh #define UART_FLOW_CONTROL_HARDWARE 0x00000001 752*0d1ba665SWarner Losh #define UART_FLOW_CONTROL_XON_XOFF 0x00000010 753*0d1ba665SWarner Losh 754*0d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_SAS EFI_SAS_DEVICE_PATH_GUID 755*0d1ba665SWarner Losh /// 756*0d1ba665SWarner Losh /// Serial Attached SCSI (SAS) Device Path. 757*0d1ba665SWarner Losh /// 758*0d1ba665SWarner Losh typedef struct { 759*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 760*0d1ba665SWarner Losh /// 761*0d1ba665SWarner Losh /// DEVICE_PATH_MESSAGING_SAS GUID. 762*0d1ba665SWarner Losh /// 763*0d1ba665SWarner Losh EFI_GUID Guid; 764*0d1ba665SWarner Losh /// 765*0d1ba665SWarner Losh /// Reserved for future use. 766*0d1ba665SWarner Losh /// 767*0d1ba665SWarner Losh UINT32 Reserved; 768*0d1ba665SWarner Losh /// 769*0d1ba665SWarner Losh /// SAS Address for Serial Attached SCSI Target. 770*0d1ba665SWarner Losh /// 771*0d1ba665SWarner Losh UINT64 SasAddress; 772*0d1ba665SWarner Losh /// 773*0d1ba665SWarner Losh /// SAS Logical Unit Number. 774*0d1ba665SWarner Losh /// 775*0d1ba665SWarner Losh UINT64 Lun; 776*0d1ba665SWarner Losh /// 777*0d1ba665SWarner Losh /// More Information about the device and its interconnect. 778*0d1ba665SWarner Losh /// 779*0d1ba665SWarner Losh UINT16 DeviceTopology; 780*0d1ba665SWarner Losh /// 781*0d1ba665SWarner Losh /// Relative Target Port (RTP). 782*0d1ba665SWarner Losh /// 783*0d1ba665SWarner Losh UINT16 RelativeTargetPort; 784*0d1ba665SWarner Losh } SAS_DEVICE_PATH; 785*0d1ba665SWarner Losh 786*0d1ba665SWarner Losh /// 787*0d1ba665SWarner Losh /// Serial Attached SCSI (SAS) Ex Device Path SubType 788*0d1ba665SWarner Losh /// 789*0d1ba665SWarner Losh #define MSG_SASEX_DP 0x16 790*0d1ba665SWarner Losh typedef struct { 791*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 792*0d1ba665SWarner Losh /// 793*0d1ba665SWarner Losh /// 8-byte array of the SAS Address for Serial Attached SCSI Target Port. 794*0d1ba665SWarner Losh /// 795*0d1ba665SWarner Losh UINT8 SasAddress[8]; 796*0d1ba665SWarner Losh /// 797*0d1ba665SWarner Losh /// 8-byte array of the SAS Logical Unit Number. 798*0d1ba665SWarner Losh /// 799*0d1ba665SWarner Losh UINT8 Lun[8]; 800*0d1ba665SWarner Losh /// 801*0d1ba665SWarner Losh /// More Information about the device and its interconnect. 802*0d1ba665SWarner Losh /// 803*0d1ba665SWarner Losh UINT16 DeviceTopology; 804*0d1ba665SWarner Losh /// 805*0d1ba665SWarner Losh /// Relative Target Port (RTP). 806*0d1ba665SWarner Losh /// 807*0d1ba665SWarner Losh UINT16 RelativeTargetPort; 808*0d1ba665SWarner Losh } SASEX_DEVICE_PATH; 809*0d1ba665SWarner Losh 810*0d1ba665SWarner Losh /// 811*0d1ba665SWarner Losh /// NvmExpress Namespace Device Path SubType. 812*0d1ba665SWarner Losh /// 813*0d1ba665SWarner Losh #define MSG_NVME_NAMESPACE_DP 0x17 814*0d1ba665SWarner Losh typedef struct { 815*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 816*0d1ba665SWarner Losh UINT32 NamespaceId; 817*0d1ba665SWarner Losh UINT64 NamespaceUuid; 818*0d1ba665SWarner Losh } NVME_NAMESPACE_DEVICE_PATH; 819*0d1ba665SWarner Losh 820*0d1ba665SWarner Losh /// 821*0d1ba665SWarner Losh /// Uniform Resource Identifiers (URI) Device Path SubType 822*0d1ba665SWarner Losh /// 823*0d1ba665SWarner Losh #define MSG_URI_DP 0x18 824*0d1ba665SWarner Losh typedef struct { 825*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 826*0d1ba665SWarner Losh /// 827*0d1ba665SWarner Losh /// Instance of the URI pursuant to RFC 3986. 828*0d1ba665SWarner Losh /// 829*0d1ba665SWarner Losh CHAR8 Uri[]; 830*0d1ba665SWarner Losh } URI_DEVICE_PATH; 831*0d1ba665SWarner Losh 832*0d1ba665SWarner Losh /// 833*0d1ba665SWarner Losh /// Universal Flash Storage (UFS) Device Path SubType. 834*0d1ba665SWarner Losh /// 835*0d1ba665SWarner Losh #define MSG_UFS_DP 0x19 836*0d1ba665SWarner Losh typedef struct { 837*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 838*0d1ba665SWarner Losh /// 839*0d1ba665SWarner Losh /// Target ID on the UFS bus (PUN). 840*0d1ba665SWarner Losh /// 841*0d1ba665SWarner Losh UINT8 Pun; 842*0d1ba665SWarner Losh /// 843*0d1ba665SWarner Losh /// Logical Unit Number (LUN). 844*0d1ba665SWarner Losh /// 845*0d1ba665SWarner Losh UINT8 Lun; 846*0d1ba665SWarner Losh } UFS_DEVICE_PATH; 847*0d1ba665SWarner Losh 848*0d1ba665SWarner Losh /// 849*0d1ba665SWarner Losh /// SD (Secure Digital) Device Path SubType. 850*0d1ba665SWarner Losh /// 851*0d1ba665SWarner Losh #define MSG_SD_DP 0x1A 852*0d1ba665SWarner Losh typedef struct { 853*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 854*0d1ba665SWarner Losh UINT8 SlotNumber; 855*0d1ba665SWarner Losh } SD_DEVICE_PATH; 856*0d1ba665SWarner Losh 857*0d1ba665SWarner Losh /// 858*0d1ba665SWarner Losh /// EMMC (Embedded MMC) Device Path SubType. 859*0d1ba665SWarner Losh /// 860*0d1ba665SWarner Losh #define MSG_EMMC_DP 0x1D 861*0d1ba665SWarner Losh typedef struct { 862*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 863*0d1ba665SWarner Losh UINT8 SlotNumber; 864*0d1ba665SWarner Losh } EMMC_DEVICE_PATH; 865*0d1ba665SWarner Losh 866*0d1ba665SWarner Losh /// 867*0d1ba665SWarner Losh /// iSCSI Device Path SubType 868*0d1ba665SWarner Losh /// 869*0d1ba665SWarner Losh #define MSG_ISCSI_DP 0x13 870*0d1ba665SWarner Losh typedef struct { 871*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 872*0d1ba665SWarner Losh /// 873*0d1ba665SWarner Losh /// Network Protocol (0 = TCP, 1+ = reserved). 874*0d1ba665SWarner Losh /// 875*0d1ba665SWarner Losh UINT16 NetworkProtocol; 876*0d1ba665SWarner Losh /// 877*0d1ba665SWarner Losh /// iSCSI Login Options. 878*0d1ba665SWarner Losh /// 879*0d1ba665SWarner Losh UINT16 LoginOption; 880*0d1ba665SWarner Losh /// 881*0d1ba665SWarner Losh /// iSCSI Logical Unit Number. 882*0d1ba665SWarner Losh /// 883*0d1ba665SWarner Losh UINT64 Lun; 884*0d1ba665SWarner Losh /// 885*0d1ba665SWarner Losh /// iSCSI Target Portal group tag the initiator intends 886*0d1ba665SWarner Losh /// to establish a session with. 887*0d1ba665SWarner Losh /// 888*0d1ba665SWarner Losh UINT16 TargetPortalGroupTag; 889*0d1ba665SWarner Losh /// 890*0d1ba665SWarner Losh /// iSCSI NodeTarget Name. The length of the name 891*0d1ba665SWarner Losh /// is determined by subtracting the offset of this field from Length. 892*0d1ba665SWarner Losh /// 893*0d1ba665SWarner Losh /// CHAR8 iSCSI Target Name. 894*0d1ba665SWarner Losh } ISCSI_DEVICE_PATH; 895*0d1ba665SWarner Losh 896*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_NO_HEADER_DIGEST 0x0000 897*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_HEADER_DIGEST_USING_CRC32C 0x0002 898*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_NO_DATA_DIGEST 0x0000 899*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_DATA_DIGEST_USING_CRC32C 0x0008 900*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_AUTHMETHOD_CHAP 0x0000 901*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_AUTHMETHOD_NON 0x1000 902*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_CHAP_BI 0x0000 903*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_CHAP_UNI 0x2000 904*0d1ba665SWarner Losh 905*0d1ba665SWarner Losh /// 906*0d1ba665SWarner Losh /// VLAN Device Path SubType. 907*0d1ba665SWarner Losh /// 908*0d1ba665SWarner Losh #define MSG_VLAN_DP 0x14 909*0d1ba665SWarner Losh typedef struct { 910*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 911*0d1ba665SWarner Losh /// 912*0d1ba665SWarner Losh /// VLAN identifier (0-4094). 913*0d1ba665SWarner Losh /// 914*0d1ba665SWarner Losh UINT16 VlanId; 915*0d1ba665SWarner Losh } VLAN_DEVICE_PATH; 916*0d1ba665SWarner Losh 917*0d1ba665SWarner Losh /// 918*0d1ba665SWarner Losh /// Bluetooth Device Path SubType. 919*0d1ba665SWarner Losh /// 920*0d1ba665SWarner Losh #define MSG_BLUETOOTH_DP 0x1b 921*0d1ba665SWarner Losh typedef struct { 922*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 923*0d1ba665SWarner Losh /// 924*0d1ba665SWarner Losh /// 48bit Bluetooth device address. 925*0d1ba665SWarner Losh /// 926*0d1ba665SWarner Losh BLUETOOTH_ADDRESS BD_ADDR; 927*0d1ba665SWarner Losh } BLUETOOTH_DEVICE_PATH; 928*0d1ba665SWarner Losh 929*0d1ba665SWarner Losh /// 930*0d1ba665SWarner Losh /// Wi-Fi Device Path SubType. 931*0d1ba665SWarner Losh /// 932*0d1ba665SWarner Losh #define MSG_WIFI_DP 0x1C 933*0d1ba665SWarner Losh typedef struct { 934*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 935*0d1ba665SWarner Losh /// 936*0d1ba665SWarner Losh /// Service set identifier. A 32-byte octets string. 937*0d1ba665SWarner Losh /// 938*0d1ba665SWarner Losh UINT8 SSId[32]; 939*0d1ba665SWarner Losh } WIFI_DEVICE_PATH; 940*0d1ba665SWarner Losh 941*0d1ba665SWarner Losh // 942*0d1ba665SWarner Losh // Media Device Path 943*0d1ba665SWarner Losh // 944*0d1ba665SWarner Losh #define MEDIA_DEVICE_PATH 0x04 945*0d1ba665SWarner Losh 946*0d1ba665SWarner Losh /// 947*0d1ba665SWarner Losh /// Hard Drive Media Device Path SubType. 948*0d1ba665SWarner Losh /// 949*0d1ba665SWarner Losh #define MEDIA_HARDDRIVE_DP 0x01 950*0d1ba665SWarner Losh 951*0d1ba665SWarner Losh /// 952*0d1ba665SWarner Losh /// The Hard Drive Media Device Path is used to represent a partition on a hard drive. 953*0d1ba665SWarner Losh /// 954*0d1ba665SWarner Losh typedef struct { 955*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 956*0d1ba665SWarner Losh /// 957*0d1ba665SWarner Losh /// Describes the entry in a partition table, starting with entry 1. 958*0d1ba665SWarner Losh /// Partition number zero represents the entire device. Valid 959*0d1ba665SWarner Losh /// partition numbers for a MBR partition are [1, 4]. Valid 960*0d1ba665SWarner Losh /// partition numbers for a GPT partition are [1, NumberOfPartitionEntries]. 961*0d1ba665SWarner Losh /// 962*0d1ba665SWarner Losh UINT32 PartitionNumber; 963*0d1ba665SWarner Losh /// 964*0d1ba665SWarner Losh /// Starting LBA of the partition on the hard drive. 965*0d1ba665SWarner Losh /// 966*0d1ba665SWarner Losh UINT64 PartitionStart; 967*0d1ba665SWarner Losh /// 968*0d1ba665SWarner Losh /// Size of the partition in units of Logical Blocks. 969*0d1ba665SWarner Losh /// 970*0d1ba665SWarner Losh UINT64 PartitionSize; 971*0d1ba665SWarner Losh /// 972*0d1ba665SWarner Losh /// Signature unique to this partition: 973*0d1ba665SWarner Losh /// If SignatureType is 0, this field has to be initialized with 16 zeros. 974*0d1ba665SWarner Losh /// If SignatureType is 1, the MBR signature is stored in the first 4 bytes of this field. 975*0d1ba665SWarner Losh /// The other 12 bytes are initialized with zeros. 976*0d1ba665SWarner Losh /// If SignatureType is 2, this field contains a 16 byte signature. 977*0d1ba665SWarner Losh /// 978*0d1ba665SWarner Losh UINT8 Signature[16]; 979*0d1ba665SWarner Losh /// 980*0d1ba665SWarner Losh /// Partition Format: (Unused values reserved). 981*0d1ba665SWarner Losh /// 0x01 - PC-AT compatible legacy MBR. 982*0d1ba665SWarner Losh /// 0x02 - GUID Partition Table. 983*0d1ba665SWarner Losh /// 984*0d1ba665SWarner Losh UINT8 MBRType; 985*0d1ba665SWarner Losh /// 986*0d1ba665SWarner Losh /// Type of Disk Signature: (Unused values reserved). 987*0d1ba665SWarner Losh /// 0x00 - No Disk Signature. 988*0d1ba665SWarner Losh /// 0x01 - 32-bit signature from address 0x1b8 of the type 0x01 MBR. 989*0d1ba665SWarner Losh /// 0x02 - GUID signature. 990*0d1ba665SWarner Losh /// 991*0d1ba665SWarner Losh UINT8 SignatureType; 992*0d1ba665SWarner Losh } HARDDRIVE_DEVICE_PATH; 993*0d1ba665SWarner Losh 994*0d1ba665SWarner Losh #define MBR_TYPE_PCAT 0x01 995*0d1ba665SWarner Losh #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02 996*0d1ba665SWarner Losh 997*0d1ba665SWarner Losh #define NO_DISK_SIGNATURE 0x00 998*0d1ba665SWarner Losh #define SIGNATURE_TYPE_MBR 0x01 999*0d1ba665SWarner Losh #define SIGNATURE_TYPE_GUID 0x02 1000*0d1ba665SWarner Losh 1001*0d1ba665SWarner Losh /// 1002*0d1ba665SWarner Losh /// CD-ROM Media Device Path SubType. 1003*0d1ba665SWarner Losh /// 1004*0d1ba665SWarner Losh #define MEDIA_CDROM_DP 0x02 1005*0d1ba665SWarner Losh 1006*0d1ba665SWarner Losh /// 1007*0d1ba665SWarner Losh /// The CD-ROM Media Device Path is used to define a system partition that exists on a CD-ROM. 1008*0d1ba665SWarner Losh /// 1009*0d1ba665SWarner Losh typedef struct { 1010*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1011*0d1ba665SWarner Losh /// 1012*0d1ba665SWarner Losh /// Boot Entry number from the Boot Catalog. The Initial/Default entry is defined as zero. 1013*0d1ba665SWarner Losh /// 1014*0d1ba665SWarner Losh UINT32 BootEntry; 1015*0d1ba665SWarner Losh /// 1016*0d1ba665SWarner Losh /// Starting RBA of the partition on the medium. CD-ROMs use Relative logical Block Addressing. 1017*0d1ba665SWarner Losh /// 1018*0d1ba665SWarner Losh UINT64 PartitionStart; 1019*0d1ba665SWarner Losh /// 1020*0d1ba665SWarner Losh /// Size of the partition in units of Blocks, also called Sectors. 1021*0d1ba665SWarner Losh /// 1022*0d1ba665SWarner Losh UINT64 PartitionSize; 1023*0d1ba665SWarner Losh } CDROM_DEVICE_PATH; 1024*0d1ba665SWarner Losh 1025*0d1ba665SWarner Losh // 1026*0d1ba665SWarner Losh // Use VENDOR_DEVICE_PATH struct 1027*0d1ba665SWarner Losh // 1028*0d1ba665SWarner Losh #define MEDIA_VENDOR_DP 0x03 ///< Media vendor device path subtype. 1029*0d1ba665SWarner Losh 1030*0d1ba665SWarner Losh /// 1031*0d1ba665SWarner Losh /// File Path Media Device Path SubType 1032*0d1ba665SWarner Losh /// 1033*0d1ba665SWarner Losh #define MEDIA_FILEPATH_DP 0x04 1034*0d1ba665SWarner Losh typedef struct { 1035*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1036*0d1ba665SWarner Losh /// 1037*0d1ba665SWarner Losh /// A NULL-terminated Path string including directory and file names. 1038*0d1ba665SWarner Losh /// 1039*0d1ba665SWarner Losh CHAR16 PathName[1]; 1040*0d1ba665SWarner Losh } FILEPATH_DEVICE_PATH; 1041*0d1ba665SWarner Losh 1042*0d1ba665SWarner Losh #define SIZE_OF_FILEPATH_DEVICE_PATH OFFSET_OF(FILEPATH_DEVICE_PATH,PathName) 1043*0d1ba665SWarner Losh 1044*0d1ba665SWarner Losh /// 1045*0d1ba665SWarner Losh /// Media Protocol Device Path SubType. 1046*0d1ba665SWarner Losh /// 1047*0d1ba665SWarner Losh #define MEDIA_PROTOCOL_DP 0x05 1048*0d1ba665SWarner Losh 1049*0d1ba665SWarner Losh /// 1050*0d1ba665SWarner Losh /// The Media Protocol Device Path is used to denote the protocol that is being 1051*0d1ba665SWarner Losh /// used in a device path at the location of the path specified. 1052*0d1ba665SWarner Losh /// Many protocols are inherent to the style of device path. 1053*0d1ba665SWarner Losh /// 1054*0d1ba665SWarner Losh typedef struct { 1055*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1056*0d1ba665SWarner Losh /// 1057*0d1ba665SWarner Losh /// The ID of the protocol. 1058*0d1ba665SWarner Losh /// 1059*0d1ba665SWarner Losh EFI_GUID Protocol; 1060*0d1ba665SWarner Losh } MEDIA_PROTOCOL_DEVICE_PATH; 1061*0d1ba665SWarner Losh 1062*0d1ba665SWarner Losh /// 1063*0d1ba665SWarner Losh /// PIWG Firmware File SubType. 1064*0d1ba665SWarner Losh /// 1065*0d1ba665SWarner Losh #define MEDIA_PIWG_FW_FILE_DP 0x06 1066*0d1ba665SWarner Losh 1067*0d1ba665SWarner Losh /// 1068*0d1ba665SWarner Losh /// This device path is used by systems implementing the UEFI PI Specification 1.0 to describe a firmware file. 1069*0d1ba665SWarner Losh /// 1070*0d1ba665SWarner Losh typedef struct { 1071*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1072*0d1ba665SWarner Losh /// 1073*0d1ba665SWarner Losh /// Firmware file name 1074*0d1ba665SWarner Losh /// 1075*0d1ba665SWarner Losh EFI_GUID FvFileName; 1076*0d1ba665SWarner Losh } MEDIA_FW_VOL_FILEPATH_DEVICE_PATH; 1077*0d1ba665SWarner Losh 1078*0d1ba665SWarner Losh /// 1079*0d1ba665SWarner Losh /// PIWG Firmware Volume Device Path SubType. 1080*0d1ba665SWarner Losh /// 1081*0d1ba665SWarner Losh #define MEDIA_PIWG_FW_VOL_DP 0x07 1082*0d1ba665SWarner Losh 1083*0d1ba665SWarner Losh /// 1084*0d1ba665SWarner Losh /// This device path is used by systems implementing the UEFI PI Specification 1.0 to describe a firmware volume. 1085*0d1ba665SWarner Losh /// 1086*0d1ba665SWarner Losh typedef struct { 1087*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1088*0d1ba665SWarner Losh /// 1089*0d1ba665SWarner Losh /// Firmware volume name. 1090*0d1ba665SWarner Losh /// 1091*0d1ba665SWarner Losh EFI_GUID FvName; 1092*0d1ba665SWarner Losh } MEDIA_FW_VOL_DEVICE_PATH; 1093*0d1ba665SWarner Losh 1094*0d1ba665SWarner Losh /// 1095*0d1ba665SWarner Losh /// Media relative offset range device path. 1096*0d1ba665SWarner Losh /// 1097*0d1ba665SWarner Losh #define MEDIA_RELATIVE_OFFSET_RANGE_DP 0x08 1098*0d1ba665SWarner Losh 1099*0d1ba665SWarner Losh /// 1100*0d1ba665SWarner Losh /// Used to describe the offset range of media relative. 1101*0d1ba665SWarner Losh /// 1102*0d1ba665SWarner Losh typedef struct { 1103*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1104*0d1ba665SWarner Losh UINT32 Reserved; 1105*0d1ba665SWarner Losh UINT64 StartingOffset; 1106*0d1ba665SWarner Losh UINT64 EndingOffset; 1107*0d1ba665SWarner Losh } MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH; 1108*0d1ba665SWarner Losh 1109*0d1ba665SWarner Losh /// 1110*0d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting a raw disk format in volatile memory. 1111*0d1ba665SWarner Losh /// 1112*0d1ba665SWarner Losh #define EFI_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE 1113*0d1ba665SWarner Losh 1114*0d1ba665SWarner Losh extern EFI_GUID gEfiVirtualDiskGuid; 1115*0d1ba665SWarner Losh 1116*0d1ba665SWarner Losh /// 1117*0d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting an ISO image in volatile memory. 1118*0d1ba665SWarner Losh /// 1119*0d1ba665SWarner Losh #define EFI_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE 1120*0d1ba665SWarner Losh 1121*0d1ba665SWarner Losh extern EFI_GUID gEfiVirtualCdGuid; 1122*0d1ba665SWarner Losh 1123*0d1ba665SWarner Losh /// 1124*0d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting a raw disk format in persistent memory. 1125*0d1ba665SWarner Losh /// 1126*0d1ba665SWarner Losh #define EFI_PERSISTENT_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT 1127*0d1ba665SWarner Losh 1128*0d1ba665SWarner Losh extern EFI_GUID gEfiPersistentVirtualDiskGuid; 1129*0d1ba665SWarner Losh 1130*0d1ba665SWarner Losh /// 1131*0d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting an ISO image in persistent memory. 1132*0d1ba665SWarner Losh /// 1133*0d1ba665SWarner Losh #define EFI_PERSISTENT_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT 1134*0d1ba665SWarner Losh 1135*0d1ba665SWarner Losh extern EFI_GUID gEfiPersistentVirtualCdGuid; 1136*0d1ba665SWarner Losh 1137*0d1ba665SWarner Losh /// 1138*0d1ba665SWarner Losh /// Media ram disk device path. 1139*0d1ba665SWarner Losh /// 1140*0d1ba665SWarner Losh #define MEDIA_RAM_DISK_DP 0x09 1141*0d1ba665SWarner Losh 1142*0d1ba665SWarner Losh /// 1143*0d1ba665SWarner Losh /// Used to describe the ram disk device path. 1144*0d1ba665SWarner Losh /// 1145*0d1ba665SWarner Losh typedef struct { 1146*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1147*0d1ba665SWarner Losh /// 1148*0d1ba665SWarner Losh /// Starting Memory Address. 1149*0d1ba665SWarner Losh /// 1150*0d1ba665SWarner Losh UINT32 StartingAddr[2]; 1151*0d1ba665SWarner Losh /// 1152*0d1ba665SWarner Losh /// Ending Memory Address. 1153*0d1ba665SWarner Losh /// 1154*0d1ba665SWarner Losh UINT32 EndingAddr[2]; 1155*0d1ba665SWarner Losh /// 1156*0d1ba665SWarner Losh /// GUID that defines the type of the RAM Disk. 1157*0d1ba665SWarner Losh /// 1158*0d1ba665SWarner Losh EFI_GUID TypeGuid; 1159*0d1ba665SWarner Losh /// 1160*0d1ba665SWarner Losh /// RAM Diskinstance number, if supported. The default value is zero. 1161*0d1ba665SWarner Losh /// 1162*0d1ba665SWarner Losh UINT16 Instance; 1163*0d1ba665SWarner Losh } MEDIA_RAM_DISK_DEVICE_PATH; 1164*0d1ba665SWarner Losh 1165*0d1ba665SWarner Losh /// 1166*0d1ba665SWarner Losh /// BIOS Boot Specification Device Path. 1167*0d1ba665SWarner Losh /// 1168*0d1ba665SWarner Losh #define BBS_DEVICE_PATH 0x05 1169*0d1ba665SWarner Losh 1170*0d1ba665SWarner Losh /// 1171*0d1ba665SWarner Losh /// BIOS Boot Specification Device Path SubType. 1172*0d1ba665SWarner Losh /// 1173*0d1ba665SWarner Losh #define BBS_BBS_DP 0x01 1174*0d1ba665SWarner Losh 1175*0d1ba665SWarner Losh /// 1176*0d1ba665SWarner Losh /// This Device Path is used to describe the booting of non-EFI-aware operating systems. 1177*0d1ba665SWarner Losh /// 1178*0d1ba665SWarner Losh typedef struct { 1179*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1180*0d1ba665SWarner Losh /// 1181*0d1ba665SWarner Losh /// Device Type as defined by the BIOS Boot Specification. 1182*0d1ba665SWarner Losh /// 1183*0d1ba665SWarner Losh UINT16 DeviceType; 1184*0d1ba665SWarner Losh /// 1185*0d1ba665SWarner Losh /// Status Flags as defined by the BIOS Boot Specification. 1186*0d1ba665SWarner Losh /// 1187*0d1ba665SWarner Losh UINT16 StatusFlag; 1188*0d1ba665SWarner Losh /// 1189*0d1ba665SWarner Losh /// Null-terminated ASCII string that describes the boot device to a user. 1190*0d1ba665SWarner Losh /// 1191*0d1ba665SWarner Losh CHAR8 String[1]; 1192*0d1ba665SWarner Losh } BBS_BBS_DEVICE_PATH; 1193*0d1ba665SWarner Losh 1194*0d1ba665SWarner Losh // 1195*0d1ba665SWarner Losh // DeviceType definitions - from BBS specification 1196*0d1ba665SWarner Losh // 1197*0d1ba665SWarner Losh #define BBS_TYPE_FLOPPY 0x01 1198*0d1ba665SWarner Losh #define BBS_TYPE_HARDDRIVE 0x02 1199*0d1ba665SWarner Losh #define BBS_TYPE_CDROM 0x03 1200*0d1ba665SWarner Losh #define BBS_TYPE_PCMCIA 0x04 1201*0d1ba665SWarner Losh #define BBS_TYPE_USB 0x05 1202*0d1ba665SWarner Losh #define BBS_TYPE_EMBEDDED_NETWORK 0x06 1203*0d1ba665SWarner Losh #define BBS_TYPE_BEV 0x80 1204*0d1ba665SWarner Losh #define BBS_TYPE_UNKNOWN 0xFF 1205*0d1ba665SWarner Losh 1206*0d1ba665SWarner Losh 1207*0d1ba665SWarner Losh /// 1208*0d1ba665SWarner Losh /// Union of all possible Device Paths and pointers to Device Paths. 1209*0d1ba665SWarner Losh /// 1210*0d1ba665SWarner Losh typedef union { 1211*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL DevPath; 1212*0d1ba665SWarner Losh PCI_DEVICE_PATH Pci; 1213*0d1ba665SWarner Losh PCCARD_DEVICE_PATH PcCard; 1214*0d1ba665SWarner Losh MEMMAP_DEVICE_PATH MemMap; 1215*0d1ba665SWarner Losh VENDOR_DEVICE_PATH Vendor; 1216*0d1ba665SWarner Losh 1217*0d1ba665SWarner Losh CONTROLLER_DEVICE_PATH Controller; 1218*0d1ba665SWarner Losh BMC_DEVICE_PATH Bmc; 1219*0d1ba665SWarner Losh ACPI_HID_DEVICE_PATH Acpi; 1220*0d1ba665SWarner Losh ACPI_EXTENDED_HID_DEVICE_PATH ExtendedAcpi; 1221*0d1ba665SWarner Losh ACPI_ADR_DEVICE_PATH AcpiAdr; 1222*0d1ba665SWarner Losh 1223*0d1ba665SWarner Losh ATAPI_DEVICE_PATH Atapi; 1224*0d1ba665SWarner Losh SCSI_DEVICE_PATH Scsi; 1225*0d1ba665SWarner Losh ISCSI_DEVICE_PATH Iscsi; 1226*0d1ba665SWarner Losh FIBRECHANNEL_DEVICE_PATH FibreChannel; 1227*0d1ba665SWarner Losh FIBRECHANNELEX_DEVICE_PATH FibreChannelEx; 1228*0d1ba665SWarner Losh 1229*0d1ba665SWarner Losh F1394_DEVICE_PATH F1394; 1230*0d1ba665SWarner Losh USB_DEVICE_PATH Usb; 1231*0d1ba665SWarner Losh SATA_DEVICE_PATH Sata; 1232*0d1ba665SWarner Losh USB_CLASS_DEVICE_PATH UsbClass; 1233*0d1ba665SWarner Losh USB_WWID_DEVICE_PATH UsbWwid; 1234*0d1ba665SWarner Losh DEVICE_LOGICAL_UNIT_DEVICE_PATH LogicUnit; 1235*0d1ba665SWarner Losh I2O_DEVICE_PATH I2O; 1236*0d1ba665SWarner Losh MAC_ADDR_DEVICE_PATH MacAddr; 1237*0d1ba665SWarner Losh IPv4_DEVICE_PATH Ipv4; 1238*0d1ba665SWarner Losh IPv6_DEVICE_PATH Ipv6; 1239*0d1ba665SWarner Losh VLAN_DEVICE_PATH Vlan; 1240*0d1ba665SWarner Losh INFINIBAND_DEVICE_PATH InfiniBand; 1241*0d1ba665SWarner Losh UART_DEVICE_PATH Uart; 1242*0d1ba665SWarner Losh UART_FLOW_CONTROL_DEVICE_PATH UartFlowControl; 1243*0d1ba665SWarner Losh SAS_DEVICE_PATH Sas; 1244*0d1ba665SWarner Losh SASEX_DEVICE_PATH SasEx; 1245*0d1ba665SWarner Losh NVME_NAMESPACE_DEVICE_PATH NvmeNamespace; 1246*0d1ba665SWarner Losh URI_DEVICE_PATH Uri; 1247*0d1ba665SWarner Losh BLUETOOTH_DEVICE_PATH Bluetooth; 1248*0d1ba665SWarner Losh WIFI_DEVICE_PATH WiFi; 1249*0d1ba665SWarner Losh UFS_DEVICE_PATH Ufs; 1250*0d1ba665SWarner Losh SD_DEVICE_PATH Sd; 1251*0d1ba665SWarner Losh EMMC_DEVICE_PATH Emmc; 1252*0d1ba665SWarner Losh HARDDRIVE_DEVICE_PATH HardDrive; 1253*0d1ba665SWarner Losh CDROM_DEVICE_PATH CD; 1254*0d1ba665SWarner Losh 1255*0d1ba665SWarner Losh FILEPATH_DEVICE_PATH FilePath; 1256*0d1ba665SWarner Losh MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol; 1257*0d1ba665SWarner Losh 1258*0d1ba665SWarner Losh MEDIA_FW_VOL_DEVICE_PATH FirmwareVolume; 1259*0d1ba665SWarner Losh MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FirmwareFile; 1260*0d1ba665SWarner Losh MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH Offset; 1261*0d1ba665SWarner Losh MEDIA_RAM_DISK_DEVICE_PATH RamDisk; 1262*0d1ba665SWarner Losh BBS_BBS_DEVICE_PATH Bbs; 1263*0d1ba665SWarner Losh } EFI_DEV_PATH; 1264*0d1ba665SWarner Losh 1265*0d1ba665SWarner Losh 1266*0d1ba665SWarner Losh 1267*0d1ba665SWarner Losh typedef union { 1268*0d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL *DevPath; 1269*0d1ba665SWarner Losh PCI_DEVICE_PATH *Pci; 1270*0d1ba665SWarner Losh PCCARD_DEVICE_PATH *PcCard; 1271*0d1ba665SWarner Losh MEMMAP_DEVICE_PATH *MemMap; 1272*0d1ba665SWarner Losh VENDOR_DEVICE_PATH *Vendor; 1273*0d1ba665SWarner Losh 1274*0d1ba665SWarner Losh CONTROLLER_DEVICE_PATH *Controller; 1275*0d1ba665SWarner Losh BMC_DEVICE_PATH *Bmc; 1276*0d1ba665SWarner Losh ACPI_HID_DEVICE_PATH *Acpi; 1277*0d1ba665SWarner Losh ACPI_EXTENDED_HID_DEVICE_PATH *ExtendedAcpi; 1278*0d1ba665SWarner Losh ACPI_ADR_DEVICE_PATH *AcpiAdr; 1279*0d1ba665SWarner Losh 1280*0d1ba665SWarner Losh ATAPI_DEVICE_PATH *Atapi; 1281*0d1ba665SWarner Losh SCSI_DEVICE_PATH *Scsi; 1282*0d1ba665SWarner Losh ISCSI_DEVICE_PATH *Iscsi; 1283*0d1ba665SWarner Losh FIBRECHANNEL_DEVICE_PATH *FibreChannel; 1284*0d1ba665SWarner Losh FIBRECHANNELEX_DEVICE_PATH *FibreChannelEx; 1285*0d1ba665SWarner Losh 1286*0d1ba665SWarner Losh F1394_DEVICE_PATH *F1394; 1287*0d1ba665SWarner Losh USB_DEVICE_PATH *Usb; 1288*0d1ba665SWarner Losh SATA_DEVICE_PATH *Sata; 1289*0d1ba665SWarner Losh USB_CLASS_DEVICE_PATH *UsbClass; 1290*0d1ba665SWarner Losh USB_WWID_DEVICE_PATH *UsbWwid; 1291*0d1ba665SWarner Losh DEVICE_LOGICAL_UNIT_DEVICE_PATH *LogicUnit; 1292*0d1ba665SWarner Losh I2O_DEVICE_PATH *I2O; 1293*0d1ba665SWarner Losh MAC_ADDR_DEVICE_PATH *MacAddr; 1294*0d1ba665SWarner Losh IPv4_DEVICE_PATH *Ipv4; 1295*0d1ba665SWarner Losh IPv6_DEVICE_PATH *Ipv6; 1296*0d1ba665SWarner Losh VLAN_DEVICE_PATH *Vlan; 1297*0d1ba665SWarner Losh INFINIBAND_DEVICE_PATH *InfiniBand; 1298*0d1ba665SWarner Losh UART_DEVICE_PATH *Uart; 1299*0d1ba665SWarner Losh UART_FLOW_CONTROL_DEVICE_PATH *UartFlowControl; 1300*0d1ba665SWarner Losh SAS_DEVICE_PATH *Sas; 1301*0d1ba665SWarner Losh SASEX_DEVICE_PATH *SasEx; 1302*0d1ba665SWarner Losh NVME_NAMESPACE_DEVICE_PATH *NvmeNamespace; 1303*0d1ba665SWarner Losh URI_DEVICE_PATH *Uri; 1304*0d1ba665SWarner Losh BLUETOOTH_DEVICE_PATH *Bluetooth; 1305*0d1ba665SWarner Losh WIFI_DEVICE_PATH *WiFi; 1306*0d1ba665SWarner Losh UFS_DEVICE_PATH *Ufs; 1307*0d1ba665SWarner Losh SD_DEVICE_PATH *Sd; 1308*0d1ba665SWarner Losh EMMC_DEVICE_PATH *Emmc; 1309*0d1ba665SWarner Losh HARDDRIVE_DEVICE_PATH *HardDrive; 1310*0d1ba665SWarner Losh CDROM_DEVICE_PATH *CD; 1311*0d1ba665SWarner Losh 1312*0d1ba665SWarner Losh FILEPATH_DEVICE_PATH *FilePath; 1313*0d1ba665SWarner Losh MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol; 1314*0d1ba665SWarner Losh 1315*0d1ba665SWarner Losh MEDIA_FW_VOL_DEVICE_PATH *FirmwareVolume; 1316*0d1ba665SWarner Losh MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FirmwareFile; 1317*0d1ba665SWarner Losh MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *Offset; 1318*0d1ba665SWarner Losh MEDIA_RAM_DISK_DEVICE_PATH *RamDisk; 1319*0d1ba665SWarner Losh BBS_BBS_DEVICE_PATH *Bbs; 1320*0d1ba665SWarner Losh UINT8 *Raw; 1321*0d1ba665SWarner Losh } EFI_DEV_PATH_PTR; 1322*0d1ba665SWarner Losh 1323*0d1ba665SWarner Losh #pragma pack() 1324*0d1ba665SWarner Losh 1325*0d1ba665SWarner Losh #define END_DEVICE_PATH_TYPE 0x7f 1326*0d1ba665SWarner Losh #define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xFF 1327*0d1ba665SWarner Losh #define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01 1328*0d1ba665SWarner Losh 1329*0d1ba665SWarner Losh extern EFI_GUID gEfiDevicePathProtocolGuid; 1330*0d1ba665SWarner Losh 1331*0d1ba665SWarner Losh #endif 1332