2 DevicePathToText protocol as defined in the UEFI 2.0 specification.
4 Copyright (c) 2006 - 2010, 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 "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)", (UINTN
) Pci
->Device
, (UINTN
) 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)", (UINTN
) 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)",
156 (UINTN
) MemMap
->MemoryType
,
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 (UINTN
) ((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,",(UINTN
) (Info
>> 8) & 0xff);
256 CatPrint (Str
, L
"0,0,0,0,");
259 CatPrint (Str
, L
"0x%x)", (UINTN
) ((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", (UINTN
) ((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 (UINTN
) 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)", (UINTN
) Acpi
->UID
);
351 CatPrint (Str
, L
"Floppy(0x%x)", (UINTN
) Acpi
->UID
);
355 CatPrint (Str
, L
"Keyboard(0x%x)", (UINTN
) Acpi
->UID
);
359 CatPrint (Str
, L
"Serial(0x%x)", (UINTN
) Acpi
->UID
);
363 CatPrint (Str
, L
"ParallelPort(0x%x)", (UINTN
) Acpi
->UID
);
367 CatPrint (Str
, L
"Acpi(PNP%04x,0x%x)", (UINTN
) EISA_ID_TO_NUM (Acpi
->HID
), (UINTN
) Acpi
->UID
);
371 CatPrint (Str
, L
"Acpi(0x%08x,0x%x)", (UINTN
) Acpi
->HID
, (UINTN
) 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,", (UINTN
) 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", (UINTN
) AcpiAdr
->ADR
);
521 for (Index
= 0; Index
< AdditionalAdrCount
; Index
++) {
522 CatPrint (Str
, L
",0x%x", (UINTN
) *(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)", (UINTN
) Atapi
->Lun
);
558 (Atapi
->PrimarySecondary
== 1) ? L
"Secondary" : L
"Primary",
559 (Atapi
->SlaveMaster
== 1) ? 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)", (UINTN
) Scsi
->Pun
, (UINTN
) 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
);
711 ASSERT (NewStr
!= NULL
);
713 SerialNumberStr
= NewStr
;
718 L
"UsbWwid(0x%x,0x%x,0x%x,\"%s\")",
719 (UINTN
) UsbWWId
->VendorId
,
720 (UINTN
) UsbWWId
->ProductId
,
721 (UINTN
) UsbWWId
->InterfaceNumber
,
727 Converts a Logic Unit device path structure to its string representative.
729 @param Str The string representative of input device.
730 @param DevPath The input device path structure.
731 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
732 of the display node is used, where applicable. If DisplayOnly
733 is FALSE, then the longer text representation of the display node
735 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
736 representation for a device node can be used, where applicable.
740 DevPathToTextLogicalUnit (
741 IN OUT POOL_PRINT
*Str
,
743 IN BOOLEAN DisplayOnly
,
744 IN BOOLEAN AllowShortcuts
747 DEVICE_LOGICAL_UNIT_DEVICE_PATH
*LogicalUnit
;
749 LogicalUnit
= DevPath
;
750 CatPrint (Str
, L
"Unit(0x%x)", (UINTN
) LogicalUnit
->Lun
);
754 Converts a USB class device path structure to its string representative.
756 @param Str The string representative of input device.
757 @param DevPath The input device path structure.
758 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
759 of the display node is used, where applicable. If DisplayOnly
760 is FALSE, then the longer text representation of the display node
762 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
763 representation for a device node can be used, where applicable.
767 DevPathToTextUsbClass (
768 IN OUT POOL_PRINT
*Str
,
770 IN BOOLEAN DisplayOnly
,
771 IN BOOLEAN AllowShortcuts
774 USB_CLASS_DEVICE_PATH
*UsbClass
;
775 BOOLEAN IsKnownSubClass
;
780 IsKnownSubClass
= TRUE
;
781 switch (UsbClass
->DeviceClass
) {
782 case USB_CLASS_AUDIO
:
783 CatPrint (Str
, L
"UsbAudio");
786 case USB_CLASS_CDCCONTROL
:
787 CatPrint (Str
, L
"UsbCDCControl");
791 CatPrint (Str
, L
"UsbHID");
794 case USB_CLASS_IMAGE
:
795 CatPrint (Str
, L
"UsbImage");
798 case USB_CLASS_PRINTER
:
799 CatPrint (Str
, L
"UsbPrinter");
802 case USB_CLASS_MASS_STORAGE
:
803 CatPrint (Str
, L
"UsbMassStorage");
807 CatPrint (Str
, L
"UsbHub");
810 case USB_CLASS_CDCDATA
:
811 CatPrint (Str
, L
"UsbCDCData");
814 case USB_CLASS_SMART_CARD
:
815 CatPrint (Str
, L
"UsbSmartCard");
818 case USB_CLASS_VIDEO
:
819 CatPrint (Str
, L
"UsbVideo");
822 case USB_CLASS_DIAGNOSTIC
:
823 CatPrint (Str
, L
"UsbDiagnostic");
826 case USB_CLASS_WIRELESS
:
827 CatPrint (Str
, L
"UsbWireless");
831 IsKnownSubClass
= FALSE
;
835 if (IsKnownSubClass
) {
838 L
"(0x%x,0x%x,0x%x,0x%x)",
839 (UINTN
) UsbClass
->VendorId
,
840 (UINTN
) UsbClass
->ProductId
,
841 (UINTN
) UsbClass
->DeviceSubClass
,
842 (UINTN
) UsbClass
->DeviceProtocol
847 if (UsbClass
->DeviceClass
== USB_CLASS_RESERVE
) {
848 if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_FW_UPDATE
) {
851 L
"UsbDeviceFirmwareUpdate(0x%x,0x%x,0x%x)",
852 (UINTN
) UsbClass
->VendorId
,
853 (UINTN
) UsbClass
->ProductId
,
854 (UINTN
) UsbClass
->DeviceProtocol
857 } else if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_IRDA_BRIDGE
) {
860 L
"UsbIrdaBridge(0x%x,0x%x,0x%x)",
861 (UINTN
) UsbClass
->VendorId
,
862 (UINTN
) UsbClass
->ProductId
,
863 (UINTN
) UsbClass
->DeviceProtocol
866 } else if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_TEST
) {
869 L
"UsbTestAndMeasurement(0x%x,0x%x,0x%x)",
870 (UINTN
) UsbClass
->VendorId
,
871 (UINTN
) UsbClass
->ProductId
,
872 (UINTN
) UsbClass
->DeviceProtocol
880 L
"UsbClass(0x%x,0x%x,0x%x,0x%x,0x%x)",
881 (UINTN
) UsbClass
->VendorId
,
882 (UINTN
) UsbClass
->ProductId
,
883 (UINTN
) UsbClass
->DeviceClass
,
884 (UINTN
) UsbClass
->DeviceSubClass
,
885 (UINTN
) UsbClass
->DeviceProtocol
890 Converts a SATA device path structure to its string representative.
892 @param Str The string representative of input device.
893 @param DevPath The input device path structure.
894 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
895 of the display node is used, where applicable. If DisplayOnly
896 is FALSE, then the longer text representation of the display node
898 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
899 representation for a device node can be used, where applicable.
904 IN OUT POOL_PRINT
*Str
,
906 IN BOOLEAN DisplayOnly
,
907 IN BOOLEAN AllowShortcuts
910 SATA_DEVICE_PATH
*Sata
;
913 if ((Sata
->PortMultiplierPortNumber
& SATA_HBA_DIRECT_CONNECT_FLAG
) != 0) {
917 (UINTN
) Sata
->HBAPortNumber
,
923 L
"Sata(0x%x,0x%x,0x%x)",
924 (UINTN
) Sata
->HBAPortNumber
,
925 (UINTN
) Sata
->PortMultiplierPortNumber
,
932 Converts a I20 device path structure to its string representative.
934 @param Str The string representative of input device.
935 @param DevPath The input device path structure.
936 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
937 of the display node is used, where applicable. If DisplayOnly
938 is FALSE, then the longer text representation of the display node
940 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
941 representation for a device node can be used, where applicable.
946 IN OUT POOL_PRINT
*Str
,
948 IN BOOLEAN DisplayOnly
,
949 IN BOOLEAN AllowShortcuts
952 I2O_DEVICE_PATH
*I2ODevPath
;
954 I2ODevPath
= DevPath
;
955 CatPrint (Str
, L
"I2O(0x%x)", (UINTN
) I2ODevPath
->Tid
);
959 Converts a MAC address device path structure to its string representative.
961 @param Str The string representative of input device.
962 @param DevPath The input device path structure.
963 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
964 of the display node is used, where applicable. If DisplayOnly
965 is FALSE, then the longer text representation of the display node
967 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
968 representation for a device node can be used, where applicable.
972 DevPathToTextMacAddr (
973 IN OUT POOL_PRINT
*Str
,
975 IN BOOLEAN DisplayOnly
,
976 IN BOOLEAN AllowShortcuts
979 MAC_ADDR_DEVICE_PATH
*MacDevPath
;
983 MacDevPath
= DevPath
;
985 HwAddressSize
= sizeof (EFI_MAC_ADDRESS
);
986 if (MacDevPath
->IfType
== 0x01 || MacDevPath
->IfType
== 0x00) {
990 CatPrint (Str
, L
"MAC(");
992 for (Index
= 0; Index
< HwAddressSize
; Index
++) {
993 CatPrint (Str
, L
"%02x", (UINTN
) MacDevPath
->MacAddress
.Addr
[Index
]);
996 CatPrint (Str
, L
",0x%x)", (UINTN
) MacDevPath
->IfType
);
1000 Converts network protocol string to its text representation.
1002 @param Str The string representative of input device.
1003 @param Protocol The network protocol ID.
1007 CatNetworkProtocol (
1008 IN OUT POOL_PRINT
*Str
,
1012 if (Protocol
== RFC_1700_TCP_PROTOCOL
) {
1013 CatPrint (Str
, L
"TCP");
1014 } else if (Protocol
== RFC_1700_UDP_PROTOCOL
) {
1015 CatPrint (Str
, L
"UDP");
1017 CatPrint (Str
, L
"0x%x", Protocol
);
1022 Converts a IPv4 device path structure to its string representative.
1024 @param Str The string representative of input device.
1025 @param DevPath The input device path structure.
1026 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1027 of the display node is used, where applicable. If DisplayOnly
1028 is FALSE, then the longer text representation of the display node
1030 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1031 representation for a device node can be used, where applicable.
1036 IN OUT POOL_PRINT
*Str
,
1038 IN BOOLEAN DisplayOnly
,
1039 IN BOOLEAN AllowShortcuts
1042 IPv4_DEVICE_PATH
*IPDevPath
;
1044 IPDevPath
= DevPath
;
1048 L
"IPv4(%d.%d.%d.%d)",
1049 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[0],
1050 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[1],
1051 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[2],
1052 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[3]
1059 L
"IPv4(%d.%d.%d.%d,",
1060 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[0],
1061 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[1],
1062 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[2],
1063 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[3]
1066 CatNetworkProtocol (
1073 L
",%s,%d.%d.%d.%d)",
1074 IPDevPath
->StaticIpAddress
? L
"Static" : L
"DHCP",
1075 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[0],
1076 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[1],
1077 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[2],
1078 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[3]
1083 Converts a IPv6 device path structure to its string representative.
1085 @param Str The string representative of input device.
1086 @param DevPath The input device path structure.
1087 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1088 of the display node is used, where applicable. If DisplayOnly
1089 is FALSE, then the longer text representation of the display node
1091 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1092 representation for a device node can be used, where applicable.
1097 IN OUT POOL_PRINT
*Str
,
1099 IN BOOLEAN DisplayOnly
,
1100 IN BOOLEAN AllowShortcuts
1103 IPv6_DEVICE_PATH
*IPDevPath
;
1105 IPDevPath
= DevPath
;
1109 L
"IPv6(%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x)",
1110 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[0],
1111 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[1],
1112 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[2],
1113 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[3],
1114 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[4],
1115 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[5],
1116 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[6],
1117 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[7],
1118 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[8],
1119 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[9],
1120 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[10],
1121 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[11],
1122 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[12],
1123 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[13],
1124 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[14],
1125 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[15]
1132 L
"IPv6(%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x,",
1133 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[0],
1134 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[1],
1135 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[2],
1136 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[3],
1137 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[4],
1138 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[5],
1139 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[6],
1140 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[7],
1141 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[8],
1142 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[9],
1143 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[10],
1144 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[11],
1145 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[12],
1146 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[13],
1147 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[14],
1148 (UINTN
) IPDevPath
->RemoteIpAddress
.Addr
[15]
1151 CatNetworkProtocol (
1158 L
"%s,%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x)",
1159 IPDevPath
->StaticIpAddress
? L
"Static" : L
"DHCP",
1160 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[0],
1161 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[1],
1162 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[2],
1163 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[3],
1164 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[4],
1165 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[5],
1166 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[6],
1167 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[7],
1168 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[8],
1169 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[9],
1170 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[10],
1171 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[11],
1172 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[12],
1173 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[13],
1174 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[14],
1175 (UINTN
) IPDevPath
->LocalIpAddress
.Addr
[15]
1180 Converts an Infini Band device path structure to its string representative.
1182 @param Str The string representative of input device.
1183 @param DevPath The input device path structure.
1184 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1185 of the display node is used, where applicable. If DisplayOnly
1186 is FALSE, then the longer text representation of the display node
1188 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1189 representation for a device node can be used, where applicable.
1193 DevPathToTextInfiniBand (
1194 IN OUT POOL_PRINT
*Str
,
1196 IN BOOLEAN DisplayOnly
,
1197 IN BOOLEAN AllowShortcuts
1200 INFINIBAND_DEVICE_PATH
*InfiniBand
;
1202 InfiniBand
= DevPath
;
1205 L
"Infiniband(0x%x,%g,0x%lx,0x%lx,0x%lx)",
1206 (UINTN
) InfiniBand
->ResourceFlags
,
1207 InfiniBand
->PortGid
,
1208 InfiniBand
->ServiceId
,
1209 InfiniBand
->TargetPortId
,
1210 InfiniBand
->DeviceId
1215 Converts a UART device path structure to its string representative.
1217 @param Str The string representative of input device.
1218 @param DevPath The input device path structure.
1219 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1220 of the display node is used, where applicable. If DisplayOnly
1221 is FALSE, then the longer text representation of the display node
1223 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1224 representation for a device node can be used, where applicable.
1229 IN OUT POOL_PRINT
*Str
,
1231 IN BOOLEAN DisplayOnly
,
1232 IN BOOLEAN AllowShortcuts
1235 UART_DEVICE_PATH
*Uart
;
1239 switch (Uart
->Parity
) {
1269 if (Uart
->BaudRate
== 0) {
1270 CatPrint (Str
, L
"Uart(DEFAULT,");
1272 CatPrint (Str
, L
"Uart(%ld,", Uart
->BaudRate
);
1275 if (Uart
->DataBits
== 0) {
1276 CatPrint (Str
, L
"DEFAULT,");
1278 CatPrint (Str
, L
"%d,", (UINTN
) Uart
->DataBits
);
1281 CatPrint (Str
, L
"%c,", Parity
);
1283 switch (Uart
->StopBits
) {
1285 CatPrint (Str
, L
"D)");
1289 CatPrint (Str
, L
"1)");
1293 CatPrint (Str
, L
"1.5)");
1297 CatPrint (Str
, L
"2)");
1301 CatPrint (Str
, L
"x)");
1307 Converts an iSCSI device path structure to its string representative.
1309 @param Str The string representative of input device.
1310 @param DevPath The input device path structure.
1311 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1312 of the display node is used, where applicable. If DisplayOnly
1313 is FALSE, then the longer text representation of the display node
1315 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1316 representation for a device node can be used, where applicable.
1320 DevPathToTextiSCSI (
1321 IN OUT POOL_PRINT
*Str
,
1323 IN BOOLEAN DisplayOnly
,
1324 IN BOOLEAN AllowShortcuts
1327 ISCSI_DEVICE_PATH_WITH_NAME
*ISCSIDevPath
;
1330 ISCSIDevPath
= DevPath
;
1333 L
"iSCSI(%a,0x%x,0x%lx,",
1334 ISCSIDevPath
->TargetName
,
1335 (UINTN
) ISCSIDevPath
->TargetPortalGroupTag
,
1339 Options
= ISCSIDevPath
->LoginOption
;
1340 CatPrint (Str
, L
"%s,", (((Options
>> 1) & 0x0001) != 0) ? L
"CRC32C" : L
"None");
1341 CatPrint (Str
, L
"%s,", (((Options
>> 3) & 0x0001) != 0) ? L
"CRC32C" : L
"None");
1342 if (((Options
>> 11) & 0x0001) != 0) {
1343 CatPrint (Str
, L
"%s,", L
"None");
1344 } else if (((Options
>> 12) & 0x0001) != 0) {
1345 CatPrint (Str
, L
"%s,", L
"CHAP_UNI");
1347 CatPrint (Str
, L
"%s,", L
"CHAP_BI");
1351 CatPrint (Str
, L
"%s)", (ISCSIDevPath
->NetworkProtocol
== 0) ? L
"TCP" : L
"reserved");
1355 Converts a VLAN device path structure to its string representative.
1357 @param Str The string representative of input device.
1358 @param DevPath The input device path structure.
1359 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1360 of the display node is used, where applicable. If DisplayOnly
1361 is FALSE, then the longer text representation of the display node
1363 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1364 representation for a device node can be used, where applicable.
1369 IN OUT POOL_PRINT
*Str
,
1371 IN BOOLEAN DisplayOnly
,
1372 IN BOOLEAN AllowShortcuts
1375 VLAN_DEVICE_PATH
*Vlan
;
1378 CatPrint (Str
, L
"Vlan(%d)", (UINTN
) Vlan
->VlanId
);
1382 Converts a Hard drive device path structure to its string representative.
1384 @param Str The string representative of input device.
1385 @param DevPath The input device path structure.
1386 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1387 of the display node is used, where applicable. If DisplayOnly
1388 is FALSE, then the longer text representation of the display node
1390 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1391 representation for a device node can be used, where applicable.
1395 DevPathToTextHardDrive (
1396 IN OUT POOL_PRINT
*Str
,
1398 IN BOOLEAN DisplayOnly
,
1399 IN BOOLEAN AllowShortcuts
1402 HARDDRIVE_DEVICE_PATH
*Hd
;
1405 switch (Hd
->SignatureType
) {
1406 case SIGNATURE_TYPE_MBR
:
1409 L
"HD(%d,%s,0x%08x,",
1410 (UINTN
) Hd
->PartitionNumber
,
1412 (UINTN
) *((UINT32
*) (&(Hd
->Signature
[0])))
1416 case SIGNATURE_TYPE_GUID
:
1420 (UINTN
) Hd
->PartitionNumber
,
1422 (EFI_GUID
*) &(Hd
->Signature
[0])
1430 (UINTN
) Hd
->PartitionNumber
,
1431 (UINTN
) Hd
->SignatureType
1436 CatPrint (Str
, L
"0x%lx,0x%lx)", Hd
->PartitionStart
, Hd
->PartitionSize
);
1440 Converts a CDROM device path structure to its string representative.
1442 @param Str The string representative of input device.
1443 @param DevPath The input device path structure.
1444 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1445 of the display node is used, where applicable. If DisplayOnly
1446 is FALSE, then the longer text representation of the display node
1448 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1449 representation for a device node can be used, where applicable.
1453 DevPathToTextCDROM (
1454 IN OUT POOL_PRINT
*Str
,
1456 IN BOOLEAN DisplayOnly
,
1457 IN BOOLEAN AllowShortcuts
1460 CDROM_DEVICE_PATH
*Cd
;
1464 CatPrint (Str
, L
"CDROM(0x%x)", (UINTN
) Cd
->BootEntry
);
1468 CatPrint (Str
, L
"CDROM(0x%x,0x%lx,0x%lx)", (UINTN
) Cd
->BootEntry
, Cd
->PartitionStart
, Cd
->PartitionSize
);
1472 Converts a File device path structure to its string representative.
1474 @param Str The string representative of input device.
1475 @param DevPath The input device path structure.
1476 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1477 of the display node is used, where applicable. If DisplayOnly
1478 is FALSE, then the longer text representation of the display node
1480 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1481 representation for a device node can be used, where applicable.
1485 DevPathToTextFilePath (
1486 IN OUT POOL_PRINT
*Str
,
1488 IN BOOLEAN DisplayOnly
,
1489 IN BOOLEAN AllowShortcuts
1492 FILEPATH_DEVICE_PATH
*Fp
;
1495 CatPrint (Str
, L
"%s", Fp
->PathName
);
1499 Converts a Media protocol device path structure to its string representative.
1501 @param Str The string representative of input device.
1502 @param DevPath The input device path structure.
1503 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1504 of the display node is used, where applicable. If DisplayOnly
1505 is FALSE, then the longer text representation of the display node
1507 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1508 representation for a device node can be used, where applicable.
1512 DevPathToTextMediaProtocol (
1513 IN OUT POOL_PRINT
*Str
,
1515 IN BOOLEAN DisplayOnly
,
1516 IN BOOLEAN AllowShortcuts
1519 MEDIA_PROTOCOL_DEVICE_PATH
*MediaProt
;
1521 MediaProt
= DevPath
;
1522 CatPrint (Str
, L
"Media(%g)", &MediaProt
->Protocol
);
1526 Converts a Firmware Volume device path structure to its string representative.
1528 @param Str The string representative of input device.
1529 @param DevPath The input device path structure.
1530 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1531 of the display node is used, where applicable. If DisplayOnly
1532 is FALSE, then the longer text representation of the display node
1534 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1535 representation for a device node can be used, where applicable.
1540 IN OUT POOL_PRINT
*Str
,
1542 IN BOOLEAN DisplayOnly
,
1543 IN BOOLEAN AllowShortcuts
1546 MEDIA_FW_VOL_DEVICE_PATH
*Fv
;
1549 CatPrint (Str
, L
"Fv(%g)", &Fv
->FvName
);
1553 Converts a Firmware Volume File device path structure to its string representative.
1555 @param Str The string representative of input device.
1556 @param DevPath The input device path structure.
1557 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1558 of the display node is used, where applicable. If DisplayOnly
1559 is FALSE, then the longer text representation of the display node
1561 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1562 representation for a device node can be used, where applicable.
1566 DevPathToTextFvFile (
1567 IN OUT POOL_PRINT
*Str
,
1569 IN BOOLEAN DisplayOnly
,
1570 IN BOOLEAN AllowShortcuts
1573 MEDIA_FW_VOL_FILEPATH_DEVICE_PATH
*FvFile
;
1576 CatPrint (Str
, L
"FvFile(%g)", &FvFile
->FvFileName
);
1580 Converts a Relative Offset device path structure to its string representative.
1582 @param Str The string representative of input device.
1583 @param DevPath The input device path structure.
1584 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1585 of the display node is used, where applicable. If DisplayOnly
1586 is FALSE, then the longer text representation of the display node
1588 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1589 representation for a device node can be used, where applicable.
1593 DevPathRelativeOffsetRange (
1594 IN OUT POOL_PRINT
*Str
,
1596 IN BOOLEAN DisplayOnly
,
1597 IN BOOLEAN AllowShortcuts
1600 MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH
*Offset
;
1605 L
"Offset(0x%lx,0x%lx)",
1606 Offset
->StartingOffset
,
1607 Offset
->EndingOffset
1612 Converts a BIOS Boot Specification device path structure to its string representative.
1614 @param Str The string representative of input device.
1615 @param DevPath The input device path structure.
1616 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1617 of the display node is used, where applicable. If DisplayOnly
1618 is FALSE, then the longer text representation of the display node
1620 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1621 representation for a device node can be used, where applicable.
1626 IN OUT POOL_PRINT
*Str
,
1628 IN BOOLEAN DisplayOnly
,
1629 IN BOOLEAN AllowShortcuts
1632 BBS_BBS_DEVICE_PATH
*Bbs
;
1636 switch (Bbs
->DeviceType
) {
1637 case BBS_TYPE_FLOPPY
:
1641 case BBS_TYPE_HARDDRIVE
:
1645 case BBS_TYPE_CDROM
:
1649 case BBS_TYPE_PCMCIA
:
1657 case BBS_TYPE_EMBEDDED_NETWORK
:
1667 CatPrint (Str
, L
"BBS(%s,%a", Type
, Bbs
->String
);
1669 CatPrint (Str
, L
"BBS(0x%x,%a", (UINTN
) Bbs
->DeviceType
, Bbs
->String
);
1673 CatPrint (Str
, L
")");
1677 CatPrint (Str
, L
",0x%x)", (UINTN
) Bbs
->StatusFlag
);
1681 Converts an End-of-Device-Path structure to its string representative.
1683 @param Str The string representative of input device.
1684 @param DevPath The input device path structure.
1685 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1686 of the display node is used, where applicable. If DisplayOnly
1687 is FALSE, then the longer text representation of the display node
1689 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1690 representation for a device node can be used, where applicable.
1694 DevPathToTextEndInstance (
1695 IN OUT POOL_PRINT
*Str
,
1697 IN BOOLEAN DisplayOnly
,
1698 IN BOOLEAN AllowShortcuts
1701 CatPrint (Str
, L
",");
1705 Converts an unknown device path structure to its string representative.
1707 @param Str The string representative of input device.
1708 @param DevPath The input device path structure.
1709 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1710 of the display node is used, where applicable. If DisplayOnly
1711 is FALSE, then the longer text representation of the display node
1713 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1714 representation for a device node can be used, where applicable.
1718 DevPathToTextNodeUnknown (
1719 IN OUT POOL_PRINT
*Str
,
1721 IN BOOLEAN DisplayOnly
,
1722 IN BOOLEAN AllowShortcuts
1725 CatPrint (Str
, L
"?");
1728 GLOBAL_REMOVE_IF_UNREFERENCED
const DEVICE_PATH_TO_TEXT_TABLE DevPathToTextTable
[] = {
1729 {HARDWARE_DEVICE_PATH
, HW_PCI_DP
, DevPathToTextPci
},
1730 {HARDWARE_DEVICE_PATH
, HW_PCCARD_DP
, DevPathToTextPccard
},
1731 {HARDWARE_DEVICE_PATH
, HW_MEMMAP_DP
, DevPathToTextMemMap
},
1732 {HARDWARE_DEVICE_PATH
, HW_VENDOR_DP
, DevPathToTextVendor
},
1733 {HARDWARE_DEVICE_PATH
, HW_CONTROLLER_DP
, DevPathToTextController
},
1734 {ACPI_DEVICE_PATH
, ACPI_DP
, DevPathToTextAcpi
},
1735 {ACPI_DEVICE_PATH
, ACPI_EXTENDED_DP
, DevPathToTextAcpiEx
},
1736 {ACPI_DEVICE_PATH
, ACPI_ADR_DP
, DevPathToTextAcpiAdr
},
1737 {MESSAGING_DEVICE_PATH
, MSG_ATAPI_DP
, DevPathToTextAtapi
},
1738 {MESSAGING_DEVICE_PATH
, MSG_SCSI_DP
, DevPathToTextScsi
},
1739 {MESSAGING_DEVICE_PATH
, MSG_FIBRECHANNEL_DP
, DevPathToTextFibre
},
1740 {MESSAGING_DEVICE_PATH
, MSG_1394_DP
, DevPathToText1394
},
1741 {MESSAGING_DEVICE_PATH
, MSG_USB_DP
, DevPathToTextUsb
},
1742 {MESSAGING_DEVICE_PATH
, MSG_USB_WWID_DP
, DevPathToTextUsbWWID
},
1743 {MESSAGING_DEVICE_PATH
, MSG_DEVICE_LOGICAL_UNIT_DP
, DevPathToTextLogicalUnit
},
1744 {MESSAGING_DEVICE_PATH
, MSG_USB_CLASS_DP
, DevPathToTextUsbClass
},
1745 {MESSAGING_DEVICE_PATH
, MSG_SATA_DP
, DevPathToTextSata
},
1746 {MESSAGING_DEVICE_PATH
, MSG_I2O_DP
, DevPathToTextI2O
},
1747 {MESSAGING_DEVICE_PATH
, MSG_MAC_ADDR_DP
, DevPathToTextMacAddr
},
1748 {MESSAGING_DEVICE_PATH
, MSG_IPv4_DP
, DevPathToTextIPv4
},
1749 {MESSAGING_DEVICE_PATH
, MSG_IPv6_DP
, DevPathToTextIPv6
},
1750 {MESSAGING_DEVICE_PATH
, MSG_INFINIBAND_DP
, DevPathToTextInfiniBand
},
1751 {MESSAGING_DEVICE_PATH
, MSG_UART_DP
, DevPathToTextUart
},
1752 {MESSAGING_DEVICE_PATH
, MSG_VENDOR_DP
, DevPathToTextVendor
},
1753 {MESSAGING_DEVICE_PATH
, MSG_ISCSI_DP
, DevPathToTextiSCSI
},
1754 {MESSAGING_DEVICE_PATH
, MSG_VLAN_DP
, DevPathToTextVlan
},
1755 {MEDIA_DEVICE_PATH
, MEDIA_HARDDRIVE_DP
, DevPathToTextHardDrive
},
1756 {MEDIA_DEVICE_PATH
, MEDIA_CDROM_DP
, DevPathToTextCDROM
},
1757 {MEDIA_DEVICE_PATH
, MEDIA_VENDOR_DP
, DevPathToTextVendor
},
1758 {MEDIA_DEVICE_PATH
, MEDIA_PROTOCOL_DP
, DevPathToTextMediaProtocol
},
1759 {MEDIA_DEVICE_PATH
, MEDIA_FILEPATH_DP
, DevPathToTextFilePath
},
1760 {MEDIA_DEVICE_PATH
, MEDIA_PIWG_FW_VOL_DP
, DevPathToTextFv
},
1761 {MEDIA_DEVICE_PATH
, MEDIA_PIWG_FW_FILE_DP
, DevPathToTextFvFile
},
1762 {MEDIA_DEVICE_PATH
, MEDIA_RELATIVE_OFFSET_RANGE_DP
, DevPathRelativeOffsetRange
},
1763 {BBS_DEVICE_PATH
, BBS_BBS_DP
, DevPathToTextBBS
},
1764 {END_DEVICE_PATH_TYPE
, END_INSTANCE_DEVICE_PATH_SUBTYPE
, DevPathToTextEndInstance
},
1769 Converts a device node to its string representation.
1771 @param DeviceNode A Pointer to the device node to be converted.
1772 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1773 of the display node is used, where applicable. If DisplayOnly
1774 is FALSE, then the longer text representation of the display node
1776 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1777 representation for a device node can be used, where applicable.
1779 @return A pointer to the allocated text representation of the device node or NULL if DeviceNode
1780 is NULL or there was insufficient memory.
1785 ConvertDeviceNodeToText (
1786 IN CONST EFI_DEVICE_PATH_PROTOCOL
*DeviceNode
,
1787 IN BOOLEAN DisplayOnly
,
1788 IN BOOLEAN AllowShortcuts
1794 VOID (*DumpNode
)(POOL_PRINT
*, VOID
*, BOOLEAN
, BOOLEAN
);
1796 if (DeviceNode
== NULL
) {
1800 ZeroMem (&Str
, sizeof (Str
));
1803 // Process the device path node
1806 for (Index
= 0; DevPathToTextTable
[Index
].Function
!= NULL
; Index
++) {
1807 if (DevicePathType (DeviceNode
) == DevPathToTextTable
[Index
].Type
&&
1808 DevicePathSubType (DeviceNode
) == DevPathToTextTable
[Index
].SubType
1810 DumpNode
= DevPathToTextTable
[Index
].Function
;
1815 // If not found, use a generic function
1817 if (DumpNode
== NULL
) {
1818 DumpNode
= DevPathToTextNodeUnknown
;
1824 DumpNode (&Str
, (VOID
*) DeviceNode
, DisplayOnly
, AllowShortcuts
);
1827 // Shrink pool used for string allocation
1829 NewSize
= (Str
.Len
+ 1) * sizeof (CHAR16
);
1830 Str
.Str
= ReallocatePool (NewSize
, NewSize
, Str
.Str
);
1831 ASSERT (Str
.Str
!= NULL
);
1832 Str
.Str
[Str
.Len
] = 0;
1837 Converts a device path to its text representation.
1839 @param DevicePath A Pointer to the device to be converted.
1840 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1841 of the display node is used, where applicable. If DisplayOnly
1842 is FALSE, then the longer text representation of the display node
1844 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1845 representation for a device node can be used, where applicable.
1847 @return A pointer to the allocated text representation of the device path or
1848 NULL if DeviceNode is NULL or there was insufficient memory.
1853 ConvertDevicePathToText (
1854 IN CONST EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
1855 IN BOOLEAN DisplayOnly
,
1856 IN BOOLEAN AllowShortcuts
1860 EFI_DEVICE_PATH_PROTOCOL
*DevPathNode
;
1861 EFI_DEVICE_PATH_PROTOCOL
*AlignedDevPathNode
;
1864 VOID (*DumpNode
) (POOL_PRINT
*, VOID
*, BOOLEAN
, BOOLEAN
);
1866 if (DevicePath
== NULL
) {
1870 ZeroMem (&Str
, sizeof (Str
));
1873 // Process each device path node
1875 DevPathNode
= (EFI_DEVICE_PATH_PROTOCOL
*) DevicePath
;
1876 while (!IsDevicePathEnd (DevPathNode
)) {
1878 // Find the handler to dump this device path node
1881 for (Index
= 0; DevPathToTextTable
[Index
].Function
!= NULL
; Index
+= 1) {
1883 if (DevicePathType (DevPathNode
) == DevPathToTextTable
[Index
].Type
&&
1884 DevicePathSubType (DevPathNode
) == DevPathToTextTable
[Index
].SubType
1886 DumpNode
= DevPathToTextTable
[Index
].Function
;
1891 // If not found, use a generic function
1894 DumpNode
= DevPathToTextNodeUnknown
;
1897 // Put a path separator in if needed
1899 if ((Str
.Len
!= 0) && DumpNode
!= DevPathToTextEndInstance
) {
1900 if (*(Str
.Str
+ Str
.Len
/ sizeof (CHAR16
) - 1) != L
',') {
1901 CatPrint (&Str
, L
"/");
1905 AlignedDevPathNode
= AllocateCopyPool (DevicePathNodeLength (DevPathNode
), DevPathNode
);
1907 // Print this node of the device path
1909 DumpNode (&Str
, AlignedDevPathNode
, DisplayOnly
, AllowShortcuts
);
1910 FreePool (AlignedDevPathNode
);
1913 // Next device path node
1915 DevPathNode
= NextDevicePathNode (DevPathNode
);
1918 NewSize
= (Str
.Len
+ 1) * sizeof (CHAR16
);
1919 Str
.Str
= ReallocatePool (NewSize
, NewSize
, Str
.Str
);
1920 ASSERT (Str
.Str
!= NULL
);
1921 Str
.Str
[Str
.Len
] = 0;