2 DevicePathToText protocol as defined in the UEFI 2.0 specification.
4 Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #include "UefiDevicePathLib.h"
18 Concatenates a formatted unicode string to allocated pool. The caller must
19 free the resulting buffer.
21 @param Str Tracks the allocated pool, size in use, and
22 amount of pool allocated.
23 @param Fmt The format string
24 @param ... Variable arguments based on the format string.
26 @return Allocated buffer with the formatted string printed in it.
27 The caller must free the allocated buffer. The buffer
28 allocation is not packed.
33 UefiDevicePathLibCatPrint (
34 IN OUT POOL_PRINT
*Str
,
43 Count
= SPrintLength (Fmt
, Args
);
45 if ((Str
->Count
+ (Count
+ 1)) * sizeof (CHAR16
) > Str
->Capacity
) {
46 Str
->Capacity
= (Str
->Count
+ (Count
+ 1) * 2) * sizeof (CHAR16
);
47 Str
->Str
= ReallocatePool (
48 Str
->Count
* sizeof (CHAR16
),
52 ASSERT (Str
->Str
!= NULL
);
54 UnicodeVSPrint (&Str
->Str
[Str
->Count
], Str
->Capacity
- Str
->Count
* sizeof (CHAR16
), Fmt
, Args
);
62 Converts a PCI device path structure to its string representative.
64 @param Str The string representative of input device.
65 @param DevPath The input device path structure.
66 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
67 of the display node is used, where applicable. If DisplayOnly
68 is FALSE, then the longer text representation of the display node
70 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
71 representation for a device node can be used, where applicable.
76 IN OUT POOL_PRINT
*Str
,
78 IN BOOLEAN DisplayOnly
,
79 IN BOOLEAN AllowShortcuts
85 UefiDevicePathLibCatPrint (Str
, L
"Pci(0x%x,0x%x)", Pci
->Device
, Pci
->Function
);
89 Converts a PC Card device path structure to its string representative.
91 @param Str The string representative of input device.
92 @param DevPath The input device path structure.
93 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
94 of the display node is used, where applicable. If DisplayOnly
95 is FALSE, then the longer text representation of the display node
97 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
98 representation for a device node can be used, where applicable.
102 DevPathToTextPccard (
103 IN OUT POOL_PRINT
*Str
,
105 IN BOOLEAN DisplayOnly
,
106 IN BOOLEAN AllowShortcuts
109 PCCARD_DEVICE_PATH
*Pccard
;
112 UefiDevicePathLibCatPrint (Str
, L
"PcCard(0x%x)", Pccard
->FunctionNumber
);
116 Converts a Memory Map device path structure to its string representative.
118 @param Str The string representative of input device.
119 @param DevPath The input device path structure.
120 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
121 of the display node is used, where applicable. If DisplayOnly
122 is FALSE, then the longer text representation of the display node
124 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
125 representation for a device node can be used, where applicable.
129 DevPathToTextMemMap (
130 IN OUT POOL_PRINT
*Str
,
132 IN BOOLEAN DisplayOnly
,
133 IN BOOLEAN AllowShortcuts
136 MEMMAP_DEVICE_PATH
*MemMap
;
139 UefiDevicePathLibCatPrint (
141 L
"MemoryMapped(0x%x,0x%lx,0x%lx)",
143 MemMap
->StartingAddress
,
144 MemMap
->EndingAddress
149 Converts a Vendor device path structure to its string representative.
151 @param Str The string representative of input device.
152 @param DevPath The input device path structure.
153 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
154 of the display node is used, where applicable. If DisplayOnly
155 is FALSE, then the longer text representation of the display node
157 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
158 representation for a device node can be used, where applicable.
162 DevPathToTextVendor (
163 IN OUT POOL_PRINT
*Str
,
165 IN BOOLEAN DisplayOnly
,
166 IN BOOLEAN AllowShortcuts
169 VENDOR_DEVICE_PATH
*Vendor
;
173 UINT32 FlowControlMap
;
176 Vendor
= (VENDOR_DEVICE_PATH
*) DevPath
;
177 switch (DevicePathType (&Vendor
->Header
)) {
178 case HARDWARE_DEVICE_PATH
:
182 case MESSAGING_DEVICE_PATH
:
184 if (AllowShortcuts
) {
185 if (CompareGuid (&Vendor
->Guid
, &gEfiPcAnsiGuid
)) {
186 UefiDevicePathLibCatPrint (Str
, L
"VenPcAnsi()");
188 } else if (CompareGuid (&Vendor
->Guid
, &gEfiVT100Guid
)) {
189 UefiDevicePathLibCatPrint (Str
, L
"VenVt100()");
191 } else if (CompareGuid (&Vendor
->Guid
, &gEfiVT100PlusGuid
)) {
192 UefiDevicePathLibCatPrint (Str
, L
"VenVt100Plus()");
194 } else if (CompareGuid (&Vendor
->Guid
, &gEfiVTUTF8Guid
)) {
195 UefiDevicePathLibCatPrint (Str
, L
"VenUft8()");
197 } else if (CompareGuid (&Vendor
->Guid
, &gEfiUartDevicePathGuid
)) {
198 FlowControlMap
= (((UART_FLOW_CONTROL_DEVICE_PATH
*) Vendor
)->FlowControlMap
);
199 switch (FlowControlMap
& 0x00000003) {
201 UefiDevicePathLibCatPrint (Str
, L
"UartFlowCtrl(%s)", L
"None");
205 UefiDevicePathLibCatPrint (Str
, L
"UartFlowCtrl(%s)", L
"Hardware");
209 UefiDevicePathLibCatPrint (Str
, L
"UartFlowCtrl(%s)", L
"XonXoff");
217 } else if (CompareGuid (&Vendor
->Guid
, &gEfiSasDevicePathGuid
)) {
218 UefiDevicePathLibCatPrint (
220 L
"SAS(0x%lx,0x%lx,0x%x,",
221 ((SAS_DEVICE_PATH
*) Vendor
)->SasAddress
,
222 ((SAS_DEVICE_PATH
*) Vendor
)->Lun
,
223 ((SAS_DEVICE_PATH
*) Vendor
)->RelativeTargetPort
225 Info
= (((SAS_DEVICE_PATH
*) Vendor
)->DeviceTopology
);
226 if (((Info
& 0x0f) == 0) && ((Info
& BIT7
) == 0)) {
227 UefiDevicePathLibCatPrint (Str
, L
"NoTopology,0,0,0,");
228 } else if (((Info
& 0x0f) <= 2) && ((Info
& BIT7
) == 0)) {
229 UefiDevicePathLibCatPrint (
232 ((Info
& BIT4
) != 0) ? L
"SATA" : L
"SAS",
233 ((Info
& BIT5
) != 0) ? L
"External" : L
"Internal",
234 ((Info
& BIT6
) != 0) ? L
"Expanded" : L
"Direct"
236 if ((Info
& 0x0f) == 1) {
237 UefiDevicePathLibCatPrint (Str
, L
"0,");
240 // Value 0x0 thru 0xFF -> Drive 1 thru Drive 256
242 UefiDevicePathLibCatPrint (Str
, L
"0x%x,", ((Info
>> 8) & 0xff) + 1);
245 UefiDevicePathLibCatPrint (Str
, L
"0x%x,0,0,0,", Info
);
248 UefiDevicePathLibCatPrint (Str
, L
"0x%x)", ((SAS_DEVICE_PATH
*) Vendor
)->Reserved
);
250 } else if (CompareGuid (&Vendor
->Guid
, &gEfiDebugPortProtocolGuid
)) {
251 UefiDevicePathLibCatPrint (Str
, L
"DebugPort()");
257 case MEDIA_DEVICE_PATH
:
266 DataLength
= DevicePathNodeLength (&Vendor
->Header
) - sizeof (VENDOR_DEVICE_PATH
);
267 UefiDevicePathLibCatPrint (Str
, L
"Ven%s(%g", Type
, &Vendor
->Guid
);
268 if (DataLength
!= 0) {
269 UefiDevicePathLibCatPrint (Str
, L
",");
270 for (Index
= 0; Index
< DataLength
; Index
++) {
271 UefiDevicePathLibCatPrint (Str
, L
"%02x", ((VENDOR_DEVICE_PATH_WITH_DATA
*) Vendor
)->VendorDefinedData
[Index
]);
275 UefiDevicePathLibCatPrint (Str
, L
")");
279 Converts a Controller device path structure to its string representative.
281 @param Str The string representative of input device.
282 @param DevPath The input device path structure.
283 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
284 of the display node is used, where applicable. If DisplayOnly
285 is FALSE, then the longer text representation of the display node
287 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
288 representation for a device node can be used, where applicable.
292 DevPathToTextController (
293 IN OUT POOL_PRINT
*Str
,
295 IN BOOLEAN DisplayOnly
,
296 IN BOOLEAN AllowShortcuts
299 CONTROLLER_DEVICE_PATH
*Controller
;
301 Controller
= DevPath
;
302 UefiDevicePathLibCatPrint (
305 Controller
->ControllerNumber
310 Converts a ACPI device path structure to its string representative.
312 @param Str The string representative of input device.
313 @param DevPath The input device path structure.
314 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
315 of the display node is used, where applicable. If DisplayOnly
316 is FALSE, then the longer text representation of the display node
318 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
319 representation for a device node can be used, where applicable.
324 IN OUT POOL_PRINT
*Str
,
326 IN BOOLEAN DisplayOnly
,
327 IN BOOLEAN AllowShortcuts
330 ACPI_HID_DEVICE_PATH
*Acpi
;
333 if ((Acpi
->HID
& PNP_EISA_ID_MASK
) == PNP_EISA_ID_CONST
) {
334 switch (EISA_ID_TO_NUM (Acpi
->HID
)) {
336 UefiDevicePathLibCatPrint (Str
, L
"PciRoot(0x%x)", Acpi
->UID
);
340 UefiDevicePathLibCatPrint (Str
, L
"PcieRoot(0x%x)", Acpi
->UID
);
344 UefiDevicePathLibCatPrint (Str
, L
"Floppy(0x%x)", Acpi
->UID
);
348 UefiDevicePathLibCatPrint (Str
, L
"Keyboard(0x%x)", Acpi
->UID
);
352 UefiDevicePathLibCatPrint (Str
, L
"Serial(0x%x)", Acpi
->UID
);
356 UefiDevicePathLibCatPrint (Str
, L
"ParallelPort(0x%x)", Acpi
->UID
);
360 UefiDevicePathLibCatPrint (Str
, L
"Acpi(PNP%04x,0x%x)", EISA_ID_TO_NUM (Acpi
->HID
), Acpi
->UID
);
364 UefiDevicePathLibCatPrint (Str
, L
"Acpi(0x%08x,0x%x)", Acpi
->HID
, Acpi
->UID
);
369 Converts a ACPI extended HID device path structure to its string representative.
371 @param Str The string representative of input device.
372 @param DevPath The input device path structure.
373 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
374 of the display node is used, where applicable. If DisplayOnly
375 is FALSE, then the longer text representation of the display node
377 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
378 representation for a device node can be used, where applicable.
382 DevPathToTextAcpiEx (
383 IN OUT POOL_PRINT
*Str
,
385 IN BOOLEAN DisplayOnly
,
386 IN BOOLEAN AllowShortcuts
389 ACPI_EXTENDED_HID_DEVICE_PATH
*AcpiEx
;
397 HIDStr
= (CHAR8
*) (((UINT8
*) AcpiEx
) + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH
));
398 UIDStr
= HIDStr
+ AsciiStrLen (HIDStr
) + 1;
399 CIDStr
= UIDStr
+ AsciiStrLen (UIDStr
) + 1;
402 // Converts EISA identification to string.
408 ((AcpiEx
->HID
>> 10) & 0x1f) + 'A' - 1,
409 ((AcpiEx
->HID
>> 5) & 0x1f) + 'A' - 1,
410 ((AcpiEx
->HID
>> 0) & 0x1f) + 'A' - 1,
411 (AcpiEx
->HID
>> 16) & 0xFFFF
417 ((AcpiEx
->CID
>> 10) & 0x1f) + 'A' - 1,
418 ((AcpiEx
->CID
>> 5) & 0x1f) + 'A' - 1,
419 ((AcpiEx
->CID
>> 0) & 0x1f) + 'A' - 1,
420 (AcpiEx
->CID
>> 16) & 0xFFFF
423 if ((*HIDStr
== '\0') && (*CIDStr
== '\0') && (AcpiEx
->UID
== 0)) {
427 UefiDevicePathLibCatPrint (
429 L
"AcpiExp(%s,%s,%a)",
435 if (AllowShortcuts
) {
439 if (AcpiEx
->HID
== 0) {
440 UefiDevicePathLibCatPrint (Str
, L
"AcpiEx(%a,", HIDStr
);
442 UefiDevicePathLibCatPrint (Str
, L
"AcpiEx(%s,", HIDText
);
445 if (AcpiEx
->UID
== 0) {
446 UefiDevicePathLibCatPrint (Str
, L
"%a,", UIDStr
);
448 UefiDevicePathLibCatPrint (Str
, L
"0x%x,", AcpiEx
->UID
);
451 if (AcpiEx
->CID
== 0) {
452 UefiDevicePathLibCatPrint (Str
, L
"%a)", CIDStr
);
454 UefiDevicePathLibCatPrint (Str
, L
"%s)", CIDText
);
457 UefiDevicePathLibCatPrint (
459 L
"AcpiEx(%s,%s,0x%x,%a,%a,%a)",
472 Converts a ACPI address device path structure to its string representative.
474 @param Str The string representative of input device.
475 @param DevPath The input device path structure.
476 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
477 of the display node is used, where applicable. If DisplayOnly
478 is FALSE, then the longer text representation of the display node
480 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
481 representation for a device node can be used, where applicable.
485 DevPathToTextAcpiAdr (
486 IN OUT POOL_PRINT
*Str
,
488 IN BOOLEAN DisplayOnly
,
489 IN BOOLEAN AllowShortcuts
492 ACPI_ADR_DEVICE_PATH
*AcpiAdr
;
495 UINT16 AdditionalAdrCount
;
498 Length
= (UINT16
) DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL
*) AcpiAdr
);
499 AdditionalAdrCount
= (UINT16
) ((Length
- 8) / 4);
501 UefiDevicePathLibCatPrint (Str
, L
"AcpiAdr(0x%x", AcpiAdr
->ADR
);
502 for (Index
= 0; Index
< AdditionalAdrCount
; Index
++) {
503 UefiDevicePathLibCatPrint (Str
, L
",0x%x", *(UINT32
*) ((UINT8
*) AcpiAdr
+ 8 + Index
* 4));
505 UefiDevicePathLibCatPrint (Str
, L
")");
509 Converts a ATAPI device path structure to its string representative.
511 @param Str The string representative of input device.
512 @param DevPath The input device path structure.
513 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
514 of the display node is used, where applicable. If DisplayOnly
515 is FALSE, then the longer text representation of the display node
517 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
518 representation for a device node can be used, where applicable.
523 IN OUT POOL_PRINT
*Str
,
525 IN BOOLEAN DisplayOnly
,
526 IN BOOLEAN AllowShortcuts
529 ATAPI_DEVICE_PATH
*Atapi
;
534 UefiDevicePathLibCatPrint (Str
, L
"Ata(0x%x)", Atapi
->Lun
);
536 UefiDevicePathLibCatPrint (
539 (Atapi
->PrimarySecondary
== 1) ? L
"Secondary" : L
"Primary",
540 (Atapi
->SlaveMaster
== 1) ? L
"Slave" : L
"Master",
547 Converts a SCSI device path structure to its string representative.
549 @param Str The string representative of input device.
550 @param DevPath The input device path structure.
551 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
552 of the display node is used, where applicable. If DisplayOnly
553 is FALSE, then the longer text representation of the display node
555 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
556 representation for a device node can be used, where applicable.
561 IN OUT POOL_PRINT
*Str
,
563 IN BOOLEAN DisplayOnly
,
564 IN BOOLEAN AllowShortcuts
567 SCSI_DEVICE_PATH
*Scsi
;
570 UefiDevicePathLibCatPrint (Str
, L
"Scsi(0x%x,0x%x)", Scsi
->Pun
, Scsi
->Lun
);
574 Converts a Fibre device path structure to its string representative.
576 @param Str The string representative of input device.
577 @param DevPath The input device path structure.
578 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
579 of the display node is used, where applicable. If DisplayOnly
580 is FALSE, then the longer text representation of the display node
582 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
583 representation for a device node can be used, where applicable.
588 IN OUT POOL_PRINT
*Str
,
590 IN BOOLEAN DisplayOnly
,
591 IN BOOLEAN AllowShortcuts
594 FIBRECHANNEL_DEVICE_PATH
*Fibre
;
597 UefiDevicePathLibCatPrint (Str
, L
"Fibre(0x%lx,0x%lx)", Fibre
->WWN
, Fibre
->Lun
);
601 Converts a FibreEx device path structure to its string representative.
603 @param Str The string representative of input device.
604 @param DevPath The input device path structure.
605 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
606 of the display node is used, where applicable. If DisplayOnly
607 is FALSE, then the longer text representation of the display node
609 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
610 representation for a device node can be used, where applicable.
614 DevPathToTextFibreEx (
615 IN OUT POOL_PRINT
*Str
,
617 IN BOOLEAN DisplayOnly
,
618 IN BOOLEAN AllowShortcuts
621 FIBRECHANNELEX_DEVICE_PATH
*FibreEx
;
625 UefiDevicePathLibCatPrint (Str
, L
"FibreEx(0x");
626 for (Index
= 0; Index
< sizeof (FibreEx
->WWN
) / sizeof (FibreEx
->WWN
[0]); Index
++) {
627 UefiDevicePathLibCatPrint (Str
, L
"%02x", FibreEx
->WWN
[Index
]);
629 UefiDevicePathLibCatPrint (Str
, L
",0x");
630 for (Index
= 0; Index
< sizeof (FibreEx
->Lun
) / sizeof (FibreEx
->Lun
[0]); Index
++) {
631 UefiDevicePathLibCatPrint (Str
, L
"%02x", FibreEx
->Lun
[Index
]);
633 UefiDevicePathLibCatPrint (Str
, L
")");
637 Converts a Sas Ex device path structure to its string representative.
639 @param Str The string representative of input device.
640 @param DevPath The input device path structure.
641 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
642 of the display node is used, where applicable. If DisplayOnly
643 is FALSE, then the longer text representation of the display node
645 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
646 representation for a device node can be used, where applicable.
651 IN OUT POOL_PRINT
*Str
,
653 IN BOOLEAN DisplayOnly
,
654 IN BOOLEAN AllowShortcuts
657 SASEX_DEVICE_PATH
*SasEx
;
661 UefiDevicePathLibCatPrint (Str
, L
"SasEx(0x");
663 for (Index
= 0; Index
< sizeof (SasEx
->SasAddress
) / sizeof (SasEx
->SasAddress
[0]); Index
++) {
664 UefiDevicePathLibCatPrint (Str
, L
"%02x", SasEx
->SasAddress
[Index
]);
666 UefiDevicePathLibCatPrint (Str
, L
",0x");
667 for (Index
= 0; Index
< sizeof (SasEx
->Lun
) / sizeof (SasEx
->Lun
[0]); Index
++) {
668 UefiDevicePathLibCatPrint (Str
, L
"%02x", SasEx
->Lun
[Index
]);
670 UefiDevicePathLibCatPrint (Str
, L
",0x%x,", SasEx
->RelativeTargetPort
);
672 if (((SasEx
->DeviceTopology
& 0x0f) == 0) && ((SasEx
->DeviceTopology
& BIT7
) == 0)) {
673 UefiDevicePathLibCatPrint (Str
, L
"NoTopology,0,0,0");
674 } else if (((SasEx
->DeviceTopology
& 0x0f) <= 2) && ((SasEx
->DeviceTopology
& BIT7
) == 0)) {
675 UefiDevicePathLibCatPrint (
678 ((SasEx
->DeviceTopology
& BIT4
) != 0) ? L
"SATA" : L
"SAS",
679 ((SasEx
->DeviceTopology
& BIT5
) != 0) ? L
"External" : L
"Internal",
680 ((SasEx
->DeviceTopology
& BIT6
) != 0) ? L
"Expanded" : L
"Direct"
682 if ((SasEx
->DeviceTopology
& 0x0f) == 1) {
683 UefiDevicePathLibCatPrint (Str
, L
"0");
686 // Value 0x0 thru 0xFF -> Drive 1 thru Drive 256
688 UefiDevicePathLibCatPrint (Str
, L
"0x%x", ((SasEx
->DeviceTopology
>> 8) & 0xff) + 1);
691 UefiDevicePathLibCatPrint (Str
, L
"0x%x,0,0,0", SasEx
->DeviceTopology
);
694 UefiDevicePathLibCatPrint (Str
, L
")");
700 Converts a NVM Express Namespace device path structure to its string representative.
702 @param Str The string representative of input device.
703 @param DevPath The input device path structure.
704 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
705 of the display node is used, where applicable. If DisplayOnly
706 is FALSE, then the longer text representation of the display node
708 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
709 representation for a device node can be used, where applicable.
714 IN OUT POOL_PRINT
*Str
,
716 IN BOOLEAN DisplayOnly
,
717 IN BOOLEAN AllowShortcuts
720 NVME_NAMESPACE_DEVICE_PATH
*Nvme
;
724 Uuid
= (UINT8
*) &Nvme
->NamespaceUuid
;
725 UefiDevicePathLibCatPrint (
727 L
"NVMe(0x%x,%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)",
729 Uuid
[7], Uuid
[6], Uuid
[5], Uuid
[4],
730 Uuid
[3], Uuid
[2], Uuid
[1], Uuid
[0]
735 Converts a 1394 device path structure to its string representative.
737 @param Str The string representative of input device.
738 @param DevPath The input device path structure.
739 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
740 of the display node is used, where applicable. If DisplayOnly
741 is FALSE, then the longer text representation of the display node
743 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
744 representation for a device node can be used, where applicable.
749 IN OUT POOL_PRINT
*Str
,
751 IN BOOLEAN DisplayOnly
,
752 IN BOOLEAN AllowShortcuts
755 F1394_DEVICE_PATH
*F1394DevPath
;
757 F1394DevPath
= DevPath
;
759 // Guid has format of IEEE-EUI64
761 UefiDevicePathLibCatPrint (Str
, L
"I1394(%016lx)", F1394DevPath
->Guid
);
765 Converts a USB device path structure to its string representative.
767 @param Str The string representative of input device.
768 @param DevPath The input device path structure.
769 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
770 of the display node is used, where applicable. If DisplayOnly
771 is FALSE, then the longer text representation of the display node
773 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
774 representation for a device node can be used, where applicable.
779 IN OUT POOL_PRINT
*Str
,
781 IN BOOLEAN DisplayOnly
,
782 IN BOOLEAN AllowShortcuts
785 USB_DEVICE_PATH
*Usb
;
788 UefiDevicePathLibCatPrint (Str
, L
"USB(0x%x,0x%x)", Usb
->ParentPortNumber
, Usb
->InterfaceNumber
);
792 Converts a USB WWID device path structure to its string representative.
794 @param Str The string representative of input device.
795 @param DevPath The input device path structure.
796 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
797 of the display node is used, where applicable. If DisplayOnly
798 is FALSE, then the longer text representation of the display node
800 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
801 representation for a device node can be used, where applicable.
805 DevPathToTextUsbWWID (
806 IN OUT POOL_PRINT
*Str
,
808 IN BOOLEAN DisplayOnly
,
809 IN BOOLEAN AllowShortcuts
812 USB_WWID_DEVICE_PATH
*UsbWWId
;
813 CHAR16
*SerialNumberStr
;
819 SerialNumberStr
= (CHAR16
*) ((UINT8
*) UsbWWId
+ sizeof (USB_WWID_DEVICE_PATH
));
820 Length
= (UINT16
) ((DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL
*) UsbWWId
) - sizeof (USB_WWID_DEVICE_PATH
)) / sizeof (CHAR16
));
821 if (SerialNumberStr
[Length
- 1] != 0) {
823 // In case no NULL terminator in SerialNumber, create a new one with NULL terminator
825 NewStr
= AllocateCopyPool ((Length
+ 1) * sizeof (CHAR16
), SerialNumberStr
);
826 ASSERT (NewStr
!= NULL
);
828 SerialNumberStr
= NewStr
;
831 UefiDevicePathLibCatPrint (
833 L
"UsbWwid(0x%x,0x%x,0x%x,\"%s\")",
836 UsbWWId
->InterfaceNumber
,
842 Converts a Logic Unit device path structure to its string representative.
844 @param Str The string representative of input device.
845 @param DevPath The input device path structure.
846 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
847 of the display node is used, where applicable. If DisplayOnly
848 is FALSE, then the longer text representation of the display node
850 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
851 representation for a device node can be used, where applicable.
855 DevPathToTextLogicalUnit (
856 IN OUT POOL_PRINT
*Str
,
858 IN BOOLEAN DisplayOnly
,
859 IN BOOLEAN AllowShortcuts
862 DEVICE_LOGICAL_UNIT_DEVICE_PATH
*LogicalUnit
;
864 LogicalUnit
= DevPath
;
865 UefiDevicePathLibCatPrint (Str
, L
"Unit(0x%x)", LogicalUnit
->Lun
);
869 Converts a USB class device path structure to its string representative.
871 @param Str The string representative of input device.
872 @param DevPath The input device path structure.
873 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
874 of the display node is used, where applicable. If DisplayOnly
875 is FALSE, then the longer text representation of the display node
877 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
878 representation for a device node can be used, where applicable.
882 DevPathToTextUsbClass (
883 IN OUT POOL_PRINT
*Str
,
885 IN BOOLEAN DisplayOnly
,
886 IN BOOLEAN AllowShortcuts
889 USB_CLASS_DEVICE_PATH
*UsbClass
;
890 BOOLEAN IsKnownSubClass
;
895 IsKnownSubClass
= TRUE
;
896 switch (UsbClass
->DeviceClass
) {
897 case USB_CLASS_AUDIO
:
898 UefiDevicePathLibCatPrint (Str
, L
"UsbAudio");
901 case USB_CLASS_CDCCONTROL
:
902 UefiDevicePathLibCatPrint (Str
, L
"UsbCDCControl");
906 UefiDevicePathLibCatPrint (Str
, L
"UsbHID");
909 case USB_CLASS_IMAGE
:
910 UefiDevicePathLibCatPrint (Str
, L
"UsbImage");
913 case USB_CLASS_PRINTER
:
914 UefiDevicePathLibCatPrint (Str
, L
"UsbPrinter");
917 case USB_CLASS_MASS_STORAGE
:
918 UefiDevicePathLibCatPrint (Str
, L
"UsbMassStorage");
922 UefiDevicePathLibCatPrint (Str
, L
"UsbHub");
925 case USB_CLASS_CDCDATA
:
926 UefiDevicePathLibCatPrint (Str
, L
"UsbCDCData");
929 case USB_CLASS_SMART_CARD
:
930 UefiDevicePathLibCatPrint (Str
, L
"UsbSmartCard");
933 case USB_CLASS_VIDEO
:
934 UefiDevicePathLibCatPrint (Str
, L
"UsbVideo");
937 case USB_CLASS_DIAGNOSTIC
:
938 UefiDevicePathLibCatPrint (Str
, L
"UsbDiagnostic");
941 case USB_CLASS_WIRELESS
:
942 UefiDevicePathLibCatPrint (Str
, L
"UsbWireless");
946 IsKnownSubClass
= FALSE
;
950 if (IsKnownSubClass
) {
951 UefiDevicePathLibCatPrint (
953 L
"(0x%x,0x%x,0x%x,0x%x)",
956 UsbClass
->DeviceSubClass
,
957 UsbClass
->DeviceProtocol
962 if (UsbClass
->DeviceClass
== USB_CLASS_RESERVE
) {
963 if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_FW_UPDATE
) {
964 UefiDevicePathLibCatPrint (
966 L
"UsbDeviceFirmwareUpdate(0x%x,0x%x,0x%x)",
969 UsbClass
->DeviceProtocol
972 } else if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_IRDA_BRIDGE
) {
973 UefiDevicePathLibCatPrint (
975 L
"UsbIrdaBridge(0x%x,0x%x,0x%x)",
978 UsbClass
->DeviceProtocol
981 } else if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_TEST
) {
982 UefiDevicePathLibCatPrint (
984 L
"UsbTestAndMeasurement(0x%x,0x%x,0x%x)",
987 UsbClass
->DeviceProtocol
993 UefiDevicePathLibCatPrint (
995 L
"UsbClass(0x%x,0x%x,0x%x,0x%x,0x%x)",
998 UsbClass
->DeviceClass
,
999 UsbClass
->DeviceSubClass
,
1000 UsbClass
->DeviceProtocol
1005 Converts a SATA device path structure to its string representative.
1007 @param Str The string representative of input device.
1008 @param DevPath The input device path structure.
1009 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1010 of the display node is used, where applicable. If DisplayOnly
1011 is FALSE, then the longer text representation of the display node
1013 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1014 representation for a device node can be used, where applicable.
1019 IN OUT POOL_PRINT
*Str
,
1021 IN BOOLEAN DisplayOnly
,
1022 IN BOOLEAN AllowShortcuts
1025 SATA_DEVICE_PATH
*Sata
;
1028 UefiDevicePathLibCatPrint (
1030 L
"Sata(0x%x,0x%x,0x%x)",
1031 Sata
->HBAPortNumber
,
1032 Sata
->PortMultiplierPortNumber
,
1038 Converts a I20 device path structure to its string representative.
1040 @param Str The string representative of input device.
1041 @param DevPath The input device path structure.
1042 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1043 of the display node is used, where applicable. If DisplayOnly
1044 is FALSE, then the longer text representation of the display node
1046 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1047 representation for a device node can be used, where applicable.
1052 IN OUT POOL_PRINT
*Str
,
1054 IN BOOLEAN DisplayOnly
,
1055 IN BOOLEAN AllowShortcuts
1058 I2O_DEVICE_PATH
*I2ODevPath
;
1060 I2ODevPath
= DevPath
;
1061 UefiDevicePathLibCatPrint (Str
, L
"I2O(0x%x)", I2ODevPath
->Tid
);
1065 Converts a MAC address device path structure to its string representative.
1067 @param Str The string representative of input device.
1068 @param DevPath The input device path structure.
1069 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1070 of the display node is used, where applicable. If DisplayOnly
1071 is FALSE, then the longer text representation of the display node
1073 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1074 representation for a device node can be used, where applicable.
1078 DevPathToTextMacAddr (
1079 IN OUT POOL_PRINT
*Str
,
1081 IN BOOLEAN DisplayOnly
,
1082 IN BOOLEAN AllowShortcuts
1085 MAC_ADDR_DEVICE_PATH
*MacDevPath
;
1086 UINTN HwAddressSize
;
1089 MacDevPath
= DevPath
;
1091 HwAddressSize
= sizeof (EFI_MAC_ADDRESS
);
1092 if (MacDevPath
->IfType
== 0x01 || MacDevPath
->IfType
== 0x00) {
1096 UefiDevicePathLibCatPrint (Str
, L
"MAC(");
1098 for (Index
= 0; Index
< HwAddressSize
; Index
++) {
1099 UefiDevicePathLibCatPrint (Str
, L
"%02x", MacDevPath
->MacAddress
.Addr
[Index
]);
1102 UefiDevicePathLibCatPrint (Str
, L
",0x%x)", MacDevPath
->IfType
);
1106 Converts network protocol string to its text representation.
1108 @param Str The string representative of input device.
1109 @param Protocol The network protocol ID.
1113 CatNetworkProtocol (
1114 IN OUT POOL_PRINT
*Str
,
1118 if (Protocol
== RFC_1700_TCP_PROTOCOL
) {
1119 UefiDevicePathLibCatPrint (Str
, L
"TCP");
1120 } else if (Protocol
== RFC_1700_UDP_PROTOCOL
) {
1121 UefiDevicePathLibCatPrint (Str
, L
"UDP");
1123 UefiDevicePathLibCatPrint (Str
, L
"0x%x", Protocol
);
1128 Converts IP v4 address to its text representation.
1130 @param Str The string representative of input device.
1131 @param Address The IP v4 address.
1135 IN OUT POOL_PRINT
*Str
,
1136 IN EFI_IPv4_ADDRESS
*Address
1139 UefiDevicePathLibCatPrint (Str
, L
"%d.%d.%d.%d", Address
->Addr
[0], Address
->Addr
[1], Address
->Addr
[2], Address
->Addr
[3]);
1143 Converts IP v6 address to its text representation.
1145 @param Str The string representative of input device.
1146 @param Address The IP v6 address.
1150 IN OUT POOL_PRINT
*Str
,
1151 IN EFI_IPv6_ADDRESS
*Address
1154 UefiDevicePathLibCatPrint (
1155 Str
, L
"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
1156 Address
->Addr
[0], Address
->Addr
[1],
1157 Address
->Addr
[2], Address
->Addr
[3],
1158 Address
->Addr
[4], Address
->Addr
[5],
1159 Address
->Addr
[6], Address
->Addr
[7],
1160 Address
->Addr
[8], Address
->Addr
[9],
1161 Address
->Addr
[10], Address
->Addr
[11],
1162 Address
->Addr
[12], Address
->Addr
[13],
1163 Address
->Addr
[14], Address
->Addr
[15]
1168 Converts a IPv4 device path structure to its string representative.
1170 @param Str The string representative of input device.
1171 @param DevPath The input device path structure.
1172 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1173 of the display node is used, where applicable. If DisplayOnly
1174 is FALSE, then the longer text representation of the display node
1176 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1177 representation for a device node can be used, where applicable.
1182 IN OUT POOL_PRINT
*Str
,
1184 IN BOOLEAN DisplayOnly
,
1185 IN BOOLEAN AllowShortcuts
1188 IPv4_DEVICE_PATH
*IPDevPath
;
1190 IPDevPath
= DevPath
;
1191 UefiDevicePathLibCatPrint (Str
, L
"IPv4(");
1192 CatIPv4Address (Str
, &IPDevPath
->RemoteIpAddress
);
1195 UefiDevicePathLibCatPrint (Str
, L
")");
1199 UefiDevicePathLibCatPrint (Str
, L
",");
1200 CatNetworkProtocol (Str
, IPDevPath
->Protocol
);
1202 UefiDevicePathLibCatPrint (Str
, L
",%s,", IPDevPath
->StaticIpAddress
? L
"Static" : L
"DHCP");
1203 CatIPv4Address (Str
, &IPDevPath
->LocalIpAddress
);
1204 if (DevicePathNodeLength (IPDevPath
) == sizeof (IPv4_DEVICE_PATH
)) {
1205 UefiDevicePathLibCatPrint (Str
, L
",");
1206 CatIPv4Address (Str
, &IPDevPath
->GatewayIpAddress
);
1207 UefiDevicePathLibCatPrint (Str
, L
",");
1208 CatIPv4Address (Str
, &IPDevPath
->SubnetMask
);
1210 UefiDevicePathLibCatPrint (Str
, L
")");
1214 Converts a IPv6 device path structure to its string representative.
1216 @param Str The string representative of input device.
1217 @param DevPath The input device path structure.
1218 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1219 of the display node is used, where applicable. If DisplayOnly
1220 is FALSE, then the longer text representation of the display node
1222 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1223 representation for a device node can be used, where applicable.
1228 IN OUT POOL_PRINT
*Str
,
1230 IN BOOLEAN DisplayOnly
,
1231 IN BOOLEAN AllowShortcuts
1234 IPv6_DEVICE_PATH
*IPDevPath
;
1236 IPDevPath
= DevPath
;
1237 UefiDevicePathLibCatPrint (Str
, L
"IPv6(");
1238 CatIPv6Address (Str
, &IPDevPath
->RemoteIpAddress
);
1240 UefiDevicePathLibCatPrint (Str
, L
")");
1244 UefiDevicePathLibCatPrint (Str
, L
",");
1245 CatNetworkProtocol (Str
, IPDevPath
->Protocol
);
1247 switch (IPDevPath
->IpAddressOrigin
) {
1249 UefiDevicePathLibCatPrint (Str
, L
",Static,");
1252 UefiDevicePathLibCatPrint (Str
, L
",StatelessAutoConfigure,");
1255 UefiDevicePathLibCatPrint (Str
, L
",StatefulAutoConfigure,");
1259 CatIPv6Address (Str
, &IPDevPath
->LocalIpAddress
);
1261 if (DevicePathNodeLength (IPDevPath
) == sizeof (IPv6_DEVICE_PATH
)) {
1262 UefiDevicePathLibCatPrint (Str
, L
",0x%x,", IPDevPath
->PrefixLength
);
1263 CatIPv6Address (Str
, &IPDevPath
->GatewayIpAddress
);
1265 UefiDevicePathLibCatPrint (Str
, L
")");
1269 Converts an Infini Band device path structure to its string representative.
1271 @param Str The string representative of input device.
1272 @param DevPath The input device path structure.
1273 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1274 of the display node is used, where applicable. If DisplayOnly
1275 is FALSE, then the longer text representation of the display node
1277 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1278 representation for a device node can be used, where applicable.
1282 DevPathToTextInfiniBand (
1283 IN OUT POOL_PRINT
*Str
,
1285 IN BOOLEAN DisplayOnly
,
1286 IN BOOLEAN AllowShortcuts
1289 INFINIBAND_DEVICE_PATH
*InfiniBand
;
1291 InfiniBand
= DevPath
;
1292 UefiDevicePathLibCatPrint (
1294 L
"Infiniband(0x%x,%g,0x%lx,0x%lx,0x%lx)",
1295 InfiniBand
->ResourceFlags
,
1296 InfiniBand
->PortGid
,
1297 InfiniBand
->ServiceId
,
1298 InfiniBand
->TargetPortId
,
1299 InfiniBand
->DeviceId
1304 Converts a UART device path structure to its string representative.
1306 @param Str The string representative of input device.
1307 @param DevPath The input device path structure.
1308 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1309 of the display node is used, where applicable. If DisplayOnly
1310 is FALSE, then the longer text representation of the display node
1312 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1313 representation for a device node can be used, where applicable.
1318 IN OUT POOL_PRINT
*Str
,
1320 IN BOOLEAN DisplayOnly
,
1321 IN BOOLEAN AllowShortcuts
1324 UART_DEVICE_PATH
*Uart
;
1328 switch (Uart
->Parity
) {
1358 if (Uart
->BaudRate
== 0) {
1359 UefiDevicePathLibCatPrint (Str
, L
"Uart(DEFAULT,");
1361 UefiDevicePathLibCatPrint (Str
, L
"Uart(%ld,", Uart
->BaudRate
);
1364 if (Uart
->DataBits
== 0) {
1365 UefiDevicePathLibCatPrint (Str
, L
"DEFAULT,");
1367 UefiDevicePathLibCatPrint (Str
, L
"%d,", Uart
->DataBits
);
1370 UefiDevicePathLibCatPrint (Str
, L
"%c,", Parity
);
1372 switch (Uart
->StopBits
) {
1374 UefiDevicePathLibCatPrint (Str
, L
"D)");
1378 UefiDevicePathLibCatPrint (Str
, L
"1)");
1382 UefiDevicePathLibCatPrint (Str
, L
"1.5)");
1386 UefiDevicePathLibCatPrint (Str
, L
"2)");
1390 UefiDevicePathLibCatPrint (Str
, L
"x)");
1396 Converts an iSCSI device path structure to its string representative.
1398 @param Str The string representative of input device.
1399 @param DevPath The input device path structure.
1400 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1401 of the display node is used, where applicable. If DisplayOnly
1402 is FALSE, then the longer text representation of the display node
1404 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1405 representation for a device node can be used, where applicable.
1409 DevPathToTextiSCSI (
1410 IN OUT POOL_PRINT
*Str
,
1412 IN BOOLEAN DisplayOnly
,
1413 IN BOOLEAN AllowShortcuts
1416 ISCSI_DEVICE_PATH_WITH_NAME
*ISCSIDevPath
;
1419 ISCSIDevPath
= DevPath
;
1420 UefiDevicePathLibCatPrint (
1422 L
"iSCSI(%a,0x%x,0x%lx,",
1423 ISCSIDevPath
->TargetName
,
1424 ISCSIDevPath
->TargetPortalGroupTag
,
1428 Options
= ISCSIDevPath
->LoginOption
;
1429 UefiDevicePathLibCatPrint (Str
, L
"%s,", (((Options
>> 1) & 0x0001) != 0) ? L
"CRC32C" : L
"None");
1430 UefiDevicePathLibCatPrint (Str
, L
"%s,", (((Options
>> 3) & 0x0001) != 0) ? L
"CRC32C" : L
"None");
1431 if (((Options
>> 11) & 0x0001) != 0) {
1432 UefiDevicePathLibCatPrint (Str
, L
"%s,", L
"None");
1433 } else if (((Options
>> 12) & 0x0001) != 0) {
1434 UefiDevicePathLibCatPrint (Str
, L
"%s,", L
"CHAP_UNI");
1436 UefiDevicePathLibCatPrint (Str
, L
"%s,", L
"CHAP_BI");
1440 UefiDevicePathLibCatPrint (Str
, L
"%s)", (ISCSIDevPath
->NetworkProtocol
== 0) ? L
"TCP" : L
"reserved");
1444 Converts a VLAN device path structure to its string representative.
1446 @param Str The string representative of input device.
1447 @param DevPath The input device path structure.
1448 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1449 of the display node is used, where applicable. If DisplayOnly
1450 is FALSE, then the longer text representation of the display node
1452 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1453 representation for a device node can be used, where applicable.
1458 IN OUT POOL_PRINT
*Str
,
1460 IN BOOLEAN DisplayOnly
,
1461 IN BOOLEAN AllowShortcuts
1464 VLAN_DEVICE_PATH
*Vlan
;
1467 UefiDevicePathLibCatPrint (Str
, L
"Vlan(%d)", Vlan
->VlanId
);
1471 Converts a Hard drive device path structure to its string representative.
1473 @param Str The string representative of input device.
1474 @param DevPath The input device path structure.
1475 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1476 of the display node is used, where applicable. If DisplayOnly
1477 is FALSE, then the longer text representation of the display node
1479 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1480 representation for a device node can be used, where applicable.
1484 DevPathToTextHardDrive (
1485 IN OUT POOL_PRINT
*Str
,
1487 IN BOOLEAN DisplayOnly
,
1488 IN BOOLEAN AllowShortcuts
1491 HARDDRIVE_DEVICE_PATH
*Hd
;
1494 switch (Hd
->SignatureType
) {
1495 case SIGNATURE_TYPE_MBR
:
1496 UefiDevicePathLibCatPrint (
1498 L
"HD(%d,%s,0x%08x,",
1499 Hd
->PartitionNumber
,
1501 *((UINT32
*) (&(Hd
->Signature
[0])))
1505 case SIGNATURE_TYPE_GUID
:
1506 UefiDevicePathLibCatPrint (
1509 Hd
->PartitionNumber
,
1511 (EFI_GUID
*) &(Hd
->Signature
[0])
1516 UefiDevicePathLibCatPrint (
1519 Hd
->PartitionNumber
,
1525 UefiDevicePathLibCatPrint (Str
, L
"0x%lx,0x%lx)", Hd
->PartitionStart
, Hd
->PartitionSize
);
1529 Converts a CDROM device path structure to its string representative.
1531 @param Str The string representative of input device.
1532 @param DevPath The input device path structure.
1533 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1534 of the display node is used, where applicable. If DisplayOnly
1535 is FALSE, then the longer text representation of the display node
1537 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1538 representation for a device node can be used, where applicable.
1542 DevPathToTextCDROM (
1543 IN OUT POOL_PRINT
*Str
,
1545 IN BOOLEAN DisplayOnly
,
1546 IN BOOLEAN AllowShortcuts
1549 CDROM_DEVICE_PATH
*Cd
;
1553 UefiDevicePathLibCatPrint (Str
, L
"CDROM(0x%x)", Cd
->BootEntry
);
1557 UefiDevicePathLibCatPrint (Str
, L
"CDROM(0x%x,0x%lx,0x%lx)", Cd
->BootEntry
, Cd
->PartitionStart
, Cd
->PartitionSize
);
1561 Converts a File device path structure to its string representative.
1563 @param Str The string representative of input device.
1564 @param DevPath The input device path structure.
1565 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1566 of the display node is used, where applicable. If DisplayOnly
1567 is FALSE, then the longer text representation of the display node
1569 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1570 representation for a device node can be used, where applicable.
1574 DevPathToTextFilePath (
1575 IN OUT POOL_PRINT
*Str
,
1577 IN BOOLEAN DisplayOnly
,
1578 IN BOOLEAN AllowShortcuts
1581 FILEPATH_DEVICE_PATH
*Fp
;
1584 UefiDevicePathLibCatPrint (Str
, L
"%s", Fp
->PathName
);
1588 Converts a Media protocol device path structure to its string representative.
1590 @param Str The string representative of input device.
1591 @param DevPath The input device path structure.
1592 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1593 of the display node is used, where applicable. If DisplayOnly
1594 is FALSE, then the longer text representation of the display node
1596 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1597 representation for a device node can be used, where applicable.
1601 DevPathToTextMediaProtocol (
1602 IN OUT POOL_PRINT
*Str
,
1604 IN BOOLEAN DisplayOnly
,
1605 IN BOOLEAN AllowShortcuts
1608 MEDIA_PROTOCOL_DEVICE_PATH
*MediaProt
;
1610 MediaProt
= DevPath
;
1611 UefiDevicePathLibCatPrint (Str
, L
"Media(%g)", &MediaProt
->Protocol
);
1615 Converts a Firmware Volume device path structure to its string representative.
1617 @param Str The string representative of input device.
1618 @param DevPath The input device path structure.
1619 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1620 of the display node is used, where applicable. If DisplayOnly
1621 is FALSE, then the longer text representation of the display node
1623 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1624 representation for a device node can be used, where applicable.
1629 IN OUT POOL_PRINT
*Str
,
1631 IN BOOLEAN DisplayOnly
,
1632 IN BOOLEAN AllowShortcuts
1635 MEDIA_FW_VOL_DEVICE_PATH
*Fv
;
1638 UefiDevicePathLibCatPrint (Str
, L
"Fv(%g)", &Fv
->FvName
);
1642 Converts a Firmware Volume File device path structure to its string representative.
1644 @param Str The string representative of input device.
1645 @param DevPath The input device path structure.
1646 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1647 of the display node is used, where applicable. If DisplayOnly
1648 is FALSE, then the longer text representation of the display node
1650 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1651 representation for a device node can be used, where applicable.
1655 DevPathToTextFvFile (
1656 IN OUT POOL_PRINT
*Str
,
1658 IN BOOLEAN DisplayOnly
,
1659 IN BOOLEAN AllowShortcuts
1662 MEDIA_FW_VOL_FILEPATH_DEVICE_PATH
*FvFile
;
1665 UefiDevicePathLibCatPrint (Str
, L
"FvFile(%g)", &FvFile
->FvFileName
);
1669 Converts a Relative Offset device path structure to its string representative.
1671 @param Str The string representative of input device.
1672 @param DevPath The input device path structure.
1673 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1674 of the display node is used, where applicable. If DisplayOnly
1675 is FALSE, then the longer text representation of the display node
1677 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1678 representation for a device node can be used, where applicable.
1682 DevPathRelativeOffsetRange (
1683 IN OUT POOL_PRINT
*Str
,
1685 IN BOOLEAN DisplayOnly
,
1686 IN BOOLEAN AllowShortcuts
1689 MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH
*Offset
;
1692 UefiDevicePathLibCatPrint (
1694 L
"Offset(0x%lx,0x%lx)",
1695 Offset
->StartingOffset
,
1696 Offset
->EndingOffset
1701 Converts a BIOS Boot Specification device path structure to its string representative.
1703 @param Str The string representative of input device.
1704 @param DevPath The input device path structure.
1705 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1706 of the display node is used, where applicable. If DisplayOnly
1707 is FALSE, then the longer text representation of the display node
1709 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1710 representation for a device node can be used, where applicable.
1715 IN OUT POOL_PRINT
*Str
,
1717 IN BOOLEAN DisplayOnly
,
1718 IN BOOLEAN AllowShortcuts
1721 BBS_BBS_DEVICE_PATH
*Bbs
;
1725 switch (Bbs
->DeviceType
) {
1726 case BBS_TYPE_FLOPPY
:
1730 case BBS_TYPE_HARDDRIVE
:
1734 case BBS_TYPE_CDROM
:
1738 case BBS_TYPE_PCMCIA
:
1746 case BBS_TYPE_EMBEDDED_NETWORK
:
1756 UefiDevicePathLibCatPrint (Str
, L
"BBS(%s,%a", Type
, Bbs
->String
);
1758 UefiDevicePathLibCatPrint (Str
, L
"BBS(0x%x,%a", Bbs
->DeviceType
, Bbs
->String
);
1762 UefiDevicePathLibCatPrint (Str
, L
")");
1766 UefiDevicePathLibCatPrint (Str
, L
",0x%x)", Bbs
->StatusFlag
);
1770 Converts an End-of-Device-Path structure to its string representative.
1772 @param Str The string representative of input device.
1773 @param DevPath The input device path structure.
1774 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1775 of the display node is used, where applicable. If DisplayOnly
1776 is FALSE, then the longer text representation of the display node
1778 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1779 representation for a device node can be used, where applicable.
1783 DevPathToTextEndInstance (
1784 IN OUT POOL_PRINT
*Str
,
1786 IN BOOLEAN DisplayOnly
,
1787 IN BOOLEAN AllowShortcuts
1790 UefiDevicePathLibCatPrint (Str
, L
",");
1793 GLOBAL_REMOVE_IF_UNREFERENCED
const DEVICE_PATH_TO_TEXT_GENERIC_TABLE mUefiDevicePathLibToTextTableGeneric
[] = {
1794 {HARDWARE_DEVICE_PATH
, L
"HardwarePath" },
1795 {ACPI_DEVICE_PATH
, L
"AcpiPath" },
1796 {MESSAGING_DEVICE_PATH
, L
"Msg" },
1797 {MEDIA_DEVICE_PATH
, L
"MediaPath" },
1798 {BBS_DEVICE_PATH
, L
"BbsPath" },
1803 Converts an unknown device path structure to its string representative.
1805 @param Str The string representative of input device.
1806 @param DevPath The input device path structure.
1807 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1808 of the display node is used, where applicable. If DisplayOnly
1809 is FALSE, then the longer text representation of the display node
1811 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1812 representation for a device node can be used, where applicable.
1816 DevPathToTextNodeGeneric (
1817 IN OUT POOL_PRINT
*Str
,
1819 IN BOOLEAN DisplayOnly
,
1820 IN BOOLEAN AllowShortcuts
1823 EFI_DEVICE_PATH_PROTOCOL
*Node
;
1828 for (Index
= 0; mUefiDevicePathLibToTextTableGeneric
[Index
].Text
!= NULL
; Index
++) {
1829 if (DevicePathType (Node
) == mUefiDevicePathLibToTextTableGeneric
[Index
].Type
) {
1834 if (mUefiDevicePathLibToTextTableGeneric
[Index
].Text
== NULL
) {
1836 // It's a node whose type cannot be recognized
1838 UefiDevicePathLibCatPrint (Str
, L
"Path(%d,%d", DevicePathType (Node
), DevicePathSubType (Node
));
1841 // It's a node whose type can be recognized
1843 UefiDevicePathLibCatPrint (Str
, L
"%s(%d", mUefiDevicePathLibToTextTableGeneric
[Index
].Text
, DevicePathSubType (Node
));
1846 Index
= sizeof (EFI_DEVICE_PATH_PROTOCOL
);
1847 if (Index
< DevicePathNodeLength (Node
)) {
1848 UefiDevicePathLibCatPrint (Str
, L
",");
1849 for (; Index
< DevicePathNodeLength (Node
); Index
++) {
1850 UefiDevicePathLibCatPrint (Str
, L
"%02x", ((UINT8
*) Node
)[Index
]);
1854 UefiDevicePathLibCatPrint (Str
, L
")");
1857 GLOBAL_REMOVE_IF_UNREFERENCED
const DEVICE_PATH_TO_TEXT_TABLE mUefiDevicePathLibToTextTable
[] = {
1858 {HARDWARE_DEVICE_PATH
, HW_PCI_DP
, DevPathToTextPci
},
1859 {HARDWARE_DEVICE_PATH
, HW_PCCARD_DP
, DevPathToTextPccard
},
1860 {HARDWARE_DEVICE_PATH
, HW_MEMMAP_DP
, DevPathToTextMemMap
},
1861 {HARDWARE_DEVICE_PATH
, HW_VENDOR_DP
, DevPathToTextVendor
},
1862 {HARDWARE_DEVICE_PATH
, HW_CONTROLLER_DP
, DevPathToTextController
},
1863 {ACPI_DEVICE_PATH
, ACPI_DP
, DevPathToTextAcpi
},
1864 {ACPI_DEVICE_PATH
, ACPI_EXTENDED_DP
, DevPathToTextAcpiEx
},
1865 {ACPI_DEVICE_PATH
, ACPI_ADR_DP
, DevPathToTextAcpiAdr
},
1866 {MESSAGING_DEVICE_PATH
, MSG_ATAPI_DP
, DevPathToTextAtapi
},
1867 {MESSAGING_DEVICE_PATH
, MSG_SCSI_DP
, DevPathToTextScsi
},
1868 {MESSAGING_DEVICE_PATH
, MSG_FIBRECHANNEL_DP
, DevPathToTextFibre
},
1869 {MESSAGING_DEVICE_PATH
, MSG_FIBRECHANNELEX_DP
, DevPathToTextFibreEx
},
1870 {MESSAGING_DEVICE_PATH
, MSG_SASEX_DP
, DevPathToTextSasEx
},
1871 {MESSAGING_DEVICE_PATH
, MSG_NVME_NAMESPACE_DP
, DevPathToTextNVMe
},
1872 {MESSAGING_DEVICE_PATH
, MSG_1394_DP
, DevPathToText1394
},
1873 {MESSAGING_DEVICE_PATH
, MSG_USB_DP
, DevPathToTextUsb
},
1874 {MESSAGING_DEVICE_PATH
, MSG_USB_WWID_DP
, DevPathToTextUsbWWID
},
1875 {MESSAGING_DEVICE_PATH
, MSG_DEVICE_LOGICAL_UNIT_DP
, DevPathToTextLogicalUnit
},
1876 {MESSAGING_DEVICE_PATH
, MSG_USB_CLASS_DP
, DevPathToTextUsbClass
},
1877 {MESSAGING_DEVICE_PATH
, MSG_SATA_DP
, DevPathToTextSata
},
1878 {MESSAGING_DEVICE_PATH
, MSG_I2O_DP
, DevPathToTextI2O
},
1879 {MESSAGING_DEVICE_PATH
, MSG_MAC_ADDR_DP
, DevPathToTextMacAddr
},
1880 {MESSAGING_DEVICE_PATH
, MSG_IPv4_DP
, DevPathToTextIPv4
},
1881 {MESSAGING_DEVICE_PATH
, MSG_IPv6_DP
, DevPathToTextIPv6
},
1882 {MESSAGING_DEVICE_PATH
, MSG_INFINIBAND_DP
, DevPathToTextInfiniBand
},
1883 {MESSAGING_DEVICE_PATH
, MSG_UART_DP
, DevPathToTextUart
},
1884 {MESSAGING_DEVICE_PATH
, MSG_VENDOR_DP
, DevPathToTextVendor
},
1885 {MESSAGING_DEVICE_PATH
, MSG_ISCSI_DP
, DevPathToTextiSCSI
},
1886 {MESSAGING_DEVICE_PATH
, MSG_VLAN_DP
, DevPathToTextVlan
},
1887 {MEDIA_DEVICE_PATH
, MEDIA_HARDDRIVE_DP
, DevPathToTextHardDrive
},
1888 {MEDIA_DEVICE_PATH
, MEDIA_CDROM_DP
, DevPathToTextCDROM
},
1889 {MEDIA_DEVICE_PATH
, MEDIA_VENDOR_DP
, DevPathToTextVendor
},
1890 {MEDIA_DEVICE_PATH
, MEDIA_PROTOCOL_DP
, DevPathToTextMediaProtocol
},
1891 {MEDIA_DEVICE_PATH
, MEDIA_FILEPATH_DP
, DevPathToTextFilePath
},
1892 {MEDIA_DEVICE_PATH
, MEDIA_PIWG_FW_VOL_DP
, DevPathToTextFv
},
1893 {MEDIA_DEVICE_PATH
, MEDIA_PIWG_FW_FILE_DP
, DevPathToTextFvFile
},
1894 {MEDIA_DEVICE_PATH
, MEDIA_RELATIVE_OFFSET_RANGE_DP
, DevPathRelativeOffsetRange
},
1895 {BBS_DEVICE_PATH
, BBS_BBS_DP
, DevPathToTextBBS
},
1896 {END_DEVICE_PATH_TYPE
, END_INSTANCE_DEVICE_PATH_SUBTYPE
, DevPathToTextEndInstance
},
1901 Converts a device node to its string representation.
1903 @param DeviceNode A Pointer to the device node to be converted.
1904 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1905 of the display node is used, where applicable. If DisplayOnly
1906 is FALSE, then the longer text representation of the display node
1908 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1909 representation for a device node can be used, where applicable.
1911 @return A pointer to the allocated text representation of the device node or NULL if DeviceNode
1912 is NULL or there was insufficient memory.
1917 UefiDevicePathLibConvertDeviceNodeToText (
1918 IN CONST EFI_DEVICE_PATH_PROTOCOL
*DeviceNode
,
1919 IN BOOLEAN DisplayOnly
,
1920 IN BOOLEAN AllowShortcuts
1925 DEVICE_PATH_TO_TEXT ToText
;
1927 if (DeviceNode
== NULL
) {
1931 ZeroMem (&Str
, sizeof (Str
));
1934 // Process the device path node
1935 // If not found, use a generic function
1937 ToText
= DevPathToTextNodeGeneric
;
1938 for (Index
= 0; mUefiDevicePathLibToTextTable
[Index
].Function
!= NULL
; Index
++) {
1939 if (DevicePathType (DeviceNode
) == mUefiDevicePathLibToTextTable
[Index
].Type
&&
1940 DevicePathSubType (DeviceNode
) == mUefiDevicePathLibToTextTable
[Index
].SubType
1942 ToText
= mUefiDevicePathLibToTextTable
[Index
].Function
;
1950 ToText (&Str
, (VOID
*) DeviceNode
, DisplayOnly
, AllowShortcuts
);
1952 ASSERT (Str
.Str
!= NULL
);
1957 Converts a device path to its text representation.
1959 @param DevicePath A Pointer to the device to be converted.
1960 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1961 of the display node is used, where applicable. If DisplayOnly
1962 is FALSE, then the longer text representation of the display node
1964 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1965 representation for a device node can be used, where applicable.
1967 @return A pointer to the allocated text representation of the device path or
1968 NULL if DeviceNode is NULL or there was insufficient memory.
1973 UefiDevicePathLibConvertDevicePathToText (
1974 IN CONST EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
1975 IN BOOLEAN DisplayOnly
,
1976 IN BOOLEAN AllowShortcuts
1980 EFI_DEVICE_PATH_PROTOCOL
*Node
;
1981 EFI_DEVICE_PATH_PROTOCOL
*AlignedNode
;
1983 DEVICE_PATH_TO_TEXT ToText
;
1985 if (DevicePath
== NULL
) {
1989 ZeroMem (&Str
, sizeof (Str
));
1992 // Process each device path node
1994 Node
= (EFI_DEVICE_PATH_PROTOCOL
*) DevicePath
;
1995 while (!IsDevicePathEnd (Node
)) {
1997 // Find the handler to dump this device path node
1998 // If not found, use a generic function
2000 ToText
= DevPathToTextNodeGeneric
;
2001 for (Index
= 0; mUefiDevicePathLibToTextTable
[Index
].Function
!= NULL
; Index
+= 1) {
2003 if (DevicePathType (Node
) == mUefiDevicePathLibToTextTable
[Index
].Type
&&
2004 DevicePathSubType (Node
) == mUefiDevicePathLibToTextTable
[Index
].SubType
2006 ToText
= mUefiDevicePathLibToTextTable
[Index
].Function
;
2011 // Put a path separator in if needed
2013 if ((Str
.Count
!= 0) && (ToText
!= DevPathToTextEndInstance
)) {
2014 if (Str
.Str
[Str
.Count
] != L
',') {
2015 UefiDevicePathLibCatPrint (&Str
, L
"/");
2019 AlignedNode
= AllocateCopyPool (DevicePathNodeLength (Node
), Node
);
2021 // Print this node of the device path
2023 ToText (&Str
, AlignedNode
, DisplayOnly
, AllowShortcuts
);
2024 FreePool (AlignedNode
);
2027 // Next device path node
2029 Node
= NextDevicePathNode (Node
);
2032 if (Str
.Str
== NULL
) {
2033 return AllocateZeroPool (sizeof (CHAR16
));