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