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