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