PERF_INIT_CUM_DATA (LOAD_IMAGE_TOK),\r
PERF_INIT_CUM_DATA (START_IMAGE_TOK),\r
PERF_INIT_CUM_DATA (DRIVERBINDING_START_TOK),\r
- PERF_INIT_CUM_DATA (DRIVERBINDING_SUPPORT_TOK)\r
+ PERF_INIT_CUM_DATA (DRIVERBINDING_SUPPORT_TOK),\r
+ PERF_INIT_CUM_DATA (DRIVERBINDING_STOP_TOK)\r
};\r
\r
/// Number of items for which we are gathering cumulative statistics.\r
SHELL_FREE_NON_NULL (StringPtrUnknown);\r
}\r
\r
-/**\r
- This function scan ACPI table in RSDT.\r
-\r
- @param Rsdt ACPI RSDT\r
- @param Signature ACPI table signature\r
-\r
- @return ACPI table\r
-**/\r
-VOID *\r
-ScanTableInRSDT (\r
- IN RSDT_TABLE *Rsdt,\r
- IN UINT32 Signature\r
- )\r
-{\r
- UINTN Index;\r
- UINT32 EntryCount;\r
- UINT32 *EntryPtr;\r
- EFI_ACPI_DESCRIPTION_HEADER *Table;\r
-\r
- EntryCount = (Rsdt->Header.Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof(UINT32);\r
-\r
- EntryPtr = &Rsdt->Entry;\r
- for (Index = 0; Index < EntryCount; Index ++, EntryPtr ++) {\r
- Table = (EFI_ACPI_DESCRIPTION_HEADER*)((UINTN)(*EntryPtr));\r
- if (Table->Signature == Signature) {\r
- return Table;\r
- }\r
- }\r
-\r
- return NULL;\r
-}\r
-\r
-/**\r
- This function scan ACPI table in XSDT.\r
-\r
- @param Xsdt ACPI XSDT\r
- @param Signature ACPI table signature\r
-\r
- @return ACPI table\r
-**/\r
-VOID *\r
-ScanTableInXSDT (\r
- IN XSDT_TABLE *Xsdt,\r
- IN UINT32 Signature\r
- )\r
-{\r
- UINTN Index;\r
- UINT32 EntryCount;\r
- UINT64 EntryPtr;\r
- UINTN BasePtr;\r
- EFI_ACPI_DESCRIPTION_HEADER *Table;\r
-\r
- EntryCount = (Xsdt->Header.Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof(UINT64);\r
-\r
- BasePtr = (UINTN)(&(Xsdt->Entry));\r
- for (Index = 0; Index < EntryCount; Index ++) {\r
- CopyMem (&EntryPtr, (VOID *)(BasePtr + Index * sizeof(UINT64)), sizeof(UINT64));\r
- Table = (EFI_ACPI_DESCRIPTION_HEADER*)((UINTN)(EntryPtr));\r
- if (Table->Signature == Signature) {\r
- return Table;\r
- }\r
- }\r
-\r
- return NULL;\r
-}\r
-\r
-/**\r
- This function scan ACPI table in RSDP.\r
-\r
- @param Rsdp ACPI RSDP\r
- @param Signature ACPI table signature\r
-\r
- @return ACPI table\r
-**/\r
-VOID *\r
-FindAcpiPtr (\r
- IN EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp,\r
- IN UINT32 Signature\r
- )\r
-{\r
- EFI_ACPI_DESCRIPTION_HEADER *AcpiTable;\r
- RSDT_TABLE *Rsdt;\r
- XSDT_TABLE *Xsdt;\r
-\r
- AcpiTable = NULL;\r
-\r
- //\r
- // Check ACPI2.0 table\r
- //\r
- Rsdt = (RSDT_TABLE *)(UINTN)Rsdp->RsdtAddress;\r
- Xsdt = NULL;\r
- if ((Rsdp->Revision >= 2) && (Rsdp->XsdtAddress < (UINT64)(UINTN)-1)) {\r
- Xsdt = (XSDT_TABLE *)(UINTN)Rsdp->XsdtAddress;\r
- }\r
- //\r
- // Check Xsdt\r
- //\r
- if (Xsdt != NULL) {\r
- AcpiTable = ScanTableInXSDT (Xsdt, Signature);\r
- }\r
- //\r
- // Check Rsdt\r
- //\r
- if ((AcpiTable == NULL) && (Rsdt != NULL)) {\r
- AcpiTable = ScanTableInRSDT (Rsdt, Signature);\r
- }\r
-\r
- return AcpiTable;\r
-}\r
-\r
/**\r
Get Boot performance table form Acpi table.\r
\r
GetBootPerformanceTable (\r
)\r
{\r
- EFI_STATUS Status;\r
- VOID *AcpiTable;\r
FIRMWARE_PERFORMANCE_TABLE *FirmwarePerformanceTable;\r
\r
- AcpiTable = NULL;\r
-\r
- Status = EfiGetSystemConfigurationTable (\r
- &gEfiAcpi20TableGuid,\r
- &AcpiTable\r
- );\r
- if (EFI_ERROR (Status)) {\r
- Status = EfiGetSystemConfigurationTable (\r
- &gEfiAcpi10TableGuid,\r
- &AcpiTable\r
- );\r
- }\r
- if (EFI_ERROR(Status) || AcpiTable == NULL) {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_GET_ACPI_TABLE_FAIL), mDpHiiHandle);\r
- return Status;\r
- }\r
-\r
- FirmwarePerformanceTable = FindAcpiPtr (\r
- (EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)AcpiTable,\r
- EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE\r
- );\r
+ FirmwarePerformanceTable = (FIRMWARE_PERFORMANCE_TABLE *) EfiLocateFirstAcpiTable (\r
+ EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE\r
+ );\r
if (FirmwarePerformanceTable == NULL) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_GET_ACPI_FPDT_FAIL), mDpHiiHandle);\r
return EFI_NOT_FOUND;\r
UINTN NameSize;\r
SHELL_STATUS ShellStatus;\r
TIMER_INFO TimerInfo;\r
+ UINT64 Intermediate;\r
\r
StringPtr = NULL;\r
SummaryMode = FALSE;\r
if (EFI_ERROR(Status)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_INVALID_ARG), mDpHiiHandle);\r
return SHELL_INVALID_PARAMETER;\r
+ } else if (ShellCommandLineGetCount(ParamPackage) > 1){\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_TOO_MANY), mDpHiiHandle);\r
+ return SHELL_INVALID_PARAMETER;\r
}\r
\r
//\r
mShowId = ShellCommandLineGetFlag (ParamPackage, L"-i");\r
CumulativeMode = ShellCommandLineGetFlag (ParamPackage, L"-c");\r
\r
+ if (AllMode && RawMode) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_CONFLICT_ARG), mDpHiiHandle, L"-A", L"-R");\r
+ return SHELL_INVALID_PARAMETER;\r
+ }\r
+\r
// Options with Values\r
- CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-n");\r
- if (CmdLineArg == NULL) {\r
- Number2Display = DEFAULT_DISPLAYCOUNT;\r
- } else {\r
- Number2Display = StrDecimalToUintn(CmdLineArg);\r
- if (Number2Display == 0) {\r
- Number2Display = MAXIMUM_DISPLAYCOUNT;\r
+ if (ShellCommandLineGetFlag (ParamPackage, L"-n")) {\r
+ CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-n");\r
+ if (CmdLineArg == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_TOO_FEW), mDpHiiHandle);\r
+ return SHELL_INVALID_PARAMETER;\r
+ } else {\r
+ if (!(RawMode || AllMode)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_NO_RAW_ALL), mDpHiiHandle);\r
+ return SHELL_INVALID_PARAMETER;\r
+ }\r
+ Status = ShellConvertStringToUint64(CmdLineArg, &Intermediate, FALSE, TRUE);\r
+ if (EFI_ERROR (Status)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_INVALID_NUM_ARG), mDpHiiHandle, L"-n");\r
+ return SHELL_INVALID_PARAMETER;\r
+ } else {\r
+ Number2Display = (UINTN)Intermediate;\r
+ if (Number2Display == 0 || Number2Display > MAXIMUM_DISPLAYCOUNT) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_INVALID_RANGE), mDpHiiHandle, L"-n", 0, MAXIMUM_DISPLAYCOUNT);\r
+ return SHELL_INVALID_PARAMETER;\r
+ }\r
+ }\r
}\r
+ } else {\r
+ Number2Display = DEFAULT_DISPLAYCOUNT;\r
}\r
\r
- CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-t");\r
- if (CmdLineArg == NULL) {\r
- mInterestThreshold = DEFAULT_THRESHOLD; // 1ms := 1,000 us\r
+ if (ShellCommandLineGetFlag (ParamPackage, L"-t")) {\r
+ CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-t");\r
+ if (CmdLineArg == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_TOO_FEW), mDpHiiHandle);\r
+ return SHELL_INVALID_PARAMETER;\r
+ } else {\r
+ Status = ShellConvertStringToUint64(CmdLineArg, &Intermediate, FALSE, TRUE);\r
+ if (EFI_ERROR (Status)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_INVALID_NUM_ARG), mDpHiiHandle, L"-t");\r
+ return SHELL_INVALID_PARAMETER;\r
+ } else {\r
+ mInterestThreshold = Intermediate;\r
+ }\r
+ }\r
} else {\r
- mInterestThreshold = StrDecimalToUint64(CmdLineArg);\r
+ mInterestThreshold = DEFAULT_THRESHOLD; // 1ms := 1,000 us\r
}\r
\r
+ if (ShellCommandLineGetFlag (ParamPackage, L"-c")) {\r
+ CustomCumulativeToken = ShellCommandLineGetValue (ParamPackage, L"-c");\r
+ if (CustomCumulativeToken == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_TOO_FEW), mDpHiiHandle);\r
+ return SHELL_INVALID_PARAMETER;\r
+ } else {\r
+ CustomCumulativeData = AllocateZeroPool (sizeof (PERF_CUM_DATA));\r
+ if (CustomCumulativeData == NULL) {\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
+ goto Done;\r
+ }\r
+ CustomCumulativeData->MinDur = PERF_MAXDUR;\r
+ CustomCumulativeData->MaxDur = 0;\r
+ CustomCumulativeData->Count = 0;\r
+ CustomCumulativeData->Duration = 0;\r
+ NameSize = StrLen (CustomCumulativeToken) + 1;\r
+ CustomCumulativeData->Name = AllocateZeroPool (NameSize);\r
+ if (CustomCumulativeData->Name == NULL) {\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
+ goto Done;\r
+ }\r
+ UnicodeStrToAsciiStrS (CustomCumulativeToken, CustomCumulativeData->Name, NameSize);\r
+ }\r
+ }\r
\r
//\r
// DP dump performance data by parsing FPDT table in ACPI table.\r
//\r
InitSummaryData ();\r
\r
- //\r
- // Init the custom cumulative data.\r
- //\r
- CustomCumulativeToken = ShellCommandLineGetValue (ParamPackage, L"-c");\r
- if (CustomCumulativeToken != NULL) {\r
- CustomCumulativeData = AllocateZeroPool (sizeof (PERF_CUM_DATA));\r
- if (CustomCumulativeData == NULL) {\r
- ShellStatus = SHELL_OUT_OF_RESOURCES;\r
- goto Done;\r
- }\r
- CustomCumulativeData->MinDur = PERF_MAXDUR;\r
- CustomCumulativeData->MaxDur = 0;\r
- CustomCumulativeData->Count = 0;\r
- CustomCumulativeData->Duration = 0;\r
- NameSize = StrLen (CustomCumulativeToken) + 1;\r
- CustomCumulativeData->Name = AllocateZeroPool (NameSize);\r
- if (CustomCumulativeData->Name == NULL) {\r
- ShellStatus = SHELL_OUT_OF_RESOURCES;\r
- goto Done;\r
- }\r
- UnicodeStrToAsciiStrS (CustomCumulativeToken, CustomCumulativeData->Name, NameSize);\r
- }\r
-\r
//\r
// Timer specific processing\r
//\r