]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/Protocol/DevicePath.h
Fixed PPI GUID name to follow PI specification.
[mirror_edk2.git] / MdePkg / Include / Protocol / DevicePath.h
CommitLineData
d1f95000 1/** @file\r
2 The device path protocol as defined in EFI 1.0.\r
959ccb23 3\r
d1f95000 4 The device path represents a programatic path to a device. It's the view\r
5 from a software point of view. It also must persist from boot to boot, so \r
6 it can not contain things like PCI bus numbers that change from boot to boot.\r
959ccb23 7\r
d1f95000 8 Copyright (c) 2006, Intel Corporation \r
9 All rights reserved. This program and the accompanying materials \r
10 are licensed and made available under the terms and conditions of the BSD License \r
11 which accompanies this distribution. The full text of the license may be found at \r
12 http://opensource.org/licenses/bsd-license.php \r
959ccb23 13\r
d1f95000 14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
959ccb23 16\r
d1f95000 17 Module Name: DevicePath.h\r
959ccb23 18\r
19**/\r
20\r
d1f95000 21#ifndef __EFI_DEVICE_PATH_PROTOCOL_H__\r
22#define __EFI_DEVICE_PATH_PROTOCOL_H__\r
23\r
24//\r
25// Device Path protocol\r
26//\r
27#define EFI_DEVICE_PATH_PROTOCOL_GUID \\r
28 { \\r
29 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \\r
30 }\r
959ccb23 31\r
32//\r
33// Device Path information\r
34//\r
35\r
36#pragma pack(1)\r
37\r
d1f95000 38typedef struct {\r
39 UINT8 Type;\r
40 UINT8 SubType;\r
41 UINT8 Length[2];\r
42} EFI_DEVICE_PATH_PROTOCOL;\r
43\r
959ccb23 44//\r
45// Hardware Device Paths\r
46//\r
47#define HARDWARE_DEVICE_PATH 0x01\r
48\r
49#define HW_PCI_DP 0x01\r
50typedef struct {\r
51 EFI_DEVICE_PATH_PROTOCOL Header;\r
52 UINT8 Function;\r
53 UINT8 Device;\r
54} PCI_DEVICE_PATH;\r
55\r
56#define HW_PCCARD_DP 0x02\r
57typedef struct {\r
58 EFI_DEVICE_PATH_PROTOCOL Header;\r
59 UINT8 FunctionNumber;\r
60} PCCARD_DEVICE_PATH;\r
61\r
62#define HW_MEMMAP_DP 0x03\r
63typedef struct {\r
64 EFI_DEVICE_PATH_PROTOCOL Header;\r
65 UINT32 MemoryType;\r
66 EFI_PHYSICAL_ADDRESS StartingAddress;\r
67 EFI_PHYSICAL_ADDRESS EndingAddress;\r
68} MEMMAP_DEVICE_PATH;\r
69\r
70#define HW_VENDOR_DP 0x04\r
71typedef struct {\r
72 EFI_DEVICE_PATH_PROTOCOL Header;\r
73 EFI_GUID Guid;\r
74} VENDOR_DEVICE_PATH;\r
75\r
76#define HW_CONTROLLER_DP 0x05\r
77typedef struct {\r
78 EFI_DEVICE_PATH_PROTOCOL Header;\r
79 UINT32 ControllerNumber;\r
80} CONTROLLER_DEVICE_PATH;\r
81\r
82//\r
83// ACPI Device Paths\r
84//\r
85#define ACPI_DEVICE_PATH 0x02\r
86\r
87#define ACPI_DP 0x01\r
88typedef struct {\r
89 EFI_DEVICE_PATH_PROTOCOL Header;\r
90 UINT32 HID;\r
91 UINT32 UID;\r
92} ACPI_HID_DEVICE_PATH;\r
93\r
94#define ACPI_EXTENDED_DP 0x02\r
95typedef struct {\r
96 EFI_DEVICE_PATH_PROTOCOL Header;\r
97 UINT32 HID;\r
98 UINT32 UID;\r
99 UINT32 CID;\r
100 //\r
101 // Optional variable length _HIDSTR\r
102 // Optional variable length _UIDSTR\r
103 //\r
104} ACPI_EXTENDED_HID_DEVICE_PATH;\r
105\r
106//\r
107// EISA ID Macro\r
108// EISA ID Definition 32-bits\r
109// bits[15:0] - three character compressed ASCII EISA ID.\r
110// bits[31:16] - binary number\r
111// Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z'\r
112//\r
113#define PNP_EISA_ID_CONST 0x41d0\r
114#define EISA_ID(_Name, _Num) ((UINT32) ((_Name) | (_Num) << 16))\r
115#define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))\r
116#define EFI_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))\r
117\r
118#define PNP_EISA_ID_MASK 0xffff\r
119#define EISA_ID_TO_NUM(_Id) ((_Id) >> 16)\r
120\r
121\r
122#define ACPI_ADR_DP 0x03\r
123typedef struct {\r
124 EFI_DEVICE_PATH_PROTOCOL Header;\r
125 UINT32 ADR;\r
126} ACPI_ADR_DEVICE_PATH;\r
127\r
128\r
129//\r
130// Messaging Device Paths\r
131//\r
132#define MESSAGING_DEVICE_PATH 0x03\r
133\r
134#define MSG_ATAPI_DP 0x01\r
135typedef struct {\r
136 EFI_DEVICE_PATH_PROTOCOL Header;\r
137 UINT8 PrimarySecondary;\r
138 UINT8 SlaveMaster;\r
139 UINT16 Lun;\r
140} ATAPI_DEVICE_PATH;\r
141\r
142#define MSG_SCSI_DP 0x02\r
143typedef struct {\r
144 EFI_DEVICE_PATH_PROTOCOL Header;\r
145 UINT16 Pun;\r
146 UINT16 Lun;\r
147} SCSI_DEVICE_PATH;\r
148\r
149#define MSG_FIBRECHANNEL_DP 0x03\r
150typedef struct {\r
151 EFI_DEVICE_PATH_PROTOCOL Header;\r
152 UINT32 Reserved;\r
153 UINT64 WWN;\r
154 UINT64 Lun;\r
155} FIBRECHANNEL_DEVICE_PATH;\r
156\r
157#define MSG_1394_DP 0x04\r
158typedef struct {\r
159 EFI_DEVICE_PATH_PROTOCOL Header;\r
160 UINT32 Reserved;\r
161 UINT64 Guid;\r
162} F1394_DEVICE_PATH;\r
163\r
164#define MSG_USB_DP 0x05\r
165typedef struct {\r
166 EFI_DEVICE_PATH_PROTOCOL Header;\r
167 UINT8 ParentPortNumber;\r
168 UINT8 InterfaceNumber;\r
169} USB_DEVICE_PATH;\r
170\r
171#define MSG_USB_CLASS_DP 0x0f\r
172typedef struct {\r
173 EFI_DEVICE_PATH_PROTOCOL Header;\r
174 UINT16 VendorId;\r
175 UINT16 ProductId;\r
176 UINT8 DeviceClass;\r
177 UINT8 DeviceSubClass;\r
178 UINT8 DeviceProtocol;\r
179} USB_CLASS_DEVICE_PATH;\r
180\r
181#define MSG_USB_WWID_DP 0x10\r
182typedef struct {\r
183 EFI_DEVICE_PATH_PROTOCOL Header;\r
184 UINT16 InterfaceNumber;\r
185 UINT16 VendorId;\r
186 UINT16 ProductId;\r
187 // CHAR16 SerialNumber[...];\r
188} USB_WWID_DEVICE_PATH;\r
189\r
190\r
191#define MSG_DEVICE_LOGICAL_UNIT_DP 0x11\r
192typedef struct {\r
193 EFI_DEVICE_PATH_PROTOCOL Header;\r
194 UINT8 Lun;\r
195} DEVICE_LOGICAL_UNIT_DEVICE_PATH;\r
196\r
00edb218 197#define MSG_SATA_DP 0x12\r
959ccb23 198typedef struct {\r
00edb218
A
199 EFI_DEVICE_PATH_PROTOCOL Header;\r
200 UINT16 HbaPortNumber;\r
201 UINT16 PortMultiplierPort;\r
202 UINT16 LogicalUnitNumber;\r
959ccb23 203} SATA_DEVICE_PATH;\r
204\r
205#define MSG_I2O_DP 0x06\r
206typedef struct {\r
207 EFI_DEVICE_PATH_PROTOCOL Header;\r
208 UINT32 Tid;\r
209} I2O_DEVICE_PATH;\r
210\r
211#define MSG_MAC_ADDR_DP 0x0b\r
212typedef struct {\r
213 EFI_DEVICE_PATH_PROTOCOL Header;\r
214 EFI_MAC_ADDRESS MacAddress;\r
215 UINT8 IfType;\r
216} MAC_ADDR_DEVICE_PATH;\r
217\r
218#define MSG_IPv4_DP 0x0c\r
219typedef struct {\r
220 EFI_DEVICE_PATH_PROTOCOL Header;\r
221 EFI_IPv4_ADDRESS LocalIpAddress;\r
222 EFI_IPv4_ADDRESS RemoteIpAddress;\r
223 UINT16 LocalPort;\r
224 UINT16 RemotePort;\r
225 UINT16 Protocol;\r
226 BOOLEAN StaticIpAddress;\r
227} IPv4_DEVICE_PATH;\r
228\r
229#define MSG_IPv6_DP 0x0d\r
230typedef struct {\r
231 EFI_DEVICE_PATH_PROTOCOL Header;\r
232 EFI_IPv6_ADDRESS LocalIpAddress;\r
233 EFI_IPv6_ADDRESS RemoteIpAddress;\r
234 UINT16 LocalPort;\r
235 UINT16 RemotePort;\r
236 UINT16 Protocol;\r
237 BOOLEAN StaticIpAddress;\r
238} IPv6_DEVICE_PATH;\r
239\r
240#define MSG_INFINIBAND_DP 0x09\r
241typedef struct {\r
242 EFI_DEVICE_PATH_PROTOCOL Header;\r
243 UINT32 ResourceFlags;\r
244 UINT8 PortGid[16];\r
245 UINT64 ServiceId;\r
246 UINT64 TargetPortId;\r
247 UINT64 DeviceId;\r
248} INFINIBAND_DEVICE_PATH;\r
249\r
250#define INFINIBAND_RESOURCE_FLAG_IOC_SERVICE 0x01\r
251#define INFINIBAND_RESOURCE_FLAG_EXTENDED_BOOT_ENVIRONMENT 0x02\r
252#define INFINIBAND_RESOURCE_FLAG_CONSOLE_PROTOCOL 0x04\r
253#define INFINIBAND_RESOURCE_FLAG_STORAGE_PROTOCOL 0x08\r
254#define INFINIBAND_RESOURCE_FLAG_NETWORK_PROTOCOL 0x10\r
255\r
256#define MSG_UART_DP 0x0e\r
257typedef struct {\r
258 EFI_DEVICE_PATH_PROTOCOL Header;\r
259 UINT32 Reserved;\r
260 UINT64 BaudRate;\r
261 UINT8 DataBits;\r
262 UINT8 Parity;\r
263 UINT8 StopBits;\r
264} UART_DEVICE_PATH;\r
265\r
266//\r
267// Use VENDOR_DEVICE_PATH struct\r
268//\r
269#define MSG_VENDOR_DP 0x0a\r
00edb218 270typedef VENDOR_DEVICE_PATH VENDOR_DEFINED_DEVICE_PATH;\r
959ccb23 271\r
272#define DEVICE_PATH_MESSAGING_PC_ANSI EFI_PC_ANSI_GUID\r
273#define DEVICE_PATH_MESSAGING_VT_100 EFI_VT_100_GUID\r
274#define DEVICE_PATH_MESSAGING_VT_100_PLUS EFI_VT_100_PLUS_GUID\r
275#define DEVICE_PATH_MESSAGING_VT_UTF8 EFI_VT_UTF8_GUID\r
276\r
277#define DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL EFI_UART_DEVICE_PATH_GUID\r
278\r
279typedef struct {\r
280 EFI_DEVICE_PATH_PROTOCOL Header;\r
281 EFI_GUID Guid;\r
282 UINT32 FlowControlMap;\r
283} UART_FLOW_CONTROL_DEVICE_PATH;\r
284\r
285#define DEVICE_PATH_MESSAGING_SAS EFI_SAS_DEVICE_PATH_GUID\r
286\r
287typedef struct {\r
288 EFI_DEVICE_PATH_PROTOCOL Header;\r
289 EFI_GUID Guid;\r
290 UINT32 Reserved;\r
291 UINT64 SasAddress;\r
292 UINT64 Lun;\r
293 UINT16 DeviceTopology;\r
294 UINT16 RelativeTargetPort;\r
295} SAS_DEVICE_PATH;\r
296\r
297#define MSG_ISCSI_DP 0x13\r
298typedef struct {\r
299 EFI_DEVICE_PATH_PROTOCOL Header;\r
300 UINT16 NetworkProtocol;\r
301 UINT16 LoginOption;\r
302 UINT16 Reserved;\r
303 UINT16 TargetPortalGroupTag;\r
304 UINT64 LUN;\r
305 // CHAR8 iSCSI Target Name\r
306} ISCSI_DEVICE_PATH;\r
307\r
308#define ISCSI_LOGIN_OPTION_NO_HEADER_DIGEST 0x0000\r
309#define ISCSI_LOGIN_OPTION_HEADER_DIGEST_USING_CRC32C 0x0002\r
310#define ISCSI_LOGIN_OPTION_NO_DATA_DIGEST 0x0000\r
311#define ISCSI_LOGIN_OPTION_DATA_DIGEST_USING_CRC32C 0x0008\r
312#define ISCSI_LOGIN_OPTION_AUTHMETHOD_CHAP 0x0000\r
313#define ISCSI_LOGIN_OPTION_AUTHMETHOD_NON 0x1000\r
314#define ISCSI_LOGIN_OPTION_CHAP_BI 0x0000\r
315#define ISCSI_LOGIN_OPTION_CHAP_UNI 0x2000\r
316\r
317//\r
318// Media Device Path\r
319//\r
320#define MEDIA_DEVICE_PATH 0x04\r
321\r
322#define MEDIA_HARDDRIVE_DP 0x01\r
323typedef struct {\r
324 EFI_DEVICE_PATH_PROTOCOL Header;\r
325 UINT32 PartitionNumber;\r
326 UINT64 PartitionStart;\r
327 UINT64 PartitionSize;\r
328 UINT8 Signature[16];\r
329 UINT8 MBRType;\r
330 UINT8 SignatureType;\r
331} HARDDRIVE_DEVICE_PATH;\r
332\r
333#define MBR_TYPE_PCAT 0x01\r
334#define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02\r
335\r
336#define SIGNATURE_TYPE_MBR 0x01\r
337#define SIGNATURE_TYPE_GUID 0x02\r
338\r
339#define MEDIA_CDROM_DP 0x02\r
340typedef struct {\r
341 EFI_DEVICE_PATH_PROTOCOL Header;\r
342 UINT32 BootEntry;\r
343 UINT64 PartitionStart;\r
344 UINT64 PartitionSize;\r
345} CDROM_DEVICE_PATH;\r
346\r
347//\r
348// Use VENDOR_DEVICE_PATH struct\r
349//\r
350#define MEDIA_VENDOR_DP 0x03\r
351\r
352#define MEDIA_FILEPATH_DP 0x04\r
353typedef struct {\r
354 EFI_DEVICE_PATH_PROTOCOL Header;\r
355 CHAR16 PathName[1];\r
356} FILEPATH_DEVICE_PATH;\r
357\r
358#define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName)\r
359\r
360#define MEDIA_PROTOCOL_DP 0x05\r
361typedef struct {\r
362 EFI_DEVICE_PATH_PROTOCOL Header;\r
363 EFI_GUID Protocol;\r
364} MEDIA_PROTOCOL_DEVICE_PATH;\r
365\r
366\r
00edb218 367#define MEDIA_PIWG_FW_VOL_DP 0x6\r
959ccb23 368typedef MEDIA_PROTOCOL_DEVICE_PATH MEDIA_FW_VOL_FILEPATH_DEVICE_PATH;\r
369\r
370\r
00edb218 371#define MEDIA_PIWG_FW_FILE_DP 0x7\r
959ccb23 372typedef MEDIA_PROTOCOL_DEVICE_PATH MEDIA_FW_VOL_DEVICE_PATH;\r
373\r
374//\r
375// BBS Device Path\r
376//\r
377#define BBS_DEVICE_PATH 0x05\r
378#define BBS_BBS_DP 0x01\r
379typedef struct {\r
380 EFI_DEVICE_PATH_PROTOCOL Header;\r
381 UINT16 DeviceType;\r
382 UINT16 StatusFlag;\r
383 CHAR8 String[1];\r
384} BBS_BBS_DEVICE_PATH;\r
385\r
386//\r
387// DeviceType definitions - from BBS specification\r
388//\r
389#define BBS_TYPE_FLOPPY 0x01\r
390#define BBS_TYPE_HARDDRIVE 0x02\r
391#define BBS_TYPE_CDROM 0x03\r
392#define BBS_TYPE_PCMCIA 0x04\r
393#define BBS_TYPE_USB 0x05\r
394#define BBS_TYPE_EMBEDDED_NETWORK 0x06\r
395#define BBS_TYPE_BEV 0x80\r
396#define BBS_TYPE_UNKNOWN 0xFF\r
397\r
398\r
399//\r
400// Union of all possible Device Paths and pointers to Device Paths\r
401//\r
402\r
403typedef union {\r
404 EFI_DEVICE_PATH_PROTOCOL DevPath;\r
405 PCI_DEVICE_PATH Pci;\r
406 PCCARD_DEVICE_PATH PcCard;\r
407 MEMMAP_DEVICE_PATH MemMap;\r
408 VENDOR_DEVICE_PATH Vendor;\r
409\r
410 CONTROLLER_DEVICE_PATH Controller;\r
411 ACPI_HID_DEVICE_PATH Acpi;\r
412\r
413 ATAPI_DEVICE_PATH Atapi;\r
414 SCSI_DEVICE_PATH Scsi;\r
415 FIBRECHANNEL_DEVICE_PATH FibreChannel;\r
416\r
417 F1394_DEVICE_PATH F1394;\r
418 USB_DEVICE_PATH Usb;\r
419 SATA_DEVICE_PATH Sata;\r
420 USB_CLASS_DEVICE_PATH UsbClass;\r
421 I2O_DEVICE_PATH I2O;\r
422 MAC_ADDR_DEVICE_PATH MacAddr;\r
423 IPv4_DEVICE_PATH Ipv4;\r
424 IPv6_DEVICE_PATH Ipv6;\r
425 INFINIBAND_DEVICE_PATH InfiniBand;\r
426 UART_DEVICE_PATH Uart;\r
427\r
428 HARDDRIVE_DEVICE_PATH HardDrive;\r
429 CDROM_DEVICE_PATH CD;\r
430\r
431 FILEPATH_DEVICE_PATH FilePath;\r
432 MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol;\r
433\r
434 BBS_BBS_DEVICE_PATH Bbs;\r
435} EFI_DEV_PATH;\r
436\r
437\r
438\r
439typedef union {\r
440 EFI_DEVICE_PATH_PROTOCOL *DevPath;\r
441 PCI_DEVICE_PATH *Pci;\r
442 PCCARD_DEVICE_PATH *PcCard;\r
443 MEMMAP_DEVICE_PATH *MemMap;\r
444 VENDOR_DEVICE_PATH *Vendor;\r
445\r
446 CONTROLLER_DEVICE_PATH *Controller;\r
447 ACPI_HID_DEVICE_PATH *Acpi;\r
448 ACPI_EXTENDED_HID_DEVICE_PATH *ExtendedAcpi;\r
449\r
450 ATAPI_DEVICE_PATH *Atapi;\r
451 SCSI_DEVICE_PATH *Scsi;\r
452 FIBRECHANNEL_DEVICE_PATH *FibreChannel;\r
453\r
454 F1394_DEVICE_PATH *F1394;\r
455 USB_DEVICE_PATH *Usb;\r
456 SATA_DEVICE_PATH *Sata;\r
457 USB_CLASS_DEVICE_PATH *UsbClass;\r
458 I2O_DEVICE_PATH *I2O;\r
459 MAC_ADDR_DEVICE_PATH *MacAddr;\r
460 IPv4_DEVICE_PATH *Ipv4;\r
461 IPv6_DEVICE_PATH *Ipv6;\r
462 INFINIBAND_DEVICE_PATH *InfiniBand;\r
463 UART_DEVICE_PATH *Uart;\r
464\r
465 HARDDRIVE_DEVICE_PATH *HardDrive;\r
466 CDROM_DEVICE_PATH *CD;\r
467\r
468 FILEPATH_DEVICE_PATH *FilePath;\r
469 MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol;\r
470\r
471 BBS_BBS_DEVICE_PATH *Bbs;\r
472 UINT8 *Raw;\r
473} EFI_DEV_PATH_PTR;\r
474\r
475#pragma pack()\r
d1f95000 476 \r
477#define EFI_DP_TYPE_MASK 0x7F\r
478#define EFI_DP_TYPE_UNPACKED 0x80\r
479#define END_DEVICE_PATH_TYPE 0x7f\r
480 \r
481#define EFI_END_ENTIRE_DEVICE_PATH 0xff\r
482#define EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff\r
483#define EFI_END_INSTANCE_DEVICE_PATH 0x01\r
484#define END_ENTIRE_DEVICE_PATH_SUBTYPE EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE\r
485#define END_INSTANCE_DEVICE_PATH_SUBTYPE EFI_END_INSTANCE_DEVICE_PATH\r
486 \r
487#define EFI_END_DEVICE_PATH_LENGTH (sizeof (EFI_DEVICE_PATH_PROTOCOL))\r
488#define END_DEVICE_PATH_LENGTH EFI_END_DEVICE_PATH_LENGTH\r
489 \r
490#define DP_IS_END_TYPE(a) \r
491#define DP_IS_END_SUBTYPE(a) (((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE)\r
492#define DevicePathSubType(a) ((a)->SubType)\r
493#define IsDevicePathUnpacked(a) ((a)->Type & EFI_DP_TYPE_UNPACKED)\r
494 \r
495#define EfiDevicePathNodeLength(a) (((a)->Length[0]) | ((a)->Length[1] << 8))\r
496#define DevicePathNodeLength(a) (EfiDevicePathNodeLength(a))\r
497#define EfiNextDevicePathNode(a) ((EFI_DEVICE_PATH_PROTOCOL *) (((UINT8 *) (a)) + EfiDevicePathNodeLength (a)))\r
498#define NextDevicePathNode(a) (EfiNextDevicePathNode(a)) \r
499 \r
500#define EfiDevicePathType(a) (((a)->Type) & EFI_DP_TYPE_MASK)\r
501#define DevicePathType(a) (EfiDevicePathType(a))\r
502#define EfiIsDevicePathEndType(a) (EfiDevicePathType (a) == END_DEVICE_PATH_TYPE)\r
503#define IsDevicePathEndType(a) (EfiIsDevicePathEndType(a)) \r
504 \r
505 \r
506#define EfiIsDevicePathEndSubType(a) ((a)->SubType == EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE)\r
507#define IsDevicePathEndSubType(a) (EfiIsDevicePathEndSubType(a))\r
508#define EfiIsDevicePathEndInstanceSubType(a) ((a)->SubType == EFI_END_INSTANCE_DEVICE_PATH)\r
509 \r
510#define EfiIsDevicePathEnd(a) (EfiIsDevicePathEndType (a) && EfiIsDevicePathEndSubType (a))\r
511#define IsDevicePathEnd(a) (EfiIsDevicePathEnd(a))\r
512#define EfiIsDevicePathEndInstance(a) (EfiIsDevicePathEndType (a) && EfiIsDevicePathEndInstanceSubType (a))\r
513\r
514\r
515#define SetDevicePathNodeLength(a,l) { \\r
516 (a)->Length[0] = (UINT8) (l); \\r
517 (a)->Length[1] = (UINT8) ((l) >> 8); \\r
518 }\r
519\r
520#define SetDevicePathEndNode(a) { \\r
521 (a)->Type = END_DEVICE_PATH_TYPE; \\r
522 (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \\r
523 (a)->Length[0] = sizeof(EFI_DEVICE_PATH_PROTOCOL); \\r
524 (a)->Length[1] = 0; \\r
525 }\r
526\r
527extern EFI_GUID gEfiDevicePathProtocolGuid;\r
959ccb23 528\r
529#endif\r