]> git.proxmox.com Git - mirror_edk2.git/blame - PerformancePkg/Dp_App/Dp.c
MdeModulePkg: Add performance property configuration table
[mirror_edk2.git] / PerformancePkg / Dp_App / Dp.c
CommitLineData
c06ad33e 1/** @file\r
86da563d
ED
2 Shell application for Displaying Performance Metrics.\r
3\r
4 The Dp application reads performance data and presents it in several\r
5 different formats depending upon the needs of the user. Both\r
6 Trace and Measured Profiling information is processed and presented.\r
7\r
8 Dp uses the "PerformanceLib" to read the measurement records.\r
9 The "TimerLib" provides information about the timer, such as frequency,\r
10 beginning, and ending counter values.\r
11 Measurement records contain identifying information (Handle, Token, Module)\r
12 and start and end time values.\r
13 Dp uses this information to group records in different ways. It also uses\r
14 timer information to calculate elapsed time for each measurement.\r
15 \r
b7b2b3c8 16 Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
3e9de670 17 (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>\r
86da563d
ED
18 This program and the accompanying materials\r
19 are licensed and made available under the terms and conditions of the BSD License\r
20 which accompanies this distribution. The full text of the license may be found at\r
21 http://opensource.org/licenses/bsd-license.php\r
22 \r
23 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
24 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
c06ad33e 25**/\r
26\r
27#include <Library/UefiApplicationEntryPoint.h>\r
b7b2b3c8 28#include <Library/UefiBootServicesTableLib.h>\r
c06ad33e 29#include <Library/ShellLib.h>\r
30#include <Library/BaseLib.h>\r
31#include <Library/MemoryAllocationLib.h>\r
32#include <Library/DebugLib.h>\r
33#include <Library/TimerLib.h>\r
34#include <Library/UefiLib.h>\r
b7b2b3c8 35#include <Library/UefiHiiServicesLib.h>\r
c06ad33e 36#include <Library/HiiLib.h>\r
37#include <Library/PcdLib.h>\r
38\r
39#include <Guid/Performance.h>\r
40\r
41#include <PerformanceTokens.h>\r
42#include "Dp.h"\r
43#include "Literals.h"\r
44#include "DpInternal.h"\r
45\r
b7b2b3c8
QS
46//\r
47// String token ID of help message text.\r
48// Shell supports to find help message in the resource section of an application image if\r
49// .MAN file is not found. This global variable is added to make build tool recognizes\r
50// that the help string is consumed by user and then build tool will add the string into\r
51// the resource section. Thus the application can use '-?' option to show help message in\r
52// Shell.\r
53//\r
54GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mDpStrEngHelpTokenId = STRING_TOKEN (STR_DP_HELP_INFORMATION);\r
55\r
c06ad33e 56//\r
57/// Module-Global Variables\r
9dd74618 58///@{\r
c06ad33e 59EFI_HII_HANDLE gHiiHandle;\r
88359546 60SHELL_PARAM_ITEM *DpParamList = NULL;\r
c06ad33e 61CHAR16 *mPrintTokenBuffer = NULL;\r
a2daf8db
SZ
62CHAR16 mGaugeString[DP_GAUGE_STRING_LENGTH + 1];\r
63CHAR16 mUnicodeToken[DXE_PERFORMANCE_STRING_SIZE];\r
c06ad33e 64UINT64 mInterestThreshold;\r
0b84f444 65BOOLEAN mShowId = FALSE;\r
c06ad33e 66\r
67PERF_SUMMARY_DATA SummaryData = { 0 }; ///< Create the SummaryData structure and init. to ZERO.\r
68\r
69/// Timer Specific Information.\r
70TIMER_INFO TimerInfo;\r
71\r
72/// Items for which to gather cumulative statistics.\r
73PERF_CUM_DATA CumData[] = {\r
74 PERF_INIT_CUM_DATA (LOAD_IMAGE_TOK),\r
75 PERF_INIT_CUM_DATA (START_IMAGE_TOK),\r
76 PERF_INIT_CUM_DATA (DRIVERBINDING_START_TOK),\r
77 PERF_INIT_CUM_DATA (DRIVERBINDING_SUPPORT_TOK)\r
78};\r
79\r
80/// Number of items for which we are gathering cumulative statistics.\r
81UINT32 const NumCum = sizeof(CumData) / sizeof(PERF_CUM_DATA);\r
82\r
88359546
ED
83PARAM_ITEM_LIST ParamList[] = {\r
84 {STRING_TOKEN (STR_DP_OPTION_QH), TypeFlag}, // -? Help\r
85 {STRING_TOKEN (STR_DP_OPTION_LH), TypeFlag}, // -h Help\r
86 {STRING_TOKEN (STR_DP_OPTION_UH), TypeFlag}, // -H Help\r
87 {STRING_TOKEN (STR_DP_OPTION_LV), TypeFlag}, // -v Verbose Mode\r
88 {STRING_TOKEN (STR_DP_OPTION_UA), TypeFlag}, // -A All, Cooked\r
89 {STRING_TOKEN (STR_DP_OPTION_UR), TypeFlag}, // -R RAW All\r
90 {STRING_TOKEN (STR_DP_OPTION_LS), TypeFlag}, // -s Summary\r
c06ad33e 91#if PROFILING_IMPLEMENTED\r
88359546
ED
92 {STRING_TOKEN (STR_DP_OPTION_UP), TypeFlag}, // -P Dump Profile Data\r
93 {STRING_TOKEN (STR_DP_OPTION_UT), TypeFlag}, // -T Dump Trace Data\r
c06ad33e 94#endif\r
88359546 95 {STRING_TOKEN (STR_DP_OPTION_LX), TypeFlag}, // -x eXclude Cumulative Items\r
0b84f444 96 {STRING_TOKEN (STR_DP_OPTION_LI), TypeFlag}, // -i Display Identifier\r
d28f77df 97 {STRING_TOKEN (STR_DP_OPTION_LC), TypeValue}, // -c Display cumulative data.\r
88359546
ED
98 {STRING_TOKEN (STR_DP_OPTION_LN), TypeValue}, // -n # Number of records to display for A and R\r
99 {STRING_TOKEN (STR_DP_OPTION_LT), TypeValue} // -t # Threshold of interest\r
c06ad33e 100 };\r
101\r
9dd74618 102///@}\r
c06ad33e 103\r
88359546
ED
104/**\r
105 Transfer the param list value and get the command line parse.\r
106\r
107**/\r
108VOID\r
109InitialShellParamList( void )\r
110{\r
111 UINT32 ListIndex;\r
112 UINT32 ListLength; \r
113\r
114 //\r
115 // Allocate one more for the end tag.\r
116 //\r
fcfba04a 117 ListLength = ARRAY_SIZE (ParamList) + 1; \r
88359546
ED
118 DpParamList = AllocatePool (sizeof (SHELL_PARAM_ITEM) * ListLength);\r
119 ASSERT (DpParamList != NULL);\r
120 \r
121 for (ListIndex = 0; ListIndex < ListLength - 1; ListIndex ++)\r
122 { \r
123 DpParamList[ListIndex].Name = HiiGetString (gHiiHandle, ParamList[ListIndex].Token, NULL); \r
124 DpParamList[ListIndex].Type = ParamList[ListIndex].Type;\r
125 }\r
126 DpParamList[ListIndex].Name = NULL;\r
127 DpParamList[ListIndex].Type = TypeMax;\r
128}\r
129\r
9dd74618
ED
130/**\r
131 Display Usage and Help information.\r
132**/\r
c06ad33e 133VOID\r
134ShowHelp( void )\r
135{\r
136 PrintToken (STRING_TOKEN (STR_DP_HELP_HEAD));\r
137#if PROFILING_IMPLEMENTED\r
138 PrintToken (STRING_TOKEN (STR_DP_HELP_FLAGS));\r
139#else\r
140 PrintToken (STRING_TOKEN (STR_DP_HELP_FLAGS_2));\r
141#endif // PROFILING_IMPLEMENTED\r
142 PrintToken (STRING_TOKEN (STR_DP_HELP_PAGINATE));\r
143 PrintToken (STRING_TOKEN (STR_DP_HELP_VERBOSE));\r
144 PrintToken (STRING_TOKEN (STR_DP_HELP_EXCLUDE));\r
145 PrintToken (STRING_TOKEN (STR_DP_HELP_STAT));\r
146 PrintToken (STRING_TOKEN (STR_DP_HELP_ALL));\r
147 PrintToken (STRING_TOKEN (STR_DP_HELP_RAW));\r
148#if PROFILING_IMPLEMENTED\r
149 PrintToken (STRING_TOKEN (STR_DP_HELP_TRACE));\r
150 PrintToken (STRING_TOKEN (STR_DP_HELP_PROFILE));\r
151#endif // PROFILING_IMPLEMENTED\r
152 PrintToken (STRING_TOKEN (STR_DP_HELP_THRESHOLD));\r
153 PrintToken (STRING_TOKEN (STR_DP_HELP_COUNT));\r
0b84f444 154 PrintToken (STRING_TOKEN (STR_DP_HELP_ID));\r
d28f77df 155 PrintToken (STRING_TOKEN (STR_DP_HELP_CUM_DATA));\r
c06ad33e 156 PrintToken (STRING_TOKEN (STR_DP_HELP_HELP));\r
157 Print(L"\n");\r
158}\r
159\r
9dd74618
ED
160/**\r
161 Display the trailing Verbose information.\r
162**/\r
c06ad33e 163VOID\r
164DumpStatistics( void )\r
165{\r
166 EFI_STRING StringPtr;\r
88359546
ED
167 EFI_STRING StringPtrUnknown;\r
168 StringPtr = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_SECTION_STATISTICS), NULL);\r
169 StringPtrUnknown = HiiGetString (gHiiHandle, STRING_TOKEN (STR_ALIT_UNKNOWN), NULL); \r
c06ad33e 170 PrintToken( STRING_TOKEN (STR_DP_SECTION_HEADER),\r
88359546 171 (StringPtr == NULL) ? StringPtrUnknown : StringPtr);\r
c06ad33e 172\r
173 PrintToken( STRING_TOKEN (STR_DP_STATS_NUMTRACE), SummaryData.NumTrace);\r
174 PrintToken( STRING_TOKEN (STR_DP_STATS_NUMINCOMPLETE), SummaryData.NumIncomplete);\r
175 PrintToken( STRING_TOKEN (STR_DP_STATS_NUMPHASES), SummaryData.NumSummary);\r
176 PrintToken( STRING_TOKEN (STR_DP_STATS_NUMHANDLES), SummaryData.NumHandles, SummaryData.NumTrace - SummaryData.NumHandles);\r
177 PrintToken( STRING_TOKEN (STR_DP_STATS_NUMPEIMS), SummaryData.NumPEIMs);\r
178 PrintToken( STRING_TOKEN (STR_DP_STATS_NUMGLOBALS), SummaryData.NumGlobal);\r
179#if PROFILING_IMPLEMENTED\r
180 PrintToken( STRING_TOKEN (STR_DP_STATS_NUMPROFILE), SummaryData.NumProfile);\r
181#endif // PROFILING_IMPLEMENTED\r
88359546
ED
182 FreePool (StringPtr);\r
183 FreePool (StringPtrUnknown);\r
c06ad33e 184}\r
185\r
d28f77df 186/**\r
9dd74618
ED
187 Dump performance data.\r
188 \r
189 @param[in] ImageHandle The image handle.\r
190 @param[in] SystemTable The system table.\r
3e9de670 191\r
9dd74618
ED
192 @retval EFI_SUCCESS Command completed successfully.\r
193 @retval EFI_INVALID_PARAMETER Command usage error.\r
3e9de670 194 @retval EFI_ABORTED The user aborts the operation.\r
9dd74618 195 @retval value Unknown error.\r
c06ad33e 196**/\r
197EFI_STATUS\r
198EFIAPI\r
199InitializeDp (\r
200 IN EFI_HANDLE ImageHandle,\r
201 IN EFI_SYSTEM_TABLE *SystemTable\r
202 )\r
203{\r
204 UINT64 Freq;\r
205 UINT64 Ticker;\r
88359546
ED
206 UINT32 ListIndex;\r
207 \r
c06ad33e 208 LIST_ENTRY *ParamPackage;\r
209 CONST CHAR16 *CmdLineArg;\r
210 EFI_STRING StringPtr;\r
211 UINTN Number2Display;\r
212\r
b7b2b3c8
QS
213 EFI_STATUS Status;\r
214 BOOLEAN SummaryMode;\r
215 BOOLEAN VerboseMode;\r
216 BOOLEAN AllMode;\r
217 BOOLEAN RawMode;\r
218 BOOLEAN TraceMode;\r
219 BOOLEAN ProfileMode;\r
220 BOOLEAN ExcludeMode;\r
221 BOOLEAN CumulativeMode;\r
222 CONST CHAR16 *CustomCumulativeToken;\r
223 PERF_CUM_DATA *CustomCumulativeData;\r
23cfa2b9 224 UINTN NameSize;\r
b7b2b3c8 225 EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
9dd74618 226\r
88359546
ED
227 EFI_STRING StringDpOptionQh;\r
228 EFI_STRING StringDpOptionLh;\r
229 EFI_STRING StringDpOptionUh;\r
230 EFI_STRING StringDpOptionLv;\r
231 EFI_STRING StringDpOptionUs;\r
232 EFI_STRING StringDpOptionLs;\r
233 EFI_STRING StringDpOptionUa;\r
234 EFI_STRING StringDpOptionUr;\r
235 EFI_STRING StringDpOptionUt;\r
236 EFI_STRING StringDpOptionUp;\r
237 EFI_STRING StringDpOptionLx;\r
238 EFI_STRING StringDpOptionLn;\r
239 EFI_STRING StringDpOptionLt;\r
0b84f444 240 EFI_STRING StringDpOptionLi;\r
d28f77df 241 EFI_STRING StringDpOptionLc;\r
88359546 242 \r
9dd74618
ED
243 SummaryMode = FALSE;\r
244 VerboseMode = FALSE;\r
245 AllMode = FALSE;\r
246 RawMode = FALSE;\r
247 TraceMode = FALSE;\r
248 ProfileMode = FALSE;\r
249 ExcludeMode = FALSE;\r
d28f77df
CS
250 CumulativeMode = FALSE;\r
251 CustomCumulativeData = NULL;\r
88359546
ED
252\r
253 StringDpOptionQh = NULL;\r
254 StringDpOptionLh = NULL;\r
255 StringDpOptionUh = NULL;\r
256 StringDpOptionLv = NULL;\r
257 StringDpOptionUs = NULL;\r
258 StringDpOptionLs = NULL;\r
259 StringDpOptionUa = NULL;\r
260 StringDpOptionUr = NULL;\r
261 StringDpOptionUt = NULL;\r
262 StringDpOptionUp = NULL;\r
263 StringDpOptionLx = NULL;\r
264 StringDpOptionLn = NULL;\r
265 StringDpOptionLt = NULL;\r
0b84f444 266 StringDpOptionLi = NULL;\r
d28f77df 267 StringDpOptionLc = NULL;\r
88359546
ED
268 StringPtr = NULL;\r
269\r
c06ad33e 270 // Get DP's entry time as soon as possible.\r
271 // This is used as the Shell-Phase end time.\r
272 //\r
273 Ticker = GetPerformanceCounter ();\r
274\r
c06ad33e 275 //\r
b7b2b3c8
QS
276 // Retrieve HII package list from ImageHandle\r
277 //\r
278 Status = gBS->OpenProtocol (\r
279 ImageHandle,\r
280 &gEfiHiiPackageListProtocolGuid,\r
281 (VOID **) &PackageList,\r
282 ImageHandle,\r
283 NULL,\r
284 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
285 );\r
286 if (EFI_ERROR (Status)) {\r
287 return Status;\r
288 }\r
289\r
290 //\r
291 // Publish HII package list to HII Database.\r
292 //\r
293 Status = gHiiDatabase->NewPackageList (\r
294 gHiiDatabase,\r
295 PackageList,\r
296 NULL,\r
297 &gHiiHandle\r
298 );\r
299 if (EFI_ERROR (Status)) {\r
300 return Status;\r
301 }\r
c06ad33e 302 ASSERT (gHiiHandle != NULL);\r
b7b2b3c8 303 \r
c06ad33e 304\r
88359546
ED
305 // Initial the command list\r
306 //\r
307 InitialShellParamList ();\r
308 \r
c06ad33e 309/****************************************************************************\r
310**** Process Command Line arguments ****\r
311****************************************************************************/\r
312 Status = ShellCommandLineParse (DpParamList, &ParamPackage, NULL, TRUE);\r
313\r
314 if (EFI_ERROR(Status)) {\r
315 PrintToken (STRING_TOKEN (STR_DP_INVALID_ARG));\r
316 ShowHelp();\r
317 }\r
318 else {\r
88359546
ED
319 StringDpOptionQh = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_QH), NULL);\r
320 StringDpOptionLh = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LH), NULL);\r
321 StringDpOptionUh = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_UH), NULL);\r
322 \r
323 if (ShellCommandLineGetFlag (ParamPackage, StringDpOptionQh) ||\r
324 ShellCommandLineGetFlag (ParamPackage, StringDpOptionLh) ||\r
325 ShellCommandLineGetFlag (ParamPackage, StringDpOptionUh))\r
c06ad33e 326 {\r
327 ShowHelp();\r
328 }\r
329 else {\r
88359546
ED
330 StringDpOptionLv = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LV), NULL);\r
331 StringDpOptionUs = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_US), NULL);\r
332 StringDpOptionLs = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LS), NULL);\r
333 StringDpOptionUa = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_UA), NULL);\r
334 StringDpOptionUr = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_UR), NULL);\r
335 StringDpOptionUt = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_UT), NULL);\r
336 StringDpOptionUp = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_UP), NULL);\r
337 StringDpOptionLx = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LX), NULL);\r
338 StringDpOptionLn = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LN), NULL);\r
339 StringDpOptionLt = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LT), NULL);\r
0b84f444 340 StringDpOptionLi = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LI), NULL);\r
d28f77df 341 StringDpOptionLc = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LC), NULL);\r
88359546 342 \r
c06ad33e 343 // Boolean Options\r
88359546
ED
344 // \r
345 VerboseMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionLv);\r
aec905b7
ED
346 SummaryMode = (BOOLEAN) (ShellCommandLineGetFlag (ParamPackage, StringDpOptionUs) ||\r
347 ShellCommandLineGetFlag (ParamPackage, StringDpOptionLs));\r
88359546
ED
348 AllMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionUa);\r
349 RawMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionUr);\r
c06ad33e 350#if PROFILING_IMPLEMENTED\r
88359546
ED
351 TraceMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionUt);\r
352 ProfileMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionUp);\r
c06ad33e 353#endif // PROFILING_IMPLEMENTED\r
88359546 354 ExcludeMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionLx);\r
0b84f444 355 mShowId = ShellCommandLineGetFlag (ParamPackage, StringDpOptionLi);\r
d28f77df 356 CumulativeMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionLc);\r
c06ad33e 357\r
358 // Options with Values\r
88359546 359 CmdLineArg = ShellCommandLineGetValue (ParamPackage, StringDpOptionLn);\r
c06ad33e 360 if (CmdLineArg == NULL) {\r
361 Number2Display = DEFAULT_DISPLAYCOUNT;\r
362 }\r
363 else {\r
364 Number2Display = StrDecimalToUintn(CmdLineArg);\r
365 if (Number2Display == 0) {\r
366 Number2Display = MAXIMUM_DISPLAYCOUNT;\r
367 }\r
368 }\r
88359546 369 CmdLineArg = ShellCommandLineGetValue (ParamPackage, StringDpOptionLt);\r
c06ad33e 370 if (CmdLineArg == NULL) {\r
371 mInterestThreshold = DEFAULT_THRESHOLD; // 1ms := 1,000 us\r
372 }\r
373 else {\r
374 mInterestThreshold = StrDecimalToUint64(CmdLineArg);\r
375 }\r
376 // Handle Flag combinations and default behaviors\r
377 // If both TraceMode and ProfileMode are FALSE, set them both to TRUE\r
378 if ((! TraceMode) && (! ProfileMode)) {\r
379 TraceMode = TRUE;\r
380#if PROFILING_IMPLEMENTED\r
381 ProfileMode = TRUE;\r
382#endif // PROFILING_IMPLEMENTED\r
383 }\r
384\r
d28f77df
CS
385 //\r
386 // Init the custom cumulative data.\r
387 //\r
388 CustomCumulativeToken = ShellCommandLineGetValue (ParamPackage, StringDpOptionLc);\r
389 if (CustomCumulativeToken != NULL) {\r
390 CustomCumulativeData = AllocateZeroPool (sizeof (PERF_CUM_DATA));\r
c4ace582 391 ASSERT (CustomCumulativeData != NULL);\r
d28f77df
CS
392 CustomCumulativeData->MinDur = 0;\r
393 CustomCumulativeData->MaxDur = 0;\r
394 CustomCumulativeData->Count = 0;\r
395 CustomCumulativeData->Duration = 0;\r
23cfa2b9
SZ
396 NameSize = StrLen (CustomCumulativeToken) + 1;\r
397 CustomCumulativeData->Name = AllocateZeroPool (NameSize);\r
398 UnicodeStrToAsciiStrS (CustomCumulativeToken, CustomCumulativeData->Name, NameSize);\r
d28f77df
CS
399 }\r
400\r
c06ad33e 401/****************************************************************************\r
402**** Timer specific processing ****\r
403****************************************************************************/\r
404 // Get the Performance counter characteristics:\r
405 // Freq = Frequency in Hz\r
406 // StartCount = Value loaded into the counter when it starts counting\r
407 // EndCount = Value counter counts to before it needs to be reset\r
408 //\r
409 Freq = GetPerformanceCounterProperties (&TimerInfo.StartCount, &TimerInfo.EndCount);\r
410\r
411 // Convert the Frequency from Hz to KHz\r
412 TimerInfo.Frequency = (UINT32)DivU64x32 (Freq, 1000);\r
413\r
414 // Determine in which direction the performance counter counts.\r
415 TimerInfo.CountUp = (BOOLEAN) (TimerInfo.EndCount >= TimerInfo.StartCount);\r
416\r
417/****************************************************************************\r
418**** Print heading ****\r
419****************************************************************************/\r
420 // print DP's build version\r
421 PrintToken (STRING_TOKEN (STR_DP_BUILD_REVISION), DP_MAJOR_VERSION, DP_MINOR_VERSION);\r
422\r
423 // print performance timer characteristics\r
424 PrintToken (STRING_TOKEN (STR_DP_KHZ), TimerInfo.Frequency); // Print Timer frequency in KHz\r
425\r
426 if ((VerboseMode) &&\r
427 (! RawMode)\r
428 ) {\r
429 StringPtr = HiiGetString (gHiiHandle,\r
aec905b7 430 (EFI_STRING_ID) (TimerInfo.CountUp ? STRING_TOKEN (STR_DP_UP) : STRING_TOKEN (STR_DP_DOWN)),\r
c06ad33e 431 NULL);\r
432 ASSERT (StringPtr != NULL);\r
433 PrintToken (STRING_TOKEN (STR_DP_TIMER_PROPERTIES), // Print Timer count range and direction\r
434 StringPtr,\r
435 TimerInfo.StartCount,\r
436 TimerInfo.EndCount\r
437 );\r
438 PrintToken (STRING_TOKEN (STR_DP_VERBOSE_THRESHOLD), mInterestThreshold);\r
439 }\r
440\r
441/* **************************************************************************\r
442**** Print Sections based on command line options\r
443****\r
444**** Option modes have the following priority:\r
445**** v Verbose -- Valid in combination with any other options\r
446**** t Threshold -- Modifies All, Raw, and Cooked output\r
447**** Default is 0 for All and Raw mode\r
448**** Default is DEFAULT_THRESHOLD for "Cooked" mode\r
449**** n Number2Display Used by All and Raw mode. Otherwise ignored.\r
450**** A All -- R and S options are ignored\r
451**** R Raw -- S option is ignored\r
452**** s Summary -- Modifies "Cooked" output only\r
453**** Cooked (Default)\r
454****\r
455**** The All, Raw, and Cooked modes are modified by the Trace and Profile\r
456**** options.\r
457**** !T && !P := (0) Default, Both are displayed\r
458**** T && !P := (1) Only Trace records are displayed\r
459**** !T && P := (2) Only Profile records are displayed\r
460**** T && P := (3) Same as Default, both are displayed\r
461****************************************************************************/\r
d28f77df
CS
462 GatherStatistics (CustomCumulativeData);\r
463 if (CumulativeMode) { \r
464 ProcessCumulative (CustomCumulativeData);\r
465 } else if (AllMode) {\r
c06ad33e 466 if (TraceMode) {\r
3e9de670
CS
467 Status = DumpAllTrace( Number2Display, ExcludeMode);\r
468 if (Status == EFI_ABORTED) {\r
469 goto Done;\r
470 }\r
c06ad33e 471 }\r
472 if (ProfileMode) {\r
473 DumpAllProfile( Number2Display, ExcludeMode);\r
474 }\r
475 }\r
476 else if (RawMode) {\r
477 if (TraceMode) {\r
3e9de670
CS
478 Status = DumpRawTrace( Number2Display, ExcludeMode);\r
479 if (Status == EFI_ABORTED) {\r
480 goto Done;\r
481 }\r
c06ad33e 482 }\r
483 if (ProfileMode) {\r
484 DumpRawProfile( Number2Display, ExcludeMode);\r
485 }\r
486 }\r
487 else {\r
488 //------------- Begin Cooked Mode Processing\r
489 if (TraceMode) {\r
490 ProcessPhases ( Ticker );\r
491 if ( ! SummaryMode) {\r
492 Status = ProcessHandles ( ExcludeMode);\r
3e9de670
CS
493 if (Status == EFI_ABORTED) {\r
494 goto Done;\r
c06ad33e 495 }\r
3e9de670
CS
496\r
497 Status = ProcessPeims ();\r
498 if (Status == EFI_ABORTED) {\r
499 goto Done;\r
500 }\r
501\r
502 Status = ProcessGlobal ();\r
503 if (Status == EFI_ABORTED) {\r
504 goto Done;\r
505 }\r
506\r
507 ProcessCumulative (NULL);\r
c06ad33e 508 }\r
509 }\r
510 if (ProfileMode) {\r
511 DumpAllProfile( Number2Display, ExcludeMode);\r
512 }\r
513 } //------------- End of Cooked Mode Processing\r
514 if ( VerboseMode || SummaryMode) {\r
515 DumpStatistics();\r
516 }\r
517 }\r
518 }\r
88359546 519\r
3e9de670
CS
520Done:\r
521\r
d28f77df 522 //\r
88359546
ED
523 // Free the memory allocate from HiiGetString\r
524 //\r
525 ListIndex = 0;\r
526 while (DpParamList[ListIndex].Name != NULL) {\r
527 FreePool (DpParamList[ListIndex].Name);\r
528 ListIndex ++;\r
529 } \r
530 FreePool (DpParamList);\r
cdd95292
SZ
531\r
532 SafeFreePool (StringDpOptionQh);\r
533 SafeFreePool (StringDpOptionLh);\r
534 SafeFreePool (StringDpOptionUh);\r
535 SafeFreePool (StringDpOptionLv);\r
536 SafeFreePool (StringDpOptionUs);\r
537 SafeFreePool (StringDpOptionLs);\r
538 SafeFreePool (StringDpOptionUa);\r
539 SafeFreePool (StringDpOptionUr);\r
540 SafeFreePool (StringDpOptionUt);\r
541 SafeFreePool (StringDpOptionUp);\r
542 SafeFreePool (StringDpOptionLx);\r
543 SafeFreePool (StringDpOptionLn);\r
544 SafeFreePool (StringDpOptionLt);\r
0b84f444 545 SafeFreePool (StringDpOptionLi);\r
d28f77df 546 SafeFreePool (StringDpOptionLc);\r
cdd95292
SZ
547 SafeFreePool (StringPtr);\r
548 SafeFreePool (mPrintTokenBuffer);\r
549\r
38ac6bf1
CS
550 if (ParamPackage != NULL) {\r
551 ShellCommandLineFreeVarList (ParamPackage);\r
552 }\r
d28f77df
CS
553 if (CustomCumulativeData != NULL) {\r
554 SafeFreePool (CustomCumulativeData->Name);\r
555 }\r
556 SafeFreePool (CustomCumulativeData);\r
557\r
c06ad33e 558 HiiRemovePackages (gHiiHandle);\r
559 return Status;\r
560}\r