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