10d1ba665SWarner Losh /** @file 20d1ba665SWarner Losh The device path protocol as defined in UEFI 2.0. 30d1ba665SWarner Losh 40d1ba665SWarner Losh The device path represents a programmatic path to a device, 50d1ba665SWarner Losh from a software point of view. The path must persist from boot to boot, so 60d1ba665SWarner Losh it can not contain things like PCI bus numbers that change from boot to boot. 70d1ba665SWarner Losh 8*3245fa21SMitchell Horne Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> 9*3245fa21SMitchell Horne SPDX-License-Identifier: BSD-2-Clause-Patent 100d1ba665SWarner Losh 110d1ba665SWarner Losh **/ 120d1ba665SWarner Losh 130d1ba665SWarner Losh #ifndef __EFI_DEVICE_PATH_PROTOCOL_H__ 140d1ba665SWarner Losh #define __EFI_DEVICE_PATH_PROTOCOL_H__ 150d1ba665SWarner Losh 160d1ba665SWarner Losh #include <Guid/PcAnsi.h> 170d1ba665SWarner Losh #include <IndustryStandard/Bluetooth.h> 180d1ba665SWarner Losh #include <IndustryStandard/Acpi60.h> 190d1ba665SWarner Losh 200d1ba665SWarner Losh /// 210d1ba665SWarner Losh /// Device Path protocol. 220d1ba665SWarner Losh /// 230d1ba665SWarner Losh #define EFI_DEVICE_PATH_PROTOCOL_GUID \ 240d1ba665SWarner Losh { \ 250d1ba665SWarner Losh 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ 260d1ba665SWarner Losh } 270d1ba665SWarner Losh 280d1ba665SWarner Losh /// 290d1ba665SWarner Losh /// Device Path guid definition for backward-compatible with EFI1.1. 300d1ba665SWarner Losh /// 310d1ba665SWarner Losh #define DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL_GUID 320d1ba665SWarner Losh 330d1ba665SWarner Losh #pragma pack(1) 340d1ba665SWarner Losh 350d1ba665SWarner Losh /** 360d1ba665SWarner Losh This protocol can be used on any device handle to obtain generic path/location 370d1ba665SWarner Losh information concerning the physical device or logical device. If the handle does 380d1ba665SWarner Losh not logically map to a physical device, the handle may not necessarily support 390d1ba665SWarner Losh the device path protocol. The device path describes the location of the device 400d1ba665SWarner Losh the handle is for. The size of the Device Path can be determined from the structures 410d1ba665SWarner Losh that make up the Device Path. 420d1ba665SWarner Losh **/ 430d1ba665SWarner Losh typedef struct { 440d1ba665SWarner Losh UINT8 Type; ///< 0x01 Hardware Device Path. 450d1ba665SWarner Losh ///< 0x02 ACPI Device Path. 460d1ba665SWarner Losh ///< 0x03 Messaging Device Path. 470d1ba665SWarner Losh ///< 0x04 Media Device Path. 480d1ba665SWarner Losh ///< 0x05 BIOS Boot Specification Device Path. 490d1ba665SWarner Losh ///< 0x7F End of Hardware Device Path. 500d1ba665SWarner Losh 510d1ba665SWarner Losh UINT8 SubType; ///< Varies by Type 520d1ba665SWarner Losh ///< 0xFF End Entire Device Path, or 530d1ba665SWarner Losh ///< 0x01 End This Instance of a Device Path and start a new 540d1ba665SWarner Losh ///< Device Path. 550d1ba665SWarner Losh 560d1ba665SWarner Losh UINT8 Length[2]; ///< Specific Device Path data. Type and Sub-Type define 570d1ba665SWarner Losh ///< type of data. Size of data is included in Length. 580d1ba665SWarner Losh 590d1ba665SWarner Losh } EFI_DEVICE_PATH_PROTOCOL; 600d1ba665SWarner Losh 610d1ba665SWarner Losh /// 620d1ba665SWarner Losh /// Device Path protocol definition for backward-compatible with EFI1.1. 630d1ba665SWarner Losh /// 640d1ba665SWarner Losh typedef EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH; 650d1ba665SWarner Losh 660d1ba665SWarner Losh /// 670d1ba665SWarner Losh /// Hardware Device Paths. 680d1ba665SWarner Losh /// 690d1ba665SWarner Losh #define HARDWARE_DEVICE_PATH 0x01 700d1ba665SWarner Losh 710d1ba665SWarner Losh /// 720d1ba665SWarner Losh /// PCI Device Path SubType. 730d1ba665SWarner Losh /// 740d1ba665SWarner Losh #define HW_PCI_DP 0x01 750d1ba665SWarner Losh 760d1ba665SWarner Losh /// 770d1ba665SWarner Losh /// PCI Device Path. 780d1ba665SWarner Losh /// 790d1ba665SWarner Losh typedef struct { 800d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 810d1ba665SWarner Losh /// 820d1ba665SWarner Losh /// PCI Function Number. 830d1ba665SWarner Losh /// 840d1ba665SWarner Losh UINT8 Function; 850d1ba665SWarner Losh /// 860d1ba665SWarner Losh /// PCI Device Number. 870d1ba665SWarner Losh /// 880d1ba665SWarner Losh UINT8 Device; 890d1ba665SWarner Losh } PCI_DEVICE_PATH; 900d1ba665SWarner Losh 910d1ba665SWarner Losh /// 920d1ba665SWarner Losh /// PCCARD Device Path SubType. 930d1ba665SWarner Losh /// 940d1ba665SWarner Losh #define HW_PCCARD_DP 0x02 950d1ba665SWarner Losh 960d1ba665SWarner Losh /// 970d1ba665SWarner Losh /// PCCARD Device Path. 980d1ba665SWarner Losh /// 990d1ba665SWarner Losh typedef struct { 1000d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1010d1ba665SWarner Losh /// 1020d1ba665SWarner Losh /// Function Number (0 = First Function). 1030d1ba665SWarner Losh /// 1040d1ba665SWarner Losh UINT8 FunctionNumber; 1050d1ba665SWarner Losh } PCCARD_DEVICE_PATH; 1060d1ba665SWarner Losh 1070d1ba665SWarner Losh /// 1080d1ba665SWarner Losh /// Memory Mapped Device Path SubType. 1090d1ba665SWarner Losh /// 1100d1ba665SWarner Losh #define HW_MEMMAP_DP 0x03 1110d1ba665SWarner Losh 1120d1ba665SWarner Losh /// 1130d1ba665SWarner Losh /// Memory Mapped Device Path. 1140d1ba665SWarner Losh /// 1150d1ba665SWarner Losh typedef struct { 1160d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1170d1ba665SWarner Losh /// 1180d1ba665SWarner Losh /// EFI_MEMORY_TYPE 1190d1ba665SWarner Losh /// 1200d1ba665SWarner Losh UINT32 MemoryType; 1210d1ba665SWarner Losh /// 1220d1ba665SWarner Losh /// Starting Memory Address. 1230d1ba665SWarner Losh /// 1240d1ba665SWarner Losh EFI_PHYSICAL_ADDRESS StartingAddress; 1250d1ba665SWarner Losh /// 1260d1ba665SWarner Losh /// Ending Memory Address. 1270d1ba665SWarner Losh /// 1280d1ba665SWarner Losh EFI_PHYSICAL_ADDRESS EndingAddress; 1290d1ba665SWarner Losh } MEMMAP_DEVICE_PATH; 1300d1ba665SWarner Losh 1310d1ba665SWarner Losh /// 1320d1ba665SWarner Losh /// Hardware Vendor Device Path SubType. 1330d1ba665SWarner Losh /// 1340d1ba665SWarner Losh #define HW_VENDOR_DP 0x04 1350d1ba665SWarner Losh 1360d1ba665SWarner Losh /// 1370d1ba665SWarner Losh /// The Vendor Device Path allows the creation of vendor-defined Device Paths. A vendor must 1380d1ba665SWarner Losh /// allocate a Vendor GUID for a Device Path. The Vendor GUID can then be used to define the 1390d1ba665SWarner Losh /// contents on the n bytes that follow in the Vendor Device Path node. 1400d1ba665SWarner Losh /// 1410d1ba665SWarner Losh typedef struct { 1420d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1430d1ba665SWarner Losh /// 1440d1ba665SWarner Losh /// Vendor-assigned GUID that defines the data that follows. 1450d1ba665SWarner Losh /// 1460d1ba665SWarner Losh EFI_GUID Guid; 1470d1ba665SWarner Losh /// 1480d1ba665SWarner Losh /// Vendor-defined variable size data. 1490d1ba665SWarner Losh /// 1500d1ba665SWarner Losh } VENDOR_DEVICE_PATH; 1510d1ba665SWarner Losh 1520d1ba665SWarner Losh /// 1530d1ba665SWarner Losh /// Controller Device Path SubType. 1540d1ba665SWarner Losh /// 1550d1ba665SWarner Losh #define HW_CONTROLLER_DP 0x05 1560d1ba665SWarner Losh 1570d1ba665SWarner Losh /// 1580d1ba665SWarner Losh /// Controller Device Path. 1590d1ba665SWarner Losh /// 1600d1ba665SWarner Losh typedef struct { 1610d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1620d1ba665SWarner Losh /// 1630d1ba665SWarner Losh /// Controller number. 1640d1ba665SWarner Losh /// 1650d1ba665SWarner Losh UINT32 ControllerNumber; 1660d1ba665SWarner Losh } CONTROLLER_DEVICE_PATH; 1670d1ba665SWarner Losh 1680d1ba665SWarner Losh /// 1690d1ba665SWarner Losh /// BMC Device Path SubType. 1700d1ba665SWarner Losh /// 1710d1ba665SWarner Losh #define HW_BMC_DP 0x06 1720d1ba665SWarner Losh 1730d1ba665SWarner Losh /// 1740d1ba665SWarner Losh /// BMC Device Path. 1750d1ba665SWarner Losh /// 1760d1ba665SWarner Losh typedef struct { 1770d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1780d1ba665SWarner Losh /// 1790d1ba665SWarner Losh /// Interface Type. 1800d1ba665SWarner Losh /// 1810d1ba665SWarner Losh UINT8 InterfaceType; 1820d1ba665SWarner Losh /// 1830d1ba665SWarner Losh /// Base Address. 1840d1ba665SWarner Losh /// 1850d1ba665SWarner Losh UINT8 BaseAddress[8]; 1860d1ba665SWarner Losh } BMC_DEVICE_PATH; 1870d1ba665SWarner Losh 1880d1ba665SWarner Losh /// 1890d1ba665SWarner Losh /// ACPI Device Paths. 1900d1ba665SWarner Losh /// 1910d1ba665SWarner Losh #define ACPI_DEVICE_PATH 0x02 1920d1ba665SWarner Losh 1930d1ba665SWarner Losh /// 1940d1ba665SWarner Losh /// ACPI Device Path SubType. 1950d1ba665SWarner Losh /// 1960d1ba665SWarner Losh #define ACPI_DP 0x01 1970d1ba665SWarner Losh typedef struct { 1980d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 1990d1ba665SWarner Losh /// 2000d1ba665SWarner Losh /// Device's PnP hardware ID stored in a numeric 32-bit 2010d1ba665SWarner Losh /// compressed EISA-type ID. This value must match the 2020d1ba665SWarner Losh /// corresponding _HID in the ACPI name space. 2030d1ba665SWarner Losh /// 2040d1ba665SWarner Losh UINT32 HID; 2050d1ba665SWarner Losh /// 2060d1ba665SWarner Losh /// Unique ID that is required by ACPI if two devices have the 2070d1ba665SWarner Losh /// same _HID. This value must also match the corresponding 2080d1ba665SWarner Losh /// _UID/_HID pair in the ACPI name space. Only the 32-bit 2090d1ba665SWarner Losh /// numeric value type of _UID is supported. Thus, strings must 2100d1ba665SWarner Losh /// not be used for the _UID in the ACPI name space. 2110d1ba665SWarner Losh /// 2120d1ba665SWarner Losh UINT32 UID; 2130d1ba665SWarner Losh } ACPI_HID_DEVICE_PATH; 2140d1ba665SWarner Losh 2150d1ba665SWarner Losh /// 2160d1ba665SWarner Losh /// Expanded ACPI Device Path SubType. 2170d1ba665SWarner Losh /// 2180d1ba665SWarner Losh #define ACPI_EXTENDED_DP 0x02 2190d1ba665SWarner Losh typedef struct { 2200d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 2210d1ba665SWarner Losh /// 2220d1ba665SWarner Losh /// Device's PnP hardware ID stored in a numeric 32-bit 2230d1ba665SWarner Losh /// compressed EISA-type ID. This value must match the 2240d1ba665SWarner Losh /// corresponding _HID in the ACPI name space. 2250d1ba665SWarner Losh /// 2260d1ba665SWarner Losh UINT32 HID; 2270d1ba665SWarner Losh /// 2280d1ba665SWarner Losh /// Unique ID that is required by ACPI if two devices have the 2290d1ba665SWarner Losh /// same _HID. This value must also match the corresponding 2300d1ba665SWarner Losh /// _UID/_HID pair in the ACPI name space. 2310d1ba665SWarner Losh /// 2320d1ba665SWarner Losh UINT32 UID; 2330d1ba665SWarner Losh /// 2340d1ba665SWarner Losh /// Device's compatible PnP hardware ID stored in a numeric 2350d1ba665SWarner Losh /// 32-bit compressed EISA-type ID. This value must match at 2360d1ba665SWarner Losh /// least one of the compatible device IDs returned by the 2370d1ba665SWarner Losh /// corresponding _CID in the ACPI name space. 2380d1ba665SWarner Losh /// 2390d1ba665SWarner Losh UINT32 CID; 2400d1ba665SWarner Losh /// 2410d1ba665SWarner Losh /// Optional variable length _HIDSTR. 2420d1ba665SWarner Losh /// Optional variable length _UIDSTR. 2430d1ba665SWarner Losh /// Optional variable length _CIDSTR. 2440d1ba665SWarner Losh /// 2450d1ba665SWarner Losh } ACPI_EXTENDED_HID_DEVICE_PATH; 2460d1ba665SWarner Losh 2470d1ba665SWarner Losh // 2480d1ba665SWarner Losh // EISA ID Macro 2490d1ba665SWarner Losh // EISA ID Definition 32-bits 2500d1ba665SWarner Losh // bits[15:0] - three character compressed ASCII EISA ID. 2510d1ba665SWarner Losh // bits[31:16] - binary number 2520d1ba665SWarner Losh // Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z' 2530d1ba665SWarner Losh // 2540d1ba665SWarner Losh #define PNP_EISA_ID_CONST 0x41d0 2550d1ba665SWarner Losh #define EISA_ID(_Name, _Num) ((UINT32)((_Name) | (_Num) << 16)) 2560d1ba665SWarner Losh #define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId))) 2570d1ba665SWarner Losh #define EFI_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId))) 2580d1ba665SWarner Losh 2590d1ba665SWarner Losh #define PNP_EISA_ID_MASK 0xffff 2600d1ba665SWarner Losh #define EISA_ID_TO_NUM(_Id) ((_Id) >> 16) 2610d1ba665SWarner Losh 2620d1ba665SWarner Losh /// 2630d1ba665SWarner Losh /// ACPI _ADR Device Path SubType. 2640d1ba665SWarner Losh /// 2650d1ba665SWarner Losh #define ACPI_ADR_DP 0x03 2660d1ba665SWarner Losh 2670d1ba665SWarner Losh /// 2680d1ba665SWarner Losh /// The _ADR device path is used to contain video output device attributes to support the Graphics 2690d1ba665SWarner Losh /// Output Protocol. The device path can contain multiple _ADR entries if multiple video output 2700d1ba665SWarner Losh /// devices are displaying the same output. 2710d1ba665SWarner Losh /// 2720d1ba665SWarner Losh typedef struct { 2730d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 2740d1ba665SWarner Losh /// 2750d1ba665SWarner Losh /// _ADR value. For video output devices the value of this 2760d1ba665SWarner Losh /// field comes from Table B-2 of the ACPI 3.0 specification. At 2770d1ba665SWarner Losh /// least one _ADR value is required. 2780d1ba665SWarner Losh /// 2790d1ba665SWarner Losh UINT32 ADR; 2800d1ba665SWarner Losh // 2810d1ba665SWarner Losh // This device path may optionally contain more than one _ADR entry. 2820d1ba665SWarner Losh // 2830d1ba665SWarner Losh } ACPI_ADR_DEVICE_PATH; 2840d1ba665SWarner Losh 285*3245fa21SMitchell Horne /// 286*3245fa21SMitchell Horne /// ACPI NVDIMM Device Path SubType. 287*3245fa21SMitchell Horne /// 288*3245fa21SMitchell Horne #define ACPI_NVDIMM_DP 0x04 289*3245fa21SMitchell Horne /// 290*3245fa21SMitchell Horne /// 291*3245fa21SMitchell Horne typedef struct { 292*3245fa21SMitchell Horne EFI_DEVICE_PATH_PROTOCOL Header; 293*3245fa21SMitchell Horne /// 294*3245fa21SMitchell Horne /// NFIT Device Handle, the _ADR of the NVDIMM device. 295*3245fa21SMitchell Horne /// The value of this field comes from Section 9.20.3 of the ACPI 6.2A specification. 296*3245fa21SMitchell Horne /// 297*3245fa21SMitchell Horne UINT32 NFITDeviceHandle; 298*3245fa21SMitchell Horne } ACPI_NVDIMM_DEVICE_PATH; 299*3245fa21SMitchell Horne 3000d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_OTHER 0 3010d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_VGA 1 3020d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_TV 2 3030d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL 3 3040d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL 4 3050d1ba665SWarner Losh 3060d1ba665SWarner Losh #define ACPI_DISPLAY_ADR(_DeviceIdScheme, _HeadId, _NonVgaOutput, _BiosCanDetect, _VendorInfo, _Type, _Port, _Index) \ 3070d1ba665SWarner Losh ((UINT32)( ((UINT32)((_DeviceIdScheme) & 0x1) << 31) | \ 3080d1ba665SWarner Losh (((_HeadId) & 0x7) << 18) | \ 3090d1ba665SWarner Losh (((_NonVgaOutput) & 0x1) << 17) | \ 3100d1ba665SWarner Losh (((_BiosCanDetect) & 0x1) << 16) | \ 3110d1ba665SWarner Losh (((_VendorInfo) & 0xf) << 12) | \ 3120d1ba665SWarner Losh (((_Type) & 0xf) << 8) | \ 3130d1ba665SWarner Losh (((_Port) & 0xf) << 4) | \ 3140d1ba665SWarner Losh ((_Index) & 0xf) )) 3150d1ba665SWarner Losh 3160d1ba665SWarner Losh /// 3170d1ba665SWarner Losh /// Messaging Device Paths. 3180d1ba665SWarner Losh /// This Device Path is used to describe the connection of devices outside the resource domain of the 3190d1ba665SWarner Losh /// system. This Device Path can describe physical messaging information like SCSI ID, or abstract 3200d1ba665SWarner Losh /// information like networking protocol IP addresses. 3210d1ba665SWarner Losh /// 3220d1ba665SWarner Losh #define MESSAGING_DEVICE_PATH 0x03 3230d1ba665SWarner Losh 3240d1ba665SWarner Losh /// 3250d1ba665SWarner Losh /// ATAPI Device Path SubType 3260d1ba665SWarner Losh /// 3270d1ba665SWarner Losh #define MSG_ATAPI_DP 0x01 3280d1ba665SWarner Losh typedef struct { 3290d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 3300d1ba665SWarner Losh /// 3310d1ba665SWarner Losh /// Set to zero for primary, or one for secondary. 3320d1ba665SWarner Losh /// 3330d1ba665SWarner Losh UINT8 PrimarySecondary; 3340d1ba665SWarner Losh /// 3350d1ba665SWarner Losh /// Set to zero for master, or one for slave mode. 3360d1ba665SWarner Losh /// 3370d1ba665SWarner Losh UINT8 SlaveMaster; 3380d1ba665SWarner Losh /// 3390d1ba665SWarner Losh /// Logical Unit Number. 3400d1ba665SWarner Losh /// 3410d1ba665SWarner Losh UINT16 Lun; 3420d1ba665SWarner Losh } ATAPI_DEVICE_PATH; 3430d1ba665SWarner Losh 3440d1ba665SWarner Losh /// 3450d1ba665SWarner Losh /// SCSI Device Path SubType. 3460d1ba665SWarner Losh /// 3470d1ba665SWarner Losh #define MSG_SCSI_DP 0x02 3480d1ba665SWarner Losh typedef struct { 3490d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 3500d1ba665SWarner Losh /// 3510d1ba665SWarner Losh /// Target ID on the SCSI bus (PUN). 3520d1ba665SWarner Losh /// 3530d1ba665SWarner Losh UINT16 Pun; 3540d1ba665SWarner Losh /// 3550d1ba665SWarner Losh /// Logical Unit Number (LUN). 3560d1ba665SWarner Losh /// 3570d1ba665SWarner Losh UINT16 Lun; 3580d1ba665SWarner Losh } SCSI_DEVICE_PATH; 3590d1ba665SWarner Losh 3600d1ba665SWarner Losh /// 3610d1ba665SWarner Losh /// Fibre Channel SubType. 3620d1ba665SWarner Losh /// 3630d1ba665SWarner Losh #define MSG_FIBRECHANNEL_DP 0x03 3640d1ba665SWarner Losh typedef struct { 3650d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 3660d1ba665SWarner Losh /// 3670d1ba665SWarner Losh /// Reserved for the future. 3680d1ba665SWarner Losh /// 3690d1ba665SWarner Losh UINT32 Reserved; 3700d1ba665SWarner Losh /// 3710d1ba665SWarner Losh /// Fibre Channel World Wide Number. 3720d1ba665SWarner Losh /// 3730d1ba665SWarner Losh UINT64 WWN; 3740d1ba665SWarner Losh /// 3750d1ba665SWarner Losh /// Fibre Channel Logical Unit Number. 3760d1ba665SWarner Losh /// 3770d1ba665SWarner Losh UINT64 Lun; 3780d1ba665SWarner Losh } FIBRECHANNEL_DEVICE_PATH; 3790d1ba665SWarner Losh 3800d1ba665SWarner Losh /// 3810d1ba665SWarner Losh /// Fibre Channel Ex SubType. 3820d1ba665SWarner Losh /// 3830d1ba665SWarner Losh #define MSG_FIBRECHANNELEX_DP 0x15 3840d1ba665SWarner Losh typedef struct { 3850d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 3860d1ba665SWarner Losh /// 3870d1ba665SWarner Losh /// Reserved for the future. 3880d1ba665SWarner Losh /// 3890d1ba665SWarner Losh UINT32 Reserved; 3900d1ba665SWarner Losh /// 3910d1ba665SWarner Losh /// 8 byte array containing Fibre Channel End Device Port Name. 3920d1ba665SWarner Losh /// 3930d1ba665SWarner Losh UINT8 WWN[8]; 3940d1ba665SWarner Losh /// 3950d1ba665SWarner Losh /// 8 byte array containing Fibre Channel Logical Unit Number. 3960d1ba665SWarner Losh /// 3970d1ba665SWarner Losh UINT8 Lun[8]; 3980d1ba665SWarner Losh } FIBRECHANNELEX_DEVICE_PATH; 3990d1ba665SWarner Losh 4000d1ba665SWarner Losh /// 4010d1ba665SWarner Losh /// 1394 Device Path SubType 4020d1ba665SWarner Losh /// 4030d1ba665SWarner Losh #define MSG_1394_DP 0x04 4040d1ba665SWarner Losh typedef struct { 4050d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 4060d1ba665SWarner Losh /// 4070d1ba665SWarner Losh /// Reserved for the future. 4080d1ba665SWarner Losh /// 4090d1ba665SWarner Losh UINT32 Reserved; 4100d1ba665SWarner Losh /// 4110d1ba665SWarner Losh /// 1394 Global Unique ID (GUID). 4120d1ba665SWarner Losh /// 4130d1ba665SWarner Losh UINT64 Guid; 4140d1ba665SWarner Losh } F1394_DEVICE_PATH; 4150d1ba665SWarner Losh 4160d1ba665SWarner Losh /// 4170d1ba665SWarner Losh /// USB Device Path SubType. 4180d1ba665SWarner Losh /// 4190d1ba665SWarner Losh #define MSG_USB_DP 0x05 4200d1ba665SWarner Losh typedef struct { 4210d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 4220d1ba665SWarner Losh /// 4230d1ba665SWarner Losh /// USB Parent Port Number. 4240d1ba665SWarner Losh /// 4250d1ba665SWarner Losh UINT8 ParentPortNumber; 4260d1ba665SWarner Losh /// 4270d1ba665SWarner Losh /// USB Interface Number. 4280d1ba665SWarner Losh /// 4290d1ba665SWarner Losh UINT8 InterfaceNumber; 4300d1ba665SWarner Losh } USB_DEVICE_PATH; 4310d1ba665SWarner Losh 4320d1ba665SWarner Losh /// 4330d1ba665SWarner Losh /// USB Class Device Path SubType. 4340d1ba665SWarner Losh /// 4350d1ba665SWarner Losh #define MSG_USB_CLASS_DP 0x0f 4360d1ba665SWarner Losh typedef struct { 4370d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 4380d1ba665SWarner Losh /// 4390d1ba665SWarner Losh /// Vendor ID assigned by USB-IF. A value of 0xFFFF will 4400d1ba665SWarner Losh /// match any Vendor ID. 4410d1ba665SWarner Losh /// 4420d1ba665SWarner Losh UINT16 VendorId; 4430d1ba665SWarner Losh /// 4440d1ba665SWarner Losh /// Product ID assigned by USB-IF. A value of 0xFFFF will 4450d1ba665SWarner Losh /// match any Product ID. 4460d1ba665SWarner Losh /// 4470d1ba665SWarner Losh UINT16 ProductId; 4480d1ba665SWarner Losh /// 4490d1ba665SWarner Losh /// The class code assigned by the USB-IF. A value of 0xFF 4500d1ba665SWarner Losh /// will match any class code. 4510d1ba665SWarner Losh /// 4520d1ba665SWarner Losh UINT8 DeviceClass; 4530d1ba665SWarner Losh /// 4540d1ba665SWarner Losh /// The subclass code assigned by the USB-IF. A value of 4550d1ba665SWarner Losh /// 0xFF will match any subclass code. 4560d1ba665SWarner Losh /// 4570d1ba665SWarner Losh UINT8 DeviceSubClass; 4580d1ba665SWarner Losh /// 4590d1ba665SWarner Losh /// The protocol code assigned by the USB-IF. A value of 4600d1ba665SWarner Losh /// 0xFF will match any protocol code. 4610d1ba665SWarner Losh /// 4620d1ba665SWarner Losh UINT8 DeviceProtocol; 4630d1ba665SWarner Losh } USB_CLASS_DEVICE_PATH; 4640d1ba665SWarner Losh 4650d1ba665SWarner Losh /// 4660d1ba665SWarner Losh /// USB WWID Device Path SubType. 4670d1ba665SWarner Losh /// 4680d1ba665SWarner Losh #define MSG_USB_WWID_DP 0x10 4690d1ba665SWarner Losh 4700d1ba665SWarner Losh /// 4710d1ba665SWarner Losh /// This device path describes a USB device using its serial number. 4720d1ba665SWarner Losh /// 4730d1ba665SWarner Losh typedef struct { 4740d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 4750d1ba665SWarner Losh /// 4760d1ba665SWarner Losh /// USB interface number. 4770d1ba665SWarner Losh /// 4780d1ba665SWarner Losh UINT16 InterfaceNumber; 4790d1ba665SWarner Losh /// 4800d1ba665SWarner Losh /// USB vendor id of the device. 4810d1ba665SWarner Losh /// 4820d1ba665SWarner Losh UINT16 VendorId; 4830d1ba665SWarner Losh /// 4840d1ba665SWarner Losh /// USB product id of the device. 4850d1ba665SWarner Losh /// 4860d1ba665SWarner Losh UINT16 ProductId; 4870d1ba665SWarner Losh /// 4880d1ba665SWarner Losh /// Last 64-or-fewer UTF-16 characters of the USB 4890d1ba665SWarner Losh /// serial number. The length of the string is 4900d1ba665SWarner Losh /// determined by the Length field less the offset of the 4910d1ba665SWarner Losh /// Serial Number field (10) 4920d1ba665SWarner Losh /// 4930d1ba665SWarner Losh /// CHAR16 SerialNumber[...]; 4940d1ba665SWarner Losh } USB_WWID_DEVICE_PATH; 4950d1ba665SWarner Losh 4960d1ba665SWarner Losh /// 4970d1ba665SWarner Losh /// Device Logical Unit SubType. 4980d1ba665SWarner Losh /// 4990d1ba665SWarner Losh #define MSG_DEVICE_LOGICAL_UNIT_DP 0x11 5000d1ba665SWarner Losh typedef struct { 5010d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 5020d1ba665SWarner Losh /// 5030d1ba665SWarner Losh /// Logical Unit Number for the interface. 5040d1ba665SWarner Losh /// 5050d1ba665SWarner Losh UINT8 Lun; 5060d1ba665SWarner Losh } DEVICE_LOGICAL_UNIT_DEVICE_PATH; 5070d1ba665SWarner Losh 5080d1ba665SWarner Losh /// 5090d1ba665SWarner Losh /// SATA Device Path SubType. 5100d1ba665SWarner Losh /// 5110d1ba665SWarner Losh #define MSG_SATA_DP 0x12 5120d1ba665SWarner Losh typedef struct { 5130d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 5140d1ba665SWarner Losh /// 5150d1ba665SWarner Losh /// The HBA port number that facilitates the connection to the 5160d1ba665SWarner Losh /// device or a port multiplier. The value 0xFFFF is reserved. 5170d1ba665SWarner Losh /// 5180d1ba665SWarner Losh UINT16 HBAPortNumber; 5190d1ba665SWarner Losh /// 5200d1ba665SWarner Losh /// The Port multiplier port number that facilitates the connection 5210d1ba665SWarner Losh /// to the device. Must be set to 0xFFFF if the device is directly 5220d1ba665SWarner Losh /// connected to the HBA. 5230d1ba665SWarner Losh /// 5240d1ba665SWarner Losh UINT16 PortMultiplierPortNumber; 5250d1ba665SWarner Losh /// 5260d1ba665SWarner Losh /// Logical Unit Number. 5270d1ba665SWarner Losh /// 5280d1ba665SWarner Losh UINT16 Lun; 5290d1ba665SWarner Losh } SATA_DEVICE_PATH; 5300d1ba665SWarner Losh 5310d1ba665SWarner Losh /// 5320d1ba665SWarner Losh /// Flag for if the device is directly connected to the HBA. 5330d1ba665SWarner Losh /// 5340d1ba665SWarner Losh #define SATA_HBA_DIRECT_CONNECT_FLAG 0x8000 5350d1ba665SWarner Losh 5360d1ba665SWarner Losh /// 5370d1ba665SWarner Losh /// I2O Device Path SubType. 5380d1ba665SWarner Losh /// 5390d1ba665SWarner Losh #define MSG_I2O_DP 0x06 5400d1ba665SWarner Losh typedef struct { 5410d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 5420d1ba665SWarner Losh /// 5430d1ba665SWarner Losh /// Target ID (TID) for a device. 5440d1ba665SWarner Losh /// 5450d1ba665SWarner Losh UINT32 Tid; 5460d1ba665SWarner Losh } I2O_DEVICE_PATH; 5470d1ba665SWarner Losh 5480d1ba665SWarner Losh /// 5490d1ba665SWarner Losh /// MAC Address Device Path SubType. 5500d1ba665SWarner Losh /// 5510d1ba665SWarner Losh #define MSG_MAC_ADDR_DP 0x0b 5520d1ba665SWarner Losh typedef struct { 5530d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 5540d1ba665SWarner Losh /// 5550d1ba665SWarner Losh /// The MAC address for a network interface padded with 0s. 5560d1ba665SWarner Losh /// 5570d1ba665SWarner Losh EFI_MAC_ADDRESS MacAddress; 5580d1ba665SWarner Losh /// 5590d1ba665SWarner Losh /// Network interface type(i.e. 802.3, FDDI). 5600d1ba665SWarner Losh /// 5610d1ba665SWarner Losh UINT8 IfType; 5620d1ba665SWarner Losh } MAC_ADDR_DEVICE_PATH; 5630d1ba665SWarner Losh 5640d1ba665SWarner Losh /// 5650d1ba665SWarner Losh /// IPv4 Device Path SubType 5660d1ba665SWarner Losh /// 5670d1ba665SWarner Losh #define MSG_IPv4_DP 0x0c 5680d1ba665SWarner Losh typedef struct { 5690d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 5700d1ba665SWarner Losh /// 5710d1ba665SWarner Losh /// The local IPv4 address. 5720d1ba665SWarner Losh /// 5730d1ba665SWarner Losh EFI_IPv4_ADDRESS LocalIpAddress; 5740d1ba665SWarner Losh /// 5750d1ba665SWarner Losh /// The remote IPv4 address. 5760d1ba665SWarner Losh /// 5770d1ba665SWarner Losh EFI_IPv4_ADDRESS RemoteIpAddress; 5780d1ba665SWarner Losh /// 5790d1ba665SWarner Losh /// The local port number. 5800d1ba665SWarner Losh /// 5810d1ba665SWarner Losh UINT16 LocalPort; 5820d1ba665SWarner Losh /// 5830d1ba665SWarner Losh /// The remote port number. 5840d1ba665SWarner Losh /// 5850d1ba665SWarner Losh UINT16 RemotePort; 5860d1ba665SWarner Losh /// 5870d1ba665SWarner Losh /// The network protocol(i.e. UDP, TCP). 5880d1ba665SWarner Losh /// 5890d1ba665SWarner Losh UINT16 Protocol; 5900d1ba665SWarner Losh /// 5910d1ba665SWarner Losh /// 0x00 - The Source IP Address was assigned though DHCP. 5920d1ba665SWarner Losh /// 0x01 - The Source IP Address is statically bound. 5930d1ba665SWarner Losh /// 5940d1ba665SWarner Losh BOOLEAN StaticIpAddress; 5950d1ba665SWarner Losh /// 5960d1ba665SWarner Losh /// The gateway IP address 5970d1ba665SWarner Losh /// 5980d1ba665SWarner Losh EFI_IPv4_ADDRESS GatewayIpAddress; 5990d1ba665SWarner Losh /// 6000d1ba665SWarner Losh /// The subnet mask 6010d1ba665SWarner Losh /// 6020d1ba665SWarner Losh EFI_IPv4_ADDRESS SubnetMask; 6030d1ba665SWarner Losh } IPv4_DEVICE_PATH; 6040d1ba665SWarner Losh 6050d1ba665SWarner Losh /// 6060d1ba665SWarner Losh /// IPv6 Device Path SubType. 6070d1ba665SWarner Losh /// 6080d1ba665SWarner Losh #define MSG_IPv6_DP 0x0d 6090d1ba665SWarner Losh typedef struct { 6100d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 6110d1ba665SWarner Losh /// 6120d1ba665SWarner Losh /// The local IPv6 address. 6130d1ba665SWarner Losh /// 6140d1ba665SWarner Losh EFI_IPv6_ADDRESS LocalIpAddress; 6150d1ba665SWarner Losh /// 6160d1ba665SWarner Losh /// The remote IPv6 address. 6170d1ba665SWarner Losh /// 6180d1ba665SWarner Losh EFI_IPv6_ADDRESS RemoteIpAddress; 6190d1ba665SWarner Losh /// 6200d1ba665SWarner Losh /// The local port number. 6210d1ba665SWarner Losh /// 6220d1ba665SWarner Losh UINT16 LocalPort; 6230d1ba665SWarner Losh /// 6240d1ba665SWarner Losh /// The remote port number. 6250d1ba665SWarner Losh /// 6260d1ba665SWarner Losh UINT16 RemotePort; 6270d1ba665SWarner Losh /// 6280d1ba665SWarner Losh /// The network protocol(i.e. UDP, TCP). 6290d1ba665SWarner Losh /// 6300d1ba665SWarner Losh UINT16 Protocol; 6310d1ba665SWarner Losh /// 6320d1ba665SWarner Losh /// 0x00 - The Local IP Address was manually configured. 6330d1ba665SWarner Losh /// 0x01 - The Local IP Address is assigned through IPv6 6340d1ba665SWarner Losh /// stateless auto-configuration. 6350d1ba665SWarner Losh /// 0x02 - The Local IP Address is assigned through IPv6 6360d1ba665SWarner Losh /// stateful configuration. 6370d1ba665SWarner Losh /// 6380d1ba665SWarner Losh UINT8 IpAddressOrigin; 6390d1ba665SWarner Losh /// 6400d1ba665SWarner Losh /// The prefix length 6410d1ba665SWarner Losh /// 6420d1ba665SWarner Losh UINT8 PrefixLength; 6430d1ba665SWarner Losh /// 6440d1ba665SWarner Losh /// The gateway IP address 6450d1ba665SWarner Losh /// 6460d1ba665SWarner Losh EFI_IPv6_ADDRESS GatewayIpAddress; 6470d1ba665SWarner Losh } IPv6_DEVICE_PATH; 6480d1ba665SWarner Losh 6490d1ba665SWarner Losh /// 6500d1ba665SWarner Losh /// InfiniBand Device Path SubType. 6510d1ba665SWarner Losh /// 6520d1ba665SWarner Losh #define MSG_INFINIBAND_DP 0x09 6530d1ba665SWarner Losh typedef struct { 6540d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 6550d1ba665SWarner Losh /// 6560d1ba665SWarner Losh /// Flags to help identify/manage InfiniBand device path elements: 6570d1ba665SWarner Losh /// Bit 0 - IOC/Service (0b = IOC, 1b = Service). 6580d1ba665SWarner Losh /// Bit 1 - Extend Boot Environment. 6590d1ba665SWarner Losh /// Bit 2 - Console Protocol. 6600d1ba665SWarner Losh /// Bit 3 - Storage Protocol. 6610d1ba665SWarner Losh /// Bit 4 - Network Protocol. 6620d1ba665SWarner Losh /// All other bits are reserved. 6630d1ba665SWarner Losh /// 6640d1ba665SWarner Losh UINT32 ResourceFlags; 6650d1ba665SWarner Losh /// 6660d1ba665SWarner Losh /// 128-bit Global Identifier for remote fabric port. 6670d1ba665SWarner Losh /// 6680d1ba665SWarner Losh UINT8 PortGid[16]; 6690d1ba665SWarner Losh /// 6700d1ba665SWarner Losh /// 64-bit unique identifier to remote IOC or server process. 6710d1ba665SWarner Losh /// Interpretation of field specified by Resource Flags (bit 0). 6720d1ba665SWarner Losh /// 6730d1ba665SWarner Losh UINT64 ServiceId; 6740d1ba665SWarner Losh /// 6750d1ba665SWarner Losh /// 64-bit persistent ID of remote IOC port. 6760d1ba665SWarner Losh /// 6770d1ba665SWarner Losh UINT64 TargetPortId; 6780d1ba665SWarner Losh /// 6790d1ba665SWarner Losh /// 64-bit persistent ID of remote device. 6800d1ba665SWarner Losh /// 6810d1ba665SWarner Losh UINT64 DeviceId; 6820d1ba665SWarner Losh } INFINIBAND_DEVICE_PATH; 6830d1ba665SWarner Losh 6840d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_IOC_SERVICE 0x01 6850d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_EXTENDED_BOOT_ENVIRONMENT 0x02 6860d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_CONSOLE_PROTOCOL 0x04 6870d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_STORAGE_PROTOCOL 0x08 6880d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_NETWORK_PROTOCOL 0x10 6890d1ba665SWarner Losh 6900d1ba665SWarner Losh /// 6910d1ba665SWarner Losh /// UART Device Path SubType. 6920d1ba665SWarner Losh /// 6930d1ba665SWarner Losh #define MSG_UART_DP 0x0e 6940d1ba665SWarner Losh typedef struct { 6950d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 6960d1ba665SWarner Losh /// 6970d1ba665SWarner Losh /// Reserved. 6980d1ba665SWarner Losh /// 6990d1ba665SWarner Losh UINT32 Reserved; 7000d1ba665SWarner Losh /// 7010d1ba665SWarner Losh /// The baud rate setting for the UART style device. A value of 0 7020d1ba665SWarner Losh /// means that the device's default baud rate will be used. 7030d1ba665SWarner Losh /// 7040d1ba665SWarner Losh UINT64 BaudRate; 7050d1ba665SWarner Losh /// 7060d1ba665SWarner Losh /// The number of data bits for the UART style device. A value 7070d1ba665SWarner Losh /// of 0 means that the device's default number of data bits will be used. 7080d1ba665SWarner Losh /// 7090d1ba665SWarner Losh UINT8 DataBits; 7100d1ba665SWarner Losh /// 7110d1ba665SWarner Losh /// The parity setting for the UART style device. 7120d1ba665SWarner Losh /// Parity 0x00 - Default Parity. 7130d1ba665SWarner Losh /// Parity 0x01 - No Parity. 7140d1ba665SWarner Losh /// Parity 0x02 - Even Parity. 7150d1ba665SWarner Losh /// Parity 0x03 - Odd Parity. 7160d1ba665SWarner Losh /// Parity 0x04 - Mark Parity. 7170d1ba665SWarner Losh /// Parity 0x05 - Space Parity. 7180d1ba665SWarner Losh /// 7190d1ba665SWarner Losh UINT8 Parity; 7200d1ba665SWarner Losh /// 7210d1ba665SWarner Losh /// The number of stop bits for the UART style device. 7220d1ba665SWarner Losh /// Stop Bits 0x00 - Default Stop Bits. 7230d1ba665SWarner Losh /// Stop Bits 0x01 - 1 Stop Bit. 7240d1ba665SWarner Losh /// Stop Bits 0x02 - 1.5 Stop Bits. 7250d1ba665SWarner Losh /// Stop Bits 0x03 - 2 Stop Bits. 7260d1ba665SWarner Losh /// 7270d1ba665SWarner Losh UINT8 StopBits; 7280d1ba665SWarner Losh } UART_DEVICE_PATH; 7290d1ba665SWarner Losh 730*3245fa21SMitchell Horne /// 731*3245fa21SMitchell Horne /// NVDIMM Namespace Device Path SubType. 732*3245fa21SMitchell Horne /// 733*3245fa21SMitchell Horne #define NVDIMM_NAMESPACE_DP 0x20 734*3245fa21SMitchell Horne typedef struct { 735*3245fa21SMitchell Horne EFI_DEVICE_PATH_PROTOCOL Header; 736*3245fa21SMitchell Horne /// 737*3245fa21SMitchell Horne /// Namespace unique label identifier UUID. 738*3245fa21SMitchell Horne /// 739*3245fa21SMitchell Horne EFI_GUID Uuid; 740*3245fa21SMitchell Horne } NVDIMM_NAMESPACE_DEVICE_PATH; 741*3245fa21SMitchell Horne 7420d1ba665SWarner Losh // 7430d1ba665SWarner Losh // Use VENDOR_DEVICE_PATH struct 7440d1ba665SWarner Losh // 7450d1ba665SWarner Losh #define MSG_VENDOR_DP 0x0a 7460d1ba665SWarner Losh typedef VENDOR_DEVICE_PATH VENDOR_DEFINED_DEVICE_PATH; 7470d1ba665SWarner Losh 7480d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_PC_ANSI EFI_PC_ANSI_GUID 7490d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_100 EFI_VT_100_GUID 7500d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID 7510d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_UTF8 EFI_VT_UTF8_GUID 7520d1ba665SWarner Losh 7530d1ba665SWarner Losh /// 7540d1ba665SWarner Losh /// A new device path node is defined to declare flow control characteristics. 7550d1ba665SWarner Losh /// UART Flow Control Messaging Device Path 7560d1ba665SWarner Losh /// 7570d1ba665SWarner Losh typedef struct { 7580d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 7590d1ba665SWarner Losh /// 7600d1ba665SWarner Losh /// DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL GUID. 7610d1ba665SWarner Losh /// 7620d1ba665SWarner Losh EFI_GUID Guid; 7630d1ba665SWarner Losh /// 7640d1ba665SWarner Losh /// Bitmap of supported flow control types. 7650d1ba665SWarner Losh /// Bit 0 set indicates hardware flow control. 7660d1ba665SWarner Losh /// Bit 1 set indicates Xon/Xoff flow control. 7670d1ba665SWarner Losh /// All other bits are reserved and are clear. 7680d1ba665SWarner Losh /// 7690d1ba665SWarner Losh UINT32 FlowControlMap; 7700d1ba665SWarner Losh } UART_FLOW_CONTROL_DEVICE_PATH; 7710d1ba665SWarner Losh 7720d1ba665SWarner Losh #define UART_FLOW_CONTROL_HARDWARE 0x00000001 7730d1ba665SWarner Losh #define UART_FLOW_CONTROL_XON_XOFF 0x00000010 7740d1ba665SWarner Losh 7750d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_SAS EFI_SAS_DEVICE_PATH_GUID 7760d1ba665SWarner Losh /// 7770d1ba665SWarner Losh /// Serial Attached SCSI (SAS) Device Path. 7780d1ba665SWarner Losh /// 7790d1ba665SWarner Losh typedef struct { 7800d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 7810d1ba665SWarner Losh /// 7820d1ba665SWarner Losh /// DEVICE_PATH_MESSAGING_SAS GUID. 7830d1ba665SWarner Losh /// 7840d1ba665SWarner Losh EFI_GUID Guid; 7850d1ba665SWarner Losh /// 7860d1ba665SWarner Losh /// Reserved for future use. 7870d1ba665SWarner Losh /// 7880d1ba665SWarner Losh UINT32 Reserved; 7890d1ba665SWarner Losh /// 7900d1ba665SWarner Losh /// SAS Address for Serial Attached SCSI Target. 7910d1ba665SWarner Losh /// 7920d1ba665SWarner Losh UINT64 SasAddress; 7930d1ba665SWarner Losh /// 7940d1ba665SWarner Losh /// SAS Logical Unit Number. 7950d1ba665SWarner Losh /// 7960d1ba665SWarner Losh UINT64 Lun; 7970d1ba665SWarner Losh /// 7980d1ba665SWarner Losh /// More Information about the device and its interconnect. 7990d1ba665SWarner Losh /// 8000d1ba665SWarner Losh UINT16 DeviceTopology; 8010d1ba665SWarner Losh /// 8020d1ba665SWarner Losh /// Relative Target Port (RTP). 8030d1ba665SWarner Losh /// 8040d1ba665SWarner Losh UINT16 RelativeTargetPort; 8050d1ba665SWarner Losh } SAS_DEVICE_PATH; 8060d1ba665SWarner Losh 8070d1ba665SWarner Losh /// 8080d1ba665SWarner Losh /// Serial Attached SCSI (SAS) Ex Device Path SubType 8090d1ba665SWarner Losh /// 8100d1ba665SWarner Losh #define MSG_SASEX_DP 0x16 8110d1ba665SWarner Losh typedef struct { 8120d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 8130d1ba665SWarner Losh /// 8140d1ba665SWarner Losh /// 8-byte array of the SAS Address for Serial Attached SCSI Target Port. 8150d1ba665SWarner Losh /// 8160d1ba665SWarner Losh UINT8 SasAddress[8]; 8170d1ba665SWarner Losh /// 8180d1ba665SWarner Losh /// 8-byte array of the SAS Logical Unit Number. 8190d1ba665SWarner Losh /// 8200d1ba665SWarner Losh UINT8 Lun[8]; 8210d1ba665SWarner Losh /// 8220d1ba665SWarner Losh /// More Information about the device and its interconnect. 8230d1ba665SWarner Losh /// 8240d1ba665SWarner Losh UINT16 DeviceTopology; 8250d1ba665SWarner Losh /// 8260d1ba665SWarner Losh /// Relative Target Port (RTP). 8270d1ba665SWarner Losh /// 8280d1ba665SWarner Losh UINT16 RelativeTargetPort; 8290d1ba665SWarner Losh } SASEX_DEVICE_PATH; 8300d1ba665SWarner Losh 8310d1ba665SWarner Losh /// 8320d1ba665SWarner Losh /// NvmExpress Namespace Device Path SubType. 8330d1ba665SWarner Losh /// 8340d1ba665SWarner Losh #define MSG_NVME_NAMESPACE_DP 0x17 8350d1ba665SWarner Losh typedef struct { 8360d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 8370d1ba665SWarner Losh UINT32 NamespaceId; 8380d1ba665SWarner Losh UINT64 NamespaceUuid; 8390d1ba665SWarner Losh } NVME_NAMESPACE_DEVICE_PATH; 8400d1ba665SWarner Losh 8410d1ba665SWarner Losh /// 842*3245fa21SMitchell Horne /// DNS Device Path SubType 843*3245fa21SMitchell Horne /// 844*3245fa21SMitchell Horne #define MSG_DNS_DP 0x1F 845*3245fa21SMitchell Horne typedef struct { 846*3245fa21SMitchell Horne EFI_DEVICE_PATH_PROTOCOL Header; 847*3245fa21SMitchell Horne /// 848*3245fa21SMitchell Horne /// Indicates the DNS server address is IPv4 or IPv6 address. 849*3245fa21SMitchell Horne /// 850*3245fa21SMitchell Horne UINT8 IsIPv6; 851*3245fa21SMitchell Horne /// 852*3245fa21SMitchell Horne /// Instance of the DNS server address. 853*3245fa21SMitchell Horne /// 854*3245fa21SMitchell Horne EFI_IP_ADDRESS DnsServerIp[]; 855*3245fa21SMitchell Horne } DNS_DEVICE_PATH; 856*3245fa21SMitchell Horne 857*3245fa21SMitchell Horne /// 8580d1ba665SWarner Losh /// Uniform Resource Identifiers (URI) Device Path SubType 8590d1ba665SWarner Losh /// 8600d1ba665SWarner Losh #define MSG_URI_DP 0x18 8610d1ba665SWarner Losh typedef struct { 8620d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 8630d1ba665SWarner Losh /// 8640d1ba665SWarner Losh /// Instance of the URI pursuant to RFC 3986. 8650d1ba665SWarner Losh /// 8660d1ba665SWarner Losh CHAR8 Uri[]; 8670d1ba665SWarner Losh } URI_DEVICE_PATH; 8680d1ba665SWarner Losh 8690d1ba665SWarner Losh /// 8700d1ba665SWarner Losh /// Universal Flash Storage (UFS) Device Path SubType. 8710d1ba665SWarner Losh /// 8720d1ba665SWarner Losh #define MSG_UFS_DP 0x19 8730d1ba665SWarner Losh typedef struct { 8740d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 8750d1ba665SWarner Losh /// 8760d1ba665SWarner Losh /// Target ID on the UFS bus (PUN). 8770d1ba665SWarner Losh /// 8780d1ba665SWarner Losh UINT8 Pun; 8790d1ba665SWarner Losh /// 8800d1ba665SWarner Losh /// Logical Unit Number (LUN). 8810d1ba665SWarner Losh /// 8820d1ba665SWarner Losh UINT8 Lun; 8830d1ba665SWarner Losh } UFS_DEVICE_PATH; 8840d1ba665SWarner Losh 8850d1ba665SWarner Losh /// 8860d1ba665SWarner Losh /// SD (Secure Digital) Device Path SubType. 8870d1ba665SWarner Losh /// 8880d1ba665SWarner Losh #define MSG_SD_DP 0x1A 8890d1ba665SWarner Losh typedef struct { 8900d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 8910d1ba665SWarner Losh UINT8 SlotNumber; 8920d1ba665SWarner Losh } SD_DEVICE_PATH; 8930d1ba665SWarner Losh 8940d1ba665SWarner Losh /// 8950d1ba665SWarner Losh /// EMMC (Embedded MMC) Device Path SubType. 8960d1ba665SWarner Losh /// 8970d1ba665SWarner Losh #define MSG_EMMC_DP 0x1D 8980d1ba665SWarner Losh typedef struct { 8990d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 9000d1ba665SWarner Losh UINT8 SlotNumber; 9010d1ba665SWarner Losh } EMMC_DEVICE_PATH; 9020d1ba665SWarner Losh 9030d1ba665SWarner Losh /// 9040d1ba665SWarner Losh /// iSCSI Device Path SubType 9050d1ba665SWarner Losh /// 9060d1ba665SWarner Losh #define MSG_ISCSI_DP 0x13 9070d1ba665SWarner Losh typedef struct { 9080d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 9090d1ba665SWarner Losh /// 9100d1ba665SWarner Losh /// Network Protocol (0 = TCP, 1+ = reserved). 9110d1ba665SWarner Losh /// 9120d1ba665SWarner Losh UINT16 NetworkProtocol; 9130d1ba665SWarner Losh /// 9140d1ba665SWarner Losh /// iSCSI Login Options. 9150d1ba665SWarner Losh /// 9160d1ba665SWarner Losh UINT16 LoginOption; 9170d1ba665SWarner Losh /// 9180d1ba665SWarner Losh /// iSCSI Logical Unit Number. 9190d1ba665SWarner Losh /// 9200d1ba665SWarner Losh UINT64 Lun; 9210d1ba665SWarner Losh /// 9220d1ba665SWarner Losh /// iSCSI Target Portal group tag the initiator intends 9230d1ba665SWarner Losh /// to establish a session with. 9240d1ba665SWarner Losh /// 9250d1ba665SWarner Losh UINT16 TargetPortalGroupTag; 9260d1ba665SWarner Losh /// 9270d1ba665SWarner Losh /// iSCSI NodeTarget Name. The length of the name 9280d1ba665SWarner Losh /// is determined by subtracting the offset of this field from Length. 9290d1ba665SWarner Losh /// 9300d1ba665SWarner Losh /// CHAR8 iSCSI Target Name. 9310d1ba665SWarner Losh } ISCSI_DEVICE_PATH; 9320d1ba665SWarner Losh 9330d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_NO_HEADER_DIGEST 0x0000 9340d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_HEADER_DIGEST_USING_CRC32C 0x0002 9350d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_NO_DATA_DIGEST 0x0000 9360d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_DATA_DIGEST_USING_CRC32C 0x0008 9370d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_AUTHMETHOD_CHAP 0x0000 9380d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_AUTHMETHOD_NON 0x1000 9390d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_CHAP_BI 0x0000 9400d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_CHAP_UNI 0x2000 9410d1ba665SWarner Losh 9420d1ba665SWarner Losh /// 9430d1ba665SWarner Losh /// VLAN Device Path SubType. 9440d1ba665SWarner Losh /// 9450d1ba665SWarner Losh #define MSG_VLAN_DP 0x14 9460d1ba665SWarner Losh typedef struct { 9470d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 9480d1ba665SWarner Losh /// 9490d1ba665SWarner Losh /// VLAN identifier (0-4094). 9500d1ba665SWarner Losh /// 9510d1ba665SWarner Losh UINT16 VlanId; 9520d1ba665SWarner Losh } VLAN_DEVICE_PATH; 9530d1ba665SWarner Losh 9540d1ba665SWarner Losh /// 9550d1ba665SWarner Losh /// Bluetooth Device Path SubType. 9560d1ba665SWarner Losh /// 9570d1ba665SWarner Losh #define MSG_BLUETOOTH_DP 0x1b 9580d1ba665SWarner Losh typedef struct { 9590d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 9600d1ba665SWarner Losh /// 9610d1ba665SWarner Losh /// 48bit Bluetooth device address. 9620d1ba665SWarner Losh /// 9630d1ba665SWarner Losh BLUETOOTH_ADDRESS BD_ADDR; 9640d1ba665SWarner Losh } BLUETOOTH_DEVICE_PATH; 9650d1ba665SWarner Losh 9660d1ba665SWarner Losh /// 9670d1ba665SWarner Losh /// Wi-Fi Device Path SubType. 9680d1ba665SWarner Losh /// 9690d1ba665SWarner Losh #define MSG_WIFI_DP 0x1C 9700d1ba665SWarner Losh typedef struct { 9710d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 9720d1ba665SWarner Losh /// 9730d1ba665SWarner Losh /// Service set identifier. A 32-byte octets string. 9740d1ba665SWarner Losh /// 9750d1ba665SWarner Losh UINT8 SSId[32]; 9760d1ba665SWarner Losh } WIFI_DEVICE_PATH; 9770d1ba665SWarner Losh 978*3245fa21SMitchell Horne /// 979*3245fa21SMitchell Horne /// Bluetooth LE Device Path SubType. 980*3245fa21SMitchell Horne /// 981*3245fa21SMitchell Horne #define MSG_BLUETOOTH_LE_DP 0x1E 982*3245fa21SMitchell Horne typedef struct { 983*3245fa21SMitchell Horne EFI_DEVICE_PATH_PROTOCOL Header; 984*3245fa21SMitchell Horne BLUETOOTH_LE_ADDRESS Address; 985*3245fa21SMitchell Horne } BLUETOOTH_LE_DEVICE_PATH; 986*3245fa21SMitchell Horne 9870d1ba665SWarner Losh // 9880d1ba665SWarner Losh // Media Device Path 9890d1ba665SWarner Losh // 9900d1ba665SWarner Losh #define MEDIA_DEVICE_PATH 0x04 9910d1ba665SWarner Losh 9920d1ba665SWarner Losh /// 9930d1ba665SWarner Losh /// Hard Drive Media Device Path SubType. 9940d1ba665SWarner Losh /// 9950d1ba665SWarner Losh #define MEDIA_HARDDRIVE_DP 0x01 9960d1ba665SWarner Losh 9970d1ba665SWarner Losh /// 9980d1ba665SWarner Losh /// The Hard Drive Media Device Path is used to represent a partition on a hard drive. 9990d1ba665SWarner Losh /// 10000d1ba665SWarner Losh typedef struct { 10010d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 10020d1ba665SWarner Losh /// 10030d1ba665SWarner Losh /// Describes the entry in a partition table, starting with entry 1. 10040d1ba665SWarner Losh /// Partition number zero represents the entire device. Valid 10050d1ba665SWarner Losh /// partition numbers for a MBR partition are [1, 4]. Valid 10060d1ba665SWarner Losh /// partition numbers for a GPT partition are [1, NumberOfPartitionEntries]. 10070d1ba665SWarner Losh /// 10080d1ba665SWarner Losh UINT32 PartitionNumber; 10090d1ba665SWarner Losh /// 10100d1ba665SWarner Losh /// Starting LBA of the partition on the hard drive. 10110d1ba665SWarner Losh /// 10120d1ba665SWarner Losh UINT64 PartitionStart; 10130d1ba665SWarner Losh /// 10140d1ba665SWarner Losh /// Size of the partition in units of Logical Blocks. 10150d1ba665SWarner Losh /// 10160d1ba665SWarner Losh UINT64 PartitionSize; 10170d1ba665SWarner Losh /// 10180d1ba665SWarner Losh /// Signature unique to this partition: 10190d1ba665SWarner Losh /// If SignatureType is 0, this field has to be initialized with 16 zeros. 10200d1ba665SWarner Losh /// If SignatureType is 1, the MBR signature is stored in the first 4 bytes of this field. 10210d1ba665SWarner Losh /// The other 12 bytes are initialized with zeros. 10220d1ba665SWarner Losh /// If SignatureType is 2, this field contains a 16 byte signature. 10230d1ba665SWarner Losh /// 10240d1ba665SWarner Losh UINT8 Signature[16]; 10250d1ba665SWarner Losh /// 10260d1ba665SWarner Losh /// Partition Format: (Unused values reserved). 10270d1ba665SWarner Losh /// 0x01 - PC-AT compatible legacy MBR. 10280d1ba665SWarner Losh /// 0x02 - GUID Partition Table. 10290d1ba665SWarner Losh /// 10300d1ba665SWarner Losh UINT8 MBRType; 10310d1ba665SWarner Losh /// 10320d1ba665SWarner Losh /// Type of Disk Signature: (Unused values reserved). 10330d1ba665SWarner Losh /// 0x00 - No Disk Signature. 10340d1ba665SWarner Losh /// 0x01 - 32-bit signature from address 0x1b8 of the type 0x01 MBR. 10350d1ba665SWarner Losh /// 0x02 - GUID signature. 10360d1ba665SWarner Losh /// 10370d1ba665SWarner Losh UINT8 SignatureType; 10380d1ba665SWarner Losh } HARDDRIVE_DEVICE_PATH; 10390d1ba665SWarner Losh 10400d1ba665SWarner Losh #define MBR_TYPE_PCAT 0x01 10410d1ba665SWarner Losh #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02 10420d1ba665SWarner Losh 10430d1ba665SWarner Losh #define NO_DISK_SIGNATURE 0x00 10440d1ba665SWarner Losh #define SIGNATURE_TYPE_MBR 0x01 10450d1ba665SWarner Losh #define SIGNATURE_TYPE_GUID 0x02 10460d1ba665SWarner Losh 10470d1ba665SWarner Losh /// 10480d1ba665SWarner Losh /// CD-ROM Media Device Path SubType. 10490d1ba665SWarner Losh /// 10500d1ba665SWarner Losh #define MEDIA_CDROM_DP 0x02 10510d1ba665SWarner Losh 10520d1ba665SWarner Losh /// 10530d1ba665SWarner Losh /// The CD-ROM Media Device Path is used to define a system partition that exists on a CD-ROM. 10540d1ba665SWarner Losh /// 10550d1ba665SWarner Losh typedef struct { 10560d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 10570d1ba665SWarner Losh /// 10580d1ba665SWarner Losh /// Boot Entry number from the Boot Catalog. The Initial/Default entry is defined as zero. 10590d1ba665SWarner Losh /// 10600d1ba665SWarner Losh UINT32 BootEntry; 10610d1ba665SWarner Losh /// 10620d1ba665SWarner Losh /// Starting RBA of the partition on the medium. CD-ROMs use Relative logical Block Addressing. 10630d1ba665SWarner Losh /// 10640d1ba665SWarner Losh UINT64 PartitionStart; 10650d1ba665SWarner Losh /// 10660d1ba665SWarner Losh /// Size of the partition in units of Blocks, also called Sectors. 10670d1ba665SWarner Losh /// 10680d1ba665SWarner Losh UINT64 PartitionSize; 10690d1ba665SWarner Losh } CDROM_DEVICE_PATH; 10700d1ba665SWarner Losh 10710d1ba665SWarner Losh // 10720d1ba665SWarner Losh // Use VENDOR_DEVICE_PATH struct 10730d1ba665SWarner Losh // 10740d1ba665SWarner Losh #define MEDIA_VENDOR_DP 0x03 ///< Media vendor device path subtype. 10750d1ba665SWarner Losh 10760d1ba665SWarner Losh /// 10770d1ba665SWarner Losh /// File Path Media Device Path SubType 10780d1ba665SWarner Losh /// 10790d1ba665SWarner Losh #define MEDIA_FILEPATH_DP 0x04 10800d1ba665SWarner Losh typedef struct { 10810d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 10820d1ba665SWarner Losh /// 10830d1ba665SWarner Losh /// A NULL-terminated Path string including directory and file names. 10840d1ba665SWarner Losh /// 10850d1ba665SWarner Losh CHAR16 PathName[1]; 10860d1ba665SWarner Losh } FILEPATH_DEVICE_PATH; 10870d1ba665SWarner Losh 10880d1ba665SWarner Losh #define SIZE_OF_FILEPATH_DEVICE_PATH OFFSET_OF(FILEPATH_DEVICE_PATH,PathName) 10890d1ba665SWarner Losh 10900d1ba665SWarner Losh /// 10910d1ba665SWarner Losh /// Media Protocol Device Path SubType. 10920d1ba665SWarner Losh /// 10930d1ba665SWarner Losh #define MEDIA_PROTOCOL_DP 0x05 10940d1ba665SWarner Losh 10950d1ba665SWarner Losh /// 10960d1ba665SWarner Losh /// The Media Protocol Device Path is used to denote the protocol that is being 10970d1ba665SWarner Losh /// used in a device path at the location of the path specified. 10980d1ba665SWarner Losh /// Many protocols are inherent to the style of device path. 10990d1ba665SWarner Losh /// 11000d1ba665SWarner Losh typedef struct { 11010d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 11020d1ba665SWarner Losh /// 11030d1ba665SWarner Losh /// The ID of the protocol. 11040d1ba665SWarner Losh /// 11050d1ba665SWarner Losh EFI_GUID Protocol; 11060d1ba665SWarner Losh } MEDIA_PROTOCOL_DEVICE_PATH; 11070d1ba665SWarner Losh 11080d1ba665SWarner Losh /// 11090d1ba665SWarner Losh /// PIWG Firmware File SubType. 11100d1ba665SWarner Losh /// 11110d1ba665SWarner Losh #define MEDIA_PIWG_FW_FILE_DP 0x06 11120d1ba665SWarner Losh 11130d1ba665SWarner Losh /// 11140d1ba665SWarner Losh /// This device path is used by systems implementing the UEFI PI Specification 1.0 to describe a firmware file. 11150d1ba665SWarner Losh /// 11160d1ba665SWarner Losh typedef struct { 11170d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 11180d1ba665SWarner Losh /// 11190d1ba665SWarner Losh /// Firmware file name 11200d1ba665SWarner Losh /// 11210d1ba665SWarner Losh EFI_GUID FvFileName; 11220d1ba665SWarner Losh } MEDIA_FW_VOL_FILEPATH_DEVICE_PATH; 11230d1ba665SWarner Losh 11240d1ba665SWarner Losh /// 11250d1ba665SWarner Losh /// PIWG Firmware Volume Device Path SubType. 11260d1ba665SWarner Losh /// 11270d1ba665SWarner Losh #define MEDIA_PIWG_FW_VOL_DP 0x07 11280d1ba665SWarner Losh 11290d1ba665SWarner Losh /// 11300d1ba665SWarner Losh /// This device path is used by systems implementing the UEFI PI Specification 1.0 to describe a firmware volume. 11310d1ba665SWarner Losh /// 11320d1ba665SWarner Losh typedef struct { 11330d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 11340d1ba665SWarner Losh /// 11350d1ba665SWarner Losh /// Firmware volume name. 11360d1ba665SWarner Losh /// 11370d1ba665SWarner Losh EFI_GUID FvName; 11380d1ba665SWarner Losh } MEDIA_FW_VOL_DEVICE_PATH; 11390d1ba665SWarner Losh 11400d1ba665SWarner Losh /// 11410d1ba665SWarner Losh /// Media relative offset range device path. 11420d1ba665SWarner Losh /// 11430d1ba665SWarner Losh #define MEDIA_RELATIVE_OFFSET_RANGE_DP 0x08 11440d1ba665SWarner Losh 11450d1ba665SWarner Losh /// 11460d1ba665SWarner Losh /// Used to describe the offset range of media relative. 11470d1ba665SWarner Losh /// 11480d1ba665SWarner Losh typedef struct { 11490d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 11500d1ba665SWarner Losh UINT32 Reserved; 11510d1ba665SWarner Losh UINT64 StartingOffset; 11520d1ba665SWarner Losh UINT64 EndingOffset; 11530d1ba665SWarner Losh } MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH; 11540d1ba665SWarner Losh 11550d1ba665SWarner Losh /// 11560d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting a raw disk format in volatile memory. 11570d1ba665SWarner Losh /// 11580d1ba665SWarner Losh #define EFI_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE 11590d1ba665SWarner Losh 11600d1ba665SWarner Losh extern EFI_GUID gEfiVirtualDiskGuid; 11610d1ba665SWarner Losh 11620d1ba665SWarner Losh /// 11630d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting an ISO image in volatile memory. 11640d1ba665SWarner Losh /// 11650d1ba665SWarner Losh #define EFI_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE 11660d1ba665SWarner Losh 11670d1ba665SWarner Losh extern EFI_GUID gEfiVirtualCdGuid; 11680d1ba665SWarner Losh 11690d1ba665SWarner Losh /// 11700d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting a raw disk format in persistent memory. 11710d1ba665SWarner Losh /// 11720d1ba665SWarner Losh #define EFI_PERSISTENT_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT 11730d1ba665SWarner Losh 11740d1ba665SWarner Losh extern EFI_GUID gEfiPersistentVirtualDiskGuid; 11750d1ba665SWarner Losh 11760d1ba665SWarner Losh /// 11770d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting an ISO image in persistent memory. 11780d1ba665SWarner Losh /// 11790d1ba665SWarner Losh #define EFI_PERSISTENT_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT 11800d1ba665SWarner Losh 11810d1ba665SWarner Losh extern EFI_GUID gEfiPersistentVirtualCdGuid; 11820d1ba665SWarner Losh 11830d1ba665SWarner Losh /// 11840d1ba665SWarner Losh /// Media ram disk device path. 11850d1ba665SWarner Losh /// 11860d1ba665SWarner Losh #define MEDIA_RAM_DISK_DP 0x09 11870d1ba665SWarner Losh 11880d1ba665SWarner Losh /// 11890d1ba665SWarner Losh /// Used to describe the ram disk device path. 11900d1ba665SWarner Losh /// 11910d1ba665SWarner Losh typedef struct { 11920d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 11930d1ba665SWarner Losh /// 11940d1ba665SWarner Losh /// Starting Memory Address. 11950d1ba665SWarner Losh /// 11960d1ba665SWarner Losh UINT32 StartingAddr[2]; 11970d1ba665SWarner Losh /// 11980d1ba665SWarner Losh /// Ending Memory Address. 11990d1ba665SWarner Losh /// 12000d1ba665SWarner Losh UINT32 EndingAddr[2]; 12010d1ba665SWarner Losh /// 12020d1ba665SWarner Losh /// GUID that defines the type of the RAM Disk. 12030d1ba665SWarner Losh /// 12040d1ba665SWarner Losh EFI_GUID TypeGuid; 12050d1ba665SWarner Losh /// 12060d1ba665SWarner Losh /// RAM Diskinstance number, if supported. The default value is zero. 12070d1ba665SWarner Losh /// 12080d1ba665SWarner Losh UINT16 Instance; 12090d1ba665SWarner Losh } MEDIA_RAM_DISK_DEVICE_PATH; 12100d1ba665SWarner Losh 12110d1ba665SWarner Losh /// 12120d1ba665SWarner Losh /// BIOS Boot Specification Device Path. 12130d1ba665SWarner Losh /// 12140d1ba665SWarner Losh #define BBS_DEVICE_PATH 0x05 12150d1ba665SWarner Losh 12160d1ba665SWarner Losh /// 12170d1ba665SWarner Losh /// BIOS Boot Specification Device Path SubType. 12180d1ba665SWarner Losh /// 12190d1ba665SWarner Losh #define BBS_BBS_DP 0x01 12200d1ba665SWarner Losh 12210d1ba665SWarner Losh /// 12220d1ba665SWarner Losh /// This Device Path is used to describe the booting of non-EFI-aware operating systems. 12230d1ba665SWarner Losh /// 12240d1ba665SWarner Losh typedef struct { 12250d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL Header; 12260d1ba665SWarner Losh /// 12270d1ba665SWarner Losh /// Device Type as defined by the BIOS Boot Specification. 12280d1ba665SWarner Losh /// 12290d1ba665SWarner Losh UINT16 DeviceType; 12300d1ba665SWarner Losh /// 12310d1ba665SWarner Losh /// Status Flags as defined by the BIOS Boot Specification. 12320d1ba665SWarner Losh /// 12330d1ba665SWarner Losh UINT16 StatusFlag; 12340d1ba665SWarner Losh /// 12350d1ba665SWarner Losh /// Null-terminated ASCII string that describes the boot device to a user. 12360d1ba665SWarner Losh /// 12370d1ba665SWarner Losh CHAR8 String[1]; 12380d1ba665SWarner Losh } BBS_BBS_DEVICE_PATH; 12390d1ba665SWarner Losh 12400d1ba665SWarner Losh // 12410d1ba665SWarner Losh // DeviceType definitions - from BBS specification 12420d1ba665SWarner Losh // 12430d1ba665SWarner Losh #define BBS_TYPE_FLOPPY 0x01 12440d1ba665SWarner Losh #define BBS_TYPE_HARDDRIVE 0x02 12450d1ba665SWarner Losh #define BBS_TYPE_CDROM 0x03 12460d1ba665SWarner Losh #define BBS_TYPE_PCMCIA 0x04 12470d1ba665SWarner Losh #define BBS_TYPE_USB 0x05 12480d1ba665SWarner Losh #define BBS_TYPE_EMBEDDED_NETWORK 0x06 12490d1ba665SWarner Losh #define BBS_TYPE_BEV 0x80 12500d1ba665SWarner Losh #define BBS_TYPE_UNKNOWN 0xFF 12510d1ba665SWarner Losh 12520d1ba665SWarner Losh 12530d1ba665SWarner Losh /// 12540d1ba665SWarner Losh /// Union of all possible Device Paths and pointers to Device Paths. 12550d1ba665SWarner Losh /// 12560d1ba665SWarner Losh typedef union { 12570d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL DevPath; 12580d1ba665SWarner Losh PCI_DEVICE_PATH Pci; 12590d1ba665SWarner Losh PCCARD_DEVICE_PATH PcCard; 12600d1ba665SWarner Losh MEMMAP_DEVICE_PATH MemMap; 12610d1ba665SWarner Losh VENDOR_DEVICE_PATH Vendor; 12620d1ba665SWarner Losh 12630d1ba665SWarner Losh CONTROLLER_DEVICE_PATH Controller; 12640d1ba665SWarner Losh BMC_DEVICE_PATH Bmc; 12650d1ba665SWarner Losh ACPI_HID_DEVICE_PATH Acpi; 12660d1ba665SWarner Losh ACPI_EXTENDED_HID_DEVICE_PATH ExtendedAcpi; 12670d1ba665SWarner Losh ACPI_ADR_DEVICE_PATH AcpiAdr; 12680d1ba665SWarner Losh 12690d1ba665SWarner Losh ATAPI_DEVICE_PATH Atapi; 12700d1ba665SWarner Losh SCSI_DEVICE_PATH Scsi; 12710d1ba665SWarner Losh ISCSI_DEVICE_PATH Iscsi; 12720d1ba665SWarner Losh FIBRECHANNEL_DEVICE_PATH FibreChannel; 12730d1ba665SWarner Losh FIBRECHANNELEX_DEVICE_PATH FibreChannelEx; 12740d1ba665SWarner Losh 12750d1ba665SWarner Losh F1394_DEVICE_PATH F1394; 12760d1ba665SWarner Losh USB_DEVICE_PATH Usb; 12770d1ba665SWarner Losh SATA_DEVICE_PATH Sata; 12780d1ba665SWarner Losh USB_CLASS_DEVICE_PATH UsbClass; 12790d1ba665SWarner Losh USB_WWID_DEVICE_PATH UsbWwid; 12800d1ba665SWarner Losh DEVICE_LOGICAL_UNIT_DEVICE_PATH LogicUnit; 12810d1ba665SWarner Losh I2O_DEVICE_PATH I2O; 12820d1ba665SWarner Losh MAC_ADDR_DEVICE_PATH MacAddr; 12830d1ba665SWarner Losh IPv4_DEVICE_PATH Ipv4; 12840d1ba665SWarner Losh IPv6_DEVICE_PATH Ipv6; 12850d1ba665SWarner Losh VLAN_DEVICE_PATH Vlan; 12860d1ba665SWarner Losh INFINIBAND_DEVICE_PATH InfiniBand; 12870d1ba665SWarner Losh UART_DEVICE_PATH Uart; 12880d1ba665SWarner Losh UART_FLOW_CONTROL_DEVICE_PATH UartFlowControl; 12890d1ba665SWarner Losh SAS_DEVICE_PATH Sas; 12900d1ba665SWarner Losh SASEX_DEVICE_PATH SasEx; 12910d1ba665SWarner Losh NVME_NAMESPACE_DEVICE_PATH NvmeNamespace; 1292*3245fa21SMitchell Horne DNS_DEVICE_PATH Dns; 12930d1ba665SWarner Losh URI_DEVICE_PATH Uri; 12940d1ba665SWarner Losh BLUETOOTH_DEVICE_PATH Bluetooth; 12950d1ba665SWarner Losh WIFI_DEVICE_PATH WiFi; 12960d1ba665SWarner Losh UFS_DEVICE_PATH Ufs; 12970d1ba665SWarner Losh SD_DEVICE_PATH Sd; 12980d1ba665SWarner Losh EMMC_DEVICE_PATH Emmc; 12990d1ba665SWarner Losh HARDDRIVE_DEVICE_PATH HardDrive; 13000d1ba665SWarner Losh CDROM_DEVICE_PATH CD; 13010d1ba665SWarner Losh 13020d1ba665SWarner Losh FILEPATH_DEVICE_PATH FilePath; 13030d1ba665SWarner Losh MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol; 13040d1ba665SWarner Losh 13050d1ba665SWarner Losh MEDIA_FW_VOL_DEVICE_PATH FirmwareVolume; 13060d1ba665SWarner Losh MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FirmwareFile; 13070d1ba665SWarner Losh MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH Offset; 13080d1ba665SWarner Losh MEDIA_RAM_DISK_DEVICE_PATH RamDisk; 13090d1ba665SWarner Losh BBS_BBS_DEVICE_PATH Bbs; 13100d1ba665SWarner Losh } EFI_DEV_PATH; 13110d1ba665SWarner Losh 13120d1ba665SWarner Losh 13130d1ba665SWarner Losh 13140d1ba665SWarner Losh typedef union { 13150d1ba665SWarner Losh EFI_DEVICE_PATH_PROTOCOL *DevPath; 13160d1ba665SWarner Losh PCI_DEVICE_PATH *Pci; 13170d1ba665SWarner Losh PCCARD_DEVICE_PATH *PcCard; 13180d1ba665SWarner Losh MEMMAP_DEVICE_PATH *MemMap; 13190d1ba665SWarner Losh VENDOR_DEVICE_PATH *Vendor; 13200d1ba665SWarner Losh 13210d1ba665SWarner Losh CONTROLLER_DEVICE_PATH *Controller; 13220d1ba665SWarner Losh BMC_DEVICE_PATH *Bmc; 13230d1ba665SWarner Losh ACPI_HID_DEVICE_PATH *Acpi; 13240d1ba665SWarner Losh ACPI_EXTENDED_HID_DEVICE_PATH *ExtendedAcpi; 13250d1ba665SWarner Losh ACPI_ADR_DEVICE_PATH *AcpiAdr; 13260d1ba665SWarner Losh 13270d1ba665SWarner Losh ATAPI_DEVICE_PATH *Atapi; 13280d1ba665SWarner Losh SCSI_DEVICE_PATH *Scsi; 13290d1ba665SWarner Losh ISCSI_DEVICE_PATH *Iscsi; 13300d1ba665SWarner Losh FIBRECHANNEL_DEVICE_PATH *FibreChannel; 13310d1ba665SWarner Losh FIBRECHANNELEX_DEVICE_PATH *FibreChannelEx; 13320d1ba665SWarner Losh 13330d1ba665SWarner Losh F1394_DEVICE_PATH *F1394; 13340d1ba665SWarner Losh USB_DEVICE_PATH *Usb; 13350d1ba665SWarner Losh SATA_DEVICE_PATH *Sata; 13360d1ba665SWarner Losh USB_CLASS_DEVICE_PATH *UsbClass; 13370d1ba665SWarner Losh USB_WWID_DEVICE_PATH *UsbWwid; 13380d1ba665SWarner Losh DEVICE_LOGICAL_UNIT_DEVICE_PATH *LogicUnit; 13390d1ba665SWarner Losh I2O_DEVICE_PATH *I2O; 13400d1ba665SWarner Losh MAC_ADDR_DEVICE_PATH *MacAddr; 13410d1ba665SWarner Losh IPv4_DEVICE_PATH *Ipv4; 13420d1ba665SWarner Losh IPv6_DEVICE_PATH *Ipv6; 13430d1ba665SWarner Losh VLAN_DEVICE_PATH *Vlan; 13440d1ba665SWarner Losh INFINIBAND_DEVICE_PATH *InfiniBand; 13450d1ba665SWarner Losh UART_DEVICE_PATH *Uart; 13460d1ba665SWarner Losh UART_FLOW_CONTROL_DEVICE_PATH *UartFlowControl; 13470d1ba665SWarner Losh SAS_DEVICE_PATH *Sas; 13480d1ba665SWarner Losh SASEX_DEVICE_PATH *SasEx; 13490d1ba665SWarner Losh NVME_NAMESPACE_DEVICE_PATH *NvmeNamespace; 1350*3245fa21SMitchell Horne DNS_DEVICE_PATH *Dns; 13510d1ba665SWarner Losh URI_DEVICE_PATH *Uri; 13520d1ba665SWarner Losh BLUETOOTH_DEVICE_PATH *Bluetooth; 13530d1ba665SWarner Losh WIFI_DEVICE_PATH *WiFi; 13540d1ba665SWarner Losh UFS_DEVICE_PATH *Ufs; 13550d1ba665SWarner Losh SD_DEVICE_PATH *Sd; 13560d1ba665SWarner Losh EMMC_DEVICE_PATH *Emmc; 13570d1ba665SWarner Losh HARDDRIVE_DEVICE_PATH *HardDrive; 13580d1ba665SWarner Losh CDROM_DEVICE_PATH *CD; 13590d1ba665SWarner Losh 13600d1ba665SWarner Losh FILEPATH_DEVICE_PATH *FilePath; 13610d1ba665SWarner Losh MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol; 13620d1ba665SWarner Losh 13630d1ba665SWarner Losh MEDIA_FW_VOL_DEVICE_PATH *FirmwareVolume; 13640d1ba665SWarner Losh MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FirmwareFile; 13650d1ba665SWarner Losh MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *Offset; 13660d1ba665SWarner Losh MEDIA_RAM_DISK_DEVICE_PATH *RamDisk; 13670d1ba665SWarner Losh BBS_BBS_DEVICE_PATH *Bbs; 13680d1ba665SWarner Losh UINT8 *Raw; 13690d1ba665SWarner Losh } EFI_DEV_PATH_PTR; 13700d1ba665SWarner Losh 13710d1ba665SWarner Losh #pragma pack() 13720d1ba665SWarner Losh 13730d1ba665SWarner Losh #define END_DEVICE_PATH_TYPE 0x7f 13740d1ba665SWarner Losh #define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xFF 13750d1ba665SWarner Losh #define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01 13760d1ba665SWarner Losh 13770d1ba665SWarner Losh extern EFI_GUID gEfiDevicePathProtocolGuid; 13780d1ba665SWarner Losh 13790d1ba665SWarner Losh #endif 1380