**/\r
\r
#include "UefiHandleParsingLib.h"\r
+#include "IndustryStandard/Acpi10.h"\r
\r
EFI_HANDLE mHandleParsingHiiHandle;\r
HANDLE_INDEX_LIST mHandleList = {{{NULL,NULL},0,0},0};\r
}\r
*/\r
\r
+/**\r
+ Function to dump information about PciRootBridgeIo.\r
+\r
+ This will allocate the return buffer from boot services pool.\r
+\r
+ @param[in] TheHandle The handle that has PciRootBridgeIo installed.\r
+ @param[in] Verbose TRUE for additional information, FALSE otherwise.\r
+\r
+ @retval A poitner to a string containing the information.\r
+**/\r
+CHAR16*\r
+EFIAPI\r
+PciRootBridgeIoDumpInformation(\r
+ IN CONST EFI_HANDLE TheHandle,\r
+ IN CONST BOOLEAN Verbose\r
+ )\r
+{\r
+ EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;\r
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Configuration;\r
+ UINT64 Supports;\r
+ UINT64 Attributes;\r
+ CHAR16 *Temp;\r
+ CHAR16 *Temp2;\r
+ CHAR16 *RetVal;\r
+ EFI_STATUS Status;\r
+\r
+ RetVal = NULL;\r
+\r
+ if (!Verbose) {\r
+ return (CatSPrint(NULL, L"PciRootBridgeIo"));\r
+ }\r
+\r
+ Status = gBS->HandleProtocol(\r
+ TheHandle,\r
+ &gEfiPciRootBridgeIoProtocolGuid,\r
+ (VOID**)&PciRootBridgeIo);\r
+\r
+ if (EFI_ERROR(Status)) {\r
+ return NULL;\r
+ }\r
+\r
+ Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_PH), NULL);\r
+ Temp2 = CatSPrint(L"\r\n", Temp, PciRootBridgeIo->ParentHandle);\r
+ FreePool(Temp);\r
+ RetVal = Temp2;\r
+ Temp2 = NULL;\r
+ \r
+ Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_SEG), NULL);\r
+ Temp2 = CatSPrint(RetVal, Temp, PciRootBridgeIo->SegmentNumber);\r
+ FreePool(Temp);\r
+ FreePool(RetVal);\r
+ RetVal = Temp2;\r
+ Temp2 = NULL;\r
+\r
+ Supports = 0;\r
+ Attributes = 0;\r
+ Status = PciRootBridgeIo->GetAttributes (PciRootBridgeIo, &Supports, &Attributes);\r
+ if (!EFI_ERROR(Status)) {\r
+ Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_ATT), NULL);\r
+ Temp2 = CatSPrint(RetVal, Temp, Attributes);\r
+ FreePool(Temp);\r
+ FreePool(RetVal);\r
+ RetVal = Temp2;\r
+ Temp2 = NULL;\r
+ \r
+ Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_SUPPORTS), NULL);\r
+ Temp2 = CatSPrint(RetVal, Temp, Supports);\r
+ FreePool(Temp);\r
+ FreePool(RetVal);\r
+ RetVal = Temp2;\r
+ Temp2 = NULL;\r
+ }\r
+\r
+ Configuration = NULL;\r
+ Status = PciRootBridgeIo->Configuration (PciRootBridgeIo, (VOID **) &Configuration);\r
+ if (!EFI_ERROR(Status) && Configuration != NULL) {\r
+ Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_TITLE), NULL);\r
+ Temp2 = CatSPrint(RetVal, Temp, Supports);\r
+ FreePool(Temp);\r
+ FreePool(RetVal);\r
+ RetVal = Temp2;\r
+ Temp2 = NULL;\r
+ while (Configuration->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR) {\r
+ Temp = NULL;\r
+ switch (Configuration->ResType) {\r
+ case ACPI_ADDRESS_SPACE_TYPE_MEM:\r
+ Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_MEM), NULL);\r
+ break;\r
+ case ACPI_ADDRESS_SPACE_TYPE_IO:\r
+ Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_IO), NULL);\r
+ break;\r
+ case ACPI_ADDRESS_SPACE_TYPE_BUS:\r
+ Temp = HiiGetString(mHandleParsingHiiHandle, STRING_TOKEN(STR_PCIRB_DUMP_BUS), NULL);\r
+ break;\r
+ }\r
+ if (Temp != NULL) {\r
+ Temp2 = CatSPrint(RetVal, L"%s", Temp);\r
+ FreePool(Temp);\r
+ FreePool(RetVal);\r
+ RetVal = Temp2;\r
+ Temp2 = NULL;\r
+ }\r
+\r
+ Temp2 = CatSPrint(RetVal, \r
+ L"%H%02x %016lx %016lx %02x%N\r\n",\r
+ Configuration->SpecificFlag,\r
+ Configuration->AddrRangeMin,\r
+ Configuration->AddrRangeMax,\r
+ Configuration->AddrSpaceGranularity\r
+ );\r
+ FreePool(RetVal);\r
+ RetVal = Temp2;\r
+ Temp2 = NULL;\r
+ Configuration++;\r
+ }\r
+ }\r
+ return (RetVal);\r
+}\r
+\r
/**\r
Function to dump information about SimpleTextOut.\r
\r
{STRING_TOKEN(STR_BLK_IO), &gEfiBlockIoProtocolGuid, NULL},\r
{STRING_TOKEN(STR_UC), &gEfiUnicodeCollationProtocolGuid, NULL},\r
{STRING_TOKEN(STR_UC2), &gEfiUnicodeCollation2ProtocolGuid, NULL},\r
- {STRING_TOKEN(STR_PCIRB_IO), &gEfiPciRootBridgeIoProtocolGuid, NULL},\r
+ {STRING_TOKEN(STR_PCIRB_IO), &gEfiPciRootBridgeIoProtocolGuid, PciRootBridgeIoDumpInformation},\r
{STRING_TOKEN(STR_PCI_IO), &gEfiPciIoProtocolGuid, NULL},\r
{STRING_TOKEN(STR_SCSI_PT), &gEfiScsiPassThruProtocolGuid, NULL},\r
{STRING_TOKEN(STR_SCSI_IO), &gEfiScsiIoProtocolGuid, NULL},\r