2 DevicePathToText protocol as defined in the UEFI 2.0 specification.
4 Copyright (c) 2013, 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 1394 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 F1394_DEVICE_PATH
*F1394DevPath
;
722 F1394DevPath
= DevPath
;
724 // Guid has format of IEEE-EUI64
726 UefiDevicePathLibCatPrint (Str
, L
"I1394(%016lx)", F1394DevPath
->Guid
);
730 Converts a USB device path structure to its string representative.
732 @param Str The string representative of input device.
733 @param DevPath The input device path structure.
734 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
735 of the display node is used, where applicable. If DisplayOnly
736 is FALSE, then the longer text representation of the display node
738 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
739 representation for a device node can be used, where applicable.
744 IN OUT POOL_PRINT
*Str
,
746 IN BOOLEAN DisplayOnly
,
747 IN BOOLEAN AllowShortcuts
750 USB_DEVICE_PATH
*Usb
;
753 UefiDevicePathLibCatPrint (Str
, L
"USB(0x%x,0x%x)", Usb
->ParentPortNumber
, Usb
->InterfaceNumber
);
757 Converts a USB WWID device path structure to its string representative.
759 @param Str The string representative of input device.
760 @param DevPath The input device path structure.
761 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
762 of the display node is used, where applicable. If DisplayOnly
763 is FALSE, then the longer text representation of the display node
765 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
766 representation for a device node can be used, where applicable.
770 DevPathToTextUsbWWID (
771 IN OUT POOL_PRINT
*Str
,
773 IN BOOLEAN DisplayOnly
,
774 IN BOOLEAN AllowShortcuts
777 USB_WWID_DEVICE_PATH
*UsbWWId
;
778 CHAR16
*SerialNumberStr
;
784 SerialNumberStr
= (CHAR16
*) ((UINT8
*) UsbWWId
+ sizeof (USB_WWID_DEVICE_PATH
));
785 Length
= (UINT16
) ((DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL
*) UsbWWId
) - sizeof (USB_WWID_DEVICE_PATH
)) / sizeof (CHAR16
));
786 if (SerialNumberStr
[Length
- 1] != 0) {
788 // In case no NULL terminator in SerialNumber, create a new one with NULL terminator
790 NewStr
= AllocateCopyPool ((Length
+ 1) * sizeof (CHAR16
), SerialNumberStr
);
791 ASSERT (NewStr
!= NULL
);
793 SerialNumberStr
= NewStr
;
796 UefiDevicePathLibCatPrint (
798 L
"UsbWwid(0x%x,0x%x,0x%x,\"%s\")",
801 UsbWWId
->InterfaceNumber
,
807 Converts a Logic Unit device path structure to its string representative.
809 @param Str The string representative of input device.
810 @param DevPath The input device path structure.
811 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
812 of the display node is used, where applicable. If DisplayOnly
813 is FALSE, then the longer text representation of the display node
815 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
816 representation for a device node can be used, where applicable.
820 DevPathToTextLogicalUnit (
821 IN OUT POOL_PRINT
*Str
,
823 IN BOOLEAN DisplayOnly
,
824 IN BOOLEAN AllowShortcuts
827 DEVICE_LOGICAL_UNIT_DEVICE_PATH
*LogicalUnit
;
829 LogicalUnit
= DevPath
;
830 UefiDevicePathLibCatPrint (Str
, L
"Unit(0x%x)", LogicalUnit
->Lun
);
834 Converts a USB class device path structure to its string representative.
836 @param Str The string representative of input device.
837 @param DevPath The input device path structure.
838 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
839 of the display node is used, where applicable. If DisplayOnly
840 is FALSE, then the longer text representation of the display node
842 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
843 representation for a device node can be used, where applicable.
847 DevPathToTextUsbClass (
848 IN OUT POOL_PRINT
*Str
,
850 IN BOOLEAN DisplayOnly
,
851 IN BOOLEAN AllowShortcuts
854 USB_CLASS_DEVICE_PATH
*UsbClass
;
855 BOOLEAN IsKnownSubClass
;
860 IsKnownSubClass
= TRUE
;
861 switch (UsbClass
->DeviceClass
) {
862 case USB_CLASS_AUDIO
:
863 UefiDevicePathLibCatPrint (Str
, L
"UsbAudio");
866 case USB_CLASS_CDCCONTROL
:
867 UefiDevicePathLibCatPrint (Str
, L
"UsbCDCControl");
871 UefiDevicePathLibCatPrint (Str
, L
"UsbHID");
874 case USB_CLASS_IMAGE
:
875 UefiDevicePathLibCatPrint (Str
, L
"UsbImage");
878 case USB_CLASS_PRINTER
:
879 UefiDevicePathLibCatPrint (Str
, L
"UsbPrinter");
882 case USB_CLASS_MASS_STORAGE
:
883 UefiDevicePathLibCatPrint (Str
, L
"UsbMassStorage");
887 UefiDevicePathLibCatPrint (Str
, L
"UsbHub");
890 case USB_CLASS_CDCDATA
:
891 UefiDevicePathLibCatPrint (Str
, L
"UsbCDCData");
894 case USB_CLASS_SMART_CARD
:
895 UefiDevicePathLibCatPrint (Str
, L
"UsbSmartCard");
898 case USB_CLASS_VIDEO
:
899 UefiDevicePathLibCatPrint (Str
, L
"UsbVideo");
902 case USB_CLASS_DIAGNOSTIC
:
903 UefiDevicePathLibCatPrint (Str
, L
"UsbDiagnostic");
906 case USB_CLASS_WIRELESS
:
907 UefiDevicePathLibCatPrint (Str
, L
"UsbWireless");
911 IsKnownSubClass
= FALSE
;
915 if (IsKnownSubClass
) {
916 UefiDevicePathLibCatPrint (
918 L
"(0x%x,0x%x,0x%x,0x%x)",
921 UsbClass
->DeviceSubClass
,
922 UsbClass
->DeviceProtocol
927 if (UsbClass
->DeviceClass
== USB_CLASS_RESERVE
) {
928 if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_FW_UPDATE
) {
929 UefiDevicePathLibCatPrint (
931 L
"UsbDeviceFirmwareUpdate(0x%x,0x%x,0x%x)",
934 UsbClass
->DeviceProtocol
937 } else if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_IRDA_BRIDGE
) {
938 UefiDevicePathLibCatPrint (
940 L
"UsbIrdaBridge(0x%x,0x%x,0x%x)",
943 UsbClass
->DeviceProtocol
946 } else if (UsbClass
->DeviceSubClass
== USB_SUBCLASS_TEST
) {
947 UefiDevicePathLibCatPrint (
949 L
"UsbTestAndMeasurement(0x%x,0x%x,0x%x)",
952 UsbClass
->DeviceProtocol
958 UefiDevicePathLibCatPrint (
960 L
"UsbClass(0x%x,0x%x,0x%x,0x%x,0x%x)",
963 UsbClass
->DeviceClass
,
964 UsbClass
->DeviceSubClass
,
965 UsbClass
->DeviceProtocol
970 Converts a SATA device path structure to its string representative.
972 @param Str The string representative of input device.
973 @param DevPath The input device path structure.
974 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
975 of the display node is used, where applicable. If DisplayOnly
976 is FALSE, then the longer text representation of the display node
978 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
979 representation for a device node can be used, where applicable.
984 IN OUT POOL_PRINT
*Str
,
986 IN BOOLEAN DisplayOnly
,
987 IN BOOLEAN AllowShortcuts
990 SATA_DEVICE_PATH
*Sata
;
993 UefiDevicePathLibCatPrint (
995 L
"Sata(0x%x,0x%x,0x%x)",
997 Sata
->PortMultiplierPortNumber
,
1003 Converts a I20 device path structure to its string representative.
1005 @param Str The string representative of input device.
1006 @param DevPath The input device path structure.
1007 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1008 of the display node is used, where applicable. If DisplayOnly
1009 is FALSE, then the longer text representation of the display node
1011 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1012 representation for a device node can be used, where applicable.
1017 IN OUT POOL_PRINT
*Str
,
1019 IN BOOLEAN DisplayOnly
,
1020 IN BOOLEAN AllowShortcuts
1023 I2O_DEVICE_PATH
*I2ODevPath
;
1025 I2ODevPath
= DevPath
;
1026 UefiDevicePathLibCatPrint (Str
, L
"I2O(0x%x)", I2ODevPath
->Tid
);
1030 Converts a MAC address device path structure to its string representative.
1032 @param Str The string representative of input device.
1033 @param DevPath The input device path structure.
1034 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1035 of the display node is used, where applicable. If DisplayOnly
1036 is FALSE, then the longer text representation of the display node
1038 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1039 representation for a device node can be used, where applicable.
1043 DevPathToTextMacAddr (
1044 IN OUT POOL_PRINT
*Str
,
1046 IN BOOLEAN DisplayOnly
,
1047 IN BOOLEAN AllowShortcuts
1050 MAC_ADDR_DEVICE_PATH
*MacDevPath
;
1051 UINTN HwAddressSize
;
1054 MacDevPath
= DevPath
;
1056 HwAddressSize
= sizeof (EFI_MAC_ADDRESS
);
1057 if (MacDevPath
->IfType
== 0x01 || MacDevPath
->IfType
== 0x00) {
1061 UefiDevicePathLibCatPrint (Str
, L
"MAC(");
1063 for (Index
= 0; Index
< HwAddressSize
; Index
++) {
1064 UefiDevicePathLibCatPrint (Str
, L
"%02x", MacDevPath
->MacAddress
.Addr
[Index
]);
1067 UefiDevicePathLibCatPrint (Str
, L
",0x%x)", MacDevPath
->IfType
);
1071 Converts network protocol string to its text representation.
1073 @param Str The string representative of input device.
1074 @param Protocol The network protocol ID.
1078 CatNetworkProtocol (
1079 IN OUT POOL_PRINT
*Str
,
1083 if (Protocol
== RFC_1700_TCP_PROTOCOL
) {
1084 UefiDevicePathLibCatPrint (Str
, L
"TCP");
1085 } else if (Protocol
== RFC_1700_UDP_PROTOCOL
) {
1086 UefiDevicePathLibCatPrint (Str
, L
"UDP");
1088 UefiDevicePathLibCatPrint (Str
, L
"0x%x", Protocol
);
1093 Converts IP v4 address to its text representation.
1095 @param Str The string representative of input device.
1096 @param Address The IP v4 address.
1100 IN OUT POOL_PRINT
*Str
,
1101 IN EFI_IPv4_ADDRESS
*Address
1104 UefiDevicePathLibCatPrint (Str
, L
"%d.%d.%d.%d", Address
->Addr
[0], Address
->Addr
[1], Address
->Addr
[2], Address
->Addr
[3]);
1108 Converts IP v6 address to its text representation.
1110 @param Str The string representative of input device.
1111 @param Address The IP v6 address.
1115 IN OUT POOL_PRINT
*Str
,
1116 IN EFI_IPv6_ADDRESS
*Address
1119 UefiDevicePathLibCatPrint (
1120 Str
, L
"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
1121 Address
->Addr
[0], Address
->Addr
[1],
1122 Address
->Addr
[2], Address
->Addr
[3],
1123 Address
->Addr
[4], Address
->Addr
[5],
1124 Address
->Addr
[6], Address
->Addr
[7],
1125 Address
->Addr
[8], Address
->Addr
[9],
1126 Address
->Addr
[10], Address
->Addr
[11],
1127 Address
->Addr
[12], Address
->Addr
[13],
1128 Address
->Addr
[14], Address
->Addr
[15]
1133 Converts a IPv4 device path structure to its string representative.
1135 @param Str The string representative of input device.
1136 @param DevPath The input device path structure.
1137 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1138 of the display node is used, where applicable. If DisplayOnly
1139 is FALSE, then the longer text representation of the display node
1141 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1142 representation for a device node can be used, where applicable.
1147 IN OUT POOL_PRINT
*Str
,
1149 IN BOOLEAN DisplayOnly
,
1150 IN BOOLEAN AllowShortcuts
1153 IPv4_DEVICE_PATH
*IPDevPath
;
1155 IPDevPath
= DevPath
;
1156 UefiDevicePathLibCatPrint (Str
, L
"IPv4(");
1157 CatIPv4Address (Str
, &IPDevPath
->RemoteIpAddress
);
1160 UefiDevicePathLibCatPrint (Str
, L
")");
1164 UefiDevicePathLibCatPrint (Str
, L
",");
1165 CatNetworkProtocol (Str
, IPDevPath
->Protocol
);
1167 UefiDevicePathLibCatPrint (Str
, L
",%s,", IPDevPath
->StaticIpAddress
? L
"Static" : L
"DHCP");
1168 CatIPv4Address (Str
, &IPDevPath
->LocalIpAddress
);
1169 if (DevicePathNodeLength (IPDevPath
) == sizeof (IPv4_DEVICE_PATH
)) {
1170 UefiDevicePathLibCatPrint (Str
, L
",");
1171 CatIPv4Address (Str
, &IPDevPath
->GatewayIpAddress
);
1172 UefiDevicePathLibCatPrint (Str
, L
",");
1173 CatIPv4Address (Str
, &IPDevPath
->SubnetMask
);
1175 UefiDevicePathLibCatPrint (Str
, L
")");
1179 Converts a IPv6 device path structure to its string representative.
1181 @param Str The string representative of input device.
1182 @param DevPath The input device path structure.
1183 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1184 of the display node is used, where applicable. If DisplayOnly
1185 is FALSE, then the longer text representation of the display node
1187 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1188 representation for a device node can be used, where applicable.
1193 IN OUT POOL_PRINT
*Str
,
1195 IN BOOLEAN DisplayOnly
,
1196 IN BOOLEAN AllowShortcuts
1199 IPv6_DEVICE_PATH
*IPDevPath
;
1201 IPDevPath
= DevPath
;
1202 UefiDevicePathLibCatPrint (Str
, L
"IPv6(");
1203 CatIPv6Address (Str
, &IPDevPath
->RemoteIpAddress
);
1205 UefiDevicePathLibCatPrint (Str
, L
")");
1209 UefiDevicePathLibCatPrint (Str
, L
",");
1210 CatNetworkProtocol (Str
, IPDevPath
->Protocol
);
1212 switch (IPDevPath
->IpAddressOrigin
) {
1214 UefiDevicePathLibCatPrint (Str
, L
",Static,");
1217 UefiDevicePathLibCatPrint (Str
, L
",StatelessAutoConfigure,");
1220 UefiDevicePathLibCatPrint (Str
, L
",StatefulAutoConfigure,");
1224 CatIPv6Address (Str
, &IPDevPath
->LocalIpAddress
);
1226 if (DevicePathNodeLength (IPDevPath
) == sizeof (IPv6_DEVICE_PATH
)) {
1227 UefiDevicePathLibCatPrint (Str
, L
",0x%x,", IPDevPath
->PrefixLength
);
1228 CatIPv6Address (Str
, &IPDevPath
->GatewayIpAddress
);
1230 UefiDevicePathLibCatPrint (Str
, L
")");
1234 Converts an Infini Band device path structure to its string representative.
1236 @param Str The string representative of input device.
1237 @param DevPath The input device path structure.
1238 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1239 of the display node is used, where applicable. If DisplayOnly
1240 is FALSE, then the longer text representation of the display node
1242 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1243 representation for a device node can be used, where applicable.
1247 DevPathToTextInfiniBand (
1248 IN OUT POOL_PRINT
*Str
,
1250 IN BOOLEAN DisplayOnly
,
1251 IN BOOLEAN AllowShortcuts
1254 INFINIBAND_DEVICE_PATH
*InfiniBand
;
1256 InfiniBand
= DevPath
;
1257 UefiDevicePathLibCatPrint (
1259 L
"Infiniband(0x%x,%g,0x%lx,0x%lx,0x%lx)",
1260 InfiniBand
->ResourceFlags
,
1261 InfiniBand
->PortGid
,
1262 InfiniBand
->ServiceId
,
1263 InfiniBand
->TargetPortId
,
1264 InfiniBand
->DeviceId
1269 Converts a UART device path structure to its string representative.
1271 @param Str The string representative of input device.
1272 @param DevPath The input device path structure.
1273 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1274 of the display node is used, where applicable. If DisplayOnly
1275 is FALSE, then the longer text representation of the display node
1277 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1278 representation for a device node can be used, where applicable.
1283 IN OUT POOL_PRINT
*Str
,
1285 IN BOOLEAN DisplayOnly
,
1286 IN BOOLEAN AllowShortcuts
1289 UART_DEVICE_PATH
*Uart
;
1293 switch (Uart
->Parity
) {
1323 if (Uart
->BaudRate
== 0) {
1324 UefiDevicePathLibCatPrint (Str
, L
"Uart(DEFAULT,");
1326 UefiDevicePathLibCatPrint (Str
, L
"Uart(%ld,", Uart
->BaudRate
);
1329 if (Uart
->DataBits
== 0) {
1330 UefiDevicePathLibCatPrint (Str
, L
"DEFAULT,");
1332 UefiDevicePathLibCatPrint (Str
, L
"%d,", Uart
->DataBits
);
1335 UefiDevicePathLibCatPrint (Str
, L
"%c,", Parity
);
1337 switch (Uart
->StopBits
) {
1339 UefiDevicePathLibCatPrint (Str
, L
"D)");
1343 UefiDevicePathLibCatPrint (Str
, L
"1)");
1347 UefiDevicePathLibCatPrint (Str
, L
"1.5)");
1351 UefiDevicePathLibCatPrint (Str
, L
"2)");
1355 UefiDevicePathLibCatPrint (Str
, L
"x)");
1361 Converts an iSCSI device path structure to its string representative.
1363 @param Str The string representative of input device.
1364 @param DevPath The input device path structure.
1365 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1366 of the display node is used, where applicable. If DisplayOnly
1367 is FALSE, then the longer text representation of the display node
1369 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1370 representation for a device node can be used, where applicable.
1374 DevPathToTextiSCSI (
1375 IN OUT POOL_PRINT
*Str
,
1377 IN BOOLEAN DisplayOnly
,
1378 IN BOOLEAN AllowShortcuts
1381 ISCSI_DEVICE_PATH_WITH_NAME
*ISCSIDevPath
;
1384 ISCSIDevPath
= DevPath
;
1385 UefiDevicePathLibCatPrint (
1387 L
"iSCSI(%a,0x%x,0x%lx,",
1388 ISCSIDevPath
->TargetName
,
1389 ISCSIDevPath
->TargetPortalGroupTag
,
1393 Options
= ISCSIDevPath
->LoginOption
;
1394 UefiDevicePathLibCatPrint (Str
, L
"%s,", (((Options
>> 1) & 0x0001) != 0) ? L
"CRC32C" : L
"None");
1395 UefiDevicePathLibCatPrint (Str
, L
"%s,", (((Options
>> 3) & 0x0001) != 0) ? L
"CRC32C" : L
"None");
1396 if (((Options
>> 11) & 0x0001) != 0) {
1397 UefiDevicePathLibCatPrint (Str
, L
"%s,", L
"None");
1398 } else if (((Options
>> 12) & 0x0001) != 0) {
1399 UefiDevicePathLibCatPrint (Str
, L
"%s,", L
"CHAP_UNI");
1401 UefiDevicePathLibCatPrint (Str
, L
"%s,", L
"CHAP_BI");
1405 UefiDevicePathLibCatPrint (Str
, L
"%s)", (ISCSIDevPath
->NetworkProtocol
== 0) ? L
"TCP" : L
"reserved");
1409 Converts a VLAN device path structure to its string representative.
1411 @param Str The string representative of input device.
1412 @param DevPath The input device path structure.
1413 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1414 of the display node is used, where applicable. If DisplayOnly
1415 is FALSE, then the longer text representation of the display node
1417 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1418 representation for a device node can be used, where applicable.
1423 IN OUT POOL_PRINT
*Str
,
1425 IN BOOLEAN DisplayOnly
,
1426 IN BOOLEAN AllowShortcuts
1429 VLAN_DEVICE_PATH
*Vlan
;
1432 UefiDevicePathLibCatPrint (Str
, L
"Vlan(%d)", Vlan
->VlanId
);
1436 Converts a Hard drive device path structure to its string representative.
1438 @param Str The string representative of input device.
1439 @param DevPath The input device path structure.
1440 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1441 of the display node is used, where applicable. If DisplayOnly
1442 is FALSE, then the longer text representation of the display node
1444 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1445 representation for a device node can be used, where applicable.
1449 DevPathToTextHardDrive (
1450 IN OUT POOL_PRINT
*Str
,
1452 IN BOOLEAN DisplayOnly
,
1453 IN BOOLEAN AllowShortcuts
1456 HARDDRIVE_DEVICE_PATH
*Hd
;
1459 switch (Hd
->SignatureType
) {
1460 case SIGNATURE_TYPE_MBR
:
1461 UefiDevicePathLibCatPrint (
1463 L
"HD(%d,%s,0x%08x,",
1464 Hd
->PartitionNumber
,
1466 *((UINT32
*) (&(Hd
->Signature
[0])))
1470 case SIGNATURE_TYPE_GUID
:
1471 UefiDevicePathLibCatPrint (
1474 Hd
->PartitionNumber
,
1476 (EFI_GUID
*) &(Hd
->Signature
[0])
1481 UefiDevicePathLibCatPrint (
1484 Hd
->PartitionNumber
,
1490 UefiDevicePathLibCatPrint (Str
, L
"0x%lx,0x%lx)", Hd
->PartitionStart
, Hd
->PartitionSize
);
1494 Converts a CDROM device path structure to its string representative.
1496 @param Str The string representative of input device.
1497 @param DevPath The input device path structure.
1498 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1499 of the display node is used, where applicable. If DisplayOnly
1500 is FALSE, then the longer text representation of the display node
1502 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1503 representation for a device node can be used, where applicable.
1507 DevPathToTextCDROM (
1508 IN OUT POOL_PRINT
*Str
,
1510 IN BOOLEAN DisplayOnly
,
1511 IN BOOLEAN AllowShortcuts
1514 CDROM_DEVICE_PATH
*Cd
;
1518 UefiDevicePathLibCatPrint (Str
, L
"CDROM(0x%x)", Cd
->BootEntry
);
1522 UefiDevicePathLibCatPrint (Str
, L
"CDROM(0x%x,0x%lx,0x%lx)", Cd
->BootEntry
, Cd
->PartitionStart
, Cd
->PartitionSize
);
1526 Converts a File 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.
1539 DevPathToTextFilePath (
1540 IN OUT POOL_PRINT
*Str
,
1542 IN BOOLEAN DisplayOnly
,
1543 IN BOOLEAN AllowShortcuts
1546 FILEPATH_DEVICE_PATH
*Fp
;
1549 UefiDevicePathLibCatPrint (Str
, L
"%s", Fp
->PathName
);
1553 Converts a Media protocol 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 DevPathToTextMediaProtocol (
1567 IN OUT POOL_PRINT
*Str
,
1569 IN BOOLEAN DisplayOnly
,
1570 IN BOOLEAN AllowShortcuts
1573 MEDIA_PROTOCOL_DEVICE_PATH
*MediaProt
;
1575 MediaProt
= DevPath
;
1576 UefiDevicePathLibCatPrint (Str
, L
"Media(%g)", &MediaProt
->Protocol
);
1580 Converts a Firmware Volume 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.
1594 IN OUT POOL_PRINT
*Str
,
1596 IN BOOLEAN DisplayOnly
,
1597 IN BOOLEAN AllowShortcuts
1600 MEDIA_FW_VOL_DEVICE_PATH
*Fv
;
1603 UefiDevicePathLibCatPrint (Str
, L
"Fv(%g)", &Fv
->FvName
);
1607 Converts a Firmware Volume File device path structure to its string representative.
1609 @param Str The string representative of input device.
1610 @param DevPath The input device path structure.
1611 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1612 of the display node is used, where applicable. If DisplayOnly
1613 is FALSE, then the longer text representation of the display node
1615 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1616 representation for a device node can be used, where applicable.
1620 DevPathToTextFvFile (
1621 IN OUT POOL_PRINT
*Str
,
1623 IN BOOLEAN DisplayOnly
,
1624 IN BOOLEAN AllowShortcuts
1627 MEDIA_FW_VOL_FILEPATH_DEVICE_PATH
*FvFile
;
1630 UefiDevicePathLibCatPrint (Str
, L
"FvFile(%g)", &FvFile
->FvFileName
);
1634 Converts a Relative Offset device path structure to its string representative.
1636 @param Str The string representative of input device.
1637 @param DevPath The input device path structure.
1638 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1639 of the display node is used, where applicable. If DisplayOnly
1640 is FALSE, then the longer text representation of the display node
1642 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1643 representation for a device node can be used, where applicable.
1647 DevPathRelativeOffsetRange (
1648 IN OUT POOL_PRINT
*Str
,
1650 IN BOOLEAN DisplayOnly
,
1651 IN BOOLEAN AllowShortcuts
1654 MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH
*Offset
;
1657 UefiDevicePathLibCatPrint (
1659 L
"Offset(0x%lx,0x%lx)",
1660 Offset
->StartingOffset
,
1661 Offset
->EndingOffset
1666 Converts a BIOS Boot Specification device path structure to its string representative.
1668 @param Str The string representative of input device.
1669 @param DevPath The input device path structure.
1670 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1671 of the display node is used, where applicable. If DisplayOnly
1672 is FALSE, then the longer text representation of the display node
1674 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1675 representation for a device node can be used, where applicable.
1680 IN OUT POOL_PRINT
*Str
,
1682 IN BOOLEAN DisplayOnly
,
1683 IN BOOLEAN AllowShortcuts
1686 BBS_BBS_DEVICE_PATH
*Bbs
;
1690 switch (Bbs
->DeviceType
) {
1691 case BBS_TYPE_FLOPPY
:
1695 case BBS_TYPE_HARDDRIVE
:
1699 case BBS_TYPE_CDROM
:
1703 case BBS_TYPE_PCMCIA
:
1711 case BBS_TYPE_EMBEDDED_NETWORK
:
1721 UefiDevicePathLibCatPrint (Str
, L
"BBS(%s,%a", Type
, Bbs
->String
);
1723 UefiDevicePathLibCatPrint (Str
, L
"BBS(0x%x,%a", Bbs
->DeviceType
, Bbs
->String
);
1727 UefiDevicePathLibCatPrint (Str
, L
")");
1731 UefiDevicePathLibCatPrint (Str
, L
",0x%x)", Bbs
->StatusFlag
);
1735 Converts an End-of-Device-Path structure to its string representative.
1737 @param Str The string representative of input device.
1738 @param DevPath The input device path structure.
1739 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1740 of the display node is used, where applicable. If DisplayOnly
1741 is FALSE, then the longer text representation of the display node
1743 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1744 representation for a device node can be used, where applicable.
1748 DevPathToTextEndInstance (
1749 IN OUT POOL_PRINT
*Str
,
1751 IN BOOLEAN DisplayOnly
,
1752 IN BOOLEAN AllowShortcuts
1755 UefiDevicePathLibCatPrint (Str
, L
",");
1759 Converts an unknown device path structure to its string representative.
1761 @param Str The string representative of input device.
1762 @param DevPath The input device path structure.
1763 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1764 of the display node is used, where applicable. If DisplayOnly
1765 is FALSE, then the longer text representation of the display node
1767 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1768 representation for a device node can be used, where applicable.
1772 DevPathToTextNodeUnknown (
1773 IN OUT POOL_PRINT
*Str
,
1775 IN BOOLEAN DisplayOnly
,
1776 IN BOOLEAN AllowShortcuts
1779 UefiDevicePathLibCatPrint (Str
, L
"?");
1782 GLOBAL_REMOVE_IF_UNREFERENCED
const DEVICE_PATH_TO_TEXT_TABLE mUefiDevicePathLibDevPathToTextTable
[] = {
1783 {HARDWARE_DEVICE_PATH
, HW_PCI_DP
, DevPathToTextPci
},
1784 {HARDWARE_DEVICE_PATH
, HW_PCCARD_DP
, DevPathToTextPccard
},
1785 {HARDWARE_DEVICE_PATH
, HW_MEMMAP_DP
, DevPathToTextMemMap
},
1786 {HARDWARE_DEVICE_PATH
, HW_VENDOR_DP
, DevPathToTextVendor
},
1787 {HARDWARE_DEVICE_PATH
, HW_CONTROLLER_DP
, DevPathToTextController
},
1788 {ACPI_DEVICE_PATH
, ACPI_DP
, DevPathToTextAcpi
},
1789 {ACPI_DEVICE_PATH
, ACPI_EXTENDED_DP
, DevPathToTextAcpiEx
},
1790 {ACPI_DEVICE_PATH
, ACPI_ADR_DP
, DevPathToTextAcpiAdr
},
1791 {MESSAGING_DEVICE_PATH
, MSG_ATAPI_DP
, DevPathToTextAtapi
},
1792 {MESSAGING_DEVICE_PATH
, MSG_SCSI_DP
, DevPathToTextScsi
},
1793 {MESSAGING_DEVICE_PATH
, MSG_FIBRECHANNEL_DP
, DevPathToTextFibre
},
1794 {MESSAGING_DEVICE_PATH
, MSG_FIBRECHANNELEX_DP
, DevPathToTextFibreEx
},
1795 {MESSAGING_DEVICE_PATH
, MSG_SASEX_DP
, DevPathToTextSasEx
},
1796 {MESSAGING_DEVICE_PATH
, MSG_1394_DP
, DevPathToText1394
},
1797 {MESSAGING_DEVICE_PATH
, MSG_USB_DP
, DevPathToTextUsb
},
1798 {MESSAGING_DEVICE_PATH
, MSG_USB_WWID_DP
, DevPathToTextUsbWWID
},
1799 {MESSAGING_DEVICE_PATH
, MSG_DEVICE_LOGICAL_UNIT_DP
, DevPathToTextLogicalUnit
},
1800 {MESSAGING_DEVICE_PATH
, MSG_USB_CLASS_DP
, DevPathToTextUsbClass
},
1801 {MESSAGING_DEVICE_PATH
, MSG_SATA_DP
, DevPathToTextSata
},
1802 {MESSAGING_DEVICE_PATH
, MSG_I2O_DP
, DevPathToTextI2O
},
1803 {MESSAGING_DEVICE_PATH
, MSG_MAC_ADDR_DP
, DevPathToTextMacAddr
},
1804 {MESSAGING_DEVICE_PATH
, MSG_IPv4_DP
, DevPathToTextIPv4
},
1805 {MESSAGING_DEVICE_PATH
, MSG_IPv6_DP
, DevPathToTextIPv6
},
1806 {MESSAGING_DEVICE_PATH
, MSG_INFINIBAND_DP
, DevPathToTextInfiniBand
},
1807 {MESSAGING_DEVICE_PATH
, MSG_UART_DP
, DevPathToTextUart
},
1808 {MESSAGING_DEVICE_PATH
, MSG_VENDOR_DP
, DevPathToTextVendor
},
1809 {MESSAGING_DEVICE_PATH
, MSG_ISCSI_DP
, DevPathToTextiSCSI
},
1810 {MESSAGING_DEVICE_PATH
, MSG_VLAN_DP
, DevPathToTextVlan
},
1811 {MEDIA_DEVICE_PATH
, MEDIA_HARDDRIVE_DP
, DevPathToTextHardDrive
},
1812 {MEDIA_DEVICE_PATH
, MEDIA_CDROM_DP
, DevPathToTextCDROM
},
1813 {MEDIA_DEVICE_PATH
, MEDIA_VENDOR_DP
, DevPathToTextVendor
},
1814 {MEDIA_DEVICE_PATH
, MEDIA_PROTOCOL_DP
, DevPathToTextMediaProtocol
},
1815 {MEDIA_DEVICE_PATH
, MEDIA_FILEPATH_DP
, DevPathToTextFilePath
},
1816 {MEDIA_DEVICE_PATH
, MEDIA_PIWG_FW_VOL_DP
, DevPathToTextFv
},
1817 {MEDIA_DEVICE_PATH
, MEDIA_PIWG_FW_FILE_DP
, DevPathToTextFvFile
},
1818 {MEDIA_DEVICE_PATH
, MEDIA_RELATIVE_OFFSET_RANGE_DP
, DevPathRelativeOffsetRange
},
1819 {BBS_DEVICE_PATH
, BBS_BBS_DP
, DevPathToTextBBS
},
1820 {END_DEVICE_PATH_TYPE
, END_INSTANCE_DEVICE_PATH_SUBTYPE
, DevPathToTextEndInstance
},
1825 Converts a device node to its string representation.
1827 @param DeviceNode A Pointer to the device node to be converted.
1828 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1829 of the display node is used, where applicable. If DisplayOnly
1830 is FALSE, then the longer text representation of the display node
1832 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1833 representation for a device node can be used, where applicable.
1835 @return A pointer to the allocated text representation of the device node or NULL if DeviceNode
1836 is NULL or there was insufficient memory.
1841 UefiDevicePathLibConvertDeviceNodeToText (
1842 IN CONST EFI_DEVICE_PATH_PROTOCOL
*DeviceNode
,
1843 IN BOOLEAN DisplayOnly
,
1844 IN BOOLEAN AllowShortcuts
1849 DEVICE_PATH_TO_TEXT ToText
;
1851 if (DeviceNode
== NULL
) {
1855 ZeroMem (&Str
, sizeof (Str
));
1858 // Process the device path node
1859 // If not found, use a generic function
1861 ToText
= DevPathToTextNodeUnknown
;
1862 for (Index
= 0; mUefiDevicePathLibDevPathToTextTable
[Index
].Function
!= NULL
; Index
++) {
1863 if (DevicePathType (DeviceNode
) == mUefiDevicePathLibDevPathToTextTable
[Index
].Type
&&
1864 DevicePathSubType (DeviceNode
) == mUefiDevicePathLibDevPathToTextTable
[Index
].SubType
1866 ToText
= mUefiDevicePathLibDevPathToTextTable
[Index
].Function
;
1874 ToText (&Str
, (VOID
*) DeviceNode
, DisplayOnly
, AllowShortcuts
);
1876 ASSERT (Str
.Str
!= NULL
);
1881 Converts a device path to its text representation.
1883 @param DevicePath A Pointer to the device to be converted.
1884 @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
1885 of the display node is used, where applicable. If DisplayOnly
1886 is FALSE, then the longer text representation of the display node
1888 @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
1889 representation for a device node can be used, where applicable.
1891 @return A pointer to the allocated text representation of the device path or
1892 NULL if DeviceNode is NULL or there was insufficient memory.
1897 UefiDevicePathLibConvertDevicePathToText (
1898 IN CONST EFI_DEVICE_PATH_PROTOCOL
*DevicePath
,
1899 IN BOOLEAN DisplayOnly
,
1900 IN BOOLEAN AllowShortcuts
1904 EFI_DEVICE_PATH_PROTOCOL
*Node
;
1905 EFI_DEVICE_PATH_PROTOCOL
*AlignedNode
;
1907 DEVICE_PATH_TO_TEXT ToText
;
1909 if (DevicePath
== NULL
) {
1913 ZeroMem (&Str
, sizeof (Str
));
1916 // Process each device path node
1918 Node
= (EFI_DEVICE_PATH_PROTOCOL
*) DevicePath
;
1919 while (!IsDevicePathEnd (Node
)) {
1921 // Find the handler to dump this device path node
1922 // If not found, use a generic function
1924 ToText
= DevPathToTextNodeUnknown
;
1925 for (Index
= 0; mUefiDevicePathLibDevPathToTextTable
[Index
].Function
!= NULL
; Index
+= 1) {
1927 if (DevicePathType (Node
) == mUefiDevicePathLibDevPathToTextTable
[Index
].Type
&&
1928 DevicePathSubType (Node
) == mUefiDevicePathLibDevPathToTextTable
[Index
].SubType
1930 ToText
= mUefiDevicePathLibDevPathToTextTable
[Index
].Function
;
1935 // Put a path separator in if needed
1937 if ((Str
.Count
!= 0) && (ToText
!= DevPathToTextEndInstance
)) {
1938 if (Str
.Str
[Str
.Count
] != L
',') {
1939 UefiDevicePathLibCatPrint (&Str
, L
"/");
1943 AlignedNode
= AllocateCopyPool (DevicePathNodeLength (Node
), Node
);
1945 // Print this node of the device path
1947 ToText (&Str
, AlignedNode
, DisplayOnly
, AllowShortcuts
);
1948 FreePool (AlignedNode
);
1951 // Next device path node
1953 Node
= NextDevicePathNode (Node
);
1956 if (Str
.Str
== NULL
) {
1957 return AllocateZeroPool (sizeof (CHAR16
));