xref: /freebsd-src/sys/contrib/edk2/Include/Protocol/DevicePath.h (revision 0d1ba6657e90b1f9b76e1c393b1555d6cf6cf260)
1*0d1ba665SWarner Losh /** @file
2*0d1ba665SWarner Losh   The device path protocol as defined in UEFI 2.0.
3*0d1ba665SWarner Losh 
4*0d1ba665SWarner Losh   The device path represents a programmatic path to a device,
5*0d1ba665SWarner Losh   from a software point of view. The path must persist from boot to boot, so
6*0d1ba665SWarner Losh   it can not contain things like PCI bus numbers that change from boot to boot.
7*0d1ba665SWarner Losh 
8*0d1ba665SWarner Losh Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
9*0d1ba665SWarner Losh This program and the accompanying materials are licensed and made available under
10*0d1ba665SWarner Losh the terms and conditions of the BSD License that accompanies this distribution.
11*0d1ba665SWarner Losh The full text of the license may be found at
12*0d1ba665SWarner Losh http://opensource.org/licenses/bsd-license.php.
13*0d1ba665SWarner Losh 
14*0d1ba665SWarner Losh THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15*0d1ba665SWarner Losh WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16*0d1ba665SWarner Losh 
17*0d1ba665SWarner Losh **/
18*0d1ba665SWarner Losh 
19*0d1ba665SWarner Losh #ifndef __EFI_DEVICE_PATH_PROTOCOL_H__
20*0d1ba665SWarner Losh #define __EFI_DEVICE_PATH_PROTOCOL_H__
21*0d1ba665SWarner Losh 
22*0d1ba665SWarner Losh #include <Guid/PcAnsi.h>
23*0d1ba665SWarner Losh #include <IndustryStandard/Bluetooth.h>
24*0d1ba665SWarner Losh #include <IndustryStandard/Acpi60.h>
25*0d1ba665SWarner Losh 
26*0d1ba665SWarner Losh ///
27*0d1ba665SWarner Losh /// Device Path protocol.
28*0d1ba665SWarner Losh ///
29*0d1ba665SWarner Losh #define EFI_DEVICE_PATH_PROTOCOL_GUID \
30*0d1ba665SWarner Losh   { \
31*0d1ba665SWarner Losh     0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
32*0d1ba665SWarner Losh   }
33*0d1ba665SWarner Losh 
34*0d1ba665SWarner Losh ///
35*0d1ba665SWarner Losh /// Device Path guid definition for backward-compatible with EFI1.1.
36*0d1ba665SWarner Losh ///
37*0d1ba665SWarner Losh #define DEVICE_PATH_PROTOCOL  EFI_DEVICE_PATH_PROTOCOL_GUID
38*0d1ba665SWarner Losh 
39*0d1ba665SWarner Losh #pragma pack(1)
40*0d1ba665SWarner Losh 
41*0d1ba665SWarner Losh /**
42*0d1ba665SWarner Losh   This protocol can be used on any device handle to obtain generic path/location
43*0d1ba665SWarner Losh   information concerning the physical device or logical device. If the handle does
44*0d1ba665SWarner Losh   not logically map to a physical device, the handle may not necessarily support
45*0d1ba665SWarner Losh   the device path protocol. The device path describes the location of the device
46*0d1ba665SWarner Losh   the handle is for. The size of the Device Path can be determined from the structures
47*0d1ba665SWarner Losh   that make up the Device Path.
48*0d1ba665SWarner Losh **/
49*0d1ba665SWarner Losh typedef struct {
50*0d1ba665SWarner Losh   UINT8 Type;       ///< 0x01 Hardware Device Path.
51*0d1ba665SWarner Losh                     ///< 0x02 ACPI Device Path.
52*0d1ba665SWarner Losh                     ///< 0x03 Messaging Device Path.
53*0d1ba665SWarner Losh                     ///< 0x04 Media Device Path.
54*0d1ba665SWarner Losh                     ///< 0x05 BIOS Boot Specification Device Path.
55*0d1ba665SWarner Losh                     ///< 0x7F End of Hardware Device Path.
56*0d1ba665SWarner Losh 
57*0d1ba665SWarner Losh   UINT8 SubType;    ///< Varies by Type
58*0d1ba665SWarner Losh                     ///< 0xFF End Entire Device Path, or
59*0d1ba665SWarner Losh                     ///< 0x01 End This Instance of a Device Path and start a new
60*0d1ba665SWarner Losh                     ///< Device Path.
61*0d1ba665SWarner Losh 
62*0d1ba665SWarner Losh   UINT8 Length[2];  ///< Specific Device Path data. Type and Sub-Type define
63*0d1ba665SWarner Losh                     ///< type of data. Size of data is included in Length.
64*0d1ba665SWarner Losh 
65*0d1ba665SWarner Losh } EFI_DEVICE_PATH_PROTOCOL;
66*0d1ba665SWarner Losh 
67*0d1ba665SWarner Losh ///
68*0d1ba665SWarner Losh /// Device Path protocol definition for backward-compatible with EFI1.1.
69*0d1ba665SWarner Losh ///
70*0d1ba665SWarner Losh typedef EFI_DEVICE_PATH_PROTOCOL  EFI_DEVICE_PATH;
71*0d1ba665SWarner Losh 
72*0d1ba665SWarner Losh ///
73*0d1ba665SWarner Losh /// Hardware Device Paths.
74*0d1ba665SWarner Losh ///
75*0d1ba665SWarner Losh #define HARDWARE_DEVICE_PATH      0x01
76*0d1ba665SWarner Losh 
77*0d1ba665SWarner Losh ///
78*0d1ba665SWarner Losh /// PCI Device Path SubType.
79*0d1ba665SWarner Losh ///
80*0d1ba665SWarner Losh #define HW_PCI_DP                 0x01
81*0d1ba665SWarner Losh 
82*0d1ba665SWarner Losh ///
83*0d1ba665SWarner Losh /// PCI Device Path.
84*0d1ba665SWarner Losh ///
85*0d1ba665SWarner Losh typedef struct {
86*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
87*0d1ba665SWarner Losh   ///
88*0d1ba665SWarner Losh   /// PCI Function Number.
89*0d1ba665SWarner Losh   ///
90*0d1ba665SWarner Losh   UINT8                           Function;
91*0d1ba665SWarner Losh   ///
92*0d1ba665SWarner Losh   /// PCI Device Number.
93*0d1ba665SWarner Losh   ///
94*0d1ba665SWarner Losh   UINT8                           Device;
95*0d1ba665SWarner Losh } PCI_DEVICE_PATH;
96*0d1ba665SWarner Losh 
97*0d1ba665SWarner Losh ///
98*0d1ba665SWarner Losh /// PCCARD Device Path SubType.
99*0d1ba665SWarner Losh ///
100*0d1ba665SWarner Losh #define HW_PCCARD_DP              0x02
101*0d1ba665SWarner Losh 
102*0d1ba665SWarner Losh ///
103*0d1ba665SWarner Losh /// PCCARD Device Path.
104*0d1ba665SWarner Losh ///
105*0d1ba665SWarner Losh typedef struct {
106*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
107*0d1ba665SWarner Losh   ///
108*0d1ba665SWarner Losh   /// Function Number (0 = First Function).
109*0d1ba665SWarner Losh   ///
110*0d1ba665SWarner Losh   UINT8                           FunctionNumber;
111*0d1ba665SWarner Losh } PCCARD_DEVICE_PATH;
112*0d1ba665SWarner Losh 
113*0d1ba665SWarner Losh ///
114*0d1ba665SWarner Losh /// Memory Mapped Device Path SubType.
115*0d1ba665SWarner Losh ///
116*0d1ba665SWarner Losh #define HW_MEMMAP_DP              0x03
117*0d1ba665SWarner Losh 
118*0d1ba665SWarner Losh ///
119*0d1ba665SWarner Losh /// Memory Mapped Device Path.
120*0d1ba665SWarner Losh ///
121*0d1ba665SWarner Losh typedef struct {
122*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
123*0d1ba665SWarner Losh   ///
124*0d1ba665SWarner Losh   /// EFI_MEMORY_TYPE
125*0d1ba665SWarner Losh   ///
126*0d1ba665SWarner Losh   UINT32                          MemoryType;
127*0d1ba665SWarner Losh   ///
128*0d1ba665SWarner Losh   /// Starting Memory Address.
129*0d1ba665SWarner Losh   ///
130*0d1ba665SWarner Losh   EFI_PHYSICAL_ADDRESS            StartingAddress;
131*0d1ba665SWarner Losh   ///
132*0d1ba665SWarner Losh   /// Ending Memory Address.
133*0d1ba665SWarner Losh   ///
134*0d1ba665SWarner Losh   EFI_PHYSICAL_ADDRESS            EndingAddress;
135*0d1ba665SWarner Losh } MEMMAP_DEVICE_PATH;
136*0d1ba665SWarner Losh 
137*0d1ba665SWarner Losh ///
138*0d1ba665SWarner Losh /// Hardware Vendor Device Path SubType.
139*0d1ba665SWarner Losh ///
140*0d1ba665SWarner Losh #define HW_VENDOR_DP              0x04
141*0d1ba665SWarner Losh 
142*0d1ba665SWarner Losh ///
143*0d1ba665SWarner Losh /// The Vendor Device Path allows the creation of vendor-defined Device Paths. A vendor must
144*0d1ba665SWarner Losh /// allocate a Vendor GUID for a Device Path. The Vendor GUID can then be used to define the
145*0d1ba665SWarner Losh /// contents on the n bytes that follow in the Vendor Device Path node.
146*0d1ba665SWarner Losh ///
147*0d1ba665SWarner Losh typedef struct {
148*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
149*0d1ba665SWarner Losh   ///
150*0d1ba665SWarner Losh   /// Vendor-assigned GUID that defines the data that follows.
151*0d1ba665SWarner Losh   ///
152*0d1ba665SWarner Losh   EFI_GUID                        Guid;
153*0d1ba665SWarner Losh   ///
154*0d1ba665SWarner Losh   /// Vendor-defined variable size data.
155*0d1ba665SWarner Losh   ///
156*0d1ba665SWarner Losh } VENDOR_DEVICE_PATH;
157*0d1ba665SWarner Losh 
158*0d1ba665SWarner Losh ///
159*0d1ba665SWarner Losh /// Controller Device Path SubType.
160*0d1ba665SWarner Losh ///
161*0d1ba665SWarner Losh #define HW_CONTROLLER_DP          0x05
162*0d1ba665SWarner Losh 
163*0d1ba665SWarner Losh ///
164*0d1ba665SWarner Losh /// Controller Device Path.
165*0d1ba665SWarner Losh ///
166*0d1ba665SWarner Losh typedef struct {
167*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
168*0d1ba665SWarner Losh   ///
169*0d1ba665SWarner Losh   /// Controller number.
170*0d1ba665SWarner Losh   ///
171*0d1ba665SWarner Losh   UINT32                          ControllerNumber;
172*0d1ba665SWarner Losh } CONTROLLER_DEVICE_PATH;
173*0d1ba665SWarner Losh 
174*0d1ba665SWarner Losh ///
175*0d1ba665SWarner Losh /// BMC Device Path SubType.
176*0d1ba665SWarner Losh ///
177*0d1ba665SWarner Losh #define HW_BMC_DP                 0x06
178*0d1ba665SWarner Losh 
179*0d1ba665SWarner Losh ///
180*0d1ba665SWarner Losh /// BMC Device Path.
181*0d1ba665SWarner Losh ///
182*0d1ba665SWarner Losh typedef struct {
183*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
184*0d1ba665SWarner Losh   ///
185*0d1ba665SWarner Losh   /// Interface Type.
186*0d1ba665SWarner Losh   ///
187*0d1ba665SWarner Losh   UINT8                           InterfaceType;
188*0d1ba665SWarner Losh   ///
189*0d1ba665SWarner Losh   /// Base Address.
190*0d1ba665SWarner Losh   ///
191*0d1ba665SWarner Losh   UINT8                           BaseAddress[8];
192*0d1ba665SWarner Losh } BMC_DEVICE_PATH;
193*0d1ba665SWarner Losh 
194*0d1ba665SWarner Losh ///
195*0d1ba665SWarner Losh /// ACPI Device Paths.
196*0d1ba665SWarner Losh ///
197*0d1ba665SWarner Losh #define ACPI_DEVICE_PATH          0x02
198*0d1ba665SWarner Losh 
199*0d1ba665SWarner Losh ///
200*0d1ba665SWarner Losh /// ACPI Device Path SubType.
201*0d1ba665SWarner Losh ///
202*0d1ba665SWarner Losh #define ACPI_DP                   0x01
203*0d1ba665SWarner Losh typedef struct {
204*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
205*0d1ba665SWarner Losh   ///
206*0d1ba665SWarner Losh   /// Device's PnP hardware ID stored in a numeric 32-bit
207*0d1ba665SWarner Losh   /// compressed EISA-type ID. This value must match the
208*0d1ba665SWarner Losh   /// corresponding _HID in the ACPI name space.
209*0d1ba665SWarner Losh   ///
210*0d1ba665SWarner Losh   UINT32                          HID;
211*0d1ba665SWarner Losh   ///
212*0d1ba665SWarner Losh   /// Unique ID that is required by ACPI if two devices have the
213*0d1ba665SWarner Losh   /// same _HID. This value must also match the corresponding
214*0d1ba665SWarner Losh   /// _UID/_HID pair in the ACPI name space. Only the 32-bit
215*0d1ba665SWarner Losh   /// numeric value type of _UID is supported. Thus, strings must
216*0d1ba665SWarner Losh   /// not be used for the _UID in the ACPI name space.
217*0d1ba665SWarner Losh   ///
218*0d1ba665SWarner Losh   UINT32                          UID;
219*0d1ba665SWarner Losh } ACPI_HID_DEVICE_PATH;
220*0d1ba665SWarner Losh 
221*0d1ba665SWarner Losh ///
222*0d1ba665SWarner Losh /// Expanded ACPI Device Path SubType.
223*0d1ba665SWarner Losh ///
224*0d1ba665SWarner Losh #define ACPI_EXTENDED_DP          0x02
225*0d1ba665SWarner Losh typedef struct {
226*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
227*0d1ba665SWarner Losh   ///
228*0d1ba665SWarner Losh   /// Device's PnP hardware ID stored in a numeric 32-bit
229*0d1ba665SWarner Losh   /// compressed EISA-type ID. This value must match the
230*0d1ba665SWarner Losh   /// corresponding _HID in the ACPI name space.
231*0d1ba665SWarner Losh   ///
232*0d1ba665SWarner Losh   UINT32                          HID;
233*0d1ba665SWarner Losh   ///
234*0d1ba665SWarner Losh   /// Unique ID that is required by ACPI if two devices have the
235*0d1ba665SWarner Losh   /// same _HID. This value must also match the corresponding
236*0d1ba665SWarner Losh   /// _UID/_HID pair in the ACPI name space.
237*0d1ba665SWarner Losh   ///
238*0d1ba665SWarner Losh   UINT32                          UID;
239*0d1ba665SWarner Losh   ///
240*0d1ba665SWarner Losh   /// Device's compatible PnP hardware ID stored in a numeric
241*0d1ba665SWarner Losh   /// 32-bit compressed EISA-type ID. This value must match at
242*0d1ba665SWarner Losh   /// least one of the compatible device IDs returned by the
243*0d1ba665SWarner Losh   /// corresponding _CID in the ACPI name space.
244*0d1ba665SWarner Losh   ///
245*0d1ba665SWarner Losh   UINT32                          CID;
246*0d1ba665SWarner Losh   ///
247*0d1ba665SWarner Losh   /// Optional variable length _HIDSTR.
248*0d1ba665SWarner Losh   /// Optional variable length _UIDSTR.
249*0d1ba665SWarner Losh   /// Optional variable length _CIDSTR.
250*0d1ba665SWarner Losh   ///
251*0d1ba665SWarner Losh } ACPI_EXTENDED_HID_DEVICE_PATH;
252*0d1ba665SWarner Losh 
253*0d1ba665SWarner Losh //
254*0d1ba665SWarner Losh //  EISA ID Macro
255*0d1ba665SWarner Losh //  EISA ID Definition 32-bits
256*0d1ba665SWarner Losh //   bits[15:0] - three character compressed ASCII EISA ID.
257*0d1ba665SWarner Losh //   bits[31:16] - binary number
258*0d1ba665SWarner Losh //    Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z'
259*0d1ba665SWarner Losh //
260*0d1ba665SWarner Losh #define PNP_EISA_ID_CONST         0x41d0
261*0d1ba665SWarner Losh #define EISA_ID(_Name, _Num)      ((UINT32)((_Name) | (_Num) << 16))
262*0d1ba665SWarner Losh #define EISA_PNP_ID(_PNPId)       (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
263*0d1ba665SWarner Losh #define EFI_PNP_ID(_PNPId)        (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
264*0d1ba665SWarner Losh 
265*0d1ba665SWarner Losh #define PNP_EISA_ID_MASK          0xffff
266*0d1ba665SWarner Losh #define EISA_ID_TO_NUM(_Id)       ((_Id) >> 16)
267*0d1ba665SWarner Losh 
268*0d1ba665SWarner Losh ///
269*0d1ba665SWarner Losh /// ACPI _ADR Device Path SubType.
270*0d1ba665SWarner Losh ///
271*0d1ba665SWarner Losh #define ACPI_ADR_DP               0x03
272*0d1ba665SWarner Losh 
273*0d1ba665SWarner Losh ///
274*0d1ba665SWarner Losh /// The _ADR device path is used to contain video output device attributes to support the Graphics
275*0d1ba665SWarner Losh /// Output Protocol. The device path can contain multiple _ADR entries if multiple video output
276*0d1ba665SWarner Losh /// devices are displaying the same output.
277*0d1ba665SWarner Losh ///
278*0d1ba665SWarner Losh typedef struct {
279*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
280*0d1ba665SWarner Losh   ///
281*0d1ba665SWarner Losh   /// _ADR value. For video output devices the value of this
282*0d1ba665SWarner Losh   /// field comes from Table B-2 of the ACPI 3.0 specification. At
283*0d1ba665SWarner Losh   /// least one _ADR value is required.
284*0d1ba665SWarner Losh   ///
285*0d1ba665SWarner Losh   UINT32                          ADR;
286*0d1ba665SWarner Losh   //
287*0d1ba665SWarner Losh   // This device path may optionally contain more than one _ADR entry.
288*0d1ba665SWarner Losh   //
289*0d1ba665SWarner Losh } ACPI_ADR_DEVICE_PATH;
290*0d1ba665SWarner Losh 
291*0d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_OTHER             0
292*0d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_VGA               1
293*0d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_TV                2
294*0d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL  3
295*0d1ba665SWarner Losh #define ACPI_ADR_DISPLAY_TYPE_INTERNAL_DIGITAL  4
296*0d1ba665SWarner Losh 
297*0d1ba665SWarner Losh #define ACPI_DISPLAY_ADR(_DeviceIdScheme, _HeadId, _NonVgaOutput, _BiosCanDetect, _VendorInfo, _Type, _Port, _Index) \
298*0d1ba665SWarner Losh           ((UINT32)(  ((UINT32)((_DeviceIdScheme) & 0x1) << 31) |  \
299*0d1ba665SWarner Losh                       (((_HeadId)                 & 0x7) << 18) |  \
300*0d1ba665SWarner Losh                       (((_NonVgaOutput)           & 0x1) << 17) |  \
301*0d1ba665SWarner Losh                       (((_BiosCanDetect)          & 0x1) << 16) |  \
302*0d1ba665SWarner Losh                       (((_VendorInfo)             & 0xf) << 12) |  \
303*0d1ba665SWarner Losh                       (((_Type)                   & 0xf) << 8)  |  \
304*0d1ba665SWarner Losh                       (((_Port)                   & 0xf) << 4)  |  \
305*0d1ba665SWarner Losh                        ((_Index)                  & 0xf) ))
306*0d1ba665SWarner Losh 
307*0d1ba665SWarner Losh ///
308*0d1ba665SWarner Losh /// Messaging Device Paths.
309*0d1ba665SWarner Losh /// This Device Path is used to describe the connection of devices outside the resource domain of the
310*0d1ba665SWarner Losh /// system. This Device Path can describe physical messaging information like SCSI ID, or abstract
311*0d1ba665SWarner Losh /// information like networking protocol IP addresses.
312*0d1ba665SWarner Losh ///
313*0d1ba665SWarner Losh #define MESSAGING_DEVICE_PATH     0x03
314*0d1ba665SWarner Losh 
315*0d1ba665SWarner Losh ///
316*0d1ba665SWarner Losh /// ATAPI Device Path SubType
317*0d1ba665SWarner Losh ///
318*0d1ba665SWarner Losh #define MSG_ATAPI_DP              0x01
319*0d1ba665SWarner Losh typedef struct {
320*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
321*0d1ba665SWarner Losh   ///
322*0d1ba665SWarner Losh   /// Set to zero for primary, or one for secondary.
323*0d1ba665SWarner Losh   ///
324*0d1ba665SWarner Losh   UINT8                           PrimarySecondary;
325*0d1ba665SWarner Losh   ///
326*0d1ba665SWarner Losh   /// Set to zero for master, or one for slave mode.
327*0d1ba665SWarner Losh   ///
328*0d1ba665SWarner Losh   UINT8                           SlaveMaster;
329*0d1ba665SWarner Losh   ///
330*0d1ba665SWarner Losh   /// Logical Unit Number.
331*0d1ba665SWarner Losh   ///
332*0d1ba665SWarner Losh   UINT16                          Lun;
333*0d1ba665SWarner Losh } ATAPI_DEVICE_PATH;
334*0d1ba665SWarner Losh 
335*0d1ba665SWarner Losh ///
336*0d1ba665SWarner Losh /// SCSI Device Path SubType.
337*0d1ba665SWarner Losh ///
338*0d1ba665SWarner Losh #define MSG_SCSI_DP               0x02
339*0d1ba665SWarner Losh typedef struct {
340*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
341*0d1ba665SWarner Losh   ///
342*0d1ba665SWarner Losh   /// Target ID on the SCSI bus (PUN).
343*0d1ba665SWarner Losh   ///
344*0d1ba665SWarner Losh   UINT16                          Pun;
345*0d1ba665SWarner Losh   ///
346*0d1ba665SWarner Losh   /// Logical Unit Number (LUN).
347*0d1ba665SWarner Losh   ///
348*0d1ba665SWarner Losh   UINT16                          Lun;
349*0d1ba665SWarner Losh } SCSI_DEVICE_PATH;
350*0d1ba665SWarner Losh 
351*0d1ba665SWarner Losh ///
352*0d1ba665SWarner Losh /// Fibre Channel SubType.
353*0d1ba665SWarner Losh ///
354*0d1ba665SWarner Losh #define MSG_FIBRECHANNEL_DP       0x03
355*0d1ba665SWarner Losh typedef struct {
356*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
357*0d1ba665SWarner Losh   ///
358*0d1ba665SWarner Losh   /// Reserved for the future.
359*0d1ba665SWarner Losh   ///
360*0d1ba665SWarner Losh   UINT32                          Reserved;
361*0d1ba665SWarner Losh   ///
362*0d1ba665SWarner Losh   /// Fibre Channel World Wide Number.
363*0d1ba665SWarner Losh   ///
364*0d1ba665SWarner Losh   UINT64                          WWN;
365*0d1ba665SWarner Losh   ///
366*0d1ba665SWarner Losh   /// Fibre Channel Logical Unit Number.
367*0d1ba665SWarner Losh   ///
368*0d1ba665SWarner Losh   UINT64                          Lun;
369*0d1ba665SWarner Losh } FIBRECHANNEL_DEVICE_PATH;
370*0d1ba665SWarner Losh 
371*0d1ba665SWarner Losh ///
372*0d1ba665SWarner Losh /// Fibre Channel Ex SubType.
373*0d1ba665SWarner Losh ///
374*0d1ba665SWarner Losh #define MSG_FIBRECHANNELEX_DP     0x15
375*0d1ba665SWarner Losh typedef struct {
376*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
377*0d1ba665SWarner Losh   ///
378*0d1ba665SWarner Losh   /// Reserved for the future.
379*0d1ba665SWarner Losh   ///
380*0d1ba665SWarner Losh   UINT32                          Reserved;
381*0d1ba665SWarner Losh   ///
382*0d1ba665SWarner Losh   /// 8 byte array containing Fibre Channel End Device Port Name.
383*0d1ba665SWarner Losh   ///
384*0d1ba665SWarner Losh   UINT8                           WWN[8];
385*0d1ba665SWarner Losh   ///
386*0d1ba665SWarner Losh   /// 8 byte array containing Fibre Channel Logical Unit Number.
387*0d1ba665SWarner Losh   ///
388*0d1ba665SWarner Losh   UINT8                           Lun[8];
389*0d1ba665SWarner Losh } FIBRECHANNELEX_DEVICE_PATH;
390*0d1ba665SWarner Losh 
391*0d1ba665SWarner Losh ///
392*0d1ba665SWarner Losh /// 1394 Device Path SubType
393*0d1ba665SWarner Losh ///
394*0d1ba665SWarner Losh #define MSG_1394_DP               0x04
395*0d1ba665SWarner Losh typedef struct {
396*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
397*0d1ba665SWarner Losh   ///
398*0d1ba665SWarner Losh   /// Reserved for the future.
399*0d1ba665SWarner Losh   ///
400*0d1ba665SWarner Losh   UINT32                          Reserved;
401*0d1ba665SWarner Losh   ///
402*0d1ba665SWarner Losh   /// 1394 Global Unique ID (GUID).
403*0d1ba665SWarner Losh   ///
404*0d1ba665SWarner Losh   UINT64                          Guid;
405*0d1ba665SWarner Losh } F1394_DEVICE_PATH;
406*0d1ba665SWarner Losh 
407*0d1ba665SWarner Losh ///
408*0d1ba665SWarner Losh /// USB Device Path SubType.
409*0d1ba665SWarner Losh ///
410*0d1ba665SWarner Losh #define MSG_USB_DP                0x05
411*0d1ba665SWarner Losh typedef struct {
412*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL      Header;
413*0d1ba665SWarner Losh   ///
414*0d1ba665SWarner Losh   /// USB Parent Port Number.
415*0d1ba665SWarner Losh   ///
416*0d1ba665SWarner Losh   UINT8                         ParentPortNumber;
417*0d1ba665SWarner Losh   ///
418*0d1ba665SWarner Losh   /// USB Interface Number.
419*0d1ba665SWarner Losh   ///
420*0d1ba665SWarner Losh   UINT8                         InterfaceNumber;
421*0d1ba665SWarner Losh } USB_DEVICE_PATH;
422*0d1ba665SWarner Losh 
423*0d1ba665SWarner Losh ///
424*0d1ba665SWarner Losh /// USB Class Device Path SubType.
425*0d1ba665SWarner Losh ///
426*0d1ba665SWarner Losh #define MSG_USB_CLASS_DP          0x0f
427*0d1ba665SWarner Losh typedef struct {
428*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL      Header;
429*0d1ba665SWarner Losh   ///
430*0d1ba665SWarner Losh   /// Vendor ID assigned by USB-IF. A value of 0xFFFF will
431*0d1ba665SWarner Losh   /// match any Vendor ID.
432*0d1ba665SWarner Losh   ///
433*0d1ba665SWarner Losh   UINT16                        VendorId;
434*0d1ba665SWarner Losh   ///
435*0d1ba665SWarner Losh   /// Product ID assigned by USB-IF. A value of 0xFFFF will
436*0d1ba665SWarner Losh   /// match any Product ID.
437*0d1ba665SWarner Losh   ///
438*0d1ba665SWarner Losh   UINT16                        ProductId;
439*0d1ba665SWarner Losh   ///
440*0d1ba665SWarner Losh   /// The class code assigned by the USB-IF. A value of 0xFF
441*0d1ba665SWarner Losh   /// will match any class code.
442*0d1ba665SWarner Losh   ///
443*0d1ba665SWarner Losh   UINT8                         DeviceClass;
444*0d1ba665SWarner Losh   ///
445*0d1ba665SWarner Losh   /// The subclass code assigned by the USB-IF. A value of
446*0d1ba665SWarner Losh   /// 0xFF will match any subclass code.
447*0d1ba665SWarner Losh   ///
448*0d1ba665SWarner Losh   UINT8                         DeviceSubClass;
449*0d1ba665SWarner Losh   ///
450*0d1ba665SWarner Losh   /// The protocol code assigned by the USB-IF. A value of
451*0d1ba665SWarner Losh   /// 0xFF will match any protocol code.
452*0d1ba665SWarner Losh   ///
453*0d1ba665SWarner Losh   UINT8                         DeviceProtocol;
454*0d1ba665SWarner Losh } USB_CLASS_DEVICE_PATH;
455*0d1ba665SWarner Losh 
456*0d1ba665SWarner Losh ///
457*0d1ba665SWarner Losh /// USB WWID Device Path SubType.
458*0d1ba665SWarner Losh ///
459*0d1ba665SWarner Losh #define MSG_USB_WWID_DP           0x10
460*0d1ba665SWarner Losh 
461*0d1ba665SWarner Losh ///
462*0d1ba665SWarner Losh /// This device path describes a USB device using its serial number.
463*0d1ba665SWarner Losh ///
464*0d1ba665SWarner Losh typedef struct {
465*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL      Header;
466*0d1ba665SWarner Losh   ///
467*0d1ba665SWarner Losh   /// USB interface number.
468*0d1ba665SWarner Losh   ///
469*0d1ba665SWarner Losh   UINT16                        InterfaceNumber;
470*0d1ba665SWarner Losh   ///
471*0d1ba665SWarner Losh   /// USB vendor id of the device.
472*0d1ba665SWarner Losh   ///
473*0d1ba665SWarner Losh   UINT16                        VendorId;
474*0d1ba665SWarner Losh   ///
475*0d1ba665SWarner Losh   /// USB product id of the device.
476*0d1ba665SWarner Losh   ///
477*0d1ba665SWarner Losh   UINT16                        ProductId;
478*0d1ba665SWarner Losh   ///
479*0d1ba665SWarner Losh   /// Last 64-or-fewer UTF-16 characters of the USB
480*0d1ba665SWarner Losh   /// serial number. The length of the string is
481*0d1ba665SWarner Losh   /// determined by the Length field less the offset of the
482*0d1ba665SWarner Losh   /// Serial Number field (10)
483*0d1ba665SWarner Losh   ///
484*0d1ba665SWarner Losh   /// CHAR16                     SerialNumber[...];
485*0d1ba665SWarner Losh } USB_WWID_DEVICE_PATH;
486*0d1ba665SWarner Losh 
487*0d1ba665SWarner Losh ///
488*0d1ba665SWarner Losh /// Device Logical Unit SubType.
489*0d1ba665SWarner Losh ///
490*0d1ba665SWarner Losh #define MSG_DEVICE_LOGICAL_UNIT_DP  0x11
491*0d1ba665SWarner Losh typedef struct {
492*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL      Header;
493*0d1ba665SWarner Losh   ///
494*0d1ba665SWarner Losh   /// Logical Unit Number for the interface.
495*0d1ba665SWarner Losh   ///
496*0d1ba665SWarner Losh   UINT8                         Lun;
497*0d1ba665SWarner Losh } DEVICE_LOGICAL_UNIT_DEVICE_PATH;
498*0d1ba665SWarner Losh 
499*0d1ba665SWarner Losh ///
500*0d1ba665SWarner Losh /// SATA Device Path SubType.
501*0d1ba665SWarner Losh ///
502*0d1ba665SWarner Losh #define MSG_SATA_DP               0x12
503*0d1ba665SWarner Losh typedef struct {
504*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
505*0d1ba665SWarner Losh   ///
506*0d1ba665SWarner Losh   /// The HBA port number that facilitates the connection to the
507*0d1ba665SWarner Losh   /// device or a port multiplier. The value 0xFFFF is reserved.
508*0d1ba665SWarner Losh   ///
509*0d1ba665SWarner Losh   UINT16                          HBAPortNumber;
510*0d1ba665SWarner Losh   ///
511*0d1ba665SWarner Losh   /// The Port multiplier port number that facilitates the connection
512*0d1ba665SWarner Losh   /// to the device. Must be set to 0xFFFF if the device is directly
513*0d1ba665SWarner Losh   /// connected to the HBA.
514*0d1ba665SWarner Losh   ///
515*0d1ba665SWarner Losh   UINT16                          PortMultiplierPortNumber;
516*0d1ba665SWarner Losh   ///
517*0d1ba665SWarner Losh   /// Logical Unit Number.
518*0d1ba665SWarner Losh   ///
519*0d1ba665SWarner Losh   UINT16                          Lun;
520*0d1ba665SWarner Losh } SATA_DEVICE_PATH;
521*0d1ba665SWarner Losh 
522*0d1ba665SWarner Losh ///
523*0d1ba665SWarner Losh /// Flag for if the device is directly connected to the HBA.
524*0d1ba665SWarner Losh ///
525*0d1ba665SWarner Losh #define SATA_HBA_DIRECT_CONNECT_FLAG 0x8000
526*0d1ba665SWarner Losh 
527*0d1ba665SWarner Losh ///
528*0d1ba665SWarner Losh /// I2O Device Path SubType.
529*0d1ba665SWarner Losh ///
530*0d1ba665SWarner Losh #define MSG_I2O_DP                0x06
531*0d1ba665SWarner Losh typedef struct {
532*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
533*0d1ba665SWarner Losh   ///
534*0d1ba665SWarner Losh   /// Target ID (TID) for a device.
535*0d1ba665SWarner Losh   ///
536*0d1ba665SWarner Losh   UINT32                          Tid;
537*0d1ba665SWarner Losh } I2O_DEVICE_PATH;
538*0d1ba665SWarner Losh 
539*0d1ba665SWarner Losh ///
540*0d1ba665SWarner Losh /// MAC Address Device Path SubType.
541*0d1ba665SWarner Losh ///
542*0d1ba665SWarner Losh #define MSG_MAC_ADDR_DP           0x0b
543*0d1ba665SWarner Losh typedef struct {
544*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
545*0d1ba665SWarner Losh   ///
546*0d1ba665SWarner Losh   /// The MAC address for a network interface padded with 0s.
547*0d1ba665SWarner Losh   ///
548*0d1ba665SWarner Losh   EFI_MAC_ADDRESS                 MacAddress;
549*0d1ba665SWarner Losh   ///
550*0d1ba665SWarner Losh   /// Network interface type(i.e. 802.3, FDDI).
551*0d1ba665SWarner Losh   ///
552*0d1ba665SWarner Losh   UINT8                           IfType;
553*0d1ba665SWarner Losh } MAC_ADDR_DEVICE_PATH;
554*0d1ba665SWarner Losh 
555*0d1ba665SWarner Losh ///
556*0d1ba665SWarner Losh /// IPv4 Device Path SubType
557*0d1ba665SWarner Losh ///
558*0d1ba665SWarner Losh #define MSG_IPv4_DP               0x0c
559*0d1ba665SWarner Losh typedef struct {
560*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
561*0d1ba665SWarner Losh   ///
562*0d1ba665SWarner Losh   /// The local IPv4 address.
563*0d1ba665SWarner Losh   ///
564*0d1ba665SWarner Losh   EFI_IPv4_ADDRESS                LocalIpAddress;
565*0d1ba665SWarner Losh   ///
566*0d1ba665SWarner Losh   /// The remote IPv4 address.
567*0d1ba665SWarner Losh   ///
568*0d1ba665SWarner Losh   EFI_IPv4_ADDRESS                RemoteIpAddress;
569*0d1ba665SWarner Losh   ///
570*0d1ba665SWarner Losh   /// The local port number.
571*0d1ba665SWarner Losh   ///
572*0d1ba665SWarner Losh   UINT16                          LocalPort;
573*0d1ba665SWarner Losh   ///
574*0d1ba665SWarner Losh   /// The remote port number.
575*0d1ba665SWarner Losh   ///
576*0d1ba665SWarner Losh   UINT16                          RemotePort;
577*0d1ba665SWarner Losh   ///
578*0d1ba665SWarner Losh   /// The network protocol(i.e. UDP, TCP).
579*0d1ba665SWarner Losh   ///
580*0d1ba665SWarner Losh   UINT16                          Protocol;
581*0d1ba665SWarner Losh   ///
582*0d1ba665SWarner Losh   /// 0x00 - The Source IP Address was assigned though DHCP.
583*0d1ba665SWarner Losh   /// 0x01 - The Source IP Address is statically bound.
584*0d1ba665SWarner Losh   ///
585*0d1ba665SWarner Losh   BOOLEAN                         StaticIpAddress;
586*0d1ba665SWarner Losh   ///
587*0d1ba665SWarner Losh   /// The gateway IP address
588*0d1ba665SWarner Losh   ///
589*0d1ba665SWarner Losh   EFI_IPv4_ADDRESS                GatewayIpAddress;
590*0d1ba665SWarner Losh   ///
591*0d1ba665SWarner Losh   /// The subnet mask
592*0d1ba665SWarner Losh   ///
593*0d1ba665SWarner Losh   EFI_IPv4_ADDRESS                SubnetMask;
594*0d1ba665SWarner Losh } IPv4_DEVICE_PATH;
595*0d1ba665SWarner Losh 
596*0d1ba665SWarner Losh ///
597*0d1ba665SWarner Losh /// IPv6 Device Path SubType.
598*0d1ba665SWarner Losh ///
599*0d1ba665SWarner Losh #define MSG_IPv6_DP               0x0d
600*0d1ba665SWarner Losh typedef struct {
601*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
602*0d1ba665SWarner Losh   ///
603*0d1ba665SWarner Losh   /// The local IPv6 address.
604*0d1ba665SWarner Losh   ///
605*0d1ba665SWarner Losh   EFI_IPv6_ADDRESS                LocalIpAddress;
606*0d1ba665SWarner Losh   ///
607*0d1ba665SWarner Losh   /// The remote IPv6 address.
608*0d1ba665SWarner Losh   ///
609*0d1ba665SWarner Losh   EFI_IPv6_ADDRESS                RemoteIpAddress;
610*0d1ba665SWarner Losh   ///
611*0d1ba665SWarner Losh   /// The local port number.
612*0d1ba665SWarner Losh   ///
613*0d1ba665SWarner Losh   UINT16                          LocalPort;
614*0d1ba665SWarner Losh   ///
615*0d1ba665SWarner Losh   /// The remote port number.
616*0d1ba665SWarner Losh   ///
617*0d1ba665SWarner Losh   UINT16                          RemotePort;
618*0d1ba665SWarner Losh   ///
619*0d1ba665SWarner Losh   /// The network protocol(i.e. UDP, TCP).
620*0d1ba665SWarner Losh   ///
621*0d1ba665SWarner Losh   UINT16                          Protocol;
622*0d1ba665SWarner Losh   ///
623*0d1ba665SWarner Losh   /// 0x00 - The Local IP Address was manually configured.
624*0d1ba665SWarner Losh   /// 0x01 - The Local IP Address is assigned through IPv6
625*0d1ba665SWarner Losh   /// stateless auto-configuration.
626*0d1ba665SWarner Losh   /// 0x02 - The Local IP Address is assigned through IPv6
627*0d1ba665SWarner Losh   /// stateful configuration.
628*0d1ba665SWarner Losh   ///
629*0d1ba665SWarner Losh   UINT8                           IpAddressOrigin;
630*0d1ba665SWarner Losh   ///
631*0d1ba665SWarner Losh   /// The prefix length
632*0d1ba665SWarner Losh   ///
633*0d1ba665SWarner Losh   UINT8                           PrefixLength;
634*0d1ba665SWarner Losh   ///
635*0d1ba665SWarner Losh   /// The gateway IP address
636*0d1ba665SWarner Losh   ///
637*0d1ba665SWarner Losh   EFI_IPv6_ADDRESS                GatewayIpAddress;
638*0d1ba665SWarner Losh } IPv6_DEVICE_PATH;
639*0d1ba665SWarner Losh 
640*0d1ba665SWarner Losh ///
641*0d1ba665SWarner Losh /// InfiniBand Device Path SubType.
642*0d1ba665SWarner Losh ///
643*0d1ba665SWarner Losh #define MSG_INFINIBAND_DP         0x09
644*0d1ba665SWarner Losh typedef struct {
645*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
646*0d1ba665SWarner Losh   ///
647*0d1ba665SWarner Losh   /// Flags to help identify/manage InfiniBand device path elements:
648*0d1ba665SWarner Losh   /// Bit 0 - IOC/Service (0b = IOC, 1b = Service).
649*0d1ba665SWarner Losh   /// Bit 1 - Extend Boot Environment.
650*0d1ba665SWarner Losh   /// Bit 2 - Console Protocol.
651*0d1ba665SWarner Losh   /// Bit 3 - Storage Protocol.
652*0d1ba665SWarner Losh   /// Bit 4 - Network Protocol.
653*0d1ba665SWarner Losh   /// All other bits are reserved.
654*0d1ba665SWarner Losh   ///
655*0d1ba665SWarner Losh   UINT32                          ResourceFlags;
656*0d1ba665SWarner Losh   ///
657*0d1ba665SWarner Losh   /// 128-bit Global Identifier for remote fabric port.
658*0d1ba665SWarner Losh   ///
659*0d1ba665SWarner Losh   UINT8                           PortGid[16];
660*0d1ba665SWarner Losh   ///
661*0d1ba665SWarner Losh   /// 64-bit unique identifier to remote IOC or server process.
662*0d1ba665SWarner Losh   /// Interpretation of field specified by Resource Flags (bit 0).
663*0d1ba665SWarner Losh   ///
664*0d1ba665SWarner Losh   UINT64                          ServiceId;
665*0d1ba665SWarner Losh   ///
666*0d1ba665SWarner Losh   /// 64-bit persistent ID of remote IOC port.
667*0d1ba665SWarner Losh   ///
668*0d1ba665SWarner Losh   UINT64                          TargetPortId;
669*0d1ba665SWarner Losh   ///
670*0d1ba665SWarner Losh   /// 64-bit persistent ID of remote device.
671*0d1ba665SWarner Losh   ///
672*0d1ba665SWarner Losh   UINT64                          DeviceId;
673*0d1ba665SWarner Losh } INFINIBAND_DEVICE_PATH;
674*0d1ba665SWarner Losh 
675*0d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_IOC_SERVICE                0x01
676*0d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_EXTENDED_BOOT_ENVIRONMENT  0x02
677*0d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_CONSOLE_PROTOCOL           0x04
678*0d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_STORAGE_PROTOCOL           0x08
679*0d1ba665SWarner Losh #define INFINIBAND_RESOURCE_FLAG_NETWORK_PROTOCOL           0x10
680*0d1ba665SWarner Losh 
681*0d1ba665SWarner Losh ///
682*0d1ba665SWarner Losh /// UART Device Path SubType.
683*0d1ba665SWarner Losh ///
684*0d1ba665SWarner Losh #define MSG_UART_DP               0x0e
685*0d1ba665SWarner Losh typedef struct {
686*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
687*0d1ba665SWarner Losh   ///
688*0d1ba665SWarner Losh   /// Reserved.
689*0d1ba665SWarner Losh   ///
690*0d1ba665SWarner Losh   UINT32                          Reserved;
691*0d1ba665SWarner Losh   ///
692*0d1ba665SWarner Losh   /// The baud rate setting for the UART style device. A value of 0
693*0d1ba665SWarner Losh   /// means that the device's default baud rate will be used.
694*0d1ba665SWarner Losh   ///
695*0d1ba665SWarner Losh   UINT64                          BaudRate;
696*0d1ba665SWarner Losh   ///
697*0d1ba665SWarner Losh   /// The number of data bits for the UART style device. A value
698*0d1ba665SWarner Losh   /// of 0 means that the device's default number of data bits will be used.
699*0d1ba665SWarner Losh   ///
700*0d1ba665SWarner Losh   UINT8                           DataBits;
701*0d1ba665SWarner Losh   ///
702*0d1ba665SWarner Losh   /// The parity setting for the UART style device.
703*0d1ba665SWarner Losh   /// Parity 0x00 - Default Parity.
704*0d1ba665SWarner Losh   /// Parity 0x01 - No Parity.
705*0d1ba665SWarner Losh   /// Parity 0x02 - Even Parity.
706*0d1ba665SWarner Losh   /// Parity 0x03 - Odd Parity.
707*0d1ba665SWarner Losh   /// Parity 0x04 - Mark Parity.
708*0d1ba665SWarner Losh   /// Parity 0x05 - Space Parity.
709*0d1ba665SWarner Losh   ///
710*0d1ba665SWarner Losh   UINT8                           Parity;
711*0d1ba665SWarner Losh   ///
712*0d1ba665SWarner Losh   /// The number of stop bits for the UART style device.
713*0d1ba665SWarner Losh   /// Stop Bits 0x00 - Default Stop Bits.
714*0d1ba665SWarner Losh   /// Stop Bits 0x01 - 1 Stop Bit.
715*0d1ba665SWarner Losh   /// Stop Bits 0x02 - 1.5 Stop Bits.
716*0d1ba665SWarner Losh   /// Stop Bits 0x03 - 2 Stop Bits.
717*0d1ba665SWarner Losh   ///
718*0d1ba665SWarner Losh   UINT8                           StopBits;
719*0d1ba665SWarner Losh } UART_DEVICE_PATH;
720*0d1ba665SWarner Losh 
721*0d1ba665SWarner Losh //
722*0d1ba665SWarner Losh // Use VENDOR_DEVICE_PATH struct
723*0d1ba665SWarner Losh //
724*0d1ba665SWarner Losh #define MSG_VENDOR_DP             0x0a
725*0d1ba665SWarner Losh typedef VENDOR_DEVICE_PATH        VENDOR_DEFINED_DEVICE_PATH;
726*0d1ba665SWarner Losh 
727*0d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_PC_ANSI     EFI_PC_ANSI_GUID
728*0d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_100      EFI_VT_100_GUID
729*0d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID
730*0d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_VT_UTF8     EFI_VT_UTF8_GUID
731*0d1ba665SWarner Losh 
732*0d1ba665SWarner Losh ///
733*0d1ba665SWarner Losh /// A new device path node is defined to declare flow control characteristics.
734*0d1ba665SWarner Losh /// UART Flow Control Messaging Device Path
735*0d1ba665SWarner Losh ///
736*0d1ba665SWarner Losh typedef struct {
737*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
738*0d1ba665SWarner Losh   ///
739*0d1ba665SWarner Losh   /// DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL GUID.
740*0d1ba665SWarner Losh   ///
741*0d1ba665SWarner Losh   EFI_GUID                        Guid;
742*0d1ba665SWarner Losh   ///
743*0d1ba665SWarner Losh   /// Bitmap of supported flow control types.
744*0d1ba665SWarner Losh   /// Bit 0 set indicates hardware flow control.
745*0d1ba665SWarner Losh   /// Bit 1 set indicates Xon/Xoff flow control.
746*0d1ba665SWarner Losh   /// All other bits are reserved and are clear.
747*0d1ba665SWarner Losh   ///
748*0d1ba665SWarner Losh   UINT32                          FlowControlMap;
749*0d1ba665SWarner Losh } UART_FLOW_CONTROL_DEVICE_PATH;
750*0d1ba665SWarner Losh 
751*0d1ba665SWarner Losh #define UART_FLOW_CONTROL_HARDWARE         0x00000001
752*0d1ba665SWarner Losh #define UART_FLOW_CONTROL_XON_XOFF         0x00000010
753*0d1ba665SWarner Losh 
754*0d1ba665SWarner Losh #define DEVICE_PATH_MESSAGING_SAS          EFI_SAS_DEVICE_PATH_GUID
755*0d1ba665SWarner Losh ///
756*0d1ba665SWarner Losh /// Serial Attached SCSI (SAS) Device Path.
757*0d1ba665SWarner Losh ///
758*0d1ba665SWarner Losh typedef struct {
759*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
760*0d1ba665SWarner Losh   ///
761*0d1ba665SWarner Losh   /// DEVICE_PATH_MESSAGING_SAS GUID.
762*0d1ba665SWarner Losh   ///
763*0d1ba665SWarner Losh   EFI_GUID                        Guid;
764*0d1ba665SWarner Losh   ///
765*0d1ba665SWarner Losh   /// Reserved for future use.
766*0d1ba665SWarner Losh   ///
767*0d1ba665SWarner Losh   UINT32                          Reserved;
768*0d1ba665SWarner Losh   ///
769*0d1ba665SWarner Losh   /// SAS Address for Serial Attached SCSI Target.
770*0d1ba665SWarner Losh   ///
771*0d1ba665SWarner Losh   UINT64                          SasAddress;
772*0d1ba665SWarner Losh   ///
773*0d1ba665SWarner Losh   /// SAS Logical Unit Number.
774*0d1ba665SWarner Losh   ///
775*0d1ba665SWarner Losh   UINT64                          Lun;
776*0d1ba665SWarner Losh   ///
777*0d1ba665SWarner Losh   /// More Information about the device and its interconnect.
778*0d1ba665SWarner Losh   ///
779*0d1ba665SWarner Losh   UINT16                          DeviceTopology;
780*0d1ba665SWarner Losh   ///
781*0d1ba665SWarner Losh   /// Relative Target Port (RTP).
782*0d1ba665SWarner Losh   ///
783*0d1ba665SWarner Losh   UINT16                          RelativeTargetPort;
784*0d1ba665SWarner Losh } SAS_DEVICE_PATH;
785*0d1ba665SWarner Losh 
786*0d1ba665SWarner Losh ///
787*0d1ba665SWarner Losh /// Serial Attached SCSI (SAS) Ex Device Path SubType
788*0d1ba665SWarner Losh ///
789*0d1ba665SWarner Losh #define MSG_SASEX_DP              0x16
790*0d1ba665SWarner Losh typedef struct {
791*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
792*0d1ba665SWarner Losh   ///
793*0d1ba665SWarner Losh   /// 8-byte array of the SAS Address for Serial Attached SCSI Target Port.
794*0d1ba665SWarner Losh   ///
795*0d1ba665SWarner Losh   UINT8                           SasAddress[8];
796*0d1ba665SWarner Losh   ///
797*0d1ba665SWarner Losh   /// 8-byte array of the SAS Logical Unit Number.
798*0d1ba665SWarner Losh   ///
799*0d1ba665SWarner Losh   UINT8                           Lun[8];
800*0d1ba665SWarner Losh   ///
801*0d1ba665SWarner Losh   /// More Information about the device and its interconnect.
802*0d1ba665SWarner Losh   ///
803*0d1ba665SWarner Losh   UINT16                          DeviceTopology;
804*0d1ba665SWarner Losh   ///
805*0d1ba665SWarner Losh   /// Relative Target Port (RTP).
806*0d1ba665SWarner Losh   ///
807*0d1ba665SWarner Losh   UINT16                          RelativeTargetPort;
808*0d1ba665SWarner Losh } SASEX_DEVICE_PATH;
809*0d1ba665SWarner Losh 
810*0d1ba665SWarner Losh ///
811*0d1ba665SWarner Losh /// NvmExpress Namespace Device Path SubType.
812*0d1ba665SWarner Losh ///
813*0d1ba665SWarner Losh #define MSG_NVME_NAMESPACE_DP     0x17
814*0d1ba665SWarner Losh typedef struct {
815*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
816*0d1ba665SWarner Losh   UINT32                          NamespaceId;
817*0d1ba665SWarner Losh   UINT64                          NamespaceUuid;
818*0d1ba665SWarner Losh } NVME_NAMESPACE_DEVICE_PATH;
819*0d1ba665SWarner Losh 
820*0d1ba665SWarner Losh ///
821*0d1ba665SWarner Losh /// Uniform Resource Identifiers (URI) Device Path SubType
822*0d1ba665SWarner Losh ///
823*0d1ba665SWarner Losh #define MSG_URI_DP                0x18
824*0d1ba665SWarner Losh typedef struct {
825*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
826*0d1ba665SWarner Losh   ///
827*0d1ba665SWarner Losh   /// Instance of the URI pursuant to RFC 3986.
828*0d1ba665SWarner Losh   ///
829*0d1ba665SWarner Losh   CHAR8                           Uri[];
830*0d1ba665SWarner Losh } URI_DEVICE_PATH;
831*0d1ba665SWarner Losh 
832*0d1ba665SWarner Losh ///
833*0d1ba665SWarner Losh /// Universal Flash Storage (UFS) Device Path SubType.
834*0d1ba665SWarner Losh ///
835*0d1ba665SWarner Losh #define MSG_UFS_DP                0x19
836*0d1ba665SWarner Losh typedef struct {
837*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
838*0d1ba665SWarner Losh   ///
839*0d1ba665SWarner Losh   /// Target ID on the UFS bus (PUN).
840*0d1ba665SWarner Losh   ///
841*0d1ba665SWarner Losh   UINT8                           Pun;
842*0d1ba665SWarner Losh   ///
843*0d1ba665SWarner Losh   /// Logical Unit Number (LUN).
844*0d1ba665SWarner Losh   ///
845*0d1ba665SWarner Losh   UINT8                           Lun;
846*0d1ba665SWarner Losh } UFS_DEVICE_PATH;
847*0d1ba665SWarner Losh 
848*0d1ba665SWarner Losh ///
849*0d1ba665SWarner Losh /// SD (Secure Digital) Device Path SubType.
850*0d1ba665SWarner Losh ///
851*0d1ba665SWarner Losh #define MSG_SD_DP                 0x1A
852*0d1ba665SWarner Losh typedef struct {
853*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
854*0d1ba665SWarner Losh   UINT8                           SlotNumber;
855*0d1ba665SWarner Losh } SD_DEVICE_PATH;
856*0d1ba665SWarner Losh 
857*0d1ba665SWarner Losh ///
858*0d1ba665SWarner Losh /// EMMC (Embedded MMC) Device Path SubType.
859*0d1ba665SWarner Losh ///
860*0d1ba665SWarner Losh #define MSG_EMMC_DP                 0x1D
861*0d1ba665SWarner Losh typedef struct {
862*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
863*0d1ba665SWarner Losh   UINT8                           SlotNumber;
864*0d1ba665SWarner Losh } EMMC_DEVICE_PATH;
865*0d1ba665SWarner Losh 
866*0d1ba665SWarner Losh ///
867*0d1ba665SWarner Losh /// iSCSI Device Path SubType
868*0d1ba665SWarner Losh ///
869*0d1ba665SWarner Losh #define MSG_ISCSI_DP              0x13
870*0d1ba665SWarner Losh typedef struct {
871*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
872*0d1ba665SWarner Losh   ///
873*0d1ba665SWarner Losh   /// Network Protocol (0 = TCP, 1+ = reserved).
874*0d1ba665SWarner Losh   ///
875*0d1ba665SWarner Losh   UINT16                          NetworkProtocol;
876*0d1ba665SWarner Losh   ///
877*0d1ba665SWarner Losh   /// iSCSI Login Options.
878*0d1ba665SWarner Losh   ///
879*0d1ba665SWarner Losh   UINT16                          LoginOption;
880*0d1ba665SWarner Losh   ///
881*0d1ba665SWarner Losh   /// iSCSI Logical Unit Number.
882*0d1ba665SWarner Losh   ///
883*0d1ba665SWarner Losh   UINT64                          Lun;
884*0d1ba665SWarner Losh   ///
885*0d1ba665SWarner Losh   /// iSCSI Target Portal group tag the initiator intends
886*0d1ba665SWarner Losh   /// to establish a session with.
887*0d1ba665SWarner Losh   ///
888*0d1ba665SWarner Losh   UINT16                          TargetPortalGroupTag;
889*0d1ba665SWarner Losh   ///
890*0d1ba665SWarner Losh   /// iSCSI NodeTarget Name. The length of the name
891*0d1ba665SWarner Losh   /// is determined by subtracting the offset of this field from Length.
892*0d1ba665SWarner Losh   ///
893*0d1ba665SWarner Losh   /// CHAR8                        iSCSI Target Name.
894*0d1ba665SWarner Losh } ISCSI_DEVICE_PATH;
895*0d1ba665SWarner Losh 
896*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_NO_HEADER_DIGEST             0x0000
897*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_HEADER_DIGEST_USING_CRC32C   0x0002
898*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_NO_DATA_DIGEST               0x0000
899*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_DATA_DIGEST_USING_CRC32C     0x0008
900*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_AUTHMETHOD_CHAP              0x0000
901*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_AUTHMETHOD_NON               0x1000
902*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_CHAP_BI                      0x0000
903*0d1ba665SWarner Losh #define ISCSI_LOGIN_OPTION_CHAP_UNI                     0x2000
904*0d1ba665SWarner Losh 
905*0d1ba665SWarner Losh ///
906*0d1ba665SWarner Losh /// VLAN Device Path SubType.
907*0d1ba665SWarner Losh ///
908*0d1ba665SWarner Losh #define MSG_VLAN_DP               0x14
909*0d1ba665SWarner Losh typedef struct {
910*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
911*0d1ba665SWarner Losh   ///
912*0d1ba665SWarner Losh   /// VLAN identifier (0-4094).
913*0d1ba665SWarner Losh   ///
914*0d1ba665SWarner Losh   UINT16                          VlanId;
915*0d1ba665SWarner Losh } VLAN_DEVICE_PATH;
916*0d1ba665SWarner Losh 
917*0d1ba665SWarner Losh ///
918*0d1ba665SWarner Losh /// Bluetooth Device Path SubType.
919*0d1ba665SWarner Losh ///
920*0d1ba665SWarner Losh #define MSG_BLUETOOTH_DP     0x1b
921*0d1ba665SWarner Losh typedef struct {
922*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
923*0d1ba665SWarner Losh   ///
924*0d1ba665SWarner Losh   /// 48bit Bluetooth device address.
925*0d1ba665SWarner Losh   ///
926*0d1ba665SWarner Losh   BLUETOOTH_ADDRESS               BD_ADDR;
927*0d1ba665SWarner Losh } BLUETOOTH_DEVICE_PATH;
928*0d1ba665SWarner Losh 
929*0d1ba665SWarner Losh ///
930*0d1ba665SWarner Losh /// Wi-Fi Device Path SubType.
931*0d1ba665SWarner Losh ///
932*0d1ba665SWarner Losh #define MSG_WIFI_DP               0x1C
933*0d1ba665SWarner Losh typedef struct {
934*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
935*0d1ba665SWarner Losh   ///
936*0d1ba665SWarner Losh   /// Service set identifier. A 32-byte octets string.
937*0d1ba665SWarner Losh   ///
938*0d1ba665SWarner Losh   UINT8                           SSId[32];
939*0d1ba665SWarner Losh } WIFI_DEVICE_PATH;
940*0d1ba665SWarner Losh 
941*0d1ba665SWarner Losh //
942*0d1ba665SWarner Losh // Media Device Path
943*0d1ba665SWarner Losh //
944*0d1ba665SWarner Losh #define MEDIA_DEVICE_PATH         0x04
945*0d1ba665SWarner Losh 
946*0d1ba665SWarner Losh ///
947*0d1ba665SWarner Losh /// Hard Drive Media Device Path SubType.
948*0d1ba665SWarner Losh ///
949*0d1ba665SWarner Losh #define MEDIA_HARDDRIVE_DP        0x01
950*0d1ba665SWarner Losh 
951*0d1ba665SWarner Losh ///
952*0d1ba665SWarner Losh /// The Hard Drive Media Device Path is used to represent a partition on a hard drive.
953*0d1ba665SWarner Losh ///
954*0d1ba665SWarner Losh typedef struct {
955*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
956*0d1ba665SWarner Losh   ///
957*0d1ba665SWarner Losh   /// Describes the entry in a partition table, starting with entry 1.
958*0d1ba665SWarner Losh   /// Partition number zero represents the entire device. Valid
959*0d1ba665SWarner Losh   /// partition numbers for a MBR partition are [1, 4]. Valid
960*0d1ba665SWarner Losh   /// partition numbers for a GPT partition are [1, NumberOfPartitionEntries].
961*0d1ba665SWarner Losh   ///
962*0d1ba665SWarner Losh   UINT32                          PartitionNumber;
963*0d1ba665SWarner Losh   ///
964*0d1ba665SWarner Losh   /// Starting LBA of the partition on the hard drive.
965*0d1ba665SWarner Losh   ///
966*0d1ba665SWarner Losh   UINT64                          PartitionStart;
967*0d1ba665SWarner Losh   ///
968*0d1ba665SWarner Losh   /// Size of the partition in units of Logical Blocks.
969*0d1ba665SWarner Losh   ///
970*0d1ba665SWarner Losh   UINT64                          PartitionSize;
971*0d1ba665SWarner Losh   ///
972*0d1ba665SWarner Losh   /// Signature unique to this partition:
973*0d1ba665SWarner Losh   /// If SignatureType is 0, this field has to be initialized with 16 zeros.
974*0d1ba665SWarner Losh   /// If SignatureType is 1, the MBR signature is stored in the first 4 bytes of this field.
975*0d1ba665SWarner Losh   /// The other 12 bytes are initialized with zeros.
976*0d1ba665SWarner Losh   /// If SignatureType is 2, this field contains a 16 byte signature.
977*0d1ba665SWarner Losh   ///
978*0d1ba665SWarner Losh   UINT8                           Signature[16];
979*0d1ba665SWarner Losh   ///
980*0d1ba665SWarner Losh   /// Partition Format: (Unused values reserved).
981*0d1ba665SWarner Losh   /// 0x01 - PC-AT compatible legacy MBR.
982*0d1ba665SWarner Losh   /// 0x02 - GUID Partition Table.
983*0d1ba665SWarner Losh   ///
984*0d1ba665SWarner Losh   UINT8                           MBRType;
985*0d1ba665SWarner Losh   ///
986*0d1ba665SWarner Losh   /// Type of Disk Signature: (Unused values reserved).
987*0d1ba665SWarner Losh   /// 0x00 - No Disk Signature.
988*0d1ba665SWarner Losh   /// 0x01 - 32-bit signature from address 0x1b8 of the type 0x01 MBR.
989*0d1ba665SWarner Losh   /// 0x02 - GUID signature.
990*0d1ba665SWarner Losh   ///
991*0d1ba665SWarner Losh   UINT8                           SignatureType;
992*0d1ba665SWarner Losh } HARDDRIVE_DEVICE_PATH;
993*0d1ba665SWarner Losh 
994*0d1ba665SWarner Losh #define MBR_TYPE_PCAT             0x01
995*0d1ba665SWarner Losh #define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
996*0d1ba665SWarner Losh 
997*0d1ba665SWarner Losh #define NO_DISK_SIGNATURE         0x00
998*0d1ba665SWarner Losh #define SIGNATURE_TYPE_MBR        0x01
999*0d1ba665SWarner Losh #define SIGNATURE_TYPE_GUID       0x02
1000*0d1ba665SWarner Losh 
1001*0d1ba665SWarner Losh ///
1002*0d1ba665SWarner Losh /// CD-ROM Media Device Path SubType.
1003*0d1ba665SWarner Losh ///
1004*0d1ba665SWarner Losh #define MEDIA_CDROM_DP            0x02
1005*0d1ba665SWarner Losh 
1006*0d1ba665SWarner Losh ///
1007*0d1ba665SWarner Losh /// The CD-ROM Media Device Path is used to define a system partition that exists on a CD-ROM.
1008*0d1ba665SWarner Losh ///
1009*0d1ba665SWarner Losh typedef struct {
1010*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1011*0d1ba665SWarner Losh   ///
1012*0d1ba665SWarner Losh   /// Boot Entry number from the Boot Catalog. The Initial/Default entry is defined as zero.
1013*0d1ba665SWarner Losh   ///
1014*0d1ba665SWarner Losh   UINT32                          BootEntry;
1015*0d1ba665SWarner Losh   ///
1016*0d1ba665SWarner Losh   /// Starting RBA of the partition on the medium. CD-ROMs use Relative logical Block Addressing.
1017*0d1ba665SWarner Losh   ///
1018*0d1ba665SWarner Losh   UINT64                          PartitionStart;
1019*0d1ba665SWarner Losh   ///
1020*0d1ba665SWarner Losh   /// Size of the partition in units of Blocks, also called Sectors.
1021*0d1ba665SWarner Losh   ///
1022*0d1ba665SWarner Losh   UINT64                          PartitionSize;
1023*0d1ba665SWarner Losh } CDROM_DEVICE_PATH;
1024*0d1ba665SWarner Losh 
1025*0d1ba665SWarner Losh //
1026*0d1ba665SWarner Losh // Use VENDOR_DEVICE_PATH struct
1027*0d1ba665SWarner Losh //
1028*0d1ba665SWarner Losh #define MEDIA_VENDOR_DP           0x03  ///< Media vendor device path subtype.
1029*0d1ba665SWarner Losh 
1030*0d1ba665SWarner Losh ///
1031*0d1ba665SWarner Losh /// File Path Media Device Path SubType
1032*0d1ba665SWarner Losh ///
1033*0d1ba665SWarner Losh #define MEDIA_FILEPATH_DP         0x04
1034*0d1ba665SWarner Losh typedef struct {
1035*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1036*0d1ba665SWarner Losh   ///
1037*0d1ba665SWarner Losh   /// A NULL-terminated Path string including directory and file names.
1038*0d1ba665SWarner Losh   ///
1039*0d1ba665SWarner Losh   CHAR16                          PathName[1];
1040*0d1ba665SWarner Losh } FILEPATH_DEVICE_PATH;
1041*0d1ba665SWarner Losh 
1042*0d1ba665SWarner Losh #define SIZE_OF_FILEPATH_DEVICE_PATH  OFFSET_OF(FILEPATH_DEVICE_PATH,PathName)
1043*0d1ba665SWarner Losh 
1044*0d1ba665SWarner Losh ///
1045*0d1ba665SWarner Losh /// Media Protocol Device Path SubType.
1046*0d1ba665SWarner Losh ///
1047*0d1ba665SWarner Losh #define MEDIA_PROTOCOL_DP         0x05
1048*0d1ba665SWarner Losh 
1049*0d1ba665SWarner Losh ///
1050*0d1ba665SWarner Losh /// The Media Protocol Device Path is used to denote the protocol that is being
1051*0d1ba665SWarner Losh /// used in a device path at the location of the path specified.
1052*0d1ba665SWarner Losh /// Many protocols are inherent to the style of device path.
1053*0d1ba665SWarner Losh ///
1054*0d1ba665SWarner Losh typedef struct {
1055*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1056*0d1ba665SWarner Losh   ///
1057*0d1ba665SWarner Losh   /// The ID of the protocol.
1058*0d1ba665SWarner Losh   ///
1059*0d1ba665SWarner Losh   EFI_GUID                        Protocol;
1060*0d1ba665SWarner Losh } MEDIA_PROTOCOL_DEVICE_PATH;
1061*0d1ba665SWarner Losh 
1062*0d1ba665SWarner Losh ///
1063*0d1ba665SWarner Losh /// PIWG Firmware File SubType.
1064*0d1ba665SWarner Losh ///
1065*0d1ba665SWarner Losh #define MEDIA_PIWG_FW_FILE_DP     0x06
1066*0d1ba665SWarner Losh 
1067*0d1ba665SWarner Losh ///
1068*0d1ba665SWarner Losh /// This device path is used by systems implementing the UEFI PI Specification 1.0 to describe a firmware file.
1069*0d1ba665SWarner Losh ///
1070*0d1ba665SWarner Losh typedef struct {
1071*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1072*0d1ba665SWarner Losh   ///
1073*0d1ba665SWarner Losh   /// Firmware file name
1074*0d1ba665SWarner Losh   ///
1075*0d1ba665SWarner Losh   EFI_GUID                        FvFileName;
1076*0d1ba665SWarner Losh } MEDIA_FW_VOL_FILEPATH_DEVICE_PATH;
1077*0d1ba665SWarner Losh 
1078*0d1ba665SWarner Losh ///
1079*0d1ba665SWarner Losh /// PIWG Firmware Volume Device Path SubType.
1080*0d1ba665SWarner Losh ///
1081*0d1ba665SWarner Losh #define MEDIA_PIWG_FW_VOL_DP      0x07
1082*0d1ba665SWarner Losh 
1083*0d1ba665SWarner Losh ///
1084*0d1ba665SWarner Losh /// This device path is used by systems implementing the UEFI PI Specification 1.0 to describe a firmware volume.
1085*0d1ba665SWarner Losh ///
1086*0d1ba665SWarner Losh typedef struct {
1087*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1088*0d1ba665SWarner Losh   ///
1089*0d1ba665SWarner Losh   /// Firmware volume name.
1090*0d1ba665SWarner Losh   ///
1091*0d1ba665SWarner Losh   EFI_GUID                        FvName;
1092*0d1ba665SWarner Losh } MEDIA_FW_VOL_DEVICE_PATH;
1093*0d1ba665SWarner Losh 
1094*0d1ba665SWarner Losh ///
1095*0d1ba665SWarner Losh /// Media relative offset range device path.
1096*0d1ba665SWarner Losh ///
1097*0d1ba665SWarner Losh #define MEDIA_RELATIVE_OFFSET_RANGE_DP 0x08
1098*0d1ba665SWarner Losh 
1099*0d1ba665SWarner Losh ///
1100*0d1ba665SWarner Losh /// Used to describe the offset range of media relative.
1101*0d1ba665SWarner Losh ///
1102*0d1ba665SWarner Losh typedef struct {
1103*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL  Header;
1104*0d1ba665SWarner Losh   UINT32                    Reserved;
1105*0d1ba665SWarner Losh   UINT64                    StartingOffset;
1106*0d1ba665SWarner Losh   UINT64                    EndingOffset;
1107*0d1ba665SWarner Losh } MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH;
1108*0d1ba665SWarner Losh 
1109*0d1ba665SWarner Losh ///
1110*0d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting a raw disk format in volatile memory.
1111*0d1ba665SWarner Losh ///
1112*0d1ba665SWarner Losh #define EFI_VIRTUAL_DISK_GUID               EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE
1113*0d1ba665SWarner Losh 
1114*0d1ba665SWarner Losh extern  EFI_GUID                            gEfiVirtualDiskGuid;
1115*0d1ba665SWarner Losh 
1116*0d1ba665SWarner Losh ///
1117*0d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting an ISO image in volatile memory.
1118*0d1ba665SWarner Losh ///
1119*0d1ba665SWarner Losh #define EFI_VIRTUAL_CD_GUID                 EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE
1120*0d1ba665SWarner Losh 
1121*0d1ba665SWarner Losh extern  EFI_GUID                            gEfiVirtualCdGuid;
1122*0d1ba665SWarner Losh 
1123*0d1ba665SWarner Losh ///
1124*0d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting a raw disk format in persistent memory.
1125*0d1ba665SWarner Losh ///
1126*0d1ba665SWarner Losh #define EFI_PERSISTENT_VIRTUAL_DISK_GUID    EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT
1127*0d1ba665SWarner Losh 
1128*0d1ba665SWarner Losh extern  EFI_GUID                            gEfiPersistentVirtualDiskGuid;
1129*0d1ba665SWarner Losh 
1130*0d1ba665SWarner Losh ///
1131*0d1ba665SWarner Losh /// This GUID defines a RAM Disk supporting an ISO image in persistent memory.
1132*0d1ba665SWarner Losh ///
1133*0d1ba665SWarner Losh #define EFI_PERSISTENT_VIRTUAL_CD_GUID      EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT
1134*0d1ba665SWarner Losh 
1135*0d1ba665SWarner Losh extern  EFI_GUID                            gEfiPersistentVirtualCdGuid;
1136*0d1ba665SWarner Losh 
1137*0d1ba665SWarner Losh ///
1138*0d1ba665SWarner Losh /// Media ram disk device path.
1139*0d1ba665SWarner Losh ///
1140*0d1ba665SWarner Losh #define MEDIA_RAM_DISK_DP         0x09
1141*0d1ba665SWarner Losh 
1142*0d1ba665SWarner Losh ///
1143*0d1ba665SWarner Losh /// Used to describe the ram disk device path.
1144*0d1ba665SWarner Losh ///
1145*0d1ba665SWarner Losh typedef struct {
1146*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1147*0d1ba665SWarner Losh   ///
1148*0d1ba665SWarner Losh   /// Starting Memory Address.
1149*0d1ba665SWarner Losh   ///
1150*0d1ba665SWarner Losh   UINT32                          StartingAddr[2];
1151*0d1ba665SWarner Losh   ///
1152*0d1ba665SWarner Losh   /// Ending Memory Address.
1153*0d1ba665SWarner Losh   ///
1154*0d1ba665SWarner Losh   UINT32                          EndingAddr[2];
1155*0d1ba665SWarner Losh   ///
1156*0d1ba665SWarner Losh   /// GUID that defines the type of the RAM Disk.
1157*0d1ba665SWarner Losh   ///
1158*0d1ba665SWarner Losh   EFI_GUID                        TypeGuid;
1159*0d1ba665SWarner Losh   ///
1160*0d1ba665SWarner Losh   /// RAM Diskinstance number, if supported. The default value is zero.
1161*0d1ba665SWarner Losh   ///
1162*0d1ba665SWarner Losh   UINT16                          Instance;
1163*0d1ba665SWarner Losh } MEDIA_RAM_DISK_DEVICE_PATH;
1164*0d1ba665SWarner Losh 
1165*0d1ba665SWarner Losh ///
1166*0d1ba665SWarner Losh /// BIOS Boot Specification Device Path.
1167*0d1ba665SWarner Losh ///
1168*0d1ba665SWarner Losh #define BBS_DEVICE_PATH           0x05
1169*0d1ba665SWarner Losh 
1170*0d1ba665SWarner Losh ///
1171*0d1ba665SWarner Losh /// BIOS Boot Specification Device Path SubType.
1172*0d1ba665SWarner Losh ///
1173*0d1ba665SWarner Losh #define BBS_BBS_DP                0x01
1174*0d1ba665SWarner Losh 
1175*0d1ba665SWarner Losh ///
1176*0d1ba665SWarner Losh /// This Device Path is used to describe the booting of non-EFI-aware operating systems.
1177*0d1ba665SWarner Losh ///
1178*0d1ba665SWarner Losh typedef struct {
1179*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL        Header;
1180*0d1ba665SWarner Losh   ///
1181*0d1ba665SWarner Losh   /// Device Type as defined by the BIOS Boot Specification.
1182*0d1ba665SWarner Losh   ///
1183*0d1ba665SWarner Losh   UINT16                          DeviceType;
1184*0d1ba665SWarner Losh   ///
1185*0d1ba665SWarner Losh   /// Status Flags as defined by the BIOS Boot Specification.
1186*0d1ba665SWarner Losh   ///
1187*0d1ba665SWarner Losh   UINT16                          StatusFlag;
1188*0d1ba665SWarner Losh   ///
1189*0d1ba665SWarner Losh   /// Null-terminated ASCII string that describes the boot device to a user.
1190*0d1ba665SWarner Losh   ///
1191*0d1ba665SWarner Losh   CHAR8                           String[1];
1192*0d1ba665SWarner Losh } BBS_BBS_DEVICE_PATH;
1193*0d1ba665SWarner Losh 
1194*0d1ba665SWarner Losh //
1195*0d1ba665SWarner Losh // DeviceType definitions - from BBS specification
1196*0d1ba665SWarner Losh //
1197*0d1ba665SWarner Losh #define BBS_TYPE_FLOPPY           0x01
1198*0d1ba665SWarner Losh #define BBS_TYPE_HARDDRIVE        0x02
1199*0d1ba665SWarner Losh #define BBS_TYPE_CDROM            0x03
1200*0d1ba665SWarner Losh #define BBS_TYPE_PCMCIA           0x04
1201*0d1ba665SWarner Losh #define BBS_TYPE_USB              0x05
1202*0d1ba665SWarner Losh #define BBS_TYPE_EMBEDDED_NETWORK 0x06
1203*0d1ba665SWarner Losh #define BBS_TYPE_BEV              0x80
1204*0d1ba665SWarner Losh #define BBS_TYPE_UNKNOWN          0xFF
1205*0d1ba665SWarner Losh 
1206*0d1ba665SWarner Losh 
1207*0d1ba665SWarner Losh ///
1208*0d1ba665SWarner Losh /// Union of all possible Device Paths and pointers to Device Paths.
1209*0d1ba665SWarner Losh ///
1210*0d1ba665SWarner Losh typedef union {
1211*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL                   DevPath;
1212*0d1ba665SWarner Losh   PCI_DEVICE_PATH                            Pci;
1213*0d1ba665SWarner Losh   PCCARD_DEVICE_PATH                         PcCard;
1214*0d1ba665SWarner Losh   MEMMAP_DEVICE_PATH                         MemMap;
1215*0d1ba665SWarner Losh   VENDOR_DEVICE_PATH                         Vendor;
1216*0d1ba665SWarner Losh 
1217*0d1ba665SWarner Losh   CONTROLLER_DEVICE_PATH                     Controller;
1218*0d1ba665SWarner Losh   BMC_DEVICE_PATH                            Bmc;
1219*0d1ba665SWarner Losh   ACPI_HID_DEVICE_PATH                       Acpi;
1220*0d1ba665SWarner Losh   ACPI_EXTENDED_HID_DEVICE_PATH              ExtendedAcpi;
1221*0d1ba665SWarner Losh   ACPI_ADR_DEVICE_PATH                       AcpiAdr;
1222*0d1ba665SWarner Losh 
1223*0d1ba665SWarner Losh   ATAPI_DEVICE_PATH                          Atapi;
1224*0d1ba665SWarner Losh   SCSI_DEVICE_PATH                           Scsi;
1225*0d1ba665SWarner Losh   ISCSI_DEVICE_PATH                          Iscsi;
1226*0d1ba665SWarner Losh   FIBRECHANNEL_DEVICE_PATH                   FibreChannel;
1227*0d1ba665SWarner Losh   FIBRECHANNELEX_DEVICE_PATH                 FibreChannelEx;
1228*0d1ba665SWarner Losh 
1229*0d1ba665SWarner Losh   F1394_DEVICE_PATH                          F1394;
1230*0d1ba665SWarner Losh   USB_DEVICE_PATH                            Usb;
1231*0d1ba665SWarner Losh   SATA_DEVICE_PATH                           Sata;
1232*0d1ba665SWarner Losh   USB_CLASS_DEVICE_PATH                      UsbClass;
1233*0d1ba665SWarner Losh   USB_WWID_DEVICE_PATH                       UsbWwid;
1234*0d1ba665SWarner Losh   DEVICE_LOGICAL_UNIT_DEVICE_PATH            LogicUnit;
1235*0d1ba665SWarner Losh   I2O_DEVICE_PATH                            I2O;
1236*0d1ba665SWarner Losh   MAC_ADDR_DEVICE_PATH                       MacAddr;
1237*0d1ba665SWarner Losh   IPv4_DEVICE_PATH                           Ipv4;
1238*0d1ba665SWarner Losh   IPv6_DEVICE_PATH                           Ipv6;
1239*0d1ba665SWarner Losh   VLAN_DEVICE_PATH                           Vlan;
1240*0d1ba665SWarner Losh   INFINIBAND_DEVICE_PATH                     InfiniBand;
1241*0d1ba665SWarner Losh   UART_DEVICE_PATH                           Uart;
1242*0d1ba665SWarner Losh   UART_FLOW_CONTROL_DEVICE_PATH              UartFlowControl;
1243*0d1ba665SWarner Losh   SAS_DEVICE_PATH                            Sas;
1244*0d1ba665SWarner Losh   SASEX_DEVICE_PATH                          SasEx;
1245*0d1ba665SWarner Losh   NVME_NAMESPACE_DEVICE_PATH                 NvmeNamespace;
1246*0d1ba665SWarner Losh   URI_DEVICE_PATH                            Uri;
1247*0d1ba665SWarner Losh   BLUETOOTH_DEVICE_PATH                      Bluetooth;
1248*0d1ba665SWarner Losh   WIFI_DEVICE_PATH                           WiFi;
1249*0d1ba665SWarner Losh   UFS_DEVICE_PATH                            Ufs;
1250*0d1ba665SWarner Losh   SD_DEVICE_PATH                             Sd;
1251*0d1ba665SWarner Losh   EMMC_DEVICE_PATH                           Emmc;
1252*0d1ba665SWarner Losh   HARDDRIVE_DEVICE_PATH                      HardDrive;
1253*0d1ba665SWarner Losh   CDROM_DEVICE_PATH                          CD;
1254*0d1ba665SWarner Losh 
1255*0d1ba665SWarner Losh   FILEPATH_DEVICE_PATH                       FilePath;
1256*0d1ba665SWarner Losh   MEDIA_PROTOCOL_DEVICE_PATH                 MediaProtocol;
1257*0d1ba665SWarner Losh 
1258*0d1ba665SWarner Losh   MEDIA_FW_VOL_DEVICE_PATH                   FirmwareVolume;
1259*0d1ba665SWarner Losh   MEDIA_FW_VOL_FILEPATH_DEVICE_PATH          FirmwareFile;
1260*0d1ba665SWarner Losh   MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH    Offset;
1261*0d1ba665SWarner Losh   MEDIA_RAM_DISK_DEVICE_PATH                 RamDisk;
1262*0d1ba665SWarner Losh   BBS_BBS_DEVICE_PATH                        Bbs;
1263*0d1ba665SWarner Losh } EFI_DEV_PATH;
1264*0d1ba665SWarner Losh 
1265*0d1ba665SWarner Losh 
1266*0d1ba665SWarner Losh 
1267*0d1ba665SWarner Losh typedef union {
1268*0d1ba665SWarner Losh   EFI_DEVICE_PATH_PROTOCOL                   *DevPath;
1269*0d1ba665SWarner Losh   PCI_DEVICE_PATH                            *Pci;
1270*0d1ba665SWarner Losh   PCCARD_DEVICE_PATH                         *PcCard;
1271*0d1ba665SWarner Losh   MEMMAP_DEVICE_PATH                         *MemMap;
1272*0d1ba665SWarner Losh   VENDOR_DEVICE_PATH                         *Vendor;
1273*0d1ba665SWarner Losh 
1274*0d1ba665SWarner Losh   CONTROLLER_DEVICE_PATH                     *Controller;
1275*0d1ba665SWarner Losh   BMC_DEVICE_PATH                            *Bmc;
1276*0d1ba665SWarner Losh   ACPI_HID_DEVICE_PATH                       *Acpi;
1277*0d1ba665SWarner Losh   ACPI_EXTENDED_HID_DEVICE_PATH              *ExtendedAcpi;
1278*0d1ba665SWarner Losh   ACPI_ADR_DEVICE_PATH                       *AcpiAdr;
1279*0d1ba665SWarner Losh 
1280*0d1ba665SWarner Losh   ATAPI_DEVICE_PATH                          *Atapi;
1281*0d1ba665SWarner Losh   SCSI_DEVICE_PATH                           *Scsi;
1282*0d1ba665SWarner Losh   ISCSI_DEVICE_PATH                          *Iscsi;
1283*0d1ba665SWarner Losh   FIBRECHANNEL_DEVICE_PATH                   *FibreChannel;
1284*0d1ba665SWarner Losh   FIBRECHANNELEX_DEVICE_PATH                 *FibreChannelEx;
1285*0d1ba665SWarner Losh 
1286*0d1ba665SWarner Losh   F1394_DEVICE_PATH                          *F1394;
1287*0d1ba665SWarner Losh   USB_DEVICE_PATH                            *Usb;
1288*0d1ba665SWarner Losh   SATA_DEVICE_PATH                           *Sata;
1289*0d1ba665SWarner Losh   USB_CLASS_DEVICE_PATH                      *UsbClass;
1290*0d1ba665SWarner Losh   USB_WWID_DEVICE_PATH                       *UsbWwid;
1291*0d1ba665SWarner Losh   DEVICE_LOGICAL_UNIT_DEVICE_PATH            *LogicUnit;
1292*0d1ba665SWarner Losh   I2O_DEVICE_PATH                            *I2O;
1293*0d1ba665SWarner Losh   MAC_ADDR_DEVICE_PATH                       *MacAddr;
1294*0d1ba665SWarner Losh   IPv4_DEVICE_PATH                           *Ipv4;
1295*0d1ba665SWarner Losh   IPv6_DEVICE_PATH                           *Ipv6;
1296*0d1ba665SWarner Losh   VLAN_DEVICE_PATH                           *Vlan;
1297*0d1ba665SWarner Losh   INFINIBAND_DEVICE_PATH                     *InfiniBand;
1298*0d1ba665SWarner Losh   UART_DEVICE_PATH                           *Uart;
1299*0d1ba665SWarner Losh   UART_FLOW_CONTROL_DEVICE_PATH              *UartFlowControl;
1300*0d1ba665SWarner Losh   SAS_DEVICE_PATH                            *Sas;
1301*0d1ba665SWarner Losh   SASEX_DEVICE_PATH                          *SasEx;
1302*0d1ba665SWarner Losh   NVME_NAMESPACE_DEVICE_PATH                 *NvmeNamespace;
1303*0d1ba665SWarner Losh   URI_DEVICE_PATH                            *Uri;
1304*0d1ba665SWarner Losh   BLUETOOTH_DEVICE_PATH                      *Bluetooth;
1305*0d1ba665SWarner Losh   WIFI_DEVICE_PATH                           *WiFi;
1306*0d1ba665SWarner Losh   UFS_DEVICE_PATH                            *Ufs;
1307*0d1ba665SWarner Losh   SD_DEVICE_PATH                             *Sd;
1308*0d1ba665SWarner Losh   EMMC_DEVICE_PATH                           *Emmc;
1309*0d1ba665SWarner Losh   HARDDRIVE_DEVICE_PATH                      *HardDrive;
1310*0d1ba665SWarner Losh   CDROM_DEVICE_PATH                          *CD;
1311*0d1ba665SWarner Losh 
1312*0d1ba665SWarner Losh   FILEPATH_DEVICE_PATH                       *FilePath;
1313*0d1ba665SWarner Losh   MEDIA_PROTOCOL_DEVICE_PATH                 *MediaProtocol;
1314*0d1ba665SWarner Losh 
1315*0d1ba665SWarner Losh   MEDIA_FW_VOL_DEVICE_PATH                   *FirmwareVolume;
1316*0d1ba665SWarner Losh   MEDIA_FW_VOL_FILEPATH_DEVICE_PATH          *FirmwareFile;
1317*0d1ba665SWarner Losh   MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH    *Offset;
1318*0d1ba665SWarner Losh   MEDIA_RAM_DISK_DEVICE_PATH                 *RamDisk;
1319*0d1ba665SWarner Losh   BBS_BBS_DEVICE_PATH                        *Bbs;
1320*0d1ba665SWarner Losh   UINT8                                      *Raw;
1321*0d1ba665SWarner Losh } EFI_DEV_PATH_PTR;
1322*0d1ba665SWarner Losh 
1323*0d1ba665SWarner Losh #pragma pack()
1324*0d1ba665SWarner Losh 
1325*0d1ba665SWarner Losh #define END_DEVICE_PATH_TYPE                 0x7f
1326*0d1ba665SWarner Losh #define END_ENTIRE_DEVICE_PATH_SUBTYPE       0xFF
1327*0d1ba665SWarner Losh #define END_INSTANCE_DEVICE_PATH_SUBTYPE     0x01
1328*0d1ba665SWarner Losh 
1329*0d1ba665SWarner Losh extern EFI_GUID gEfiDevicePathProtocolGuid;
1330*0d1ba665SWarner Losh 
1331*0d1ba665SWarner Losh #endif
1332