efidevp.h revision 96893
1/* $FreeBSD: head/sys/boot/efi/include/efidevp.h 96893 2002-05-19 03:17:22Z marcel $ */ 2#ifndef _DEVPATH_H 3#define _DEVPATH_H 4 5/*++ 6 7Copyright (c) 1998 Intel Corporation 8 9Module Name: 10 11 devpath.h 12 13Abstract: 14 15 Defines for parsing the EFI Device Path structures 16 17 18 19Revision History 20 21--*/ 22 23/* 24 * Device Path structures - Section C 25 */ 26 27typedef struct _EFI_DEVICE_PATH { 28 UINT8 Type; 29 UINT8 SubType; 30 UINT8 Length[2]; 31} EFI_DEVICE_PATH; 32 33#define EFI_DP_TYPE_MASK 0x7F 34#define EFI_DP_TYPE_UNPACKED 0x80 35 36#define END_DEVICE_PATH_TYPE 0x7f 37 38#define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff 39#define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01 40#define END_DEVICE_PATH_LENGTH (sizeof(EFI_DEVICE_PATH)) 41 42 43#define DP_IS_END_TYPE(a) 44#define DP_IS_END_SUBTYPE(a) ( ((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE ) 45 46#define DevicePathType(a) ( ((a)->Type) & EFI_DP_TYPE_MASK ) 47#define DevicePathSubType(a) ( (a)->SubType ) 48#define DevicePathNodeLength(a) ( ((a)->Length[0]) | ((a)->Length[1] << 8) ) 49#define NextDevicePathNode(a) ( (EFI_DEVICE_PATH *) ( ((UINT8 *) (a)) + DevicePathNodeLength(a))) 50#define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE ) 51#define IsDevicePathEndSubType(a) ( (a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE ) 52#define IsDevicePathEnd(a) ( IsDevicePathEndType(a) && IsDevicePathEndSubType(a) ) 53#define IsDevicePathUnpacked(a) ( (a)->Type & EFI_DP_TYPE_UNPACKED ) 54 55 56#define SetDevicePathNodeLength(a,l) { \ 57 (a)->Length[0] = (UINT8) (l); \ 58 (a)->Length[1] = (UINT8) ((l) >> 8); \ 59 } 60 61#define SetDevicePathEndNode(a) { \ 62 (a)->Type = END_DEVICE_PATH_TYPE; \ 63 (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \ 64 (a)->Length[0] = sizeof(EFI_DEVICE_PATH); \ 65 (a)->Length[1] = 0; \ 66 } 67 68 69 70/* 71 * 72 */ 73#define HARDWARE_DEVICE_PATH 0x01 74 75#define HW_PCI_DP 0x01 76typedef struct _PCI_DEVICE_PATH { 77 EFI_DEVICE_PATH Header; 78 UINT8 Function; 79 UINT8 Device; 80} PCI_DEVICE_PATH; 81 82#define HW_PCCARD_DP 0x02 83typedef struct _PCCARD_DEVICE_PATH { 84 EFI_DEVICE_PATH Header; 85 UINT8 SocketNumber; 86} PCCARD_DEVICE_PATH; 87 88#define HW_MEMMAP_DP 0x03 89typedef struct _MEMMAP_DEVICE_PATH { 90 EFI_DEVICE_PATH Header; 91 UINT32 MemoryType; 92 EFI_PHYSICAL_ADDRESS StartingAddress; 93 EFI_PHYSICAL_ADDRESS EndingAddress; 94} MEMMAP_DEVICE_PATH; 95 96#define HW_VENDOR_DP 0x04 97typedef struct _VENDOR_DEVICE_PATH { 98 EFI_DEVICE_PATH Header; 99 EFI_GUID Guid; 100} VENDOR_DEVICE_PATH; 101 102#define UNKNOWN_DEVICE_GUID \ 103 { 0xcf31fac5, 0xc24e, 0x11d2, 0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b } 104 105typedef struct _UKNOWN_DEVICE_VENDOR_DP { 106 VENDOR_DEVICE_PATH DevicePath; 107 UINT8 LegacyDriveLetter; 108} UNKNOWN_DEVICE_VENDOR_DEVICE_PATH; 109 110#define HW_CONTROLLER_DP 0x05 111typedef struct _CONTROLLER_DEVICE_PATH { 112 EFI_DEVICE_PATH Header; 113 UINT32 Controller; 114} CONTROLLER_DEVICE_PATH; 115 116/* 117 * 118 */ 119#define ACPI_DEVICE_PATH 0x02 120 121#define ACPI_DP 0x01 122typedef struct _ACPI_HID_DEVICE_PATH { 123 EFI_DEVICE_PATH Header; 124 UINT32 HID; 125 UINT32 UID; 126} ACPI_HID_DEVICE_PATH; 127 128/* 129 * EISA ID Macro 130 * EISA ID Definition 32-bits 131 * bits[15:0] - three character compressed ASCII EISA ID. 132 * bits[31:16] - binary number 133 * Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z' 134 */ 135#define PNP_EISA_ID_CONST 0x41d0 136#define EISA_ID(_Name, _Num) ((UINT32) ((_Name) | (_Num) << 16)) 137#define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId))) 138 139#define PNP_EISA_ID_MASK 0xffff 140#define EISA_ID_TO_NUM(_Id) ((_Id) >> 16) 141/* 142 * 143 */ 144#define MESSAGING_DEVICE_PATH 0x03 145 146#define MSG_ATAPI_DP 0x01 147typedef struct _ATAPI_DEVICE_PATH { 148 EFI_DEVICE_PATH Header; 149 UINT8 PrimarySecondary; 150 UINT8 SlaveMaster; 151 UINT16 Lun; 152} ATAPI_DEVICE_PATH; 153 154#define MSG_SCSI_DP 0x02 155typedef struct _SCSI_DEVICE_PATH { 156 EFI_DEVICE_PATH Header; 157 UINT16 Pun; 158 UINT16 Lun; 159} SCSI_DEVICE_PATH; 160 161#define MSG_FIBRECHANNEL_DP 0x03 162typedef struct _FIBRECHANNEL_DEVICE_PATH { 163 EFI_DEVICE_PATH Header; 164 UINT32 Reserved; 165 UINT64 WWN; 166 UINT64 Lun; 167} FIBRECHANNEL_DEVICE_PATH; 168 169#define MSG_1394_DP 0x04 170typedef struct _F1394_DEVICE_PATH { 171 EFI_DEVICE_PATH Header; 172 UINT32 Reserved; 173 UINT64 Guid; 174} F1394_DEVICE_PATH; 175 176#define MSG_USB_DP 0x05 177typedef struct _USB_DEVICE_PATH { 178 EFI_DEVICE_PATH Header; 179 UINT8 Port; 180 UINT8 Endpoint; 181} USB_DEVICE_PATH; 182 183#define MSG_USB_CLASS_DP 0x0F 184typedef struct _USB_CLASS_DEVICE_PATH { 185 EFI_DEVICE_PATH Header; 186 UINT16 VendorId; 187 UINT16 ProductId; 188 UINT8 DeviceClass; 189 UINT8 DeviceSubclass; 190 UINT8 DeviceProtocol; 191} USB_CLASS_DEVICE_PATH; 192 193#define MSG_I2O_DP 0x06 194typedef struct _I2O_DEVICE_PATH { 195 EFI_DEVICE_PATH Header; 196 UINT32 Tid; 197} I2O_DEVICE_PATH; 198 199#define MSG_MAC_ADDR_DP 0x0b 200typedef struct _MAC_ADDR_DEVICE_PATH { 201 EFI_DEVICE_PATH Header; 202 EFI_MAC_ADDRESS MacAddress; 203 UINT8 IfType; 204} MAC_ADDR_DEVICE_PATH; 205 206#define MSG_IPv4_DP 0x0c 207typedef struct _IPv4_DEVICE_PATH { 208 EFI_DEVICE_PATH Header; 209 EFI_IPv4_ADDRESS LocalIpAddress; 210 EFI_IPv4_ADDRESS RemoteIpAddress; 211 UINT16 LocalPort; 212 UINT16 RemotePort; 213 UINT16 Protocol; 214 BOOLEAN StaticIpAddress; 215} IPv4_DEVICE_PATH; 216 217#define MSG_IPv6_DP 0x0d 218typedef struct _IPv6_DEVICE_PATH { 219 EFI_DEVICE_PATH Header; 220 EFI_IPv6_ADDRESS LocalIpAddress; 221 EFI_IPv6_ADDRESS RemoteIpAddress; 222 UINT16 LocalPort; 223 UINT16 RemotePort; 224 UINT16 Protocol; 225 BOOLEAN StaticIpAddress; 226} IPv6_DEVICE_PATH; 227 228#define MSG_INFINIBAND_DP 0x09 229typedef struct _INFINIBAND_DEVICE_PATH { 230 EFI_DEVICE_PATH Header; 231 UINT32 Reserved; 232 UINT64 NodeGuid; 233 UINT64 IocGuid; 234 UINT64 DeviceId; 235} INFINIBAND_DEVICE_PATH; 236 237#define MSG_UART_DP 0x0e 238typedef struct _UART_DEVICE_PATH { 239 EFI_DEVICE_PATH Header; 240 UINT32 Reserved; 241 UINT64 BaudRate; 242 UINT8 DataBits; 243 UINT8 Parity; 244 UINT8 StopBits; 245} UART_DEVICE_PATH; 246 247#define MSG_VENDOR_DP 0x0A 248/* Use VENDOR_DEVICE_PATH struct */ 249 250#define DEVICE_PATH_MESSAGING_PC_ANSI \ 251 { 0xe0c14753, 0xf9be, 0x11d2, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } 252 253#define DEVICE_PATH_MESSAGING_VT_100 \ 254 { 0xdfa66065, 0xb419, 0x11d3, 0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } 255 256 257 258#define MEDIA_DEVICE_PATH 0x04 259 260#define MEDIA_HARDDRIVE_DP 0x01 261typedef struct _HARDDRIVE_DEVICE_PATH { 262 EFI_DEVICE_PATH Header; 263 UINT32 PartitionNumber; 264 UINT64 PartitionStart; 265 UINT64 PartitionSize; 266 UINT8 Signature[16]; 267 UINT8 MBRType; 268 UINT8 SignatureType; 269} HARDDRIVE_DEVICE_PATH; 270 271#define MBR_TYPE_PCAT 0x01 272#define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02 273 274#define SIGNATURE_TYPE_MBR 0x01 275#define SIGNATURE_TYPE_GUID 0x02 276 277#define MEDIA_CDROM_DP 0x02 278typedef struct _CDROM_DEVICE_PATH { 279 EFI_DEVICE_PATH Header; 280 UINT32 BootEntry; 281 UINT64 PartitionStart; 282 UINT64 PartitionSize; 283} CDROM_DEVICE_PATH; 284 285#define MEDIA_VENDOR_DP 0x03 286/* Use VENDOR_DEVICE_PATH struct */ 287 288#define MEDIA_FILEPATH_DP 0x04 289typedef struct _FILEPATH_DEVICE_PATH { 290 EFI_DEVICE_PATH Header; 291 CHAR16 PathName[1]; 292} FILEPATH_DEVICE_PATH; 293 294#define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName) 295 296#define MEDIA_PROTOCOL_DP 0x05 297typedef struct _MEDIA_PROTOCOL_DEVICE_PATH { 298 EFI_DEVICE_PATH Header; 299 EFI_GUID Protocol; 300} MEDIA_PROTOCOL_DEVICE_PATH; 301 302 303#define BBS_DEVICE_PATH 0x05 304#define BBS_BBS_DP 0x01 305typedef struct _BBS_BBS_DEVICE_PATH { 306 EFI_DEVICE_PATH Header; 307 UINT16 DeviceType; 308 UINT16 StatusFlag; 309 CHAR8 String[1]; 310} BBS_BBS_DEVICE_PATH; 311 312/* DeviceType definitions - from BBS specification */ 313#define BBS_TYPE_FLOPPY 0x01 314#define BBS_TYPE_HARDDRIVE 0x02 315#define BBS_TYPE_CDROM 0x03 316#define BBS_TYPE_PCMCIA 0x04 317#define BBS_TYPE_USB 0x05 318#define BBS_TYPE_EMBEDDED_NETWORK 0x06 319#define BBS_TYPE_DEV 0x80 320#define BBS_TYPE_UNKNOWN 0xFF 321 322typedef union { 323 EFI_DEVICE_PATH DevPath; 324 PCI_DEVICE_PATH Pci; 325 PCCARD_DEVICE_PATH PcCard; 326 MEMMAP_DEVICE_PATH MemMap; 327 VENDOR_DEVICE_PATH Vendor; 328 UNKNOWN_DEVICE_VENDOR_DEVICE_PATH UnknownVendor; 329 CONTROLLER_DEVICE_PATH Controller; 330 ACPI_HID_DEVICE_PATH Acpi; 331 332 ATAPI_DEVICE_PATH Atapi; 333 SCSI_DEVICE_PATH Scsi; 334 FIBRECHANNEL_DEVICE_PATH FibreChannel; 335 336 F1394_DEVICE_PATH F1394; 337 USB_DEVICE_PATH Usb; 338 USB_CLASS_DEVICE_PATH UsbClass; 339 I2O_DEVICE_PATH I2O; 340 MAC_ADDR_DEVICE_PATH MacAddr; 341 IPv4_DEVICE_PATH Ipv4; 342 IPv6_DEVICE_PATH Ipv6; 343 INFINIBAND_DEVICE_PATH InfiniBand; 344 UART_DEVICE_PATH Uart; 345 346 HARDDRIVE_DEVICE_PATH HardDrive; 347 CDROM_DEVICE_PATH CD; 348 349 FILEPATH_DEVICE_PATH FilePath; 350 MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol; 351 352 BBS_BBS_DEVICE_PATH Bbs; 353 354} EFI_DEV_PATH; 355 356typedef union { 357 EFI_DEVICE_PATH *DevPath; 358 PCI_DEVICE_PATH *Pci; 359 PCCARD_DEVICE_PATH *PcCard; 360 MEMMAP_DEVICE_PATH *MemMap; 361 VENDOR_DEVICE_PATH *Vendor; 362 UNKNOWN_DEVICE_VENDOR_DEVICE_PATH *UnknownVendor; 363 CONTROLLER_DEVICE_PATH *Controller; 364 ACPI_HID_DEVICE_PATH *Acpi; 365 366 ATAPI_DEVICE_PATH *Atapi; 367 SCSI_DEVICE_PATH *Scsi; 368 FIBRECHANNEL_DEVICE_PATH *FibreChannel; 369 370 F1394_DEVICE_PATH *F1394; 371 USB_DEVICE_PATH *Usb; 372 USB_CLASS_DEVICE_PATH *UsbClass; 373 I2O_DEVICE_PATH *I2O; 374 MAC_ADDR_DEVICE_PATH *MacAddr; 375 IPv4_DEVICE_PATH *Ipv4; 376 IPv6_DEVICE_PATH *Ipv6; 377 INFINIBAND_DEVICE_PATH *InfiniBand; 378 UART_DEVICE_PATH *Uart; 379 380 HARDDRIVE_DEVICE_PATH *HardDrive; 381 382 FILEPATH_DEVICE_PATH *FilePath; 383 MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol; 384 385 CDROM_DEVICE_PATH *CD; 386 BBS_BBS_DEVICE_PATH *Bbs; 387 388} EFI_DEV_PATH_PTR; 389 390 391#endif 392