176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _DEVPATH_H 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _DEVPATH_H 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*++ 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanCopyright (c) 1998 Intel Corporation 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanModule Name: 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman devpath.h 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanAbstract: 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Defines for parsing the EFI Device Path structures 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanRevision History 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman--*/ 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Device Path structures - Section C 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _EFI_DEVICE_PATH { 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Type; 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 SubType; 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Length[2]; 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_DEVICE_PATH; 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_DP_TYPE_MASK 0x7F 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_DP_TYPE_UNPACKED 0x80 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//#define END_DEVICE_PATH_TYPE 0xff 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define END_DEVICE_PATH_TYPE 0x7f 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//#define END_DEVICE_PATH_TYPE_UNPACKED 0x7f 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define END_DEVICE_PATH_LENGTH (sizeof(EFI_DEVICE_PATH)) 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DP_IS_END_TYPE(a) 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DP_IS_END_SUBTYPE(a) ( ((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE ) 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DevicePathType(a) ( ((a)->Type) & EFI_DP_TYPE_MASK ) 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DevicePathSubType(a) ( (a)->SubType ) 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DevicePathNodeLength(a) ( ((a)->Length[0]) | ((a)->Length[1] << 8) ) 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define NextDevicePathNode(a) ( (EFI_DEVICE_PATH *) ( ((UINT8 *) (a)) + DevicePathNodeLength(a))) 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//#define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE_UNPACKED ) 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE ) 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IsDevicePathEndSubType(a) ( (a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE ) 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IsDevicePathEnd(a) ( IsDevicePathEndType(a) && IsDevicePathEndSubType(a) ) 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IsDevicePathUnpacked(a) ( (a)->Type & EFI_DP_TYPE_UNPACKED ) 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SetDevicePathNodeLength(a,l) { \ 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (a)->Length[0] = (UINT8) (l); \ 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (a)->Length[1] = (UINT8) ((l) >> 8); \ 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SetDevicePathEndNode(a) { \ 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (a)->Type = END_DEVICE_PATH_TYPE; \ 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \ 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (a)->Length[0] = sizeof(EFI_DEVICE_PATH); \ 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (a)->Length[1] = 0; \ 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HARDWARE_DEVICE_PATH 0x01 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HW_PCI_DP 0x01 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _PCI_DEVICE_PATH { 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Function; 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Device; 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} PCI_DEVICE_PATH; 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HW_PCCARD_DP 0x02 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _PCCARD_DEVICE_PATH { 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 SocketNumber; 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} PCCARD_DEVICE_PATH; 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HW_MEMMAP_DP 0x03 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _MEMMAP_DEVICE_PATH { 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 MemoryType; 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_PHYSICAL_ADDRESS StartingAddress; 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_PHYSICAL_ADDRESS EndingAddress; 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} MEMMAP_DEVICE_PATH; 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HW_VENDOR_DP 0x04 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _VENDOR_DEVICE_PATH { 10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_GUID Guid; 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} VENDOR_DEVICE_PATH; 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define UNKNOWN_DEVICE_GUID \ 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { 0xcf31fac5, 0xc24e, 0x11d2, {0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b} } 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _UKNOWN_DEVICE_VENDOR_DP { 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman VENDOR_DEVICE_PATH DevicePath; 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 LegacyDriveLetter; 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} UNKNOWN_DEVICE_VENDOR_DEVICE_PATH; 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HW_CONTROLLER_DP 0x05 11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _CONTROLLER_DEVICE_PATH { 11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Controller; 11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} CONTROLLER_DEVICE_PATH; 11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ACPI_DEVICE_PATH 0x02 12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ACPI_DP 0x01 12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _ACPI_HID_DEVICE_PATH { 12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 HID; 12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 UID; 12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} ACPI_HID_DEVICE_PATH; 12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXPANDED_ACPI_DP 0x02 13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _EXPANDED_ACPI_HID_DEVICE_PATH { 13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 HID; 13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 UID; 13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 CID; 13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 HidStr[1]; 13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EXPANDED_ACPI_HID_DEVICE_PATH; 13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// EISA ID Macro 14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// EISA ID Definition 32-bits 14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// bits[15:0] - three character compressed ASCII EISA ID. 14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// bits[31:16] - binary number 14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z' 14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PNP_EISA_ID_CONST 0x41d0 14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EISA_ID(_Name, _Num) ((UINT32) ((_Name) | (_Num) << 16)) 14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId))) 14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PNP_EISA_ID_MASK 0xffff 15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EISA_ID_TO_NUM(_Id) ((_Id) >> 16) 15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MESSAGING_DEVICE_PATH 0x03 15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_ATAPI_DP 0x01 15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _ATAPI_DEVICE_PATH { 15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 PrimarySecondary; 16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 SlaveMaster; 16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Lun; 16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} ATAPI_DEVICE_PATH; 16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_SCSI_DP 0x02 16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _SCSI_DEVICE_PATH { 16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Pun; 16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Lun; 17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} SCSI_DEVICE_PATH; 17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_FIBRECHANNEL_DP 0x03 17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _FIBRECHANNEL_DEVICE_PATH { 17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Reserved; 17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 WWN; 17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Lun; 17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} FIBRECHANNEL_DEVICE_PATH; 17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_1394_DP 0x04 18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _F1394_DEVICE_PATH { 18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Reserved; 18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Guid; 18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} F1394_DEVICE_PATH; 18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_USB_DP 0x05 18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _USB_DEVICE_PATH { 18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Port; 19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Endpoint; 19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} USB_DEVICE_PATH; 19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_USB_CLASS_DP 0x0F 19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _USB_CLASS_DEVICE_PATH { 19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 VendorId; 19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 ProductId; 19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 DeviceClass; 20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 DeviceSubclass; 20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 DeviceProtocol; 20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} USB_CLASS_DEVICE_PATH; 20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_I2O_DP 0x06 20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _I2O_DEVICE_PATH { 20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Tid; 20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} I2O_DEVICE_PATH; 20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_MAC_ADDR_DP 0x0b 21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _MAC_ADDR_DEVICE_PATH { 21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_MAC_ADDRESS MacAddress; 21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 IfType; 21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} MAC_ADDR_DEVICE_PATH; 21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_IPv4_DP 0x0c 21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _IPv4_DEVICE_PATH { 21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_IPv4_ADDRESS LocalIpAddress; 22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_IPv4_ADDRESS RemoteIpAddress; 22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 LocalPort; 22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 RemotePort; 22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Protocol; 22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman BOOLEAN StaticIpAddress; 22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} IPv4_DEVICE_PATH; 22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_IPv6_DP 0x0d 22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _IPv6_DEVICE_PATH { 23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_IPv6_ADDRESS LocalIpAddress; 23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_IPv6_ADDRESS RemoteIpAddress; 23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 LocalPort; 23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 RemotePort; 23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Protocol; 23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman BOOLEAN StaticIpAddress; 23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} IPv6_DEVICE_PATH; 23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_INFINIBAND_DP 0x09 24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _INFINIBAND_DEVICE_PATH { 24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Reserved; 24376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 NodeGuid; 24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 IocGuid; 24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 DeviceId; 24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} INFINIBAND_DEVICE_PATH; 24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_UART_DP 0x0e 24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _UART_DEVICE_PATH { 25076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 25176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Reserved; 25276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 BaudRate; 25376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 DataBits; 25476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Parity; 25576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 StopBits; 25676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} UART_DEVICE_PATH; 25776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 25876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MSG_VENDOR_DP 0x0A 25976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Use VENDOR_DEVICE_PATH struct */ 26076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DEVICE_PATH_MESSAGING_PC_ANSI \ 26276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { 0xe0c14753, 0xf9be, 0x11d2, {0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 26376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DEVICE_PATH_MESSAGING_VT_100 \ 26576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { 0xdfa66065, 0xb419, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 26676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MEDIA_DEVICE_PATH 0x04 27076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 27176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MEDIA_HARDDRIVE_DP 0x01 27276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _HARDDRIVE_DEVICE_PATH { 27376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 27476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 PartitionNumber; 27576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 PartitionStart; 27676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 PartitionSize; 27776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Signature[16]; 27876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 MBRType; 27976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 SignatureType; 28076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} HARDDRIVE_DEVICE_PATH; 28176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 28276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBR_TYPE_PCAT 0x01 28376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02 28476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 28576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SIGNATURE_TYPE_MBR 0x01 28676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SIGNATURE_TYPE_GUID 0x02 28776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 28876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MEDIA_CDROM_DP 0x02 28976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _CDROM_DEVICE_PATH { 29076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 29176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 BootEntry; 29276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 PartitionStart; 29376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 PartitionSize; 29476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} CDROM_DEVICE_PATH; 29576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 29676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MEDIA_VENDOR_DP 0x03 29776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Use VENDOR_DEVICE_PATH struct */ 29876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 29976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MEDIA_FILEPATH_DP 0x04 30076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _FILEPATH_DEVICE_PATH { 30176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 30276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman CHAR16 PathName[1]; 30376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} FILEPATH_DEVICE_PATH; 30476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 30576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName) 30676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 30776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MEDIA_PROTOCOL_DP 0x05 30876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _MEDIA_PROTOCOL_DEVICE_PATH { 30976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 31076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_GUID Protocol; 31176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} MEDIA_PROTOCOL_DEVICE_PATH; 31276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 31376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 31476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BBS_DEVICE_PATH 0x05 31576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BBS_BBS_DP 0x01 31676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _BBS_BBS_DEVICE_PATH { 31776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH Header; 31876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 DeviceType; 31976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 StatusFlag; 32076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman CHAR8 String[1]; 32176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} BBS_BBS_DEVICE_PATH; 32276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 32376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* DeviceType definitions - from BBS specification */ 32476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BBS_TYPE_FLOPPY 0x01 32576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BBS_TYPE_HARDDRIVE 0x02 32676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BBS_TYPE_CDROM 0x03 32776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BBS_TYPE_PCMCIA 0x04 32876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BBS_TYPE_USB 0x05 32976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BBS_TYPE_EMBEDDED_NETWORK 0x06 33076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BBS_TYPE_DEV 0x80 33176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BBS_TYPE_UNKNOWN 0xFF 33276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 33376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef union { 33476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH DevPath; 33576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PCI_DEVICE_PATH Pci; 33676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PCCARD_DEVICE_PATH PcCard; 33776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman MEMMAP_DEVICE_PATH MemMap; 33876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman VENDOR_DEVICE_PATH Vendor; 33976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UNKNOWN_DEVICE_VENDOR_DEVICE_PATH UnknownVendor; 34076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman CONTROLLER_DEVICE_PATH Controller; 34176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ACPI_HID_DEVICE_PATH Acpi; 34276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 34376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ATAPI_DEVICE_PATH Atapi; 34476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman SCSI_DEVICE_PATH Scsi; 34576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman FIBRECHANNEL_DEVICE_PATH FibreChannel; 34676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 34776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman F1394_DEVICE_PATH F1394; 34876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman USB_DEVICE_PATH Usb; 34976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman USB_CLASS_DEVICE_PATH UsbClass; 35076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman I2O_DEVICE_PATH I2O; 35176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman MAC_ADDR_DEVICE_PATH MacAddr; 35276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IPv4_DEVICE_PATH Ipv4; 35376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IPv6_DEVICE_PATH Ipv6; 35476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman INFINIBAND_DEVICE_PATH InfiniBand; 35576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UART_DEVICE_PATH Uart; 35676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 35776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman HARDDRIVE_DEVICE_PATH HardDrive; 35876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman CDROM_DEVICE_PATH CD; 35976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 36076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman FILEPATH_DEVICE_PATH FilePath; 36176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol; 36276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 36376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman BBS_BBS_DEVICE_PATH Bbs; 36476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 36576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_DEV_PATH; 36676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 36776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef union { 36876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH *DevPath; 36976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PCI_DEVICE_PATH *Pci; 37076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman PCCARD_DEVICE_PATH *PcCard; 37176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman MEMMAP_DEVICE_PATH *MemMap; 37276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman VENDOR_DEVICE_PATH *Vendor; 37376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UNKNOWN_DEVICE_VENDOR_DEVICE_PATH *UnknownVendor; 37476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman CONTROLLER_DEVICE_PATH *Controller; 37576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ACPI_HID_DEVICE_PATH *Acpi; 37676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 37776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ATAPI_DEVICE_PATH *Atapi; 37876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman SCSI_DEVICE_PATH *Scsi; 37976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman FIBRECHANNEL_DEVICE_PATH *FibreChannel; 38076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman F1394_DEVICE_PATH *F1394; 38276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman USB_DEVICE_PATH *Usb; 38376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman USB_CLASS_DEVICE_PATH *UsbClass; 38476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman I2O_DEVICE_PATH *I2O; 38576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman MAC_ADDR_DEVICE_PATH *MacAddr; 38676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IPv4_DEVICE_PATH *Ipv4; 38776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IPv6_DEVICE_PATH *Ipv6; 38876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman INFINIBAND_DEVICE_PATH *InfiniBand; 38976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UART_DEVICE_PATH *Uart; 39076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman HARDDRIVE_DEVICE_PATH *HardDrive; 39276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman FILEPATH_DEVICE_PATH *FilePath; 39476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol; 39576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman CDROM_DEVICE_PATH *CD; 39776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman BBS_BBS_DEVICE_PATH *Bbs; 39876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_DEV_PATH_PTR; 40076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 403