1 1.1 jakllsch /* $NetBSD: efidevp.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */ 2 1.1 jakllsch 3 1.1 jakllsch #ifndef _DEVPATH_H 4 1.1 jakllsch #define _DEVPATH_H 5 1.1 jakllsch 6 1.1 jakllsch /*++ 7 1.1 jakllsch 8 1.1 jakllsch Copyright (c) 1998 Intel Corporation 9 1.1 jakllsch 10 1.1 jakllsch Module Name: 11 1.1 jakllsch 12 1.1 jakllsch devpath.h 13 1.1 jakllsch 14 1.1 jakllsch Abstract: 15 1.1 jakllsch 16 1.1 jakllsch Defines for parsing the EFI Device Path structures 17 1.1 jakllsch 18 1.1 jakllsch 19 1.1 jakllsch 20 1.1 jakllsch Revision History 21 1.1 jakllsch 22 1.1 jakllsch --*/ 23 1.1 jakllsch 24 1.1 jakllsch // 25 1.1 jakllsch // Device Path structures - Section C 26 1.1 jakllsch // 27 1.1 jakllsch 28 1.1.1.2 jmcneill typedef struct _EFI_DEVICE_PATH_PROTOCOL { 29 1.1 jakllsch UINT8 Type; 30 1.1 jakllsch UINT8 SubType; 31 1.1 jakllsch UINT8 Length[2]; 32 1.1.1.2 jmcneill } EFI_DEVICE_PATH_PROTOCOL; 33 1.1.1.2 jmcneill 34 1.1.1.2 jmcneill typedef struct _EFI_DEVICE_PATH_PROTOCOL _EFI_DEVICE_PATH; 35 1.1.1.2 jmcneill typedef EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH; 36 1.1 jakllsch 37 1.1 jakllsch #define EFI_DP_TYPE_MASK 0x7F 38 1.1 jakllsch #define EFI_DP_TYPE_UNPACKED 0x80 39 1.1 jakllsch 40 1.1 jakllsch //#define END_DEVICE_PATH_TYPE 0xff 41 1.1 jakllsch #define END_DEVICE_PATH_TYPE 0x7f 42 1.1 jakllsch //#define END_DEVICE_PATH_TYPE_UNPACKED 0x7f 43 1.1 jakllsch 44 1.1 jakllsch #define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff 45 1.1 jakllsch #define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01 46 1.1.1.2 jmcneill #define END_DEVICE_PATH_LENGTH (sizeof(EFI_DEVICE_PATH_PROTOCOL)) 47 1.1 jakllsch 48 1.1 jakllsch 49 1.1 jakllsch #define DP_IS_END_TYPE(a) 50 1.1 jakllsch #define DP_IS_END_SUBTYPE(a) ( ((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE ) 51 1.1 jakllsch 52 1.1 jakllsch #define DevicePathType(a) ( ((a)->Type) & EFI_DP_TYPE_MASK ) 53 1.1 jakllsch #define DevicePathSubType(a) ( (a)->SubType ) 54 1.1 jakllsch #define DevicePathNodeLength(a) ( ((a)->Length[0]) | ((a)->Length[1] << 8) ) 55 1.1.1.2 jmcneill #define NextDevicePathNode(a) ( (EFI_DEVICE_PATH_PROTOCOL *) ( ((UINT8 *) (a)) + DevicePathNodeLength(a))) 56 1.1 jakllsch //#define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE_UNPACKED ) 57 1.1 jakllsch #define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE ) 58 1.1 jakllsch #define IsDevicePathEndSubType(a) ( (a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE ) 59 1.1 jakllsch #define IsDevicePathEnd(a) ( IsDevicePathEndType(a) && IsDevicePathEndSubType(a) ) 60 1.1 jakllsch #define IsDevicePathUnpacked(a) ( (a)->Type & EFI_DP_TYPE_UNPACKED ) 61 1.1 jakllsch 62 1.1 jakllsch 63 1.1 jakllsch #define SetDevicePathNodeLength(a,l) { \ 64 1.1 jakllsch (a)->Length[0] = (UINT8) (l); \ 65 1.1 jakllsch (a)->Length[1] = (UINT8) ((l) >> 8); \ 66 1.1 jakllsch } 67 1.1 jakllsch 68 1.1 jakllsch #define SetDevicePathEndNode(a) { \ 69 1.1 jakllsch (a)->Type = END_DEVICE_PATH_TYPE; \ 70 1.1 jakllsch (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \ 71 1.1.1.2 jmcneill (a)->Length[0] = sizeof(EFI_DEVICE_PATH_PROTOCOL); \ 72 1.1 jakllsch (a)->Length[1] = 0; \ 73 1.1 jakllsch } 74 1.1 jakllsch 75 1.1 jakllsch 76 1.1 jakllsch /* 77 1.1.1.2 jmcneill * Hardware Device Path (UEFI 2.4 specification, version 2.4 9.3.2.) 78 1.1 jakllsch */ 79 1.1.1.2 jmcneill 80 1.1 jakllsch #define HARDWARE_DEVICE_PATH 0x01 81 1.1 jakllsch 82 1.1 jakllsch #define HW_PCI_DP 0x01 83 1.1 jakllsch typedef struct _PCI_DEVICE_PATH { 84 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 85 1.1 jakllsch UINT8 Function; 86 1.1 jakllsch UINT8 Device; 87 1.1 jakllsch } PCI_DEVICE_PATH; 88 1.1 jakllsch 89 1.1 jakllsch #define HW_PCCARD_DP 0x02 90 1.1 jakllsch typedef struct _PCCARD_DEVICE_PATH { 91 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 92 1.1.1.2 jmcneill UINT8 FunctionNumber ; 93 1.1 jakllsch } PCCARD_DEVICE_PATH; 94 1.1 jakllsch 95 1.1 jakllsch #define HW_MEMMAP_DP 0x03 96 1.1 jakllsch typedef struct _MEMMAP_DEVICE_PATH { 97 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 98 1.1 jakllsch UINT32 MemoryType; 99 1.1 jakllsch EFI_PHYSICAL_ADDRESS StartingAddress; 100 1.1 jakllsch EFI_PHYSICAL_ADDRESS EndingAddress; 101 1.1 jakllsch } MEMMAP_DEVICE_PATH; 102 1.1 jakllsch 103 1.1 jakllsch #define HW_VENDOR_DP 0x04 104 1.1 jakllsch typedef struct _VENDOR_DEVICE_PATH { 105 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 106 1.1 jakllsch EFI_GUID Guid; 107 1.1 jakllsch } VENDOR_DEVICE_PATH; 108 1.1 jakllsch 109 1.1 jakllsch #define UNKNOWN_DEVICE_GUID \ 110 1.1 jakllsch { 0xcf31fac5, 0xc24e, 0x11d2, {0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b} } 111 1.1 jakllsch 112 1.1 jakllsch typedef struct _UKNOWN_DEVICE_VENDOR_DP { 113 1.1 jakllsch VENDOR_DEVICE_PATH DevicePath; 114 1.1 jakllsch UINT8 LegacyDriveLetter; 115 1.1 jakllsch } UNKNOWN_DEVICE_VENDOR_DEVICE_PATH; 116 1.1 jakllsch 117 1.1 jakllsch #define HW_CONTROLLER_DP 0x05 118 1.1 jakllsch typedef struct _CONTROLLER_DEVICE_PATH { 119 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 120 1.1.1.2 jmcneill UINT32 Controller; 121 1.1 jakllsch } CONTROLLER_DEVICE_PATH; 122 1.1 jakllsch 123 1.1.1.2 jmcneill 124 1.1 jakllsch /* 125 1.1.1.2 jmcneill * ACPI Device Path (UEFI 2.4 specification, version 2.4 9.3.3 and 9.3.4.) 126 1.1 jakllsch */ 127 1.1.1.3 jmcneill #define ACPI_DEVICE_PATH 0x02 128 1.1 jakllsch 129 1.1 jakllsch #define ACPI_DP 0x01 130 1.1 jakllsch typedef struct _ACPI_HID_DEVICE_PATH { 131 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 132 1.1 jakllsch UINT32 HID; 133 1.1 jakllsch UINT32 UID; 134 1.1 jakllsch } ACPI_HID_DEVICE_PATH; 135 1.1 jakllsch 136 1.1.1.3 jmcneill #define EXPANDED_ACPI_DP 0x02 137 1.1 jakllsch typedef struct _EXPANDED_ACPI_HID_DEVICE_PATH { 138 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 139 1.1.1.3 jmcneill UINT32 HID; 140 1.1.1.3 jmcneill UINT32 UID; 141 1.1.1.3 jmcneill UINT32 CID; 142 1.1.1.3 jmcneill UINT8 HidStr[1]; 143 1.1 jakllsch } EXPANDED_ACPI_HID_DEVICE_PATH; 144 1.1 jakllsch 145 1.1.1.2 jmcneill #define ACPI_ADR_DP 3 146 1.1.1.2 jmcneill typedef struct _ACPI_ADR_DEVICE_PATH { 147 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ; 148 1.1.1.2 jmcneill UINT32 ADR ; 149 1.1.1.2 jmcneill } ACPI_ADR_DEVICE_PATH ; 150 1.1.1.2 jmcneill 151 1.1 jakllsch // 152 1.1 jakllsch // EISA ID Macro 153 1.1 jakllsch // EISA ID Definition 32-bits 154 1.1 jakllsch // bits[15:0] - three character compressed ASCII EISA ID. 155 1.1 jakllsch // bits[31:16] - binary number 156 1.1 jakllsch // Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z' 157 1.1 jakllsch // 158 1.1.1.2 jmcneill #define PNP_EISA_ID_CONST 0x41d0 159 1.1.1.2 jmcneill #define EISA_ID(_Name, _Num) ((UINT32) ((_Name) | (_Num) << 16)) 160 1.1 jakllsch #define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId))) 161 1.1 jakllsch 162 1.1 jakllsch #define PNP_EISA_ID_MASK 0xffff 163 1.1 jakllsch #define EISA_ID_TO_NUM(_Id) ((_Id) >> 16) 164 1.1.1.2 jmcneill 165 1.1.1.2 jmcneill 166 1.1 jakllsch /* 167 1.1.1.2 jmcneill * Messaging Device Path (UEFI 2.4 specification, version 2.4 9.3.5.) 168 1.1 jakllsch */ 169 1.1.1.2 jmcneill #define MESSAGING_DEVICE_PATH 0x03 170 1.1 jakllsch 171 1.1 jakllsch #define MSG_ATAPI_DP 0x01 172 1.1 jakllsch typedef struct _ATAPI_DEVICE_PATH { 173 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 174 1.1 jakllsch UINT8 PrimarySecondary; 175 1.1 jakllsch UINT8 SlaveMaster; 176 1.1 jakllsch UINT16 Lun; 177 1.1 jakllsch } ATAPI_DEVICE_PATH; 178 1.1 jakllsch 179 1.1 jakllsch #define MSG_SCSI_DP 0x02 180 1.1 jakllsch typedef struct _SCSI_DEVICE_PATH { 181 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 182 1.1 jakllsch UINT16 Pun; 183 1.1.1.2 jmcneill UINT16 Lun; 184 1.1 jakllsch } SCSI_DEVICE_PATH; 185 1.1 jakllsch 186 1.1 jakllsch #define MSG_FIBRECHANNEL_DP 0x03 187 1.1 jakllsch typedef struct _FIBRECHANNEL_DEVICE_PATH { 188 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 189 1.1 jakllsch UINT32 Reserved; 190 1.1 jakllsch UINT64 WWN; 191 1.1 jakllsch UINT64 Lun; 192 1.1 jakllsch } FIBRECHANNEL_DEVICE_PATH; 193 1.1 jakllsch 194 1.1.1.2 jmcneill /** 195 1.1.1.2 jmcneill * Fibre Channel Ex SubType. 196 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.5.6. 197 1.1.1.2 jmcneill */ 198 1.1.1.2 jmcneill #define MSG_FIBRECHANNELEX_DP 21 199 1.1.1.2 jmcneill typedef struct _FIBRECHANNELEX_DEVICE_PATH { 200 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ; 201 1.1.1.2 jmcneill UINT32 Reserved ; 202 1.1.1.2 jmcneill UINT8 WWN[ 8 ] ; /* World Wide Name */ 203 1.1.1.2 jmcneill UINT8 Lun[ 8 ] ; /* Logical unit, T-10 SCSI Architecture Model 4 specification */ 204 1.1.1.2 jmcneill } FIBRECHANNELEX_DEVICE_PATH ; 205 1.1.1.2 jmcneill 206 1.1 jakllsch #define MSG_1394_DP 0x04 207 1.1 jakllsch typedef struct _F1394_DEVICE_PATH { 208 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 209 1.1 jakllsch UINT32 Reserved; 210 1.1 jakllsch UINT64 Guid; 211 1.1 jakllsch } F1394_DEVICE_PATH; 212 1.1 jakllsch 213 1.1 jakllsch #define MSG_USB_DP 0x05 214 1.1 jakllsch typedef struct _USB_DEVICE_PATH { 215 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 216 1.1 jakllsch UINT8 Port; 217 1.1 jakllsch UINT8 Endpoint; 218 1.1 jakllsch } USB_DEVICE_PATH; 219 1.1 jakllsch 220 1.1.1.2 jmcneill /** 221 1.1.1.2 jmcneill * SATA Device Path SubType. 222 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.5.6. 223 1.1.1.2 jmcneill */ 224 1.1.1.2 jmcneill #define MSG_SATA_DP 18 225 1.1.1.2 jmcneill typedef struct _SATA_DEVICE_PATH { 226 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ; 227 1.1.1.2 jmcneill UINT16 HBAPortNumber ; 228 1.1.1.2 jmcneill UINT16 PortMultiplierPortNumber ; 229 1.1.1.2 jmcneill UINT16 Lun ; /* Logical Unit Number */ 230 1.1.1.2 jmcneill } SATA_DEVICE_PATH ; 231 1.1.1.2 jmcneill 232 1.1.1.2 jmcneill /** 233 1.1.1.2 jmcneill * USB WWID Device Path SubType. 234 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.5.7. 235 1.1.1.2 jmcneill */ 236 1.1.1.2 jmcneill #define MSG_USB_WWID_DP 16 237 1.1.1.2 jmcneill typedef struct _USB_WWID_DEVICE_PATH { 238 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ; 239 1.1.1.2 jmcneill UINT16 InterfaceNumber ; 240 1.1.1.2 jmcneill UINT16 VendorId ; 241 1.1.1.2 jmcneill UINT16 ProductId ; 242 1.1.1.2 jmcneill CHAR16 SerialNumber[ 1 ] ; /* UTF-16 characters of the USB serial number */ 243 1.1.1.2 jmcneill } USB_WWID_DEVICE_PATH ; 244 1.1.1.2 jmcneill 245 1.1.1.2 jmcneill /** 246 1.1.1.2 jmcneill * Device Logical Unit SubType. 247 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.5.8. 248 1.1.1.2 jmcneill */ 249 1.1.1.2 jmcneill #define MSG_DEVICE_LOGICAL_UNIT_DP 17 250 1.1.1.2 jmcneill typedef struct _DEVICE_LOGICAL_UNIT_DEVICE_PATH { 251 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ; 252 1.1.1.2 jmcneill UINT8 Lun ; /* Logical Unit Number */ 253 1.1.1.2 jmcneill } DEVICE_LOGICAL_UNIT_DEVICE_PATH ; 254 1.1.1.2 jmcneill 255 1.1 jakllsch #define MSG_USB_CLASS_DP 0x0F 256 1.1 jakllsch typedef struct _USB_CLASS_DEVICE_PATH { 257 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 258 1.1 jakllsch UINT16 VendorId; 259 1.1 jakllsch UINT16 ProductId; 260 1.1 jakllsch UINT8 DeviceClass; 261 1.1 jakllsch UINT8 DeviceSubclass; 262 1.1 jakllsch UINT8 DeviceProtocol; 263 1.1 jakllsch } USB_CLASS_DEVICE_PATH; 264 1.1 jakllsch 265 1.1 jakllsch #define MSG_I2O_DP 0x06 266 1.1 jakllsch typedef struct _I2O_DEVICE_PATH { 267 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 268 1.1 jakllsch UINT32 Tid; 269 1.1 jakllsch } I2O_DEVICE_PATH; 270 1.1 jakllsch 271 1.1 jakllsch #define MSG_MAC_ADDR_DP 0x0b 272 1.1 jakllsch typedef struct _MAC_ADDR_DEVICE_PATH { 273 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 274 1.1 jakllsch EFI_MAC_ADDRESS MacAddress; 275 1.1 jakllsch UINT8 IfType; 276 1.1 jakllsch } MAC_ADDR_DEVICE_PATH; 277 1.1 jakllsch 278 1.1 jakllsch #define MSG_IPv4_DP 0x0c 279 1.1 jakllsch typedef struct _IPv4_DEVICE_PATH { 280 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 281 1.1 jakllsch EFI_IPv4_ADDRESS LocalIpAddress; 282 1.1 jakllsch EFI_IPv4_ADDRESS RemoteIpAddress; 283 1.1 jakllsch UINT16 LocalPort; 284 1.1 jakllsch UINT16 RemotePort; 285 1.1 jakllsch UINT16 Protocol; 286 1.1 jakllsch BOOLEAN StaticIpAddress; 287 1.1.1.2 jmcneill /* new from UEFI version 2, code must check Length field in Header */ 288 1.1.1.2 jmcneill EFI_IPv4_ADDRESS GatewayIpAddress ; 289 1.1.1.2 jmcneill EFI_IPv4_ADDRESS SubnetMask ; 290 1.1 jakllsch } IPv4_DEVICE_PATH; 291 1.1 jakllsch 292 1.1 jakllsch #define MSG_IPv6_DP 0x0d 293 1.1 jakllsch typedef struct _IPv6_DEVICE_PATH { 294 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 295 1.1 jakllsch EFI_IPv6_ADDRESS LocalIpAddress; 296 1.1 jakllsch EFI_IPv6_ADDRESS RemoteIpAddress; 297 1.1 jakllsch UINT16 LocalPort; 298 1.1 jakllsch UINT16 RemotePort; 299 1.1 jakllsch UINT16 Protocol; 300 1.1.1.2 jmcneill BOOLEAN IPAddressOrigin ; 301 1.1.1.2 jmcneill /* new from UEFI version 2, code must check Length field in Header */ 302 1.1.1.2 jmcneill UINT8 PrefixLength ; 303 1.1.1.2 jmcneill EFI_IPv6_ADDRESS GatewayIpAddress ; 304 1.1 jakllsch } IPv6_DEVICE_PATH; 305 1.1 jakllsch 306 1.1.1.2 jmcneill 307 1.1.1.2 jmcneill /** 308 1.1.1.2 jmcneill * Uniform Resource Identifiers SubType. 309 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4C 9.3.5.23. 310 1.1.1.2 jmcneill */ 311 1.1.1.2 jmcneill #define MSG_URI_DP 24 312 1.1.1.2 jmcneill typedef struct _URI_DEVICE_PATH { 313 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 314 1.1.1.2 jmcneill CHAR8 Uri[1]; 315 1.1.1.2 jmcneill } URI_DEVICE_PATH; 316 1.1.1.2 jmcneill 317 1.1.1.2 jmcneill /** 318 1.1.1.2 jmcneill * Device Logical Unit SubType. 319 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.5.8. 320 1.1.1.2 jmcneill */ 321 1.1.1.2 jmcneill #define MSG_VLAN_DP 20 322 1.1.1.2 jmcneill typedef struct _VLAN_DEVICE_PATH { 323 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ; 324 1.1.1.2 jmcneill UINT16 VlanId ; 325 1.1.1.2 jmcneill } VLAN_DEVICE_PATH; 326 1.1.1.2 jmcneill 327 1.1 jakllsch #define MSG_INFINIBAND_DP 0x09 328 1.1 jakllsch typedef struct _INFINIBAND_DEVICE_PATH { 329 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 330 1.1.1.3 jmcneill UINT32 ResourceFlags; 331 1.1.1.3 jmcneill UINT8 PortGid[16]; 332 1.1.1.3 jmcneill UINT64 ServiceId; 333 1.1.1.3 jmcneill UINT64 TargetPortId; 334 1.1.1.3 jmcneill UINT64 DeviceId; 335 1.1 jakllsch } INFINIBAND_DEVICE_PATH; 336 1.1 jakllsch 337 1.1 jakllsch #define MSG_UART_DP 0x0e 338 1.1 jakllsch typedef struct _UART_DEVICE_PATH { 339 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 340 1.1 jakllsch UINT32 Reserved; 341 1.1 jakllsch UINT64 BaudRate; 342 1.1 jakllsch UINT8 DataBits; 343 1.1 jakllsch UINT8 Parity; 344 1.1 jakllsch UINT8 StopBits; 345 1.1 jakllsch } UART_DEVICE_PATH; 346 1.1 jakllsch 347 1.1 jakllsch #define MSG_VENDOR_DP 0x0A 348 1.1 jakllsch /* Use VENDOR_DEVICE_PATH struct */ 349 1.1 jakllsch 350 1.1.1.2 jmcneill #define EFI_PC_ANSI_GUID \ 351 1.1.1.2 jmcneill { 0xe0c14753, 0xf9be, 0x11d2, {0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 352 1.1.1.2 jmcneill #define DEVICE_PATH_MESSAGING_PC_ANSI EFI_PC_ANSI_GUID 353 1.1.1.2 jmcneill 354 1.1.1.2 jmcneill #define EFI_VT_100_GUID \ 355 1.1.1.2 jmcneill { 0xdfa66065, 0xb419, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 356 1.1.1.2 jmcneill #define DEVICE_PATH_MESSAGING_VT_100 EFI_VT_100_GUID 357 1.1.1.2 jmcneill 358 1.1.1.2 jmcneill #define EFI_VT_100_PLUS_GUID \ 359 1.1.1.2 jmcneill { 0x7baec70b, 0x57e0, 0x4c76, {0x8e, 0x87, 0x2f, 0x9e, 0x28, 0x08, 0x83, 0x43} } 360 1.1.1.2 jmcneill #define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID 361 1.1.1.2 jmcneill 362 1.1.1.2 jmcneill #define EFI_VT_UTF8_GUID \ 363 1.1.1.2 jmcneill { 0xad15a0d6, 0x8bec, 0x4acf, {0xa0, 0x73, 0xd0, 0x1d, 0xe7, 0x7e, 0x2d, 0x88} } 364 1.1.1.2 jmcneill #define DEVICE_PATH_MESSAGING_VT_UTF8 EFI_VT_UTF8_GUID 365 1.1 jakllsch 366 1.1 jakllsch 367 1.1.1.2 jmcneill /* 368 1.1.1.2 jmcneill * Media Device Path (UEFI 2.4 specification, version 2.4 9.3.6.) 369 1.1.1.2 jmcneill */ 370 1.1 jakllsch #define MEDIA_DEVICE_PATH 0x04 371 1.1 jakllsch 372 1.1 jakllsch #define MEDIA_HARDDRIVE_DP 0x01 373 1.1 jakllsch typedef struct _HARDDRIVE_DEVICE_PATH { 374 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 375 1.1 jakllsch UINT32 PartitionNumber; 376 1.1 jakllsch UINT64 PartitionStart; 377 1.1 jakllsch UINT64 PartitionSize; 378 1.1 jakllsch UINT8 Signature[16]; 379 1.1 jakllsch UINT8 MBRType; 380 1.1 jakllsch UINT8 SignatureType; 381 1.1 jakllsch } HARDDRIVE_DEVICE_PATH; 382 1.1 jakllsch 383 1.1 jakllsch #define MBR_TYPE_PCAT 0x01 384 1.1 jakllsch #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02 385 1.1 jakllsch 386 1.1 jakllsch #define SIGNATURE_TYPE_MBR 0x01 387 1.1 jakllsch #define SIGNATURE_TYPE_GUID 0x02 388 1.1 jakllsch 389 1.1 jakllsch #define MEDIA_CDROM_DP 0x02 390 1.1 jakllsch typedef struct _CDROM_DEVICE_PATH { 391 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 392 1.1 jakllsch UINT32 BootEntry; 393 1.1 jakllsch UINT64 PartitionStart; 394 1.1 jakllsch UINT64 PartitionSize; 395 1.1 jakllsch } CDROM_DEVICE_PATH; 396 1.1 jakllsch 397 1.1 jakllsch #define MEDIA_VENDOR_DP 0x03 398 1.1 jakllsch /* Use VENDOR_DEVICE_PATH struct */ 399 1.1 jakllsch 400 1.1 jakllsch #define MEDIA_FILEPATH_DP 0x04 401 1.1 jakllsch typedef struct _FILEPATH_DEVICE_PATH { 402 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 403 1.1 jakllsch CHAR16 PathName[1]; 404 1.1 jakllsch } FILEPATH_DEVICE_PATH; 405 1.1 jakllsch 406 1.1 jakllsch #define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName) 407 1.1 jakllsch 408 1.1 jakllsch #define MEDIA_PROTOCOL_DP 0x05 409 1.1 jakllsch typedef struct _MEDIA_PROTOCOL_DEVICE_PATH { 410 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 411 1.1 jakllsch EFI_GUID Protocol; 412 1.1 jakllsch } MEDIA_PROTOCOL_DEVICE_PATH; 413 1.1 jakllsch 414 1.1.1.2 jmcneill /** 415 1.1.1.2 jmcneill * PIWG Firmware File SubType. 416 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.6.6. 417 1.1.1.2 jmcneill */ 418 1.1.1.2 jmcneill #define MEDIA_PIWG_FW_FILE_DP 6 419 1.1.1.2 jmcneill typedef struct _MEDIA_FW_VOL_FILEPATH_DEVICE_PATH { 420 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ; 421 1.1.1.2 jmcneill EFI_GUID FvFileName ; 422 1.1.1.2 jmcneill } MEDIA_FW_VOL_FILEPATH_DEVICE_PATH ; 423 1.1.1.2 jmcneill 424 1.1.1.2 jmcneill /** 425 1.1.1.2 jmcneill * PIWG Firmware Volume Device Path SubType. 426 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.6.7. 427 1.1.1.2 jmcneill */ 428 1.1.1.2 jmcneill #define MEDIA_PIWG_FW_VOL_DP 7 429 1.1.1.2 jmcneill typedef struct _MEDIA_FW_VOL_DEVICE_PATH { 430 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ; 431 1.1.1.2 jmcneill EFI_GUID FvName ; 432 1.1.1.2 jmcneill } MEDIA_FW_VOL_DEVICE_PATH ; 433 1.1.1.2 jmcneill 434 1.1.1.2 jmcneill /** 435 1.1.1.2 jmcneill * Media relative offset range device path. 436 1.1.1.2 jmcneill * UEFI 2.0 specification version 2.4 9.3.6.8. 437 1.1.1.2 jmcneill */ 438 1.1.1.2 jmcneill #define MEDIA_RELATIVE_OFFSET_RANGE_DP 8 439 1.1.1.2 jmcneill typedef struct _MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH { 440 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header ; 441 1.1.1.2 jmcneill UINT32 Reserved ; 442 1.1.1.2 jmcneill UINT64 StartingOffset ; 443 1.1.1.2 jmcneill UINT64 EndingOffset ; 444 1.1.1.2 jmcneill } MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH ; 445 1.1.1.2 jmcneill 446 1.1 jakllsch 447 1.1.1.2 jmcneill /* 448 1.1.1.2 jmcneill * BIOS Boot Specification Device Path (UEFI 2.4 specification, version 2.4 9.3.7.) 449 1.1.1.2 jmcneill */ 450 1.1 jakllsch #define BBS_DEVICE_PATH 0x05 451 1.1.1.2 jmcneill 452 1.1 jakllsch #define BBS_BBS_DP 0x01 453 1.1 jakllsch typedef struct _BBS_BBS_DEVICE_PATH { 454 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL Header; 455 1.1 jakllsch UINT16 DeviceType; 456 1.1 jakllsch UINT16 StatusFlag; 457 1.1 jakllsch CHAR8 String[1]; 458 1.1 jakllsch } BBS_BBS_DEVICE_PATH; 459 1.1 jakllsch 460 1.1 jakllsch /* DeviceType definitions - from BBS specification */ 461 1.1 jakllsch #define BBS_TYPE_FLOPPY 0x01 462 1.1 jakllsch #define BBS_TYPE_HARDDRIVE 0x02 463 1.1 jakllsch #define BBS_TYPE_CDROM 0x03 464 1.1 jakllsch #define BBS_TYPE_PCMCIA 0x04 465 1.1 jakllsch #define BBS_TYPE_USB 0x05 466 1.1 jakllsch #define BBS_TYPE_EMBEDDED_NETWORK 0x06 467 1.1 jakllsch #define BBS_TYPE_DEV 0x80 468 1.1 jakllsch #define BBS_TYPE_UNKNOWN 0xFF 469 1.1 jakllsch 470 1.1 jakllsch typedef union { 471 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL DevPath; 472 1.1 jakllsch PCI_DEVICE_PATH Pci; 473 1.1 jakllsch PCCARD_DEVICE_PATH PcCard; 474 1.1 jakllsch MEMMAP_DEVICE_PATH MemMap; 475 1.1 jakllsch VENDOR_DEVICE_PATH Vendor; 476 1.1.1.2 jmcneill UNKNOWN_DEVICE_VENDOR_DEVICE_PATH UnknownVendor; 477 1.1 jakllsch CONTROLLER_DEVICE_PATH Controller; 478 1.1 jakllsch ACPI_HID_DEVICE_PATH Acpi; 479 1.1 jakllsch 480 1.1 jakllsch ATAPI_DEVICE_PATH Atapi; 481 1.1 jakllsch SCSI_DEVICE_PATH Scsi; 482 1.1 jakllsch FIBRECHANNEL_DEVICE_PATH FibreChannel; 483 1.1 jakllsch 484 1.1 jakllsch F1394_DEVICE_PATH F1394; 485 1.1 jakllsch USB_DEVICE_PATH Usb; 486 1.1 jakllsch USB_CLASS_DEVICE_PATH UsbClass; 487 1.1 jakllsch I2O_DEVICE_PATH I2O; 488 1.1 jakllsch MAC_ADDR_DEVICE_PATH MacAddr; 489 1.1 jakllsch IPv4_DEVICE_PATH Ipv4; 490 1.1 jakllsch IPv6_DEVICE_PATH Ipv6; 491 1.1.1.2 jmcneill URI_DEVICE_PATH Uri; 492 1.1 jakllsch INFINIBAND_DEVICE_PATH InfiniBand; 493 1.1 jakllsch UART_DEVICE_PATH Uart; 494 1.1 jakllsch 495 1.1 jakllsch HARDDRIVE_DEVICE_PATH HardDrive; 496 1.1 jakllsch CDROM_DEVICE_PATH CD; 497 1.1 jakllsch 498 1.1 jakllsch FILEPATH_DEVICE_PATH FilePath; 499 1.1 jakllsch MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol; 500 1.1 jakllsch 501 1.1 jakllsch BBS_BBS_DEVICE_PATH Bbs; 502 1.1 jakllsch 503 1.1 jakllsch } EFI_DEV_PATH; 504 1.1 jakllsch 505 1.1 jakllsch typedef union { 506 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL *DevPath; 507 1.1 jakllsch PCI_DEVICE_PATH *Pci; 508 1.1 jakllsch PCCARD_DEVICE_PATH *PcCard; 509 1.1 jakllsch MEMMAP_DEVICE_PATH *MemMap; 510 1.1 jakllsch VENDOR_DEVICE_PATH *Vendor; 511 1.1.1.2 jmcneill UNKNOWN_DEVICE_VENDOR_DEVICE_PATH *UnknownVendor; 512 1.1 jakllsch CONTROLLER_DEVICE_PATH *Controller; 513 1.1 jakllsch ACPI_HID_DEVICE_PATH *Acpi; 514 1.1 jakllsch 515 1.1 jakllsch ATAPI_DEVICE_PATH *Atapi; 516 1.1 jakllsch SCSI_DEVICE_PATH *Scsi; 517 1.1 jakllsch FIBRECHANNEL_DEVICE_PATH *FibreChannel; 518 1.1 jakllsch 519 1.1 jakllsch F1394_DEVICE_PATH *F1394; 520 1.1 jakllsch USB_DEVICE_PATH *Usb; 521 1.1 jakllsch USB_CLASS_DEVICE_PATH *UsbClass; 522 1.1 jakllsch I2O_DEVICE_PATH *I2O; 523 1.1 jakllsch MAC_ADDR_DEVICE_PATH *MacAddr; 524 1.1 jakllsch IPv4_DEVICE_PATH *Ipv4; 525 1.1 jakllsch IPv6_DEVICE_PATH *Ipv6; 526 1.1.1.2 jmcneill URI_DEVICE_PATH *Uri; 527 1.1 jakllsch INFINIBAND_DEVICE_PATH *InfiniBand; 528 1.1 jakllsch UART_DEVICE_PATH *Uart; 529 1.1 jakllsch 530 1.1 jakllsch HARDDRIVE_DEVICE_PATH *HardDrive; 531 1.1 jakllsch 532 1.1 jakllsch FILEPATH_DEVICE_PATH *FilePath; 533 1.1 jakllsch MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol; 534 1.1 jakllsch 535 1.1 jakllsch CDROM_DEVICE_PATH *CD; 536 1.1 jakllsch BBS_BBS_DEVICE_PATH *Bbs; 537 1.1 jakllsch 538 1.1 jakllsch } EFI_DEV_PATH_PTR; 539 1.1 jakllsch 540 1.1.1.2 jmcneill #define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID \ 541 1.1.1.2 jmcneill { 0x8b843e20, 0x8132, 0x4852, {0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c} } 542 1.1.1.2 jmcneill 543 1.1.1.2 jmcneill typedef 544 1.1.1.2 jmcneill CHAR16* 545 1.1.1.2 jmcneill (EFIAPI *EFI_DEVICE_PATH_TO_TEXT_NODE) ( 546 1.1.1.2 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DeviceNode, 547 1.1.1.2 jmcneill IN BOOLEAN DisplayOnly, 548 1.1.1.2 jmcneill IN BOOLEAN AllowShortcuts 549 1.1.1.2 jmcneill ); 550 1.1.1.2 jmcneill 551 1.1.1.2 jmcneill typedef 552 1.1.1.2 jmcneill CHAR16* 553 1.1.1.2 jmcneill (EFIAPI *EFI_DEVICE_PATH_TO_TEXT_PATH) ( 554 1.1.1.2 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, 555 1.1.1.2 jmcneill IN BOOLEAN DisplayOnly, 556 1.1.1.2 jmcneill IN BOOLEAN AllowShortcuts 557 1.1.1.2 jmcneill ); 558 1.1.1.2 jmcneill 559 1.1.1.2 jmcneill typedef struct _EFI_DEVICE_PATH_TO_TEXT_PROTOCOL { 560 1.1.1.3 jmcneill EFI_DEVICE_PATH_TO_TEXT_NODE ConvertDeviceNodeToText; 561 1.1.1.3 jmcneill EFI_DEVICE_PATH_TO_TEXT_PATH ConvertDevicePathToText; 562 1.1.1.2 jmcneill } EFI_DEVICE_PATH_TO_TEXT_PROTOCOL; 563 1.1.1.2 jmcneill 564 1.1.1.2 jmcneill #define EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL_GUID \ 565 1.1.1.2 jmcneill { 0x5c99a21, 0xc70f, 0x4ad2, {0x8a, 0x5f, 0x35, 0xdf, 0x33, 0x43, 0xf5, 0x1e} } 566 1.1.1.2 jmcneill 567 1.1.1.2 jmcneill typedef 568 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL* 569 1.1.1.2 jmcneill (EFIAPI *EFI_DEVICE_PATH_FROM_TEXT_NODE) ( 570 1.1.1.2 jmcneill IN CONST CHAR16 *TextDeviceNode 571 1.1.1.2 jmcneill ); 572 1.1.1.2 jmcneill 573 1.1.1.2 jmcneill typedef 574 1.1.1.2 jmcneill EFI_DEVICE_PATH_PROTOCOL* 575 1.1.1.2 jmcneill (EFIAPI *EFI_DEVICE_PATH_FROM_TEXT_PATH) ( 576 1.1.1.2 jmcneill IN CONST CHAR16 *TextDevicePath 577 1.1.1.2 jmcneill ); 578 1.1.1.2 jmcneill 579 1.1.1.2 jmcneill typedef struct { 580 1.1.1.2 jmcneill EFI_DEVICE_PATH_FROM_TEXT_NODE ConvertTextToDeviceNode; 581 1.1.1.2 jmcneill EFI_DEVICE_PATH_FROM_TEXT_PATH ConvertTextToDevicePath; 582 1.1.1.2 jmcneill } EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL; 583 1.1 jakllsch 584 1.1.1.3 jmcneill #define EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID \ 585 1.1.1.3 jmcneill { 0x379be4e, 0xd706, 0x437d, {0xb0, 0x37, 0xed, 0xb8, 0x2f, 0xb7, 0x72, 0xa4} } 586 1.1.1.3 jmcneill 587 1.1.1.3 jmcneill typedef 588 1.1.1.3 jmcneill UINTN 589 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE) ( 590 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath 591 1.1.1.3 jmcneill ); 592 1.1.1.3 jmcneill 593 1.1.1.3 jmcneill typedef 594 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL* 595 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH) ( 596 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath 597 1.1.1.3 jmcneill ); 598 1.1.1.3 jmcneill 599 1.1.1.3 jmcneill typedef 600 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL* 601 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_PATH) ( 602 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *Src1, 603 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *Src2 604 1.1.1.3 jmcneill ); 605 1.1.1.3 jmcneill 606 1.1.1.3 jmcneill typedef 607 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL* 608 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_NODE) ( 609 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, 610 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DeviceNode 611 1.1.1.3 jmcneill ); 612 1.1.1.3 jmcneill 613 1.1.1.3 jmcneill typedef 614 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL* 615 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_INSTANCE) ( 616 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, 617 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePathInstance 618 1.1.1.3 jmcneill ); 619 1.1.1.3 jmcneill 620 1.1.1.3 jmcneill typedef 621 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL* 622 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE) ( 623 1.1.1.3 jmcneill IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathInstance, 624 1.1.1.3 jmcneill OUT UINTN *DevicePathInstanceSize OPTIONAL 625 1.1.1.3 jmcneill ); 626 1.1.1.3 jmcneill 627 1.1.1.3 jmcneill typedef 628 1.1.1.3 jmcneill EFI_DEVICE_PATH_PROTOCOL* 629 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_CREATE_NODE) ( 630 1.1.1.3 jmcneill IN UINT8 NodeType, 631 1.1.1.3 jmcneill IN UINT8 NodeSubType, 632 1.1.1.3 jmcneill IN UINT16 NodeLength 633 1.1.1.3 jmcneill ); 634 1.1.1.3 jmcneill 635 1.1.1.3 jmcneill typedef 636 1.1.1.3 jmcneill BOOLEAN 637 1.1.1.3 jmcneill (EFIAPI *EFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE) ( 638 1.1.1.3 jmcneill IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath 639 1.1.1.3 jmcneill ); 640 1.1.1.3 jmcneill 641 1.1.1.3 jmcneill typedef struct _EFI_DEVICE_PATH_UTILITIES_PROTOCOL { 642 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE GetDevicePathSize; 643 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH DuplicateDevicePath; 644 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_APPEND_PATH AppendDevicePath; 645 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_APPEND_NODE AppendDeviceNode; 646 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_APPEND_INSTANCE AppendDevicePathInstance; 647 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE GetNextDevicePathInstance; 648 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE IsDevicePathMultiInstance; 649 1.1.1.3 jmcneill EFI_DEVICE_PATH_UTILS_CREATE_NODE CreateDeviceNode; 650 1.1.1.3 jmcneill } EFI_DEVICE_PATH_UTILITIES_PROTOCOL; 651 1.1.1.3 jmcneill 652 1.1 jakllsch #endif 653