2 DevicePathToText protocol as defined in the UEFI 2.0 specification.
4 Copyright (c) 2013 - 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #include "UefiDevicePathLib.h"
18 Concatenates a formatted unicode string to allocated pool. The caller must
19 free the resulting buffer.
21 @param Str Tracks the allocated pool, size in use, and
22 amount of pool allocated.
23 @param Fmt The format string
24 @param ... Variable arguments based on the format string.
26 @return Allocated buffer with the formatted string printed in it.
27 The caller must free the allocated buffer. The buffer
28 allocation is not packed.
33 UefiDevicePathLibCatPrint (
34 IN OUT POOL_PRINT
*Str
,
43 Count
= SPrintLength (Fmt
, Args
);
45 if ((Str
->Count
+ (Count
+ 1)) * sizeof (CHAR16
) > Str
->Capacity
) {
46 Str
->Capacity
= (Str
->Count
+ (Count
+ 1) * 2) * sizeof (CHAR16
);
47 Str
->Str
= ReallocatePool (
48 Str
->Count
* sizeof (CHAR16
),
52 ASSERT (Str
->Str
!= NULL
);
54 UnicodeVSPrint (&Str
->Str
[Str
->Count
], Str
->Capacity
- Str
->Count
* sizeof (CHAR16
), Fmt
, Args
);
62 Converts a PCI device path structure to its string representative.
64 @param Str The string representative of input device.
65 @param DevPath The input device path structure.
66 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
67 of the display node is used, where applicable. If DisplayOnly
68 is FALSE, then the longer text representation of the display node
70 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
71 representation for a device node can be used, where applicable.
76 IN OUT POOL_PRINT
*Str
,
78 IN BOOLEAN DisplayOnly
,
79 IN BOOLEAN AllowShortcuts
85 UefiDevicePathLibCatPrint (Str
, L
"Pci(0x%x,0x%x)", Pci
->Device
, Pci
->Function
);
89 Converts a PC Card device path structure to its string representative.
91 @param Str The string representative of input device.
92 @param DevPath The input device path structure.
93 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
94 of the display node is used, where applicable. If DisplayOnly
95 is FALSE, then the longer text representation of the display node
97 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
98 representation for a device node can be used, where applicable.
102 DevPathToTextPccard (
103 IN OUT POOL_PRINT
*Str
,
105 IN BOOLEAN DisplayOnly
,
106 IN BOOLEAN AllowShortcuts
109 PCCARD_DEVICE_PATH
*Pccard
;
112 UefiDevicePathLibCatPrint (Str
, L
"PcCard(0x%x)", Pccard
->FunctionNumber
);
116 Converts a Memory Map device path structure to its string representative.
118 @param Str The string representative of input device.
119 @param DevPath The input device path structure.
120 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
121 of the display node is used, where applicable. If DisplayOnly
122 is FALSE, then the longer text representation of the display node
124 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
125 representation for a device node can be used, where applicable.
129 DevPathToTextMemMap (
130 IN OUT POOL_PRINT
*Str
,
132 IN BOOLEAN DisplayOnly
,
133 IN BOOLEAN AllowShortcuts
136 MEMMAP_DEVICE_PATH
*MemMap
;
139 UefiDevicePathLibCatPrint (
141 L
"MemoryMapped(0x%x,0x%lx,0x%lx)",
143 MemMap
->StartingAddress
,
144 MemMap
->EndingAddress
149 Converts a Vendor device path structure to its string representative.
151 @param Str The string representative of input device.
152 @param DevPath The input device path structure.
153 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
154 of the display node is used, where applicable. If DisplayOnly
155 is FALSE, then the longer text representation of the display node
157 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
158 representation for a device node can be used, where applicable.
162 DevPathToTextVendor (
163 IN OUT POOL_PRINT
*Str
,
165 IN BOOLEAN DisplayOnly
,
166 IN BOOLEAN AllowShortcuts
169 VENDOR_DEVICE_PATH
*Vendor
;
173 UINT32 FlowControlMap
;
176 Vendor
= (VENDOR_DEVICE_PATH
*) DevPath
;
177 switch (DevicePathType (&Vendor
->Header
)) {
178 case HARDWARE_DEVICE_PATH
:
182 case MESSAGING_DEVICE_PATH
:
184 if (AllowShortcuts
) {
185 if (CompareGuid (&Vendor
->Guid
, &gEfiPcAnsiGuid
)) {
186 UefiDevicePathLibCatPrint (Str
, L
"VenPcAnsi()");
188 } else if (CompareGuid (&Vendor
->Guid
, &gEfiVT100Guid
)) {
189 UefiDevicePathLibCatPrint (Str
, L
"VenVt100()");
191 } else if (CompareGuid (&Vendor
->Guid
, &gEfiVT100PlusGuid
)) {
192 UefiDevicePathLibCatPrint (Str
, L
"VenVt100Plus()");
194 } else if (CompareGuid (&Vendor
->Guid
, &gEfiVTUTF8Guid
)) {
195 UefiDevicePathLibCatPrint (Str
, L
"VenUft8()");
197 } else if (CompareGuid (&Vendor
->Guid
, &gEfiUartDevicePathGuid
)) {
198 FlowControlMap
= (((UART_FLOW_CONTROL_DEVICE_PATH
*) Vendor
)->FlowControlMap
);
199 switch (FlowControlMap
& 0x00000003) {
201 UefiDevicePathLibCatPrint (Str
, L
"UartFlowCtrl(%s)", L
"None");
205 UefiDevicePathLibCatPrint (Str
, L
"UartFlowCtrl(%s)", L
"Hardware");
209 UefiDevicePathLibCatPrint (Str
, L
"UartFlowCtrl(%s)", L
"XonXoff");
217 } else if (CompareGuid (&Vendor
->Guid
, &gEfiSasDevicePathGuid
)) {
218 UefiDevicePathLibCatPrint (
220 L
"SAS(0x%lx,0x%lx,0x%x,",
221 ((SAS_DEVICE_PATH
*) Vendor
)->SasAddress
,
222 ((SAS_DEVICE_PATH
*) Vendor
)->Lun
,
223 ((SAS_DEVICE_PATH
*) Vendor
)->RelativeTargetPort
225 Info
= (((SAS_DEVICE_PATH
*) Vendor
)->DeviceTopology
);
226 if (((Info
& 0x0f) == 0) && ((Info
& BIT7
) == 0)) {
227 UefiDevicePathLibCatPrint (Str
, L
"NoTopology,0,0,0,");
228 } else if (((Info
& 0x0f) <= 2) && ((Info
& BIT7
) == 0)) {
229 UefiDevicePathLibCatPrint (
232 ((Info
& BIT4
) != 0) ? L
"SATA" : L
"SAS",
233 ((Info
& BIT5
) != 0) ? L
"External" : L
"Internal",
234 ((Info
& BIT6
) != 0) ? L
"Expanded" : L
"Direct"
236 if ((Info
& 0x0f) == 1) {
237 UefiDevicePathLibCatPrint (Str
, L
"0,");
240 // Value 0x0 thru 0xFF -> Drive 1 thru Drive 256
242 UefiDevicePathLibCatPrint (Str
, L
"0x%x,", ((Info
>> 8) & 0xff) + 1);
245 UefiDevicePathLibCatPrint (Str
, L
"0x%x,0,0,0,", Info
);
248 UefiDevicePathLibCatPrint (Str
, L
"0x%x)", ((SAS_DEVICE_PATH
*) Vendor
)->Reserved
);
250 } else if (CompareGuid (&Vendor
->Guid
, &gEfiDebugPortProtocolGuid
)) {
251 UefiDevicePathLibCatPrint (Str
, L
"DebugPort()");
257 case MEDIA_DEVICE_PATH
:
266 DataLength
= DevicePathNodeLength (&Vendor
->Header
) - sizeof (VENDOR_DEVICE_PATH
);
267 UefiDevicePathLibCatPrint (Str
, L
"Ven%s(%g", Type
, &Vendor
->Guid
);
268 if (DataLength
!= 0) {
269 UefiDevicePathLibCatPrint (Str
, L
",");
270 for (Index
= 0; Index
< DataLength
; Index
++) {
271 UefiDevicePathLibCatPrint (Str
, L
"%02x", ((VENDOR_DEVICE_PATH_WITH_DATA
*) Vendor
)->VendorDefinedData
[Index
]);
275 UefiDevicePathLibCatPrint (Str
, L
")");
279 Converts a Controller device path structure to its string representative.
281 @param Str The string representative of input device.
282 @param DevPath The input device path structure.
283 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
284 of the display node is used, where applicable. If DisplayOnly
285 is FALSE, then the longer text representation of the display node
287 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
288 representation for a device node can be used, where applicable.
292 DevPathToTextController (
293 IN OUT POOL_PRINT
*Str
,
295 IN BOOLEAN DisplayOnly
,
296 IN BOOLEAN AllowShortcuts
299 CONTROLLER_DEVICE_PATH
*Controller
;
301 Controller
= DevPath
;
302 UefiDevicePathLibCatPrint (
305 Controller
->ControllerNumber
310 Converts a ACPI device path structure to its string representative.
312 @param Str The string representative of input device.
313 @param DevPath The input device path structure.
314 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
315 of the display node is used, where applicable. If DisplayOnly
316 is FALSE, then the longer text representation of the display node
318 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
319 representation for a device node can be used, where applicable.
324 IN OUT POOL_PRINT
*Str
,
326 IN BOOLEAN DisplayOnly
,
327 IN BOOLEAN AllowShortcuts
330 ACPI_HID_DEVICE_PATH
*Acpi
;
333 if ((Acpi
->HID
& PNP_EISA_ID_MASK
) == PNP_EISA_ID_CONST
) {
334 switch (EISA_ID_TO_NUM (Acpi
->HID
)) {
336 UefiDevicePathLibCatPrint (Str
, L
"PciRoot(0x%x)", Acpi
->UID
);
340 UefiDevicePathLibCatPrint (Str
, L
"PcieRoot(0x%x)", Acpi
->UID
);
344 UefiDevicePathLibCatPrint (Str
, L
"Floppy(0x%x)", Acpi
->UID
);
348 UefiDevicePathLibCatPrint (Str
, L
"Keyboard(0x%x)", Acpi
->UID
);
352 UefiDevicePathLibCatPrint (Str
, L
"Serial(0x%x)", Acpi
->UID
);
356 UefiDevicePathLibCatPrint (Str
, L
"ParallelPort(0x%x)", Acpi
->UID
);
360 UefiDevicePathLibCatPrint (Str
, L
"Acpi(PNP%04x,0x%x)", EISA_ID_TO_NUM (Acpi
->HID
), Acpi
->UID
);
364 UefiDevicePathLibCatPrint (Str
, L
"Acpi(0x%08x,0x%x)", Acpi
->HID
, Acpi
->UID
);
369 Converts a ACPI extended HID device path structure to its string representative.
371 @param Str The string representative of input device.
372 @param DevPath The input device path structure.
373 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
374 of the display node is used, where applicable. If DisplayOnly
375 is FALSE, then the longer text representation of the display node
377 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
378 representation for a device node can be used, where applicable.
382 DevPathToTextAcpiEx (
383 IN OUT POOL_PRINT
*Str
,
385 IN BOOLEAN DisplayOnly
,
386 IN BOOLEAN AllowShortcuts
389 ACPI_EXTENDED_HID_DEVICE_PATH
*AcpiEx
;
397 HIDStr
= (CHAR8
*) (((UINT8
*) AcpiEx
) + sizeof (ACPI_EXTENDED_HID_DEVICE_PATH
));
398 UIDStr
= HIDStr
+ AsciiStrLen (HIDStr
) + 1;
399 CIDStr
= UIDStr
+ AsciiStrLen (UIDStr
) + 1;
402 // Converts EISA identification to string.
408 ((AcpiEx
->HID
>> 10) & 0x1f) + 'A' - 1,
409 ((AcpiEx
->HID
>> 5) & 0x1f) + 'A' - 1,
410 ((AcpiEx
->HID
>> 0) & 0x1f) + 'A' - 1,
411 (AcpiEx
->HID
>> 16) & 0xFFFF
417 ((AcpiEx
->CID
>> 10) & 0x1f) + 'A' - 1,
418 ((AcpiEx
->CID
>> 5) & 0x1f) + 'A' - 1,
419 ((AcpiEx
->CID
>> 0) & 0x1f) + 'A' - 1,
420 (AcpiEx
->CID
>> 16) & 0xFFFF
423 if ((*HIDStr
== '\0') && (*CIDStr
== '\0') && (AcpiEx
->UID
== 0)) {
427 UefiDevicePathLibCatPrint (
429 L
"AcpiExp(%s,%s,%a)",
435 if (AllowShortcuts
) {
439 if (AcpiEx
->HID
== 0) {
440 UefiDevicePathLibCatPrint (Str
, L
"AcpiEx(%a,", HIDStr
);
442 UefiDevicePathLibCatPrint (Str
, L
"AcpiEx(%s,", HIDText
);
445 if (AcpiEx
->UID
== 0) {
446 UefiDevicePathLibCatPrint (Str
, L
"%a,", UIDStr
);
448 UefiDevicePathLibCatPrint (Str
, L
"0x%x,", AcpiEx
->UID
);
451 if (AcpiEx
->CID
== 0) {
452 UefiDevicePathLibCatPrint (Str
, L
"%a)", CIDStr
);
454 UefiDevicePathLibCatPrint (Str
, L
"%s)", CIDText
);
457 UefiDevicePathLibCatPrint (
459 L
"AcpiEx(%s,%s,0x%x,%a,%a,%a)",
472 Converts a ACPI address device path structure to its string representative.
474 @param Str The string representative of input device.
475 @param DevPath The input device path structure.
476 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
477 of the display node is used, where applicable. If DisplayOnly
478 is FALSE, then the longer text representation of the display node
480 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
481 representation for a device node can be used, where applicable.
485 DevPathToTextAcpiAdr (
486 IN OUT POOL_PRINT
*Str
,
488 IN BOOLEAN DisplayOnly
,
489 IN BOOLEAN AllowShortcuts
492 ACPI_ADR_DEVICE_PATH
*AcpiAdr
;
495 UINT16 AdditionalAdrCount
;
498 Length
= (UINT16
) DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL
*) AcpiAdr
);
499 AdditionalAdrCount
= (UINT16
) ((Length
- 8) / 4);
501 UefiDevicePathLibCatPrint (Str
, L
"AcpiAdr(0x%x", AcpiAdr
->ADR
);
502 for (Index
= 0; Index
< AdditionalAdrCount
; Index
++) {
503 UefiDevicePathLibCatPrint (Str
, L
",0x%x", *(UINT32
*) ((UINT8
*) AcpiAdr
+ 8 + Index
* 4));
505 UefiDevicePathLibCatPrint (Str
, L
")");
509 Converts a ATAPI device path structure to its string representative.
511 @param Str The string representative of input device.
512 @param DevPath The input device path structure.
513 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
514 of the display node is used, where applicable. If DisplayOnly
515 is FALSE, then the longer text representation of the display node
517 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
518 representation for a device node can be used, where applicable.
523 IN OUT POOL_PRINT
*Str
,
525 IN BOOLEAN DisplayOnly
,
526 IN BOOLEAN AllowShortcuts
529 ATAPI_DEVICE_PATH
*Atapi
;
534 UefiDevicePathLibCatPrint (Str
, L
"Ata(0x%x)", Atapi
->Lun
);
536 UefiDevicePathLibCatPrint (
539 (Atapi
->PrimarySecondary
== 1) ? L
"Secondary" : L
"Primary",
540 (Atapi
->SlaveMaster
== 1) ? L
"Slave" : L
"Master",
547 Converts a SCSI device path structure to its string representative.
549 @param Str The string representative of input device.
550 @param DevPath The input device path structure.
551 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
552 of the display node is used, where applicable. If DisplayOnly
553 is FALSE, then the longer text representation of the display node
555 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
556 representation for a device node can be used, where applicable.
561 IN OUT POOL_PRINT
*Str
,
563 IN BOOLEAN DisplayOnly
,
564 IN BOOLEAN AllowShortcuts
567 SCSI_DEVICE_PATH
*Scsi
;
570 UefiDevicePathLibCatPrint (Str
, L
"Scsi(0x%x,0x%x)", Scsi
->Pun
, Scsi
->Lun
);
574 Converts a Fibre device path structure to its string representative.
576 @param Str The string representative of input device.
577 @param DevPath The input device path structure.
578 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
579 of the display node is used, where applicable. If DisplayOnly
580 is FALSE, then the longer text representation of the display node
582 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
583 representation for a device node can be used, where applicable.
588 IN OUT POOL_PRINT
*Str
,
590 IN BOOLEAN DisplayOnly
,
591 IN BOOLEAN AllowShortcuts
594 FIBRECHANNEL_DEVICE_PATH
*Fibre
;
597 UefiDevicePathLibCatPrint (Str
, L
"Fibre(0x%lx,0x%lx)", Fibre
->WWN
, Fibre
->Lun
);
601 Converts a FibreEx device path structure to its string representative.
603 @param Str The string representative of input device.
604 @param DevPath The input device path structure.
605 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
606 of the display node is used, where applicable. If DisplayOnly
607 is FALSE, then the longer text representation of the display node
609 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
610 representation for a device node can be used, where applicable.
614 DevPathToTextFibreEx (
615 IN OUT POOL_PRINT
*Str
,
617 IN BOOLEAN DisplayOnly
,
618 IN BOOLEAN AllowShortcuts
621 FIBRECHANNELEX_DEVICE_PATH
*FibreEx
;
625 UefiDevicePathLibCatPrint (Str
, L
"FibreEx(0x");
626 for (Index
= 0; Index
< sizeof (FibreEx
->WWN
) / sizeof (FibreEx
->WWN
[0]); Index
++) {
627 UefiDevicePathLibCatPrint (Str
, L
"%02x", FibreEx
->WWN
[Index
]);
629 UefiDevicePathLibCatPrint (Str
, L
",0x");
630 for (Index
= 0; Index
< sizeof (FibreEx
->Lun
) / sizeof (FibreEx
->Lun
[0]); Index
++) {
631 UefiDevicePathLibCatPrint (Str
, L
"%02x", FibreEx
->Lun
[Index
]);
633 UefiDevicePathLibCatPrint (Str
, L
")");
637 Converts a Sas Ex device path structure to its string representative.
639 @param Str The string representative of input device.
640 @param DevPath The input device path structure.
641 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
642 of the display node is used, where applicable. If DisplayOnly
643 is FALSE, then the longer text representation of the display node
645 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
646 representation for a device node can be used, where applicable.
651 IN OUT POOL_PRINT
*Str
,
653 IN BOOLEAN DisplayOnly
,
654 IN BOOLEAN AllowShortcuts
657 SASEX_DEVICE_PATH
*SasEx
;
661 UefiDevicePathLibCatPrint (Str
, L
"SasEx(0x");
663 for (Index
= 0; Index
< sizeof (SasEx
->SasAddress
) / sizeof (SasEx
->SasAddress
[0]); Index
++) {
664 UefiDevicePathLibCatPrint (Str
, L
"%02x", SasEx
->SasAddress
[Index
]);
666 UefiDevicePathLibCatPrint (Str
, L
",0x");
667 for (Index
= 0; Index
< sizeof (SasEx
->Lun
) / sizeof (SasEx
->Lun
[0]); Index
++) {
668 UefiDevicePathLibCatPrint (Str
, L
"%02x", SasEx
->Lun
[Index
]);
670 UefiDevicePathLibCatPrint (Str
, L
",0x%x,", SasEx
->RelativeTargetPort
);
672 if (((SasEx
->DeviceTopology
& 0x0f) == 0) && ((SasEx
->DeviceTopology
& BIT7
) == 0)) {
673 UefiDevicePathLibCatPrint (Str
, L
"NoTopology,0,0,0");
674 } else if (((SasEx
->DeviceTopology
& 0x0f) <= 2) && ((SasEx
->DeviceTopology
& BIT7
) == 0)) {
675 UefiDevicePathLibCatPrint (
678 ((SasEx
->DeviceTopology
& BIT4
) != 0) ? L
"SATA" : L
"SAS",
679 ((SasEx
->DeviceTopology
& BIT5
) != 0) ? L
"External" : L
"Internal",
680 ((SasEx
->DeviceTopology
& BIT6
) != 0) ? L
"Expanded" : L
"Direct"
682 if ((SasEx
->DeviceTopology
& 0x0f) == 1) {
683 UefiDevicePathLibCatPrint (Str
, L
"0");
686 // Value 0x0 thru 0xFF -> Drive 1 thru Drive 256
688 UefiDevicePathLibCatPrint (Str
, L
"0x%x", ((SasEx
->DeviceTopology
>> 8) & 0xff) + 1);
691 UefiDevicePathLibCatPrint (Str
, L
"0x%x,0,0,0", SasEx
->DeviceTopology
);
694 UefiDevicePathLibCatPrint (Str
, L
")");
700 Converts a NVM Express Namespace device path structure to its string representative.
702 @param Str The string representative of input device.
703 @param DevPath The input device path structure.
704 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
705 of the display node is used, where applicable. If DisplayOnly
706 is FALSE, then the longer text representation of the display node
708 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
709 representation for a device node can be used, where applicable.
714 IN OUT POOL_PRINT
*Str
,
716 IN BOOLEAN DisplayOnly
,
717 IN BOOLEAN AllowShortcuts
720 NVME_NAMESPACE_DEVICE_PATH
*Nvme
;
724 Uuid
= (UINT8
*) &Nvme
->NamespaceUuid
;
725 UefiDevicePathLibCatPrint (
727 L
"NVMe(0x%x,%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)",
729 Uuid
[7], Uuid
[6], Uuid
[5], Uuid
[4],
730 Uuid
[3], Uuid
[2], Uuid
[1], Uuid
[0]
735 Converts a UFS device path structure to its string representative.
737 @param Str The string representative of input device.
738 @param DevPath The input device path structure.
739 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
740 of the display node is used, where applicable. If DisplayOnly
741 is FALSE, then the longer text representation of the display node
743 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
744 representation for a device node can be used, where applicable.
749 IN OUT POOL_PRINT
*Str
,
751 IN BOOLEAN DisplayOnly
,
752 IN BOOLEAN AllowShortcuts
755 UFS_DEVICE_PATH
*Ufs
;
758 UefiDevicePathLibCatPrint (Str
, L
"UFS(0x%x,0x%x)", Ufs
->Pun
, Ufs
->Lun
);
762 Converts a 1394 device path structure to its string representative.
764 @param Str The string representative of input device.
765 @param DevPath The input device path structure.
766 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
767 of the display node is used, where applicable. If DisplayOnly
768 is FALSE, then the longer text representation of the display node
770 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
771 representation for a device node can be used, where applicable.
776 IN OUT POOL_PRINT
*Str
,
778 IN BOOLEAN DisplayOnly
,
779 IN BOOLEAN AllowShortcuts
782 F1394_DEVICE_PATH
*F1394DevPath
;
784 F1394DevPath
= DevPath
;
786 // Guid has format of IEEE-EUI64
788 UefiDevicePathLibCatPrint (Str
, L
"I1394(%016lx)", F1394DevPath
->Guid
);
792 Converts a USB device path structure to its string representative.
794 @param Str The string representative of input device.
795 @param DevPath The input device path structure.
796 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
797 of the display node is used, where applicable. If DisplayOnly
798 is FALSE, then the longer text representation of the display node
800 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
801 representation for a device node can be used, where applicable.
806 IN OUT POOL_PRINT
*Str
,
808 IN BOOLEAN DisplayOnly
,
809 IN BOOLEAN AllowShortcuts
812 USB_DEVICE_PATH
*Usb
;
815 UefiDevicePathLibCatPrint (Str
, L
"USB(0x%x,0x%x)", Usb
->ParentPortNumber
, Usb
->InterfaceNumber
);
819 Converts a USB WWID device path structure to its string representative.
821 @param Str The string representative of input device.
822 @param DevPath The input device path structure.
823 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
824 of the display node is used, where applicable. If DisplayOnly
825 is FALSE, then the longer text representation of the display node
827 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
828 representation for a device node can be used, where applicable.
832 DevPathToTextUsbWWID (
833 IN OUT POOL_PRINT
*Str
,
835 IN BOOLEAN DisplayOnly
,
836 IN BOOLEAN AllowShortcuts
839 USB_WWID_DEVICE_PATH
*UsbWWId
;
840 CHAR16
*SerialNumberStr
;
846 SerialNumberStr
= (CHAR16
*) ((UINT8
*) UsbWWId
+ sizeof (USB_WWID_DEVICE_PATH
));
847 Length
= (UINT16
) ((DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL
*) UsbWWId
) - sizeof (USB_WWID_DEVICE_PATH
)) / sizeof (CHAR16
));
848 if (SerialNumberStr
[Length
- 1] != 0) {
850 // In case no NULL terminator in SerialNumber, create a new one with NULL terminator
852 NewStr
= AllocateCopyPool ((Length
+ 1) * sizeof (CHAR16
), SerialNumberStr
);
853 ASSERT (NewStr
!= NULL
);
855 SerialNumberStr
= NewStr
;
858 UefiDevicePathLibCatPrint (
860 L
"UsbWwid(0x%x,0x%x,0x%x,\"%s\")",
863 UsbWWId
->InterfaceNumber
,
869 Converts a Logic Unit device path structure to its string representative.
871 @param Str The string representative of input device.
872 @param DevPath The input device path structure.
873 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
874 of the display node is used, where applicable. If DisplayOnly
875 is FALSE, then the longer text representation of the display node
877 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
878 representation for a device node can be used, where applicable.
882 DevPathToTextLogicalUnit (
883 IN OUT POOL_PRINT
*Str
,
885 IN BOOLEAN DisplayOnly
,
886 IN BOOLEAN AllowShortcuts
889 DEVICE_LOGICAL_UNIT_DEVICE_PATH
*LogicalUnit
;
891 LogicalUnit
= DevPath
;
892 UefiDevicePathLibCatPrint (Str
, L
"Unit(0x%x)", LogicalUnit
->Lun
);
896 Converts a USB class device path structure to its string representative.
898 @param Str The string representative of input device.
899 @param DevPath The input device path structure.
900 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
901 of the display node is used, where applicable. If DisplayOnly
902 is FALSE, then the longer text representation of the display node
904 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
905 representation for a device node can be used, where applicable.
909 DevPathToTextUsbClass (
910 IN OUT POOL_PRINT
*Str
,
912 IN BOOLEAN DisplayOnly
,
913 IN BOOLEAN AllowShortcuts
916 USB_CLASS_DEVICE_PATH
*UsbClass
;
917 BOOLEAN IsKnownSubClass
;
922 IsKnownSubClass
= TRUE
;
923 switch (UsbClass
->DeviceClass
) {
924 case USB_CLASS_AUDIO
:
925 UefiDevicePathLibCatPrint (Str
, L
"UsbAudio");
928 case USB_CLASS_CDCCONTROL
:
929 UefiDevicePathLibCatPrint (Str
, L
"UsbCDCControl");
933 UefiDevicePathLibCatPrint (Str
, L
"UsbHID");
936 case USB_CLASS_IMAGE
:
937 UefiDevicePathLibCatPrint (Str
, L
"UsbImage");
940 case USB_CLASS_PRINTER
:
941 UefiDevicePathLibCatPrint (Str
, L
"UsbPrinter");
944 case USB_CLASS_MASS_STORAGE
:
945 UefiDevicePathLibCatPrint (Str
, L
"UsbMassStorage");
949 UefiDevicePathLibCatPrint (Str
, L
"UsbHub");
952 case USB_CLASS_CDCDATA
:
953 UefiDevicePathLibCatPrint (Str
, L
"UsbCDCData");
956 case USB_CLASS_SMART_CARD
:
957 UefiDevicePathLibCatPrint (Str
, L
"UsbSmartCard");
960 case USB_CLASS_VIDEO
:
961 UefiDevicePathLibCatPrint (Str
, L
"UsbVideo");
964 case USB_CLASS_DIAGNOSTIC
:
965 UefiDevicePathLibCatPrint (Str
, L
"UsbDiagnostic");
968 case USB_CLASS_WIRELESS
:
969 UefiDevicePathLibCatPrint (Str
, L
"UsbWireless");
973 IsKnownSubClass
= FALSE
;
977 if (IsKnownSubClass
) {
978 UefiDevicePathLibCatPrint (
980 L
"(0x%x,0x%x,0x%x,0x%x)",
983 UsbClass
->DeviceSubClass
,
984 UsbClass
->DeviceProtocol
989 if (UsbClass
->DeviceClass
== USB_CLASS_RESERVE
) {
990 if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_FW_UPDATE
) {
991 UefiDevicePathLibCatPrint (
993 L
"UsbDeviceFirmwareUpdate(0x%x,0x%x,0x%x)",
996 UsbClass
->DeviceProtocol
999 } else if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_IRDA_BRIDGE
) {
1000 UefiDevicePathLibCatPrint (
1002 L
"UsbIrdaBridge(0x%x,0x%x,0x%x)",
1004 UsbClass
->ProductId
,
1005 UsbClass
->DeviceProtocol
1008 } else if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_TEST
) {
1009 UefiDevicePathLibCatPrint (
1011 L
"UsbTestAndMeasurement(0x%x,0x%x,0x%x)",
1013 UsbClass
->ProductId
,
1014 UsbClass
->DeviceProtocol
1020 UefiDevicePathLibCatPrint (
1022 L
"UsbClass(0x%x,0x%x,0x%x,0x%x,0x%x)",
1024 UsbClass
->ProductId
,
1025 UsbClass
->DeviceClass
,
1026 UsbClass
->DeviceSubClass
,
1027 UsbClass
->DeviceProtocol
1032 Converts a SATA device path structure to its string representative.
1034 @param Str The string representative of input device.
1035 @param DevPath The input device path structure.
1036 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1037 of the display node is used, where applicable. If DisplayOnly
1038 is FALSE, then the longer text representation of the display node
1040 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1041 representation for a device node can be used, where applicable.
1046 IN OUT POOL_PRINT
*Str
,
1048 IN BOOLEAN DisplayOnly
,
1049 IN BOOLEAN AllowShortcuts
1052 SATA_DEVICE_PATH
*Sata
;
1055 UefiDevicePathLibCatPrint (
1057 L
"Sata(0x%x,0x%x,0x%x)",
1058 Sata
->HBAPortNumber
,
1059 Sata
->PortMultiplierPortNumber
,
1065 Converts a I20 device path structure to its string representative.
1067 @param Str The string representative of input device.
1068 @param DevPath The input device path structure.
1069 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1070 of the display node is used, where applicable. If DisplayOnly
1071 is FALSE, then the longer text representation of the display node
1073 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1074 representation for a device node can be used, where applicable.
1079 IN OUT POOL_PRINT
*Str
,
1081 IN BOOLEAN DisplayOnly
,
1082 IN BOOLEAN AllowShortcuts
1085 I2O_DEVICE_PATH
*I2ODevPath
;
1087 I2ODevPath
= DevPath
;
1088 UefiDevicePathLibCatPrint (Str
, L
"I2O(0x%x)", I2ODevPath
->Tid
);
1092 Converts a MAC address device path structure to its string representative.
1094 @param Str The string representative of input device.
1095 @param DevPath The input device path structure.
1096 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1097 of the display node is used, where applicable. If DisplayOnly
1098 is FALSE, then the longer text representation of the display node
1100 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1101 representation for a device node can be used, where applicable.
1105 DevPathToTextMacAddr (
1106 IN OUT POOL_PRINT
*Str
,
1108 IN BOOLEAN DisplayOnly
,
1109 IN BOOLEAN AllowShortcuts
1112 MAC_ADDR_DEVICE_PATH
*MacDevPath
;
1113 UINTN HwAddressSize
;
1116 MacDevPath
= DevPath
;
1118 HwAddressSize
= sizeof (EFI_MAC_ADDRESS
);
1119 if (MacDevPath
->IfType
== 0x01 || MacDevPath
->IfType
== 0x00) {
1123 UefiDevicePathLibCatPrint (Str
, L
"MAC(");
1125 for (Index
= 0; Index
< HwAddressSize
; Index
++) {
1126 UefiDevicePathLibCatPrint (Str
, L
"%02x", MacDevPath
->MacAddress
.Addr
[Index
]);
1129 UefiDevicePathLibCatPrint (Str
, L
",0x%x)", MacDevPath
->IfType
);
1133 Converts network protocol string to its text representation.
1135 @param Str The string representative of input device.
1136 @param Protocol The network protocol ID.
1140 CatNetworkProtocol (
1141 IN OUT POOL_PRINT
*Str
,
1145 if (Protocol
== RFC_1700_TCP_PROTOCOL
) {
1146 UefiDevicePathLibCatPrint (Str
, L
"TCP");
1147 } else if (Protocol
== RFC_1700_UDP_PROTOCOL
) {
1148 UefiDevicePathLibCatPrint (Str
, L
"UDP");
1150 UefiDevicePathLibCatPrint (Str
, L
"0x%x", Protocol
);
1155 Converts IP v4 address to its text representation.
1157 @param Str The string representative of input device.
1158 @param Address The IP v4 address.
1162 IN OUT POOL_PRINT
*Str
,
1163 IN EFI_IPv4_ADDRESS
*Address
1166 UefiDevicePathLibCatPrint (Str
, L
"%d.%d.%d.%d", Address
->Addr
[0], Address
->Addr
[1], Address
->Addr
[2], Address
->Addr
[3]);
1170 Converts IP v6 address to its text representation.
1172 @param Str The string representative of input device.
1173 @param Address The IP v6 address.
1177 IN OUT POOL_PRINT
*Str
,
1178 IN EFI_IPv6_ADDRESS
*Address
1181 UefiDevicePathLibCatPrint (
1182 Str
, L
"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
1183 Address
->Addr
[0], Address
->Addr
[1],
1184 Address
->Addr
[2], Address
->Addr
[3],
1185 Address
->Addr
[4], Address
->Addr
[5],
1186 Address
->Addr
[6], Address
->Addr
[7],
1187 Address
->Addr
[8], Address
->Addr
[9],
1188 Address
->Addr
[10], Address
->Addr
[11],
1189 Address
->Addr
[12], Address
->Addr
[13],
1190 Address
->Addr
[14], Address
->Addr
[15]
1195 Converts a IPv4 device path structure to its string representative.
1197 @param Str The string representative of input device.
1198 @param DevPath The input device path structure.
1199 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1200 of the display node is used, where applicable. If DisplayOnly
1201 is FALSE, then the longer text representation of the display node
1203 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1204 representation for a device node can be used, where applicable.
1209 IN OUT POOL_PRINT
*Str
,
1211 IN BOOLEAN DisplayOnly
,
1212 IN BOOLEAN AllowShortcuts
1215 IPv4_DEVICE_PATH
*IPDevPath
;
1217 IPDevPath
= DevPath
;
1218 UefiDevicePathLibCatPrint (Str
, L
"IPv4(");
1219 CatIPv4Address (Str
, &IPDevPath
->RemoteIpAddress
);
1222 UefiDevicePathLibCatPrint (Str
, L
")");
1226 UefiDevicePathLibCatPrint (Str
, L
",");
1227 CatNetworkProtocol (Str
, IPDevPath
->Protocol
);
1229 UefiDevicePathLibCatPrint (Str
, L
",%s,", IPDevPath
->StaticIpAddress
? L
"Static" : L
"DHCP");
1230 CatIPv4Address (Str
, &IPDevPath
->LocalIpAddress
);
1231 if (DevicePathNodeLength (IPDevPath
) == sizeof (IPv4_DEVICE_PATH
)) {
1232 UefiDevicePathLibCatPrint (Str
, L
",");
1233 CatIPv4Address (Str
, &IPDevPath
->GatewayIpAddress
);
1234 UefiDevicePathLibCatPrint (Str
, L
",");
1235 CatIPv4Address (Str
, &IPDevPath
->SubnetMask
);
1237 UefiDevicePathLibCatPrint (Str
, L
")");
1241 Converts a IPv6 device path structure to its string representative.
1243 @param Str The string representative of input device.
1244 @param DevPath The input device path structure.
1245 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1246 of the display node is used, where applicable. If DisplayOnly
1247 is FALSE, then the longer text representation of the display node
1249 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1250 representation for a device node can be used, where applicable.
1255 IN OUT POOL_PRINT
*Str
,
1257 IN BOOLEAN DisplayOnly
,
1258 IN BOOLEAN AllowShortcuts
1261 IPv6_DEVICE_PATH
*IPDevPath
;
1263 IPDevPath
= DevPath
;
1264 UefiDevicePathLibCatPrint (Str
, L
"IPv6(");
1265 CatIPv6Address (Str
, &IPDevPath
->RemoteIpAddress
);
1267 UefiDevicePathLibCatPrint (Str
, L
")");
1271 UefiDevicePathLibCatPrint (Str
, L
",");
1272 CatNetworkProtocol (Str
, IPDevPath
->Protocol
);
1274 switch (IPDevPath
->IpAddressOrigin
) {
1276 UefiDevicePathLibCatPrint (Str
, L
",Static,");
1279 UefiDevicePathLibCatPrint (Str
, L
",StatelessAutoConfigure,");
1282 UefiDevicePathLibCatPrint (Str
, L
",StatefulAutoConfigure,");
1286 CatIPv6Address (Str
, &IPDevPath
->LocalIpAddress
);
1288 if (DevicePathNodeLength (IPDevPath
) == sizeof (IPv6_DEVICE_PATH
)) {
1289 UefiDevicePathLibCatPrint (Str
, L
",0x%x,", IPDevPath
->PrefixLength
);
1290 CatIPv6Address (Str
, &IPDevPath
->GatewayIpAddress
);
1292 UefiDevicePathLibCatPrint (Str
, L
")");
1296 Converts an Infini Band device path structure to its string representative.
1298 @param Str The string representative of input device.
1299 @param DevPath The input device path structure.
1300 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1301 of the display node is used, where applicable. If DisplayOnly
1302 is FALSE, then the longer text representation of the display node
1304 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1305 representation for a device node can be used, where applicable.
1309 DevPathToTextInfiniBand (
1310 IN OUT POOL_PRINT
*Str
,
1312 IN BOOLEAN DisplayOnly
,
1313 IN BOOLEAN AllowShortcuts
1316 INFINIBAND_DEVICE_PATH
*InfiniBand
;
1318 InfiniBand
= DevPath
;
1319 UefiDevicePathLibCatPrint (
1321 L
"Infiniband(0x%x,%g,0x%lx,0x%lx,0x%lx)",
1322 InfiniBand
->ResourceFlags
,
1323 InfiniBand
->PortGid
,
1324 InfiniBand
->ServiceId
,
1325 InfiniBand
->TargetPortId
,
1326 InfiniBand
->DeviceId
1331 Converts a UART device path structure to its string representative.
1333 @param Str The string representative of input device.
1334 @param DevPath The input device path structure.
1335 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1336 of the display node is used, where applicable. If DisplayOnly
1337 is FALSE, then the longer text representation of the display node
1339 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1340 representation for a device node can be used, where applicable.
1345 IN OUT POOL_PRINT
*Str
,
1347 IN BOOLEAN DisplayOnly
,
1348 IN BOOLEAN AllowShortcuts
1351 UART_DEVICE_PATH
*Uart
;
1355 switch (Uart
->Parity
) {
1385 if (Uart
->BaudRate
== 0) {
1386 UefiDevicePathLibCatPrint (Str
, L
"Uart(DEFAULT,");
1388 UefiDevicePathLibCatPrint (Str
, L
"Uart(%ld,", Uart
->BaudRate
);
1391 if (Uart
->DataBits
== 0) {
1392 UefiDevicePathLibCatPrint (Str
, L
"DEFAULT,");
1394 UefiDevicePathLibCatPrint (Str
, L
"%d,", Uart
->DataBits
);
1397 UefiDevicePathLibCatPrint (Str
, L
"%c,", Parity
);
1399 switch (Uart
->StopBits
) {
1401 UefiDevicePathLibCatPrint (Str
, L
"D)");
1405 UefiDevicePathLibCatPrint (Str
, L
"1)");
1409 UefiDevicePathLibCatPrint (Str
, L
"1.5)");
1413 UefiDevicePathLibCatPrint (Str
, L
"2)");
1417 UefiDevicePathLibCatPrint (Str
, L
"x)");
1423 Converts an iSCSI device path structure to its string representative.
1425 @param Str The string representative of input device.
1426 @param DevPath The input device path structure.
1427 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1428 of the display node is used, where applicable. If DisplayOnly
1429 is FALSE, then the longer text representation of the display node
1431 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1432 representation for a device node can be used, where applicable.
1436 DevPathToTextiSCSI (
1437 IN OUT POOL_PRINT
*Str
,
1439 IN BOOLEAN DisplayOnly
,
1440 IN BOOLEAN AllowShortcuts
1443 ISCSI_DEVICE_PATH_WITH_NAME
*ISCSIDevPath
;
1446 ISCSIDevPath
= DevPath
;
1447 UefiDevicePathLibCatPrint (
1449 L
"iSCSI(%a,0x%x,0x%lx,",
1450 ISCSIDevPath
->TargetName
,
1451 ISCSIDevPath
->TargetPortalGroupTag
,
1455 Options
= ISCSIDevPath
->LoginOption
;
1456 UefiDevicePathLibCatPrint (Str
, L
"%s,", (((Options
>> 1) & 0x0001) != 0) ? L
"CRC32C" : L
"None");
1457 UefiDevicePathLibCatPrint (Str
, L
"%s,", (((Options
>> 3) & 0x0001) != 0) ? L
"CRC32C" : L
"None");
1458 if (((Options
>> 11) & 0x0001) != 0) {
1459 UefiDevicePathLibCatPrint (Str
, L
"%s,", L
"None");
1460 } else if (((Options
>> 12) & 0x0001) != 0) {
1461 UefiDevicePathLibCatPrint (Str
, L
"%s,", L
"CHAP_UNI");
1463 UefiDevicePathLibCatPrint (Str
, L
"%s,", L
"CHAP_BI");
1467 UefiDevicePathLibCatPrint (Str
, L
"%s)", (ISCSIDevPath
->NetworkProtocol
== 0) ? L
"TCP" : L
"reserved");
1471 Converts a VLAN device path structure to its string representative.
1473 @param Str The string representative of input device.
1474 @param DevPath The input device path structure.
1475 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1476 of the display node is used, where applicable. If DisplayOnly
1477 is FALSE, then the longer text representation of the display node
1479 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1480 representation for a device node can be used, where applicable.
1485 IN OUT POOL_PRINT
*Str
,
1487 IN BOOLEAN DisplayOnly
,
1488 IN BOOLEAN AllowShortcuts
1491 VLAN_DEVICE_PATH
*Vlan
;
1494 UefiDevicePathLibCatPrint (Str
, L
"Vlan(%d)", Vlan
->VlanId
);
1498 Converts a Bluetooth device path structure to its string representative.
1500 @param Str The string representative of input device.
1501 @param DevPath The input device path structure.
1502 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1503 of the display node is used, where applicable. If DisplayOnly
1504 is FALSE, then the longer text representation of the display node
1506 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1507 representation for a device node can be used, where applicable.
1511 DevPathToTextBluetooth (
1512 IN OUT POOL_PRINT
*Str
,
1514 IN BOOLEAN DisplayOnly
,
1515 IN BOOLEAN AllowShortcuts
1518 BLUETOOTH_DEVICE_PATH
*Bluetooth
;
1520 Bluetooth
= DevPath
;
1521 UefiDevicePathLibCatPrint (
1523 L
"Bluetooth(%02x:%02x:%02x:%02x:%02x:%02x)",
1524 Bluetooth
->BD_ADDR
.Address
[5],
1525 Bluetooth
->BD_ADDR
.Address
[4],
1526 Bluetooth
->BD_ADDR
.Address
[3],
1527 Bluetooth
->BD_ADDR
.Address
[2],
1528 Bluetooth
->BD_ADDR
.Address
[1],
1529 Bluetooth
->BD_ADDR
.Address
[0]
1534 Converts a URI device path structure to its string representative.
1536 @param Str The string representative of input device.
1537 @param DevPath The input device path structure.
1538 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1539 of the display node is used, where applicable. If DisplayOnly
1540 is FALSE, then the longer text representation of the display node
1542 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1543 representation for a device node can be used, where applicable.
1548 IN OUT POOL_PRINT
*Str
,
1550 IN BOOLEAN DisplayOnly
,
1551 IN BOOLEAN AllowShortcuts
1554 URI_DEVICE_PATH
*Uri
;
1559 // Uri in the device path may not be null terminated.
1562 UriLength
= DevicePathNodeLength (Uri
) - sizeof (URI_DEVICE_PATH
);
1563 UriStr
= AllocatePool (UriLength
+ 1);
1564 ASSERT (UriStr
!= NULL
);
1566 CopyMem (UriStr
, Uri
->Uri
, UriLength
);
1567 UriStr
[UriLength
] = '\0';
1568 UefiDevicePathLibCatPrint (Str
, L
"Uri(%a)", UriStr
);
1573 Converts a Hard drive device path structure to its string representative.
1575 @param Str The string representative of input device.
1576 @param DevPath The input device path structure.
1577 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1578 of the display node is used, where applicable. If DisplayOnly
1579 is FALSE, then the longer text representation of the display node
1581 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1582 representation for a device node can be used, where applicable.
1586 DevPathToTextHardDrive (
1587 IN OUT POOL_PRINT
*Str
,
1589 IN BOOLEAN DisplayOnly
,
1590 IN BOOLEAN AllowShortcuts
1593 HARDDRIVE_DEVICE_PATH
*Hd
;
1596 switch (Hd
->SignatureType
) {
1597 case SIGNATURE_TYPE_MBR
:
1598 UefiDevicePathLibCatPrint (
1600 L
"HD(%d,%s,0x%08x,",
1601 Hd
->PartitionNumber
,
1603 *((UINT32
*) (&(Hd
->Signature
[0])))
1607 case SIGNATURE_TYPE_GUID
:
1608 UefiDevicePathLibCatPrint (
1611 Hd
->PartitionNumber
,
1613 (EFI_GUID
*) &(Hd
->Signature
[0])
1618 UefiDevicePathLibCatPrint (
1621 Hd
->PartitionNumber
,
1627 UefiDevicePathLibCatPrint (Str
, L
"0x%lx,0x%lx)", Hd
->PartitionStart
, Hd
->PartitionSize
);
1631 Converts a CDROM device path structure to its string representative.
1633 @param Str The string representative of input device.
1634 @param DevPath The input device path structure.
1635 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1636 of the display node is used, where applicable. If DisplayOnly
1637 is FALSE, then the longer text representation of the display node
1639 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1640 representation for a device node can be used, where applicable.
1644 DevPathToTextCDROM (
1645 IN OUT POOL_PRINT
*Str
,
1647 IN BOOLEAN DisplayOnly
,
1648 IN BOOLEAN AllowShortcuts
1651 CDROM_DEVICE_PATH
*Cd
;
1655 UefiDevicePathLibCatPrint (Str
, L
"CDROM(0x%x)", Cd
->BootEntry
);
1659 UefiDevicePathLibCatPrint (Str
, L
"CDROM(0x%x,0x%lx,0x%lx)", Cd
->BootEntry
, Cd
->PartitionStart
, Cd
->PartitionSize
);
1663 Converts a File device path structure to its string representative.
1665 @param Str The string representative of input device.
1666 @param DevPath The input device path structure.
1667 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1668 of the display node is used, where applicable. If DisplayOnly
1669 is FALSE, then the longer text representation of the display node
1671 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1672 representation for a device node can be used, where applicable.
1676 DevPathToTextFilePath (
1677 IN OUT POOL_PRINT
*Str
,
1679 IN BOOLEAN DisplayOnly
,
1680 IN BOOLEAN AllowShortcuts
1683 FILEPATH_DEVICE_PATH
*Fp
;
1686 UefiDevicePathLibCatPrint (Str
, L
"%s", Fp
->PathName
);
1690 Converts a Media protocol device path structure to its string representative.
1692 @param Str The string representative of input device.
1693 @param DevPath The input device path structure.
1694 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1695 of the display node is used, where applicable. If DisplayOnly
1696 is FALSE, then the longer text representation of the display node
1698 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1699 representation for a device node can be used, where applicable.
1703 DevPathToTextMediaProtocol (
1704 IN OUT POOL_PRINT
*Str
,
1706 IN BOOLEAN DisplayOnly
,
1707 IN BOOLEAN AllowShortcuts
1710 MEDIA_PROTOCOL_DEVICE_PATH
*MediaProt
;
1712 MediaProt
= DevPath
;
1713 UefiDevicePathLibCatPrint (Str
, L
"Media(%g)", &MediaProt
->Protocol
);
1717 Converts a Firmware Volume device path structure to its string representative.
1719 @param Str The string representative of input device.
1720 @param DevPath The input device path structure.
1721 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1722 of the display node is used, where applicable. If DisplayOnly
1723 is FALSE, then the longer text representation of the display node
1725 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1726 representation for a device node can be used, where applicable.
1731 IN OUT POOL_PRINT
*Str
,
1733 IN BOOLEAN DisplayOnly
,
1734 IN BOOLEAN AllowShortcuts
1737 MEDIA_FW_VOL_DEVICE_PATH
*Fv
;
1740 UefiDevicePathLibCatPrint (Str
, L
"Fv(%g)", &Fv
->FvName
);
1744 Converts a Firmware Volume File device path structure to its string representative.
1746 @param Str The string representative of input device.
1747 @param DevPath The input device path structure.
1748 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1749 of the display node is used, where applicable. If DisplayOnly
1750 is FALSE, then the longer text representation of the display node
1752 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1753 representation for a device node can be used, where applicable.
1757 DevPathToTextFvFile (
1758 IN OUT POOL_PRINT
*Str
,
1760 IN BOOLEAN DisplayOnly
,
1761 IN BOOLEAN AllowShortcuts
1764 MEDIA_FW_VOL_FILEPATH_DEVICE_PATH
*FvFile
;
1767 UefiDevicePathLibCatPrint (Str
, L
"FvFile(%g)", &FvFile
->FvFileName
);
1771 Converts a Relative Offset device path structure to its string representative.
1773 @param Str The string representative of input device.
1774 @param DevPath The input device path structure.
1775 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1776 of the display node is used, where applicable. If DisplayOnly
1777 is FALSE, then the longer text representation of the display node
1779 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1780 representation for a device node can be used, where applicable.
1784 DevPathRelativeOffsetRange (
1785 IN OUT POOL_PRINT
*Str
,
1787 IN BOOLEAN DisplayOnly
,
1788 IN BOOLEAN AllowShortcuts
1791 MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH
*Offset
;
1794 UefiDevicePathLibCatPrint (
1796 L
"Offset(0x%lx,0x%lx)",
1797 Offset
->StartingOffset
,
1798 Offset
->EndingOffset
1803 Converts a BIOS Boot Specification device path structure to its string representative.
1805 @param Str The string representative of input device.
1806 @param DevPath The input device path structure.
1807 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1808 of the display node is used, where applicable. If DisplayOnly
1809 is FALSE, then the longer text representation of the display node
1811 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1812 representation for a device node can be used, where applicable.
1817 IN OUT POOL_PRINT
*Str
,
1819 IN BOOLEAN DisplayOnly
,
1820 IN BOOLEAN AllowShortcuts
1823 BBS_BBS_DEVICE_PATH
*Bbs
;
1827 switch (Bbs
->DeviceType
) {
1828 case BBS_TYPE_FLOPPY
:
1832 case BBS_TYPE_HARDDRIVE
:
1836 case BBS_TYPE_CDROM
:
1840 case BBS_TYPE_PCMCIA
:
1848 case BBS_TYPE_EMBEDDED_NETWORK
:
1858 UefiDevicePathLibCatPrint (Str
, L
"BBS(%s,%a", Type
, Bbs
->String
);
1860 UefiDevicePathLibCatPrint (Str
, L
"BBS(0x%x,%a", Bbs
->DeviceType
, Bbs
->String
);
1864 UefiDevicePathLibCatPrint (Str
, L
")");
1868 UefiDevicePathLibCatPrint (Str
, L
",0x%x)", Bbs
->StatusFlag
);
1872 Converts an End-of-Device-Path structure to its string representative.
1874 @param Str The string representative of input device.
1875 @param DevPath The input device path structure.
1876 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1877 of the display node is used, where applicable. If DisplayOnly
1878 is FALSE, then the longer text representation of the display node
1880 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1881 representation for a device node can be used, where applicable.
1885 DevPathToTextEndInstance (
1886 IN OUT POOL_PRINT
*Str
,
1888 IN BOOLEAN DisplayOnly
,
1889 IN BOOLEAN AllowShortcuts
1892 UefiDevicePathLibCatPrint (Str
, L
",");
1895 GLOBAL_REMOVE_IF_UNREFERENCED
const DEVICE_PATH_TO_TEXT_GENERIC_TABLE mUefiDevicePathLibToTextTableGeneric
[] = {
1896 {HARDWARE_DEVICE_PATH
, L
"HardwarePath" },
1897 {ACPI_DEVICE_PATH
, L
"AcpiPath" },
1898 {MESSAGING_DEVICE_PATH
, L
"Msg" },
1899 {MEDIA_DEVICE_PATH
, L
"MediaPath" },
1900 {BBS_DEVICE_PATH
, L
"BbsPath" },
1905 Converts an unknown device path structure to its string representative.
1907 @param Str The string representative of input device.
1908 @param DevPath The input device path structure.
1909 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1910 of the display node is used, where applicable. If DisplayOnly
1911 is FALSE, then the longer text representation of the display node
1913 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1914 representation for a device node can be used, where applicable.
1918 DevPathToTextNodeGeneric (
1919 IN OUT POOL_PRINT
*Str
,
1921 IN BOOLEAN DisplayOnly
,
1922 IN BOOLEAN AllowShortcuts
1925 EFI_DEVICE_PATH_PROTOCOL
*Node
;
1930 for (Index
= 0; mUefiDevicePathLibToTextTableGeneric
[Index
].Text
!= NULL
; Index
++) {
1931 if (DevicePathType (Node
) == mUefiDevicePathLibToTextTableGeneric
[Index
].Type
) {
1936 if (mUefiDevicePathLibToTextTableGeneric
[Index
].Text
== NULL
) {
1938 // It's a node whose type cannot be recognized
1940 UefiDevicePathLibCatPrint (Str
, L
"Path(%d,%d", DevicePathType (Node
), DevicePathSubType (Node
));
1943 // It's a node whose type can be recognized
1945 UefiDevicePathLibCatPrint (Str
, L
"%s(%d", mUefiDevicePathLibToTextTableGeneric
[Index
].Text
, DevicePathSubType (Node
));
1948 Index
= sizeof (EFI_DEVICE_PATH_PROTOCOL
);
1949 if (Index
< DevicePathNodeLength (Node
)) {
1950 UefiDevicePathLibCatPrint (Str
, L
",");
1951 for (; Index
< DevicePathNodeLength (Node
); Index
++) {
1952 UefiDevicePathLibCatPrint (Str
, L
"%02x", ((UINT8
*) Node
)[Index
]);
1956 UefiDevicePathLibCatPrint (Str
, L
")");
1959 GLOBAL_REMOVE_IF_UNREFERENCED
const DEVICE_PATH_TO_TEXT_TABLE mUefiDevicePathLibToTextTable
[] = {
1960 {HARDWARE_DEVICE_PATH
, HW_PCI_DP
, DevPathToTextPci
},
1961 {HARDWARE_DEVICE_PATH
, HW_PCCARD_DP
, DevPathToTextPccard
},
1962 {HARDWARE_DEVICE_PATH
, HW_MEMMAP_DP
, DevPathToTextMemMap
},
1963 {HARDWARE_DEVICE_PATH
, HW_VENDOR_DP
, DevPathToTextVendor
},
1964 {HARDWARE_DEVICE_PATH
, HW_CONTROLLER_DP
, DevPathToTextController
},
1965 {ACPI_DEVICE_PATH
, ACPI_DP
, DevPathToTextAcpi
},
1966 {ACPI_DEVICE_PATH
, ACPI_EXTENDED_DP
, DevPathToTextAcpiEx
},
1967 {ACPI_DEVICE_PATH
, ACPI_ADR_DP
, DevPathToTextAcpiAdr
},
1968 {MESSAGING_DEVICE_PATH
, MSG_ATAPI_DP
, DevPathToTextAtapi
},
1969 {MESSAGING_DEVICE_PATH
, MSG_SCSI_DP
, DevPathToTextScsi
},
1970 {MESSAGING_DEVICE_PATH
, MSG_FIBRECHANNEL_DP
, DevPathToTextFibre
},
1971 {MESSAGING_DEVICE_PATH
, MSG_FIBRECHANNELEX_DP
, DevPathToTextFibreEx
},
1972 {MESSAGING_DEVICE_PATH
, MSG_SASEX_DP
, DevPathToTextSasEx
},
1973 {MESSAGING_DEVICE_PATH
, MSG_NVME_NAMESPACE_DP
, DevPathToTextNVMe
},
1974 {MESSAGING_DEVICE_PATH
, MSG_UFS_DP
, DevPathToTextUfs
},
1975 {MESSAGING_DEVICE_PATH
, MSG_1394_DP
, DevPathToText1394
},
1976 {MESSAGING_DEVICE_PATH
, MSG_USB_DP
, DevPathToTextUsb
},
1977 {MESSAGING_DEVICE_PATH
, MSG_USB_WWID_DP
, DevPathToTextUsbWWID
},
1978 {MESSAGING_DEVICE_PATH
, MSG_DEVICE_LOGICAL_UNIT_DP
, DevPathToTextLogicalUnit
},
1979 {MESSAGING_DEVICE_PATH
, MSG_USB_CLASS_DP
, DevPathToTextUsbClass
},
1980 {MESSAGING_DEVICE_PATH
, MSG_SATA_DP
, DevPathToTextSata
},
1981 {MESSAGING_DEVICE_PATH
, MSG_I2O_DP
, DevPathToTextI2O
},
1982 {MESSAGING_DEVICE_PATH
, MSG_MAC_ADDR_DP
, DevPathToTextMacAddr
},
1983 {MESSAGING_DEVICE_PATH
, MSG_IPv4_DP
, DevPathToTextIPv4
},
1984 {MESSAGING_DEVICE_PATH
, MSG_IPv6_DP
, DevPathToTextIPv6
},
1985 {MESSAGING_DEVICE_PATH
, MSG_INFINIBAND_DP
, DevPathToTextInfiniBand
},
1986 {MESSAGING_DEVICE_PATH
, MSG_UART_DP
, DevPathToTextUart
},
1987 {MESSAGING_DEVICE_PATH
, MSG_VENDOR_DP
, DevPathToTextVendor
},
1988 {MESSAGING_DEVICE_PATH
, MSG_ISCSI_DP
, DevPathToTextiSCSI
},
1989 {MESSAGING_DEVICE_PATH
, MSG_VLAN_DP
, DevPathToTextVlan
},
1990 {MESSAGING_DEVICE_PATH
, MSG_URI_DP
, DevPathToTextUri
},
1991 {MESSAGING_DEVICE_PATH
, MSG_BLUETOOTH_DP
, DevPathToTextBluetooth
},
1992 {MEDIA_DEVICE_PATH
, MEDIA_HARDDRIVE_DP
, DevPathToTextHardDrive
},
1993 {MEDIA_DEVICE_PATH
, MEDIA_CDROM_DP
, DevPathToTextCDROM
},
1994 {MEDIA_DEVICE_PATH
, MEDIA_VENDOR_DP
, DevPathToTextVendor
},
1995 {MEDIA_DEVICE_PATH
, MEDIA_PROTOCOL_DP
, DevPathToTextMediaProtocol
},
1996 {MEDIA_DEVICE_PATH
, MEDIA_FILEPATH_DP
, DevPathToTextFilePath
},
1997 {MEDIA_DEVICE_PATH
, MEDIA_PIWG_FW_VOL_DP
, DevPathToTextFv
},
1998 {MEDIA_DEVICE_PATH
, MEDIA_PIWG_FW_FILE_DP
, DevPathToTextFvFile
},
1999 {MEDIA_DEVICE_PATH
, MEDIA_RELATIVE_OFFSET_RANGE_DP
, DevPathRelativeOffsetRange
},
2000 {BBS_DEVICE_PATH
, BBS_BBS_DP
, DevPathToTextBBS
},
2001 {END_DEVICE_PATH_TYPE
, END_INSTANCE_DEVICE_PATH_SUBTYPE
, DevPathToTextEndInstance
},
2006 Converts a device node to its string representation.
2008 @param DeviceNode A Pointer to the device node to be converted.
2009 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
2010 of the display node is used, where applicable. If DisplayOnly
2011 is FALSE, then the longer text representation of the display node
2013 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
2014 representation for a device node can be used, where applicable.
2016 @return A pointer to the allocated text representation of the device node or NULL if DeviceNode
2017 is NULL or there was insufficient memory.
2022 UefiDevicePathLibConvertDeviceNodeToText (
2023 IN CONST EFI_DEVICE_PATH_PROTOCOL
*DeviceNode
,
2024 IN BOOLEAN DisplayOnly
,
2025 IN BOOLEAN AllowShortcuts
2030 DEVICE_PATH_TO_TEXT ToText
;
2032 if (DeviceNode
== NULL
) {
2036 ZeroMem (&Str
, sizeof (Str
));
2039 // Process the device path node
2040 // If not found, use a generic function
2042 ToText
= DevPathToTextNodeGeneric
;
2043 for (Index
= 0; mUefiDevicePathLibToTextTable
[Index
].Function
!= NULL
; Index
++) {
2044 if (DevicePathType (DeviceNode
) == mUefiDevicePathLibToTextTable
[Index
].Type
&&
2045 DevicePathSubType (DeviceNode
) == mUefiDevicePathLibToTextTable
[Index
].SubType
2047 ToText
= mUefiDevicePathLibToTextTable
[Index
].Function
;
2055 ToText (&Str
, (VOID
*) DeviceNode
, DisplayOnly
, AllowShortcuts
);
2057 ASSERT (Str
.Str
!= NULL
);
2062 Converts a device path to its text representation.
2064 @param DevicePath A Pointer to the device to be converted.
2065 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
2066 of the display node is used, where applicable. If DisplayOnly
2067 is FALSE, then the longer text representation of the display node
2069 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
2070 representation for a device node can be used, where applicable.
2072 @return A pointer to the allocated text representation of the device path or
2073 NULL if DeviceNode is NULL or there was insufficient memory.
2078 UefiDevicePathLibConvertDevicePathToText (
2079 IN CONST EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
2080 IN BOOLEAN DisplayOnly
,
2081 IN BOOLEAN AllowShortcuts
2085 EFI_DEVICE_PATH_PROTOCOL
*Node
;
2086 EFI_DEVICE_PATH_PROTOCOL
*AlignedNode
;
2088 DEVICE_PATH_TO_TEXT ToText
;
2090 if (DevicePath
== NULL
) {
2094 ZeroMem (&Str
, sizeof (Str
));
2097 // Process each device path node
2099 Node
= (EFI_DEVICE_PATH_PROTOCOL
*) DevicePath
;
2100 while (!IsDevicePathEnd (Node
)) {
2102 // Find the handler to dump this device path node
2103 // If not found, use a generic function
2105 ToText
= DevPathToTextNodeGeneric
;
2106 for (Index
= 0; mUefiDevicePathLibToTextTable
[Index
].Function
!= NULL
; Index
+= 1) {
2108 if (DevicePathType (Node
) == mUefiDevicePathLibToTextTable
[Index
].Type
&&
2109 DevicePathSubType (Node
) == mUefiDevicePathLibToTextTable
[Index
].SubType
2111 ToText
= mUefiDevicePathLibToTextTable
[Index
].Function
;
2116 // Put a path separator in if needed
2118 if ((Str
.Count
!= 0) && (ToText
!= DevPathToTextEndInstance
)) {
2119 if (Str
.Str
[Str
.Count
] != L
',') {
2120 UefiDevicePathLibCatPrint (&Str
, L
"/");
2124 AlignedNode
= AllocateCopyPool (DevicePathNodeLength (Node
), Node
);
2126 // Print this node of the device path
2128 ToText (&Str
, AlignedNode
, DisplayOnly
, AllowShortcuts
);
2129 FreePool (AlignedNode
);
2132 // Next device path node
2134 Node
= NextDevicePathNode (Node
);
2137 if (Str
.Str
== NULL
) {
2138 return AllocateZeroPool (sizeof (CHAR16
));