DevicePath.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __EFI_DEVICE_PATH_PROTOCOL_H__
00020 #define __EFI_DEVICE_PATH_PROTOCOL_H__
00021
00022 #include <gpxe/efi/Guid/PcAnsi.h>
00023
00024
00025
00026
00027 #define EFI_DEVICE_PATH_PROTOCOL_GUID \
00028 { \
00029 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
00030 }
00031
00032
00033
00034
00035
00036
00037
00038
00039 #define DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH_PROTOCOL_GUID
00040
00041 #pragma pack(1)
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 typedef struct {
00052 UINT8 Type;
00053
00054
00055
00056
00057
00058
00059 UINT8 SubType;
00060
00061
00062
00063
00064 UINT8 Length[2];
00065
00066
00067 } EFI_DEVICE_PATH_PROTOCOL;
00068
00069
00070
00071
00072 typedef EFI_DEVICE_PATH_PROTOCOL EFI_DEVICE_PATH;
00073
00074
00075
00076
00077 #define HARDWARE_DEVICE_PATH 0x01
00078
00079 #define HW_PCI_DP 0x01
00080 typedef struct {
00081 EFI_DEVICE_PATH_PROTOCOL Header;
00082 UINT8 Function;
00083 UINT8 Device;
00084 } PCI_DEVICE_PATH;
00085
00086 #define HW_PCCARD_DP 0x02
00087 typedef struct {
00088 EFI_DEVICE_PATH_PROTOCOL Header;
00089 UINT8 FunctionNumber;
00090 } PCCARD_DEVICE_PATH;
00091
00092 #define HW_MEMMAP_DP 0x03
00093 typedef struct {
00094 EFI_DEVICE_PATH_PROTOCOL Header;
00095 UINT32 MemoryType;
00096 EFI_PHYSICAL_ADDRESS StartingAddress;
00097 EFI_PHYSICAL_ADDRESS EndingAddress;
00098 } MEMMAP_DEVICE_PATH;
00099
00100 #define HW_VENDOR_DP 0x04
00101 typedef struct {
00102 EFI_DEVICE_PATH_PROTOCOL Header;
00103 EFI_GUID Guid;
00104 } VENDOR_DEVICE_PATH;
00105
00106 #define HW_CONTROLLER_DP 0x05
00107 typedef struct {
00108 EFI_DEVICE_PATH_PROTOCOL Header;
00109 UINT32 ControllerNumber;
00110 } CONTROLLER_DEVICE_PATH;
00111
00112
00113
00114
00115 #define ACPI_DEVICE_PATH 0x02
00116
00117 #define ACPI_DP 0x01
00118 typedef struct {
00119 EFI_DEVICE_PATH_PROTOCOL Header;
00120 UINT32 HID;
00121 UINT32 UID;
00122 } ACPI_HID_DEVICE_PATH;
00123
00124 #define ACPI_EXTENDED_DP 0x02
00125 typedef struct {
00126 EFI_DEVICE_PATH_PROTOCOL Header;
00127 UINT32 HID;
00128 UINT32 UID;
00129 UINT32 CID;
00130
00131
00132
00133
00134
00135 } ACPI_EXTENDED_HID_DEVICE_PATH;
00136
00137
00138
00139
00140
00141
00142
00143
00144 #define PNP_EISA_ID_CONST 0x41d0
00145 #define EISA_ID(_Name, _Num) ((UINT32)((_Name) | (_Num) << 16))
00146 #define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
00147 #define EFI_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
00148
00149 #define PNP_EISA_ID_MASK 0xffff
00150 #define EISA_ID_TO_NUM(_Id) ((_Id) >> 16)
00151
00152
00153 #define ACPI_ADR_DP 0x03
00154 typedef struct {
00155 EFI_DEVICE_PATH_PROTOCOL Header;
00156 UINT32 ADR;
00157 } ACPI_ADR_DEVICE_PATH;
00158
00159 #define ACPI_ADR_DISPLAY_TYPE_OTHER 0
00160 #define ACPI_ADR_DISPLAY_TYPE_VGA 1
00161 #define ACPI_ADR_DISPLAY_TYPE_TV 2
00162 #define ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL 3
00163 #define ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL 4
00164
00165 #define ACPI_DISPLAY_ADR(_DeviceIdScheme, _HeadId, _NonVgaOutput, _BiosCanDetect, _VendorInfo, _Type, _Port, _Index) \
00166 ((UINT32)( (((_DeviceIdScheme) & 0x1) << 31) | \
00167 (((_HeadId) & 0x7) << 18) | \
00168 (((_NonVgaOutput) & 0x1) << 17) | \
00169 (((_BiosCanDetect) & 0x1) << 16) | \
00170 (((_VendorInfo) & 0xf) << 12) | \
00171 (((_Type) & 0xf) << 8) | \
00172 (((_Port) & 0xf) << 4) | \
00173 ((_Index) & 0xf) ))
00174
00175
00176
00177
00178 #define MESSAGING_DEVICE_PATH 0x03
00179
00180 #define MSG_ATAPI_DP 0x01
00181 typedef struct {
00182 EFI_DEVICE_PATH_PROTOCOL Header;
00183 UINT8 PrimarySecondary;
00184 UINT8 SlaveMaster;
00185 UINT16 Lun;
00186 } ATAPI_DEVICE_PATH;
00187
00188 #define MSG_SCSI_DP 0x02
00189 typedef struct {
00190 EFI_DEVICE_PATH_PROTOCOL Header;
00191 UINT16 Pun;
00192 UINT16 Lun;
00193 } SCSI_DEVICE_PATH;
00194
00195 #define MSG_FIBRECHANNEL_DP 0x03
00196 typedef struct {
00197 EFI_DEVICE_PATH_PROTOCOL Header;
00198 UINT32 Reserved;
00199 UINT64 WWN;
00200 UINT64 Lun;
00201 } FIBRECHANNEL_DEVICE_PATH;
00202
00203 #define MSG_1394_DP 0x04
00204 typedef struct {
00205 EFI_DEVICE_PATH_PROTOCOL Header;
00206 UINT32 Reserved;
00207 UINT64 Guid;
00208 } F1394_DEVICE_PATH;
00209
00210 #define MSG_USB_DP 0x05
00211 typedef struct {
00212 EFI_DEVICE_PATH_PROTOCOL Header;
00213 UINT8 ParentPortNumber;
00214 UINT8 InterfaceNumber;
00215 } USB_DEVICE_PATH;
00216
00217 #define MSG_USB_CLASS_DP 0x0f
00218 typedef struct {
00219 EFI_DEVICE_PATH_PROTOCOL Header;
00220 UINT16 VendorId;
00221 UINT16 ProductId;
00222 UINT8 DeviceClass;
00223 UINT8 DeviceSubClass;
00224 UINT8 DeviceProtocol;
00225 } USB_CLASS_DEVICE_PATH;
00226
00227 #define MSG_USB_WWID_DP 0x10
00228 typedef struct {
00229 EFI_DEVICE_PATH_PROTOCOL Header;
00230 UINT16 InterfaceNumber;
00231 UINT16 VendorId;
00232 UINT16 ProductId;
00233
00234 } USB_WWID_DEVICE_PATH;
00235
00236
00237 #define MSG_DEVICE_LOGICAL_UNIT_DP 0x11
00238 typedef struct {
00239 EFI_DEVICE_PATH_PROTOCOL Header;
00240 UINT8 Lun;
00241 } DEVICE_LOGICAL_UNIT_DEVICE_PATH;
00242
00243 #define MSG_SATA_DP 0x12
00244 typedef struct {
00245 EFI_DEVICE_PATH_PROTOCOL Header;
00246 UINT16 HBAPortNumber;
00247 UINT16 PortMultiplierPortNumber;
00248 UINT16 Lun;
00249 } SATA_DEVICE_PATH;
00250
00251 #define MSG_I2O_DP 0x06
00252 typedef struct {
00253 EFI_DEVICE_PATH_PROTOCOL Header;
00254 UINT32 Tid;
00255 } I2O_DEVICE_PATH;
00256
00257 #define MSG_MAC_ADDR_DP 0x0b
00258 typedef struct {
00259 EFI_DEVICE_PATH_PROTOCOL Header;
00260 EFI_MAC_ADDRESS MacAddress;
00261 UINT8 IfType;
00262 } MAC_ADDR_DEVICE_PATH;
00263
00264 #define MSG_IPv4_DP 0x0c
00265 typedef struct {
00266 EFI_DEVICE_PATH_PROTOCOL Header;
00267 EFI_IPv4_ADDRESS LocalIpAddress;
00268 EFI_IPv4_ADDRESS RemoteIpAddress;
00269 UINT16 LocalPort;
00270 UINT16 RemotePort;
00271 UINT16 Protocol;
00272 BOOLEAN StaticIpAddress;
00273 } IPv4_DEVICE_PATH;
00274
00275 #define MSG_IPv6_DP 0x0d
00276 typedef struct {
00277 EFI_DEVICE_PATH_PROTOCOL Header;
00278 EFI_IPv6_ADDRESS LocalIpAddress;
00279 EFI_IPv6_ADDRESS RemoteIpAddress;
00280 UINT16 LocalPort;
00281 UINT16 RemotePort;
00282 UINT16 Protocol;
00283 BOOLEAN StaticIpAddress;
00284 } IPv6_DEVICE_PATH;
00285
00286 #define MSG_INFINIBAND_DP 0x09
00287 typedef struct {
00288 EFI_DEVICE_PATH_PROTOCOL Header;
00289 UINT32 ResourceFlags;
00290 UINT8 PortGid[16];
00291 UINT64 ServiceId;
00292 UINT64 TargetPortId;
00293 UINT64 DeviceId;
00294 } INFINIBAND_DEVICE_PATH;
00295
00296 #define INFINIBAND_RESOURCE_FLAG_IOC_SERVICE 0x01
00297 #define INFINIBAND_RESOURCE_FLAG_EXTENDED_BOOT_ENVIRONMENT 0x02
00298 #define INFINIBAND_RESOURCE_FLAG_CONSOLE_PROTOCOL 0x04
00299 #define INFINIBAND_RESOURCE_FLAG_STORAGE_PROTOCOL 0x08
00300 #define INFINIBAND_RESOURCE_FLAG_NETWORK_PROTOCOL 0x10
00301
00302 #define MSG_UART_DP 0x0e
00303 typedef struct {
00304 EFI_DEVICE_PATH_PROTOCOL Header;
00305 UINT32 Reserved;
00306 UINT64 BaudRate;
00307 UINT8 DataBits;
00308 UINT8 Parity;
00309 UINT8 StopBits;
00310 } UART_DEVICE_PATH;
00311
00312
00313
00314
00315 #define MSG_VENDOR_DP 0x0a
00316 typedef VENDOR_DEVICE_PATH VENDOR_DEFINED_DEVICE_PATH;
00317
00318 #define DEVICE_PATH_MESSAGING_PC_ANSI EFI_PC_ANSI_GUID
00319 #define DEVICE_PATH_MESSAGING_VT_100 EFI_VT_100_GUID
00320 #define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID
00321 #define DEVICE_PATH_MESSAGING_VT_UTF8 EFI_VT_UTF8_GUID
00322
00323 #define DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL EFI_UART_DEVICE_PATH_GUID
00324
00325 typedef struct {
00326 EFI_DEVICE_PATH_PROTOCOL Header;
00327 EFI_GUID Guid;
00328 UINT32 FlowControlMap;
00329 } UART_FLOW_CONTROL_DEVICE_PATH;
00330
00331 #define DEVICE_PATH_MESSAGING_SAS EFI_SAS_DEVICE_PATH_GUID
00332
00333 typedef struct {
00334 EFI_DEVICE_PATH_PROTOCOL Header;
00335 EFI_GUID Guid;
00336 UINT32 Reserved;
00337 UINT64 SasAddress;
00338 UINT64 Lun;
00339 UINT16 DeviceTopology;
00340 UINT16 RelativeTargetPort;
00341 } SAS_DEVICE_PATH;
00342
00343 #define MSG_ISCSI_DP 0x13
00344 typedef struct {
00345 EFI_DEVICE_PATH_PROTOCOL Header;
00346 UINT16 NetworkProtocol;
00347 UINT16 LoginOption;
00348 UINT64 Lun;
00349 UINT16 TargetPortalGroupTag;
00350
00351 } ISCSI_DEVICE_PATH;
00352
00353 #define ISCSI_LOGIN_OPTION_NO_HEADER_DIGEST 0x0000
00354 #define ISCSI_LOGIN_OPTION_HEADER_DIGEST_USING_CRC32C 0x0002
00355 #define ISCSI_LOGIN_OPTION_NO_DATA_DIGEST 0x0000
00356 #define ISCSI_LOGIN_OPTION_DATA_DIGEST_USING_CRC32C 0x0008
00357 #define ISCSI_LOGIN_OPTION_AUTHMETHOD_CHAP 0x0000
00358 #define ISCSI_LOGIN_OPTION_AUTHMETHOD_NON 0x1000
00359 #define ISCSI_LOGIN_OPTION_CHAP_BI 0x0000
00360 #define ISCSI_LOGIN_OPTION_CHAP_UNI 0x2000
00361
00362
00363
00364
00365 #define MEDIA_DEVICE_PATH 0x04
00366
00367 #define MEDIA_HARDDRIVE_DP 0x01
00368 typedef struct {
00369 EFI_DEVICE_PATH_PROTOCOL Header;
00370 UINT32 PartitionNumber;
00371 UINT64 PartitionStart;
00372 UINT64 PartitionSize;
00373 UINT8 Signature[16];
00374 UINT8 MBRType;
00375 UINT8 SignatureType;
00376 } HARDDRIVE_DEVICE_PATH;
00377
00378 #define MBR_TYPE_PCAT 0x01
00379 #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
00380
00381 #define SIGNATURE_TYPE_MBR 0x01
00382 #define SIGNATURE_TYPE_GUID 0x02
00383
00384 #define MEDIA_CDROM_DP 0x02
00385 typedef struct {
00386 EFI_DEVICE_PATH_PROTOCOL Header;
00387 UINT32 BootEntry;
00388 UINT64 PartitionStart;
00389 UINT64 PartitionSize;
00390 } CDROM_DEVICE_PATH;
00391
00392
00393
00394
00395 #define MEDIA_VENDOR_DP 0x03
00396
00397 #define MEDIA_FILEPATH_DP 0x04
00398 typedef struct {
00399 EFI_DEVICE_PATH_PROTOCOL Header;
00400 CHAR16 PathName[1];
00401 } FILEPATH_DEVICE_PATH;
00402
00403 #define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName)
00404
00405 #define MEDIA_PROTOCOL_DP 0x05
00406 typedef struct {
00407 EFI_DEVICE_PATH_PROTOCOL Header;
00408 EFI_GUID Protocol;
00409 } MEDIA_PROTOCOL_DEVICE_PATH;
00410
00411
00412 #define MEDIA_PIWG_FW_VOL_DP 0x7
00413 typedef struct {
00414 EFI_DEVICE_PATH_PROTOCOL Header;
00415 EFI_GUID FvName;
00416 } MEDIA_FW_VOL_DEVICE_PATH;
00417
00418
00419 #define MEDIA_PIWG_FW_FILE_DP 0x6
00420 typedef struct {
00421 EFI_DEVICE_PATH_PROTOCOL Header;
00422 EFI_GUID FvFileName;
00423 } MEDIA_FW_VOL_FILEPATH_DEVICE_PATH;
00424
00425
00426
00427
00428 #define BBS_DEVICE_PATH 0x05
00429 #define BBS_BBS_DP 0x01
00430 typedef struct {
00431 EFI_DEVICE_PATH_PROTOCOL Header;
00432 UINT16 DeviceType;
00433 UINT16 StatusFlag;
00434 CHAR8 String[1];
00435 } BBS_BBS_DEVICE_PATH;
00436
00437
00438
00439
00440 #define BBS_TYPE_FLOPPY 0x01
00441 #define BBS_TYPE_HARDDRIVE 0x02
00442 #define BBS_TYPE_CDROM 0x03
00443 #define BBS_TYPE_PCMCIA 0x04
00444 #define BBS_TYPE_USB 0x05
00445 #define BBS_TYPE_EMBEDDED_NETWORK 0x06
00446 #define BBS_TYPE_BEV 0x80
00447 #define BBS_TYPE_UNKNOWN 0xFF
00448
00449
00450
00451
00452
00453
00454 typedef union {
00455 EFI_DEVICE_PATH_PROTOCOL DevPath;
00456 PCI_DEVICE_PATH Pci;
00457 PCCARD_DEVICE_PATH PcCard;
00458 MEMMAP_DEVICE_PATH MemMap;
00459 VENDOR_DEVICE_PATH Vendor;
00460
00461 CONTROLLER_DEVICE_PATH Controller;
00462 ACPI_HID_DEVICE_PATH Acpi;
00463
00464 ATAPI_DEVICE_PATH Atapi;
00465 SCSI_DEVICE_PATH Scsi;
00466 ISCSI_DEVICE_PATH Iscsi;
00467 FIBRECHANNEL_DEVICE_PATH FibreChannel;
00468
00469 F1394_DEVICE_PATH F1394;
00470 USB_DEVICE_PATH Usb;
00471 SATA_DEVICE_PATH Sata;
00472 USB_CLASS_DEVICE_PATH UsbClass;
00473 I2O_DEVICE_PATH I2O;
00474 MAC_ADDR_DEVICE_PATH MacAddr;
00475 IPv4_DEVICE_PATH Ipv4;
00476 IPv6_DEVICE_PATH Ipv6;
00477 INFINIBAND_DEVICE_PATH InfiniBand;
00478 UART_DEVICE_PATH Uart;
00479
00480 HARDDRIVE_DEVICE_PATH HardDrive;
00481 CDROM_DEVICE_PATH CD;
00482
00483 FILEPATH_DEVICE_PATH FilePath;
00484 MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol;
00485
00486 BBS_BBS_DEVICE_PATH Bbs;
00487 } EFI_DEV_PATH;
00488
00489
00490
00491 typedef union {
00492 EFI_DEVICE_PATH_PROTOCOL *DevPath;
00493 PCI_DEVICE_PATH *Pci;
00494 PCCARD_DEVICE_PATH *PcCard;
00495 MEMMAP_DEVICE_PATH *MemMap;
00496 VENDOR_DEVICE_PATH *Vendor;
00497
00498 CONTROLLER_DEVICE_PATH *Controller;
00499 ACPI_HID_DEVICE_PATH *Acpi;
00500 ACPI_EXTENDED_HID_DEVICE_PATH *ExtendedAcpi;
00501
00502 ATAPI_DEVICE_PATH *Atapi;
00503 SCSI_DEVICE_PATH *Scsi;
00504 FIBRECHANNEL_DEVICE_PATH *FibreChannel;
00505
00506 F1394_DEVICE_PATH *F1394;
00507 USB_DEVICE_PATH *Usb;
00508 SATA_DEVICE_PATH *Sata;
00509 USB_CLASS_DEVICE_PATH *UsbClass;
00510 I2O_DEVICE_PATH *I2O;
00511 MAC_ADDR_DEVICE_PATH *MacAddr;
00512 IPv4_DEVICE_PATH *Ipv4;
00513 IPv6_DEVICE_PATH *Ipv6;
00514 INFINIBAND_DEVICE_PATH *InfiniBand;
00515 UART_DEVICE_PATH *Uart;
00516
00517 HARDDRIVE_DEVICE_PATH *HardDrive;
00518 CDROM_DEVICE_PATH *CD;
00519
00520 FILEPATH_DEVICE_PATH *FilePath;
00521 MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol;
00522
00523 BBS_BBS_DEVICE_PATH *Bbs;
00524 UINT8 *Raw;
00525 } EFI_DEV_PATH_PTR;
00526
00527 #pragma pack()
00528
00529 #define END_DEVICE_PATH_TYPE 0x7f
00530 #define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xFF
00531 #define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01
00532
00533 extern EFI_GUID gEfiDevicePathProtocolGuid;
00534
00535 #endif