File indexing completed on 2025-05-11 08:24:05
0001
0002 #ifndef _DEVPATH_H
0003 #define _DEVPATH_H
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 #pragma pack(1)
0035
0036 typedef struct _EFI_DEVICE_PATH {
0037 UINT8 Type;
0038 UINT8 SubType;
0039 UINT8 Length[2];
0040 } EFI_DEVICE_PATH;
0041
0042 #define EFI_DP_TYPE_MASK 0x7F
0043 #define EFI_DP_TYPE_UNPACKED 0x80
0044
0045 #define END_DEVICE_PATH_TYPE 0x7f
0046
0047 #define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff
0048 #define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01
0049 #define END_DEVICE_PATH_LENGTH (sizeof(EFI_DEVICE_PATH))
0050
0051
0052 #define DP_IS_END_TYPE(a)
0053 #define DP_IS_END_SUBTYPE(a) ( ((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE )
0054
0055 #define DevicePathType(a) ( ((a)->Type) & EFI_DP_TYPE_MASK )
0056 #define DevicePathSubType(a) ( (a)->SubType )
0057 #define DevicePathNodeLength(a) ((size_t)(((a)->Length[0]) | ((a)->Length[1] << 8)))
0058 #define NextDevicePathNode(a) ( (EFI_DEVICE_PATH *) ( ((UINT8 *) (a)) + DevicePathNodeLength(a)))
0059 #define IsDevicePathType(a, t) ( DevicePathType(a) == t )
0060 #define IsDevicePathEndType(a) IsDevicePathType(a, END_DEVICE_PATH_TYPE)
0061 #define IsDevicePathEndSubType(a) ( (a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE )
0062 #define IsDevicePathEnd(a) ( IsDevicePathEndType(a) && IsDevicePathEndSubType(a) )
0063 #define IsDevicePathUnpacked(a) ( (a)->Type & EFI_DP_TYPE_UNPACKED )
0064
0065
0066 #define SetDevicePathNodeLength(a,l) { \
0067 (a)->Length[0] = (UINT8) (l); \
0068 (a)->Length[1] = (UINT8) ((l) >> 8); \
0069 }
0070
0071 #define SetDevicePathEndNode(a) { \
0072 (a)->Type = END_DEVICE_PATH_TYPE; \
0073 (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \
0074 (a)->Length[0] = sizeof(EFI_DEVICE_PATH); \
0075 (a)->Length[1] = 0; \
0076 }
0077
0078
0079
0080
0081 #define HARDWARE_DEVICE_PATH 0x01
0082
0083 #define HW_PCI_DP 0x01
0084 typedef struct _PCI_DEVICE_PATH {
0085 EFI_DEVICE_PATH Header;
0086 UINT8 Function;
0087 UINT8 Device;
0088 } PCI_DEVICE_PATH;
0089
0090 #define HW_PCCARD_DP 0x02
0091 typedef struct _PCCARD_DEVICE_PATH {
0092 EFI_DEVICE_PATH Header;
0093 UINT8 FunctionNumber;
0094 } PCCARD_DEVICE_PATH;
0095
0096 #define HW_MEMMAP_DP 0x03
0097 typedef struct _MEMMAP_DEVICE_PATH {
0098 EFI_DEVICE_PATH Header;
0099 UINT32 MemoryType;
0100 EFI_PHYSICAL_ADDRESS StartingAddress;
0101 EFI_PHYSICAL_ADDRESS EndingAddress;
0102 } MEMMAP_DEVICE_PATH;
0103
0104 #define HW_VENDOR_DP 0x04
0105 typedef struct _VENDOR_DEVICE_PATH {
0106 EFI_DEVICE_PATH Header;
0107 EFI_GUID Guid;
0108 } VENDOR_DEVICE_PATH;
0109
0110 #define UNKNOWN_DEVICE_GUID \
0111 { 0xcf31fac5, 0xc24e, 0x11d2, {0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b} }
0112
0113 typedef struct _UKNOWN_DEVICE_VENDOR_DP {
0114 VENDOR_DEVICE_PATH DevicePath;
0115 UINT8 LegacyDriveLetter;
0116 } UNKNOWN_DEVICE_VENDOR_DEVICE_PATH;
0117
0118 #define HW_CONTROLLER_DP 0x05
0119 typedef struct _CONTROLLER_DEVICE_PATH {
0120 EFI_DEVICE_PATH Header;
0121 UINT32 Controller;
0122 } CONTROLLER_DEVICE_PATH;
0123
0124
0125
0126
0127 #define ACPI_DEVICE_PATH 0x02
0128
0129 #define ACPI_DP 0x01
0130 typedef struct _ACPI_HID_DEVICE_PATH {
0131 EFI_DEVICE_PATH Header;
0132 UINT32 HID;
0133 UINT32 UID;
0134 } ACPI_HID_DEVICE_PATH;
0135
0136 #define ACPI_EXTENDED_DP 0x02
0137 typedef struct _ACPI_EXTENDED_HID_DEVICE_PATH {
0138 EFI_DEVICE_PATH Header;
0139 UINT32 HID;
0140 UINT32 UID;
0141 UINT32 CID;
0142 } ACPI_EXTENDED_HID_DEVICE_PATH;
0143
0144 #define ACPI_ADR_DP 0x03
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154 #define PNP_EISA_ID_CONST 0x41d0
0155 #define EISA_ID(_Name, _Num) ((UINT32) ((_Name) | (_Num) << 16))
0156 #define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
0157 #define EFI_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
0158
0159 #define PNP_EISA_ID_MASK 0xffff
0160 #define EISA_ID_TO_NUM(_Id) ((_Id) >> 16)
0161
0162
0163
0164 #define MESSAGING_DEVICE_PATH 0x03
0165
0166 #define MSG_ATAPI_DP 0x01
0167 typedef struct _ATAPI_DEVICE_PATH {
0168 EFI_DEVICE_PATH Header;
0169 UINT8 PrimarySecondary;
0170 UINT8 SlaveMaster;
0171 UINT16 Lun;
0172 } ATAPI_DEVICE_PATH;
0173
0174 #define MSG_SCSI_DP 0x02
0175 typedef struct _SCSI_DEVICE_PATH {
0176 EFI_DEVICE_PATH Header;
0177 UINT16 Pun;
0178 UINT16 Lun;
0179 } SCSI_DEVICE_PATH;
0180
0181 #define MSG_FIBRECHANNEL_DP 0x03
0182 typedef struct _FIBRECHANNEL_DEVICE_PATH {
0183 EFI_DEVICE_PATH Header;
0184 UINT32 Reserved;
0185 UINT64 WWN;
0186 UINT64 Lun;
0187 } FIBRECHANNEL_DEVICE_PATH;
0188
0189 #define MSG_1394_DP 0x04
0190 typedef struct _F1394_DEVICE_PATH {
0191 EFI_DEVICE_PATH Header;
0192 UINT32 Reserved;
0193 UINT64 Guid;
0194 } F1394_DEVICE_PATH;
0195
0196 #define MSG_USB_DP 0x05
0197 typedef struct _USB_DEVICE_PATH {
0198 EFI_DEVICE_PATH Header;
0199 UINT8 ParentPortNumber;
0200 UINT8 InterfaceNumber;
0201 } USB_DEVICE_PATH;
0202
0203 #define MSG_USB_CLASS_DP 0x0F
0204 typedef struct _USB_CLASS_DEVICE_PATH {
0205 EFI_DEVICE_PATH Header;
0206 UINT16 VendorId;
0207 UINT16 ProductId;
0208 UINT8 DeviceClass;
0209 UINT8 DeviceSubClass;
0210 UINT8 DeviceProtocol;
0211 } USB_CLASS_DEVICE_PATH;
0212
0213 #define MSG_I2O_DP 0x06
0214 typedef struct _I2O_DEVICE_PATH {
0215 EFI_DEVICE_PATH Header;
0216 UINT32 Tid;
0217 } I2O_DEVICE_PATH;
0218
0219 #define MSG_MAC_ADDR_DP 0x0b
0220 typedef struct _MAC_ADDR_DEVICE_PATH {
0221 EFI_DEVICE_PATH Header;
0222 EFI_MAC_ADDRESS MacAddress;
0223 UINT8 IfType;
0224 } MAC_ADDR_DEVICE_PATH;
0225
0226 #define MSG_IPv4_DP 0x0c
0227 typedef struct _IPv4_DEVICE_PATH {
0228 EFI_DEVICE_PATH Header;
0229 EFI_IPv4_ADDRESS LocalIpAddress;
0230 EFI_IPv4_ADDRESS RemoteIpAddress;
0231 UINT16 LocalPort;
0232 UINT16 RemotePort;
0233 UINT16 Protocol;
0234 BOOLEAN StaticIpAddress;
0235 EFI_IPv4_ADDRESS GatewayIpAddress;
0236 EFI_IPv4_ADDRESS SubnetMask;
0237 } IPv4_DEVICE_PATH;
0238
0239 #define MSG_IPv6_DP 0x0d
0240 typedef struct _IPv6_DEVICE_PATH {
0241 EFI_DEVICE_PATH Header;
0242 EFI_IPv6_ADDRESS LocalIpAddress;
0243 EFI_IPv6_ADDRESS RemoteIpAddress;
0244 UINT16 LocalPort;
0245 UINT16 RemotePort;
0246 UINT16 Protocol;
0247 BOOLEAN StaticIpAddress;
0248 } IPv6_DEVICE_PATH;
0249
0250 #define MSG_INFINIBAND_DP 0x09
0251 typedef struct _INFINIBAND_DEVICE_PATH {
0252 EFI_DEVICE_PATH Header;
0253 UINT32 ResourceFlags;
0254 UINT8 PortGid[16];
0255 UINT64 ServiceId;
0256 UINT64 TargetPortId;
0257 UINT64 DeviceId;
0258 } INFINIBAND_DEVICE_PATH;
0259
0260 #define INFINIBAND_RESOURCE_FLAG_IOC_SERVICE 0x01
0261 #define INFINIBAND_RESOURCE_FLAG_EXTENDED_BOOT_ENVIRONMENT 0x02
0262 #define INFINIBAND_RESOURCE_FLAG_CONSOLE_PROTOCOL 0x04
0263 #define INFINIBAND_RESOURCE_FLAG_STORAGE_PROTOCOL 0x08
0264 #define INFINIBAND_RESOURCE_FLAG_NETWORK_PROTOCOL 0x10
0265
0266 #define MSG_UART_DP 0x0e
0267 typedef struct _UART_DEVICE_PATH {
0268 EFI_DEVICE_PATH Header;
0269 UINT32 Reserved;
0270 UINT64 BaudRate;
0271 UINT8 DataBits;
0272 UINT8 Parity;
0273 UINT8 StopBits;
0274 } UART_DEVICE_PATH;
0275
0276 #define MSG_VENDOR_DP 0x0A
0277
0278
0279 #define DEVICE_PATH_MESSAGING_PC_ANSI \
0280 { 0xe0c14753, 0xf9be, 0x11d2, {0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
0281
0282 #define DEVICE_PATH_MESSAGING_VT_100 \
0283 { 0xdfa66065, 0xb419, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
0284
0285 #define DEVICE_PATH_MESSAGING_VT_100_PLUS \
0286 { 0x7baec70b, 0x57e0, 0x4c76, {0x8e, 0x87, 0x2f, 0x9e, 0x28, 0x08, 0x83, 0x43} }
0287
0288 #define DEVICE_PATH_MESSAGING_VT_UTF8 \
0289 { 0xad15a0d6, 0x8bec, 0x4acf, {0xa0, 0x73, 0xd0, 0x1d, 0xe7, 0x7e, 0x2d, 0x88} }
0290
0291
0292 #define MSG_DEVICE_LOGICAL_UNIT_DP 0x11
0293 typedef struct {
0294 EFI_DEVICE_PATH Header;
0295
0296 UINT8 Lun;
0297 } DEVICE_LOGICAL_UNIT_DEVICE_PATH;
0298
0299 #define MSG_SATA_DP 0x12
0300 typedef struct _SATA_DEVICE_PATH {
0301 EFI_DEVICE_PATH Header;
0302 UINT16 HBAPortNumber;
0303 UINT16 PortMultiplierPortNumber;
0304 UINT16 Lun;
0305 } SATA_DEVICE_PATH;
0306
0307
0308
0309 #define MSG_DNS_DP 0x1F
0310 typedef struct {
0311 EFI_DEVICE_PATH Header;
0312
0313 UINT8 IsIPv6;
0314
0315
0316 EFI_IPv4_ADDRESS DnsServerIp[];
0317 } DNS_DEVICE_PATH;
0318
0319
0320 #define MSG_URI_DP 0x18
0321 typedef struct {
0322 EFI_DEVICE_PATH Header;
0323
0324 CHAR8 Uri[];
0325 } URI_DEVICE_PATH;
0326
0327 #define MEDIA_DEVICE_PATH 0x04
0328
0329 #define MEDIA_HARDDRIVE_DP 0x01
0330 typedef struct _HARDDRIVE_DEVICE_PATH {
0331 EFI_DEVICE_PATH Header;
0332 UINT32 PartitionNumber;
0333 UINT64 PartitionStart;
0334 UINT64 PartitionSize;
0335 UINT8 Signature[16];
0336 UINT8 MBRType;
0337 UINT8 SignatureType;
0338 } HARDDRIVE_DEVICE_PATH;
0339
0340 #define MBR_TYPE_PCAT 0x01
0341 #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
0342
0343 #define SIGNATURE_TYPE_MBR 0x01
0344 #define SIGNATURE_TYPE_GUID 0x02
0345
0346 #define MEDIA_CDROM_DP 0x02
0347 typedef struct _CDROM_DEVICE_PATH {
0348 EFI_DEVICE_PATH Header;
0349 UINT32 BootEntry;
0350 UINT64 PartitionStart;
0351 UINT64 PartitionSize;
0352 } CDROM_DEVICE_PATH;
0353
0354 #define MEDIA_VENDOR_DP 0x03
0355
0356
0357 #define MEDIA_FILEPATH_DP 0x04
0358 typedef struct _FILEPATH_DEVICE_PATH {
0359 EFI_DEVICE_PATH Header;
0360 CHAR16 PathName[1];
0361 } FILEPATH_DEVICE_PATH;
0362
0363 #define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName)
0364
0365 #define MEDIA_PROTOCOL_DP 0x05
0366 typedef struct _MEDIA_PROTOCOL_DEVICE_PATH {
0367 EFI_DEVICE_PATH Header;
0368 EFI_GUID Protocol;
0369 } MEDIA_PROTOCOL_DEVICE_PATH;
0370
0371
0372 #define BBS_DEVICE_PATH 0x05
0373 #define BBS_BBS_DP 0x01
0374 typedef struct _BBS_BBS_DEVICE_PATH {
0375 EFI_DEVICE_PATH Header;
0376 UINT16 DeviceType;
0377 UINT16 StatusFlag;
0378 CHAR8 String[1];
0379 } BBS_BBS_DEVICE_PATH;
0380
0381
0382 #define BBS_TYPE_FLOPPY 0x01
0383 #define BBS_TYPE_HARDDRIVE 0x02
0384 #define BBS_TYPE_CDROM 0x03
0385 #define BBS_TYPE_PCMCIA 0x04
0386 #define BBS_TYPE_USB 0x05
0387 #define BBS_TYPE_EMBEDDED_NETWORK 0x06
0388 #define BBS_TYPE_DEV 0x80
0389 #define BBS_TYPE_UNKNOWN 0xFF
0390
0391 typedef union {
0392 EFI_DEVICE_PATH DevPath;
0393 PCI_DEVICE_PATH Pci;
0394 PCCARD_DEVICE_PATH PcCard;
0395 MEMMAP_DEVICE_PATH MemMap;
0396 VENDOR_DEVICE_PATH Vendor;
0397 UNKNOWN_DEVICE_VENDOR_DEVICE_PATH UnknownVendor;
0398 CONTROLLER_DEVICE_PATH Controller;
0399 ACPI_HID_DEVICE_PATH Acpi;
0400
0401 ATAPI_DEVICE_PATH Atapi;
0402 SCSI_DEVICE_PATH Scsi;
0403 FIBRECHANNEL_DEVICE_PATH FibreChannel;
0404
0405 F1394_DEVICE_PATH F1394;
0406 USB_DEVICE_PATH Usb;
0407 USB_CLASS_DEVICE_PATH UsbClass;
0408 I2O_DEVICE_PATH I2O;
0409 MAC_ADDR_DEVICE_PATH MacAddr;
0410 IPv4_DEVICE_PATH Ipv4;
0411 IPv6_DEVICE_PATH Ipv6;
0412 INFINIBAND_DEVICE_PATH InfiniBand;
0413 UART_DEVICE_PATH Uart;
0414
0415 HARDDRIVE_DEVICE_PATH HardDrive;
0416 CDROM_DEVICE_PATH CD;
0417
0418 FILEPATH_DEVICE_PATH FilePath;
0419 MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol;
0420
0421 BBS_BBS_DEVICE_PATH Bbs;
0422
0423 } EFI_DEV_PATH;
0424
0425 typedef union {
0426 EFI_DEVICE_PATH *DevPath;
0427 PCI_DEVICE_PATH *Pci;
0428 PCCARD_DEVICE_PATH *PcCard;
0429 MEMMAP_DEVICE_PATH *MemMap;
0430 VENDOR_DEVICE_PATH *Vendor;
0431 UNKNOWN_DEVICE_VENDOR_DEVICE_PATH *UnknownVendor;
0432 CONTROLLER_DEVICE_PATH *Controller;
0433 ACPI_HID_DEVICE_PATH *Acpi;
0434 ACPI_EXTENDED_HID_DEVICE_PATH *ExtendedAcpi;
0435
0436 ATAPI_DEVICE_PATH *Atapi;
0437 SCSI_DEVICE_PATH *Scsi;
0438 FIBRECHANNEL_DEVICE_PATH *FibreChannel;
0439
0440 F1394_DEVICE_PATH *F1394;
0441 USB_DEVICE_PATH *Usb;
0442 USB_CLASS_DEVICE_PATH *UsbClass;
0443 I2O_DEVICE_PATH *I2O;
0444 MAC_ADDR_DEVICE_PATH *MacAddr;
0445 IPv4_DEVICE_PATH *Ipv4;
0446 IPv6_DEVICE_PATH *Ipv6;
0447 INFINIBAND_DEVICE_PATH *InfiniBand;
0448 UART_DEVICE_PATH *Uart;
0449
0450 HARDDRIVE_DEVICE_PATH *HardDrive;
0451
0452 FILEPATH_DEVICE_PATH *FilePath;
0453 MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol;
0454
0455 CDROM_DEVICE_PATH *CD;
0456 BBS_BBS_DEVICE_PATH *Bbs;
0457
0458 } EFI_DEV_PATH_PTR;
0459
0460 #define EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID \
0461 { 0xbc62157e, 0x3e33, 0x4fec, { 0x99, 0x20, 0x2d, 0x3b, 0x36, 0xd7, 0x50, 0xdf } }
0462
0463 #define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID \
0464 { 0x8b843e20, 0x8132, 0x4852, { 0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c } }
0465
0466 #define EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL_GUID \
0467 { 0x05c99a21, 0xc70f, 0x4ad2, { 0x8a, 0x5f, 0x35, 0xdf, 0x33, 0x43, 0xf5, 0x1e } }
0468
0469 INTERFACE_DECL(_EFI_DEVICE_PATH_PROTOCOL);
0470
0471 typedef
0472 CHAR16*
0473 (EFIAPI *EFI_DEVICE_PATH_TO_TEXT_NODE) (
0474 IN struct _EFI_DEVICE_PATH *This,
0475 IN BOOLEAN DisplayOnly,
0476 IN BOOLEAN AllowShortCuts
0477 );
0478
0479 typedef
0480 CHAR16*
0481 (EFIAPI *EFI_DEVICE_PATH_TO_TEXT_PATH) (
0482 IN struct _EFI_DEVICE_PATH *This,
0483 IN BOOLEAN DisplayOnly,
0484 IN BOOLEAN AllowShortCuts
0485 );
0486
0487 typedef struct _EFI_DEVICE_PATH_TO_TEXT_PROTOCOL {
0488 EFI_DEVICE_PATH_TO_TEXT_NODE ConvertDeviceNodeToText;
0489 EFI_DEVICE_PATH_TO_TEXT_PATH ConvertDevicePathToText;
0490 } EFI_DEVICE_PATH_TO_TEXT_PROTOCOL;
0491
0492 typedef
0493 struct _EFI_DEVICE_PATH*
0494 (EFIAPI *EFI_DEVICE_PATH_FROM_TEXT_NODE) (
0495 IN CONST CHAR16* TextDeviceNode
0496 );
0497 typedef
0498 struct _EFI_DEVICE_PATH*
0499 (EFIAPI *EFI_DEVICE_PATH_FROM_TEXT_PATH) (
0500 IN CONST CHAR16* TextDevicePath
0501 );
0502
0503
0504 typedef struct _EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL {
0505 EFI_DEVICE_PATH_FROM_TEXT_NODE ConvertTextToDeviceNode;
0506 EFI_DEVICE_PATH_FROM_TEXT_PATH ConvertTextToDevicePath;
0507 } EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL;
0508
0509 #pragma pack()
0510
0511 #endif