2 DevicePathToText protocol as defined in the UEFI 2.0 specification.
4 Copyright (c) 2006 - 2008, Intel Corporation. <BR>
5 All rights reserved. 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 "DevicePath.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 IN OUT POOL_PRINT
*Str
,
42 AppendStr
= AllocateZeroPool (0x1000);
43 if (AppendStr
== NULL
) {
48 UnicodeVSPrint (AppendStr
, 0x1000, Fmt
, Args
);
50 if (NULL
== Str
->Str
) {
51 Size
= StrSize (AppendStr
);
52 Str
->Str
= AllocateZeroPool (Size
);
53 ASSERT (Str
->Str
!= NULL
);
55 Size
= StrSize (AppendStr
) - sizeof (UINT16
);
56 Size
= Size
+ StrSize (Str
->Str
);
57 Str
->Str
= ReallocatePool (
62 ASSERT (Str
->Str
!= NULL
);
65 Str
->MaxLen
= MAX_CHAR
* sizeof (UINT16
);
66 if (Size
< Str
->MaxLen
) {
67 StrCat (Str
->Str
, AppendStr
);
68 Str
->Len
= Size
- sizeof (UINT16
);
76 Converts a PCI device path structure to its string representative.
78 @param Str The string representative of input device.
79 @param DevPath The input device path structure.
80 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
81 of the display node is used, where applicable. If DisplayOnly
82 is FALSE, then the longer text representation of the display node
84 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
85 representation for a device node can be used, where applicable.
90 IN OUT POOL_PRINT
*Str
,
92 IN BOOLEAN DisplayOnly
,
93 IN BOOLEAN AllowShortcuts
99 CatPrint (Str
, L
"Pci(0x%x,0x%x)", Pci
->Device
, Pci
->Function
);
103 Converts a PC Card device path structure to its string representative.
105 @param Str The string representative of input device.
106 @param DevPath The input device path structure.
107 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
108 of the display node is used, where applicable. If DisplayOnly
109 is FALSE, then the longer text representation of the display node
111 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
112 representation for a device node can be used, where applicable.
116 DevPathToTextPccard (
117 IN OUT POOL_PRINT
*Str
,
119 IN BOOLEAN DisplayOnly
,
120 IN BOOLEAN AllowShortcuts
123 PCCARD_DEVICE_PATH
*Pccard
;
126 CatPrint (Str
, L
"PcCard(0x%x)", Pccard
->FunctionNumber
);
130 Converts a Memory Map device path structure to its string representative.
132 @param Str The string representative of input device.
133 @param DevPath The input device path structure.
134 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
135 of the display node is used, where applicable. If DisplayOnly
136 is FALSE, then the longer text representation of the display node
138 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
139 representation for a device node can be used, where applicable.
143 DevPathToTextMemMap (
144 IN OUT POOL_PRINT
*Str
,
146 IN BOOLEAN DisplayOnly
,
147 IN BOOLEAN AllowShortcuts
150 MEMMAP_DEVICE_PATH
*MemMap
;
155 L
"MemoryMapped(0x%x,0x%lx,0x%lx)",
157 MemMap
->StartingAddress
,
158 MemMap
->EndingAddress
163 Converts a Vendor device path structure to its string representative.
165 @param Str The string representative of input device.
166 @param DevPath The input device path structure.
167 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
168 of the display node is used, where applicable. If DisplayOnly
169 is FALSE, then the longer text representation of the display node
171 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
172 representation for a device node can be used, where applicable.
176 DevPathToTextVendor (
177 IN OUT POOL_PRINT
*Str
,
179 IN BOOLEAN DisplayOnly
,
180 IN BOOLEAN AllowShortcuts
183 VENDOR_DEVICE_PATH
*Vendor
;
187 UINT32 FlowControlMap
;
190 Vendor
= (VENDOR_DEVICE_PATH
*) DevPath
;
191 switch (DevicePathType (&Vendor
->Header
)) {
192 case HARDWARE_DEVICE_PATH
:
196 case MESSAGING_DEVICE_PATH
:
198 if (AllowShortcuts
) {
199 if (CompareGuid (&Vendor
->Guid
, &gEfiPcAnsiGuid
)) {
200 CatPrint (Str
, L
"VenPcAnsi()");
202 } else if (CompareGuid (&Vendor
->Guid
, &gEfiVT100Guid
)) {
203 CatPrint (Str
, L
"VenVt100()");
205 } else if (CompareGuid (&Vendor
->Guid
, &gEfiVT100PlusGuid
)) {
206 CatPrint (Str
, L
"VenVt100Plus()");
208 } else if (CompareGuid (&Vendor
->Guid
, &gEfiVTUTF8Guid
)) {
209 CatPrint (Str
, L
"VenUft8()");
211 } else if (CompareGuid (&Vendor
->Guid
, &gEfiUartDevicePathGuid
)) {
212 FlowControlMap
= (((UART_FLOW_CONTROL_DEVICE_PATH
*) Vendor
)->FlowControlMap
);
213 switch (FlowControlMap
& 0x00000003) {
215 CatPrint (Str
, L
"UartFlowCtrl(%s)", L
"None");
219 CatPrint (Str
, L
"UartFlowCtrl(%s)", L
"Hardware");
223 CatPrint (Str
, L
"UartFlowCtrl(%s)", L
"XonXoff");
231 } else if (CompareGuid (&Vendor
->Guid
, &gEfiSasDevicePathGuid
)) {
234 L
"SAS(0x%lx,0x%lx,0x%x,",
235 ((SAS_DEVICE_PATH
*) Vendor
)->SasAddress
,
236 ((SAS_DEVICE_PATH
*) Vendor
)->Lun
,
237 ((SAS_DEVICE_PATH
*) Vendor
)->RelativeTargetPort
239 Info
= (((SAS_DEVICE_PATH
*) Vendor
)->DeviceTopology
);
240 if ((Info
& 0x0f) == 0) {
241 CatPrint (Str
, L
"NoTopology,0,0,0,");
242 } else if (((Info
& 0x0f) == 1) || ((Info
& 0x0f) == 2)) {
246 ((Info
& (0x1 << 4)) != 0) ? L
"SATA" : L
"SAS",
247 ((Info
& (0x1 << 5)) != 0) ? L
"External" : L
"Internal",
248 ((Info
& (0x1 << 6)) != 0) ? L
"Expanded" : L
"Direct"
250 if ((Info
& 0x0f) == 1) {
251 CatPrint (Str
, L
"0,");
253 CatPrint (Str
, L
"0x%x,", (Info
>> 8) & 0xff);
256 CatPrint (Str
, L
"0,0,0,0,");
259 CatPrint (Str
, L
"0x%x)", ((SAS_DEVICE_PATH
*) Vendor
)->Reserved
);
261 } else if (CompareGuid (&Vendor
->Guid
, &gEfiDebugPortProtocolGuid
)) {
262 CatPrint (Str
, L
"DebugPort()");
268 case MEDIA_DEVICE_PATH
:
277 DataLength
= DevicePathNodeLength (&Vendor
->Header
) - sizeof (VENDOR_DEVICE_PATH
);
278 CatPrint (Str
, L
"Ven%s(%g", Type
, &Vendor
->Guid
);
279 if (DataLength
!= 0) {
280 CatPrint (Str
, L
",");
281 for (Index
= 0; Index
< DataLength
; Index
++) {
282 CatPrint (Str
, L
"%02x", ((VENDOR_DEVICE_PATH_WITH_DATA
*) Vendor
)->VendorDefinedData
[Index
]);
286 CatPrint (Str
, L
")");
290 Converts a Controller device path structure to its string representative.
292 @param Str The string representative of input device.
293 @param DevPath The input device path structure.
294 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
295 of the display node is used, where applicable. If DisplayOnly
296 is FALSE, then the longer text representation of the display node
298 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
299 representation for a device node can be used, where applicable.
303 DevPathToTextController (
304 IN OUT POOL_PRINT
*Str
,
306 IN BOOLEAN DisplayOnly
,
307 IN BOOLEAN AllowShortcuts
310 CONTROLLER_DEVICE_PATH
*Controller
;
312 Controller
= DevPath
;
316 Controller
->ControllerNumber
321 Converts a ACPI device path structure to its string representative.
323 @param Str The string representative of input device.
324 @param DevPath The input device path structure.
325 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
326 of the display node is used, where applicable. If DisplayOnly
327 is FALSE, then the longer text representation of the display node
329 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
330 representation for a device node can be used, where applicable.
335 IN OUT POOL_PRINT
*Str
,
337 IN BOOLEAN DisplayOnly
,
338 IN BOOLEAN AllowShortcuts
341 ACPI_HID_DEVICE_PATH
*Acpi
;
344 if ((Acpi
->HID
& PNP_EISA_ID_MASK
) == PNP_EISA_ID_CONST
) {
345 switch (EISA_ID_TO_NUM (Acpi
->HID
)) {
347 CatPrint (Str
, L
"PciRoot(0x%x)", Acpi
->UID
);
351 CatPrint (Str
, L
"Floppy(0x%x)", Acpi
->UID
);
355 CatPrint (Str
, L
"Keyboard(0x%x)", Acpi
->UID
);
359 CatPrint (Str
, L
"Serial(0x%x)", Acpi
->UID
);
363 CatPrint (Str
, L
"ParallelPort(0x%x)", Acpi
->UID
);
367 CatPrint (Str
, L
"Acpi(PNP%04x,0x%x)", EISA_ID_TO_NUM (Acpi
->HID
), Acpi
->UID
);
371 CatPrint (Str
, L
"Acpi(0x%08x,0x%x)", Acpi
->HID
, Acpi
->UID
);
376 Converts EISA identification to string.
378 @param EisaId The input EISA identification.
379 @param Text A pointer to the output string.
391 //UnicodeSPrint ("%X", 0x0a03) => "0000000000000A03"
393 UnicodeSPrint (PnpIdStr
, 17 * 2, L
"%16X", EisaId
>> 16);
397 sizeof (CHAR16
) + sizeof (CHAR16
) + sizeof (CHAR16
) + sizeof (PnpIdStr
),
399 '@' + ((EisaId
>> 10) & 0x1f),
400 '@' + ((EisaId
>> 5) & 0x1f),
401 '@' + ((EisaId
>> 0) & 0x1f),
407 Converts a ACPI extended HID device path structure to its string representative.
409 @param Str The string representative of input device.
410 @param DevPath The input device path structure.
411 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
412 of the display node is used, where applicable. If DisplayOnly
413 is FALSE, then the longer text representation of the display node
415 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
416 representation for a device node can be used, where applicable.
420 DevPathToTextAcpiEx (
421 IN OUT POOL_PRINT
*Str
,
423 IN BOOLEAN DisplayOnly
,
424 IN BOOLEAN AllowShortcuts
427 ACPI_EXTENDED_HID_DEVICE_PATH
*AcpiEx
;
435 HIDStr
= (CHAR8
*) (((UINT8
*) AcpiEx
) + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH
));
436 UIDStr
= HIDStr
+ AsciiStrLen (HIDStr
) + 1;
437 CIDStr
= UIDStr
+ AsciiStrLen (UIDStr
) + 1;
439 EisaIdToText (AcpiEx
->HID
, HIDText
);
440 EisaIdToText (AcpiEx
->CID
, CIDText
);
442 if ((*HIDStr
== '\0') && (*CIDStr
== '\0') && (AcpiEx
->UID
== 0)) {
448 L
"AcpiExp(%s,%s,%a)",
454 if (AllowShortcuts
) {
458 if (AcpiEx
->HID
== 0) {
459 CatPrint (Str
, L
"AcpiEx(%a,", HIDStr
);
461 CatPrint (Str
, L
"AcpiEx(%s,", HIDText
);
464 if (AcpiEx
->UID
== 0) {
465 CatPrint (Str
, L
"%a,", UIDStr
);
467 CatPrint (Str
, L
"0x%x,", AcpiEx
->UID
);
470 if (AcpiEx
->CID
== 0) {
471 CatPrint (Str
, L
"%a)", CIDStr
);
473 CatPrint (Str
, L
"%s)", CIDText
);
478 L
"AcpiEx(%s,%s,0x%x,%a,%a,%a)",
491 Converts a ACPI address device path structure to its string representative.
493 @param Str The string representative of input device.
494 @param DevPath The input device path structure.
495 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
496 of the display node is used, where applicable. If DisplayOnly
497 is FALSE, then the longer text representation of the display node
499 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
500 representation for a device node can be used, where applicable.
504 DevPathToTextAcpiAdr (
505 IN OUT POOL_PRINT
*Str
,
507 IN BOOLEAN DisplayOnly
,
508 IN BOOLEAN AllowShortcuts
511 ACPI_ADR_DEVICE_PATH
*AcpiAdr
;
514 UINT16 AdditionalAdrCount
;
517 Length
= (UINT16
) DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL
*) AcpiAdr
);
518 AdditionalAdrCount
= (UINT16
) ((Length
- 8) / 4);
520 CatPrint (Str
, L
"AcpiAdr(0x%x", AcpiAdr
->ADR
);
521 for (Index
= 0; Index
< AdditionalAdrCount
; Index
++) {
522 CatPrint (Str
, L
",0x%x", *(UINT32
*) ((UINT8
*) AcpiAdr
+ 8 + Index
* 4));
524 CatPrint (Str
, L
")");
528 Converts a ATAPI device path structure to its string representative.
530 @param Str The string representative of input device.
531 @param DevPath The input device path structure.
532 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
533 of the display node is used, where applicable. If DisplayOnly
534 is FALSE, then the longer text representation of the display node
536 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
537 representation for a device node can be used, where applicable.
542 IN OUT POOL_PRINT
*Str
,
544 IN BOOLEAN DisplayOnly
,
545 IN BOOLEAN AllowShortcuts
548 ATAPI_DEVICE_PATH
*Atapi
;
553 CatPrint (Str
, L
"Ata(0x%x)", Atapi
->Lun
);
558 Atapi
->PrimarySecondary
? L
"Secondary" : L
"Primary",
559 Atapi
->SlaveMaster
? L
"Slave" : L
"Master",
566 Converts a SCSI device path structure to its string representative.
568 @param Str The string representative of input device.
569 @param DevPath The input device path structure.
570 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
571 of the display node is used, where applicable. If DisplayOnly
572 is FALSE, then the longer text representation of the display node
574 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
575 representation for a device node can be used, where applicable.
580 IN OUT POOL_PRINT
*Str
,
582 IN BOOLEAN DisplayOnly
,
583 IN BOOLEAN AllowShortcuts
586 SCSI_DEVICE_PATH
*Scsi
;
589 CatPrint (Str
, L
"Scsi(0x%x,0x%x)", Scsi
->Pun
, Scsi
->Lun
);
593 Converts a Fibre device path structure to its string representative.
595 @param Str The string representative of input device.
596 @param DevPath The input device path structure.
597 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
598 of the display node is used, where applicable. If DisplayOnly
599 is FALSE, then the longer text representation of the display node
601 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
602 representation for a device node can be used, where applicable.
607 IN OUT POOL_PRINT
*Str
,
609 IN BOOLEAN DisplayOnly
,
610 IN BOOLEAN AllowShortcuts
613 FIBRECHANNEL_DEVICE_PATH
*Fibre
;
616 CatPrint (Str
, L
"Fibre(0x%lx,0x%lx)", Fibre
->WWN
, Fibre
->Lun
);
620 Converts a 1394 device path structure to its string representative.
622 @param Str The string representative of input device.
623 @param DevPath The input device path structure.
624 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
625 of the display node is used, where applicable. If DisplayOnly
626 is FALSE, then the longer text representation of the display node
628 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
629 representation for a device node can be used, where applicable.
634 IN OUT POOL_PRINT
*Str
,
636 IN BOOLEAN DisplayOnly
,
637 IN BOOLEAN AllowShortcuts
640 F1394_DEVICE_PATH
*F1394DevPath
;
642 F1394DevPath
= DevPath
;
644 // Guid has format of IEEE-EUI64
646 CatPrint (Str
, L
"I1394(%016lx)", F1394DevPath
->Guid
);
650 Converts a USB device path structure to its string representative.
652 @param Str The string representative of input device.
653 @param DevPath The input device path structure.
654 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
655 of the display node is used, where applicable. If DisplayOnly
656 is FALSE, then the longer text representation of the display node
658 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
659 representation for a device node can be used, where applicable.
664 IN OUT POOL_PRINT
*Str
,
666 IN BOOLEAN DisplayOnly
,
667 IN BOOLEAN AllowShortcuts
670 USB_DEVICE_PATH
*Usb
;
673 CatPrint (Str
, L
"USB(0x%x,0x%x)", Usb
->ParentPortNumber
, Usb
->InterfaceNumber
);
677 Converts a USB WWID device path structure to its string representative.
679 @param Str The string representative of input device.
680 @param DevPath The input device path structure.
681 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
682 of the display node is used, where applicable. If DisplayOnly
683 is FALSE, then the longer text representation of the display node
685 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
686 representation for a device node can be used, where applicable.
690 DevPathToTextUsbWWID (
691 IN OUT POOL_PRINT
*Str
,
693 IN BOOLEAN DisplayOnly
,
694 IN BOOLEAN AllowShortcuts
697 USB_WWID_DEVICE_PATH
*UsbWWId
;
698 CHAR16
*SerialNumberStr
;
704 SerialNumberStr
= (CHAR16
*) ((UINT8
*) UsbWWId
+ sizeof (USB_WWID_DEVICE_PATH
));
705 Length
= (UINT16
) ((DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL
*) UsbWWId
) - sizeof (USB_WWID_DEVICE_PATH
)) / sizeof (CHAR16
));
706 if (SerialNumberStr
[Length
- 1] != 0) {
708 // In case no NULL terminator in SerialNumber, create a new one with NULL terminator
710 NewStr
= AllocateCopyPool ((Length
+ 1) * sizeof (CHAR16
), SerialNumberStr
);
712 SerialNumberStr
= NewStr
;
717 L
"UsbWwid(0x%x,0x%x,0x%x,\"%s\")",
720 UsbWWId
->InterfaceNumber
,
726 Converts a Logic Unit device path structure to its string representative.
728 @param Str The string representative of input device.
729 @param DevPath The input device path structure.
730 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
731 of the display node is used, where applicable. If DisplayOnly
732 is FALSE, then the longer text representation of the display node
734 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
735 representation for a device node can be used, where applicable.
739 DevPathToTextLogicalUnit (
740 IN OUT POOL_PRINT
*Str
,
742 IN BOOLEAN DisplayOnly
,
743 IN BOOLEAN AllowShortcuts
746 DEVICE_LOGICAL_UNIT_DEVICE_PATH
*LogicalUnit
;
748 LogicalUnit
= DevPath
;
749 CatPrint (Str
, L
"Unit(0x%x)", LogicalUnit
->Lun
);
753 Converts a USB class device path structure to its string representative.
755 @param Str The string representative of input device.
756 @param DevPath The input device path structure.
757 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
758 of the display node is used, where applicable. If DisplayOnly
759 is FALSE, then the longer text representation of the display node
761 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
762 representation for a device node can be used, where applicable.
766 DevPathToTextUsbClass (
767 IN OUT POOL_PRINT
*Str
,
769 IN BOOLEAN DisplayOnly
,
770 IN BOOLEAN AllowShortcuts
773 USB_CLASS_DEVICE_PATH
*UsbClass
;
774 BOOLEAN IsKnownSubClass
;
779 IsKnownSubClass
= TRUE
;
780 switch (UsbClass
->DeviceClass
) {
781 case USB_CLASS_AUDIO
:
782 CatPrint (Str
, L
"UsbAudio");
785 case USB_CLASS_CDCCONTROL
:
786 CatPrint (Str
, L
"UsbCDCControl");
790 CatPrint (Str
, L
"UsbHID");
793 case USB_CLASS_IMAGE
:
794 CatPrint (Str
, L
"UsbImage");
797 case USB_CLASS_PRINTER
:
798 CatPrint (Str
, L
"UsbPrinter");
801 case USB_CLASS_MASS_STORAGE
:
802 CatPrint (Str
, L
"UsbMassStorage");
806 CatPrint (Str
, L
"UsbHub");
809 case USB_CLASS_CDCDATA
:
810 CatPrint (Str
, L
"UsbCDCData");
813 case USB_CLASS_SMART_CARD
:
814 CatPrint (Str
, L
"UsbSmartCard");
817 case USB_CLASS_VIDEO
:
818 CatPrint (Str
, L
"UsbVideo");
821 case USB_CLASS_DIAGNOSTIC
:
822 CatPrint (Str
, L
"UsbDiagnostic");
825 case USB_CLASS_WIRELESS
:
826 CatPrint (Str
, L
"UsbWireless");
830 IsKnownSubClass
= FALSE
;
834 if (IsKnownSubClass
) {
837 L
"(0x%x,0x%x,0x%x,0x%x)",
840 UsbClass
->DeviceSubClass
,
841 UsbClass
->DeviceProtocol
846 if (UsbClass
->DeviceClass
== USB_CLASS_RESERVE
) {
847 if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_FW_UPDATE
) {
850 L
"UsbDeviceFirmwareUpdate(0x%x,0x%x,0x%x)",
853 UsbClass
->DeviceProtocol
856 } else if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_IRDA_BRIDGE
) {
859 L
"UsbIrdaBridge(0x%x,0x%x,0x%x)",
862 UsbClass
->DeviceProtocol
865 } else if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_TEST
) {
868 L
"UsbTestAndMeasurement(0x%x,0x%x,0x%x)",
871 UsbClass
->DeviceProtocol
879 L
"UsbClass(0x%x,0x%x,0x%x,0x%x,0x%x)",
882 UsbClass
->DeviceClass
,
883 UsbClass
->DeviceSubClass
,
884 UsbClass
->DeviceProtocol
889 Converts a SATA device path structure to its string representative.
891 @param Str The string representative of input device.
892 @param DevPath The input device path structure.
893 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
894 of the display node is used, where applicable. If DisplayOnly
895 is FALSE, then the longer text representation of the display node
897 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
898 representation for a device node can be used, where applicable.
903 IN OUT POOL_PRINT
*Str
,
905 IN BOOLEAN DisplayOnly
,
906 IN BOOLEAN AllowShortcuts
909 SATA_DEVICE_PATH
*Sata
;
914 L
"Sata(0x%x,0x%x,0x%x)",
915 (UINTN
) Sata
->HBAPortNumber
,
916 (UINTN
) Sata
->PortMultiplierPortNumber
,
922 Converts a I20 device path structure to its string representative.
924 @param Str The string representative of input device.
925 @param DevPath The input device path structure.
926 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
927 of the display node is used, where applicable. If DisplayOnly
928 is FALSE, then the longer text representation of the display node
930 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
931 representation for a device node can be used, where applicable.
936 IN OUT POOL_PRINT
*Str
,
938 IN BOOLEAN DisplayOnly
,
939 IN BOOLEAN AllowShortcuts
942 I2O_DEVICE_PATH
*I2ODevPath
;
944 I2ODevPath
= DevPath
;
945 CatPrint (Str
, L
"I2O(0x%x)", I2ODevPath
->Tid
);
949 Converts a MAC address device path structure to its string representative.
951 @param Str The string representative of input device.
952 @param DevPath The input device path structure.
953 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
954 of the display node is used, where applicable. If DisplayOnly
955 is FALSE, then the longer text representation of the display node
957 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
958 representation for a device node can be used, where applicable.
962 DevPathToTextMacAddr (
963 IN OUT POOL_PRINT
*Str
,
965 IN BOOLEAN DisplayOnly
,
966 IN BOOLEAN AllowShortcuts
969 MAC_ADDR_DEVICE_PATH
*MacDevPath
;
973 MacDevPath
= DevPath
;
975 HwAddressSize
= sizeof (EFI_MAC_ADDRESS
);
976 if (MacDevPath
->IfType
== 0x01 || MacDevPath
->IfType
== 0x00) {
980 CatPrint (Str
, L
"MAC(");
982 for (Index
= 0; Index
< HwAddressSize
; Index
++) {
983 CatPrint (Str
, L
"%02x", MacDevPath
->MacAddress
.Addr
[Index
]);
986 CatPrint (Str
, L
",0x%x)", MacDevPath
->IfType
);
990 Converts a IPv4 device path structure to its string representative.
992 @param Str The string representative of input device.
993 @param DevPath The input device path structure.
994 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
995 of the display node is used, where applicable. If DisplayOnly
996 is FALSE, then the longer text representation of the display node
998 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
999 representation for a device node can be used, where applicable.
1004 IN OUT POOL_PRINT
*Str
,
1006 IN BOOLEAN DisplayOnly
,
1007 IN BOOLEAN AllowShortcuts
1010 IPv4_DEVICE_PATH
*IPDevPath
;
1012 IPDevPath
= DevPath
;
1016 L
"IPv4(%d.%d.%d.%d)",
1017 IPDevPath
->RemoteIpAddress
.Addr
[0],
1018 IPDevPath
->RemoteIpAddress
.Addr
[1],
1019 IPDevPath
->RemoteIpAddress
.Addr
[2],
1020 IPDevPath
->RemoteIpAddress
.Addr
[3]
1027 L
"IPv4(%d.%d.%d.%d,%s,%s,%d.%d.%d.%d)",
1028 IPDevPath
->RemoteIpAddress
.Addr
[0],
1029 IPDevPath
->RemoteIpAddress
.Addr
[1],
1030 IPDevPath
->RemoteIpAddress
.Addr
[2],
1031 IPDevPath
->RemoteIpAddress
.Addr
[3],
1032 IPDevPath
->Protocol
? L
"TCP" : L
"UDP",
1033 (IPDevPath
->StaticIpAddress
== TRUE
) ? L
"Static" : L
"DHCP",
1034 IPDevPath
->LocalIpAddress
.Addr
[0],
1035 IPDevPath
->LocalIpAddress
.Addr
[1],
1036 IPDevPath
->LocalIpAddress
.Addr
[2],
1037 IPDevPath
->LocalIpAddress
.Addr
[3]
1042 Converts a IPv6 device path structure to its string representative.
1044 @param Str The string representative of input device.
1045 @param DevPath The input device path structure.
1046 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1047 of the display node is used, where applicable. If DisplayOnly
1048 is FALSE, then the longer text representation of the display node
1050 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1051 representation for a device node can be used, where applicable.
1056 IN OUT POOL_PRINT
*Str
,
1058 IN BOOLEAN DisplayOnly
,
1059 IN BOOLEAN AllowShortcuts
1062 IPv6_DEVICE_PATH
*IPDevPath
;
1064 IPDevPath
= DevPath
;
1068 L
"IPv6(%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x)",
1069 IPDevPath
->RemoteIpAddress
.Addr
[0],
1070 IPDevPath
->RemoteIpAddress
.Addr
[1],
1071 IPDevPath
->RemoteIpAddress
.Addr
[2],
1072 IPDevPath
->RemoteIpAddress
.Addr
[3],
1073 IPDevPath
->RemoteIpAddress
.Addr
[4],
1074 IPDevPath
->RemoteIpAddress
.Addr
[5],
1075 IPDevPath
->RemoteIpAddress
.Addr
[6],
1076 IPDevPath
->RemoteIpAddress
.Addr
[7],
1077 IPDevPath
->RemoteIpAddress
.Addr
[8],
1078 IPDevPath
->RemoteIpAddress
.Addr
[9],
1079 IPDevPath
->RemoteIpAddress
.Addr
[10],
1080 IPDevPath
->RemoteIpAddress
.Addr
[11],
1081 IPDevPath
->RemoteIpAddress
.Addr
[12],
1082 IPDevPath
->RemoteIpAddress
.Addr
[13],
1083 IPDevPath
->RemoteIpAddress
.Addr
[14],
1084 IPDevPath
->RemoteIpAddress
.Addr
[15]
1091 L
"IPv6(%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x,%s,%s,%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x)",
1092 IPDevPath
->RemoteIpAddress
.Addr
[0],
1093 IPDevPath
->RemoteIpAddress
.Addr
[1],
1094 IPDevPath
->RemoteIpAddress
.Addr
[2],
1095 IPDevPath
->RemoteIpAddress
.Addr
[3],
1096 IPDevPath
->RemoteIpAddress
.Addr
[4],
1097 IPDevPath
->RemoteIpAddress
.Addr
[5],
1098 IPDevPath
->RemoteIpAddress
.Addr
[6],
1099 IPDevPath
->RemoteIpAddress
.Addr
[7],
1100 IPDevPath
->RemoteIpAddress
.Addr
[8],
1101 IPDevPath
->RemoteIpAddress
.Addr
[9],
1102 IPDevPath
->RemoteIpAddress
.Addr
[10],
1103 IPDevPath
->RemoteIpAddress
.Addr
[11],
1104 IPDevPath
->RemoteIpAddress
.Addr
[12],
1105 IPDevPath
->RemoteIpAddress
.Addr
[13],
1106 IPDevPath
->RemoteIpAddress
.Addr
[14],
1107 IPDevPath
->RemoteIpAddress
.Addr
[15],
1108 IPDevPath
->Protocol
? L
"TCP" : L
"UDP",
1109 (IPDevPath
->StaticIpAddress
== TRUE
) ? L
"Static" : L
"DHCP",
1110 IPDevPath
->LocalIpAddress
.Addr
[0],
1111 IPDevPath
->LocalIpAddress
.Addr
[1],
1112 IPDevPath
->LocalIpAddress
.Addr
[2],
1113 IPDevPath
->LocalIpAddress
.Addr
[3],
1114 IPDevPath
->LocalIpAddress
.Addr
[4],
1115 IPDevPath
->LocalIpAddress
.Addr
[5],
1116 IPDevPath
->LocalIpAddress
.Addr
[6],
1117 IPDevPath
->LocalIpAddress
.Addr
[7],
1118 IPDevPath
->LocalIpAddress
.Addr
[8],
1119 IPDevPath
->LocalIpAddress
.Addr
[9],
1120 IPDevPath
->LocalIpAddress
.Addr
[10],
1121 IPDevPath
->LocalIpAddress
.Addr
[11],
1122 IPDevPath
->LocalIpAddress
.Addr
[12],
1123 IPDevPath
->LocalIpAddress
.Addr
[13],
1124 IPDevPath
->LocalIpAddress
.Addr
[14],
1125 IPDevPath
->LocalIpAddress
.Addr
[15]
1130 Converts an Infini Band device path structure to its string representative.
1132 @param Str The string representative of input device.
1133 @param DevPath The input device path structure.
1134 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1135 of the display node is used, where applicable. If DisplayOnly
1136 is FALSE, then the longer text representation of the display node
1138 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1139 representation for a device node can be used, where applicable.
1143 DevPathToTextInfiniBand (
1144 IN OUT POOL_PRINT
*Str
,
1146 IN BOOLEAN DisplayOnly
,
1147 IN BOOLEAN AllowShortcuts
1150 INFINIBAND_DEVICE_PATH
*InfiniBand
;
1152 InfiniBand
= DevPath
;
1155 L
"Infiniband(0x%x,%g,0x%lx,0x%lx,0x%lx)",
1156 InfiniBand
->ResourceFlags
,
1157 InfiniBand
->PortGid
,
1158 InfiniBand
->ServiceId
,
1159 InfiniBand
->TargetPortId
,
1160 InfiniBand
->DeviceId
1165 Converts a UART device path structure to its string representative.
1167 @param Str The string representative of input device.
1168 @param DevPath The input device path structure.
1169 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1170 of the display node is used, where applicable. If DisplayOnly
1171 is FALSE, then the longer text representation of the display node
1173 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1174 representation for a device node can be used, where applicable.
1179 IN OUT POOL_PRINT
*Str
,
1181 IN BOOLEAN DisplayOnly
,
1182 IN BOOLEAN AllowShortcuts
1185 UART_DEVICE_PATH
*Uart
;
1189 switch (Uart
->Parity
) {
1219 if (Uart
->BaudRate
== 0) {
1220 CatPrint (Str
, L
"Uart(DEFAULT,");
1222 CatPrint (Str
, L
"Uart(%ld,", Uart
->BaudRate
);
1225 if (Uart
->DataBits
== 0) {
1226 CatPrint (Str
, L
"DEFAULT,");
1228 CatPrint (Str
, L
"%d,", Uart
->DataBits
);
1231 CatPrint (Str
, L
"%c,", Parity
);
1233 switch (Uart
->StopBits
) {
1235 CatPrint (Str
, L
"D)");
1239 CatPrint (Str
, L
"1)");
1243 CatPrint (Str
, L
"1.5)");
1247 CatPrint (Str
, L
"2)");
1251 CatPrint (Str
, L
"x)");
1257 Converts an iSCSI device path structure to its string representative.
1259 @param Str The string representative of input device.
1260 @param DevPath The input device path structure.
1261 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1262 of the display node is used, where applicable. If DisplayOnly
1263 is FALSE, then the longer text representation of the display node
1265 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1266 representation for a device node can be used, where applicable.
1270 DevPathToTextiSCSI (
1271 IN OUT POOL_PRINT
*Str
,
1273 IN BOOLEAN DisplayOnly
,
1274 IN BOOLEAN AllowShortcuts
1277 ISCSI_DEVICE_PATH_WITH_NAME
*ISCSIDevPath
;
1280 ISCSIDevPath
= DevPath
;
1283 L
"iSCSI(%a,0x%x,0x%lx,",
1284 ISCSIDevPath
->iSCSITargetName
,
1285 ISCSIDevPath
->TargetPortalGroupTag
,
1289 Options
= ISCSIDevPath
->LoginOption
;
1290 CatPrint (Str
, L
"%s,", (((Options
>> 1) & 0x0001) != 0) ? L
"CRC32C" : L
"None");
1291 CatPrint (Str
, L
"%s,", (((Options
>> 3) & 0x0001) != 0) ? L
"CRC32C" : L
"None");
1292 if (((Options
>> 11) & 0x0001) != 0) {
1293 CatPrint (Str
, L
"%s,", L
"None");
1294 } else if (((Options
>> 12) & 0x0001) != 0) {
1295 CatPrint (Str
, L
"%s,", L
"CHAP_UNI");
1297 CatPrint (Str
, L
"%s,", L
"CHAP_BI");
1301 CatPrint (Str
, L
"%s)", (ISCSIDevPath
->NetworkProtocol
== 0) ? L
"TCP" : L
"reserved");
1305 Converts a Hard drive device path structure to its string representative.
1307 @param Str The string representative of input device.
1308 @param DevPath The input device path structure.
1309 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1310 of the display node is used, where applicable. If DisplayOnly
1311 is FALSE, then the longer text representation of the display node
1313 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1314 representation for a device node can be used, where applicable.
1318 DevPathToTextHardDrive (
1319 IN OUT POOL_PRINT
*Str
,
1321 IN BOOLEAN DisplayOnly
,
1322 IN BOOLEAN AllowShortcuts
1325 HARDDRIVE_DEVICE_PATH
*Hd
;
1328 switch (Hd
->SignatureType
) {
1329 case SIGNATURE_TYPE_MBR
:
1332 L
"HD(%d,%s,0x%08x,",
1333 Hd
->PartitionNumber
,
1335 *((UINT32
*) (&(Hd
->Signature
[0])))
1339 case SIGNATURE_TYPE_GUID
:
1343 Hd
->PartitionNumber
,
1345 (EFI_GUID
*) &(Hd
->Signature
[0])
1353 Hd
->PartitionNumber
,
1359 CatPrint (Str
, L
"0x%lx,0x%lx)", Hd
->PartitionStart
, Hd
->PartitionSize
);
1363 Converts a CDROM device path structure to its string representative.
1365 @param Str The string representative of input device.
1366 @param DevPath The input device path structure.
1367 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1368 of the display node is used, where applicable. If DisplayOnly
1369 is FALSE, then the longer text representation of the display node
1371 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1372 representation for a device node can be used, where applicable.
1376 DevPathToTextCDROM (
1377 IN OUT POOL_PRINT
*Str
,
1379 IN BOOLEAN DisplayOnly
,
1380 IN BOOLEAN AllowShortcuts
1383 CDROM_DEVICE_PATH
*Cd
;
1387 CatPrint (Str
, L
"CDROM(0x%x)", Cd
->BootEntry
);
1391 CatPrint (Str
, L
"CDROM(0x%x,0x%lx,0x%lx)", Cd
->BootEntry
, Cd
->PartitionStart
, Cd
->PartitionSize
);
1395 Converts a File device path structure to its string representative.
1397 @param Str The string representative of input device.
1398 @param DevPath The input device path structure.
1399 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1400 of the display node is used, where applicable. If DisplayOnly
1401 is FALSE, then the longer text representation of the display node
1403 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1404 representation for a device node can be used, where applicable.
1408 DevPathToTextFilePath (
1409 IN OUT POOL_PRINT
*Str
,
1411 IN BOOLEAN DisplayOnly
,
1412 IN BOOLEAN AllowShortcuts
1415 FILEPATH_DEVICE_PATH
*Fp
;
1418 CatPrint (Str
, L
"%s", Fp
->PathName
);
1422 Converts a Media protocol device path structure to its string representative.
1424 @param Str The string representative of input device.
1425 @param DevPath The input device path structure.
1426 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1427 of the display node is used, where applicable. If DisplayOnly
1428 is FALSE, then the longer text representation of the display node
1430 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1431 representation for a device node can be used, where applicable.
1435 DevPathToTextMediaProtocol (
1436 IN OUT POOL_PRINT
*Str
,
1438 IN BOOLEAN DisplayOnly
,
1439 IN BOOLEAN AllowShortcuts
1442 MEDIA_PROTOCOL_DEVICE_PATH
*MediaProt
;
1444 MediaProt
= DevPath
;
1445 CatPrint (Str
, L
"Media(%g)", &MediaProt
->Protocol
);
1449 Converts a Firmware Volume device path structure to its string representative.
1451 @param Str The string representative of input device.
1452 @param DevPath The input device path structure.
1453 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1454 of the display node is used, where applicable. If DisplayOnly
1455 is FALSE, then the longer text representation of the display node
1457 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1458 representation for a device node can be used, where applicable.
1463 IN OUT POOL_PRINT
*Str
,
1465 IN BOOLEAN DisplayOnly
,
1466 IN BOOLEAN AllowShortcuts
1469 MEDIA_FW_VOL_DEVICE_PATH
*Fv
;
1472 CatPrint (Str
, L
"Fv(%g)", &Fv
->FvName
);
1476 Converts a Firmware Volume File device path structure to its string representative.
1478 @param Str The string representative of input device.
1479 @param DevPath The input device path structure.
1480 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1481 of the display node is used, where applicable. If DisplayOnly
1482 is FALSE, then the longer text representation of the display node
1484 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1485 representation for a device node can be used, where applicable.
1489 DevPathToTextFvFile (
1490 IN OUT POOL_PRINT
*Str
,
1492 IN BOOLEAN DisplayOnly
,
1493 IN BOOLEAN AllowShortcuts
1496 MEDIA_FW_VOL_FILEPATH_DEVICE_PATH
*FvFile
;
1499 CatPrint (Str
, L
"FvFile(%g)", &FvFile
->FvFileName
);
1503 Converts a BIOS Boot Specification device path structure to its string representative.
1505 @param Str The string representative of input device.
1506 @param DevPath The input device path structure.
1507 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1508 of the display node is used, where applicable. If DisplayOnly
1509 is FALSE, then the longer text representation of the display node
1511 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1512 representation for a device node can be used, where applicable.
1517 IN OUT POOL_PRINT
*Str
,
1519 IN BOOLEAN DisplayOnly
,
1520 IN BOOLEAN AllowShortcuts
1523 BBS_BBS_DEVICE_PATH
*Bbs
;
1527 switch (Bbs
->DeviceType
) {
1528 case BBS_TYPE_FLOPPY
:
1532 case BBS_TYPE_HARDDRIVE
:
1536 case BBS_TYPE_CDROM
:
1540 case BBS_TYPE_PCMCIA
:
1548 case BBS_TYPE_EMBEDDED_NETWORK
:
1558 CatPrint (Str
, L
"BBS(%s,%a", Type
, Bbs
->String
);
1560 CatPrint (Str
, L
"BBS(0x%x,%a", Bbs
->DeviceType
, Bbs
->String
);
1564 CatPrint (Str
, L
")");
1568 CatPrint (Str
, L
",0x%x)", Bbs
->StatusFlag
);
1572 Converts an End-of-Device-Path structure to its string representative.
1574 @param Str The string representative of input device.
1575 @param DevPath The input device path structure.
1576 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1577 of the display node is used, where applicable. If DisplayOnly
1578 is FALSE, then the longer text representation of the display node
1580 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1581 representation for a device node can be used, where applicable.
1585 DevPathToTextEndInstance (
1586 IN OUT POOL_PRINT
*Str
,
1588 IN BOOLEAN DisplayOnly
,
1589 IN BOOLEAN AllowShortcuts
1592 CatPrint (Str
, L
",");
1596 Converts an unknown device path structure to its string representative.
1598 @param Str The string representative of input device.
1599 @param DevPath The input device path structure.
1600 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1601 of the display node is used, where applicable. If DisplayOnly
1602 is FALSE, then the longer text representation of the display node
1604 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1605 representation for a device node can be used, where applicable.
1609 DevPathToTextNodeUnknown (
1610 IN OUT POOL_PRINT
*Str
,
1612 IN BOOLEAN DisplayOnly
,
1613 IN BOOLEAN AllowShortcuts
1616 CatPrint (Str
, L
"?");
1619 GLOBAL_REMOVE_IF_UNREFERENCED
const DEVICE_PATH_TO_TEXT_TABLE DevPathToTextTable
[] = {
1620 {HARDWARE_DEVICE_PATH
, HW_PCI_DP
, DevPathToTextPci
},
1621 {HARDWARE_DEVICE_PATH
, HW_PCCARD_DP
, DevPathToTextPccard
},
1622 {HARDWARE_DEVICE_PATH
, HW_MEMMAP_DP
, DevPathToTextMemMap
},
1623 {HARDWARE_DEVICE_PATH
, HW_VENDOR_DP
, DevPathToTextVendor
},
1624 {HARDWARE_DEVICE_PATH
, HW_CONTROLLER_DP
, DevPathToTextController
},
1625 {ACPI_DEVICE_PATH
, ACPI_DP
, DevPathToTextAcpi
},
1626 {ACPI_DEVICE_PATH
, ACPI_EXTENDED_DP
, DevPathToTextAcpiEx
},
1627 {ACPI_DEVICE_PATH
, ACPI_ADR_DP
, DevPathToTextAcpiAdr
},
1628 {MESSAGING_DEVICE_PATH
, MSG_ATAPI_DP
, DevPathToTextAtapi
},
1629 {MESSAGING_DEVICE_PATH
, MSG_SCSI_DP
, DevPathToTextScsi
},
1630 {MESSAGING_DEVICE_PATH
, MSG_FIBRECHANNEL_DP
, DevPathToTextFibre
},
1631 {MESSAGING_DEVICE_PATH
, MSG_1394_DP
, DevPathToText1394
},
1632 {MESSAGING_DEVICE_PATH
, MSG_USB_DP
, DevPathToTextUsb
},
1633 {MESSAGING_DEVICE_PATH
, MSG_USB_WWID_DP
, DevPathToTextUsbWWID
},
1634 {MESSAGING_DEVICE_PATH
, MSG_DEVICE_LOGICAL_UNIT_DP
, DevPathToTextLogicalUnit
},
1635 {MESSAGING_DEVICE_PATH
, MSG_USB_CLASS_DP
, DevPathToTextUsbClass
},
1636 {MESSAGING_DEVICE_PATH
, MSG_SATA_DP
, DevPathToTextSata
},
1637 {MESSAGING_DEVICE_PATH
, MSG_I2O_DP
, DevPathToTextI2O
},
1638 {MESSAGING_DEVICE_PATH
, MSG_MAC_ADDR_DP
, DevPathToTextMacAddr
},
1639 {MESSAGING_DEVICE_PATH
, MSG_IPv4_DP
, DevPathToTextIPv4
},
1640 {MESSAGING_DEVICE_PATH
, MSG_IPv6_DP
, DevPathToTextIPv6
},
1641 {MESSAGING_DEVICE_PATH
, MSG_INFINIBAND_DP
, DevPathToTextInfiniBand
},
1642 {MESSAGING_DEVICE_PATH
, MSG_UART_DP
, DevPathToTextUart
},
1643 {MESSAGING_DEVICE_PATH
, MSG_VENDOR_DP
, DevPathToTextVendor
},
1644 {MESSAGING_DEVICE_PATH
, MSG_ISCSI_DP
, DevPathToTextiSCSI
},
1645 {MEDIA_DEVICE_PATH
, MEDIA_HARDDRIVE_DP
, DevPathToTextHardDrive
},
1646 {MEDIA_DEVICE_PATH
, MEDIA_CDROM_DP
, DevPathToTextCDROM
},
1647 {MEDIA_DEVICE_PATH
, MEDIA_VENDOR_DP
, DevPathToTextVendor
},
1648 {MEDIA_DEVICE_PATH
, MEDIA_FILEPATH_DP
, DevPathToTextFilePath
},
1649 {MEDIA_DEVICE_PATH
, MEDIA_PROTOCOL_DP
, DevPathToTextMediaProtocol
},
1650 {MEDIA_DEVICE_PATH
, MEDIA_FILEPATH_DP
, DevPathToTextFilePath
},
1651 {MEDIA_DEVICE_PATH
, MEDIA_PIWG_FW_VOL_DP
, DevPathToTextFv
},
1652 {MEDIA_DEVICE_PATH
, MEDIA_PIWG_FW_FILE_DP
, DevPathToTextFvFile
},
1653 {BBS_DEVICE_PATH
, BBS_BBS_DP
, DevPathToTextBBS
},
1654 {END_DEVICE_PATH_TYPE
, END_INSTANCE_DEVICE_PATH_SUBTYPE
, DevPathToTextEndInstance
},
1659 Converts a device node to its string representation.
1661 @param DeviceNode A Pointer to the device node to be converted.
1662 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1663 of the display node is used, where applicable. If DisplayOnly
1664 is FALSE, then the longer text representation of the display node
1666 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1667 representation for a device node can be used, where applicable.
1669 @return A pointer to the allocated text representation of the device node or NULL if DeviceNode
1670 is NULL or there was insufficient memory.
1675 ConvertDeviceNodeToText (
1676 IN CONST EFI_DEVICE_PATH_PROTOCOL
*DeviceNode
,
1677 IN BOOLEAN DisplayOnly
,
1678 IN BOOLEAN AllowShortcuts
1684 VOID (*DumpNode
)(POOL_PRINT
*, VOID
*, BOOLEAN
, BOOLEAN
);
1686 if (DeviceNode
== NULL
) {
1690 ZeroMem (&Str
, sizeof (Str
));
1693 // Process the device path node
1696 for (Index
= 0; DevPathToTextTable
[Index
].Function
!= NULL
; Index
++) {
1697 if (DevicePathType (DeviceNode
) == DevPathToTextTable
[Index
].Type
&&
1698 DevicePathSubType (DeviceNode
) == DevPathToTextTable
[Index
].SubType
1700 DumpNode
= DevPathToTextTable
[Index
].Function
;
1705 // If not found, use a generic function
1707 if (DumpNode
== NULL
) {
1708 DumpNode
= DevPathToTextNodeUnknown
;
1714 DumpNode (&Str
, (VOID
*) DeviceNode
, DisplayOnly
, AllowShortcuts
);
1717 // Shrink pool used for string allocation
1719 NewSize
= (Str
.Len
+ 1) * sizeof (CHAR16
);
1720 Str
.Str
= ReallocatePool (NewSize
, NewSize
, Str
.Str
);
1721 ASSERT (Str
.Str
!= NULL
);
1722 Str
.Str
[Str
.Len
] = 0;
1727 Converts a device path to its text representation.
1729 @param DevicePath A Pointer to the device to be converted.
1730 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1731 of the display node is used, where applicable. If DisplayOnly
1732 is FALSE, then the longer text representation of the display node
1734 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1735 representation for a device node can be used, where applicable.
1737 @return A pointer to the allocated text representation of the device path or
1738 NULL if DeviceNode is NULL or there was insufficient memory.
1743 ConvertDevicePathToText (
1744 IN CONST EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
1745 IN BOOLEAN DisplayOnly
,
1746 IN BOOLEAN AllowShortcuts
1750 EFI_DEVICE_PATH_PROTOCOL
*DevPathNode
;
1751 EFI_DEVICE_PATH_PROTOCOL
*AlignedDevPathNode
;
1754 VOID (*DumpNode
) (POOL_PRINT
*, VOID
*, BOOLEAN
, BOOLEAN
);
1756 if (DevicePath
== NULL
) {
1760 ZeroMem (&Str
, sizeof (Str
));
1763 // Process each device path node
1765 DevPathNode
= (EFI_DEVICE_PATH_PROTOCOL
*) DevicePath
;
1766 while (!IsDevicePathEnd (DevPathNode
)) {
1768 // Find the handler to dump this device path node
1771 for (Index
= 0; DevPathToTextTable
[Index
].Function
; Index
+= 1) {
1773 if (DevicePathType (DevPathNode
) == DevPathToTextTable
[Index
].Type
&&
1774 DevicePathSubType (DevPathNode
) == DevPathToTextTable
[Index
].SubType
1776 DumpNode
= DevPathToTextTable
[Index
].Function
;
1781 // If not found, use a generic function
1784 DumpNode
= DevPathToTextNodeUnknown
;
1787 // Put a path seperator in if needed
1789 if ((Str
.Len
!= 0) && DumpNode
!= DevPathToTextEndInstance
) {
1790 if (*(Str
.Str
+ Str
.Len
/ sizeof (CHAR16
) - 1) != L
',') {
1791 CatPrint (&Str
, L
"/");
1795 AlignedDevPathNode
= AllocateCopyPool (DevicePathNodeLength (DevPathNode
), DevPathNode
);
1797 // Print this node of the device path
1799 DumpNode (&Str
, AlignedDevPathNode
, DisplayOnly
, AllowShortcuts
);
1800 FreePool (AlignedDevPathNode
);
1803 // Next device path node
1805 DevPathNode
= NextDevicePathNode (DevPathNode
);
1808 NewSize
= (Str
.Len
+ 1) * sizeof (CHAR16
);
1809 Str
.Str
= ReallocatePool (NewSize
, NewSize
, Str
.Str
);
1810 ASSERT (Str
.Str
!= NULL
);
1811 Str
.Str
[Str
.Len
] = 0;