+++ /dev/null
-/** @file\r
- BDS internal function define the default device path string, it can be\r
- replaced by platform device path.\r
-\r
-Copyright (c) 2004 - 2008, Intel Corporation. <BR>\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "InternalBdsLib.h"\r
-\r
-/**\r
- Concatenates a formatted unicode string to allocated pool.\r
- The caller must free the resulting buffer.\r
-\r
- @param Str Tracks the allocated pool, size in use, and amount of pool allocated.\r
- @param fmt The format string\r
- @param ... The data will be printed.\r
-\r
- @return Allocated buffer with the formatted string printed in it.\r
- The caller must free the allocated buffer.\r
- The buffer allocation is not packed.\r
-\r
-**/\r
-CHAR16 *\r
-EFIAPI\r
-CatPrint (\r
- IN OUT POOL_PRINT *Str,\r
- IN CHAR16 *fmt,\r
- ...\r
- )\r
-{\r
- UINT16 *AppendStr;\r
- VA_LIST Args;\r
- UINTN StringSize;\r
-\r
- AppendStr = AllocateZeroPool (0x1000);\r
- if (AppendStr == NULL) {\r
- return Str->str;\r
- }\r
-\r
- VA_START (Args, fmt);\r
- UnicodeVSPrint (AppendStr, 0x1000, fmt, Args);\r
- VA_END (Args);\r
- if (NULL == Str->str) {\r
- StringSize = StrSize (AppendStr);\r
- Str->str = AllocateZeroPool (StringSize);\r
- ASSERT (Str->str != NULL);\r
- } else {\r
- StringSize = StrSize (AppendStr);\r
- StringSize += (StrSize (Str->str) - sizeof (UINT16));\r
-\r
- Str->str = ReallocatePool (\r
- StrSize (Str->str),\r
- StringSize,\r
- Str->str\r
- );\r
- ASSERT (Str->str != NULL);\r
- }\r
-\r
- Str->maxlen = MAX_CHAR * sizeof (UINT16);\r
- if (StringSize < Str->maxlen) {\r
- StrCat (Str->str, AppendStr);\r
- Str->len = StringSize - sizeof (UINT16);\r
- }\r
-\r
- FreePool (AppendStr);\r
- return Str->str;\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathPci (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- PCI_DEVICE_PATH *Pci;\r
-\r
- Pci = DevPath;\r
- CatPrint (Str, L"Pci(%x|%x)", (UINTN) Pci->Device, (UINTN) Pci->Function);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathPccard (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- PCCARD_DEVICE_PATH *Pccard;\r
-\r
- Pccard = DevPath;\r
- CatPrint (Str, L"Pcmcia(Function%x)", (UINTN) Pccard->FunctionNumber);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathMemMap (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- MEMMAP_DEVICE_PATH *MemMap;\r
-\r
- MemMap = DevPath;\r
- CatPrint (\r
- Str,\r
- L"MemMap(%d:%lx-%lx)",\r
- MemMap->MemoryType,\r
- MemMap->StartingAddress,\r
- MemMap->EndingAddress\r
- );\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathController (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- CONTROLLER_DEVICE_PATH *Controller;\r
-\r
- Controller = DevPath;\r
- CatPrint (Str, L"Ctrl(%d)", (UINTN) Controller->ControllerNumber);\r
-}\r
-\r
-\r
-/**\r
- Convert Vendor device path to device name.\r
-\r
- @param Str The buffer store device name\r
- @param DevPath Pointer to vendor device path\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-DevPathVendor (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- VENDOR_DEVICE_PATH *Vendor;\r
- CHAR16 *Type;\r
- UINTN DataLength;\r
- UINTN Index;\r
- UINT32 FlowControlMap;\r
-\r
- UINT16 Info;\r
-\r
- Vendor = DevPath;\r
-\r
- switch (DevicePathType (&Vendor->Header)) {\r
- case HARDWARE_DEVICE_PATH:\r
- Type = L"Hw";\r
- break;\r
-\r
- case MESSAGING_DEVICE_PATH:\r
- Type = L"Msg";\r
- if (CompareGuid (&Vendor->Guid, &gEfiPcAnsiGuid)) {\r
- CatPrint (Str, L"VenPcAnsi()");\r
- return ;\r
- } else if (CompareGuid (&Vendor->Guid, &gEfiVT100Guid)) {\r
- CatPrint (Str, L"VenVt100()");\r
- return ;\r
- } else if (CompareGuid (&Vendor->Guid, &gEfiVT100PlusGuid)) {\r
- CatPrint (Str, L"VenVt100Plus()");\r
- return ;\r
- } else if (CompareGuid (&Vendor->Guid, &gEfiVTUTF8Guid)) {\r
- CatPrint (Str, L"VenUft8()");\r
- return ;\r
- } else if (CompareGuid (&Vendor->Guid, &gEfiUartDevicePathGuid )) {\r
- FlowControlMap = (((UART_FLOW_CONTROL_DEVICE_PATH *) Vendor)->FlowControlMap);\r
- switch (FlowControlMap & 0x00000003) {\r
- case 0:\r
- CatPrint (Str, L"UartFlowCtrl(%s)", L"None");\r
- break;\r
-\r
- case 1:\r
- CatPrint (Str, L"UartFlowCtrl(%s)", L"Hardware");\r
- break;\r
-\r
- case 2:\r
- CatPrint (Str, L"UartFlowCtrl(%s)", L"XonXoff");\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return ;\r
-\r
- } else if (CompareGuid (&Vendor->Guid, &gEfiSasDevicePathGuid)) {\r
- CatPrint (\r
- Str,\r
- L"SAS(%lx,%lx,%x,",\r
- ((SAS_DEVICE_PATH *) Vendor)->SasAddress,\r
- ((SAS_DEVICE_PATH *) Vendor)->Lun,\r
- ((SAS_DEVICE_PATH *) Vendor)->RelativeTargetPort\r
- );\r
- Info = (((SAS_DEVICE_PATH *) Vendor)->DeviceTopology);\r
- if ((Info & 0x0f) == 0) {\r
- CatPrint (Str, L"NoTopology,0,0,0,");\r
- } else if (((Info & 0x0f) == 1) || ((Info & 0x0f) == 2)) {\r
- CatPrint (\r
- Str,\r
- L"%s,%s,%s,",\r
- ((Info & (0x1 << 4)) != 0) ? L"SATA" : L"SAS",\r
- ((Info & (0x1 << 5)) != 0) ? L"External" : L"Internal",\r
- ((Info & (0x1 << 6)) != 0) ? L"Expanded" : L"Direct"\r
- );\r
- if ((Info & 0x0f) == 1) {\r
- CatPrint (Str, L"0,");\r
- } else {\r
- CatPrint (Str, L"%x,", (UINTN) ((Info >> 8) & 0xff));\r
- }\r
- } else {\r
- CatPrint (Str, L"0,0,0,0,");\r
- }\r
-\r
- CatPrint (Str, L"%x)", (UINTN) ((SAS_DEVICE_PATH *) Vendor)->Reserved);\r
- return ;\r
-\r
- } else if (CompareGuid (&Vendor->Guid, &gEfiDebugPortProtocolGuid)) {\r
- CatPrint (Str, L"DebugPort()");\r
- return ;\r
- }\r
- break;\r
-\r
- case MEDIA_DEVICE_PATH:\r
- Type = L"Media";\r
- break;\r
-\r
- default:\r
- Type = L"?";\r
- break;\r
- }\r
-\r
- CatPrint (Str, L"Ven%s(%g", Type, &Vendor->Guid);\r
- DataLength = DevicePathNodeLength (&Vendor->Header) - sizeof (VENDOR_DEVICE_PATH);\r
- if (DataLength > 0) {\r
- CatPrint (Str, L",");\r
- for (Index = 0; Index < DataLength; Index++) {\r
- CatPrint (Str, L"%02x", (UINTN) ((VENDOR_DEVICE_PATH_WITH_DATA *) Vendor)->VendorDefinedData[Index]);\r
- }\r
- }\r
- CatPrint (Str, L")");\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathAcpi (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- ACPI_HID_DEVICE_PATH *Acpi;\r
-\r
- Acpi = DevPath;\r
- if ((Acpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {\r
- CatPrint (Str, L"Acpi(PNP%04x,%x)", (UINTN) EISA_ID_TO_NUM (Acpi->HID), (UINTN) Acpi->UID);\r
- } else {\r
- CatPrint (Str, L"Acpi(%08x,%x)", (UINTN) Acpi->HID, (UINTN) Acpi->UID);\r
- }\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathExtendedAcpi (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- ACPI_EXTENDED_HID_DEVICE_PATH *ExtendedAcpi;\r
- \r
- //\r
- // Index for HID, UID and CID strings, 0 for non-exist\r
- //\r
- UINT16 HIDSTRIdx;\r
- UINT16 UIDSTRIdx;\r
- UINT16 CIDSTRIdx;\r
- UINT16 Index;\r
- UINT16 Length;\r
- UINT16 Anchor;\r
- CHAR8 *AsChar8Array;\r
-\r
- ASSERT (Str != NULL);\r
- ASSERT (DevPath != NULL);\r
-\r
- HIDSTRIdx = 0;\r
- UIDSTRIdx = 0;\r
- CIDSTRIdx = 0;\r
- ExtendedAcpi = DevPath;\r
- Length = (UINT16) DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL *) ExtendedAcpi);\r
-\r
- ASSERT (Length >= 19);\r
- AsChar8Array = (CHAR8 *) ExtendedAcpi;\r
-\r
- //\r
- // find HIDSTR\r
- //\r
- Anchor = 16;\r
- for (Index = Anchor; Index < Length && AsChar8Array[Index] != '\0'; Index++) {\r
- ;\r
- }\r
- if (Index > Anchor) {\r
- HIDSTRIdx = Anchor;\r
- }\r
- //\r
- // find UIDSTR\r
- //\r
- Anchor = (UINT16) (Index + 1);\r
- for (Index = Anchor; Index < Length && AsChar8Array[Index] != '\0'; Index++) {\r
- ;\r
- }\r
- if (Index > Anchor) {\r
- UIDSTRIdx = Anchor;\r
- }\r
- //\r
- // find CIDSTR\r
- //\r
- Anchor = (UINT16) (Index + 1);\r
- for (Index = Anchor; Index < Length && AsChar8Array[Index] != '\0'; Index++) {\r
- ;\r
- }\r
- if (Index > Anchor) {\r
- CIDSTRIdx = Anchor;\r
- }\r
-\r
- if (HIDSTRIdx == 0 && CIDSTRIdx == 0 && ExtendedAcpi->UID == 0) {\r
- CatPrint (Str, L"AcpiExp(");\r
- if ((ExtendedAcpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {\r
- CatPrint (Str, L"PNP%04x,", (UINTN) EISA_ID_TO_NUM (ExtendedAcpi->HID));\r
- } else {\r
- CatPrint (Str, L"%08x,", (UINTN) ExtendedAcpi->HID);\r
- }\r
- if ((ExtendedAcpi->CID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {\r
- CatPrint (Str, L"PNP%04x,", (UINTN) EISA_ID_TO_NUM (ExtendedAcpi->CID));\r
- } else {\r
- CatPrint (Str, L"%08x,", (UINTN) ExtendedAcpi->CID);\r
- }\r
- if (UIDSTRIdx != 0) {\r
- CatPrint (Str, L"%a)", AsChar8Array + UIDSTRIdx);\r
- } else {\r
- CatPrint (Str, L"\"\")");\r
- }\r
- } else {\r
- CatPrint (Str, L"AcpiEx(");\r
- if ((ExtendedAcpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {\r
- CatPrint (Str, L"PNP%04x,", (UINTN) EISA_ID_TO_NUM (ExtendedAcpi->HID));\r
- } else {\r
- CatPrint (Str, L"%08x,", (UINTN) ExtendedAcpi->HID);\r
- }\r
- if ((ExtendedAcpi->CID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) {\r
- CatPrint (Str, L"PNP%04x,", (UINTN) EISA_ID_TO_NUM (ExtendedAcpi->CID));\r
- } else {\r
- CatPrint (Str, L"%08x,", (UINTN) ExtendedAcpi->CID);\r
- }\r
- CatPrint (Str, L"%x,", (UINTN) ExtendedAcpi->UID);\r
-\r
- if (HIDSTRIdx != 0) {\r
- CatPrint (Str, L"%a,", AsChar8Array + HIDSTRIdx);\r
- } else {\r
- CatPrint (Str, L"\"\",");\r
- }\r
- if (CIDSTRIdx != 0) {\r
- CatPrint (Str, L"%a,", AsChar8Array + CIDSTRIdx);\r
- } else {\r
- CatPrint (Str, L"\"\",");\r
- }\r
- if (UIDSTRIdx != 0) {\r
- CatPrint (Str, L"%a)", AsChar8Array + UIDSTRIdx);\r
- } else {\r
- CatPrint (Str, L"\"\")");\r
- }\r
- }\r
-\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathAdrAcpi (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- ACPI_ADR_DEVICE_PATH *AcpiAdr;\r
- UINT16 Index;\r
- UINT16 Length;\r
- UINT16 AdditionalAdrCount;\r
-\r
- AcpiAdr = DevPath;\r
- Length = (UINT16) DevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL *) AcpiAdr);\r
- AdditionalAdrCount = (UINT16) ((Length - 8) / 4);\r
-\r
- CatPrint (Str, L"AcpiAdr(%x", (UINTN) AcpiAdr->ADR);\r
- for (Index = 0; Index < AdditionalAdrCount; Index++) {\r
- CatPrint (Str, L",%x", (UINTN) *(UINT32 *) ((UINT8 *) AcpiAdr + 8 + Index * 4));\r
- }\r
- CatPrint (Str, L")");\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathAtapi (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- ATAPI_DEVICE_PATH *Atapi;\r
-\r
- Atapi = DevPath;\r
- CatPrint (\r
- Str,\r
- L"Ata(%s,%s)",\r
- Atapi->PrimarySecondary ? L"Secondary" : L"Primary",\r
- Atapi->SlaveMaster ? L"Slave" : L"Master"\r
- );\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathScsi (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- SCSI_DEVICE_PATH *Scsi;\r
-\r
- Scsi = DevPath;\r
- CatPrint (Str, L"Scsi(Pun%x,Lun%x)", (UINTN) Scsi->Pun, (UINTN) Scsi->Lun);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathFibre (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- FIBRECHANNEL_DEVICE_PATH *Fibre;\r
-\r
- Fibre = DevPath;\r
- CatPrint (Str, L"Fibre(Wwn%lx,Lun%x)", Fibre->WWN, Fibre->Lun);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPath1394 (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- F1394_DEVICE_PATH *F1394Path;\r
-\r
- F1394Path = DevPath;\r
- CatPrint (Str, L"1394(%g)", &F1394Path->Guid);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathUsb (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- USB_DEVICE_PATH *Usb;\r
-\r
- Usb = DevPath;\r
- CatPrint (Str, L"Usb(%x,%x)", (UINTN) Usb->ParentPortNumber, (UINTN) Usb->InterfaceNumber);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathUsbWWID (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- USB_WWID_DEVICE_PATH *UsbWWId;\r
-\r
- UsbWWId = DevPath;\r
- CatPrint (\r
- Str,\r
- L"UsbWwid(%x,%x,%x,\"WWID\")",\r
- (UINTN) UsbWWId->VendorId,\r
- (UINTN) UsbWWId->ProductId,\r
- (UINTN) UsbWWId->InterfaceNumber\r
- );\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathLogicalUnit (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- DEVICE_LOGICAL_UNIT_DEVICE_PATH *LogicalUnit;\r
-\r
- LogicalUnit = DevPath;\r
- CatPrint (Str, L"Unit(%x)", (UINTN) LogicalUnit->Lun);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathUsbClass (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- USB_CLASS_DEVICE_PATH *UsbClass;\r
-\r
- UsbClass = DevPath;\r
- CatPrint (\r
- Str,\r
- L"Usb Class(%x,%x,%x,%x,%x)",\r
- (UINTN) UsbClass->VendorId,\r
- (UINTN) UsbClass->ProductId,\r
- (UINTN) UsbClass->DeviceClass,\r
- (UINTN) UsbClass->DeviceSubClass,\r
- (UINTN) UsbClass->DeviceProtocol\r
- );\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathSata (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- SATA_DEVICE_PATH *Sata;\r
-\r
- Sata = DevPath;\r
- CatPrint (\r
- Str,\r
- L"Sata(%x,%x,%x)",\r
- (UINTN) Sata->HBAPortNumber,\r
- (UINTN) Sata->PortMultiplierPortNumber,\r
- (UINTN) Sata->Lun\r
- );\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathI2O (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- I2O_DEVICE_PATH *I2OPath;\r
-\r
- I2OPath = DevPath;\r
- CatPrint (Str, L"I2O(%x)", (UINTN) I2OPath->Tid);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathMacAddr (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- MAC_ADDR_DEVICE_PATH *MACDevPath;\r
- UINTN HwAddressSize;\r
- UINTN Index;\r
-\r
- MACDevPath = DevPath;\r
-\r
- HwAddressSize = sizeof (EFI_MAC_ADDRESS);\r
- if (MACDevPath->IfType == 0x01 || MACDevPath->IfType == 0x00) {\r
- HwAddressSize = 6;\r
- }\r
-\r
- CatPrint (Str, L"Mac(");\r
-\r
- for (Index = 0; Index < HwAddressSize; Index++) {\r
- CatPrint (Str, L"%02x", (UINTN) MACDevPath->MacAddress.Addr[Index]);\r
- }\r
-\r
- CatPrint (Str, L")");\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathIPv4 (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- IPv4_DEVICE_PATH *IPDevPath;\r
-\r
- IPDevPath = DevPath;\r
- CatPrint (\r
- Str,\r
- L"IPv4(%d.%d.%d.%d:%d)",\r
- (UINTN) IPDevPath->RemoteIpAddress.Addr[0],\r
- (UINTN) IPDevPath->RemoteIpAddress.Addr[1],\r
- (UINTN) IPDevPath->RemoteIpAddress.Addr[2],\r
- (UINTN) IPDevPath->RemoteIpAddress.Addr[3],\r
- (UINTN) IPDevPath->RemotePort\r
- );\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathIPv6 (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- IPv6_DEVICE_PATH *IPv6DevPath;\r
-\r
- IPv6DevPath = DevPath;\r
- CatPrint (\r
- Str,\r
- L"IPv6(%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x)",\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[0],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[1],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[2],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[3],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[4],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[5],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[6],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[7],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[8],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[9],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[10],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[11],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[12],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[13],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[14],\r
- (UINTN) IPv6DevPath->RemoteIpAddress.Addr[15]\r
- );\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathInfiniBand (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- INFINIBAND_DEVICE_PATH *InfiniBand;\r
-\r
- InfiniBand = DevPath;\r
- CatPrint (\r
- Str,\r
- L"Infiniband(%x,%g,%lx,%lx,%lx)",\r
- (UINTN) InfiniBand->ResourceFlags,\r
- InfiniBand->PortGid,\r
- InfiniBand->ServiceId,\r
- InfiniBand->TargetPortId,\r
- InfiniBand->DeviceId\r
- );\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathUart (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- UART_DEVICE_PATH *Uart;\r
- CHAR8 Parity;\r
-\r
- Uart = DevPath;\r
- switch (Uart->Parity) {\r
- case 0:\r
- Parity = 'D';\r
- break;\r
-\r
- case 1:\r
- Parity = 'N';\r
- break;\r
-\r
- case 2:\r
- Parity = 'E';\r
- break;\r
-\r
- case 3:\r
- Parity = 'O';\r
- break;\r
-\r
- case 4:\r
- Parity = 'M';\r
- break;\r
-\r
- case 5:\r
- Parity = 'S';\r
- break;\r
-\r
- default:\r
- Parity = 'x';\r
- break;\r
- }\r
-\r
- if (Uart->BaudRate == 0) {\r
- CatPrint (Str, L"Uart(DEFAULT,%c,", Parity);\r
- } else {\r
- CatPrint (Str, L"Uart(%d,%c,", Uart->BaudRate, Parity);\r
- }\r
-\r
- if (Uart->DataBits == 0) {\r
- CatPrint (Str, L"D,");\r
- } else {\r
- CatPrint (Str, L"%d,", (UINTN) Uart->DataBits);\r
- }\r
-\r
- switch (Uart->StopBits) {\r
- case 0:\r
- CatPrint (Str, L"D)");\r
- break;\r
-\r
- case 1:\r
- CatPrint (Str, L"1)");\r
- break;\r
-\r
- case 2:\r
- CatPrint (Str, L"1.5)");\r
- break;\r
-\r
- case 3:\r
- CatPrint (Str, L"2)");\r
- break;\r
-\r
- default:\r
- CatPrint (Str, L"x)");\r
- break;\r
- }\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathiSCSI (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- ISCSI_DEVICE_PATH_WITH_NAME *IScsi;\r
- UINT16 Options;\r
-\r
- ASSERT (Str != NULL);\r
- ASSERT (DevPath != NULL);\r
-\r
- IScsi = DevPath;\r
- CatPrint (\r
- Str,\r
- L"iSCSI(%s,%x,%lx,",\r
- IScsi->iSCSITargetName,\r
- IScsi->TargetPortalGroupTag,\r
- IScsi->Lun\r
- );\r
-\r
- Options = IScsi->LoginOption;\r
- CatPrint (Str, L"%s,", (((Options >> 1) & 0x0001) != 0) ? L"CRC32C" : L"None");\r
- CatPrint (Str, L"%s,", (((Options >> 3) & 0x0001) != 0) ? L"CRC32C" : L"None");\r
- if (((Options >> 11) & 0x0001) != 0) {\r
- CatPrint (Str, L"%s,", L"None");\r
- } else if (((Options >> 12) & 0x0001) != 0) {\r
- CatPrint (Str, L"%s,", L"CHAP_UNI");\r
- } else {\r
- CatPrint (Str, L"%s,", L"CHAP_BI");\r
-\r
- }\r
-\r
- CatPrint (Str, L"%s)", (IScsi->NetworkProtocol == 0) ? L"TCP" : L"reserved");\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathHardDrive (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- HARDDRIVE_DEVICE_PATH *Hd;\r
-\r
- Hd = DevPath;\r
- switch (Hd->SignatureType) {\r
- case SIGNATURE_TYPE_MBR:\r
- CatPrint (\r
- Str,\r
- L"HD(Part%d,Sig%08x)",\r
- (UINTN) Hd->PartitionNumber,\r
- (UINTN) *((UINT32 *) (&(Hd->Signature[0])))\r
- );\r
- break;\r
-\r
- case SIGNATURE_TYPE_GUID:\r
- CatPrint (\r
- Str,\r
- L"HD(Part%d,Sig%g)",\r
- (UINTN) Hd->PartitionNumber,\r
- (EFI_GUID *) &(Hd->Signature[0])\r
- );\r
- break;\r
-\r
- default:\r
- CatPrint (\r
- Str,\r
- L"HD(Part%d,MBRType=%02x,SigType=%02x)",\r
- (UINTN) Hd->PartitionNumber,\r
- (UINTN) Hd->MBRType,\r
- (UINTN) Hd->SignatureType\r
- );\r
- break;\r
- }\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathCDROM (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- CDROM_DEVICE_PATH *Cd;\r
-\r
- Cd = DevPath;\r
- CatPrint (Str, L"CDROM(Entry%x)", (UINTN) Cd->BootEntry);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathFilePath (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- FILEPATH_DEVICE_PATH *Fp;\r
-\r
- Fp = DevPath;\r
- CatPrint (Str, L"%s", Fp->PathName);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathMediaProtocol (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- MEDIA_PROTOCOL_DEVICE_PATH *MediaProt;\r
-\r
- MediaProt = DevPath;\r
- CatPrint (Str, L"Media(%g)", &MediaProt->Protocol);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathFvFilePath (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFilePath;\r
-\r
- FvFilePath = DevPath;\r
- CatPrint (Str, L"%g", &FvFilePath->FvFileName);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathBssBss (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- BBS_BBS_DEVICE_PATH *Bbs;\r
- CHAR16 *Type;\r
-\r
- Bbs = DevPath;\r
- switch (Bbs->DeviceType) {\r
- case BBS_TYPE_FLOPPY:\r
- Type = L"Floppy";\r
- break;\r
-\r
- case BBS_TYPE_HARDDRIVE:\r
- Type = L"Harddrive";\r
- break;\r
-\r
- case BBS_TYPE_CDROM:\r
- Type = L"CDROM";\r
- break;\r
-\r
- case BBS_TYPE_PCMCIA:\r
- Type = L"PCMCIA";\r
- break;\r
-\r
- case BBS_TYPE_USB:\r
- Type = L"Usb";\r
- break;\r
-\r
- case BBS_TYPE_EMBEDDED_NETWORK:\r
- Type = L"Net";\r
- break;\r
-\r
- case BBS_TYPE_BEV:\r
- Type = L"BEV";\r
- break;\r
-\r
- default:\r
- Type = L"?";\r
- break;\r
- }\r
- CatPrint (Str, L"Legacy-%s", Type);\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathEndInstance (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- CatPrint (Str, L",");\r
-}\r
-\r
-/**\r
- Convert Device Path to a Unicode string for printing.\r
-\r
- @param Str The buffer holding the output string.\r
- This buffer contains the length of the\r
- string and the maixmum length reserved\r
- for the string buffer.\r
- @param DevPath The device path.\r
-\r
-**/\r
-VOID\r
-DevPathNodeUnknown (\r
- IN OUT POOL_PRINT *Str,\r
- IN VOID *DevPath\r
- )\r
-{\r
- CatPrint (Str, L"?");\r
-}\r
-\r
-DEVICE_PATH_STRING_TABLE DevPathTable[] = {\r
- {\r
- HARDWARE_DEVICE_PATH,\r
- HW_PCI_DP,\r
- DevPathPci\r
- },\r
- {\r
- HARDWARE_DEVICE_PATH,\r
- HW_PCCARD_DP,\r
- DevPathPccard\r
- },\r
- {\r
- HARDWARE_DEVICE_PATH,\r
- HW_MEMMAP_DP,\r
- DevPathMemMap\r
- },\r
- {\r
- HARDWARE_DEVICE_PATH,\r
- HW_VENDOR_DP,\r
- DevPathVendor\r
- },\r
- {\r
- HARDWARE_DEVICE_PATH,\r
- HW_CONTROLLER_DP,\r
- DevPathController\r
- },\r
- {\r
- ACPI_DEVICE_PATH,\r
- ACPI_DP,\r
- DevPathAcpi\r
- },\r
- {\r
- ACPI_DEVICE_PATH,\r
- ACPI_EXTENDED_DP,\r
- DevPathExtendedAcpi\r
- },\r
- {\r
- ACPI_DEVICE_PATH,\r
- ACPI_ADR_DP,\r
- DevPathAdrAcpi\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_ATAPI_DP,\r
- DevPathAtapi\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_SCSI_DP,\r
- DevPathScsi\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_FIBRECHANNEL_DP,\r
- DevPathFibre\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_1394_DP,\r
- DevPath1394\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_USB_DP,\r
- DevPathUsb\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_USB_WWID_DP,\r
- DevPathUsbWWID\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_DEVICE_LOGICAL_UNIT_DP,\r
- DevPathLogicalUnit\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_USB_CLASS_DP,\r
- DevPathUsbClass\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_SATA_DP,\r
- DevPathSata\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_I2O_DP,\r
- DevPathI2O\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_MAC_ADDR_DP,\r
- DevPathMacAddr\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_IPv4_DP,\r
- DevPathIPv4\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_IPv6_DP,\r
- DevPathIPv6\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_INFINIBAND_DP,\r
- DevPathInfiniBand\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_UART_DP,\r
- DevPathUart\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_VENDOR_DP,\r
- DevPathVendor\r
- },\r
- {\r
- MESSAGING_DEVICE_PATH,\r
- MSG_ISCSI_DP,\r
- DevPathiSCSI\r
- },\r
- {\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_HARDDRIVE_DP,\r
- DevPathHardDrive\r
- },\r
- {\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_CDROM_DP,\r
- DevPathCDROM\r
- },\r
- {\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_VENDOR_DP,\r
- DevPathVendor\r
- },\r
- {\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_FILEPATH_DP,\r
- DevPathFilePath\r
- },\r
- {\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_PROTOCOL_DP,\r
- DevPathMediaProtocol\r
- },\r
- {\r
- MEDIA_DEVICE_PATH,\r
- MEDIA_PIWG_FW_FILE_DP,\r
- DevPathFvFilePath\r
- },\r
- {\r
- BBS_DEVICE_PATH,\r
- BBS_BBS_DP,\r
- DevPathBssBss\r
- },\r
- {\r
- END_DEVICE_PATH_TYPE,\r
- END_INSTANCE_DEVICE_PATH_SUBTYPE,\r
- DevPathEndInstance\r
- },\r
- {\r
- 0,\r
- 0,\r
- NULL\r
- }\r
-};\r
-\r
-\r
-/**\r
- This function converts an input device structure to a Unicode string.\r
-\r
- @param DevPath A pointer to the device path structure.\r
-\r
- @return A new allocated Unicode string that represents the device path.\r
-\r
-**/\r
-CHAR16 *\r
-EFIAPI\r
-DevicePathToStr (\r
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath\r
- )\r
-{\r
- POOL_PRINT Str;\r
- EFI_DEVICE_PATH_PROTOCOL *DevPathNode;\r
- VOID (*DumpNode) (POOL_PRINT *, VOID *);\r
-\r
- UINTN Index;\r
- UINTN NewSize;\r
-\r
- EFI_STATUS Status;\r
- CHAR16 *ToText;\r
- EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *DevPathToText;\r
-\r
- ZeroMem (&Str, sizeof (Str));\r
-\r
- if (DevPath == NULL) {\r
- goto Done;\r
- }\r
-\r
- Status = gBS->LocateProtocol (\r
- &gEfiDevicePathToTextProtocolGuid,\r
- NULL,\r
- (VOID **) &DevPathToText\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- ToText = DevPathToText->ConvertDevicePathToText (\r
- DevPath,\r
- FALSE,\r
- TRUE\r
- );\r
- ASSERT (ToText != NULL);\r
- return ToText;\r
- }\r
-\r
- //\r
- // Process each device path node\r
- //\r
- DevPathNode = DevPath;\r
- while (!IsDevicePathEnd (DevPathNode)) {\r
- //\r
- // Find the handler to dump this device path node\r
- //\r
- DumpNode = NULL;\r
- for (Index = 0; DevPathTable[Index].Function; Index += 1) {\r
-\r
- if (DevicePathType (DevPathNode) == DevPathTable[Index].Type &&\r
- DevicePathSubType (DevPathNode) == DevPathTable[Index].SubType\r
- ) {\r
- DumpNode = DevPathTable[Index].Function;\r
- break;\r
- }\r
- }\r
- //\r
- // If not found, use a generic function\r
- //\r
- if (!DumpNode) {\r
- DumpNode = DevPathNodeUnknown;\r
- }\r
- //\r
- // Put a path seperator in if needed\r
- //\r
- if (Str.len && DumpNode != DevPathEndInstance) {\r
- CatPrint (&Str, L"/");\r
- }\r
- //\r
- // Print this node of the device path\r
- //\r
- DumpNode (&Str, DevPathNode);\r
-\r
- //\r
- // Next device path node\r
- //\r
- DevPathNode = NextDevicePathNode (DevPathNode);\r
- }\r
-\r
-Done:\r
- NewSize = (Str.len + 1) * sizeof (CHAR16);\r
- Str.str = ReallocatePool (NewSize, NewSize, Str.str);\r
- ASSERT (Str.str != NULL);\r
- Str.str[Str.len] = 0;\r
- return Str.str;\r
-}\r