]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/EventLogInfo.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / SmbiosView / EventLogInfo.c
CommitLineData
a1d4bfcc 1/** @file\r
5d73d92f 2 Module for clarifying the content of the smbios structure element info.\r
3\r
fc7d997c 4 Copyright (c) 2005 - 2019, Intel Corporation. All rights reserved. <BR>\r
56ba3746 5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
5d73d92f 6\r
7**/\r
8\r
8a765da2 9#include "UefiShellDebug1CommandsLib.h"\r
5d73d92f 10#include "PrintInfo.h"\r
11#include "QueryTable.h"\r
12#include "EventLogInfo.h"\r
13\r
14/**\r
15 Function to display system event log access information.\r
16\r
17 @param[in] Key Additional information to print.\r
18 @param[in] Option Whether to print the additional information.\r
19**/\r
20VOID\r
5d73d92f 21DisplaySELAccessMethod (\r
47d20b54
MK
22 IN CONST UINT8 Key,\r
23 IN CONST UINT8 Option\r
5d73d92f 24 )\r
25{\r
26 //\r
27 // Print prompt\r
28 //\r
47d20b54 29 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ACCESS_METHOD), gShellDebug1HiiHandle);\r
5d73d92f 30 PRINT_INFO_OPTION (Key, Option);\r
31\r
32 //\r
33 // Print value info\r
34 //\r
35 switch (Key) {\r
47d20b54
MK
36 case 0:\r
37 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_EIGHT_BIT), gShellDebug1HiiHandle);\r
38 break;\r
39\r
40 case 1:\r
41 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TWO_EIGHT_BITS), gShellDebug1HiiHandle);\r
42 break;\r
43\r
44 case 2:\r
45 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_SIXTEEN_BIT), gShellDebug1HiiHandle);\r
46 break;\r
47\r
48 case 3:\r
49 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MEM_MAPPED_PHYS), gShellDebug1HiiHandle);\r
50 break;\r
51\r
52 case 4:\r
53 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_VIA_GENERAL), gShellDebug1HiiHandle);\r
54 break;\r
55\r
56 default:\r
57 if (Key <= 0x7f) {\r
58 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_FUTURE_ASSIGN), gShellDebug1HiiHandle);\r
59 } else {\r
60 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR_OEM), gShellDebug1HiiHandle);\r
61 }\r
5d73d92f 62 }\r
63}\r
64\r
65/**\r
66 Function to display system event log status information.\r
67\r
68 @param[in] Key Additional information to print.\r
69 @param[in] Option Whether to print the additional information.\r
70**/\r
71VOID\r
5d73d92f 72DisplaySELLogStatus (\r
47d20b54
MK
73 UINT8 Key,\r
74 UINT8 Option\r
5d73d92f 75 )\r
76{\r
77 //\r
78 // Print prompt\r
79 //\r
47d20b54 80 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_STATUS), gShellDebug1HiiHandle);\r
5d73d92f 81 PRINT_INFO_OPTION (Key, Option);\r
82\r
83 //\r
84 // Print value info\r
85 //\r
86 if ((Key & 0x01) != 0) {\r
47d20b54 87 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_VALID), gShellDebug1HiiHandle);\r
5d73d92f 88 } else {\r
47d20b54 89 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_VALID), gShellDebug1HiiHandle);\r
5d73d92f 90 }\r
91\r
92 if ((Key & 0x02) != 0) {\r
47d20b54 93 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_FULL), gShellDebug1HiiHandle);\r
5d73d92f 94 } else {\r
47d20b54 95 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_NOT_FULL), gShellDebug1HiiHandle);\r
5d73d92f 96 }\r
97\r
98 if ((Key & 0xFC) != 0) {\r
47d20b54 99 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_RES_BITS_NOT_ZERO), gShellDebug1HiiHandle, Key & 0xFC);\r
5d73d92f 100 }\r
101}\r
102\r
103/**\r
104 Function to display system event log header format information.\r
105\r
106 @param[in] Key Additional information to print.\r
107 @param[in] Option Whether to print the additional information.\r
108**/\r
109VOID\r
5d73d92f 110DisplaySysEventLogHeaderFormat (\r
47d20b54
MK
111 UINT8 Key,\r
112 UINT8 Option\r
5d73d92f 113 )\r
114{\r
115 //\r
116 // Print prompt\r
117 //\r
47d20b54 118 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_FORMAT), gShellDebug1HiiHandle);\r
5d73d92f 119 PRINT_INFO_OPTION (Key, Option);\r
120\r
121 //\r
122 // Print value info\r
123 //\r
124 if (Key == 0x00) {\r
47d20b54 125 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), gShellDebug1HiiHandle);\r
5d73d92f 126 } else if (Key == 0x01) {\r
47d20b54 127 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), gShellDebug1HiiHandle);\r
5d73d92f 128 } else if (Key <= 0x7f) {\r
47d20b54 129 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_FUTURE), gShellDebug1HiiHandle);\r
5d73d92f 130 } else {\r
47d20b54 131 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), gShellDebug1HiiHandle);\r
5d73d92f 132 }\r
133}\r
134\r
a1d4bfcc 135/**\r
136 Display the header information for SEL log items.\r
137\r
138 @param[in] Key The information key.\r
139 @param[in] Option The option index.\r
140**/\r
5d73d92f 141VOID\r
142DisplaySELLogHeaderLen (\r
47d20b54
MK
143 UINT8 Key,\r
144 UINT8 Option\r
5d73d92f 145 )\r
146{\r
47d20b54 147 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_LEN), gShellDebug1HiiHandle);\r
5d73d92f 148 PRINT_INFO_OPTION (Key, Option);\r
149\r
47d20b54 150 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_VAR_D), gShellDebug1HiiHandle, Key & 0x7F);\r
5d73d92f 151\r
152 //\r
153 // The most-significant bit of the field specifies\r
154 // whether (0) or not (1) the record has been read\r
155 //\r
156 if ((Key & 0x80) != 0) {\r
47d20b54 157 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_READ), gShellDebug1HiiHandle);\r
5d73d92f 158 } else {\r
47d20b54 159 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_NOT_READ), gShellDebug1HiiHandle);\r
5d73d92f 160 }\r
161}\r
162\r
a1d4bfcc 163/**\r
164 Display the header information for type 1 items.\r
165\r
166 @param[in] LogHeader The buffer with the information.\r
167**/\r
5d73d92f 168VOID\r
169DisplaySysEventLogHeaderType1 (\r
47d20b54 170 IN UINT8 *LogHeader\r
5d73d92f 171 )\r
172{\r
47d20b54 173 LOG_HEADER_TYPE1_FORMAT *Header;\r
5d73d92f 174\r
47d20b54 175 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG), gShellDebug1HiiHandle);\r
5d73d92f 176\r
177 //\r
178 // Print Log Header Type1 Format info\r
179 //\r
47d20b54 180 Header = (LOG_HEADER_TYPE1_FORMAT *)(LogHeader);\r
5d73d92f 181\r
47d20b54
MK
182 ShellPrintHiiEx (\r
183 -1,\r
184 -1,\r
185 NULL,\r
5d73d92f 186 STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_OEM_RESERVED),\r
187 gShellDebug1HiiHandle,\r
188 Header->OEMReserved[0],\r
189 Header->OEMReserved[1],\r
190 Header->OEMReserved[2],\r
191 Header->OEMReserved[3],\r
192 Header->OEMReserved[4]\r
47d20b54
MK
193 );\r
194 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_TIME), gShellDebug1HiiHandle, Header->Metw);\r
195 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_COUNT), gShellDebug1HiiHandle, Header->Meci);\r
196 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_ADDRESS), gShellDebug1HiiHandle, Header->CMOSAddress);\r
197 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_INDEX), gShellDebug1HiiHandle, Header->CMOSBitIndex);\r
198 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUM_STARTING_OFF), gShellDebug1HiiHandle, Header->StartingOffset);\r
199 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUN_BYTE_COUNT), gShellDebug1HiiHandle, Header->ChecksumOffset);\r
200 ShellPrintHiiEx (\r
201 -1,\r
202 -1,\r
203 NULL,\r
5d73d92f 204 STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_RESERVED),\r
205 gShellDebug1HiiHandle,\r
206 Header->OEMReserved[0],\r
207 Header->OEMReserved[1],\r
208 Header->OEMReserved[2]\r
47d20b54
MK
209 );\r
210 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_HEADER_REVISION), gShellDebug1HiiHandle, Header->HeaderRevision);\r
5d73d92f 211}\r
212\r
213/**\r
214 Function to display system event log header information.\r
215\r
216 @param[in] LogHeaderFormat Format identifier.\r
217 @param[in] LogHeader Format informcation.\r
218**/\r
219VOID\r
5d73d92f 220DisplaySysEventLogHeader (\r
47d20b54
MK
221 UINT8 LogHeaderFormat,\r
222 UINT8 *LogHeader\r
5d73d92f 223 )\r
224{\r
225 //\r
226 // Print prompt\r
227 //\r
47d20b54 228 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER), gShellDebug1HiiHandle);\r
5d73d92f 229\r
230 //\r
231 // Print value info\r
232 //\r
233 if (LogHeaderFormat == 0x00) {\r
47d20b54 234 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), gShellDebug1HiiHandle);\r
5d73d92f 235 } else if (LogHeaderFormat == 0x01) {\r
47d20b54 236 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), gShellDebug1HiiHandle);\r
5d73d92f 237 DisplaySysEventLogHeaderType1 (LogHeader);\r
238 } else if (LogHeaderFormat <= 0x7f) {\r
47d20b54 239 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FUTURE_ASSIGN), gShellDebug1HiiHandle);\r
5d73d92f 240 } else {\r
47d20b54 241 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), gShellDebug1HiiHandle);\r
5d73d92f 242 }\r
243}\r
244\r
a1d4bfcc 245/**\r
246 Display the El Vdf information.\r
247\r
248 @param[in] ElVdfType The information type.\r
249 @param[in] VarData The information buffer.\r
250**/\r
5d73d92f 251VOID\r
252DisplayElVdfInfo (\r
47d20b54
MK
253 UINT8 ElVdfType,\r
254 UINT8 *VarData\r
5d73d92f 255 )\r
256{\r
257 UINT16 *Word;\r
258 UINT32 *Dword;\r
259\r
260 //\r
261 // Display Type Name\r
262 //\r
263 DisplaySELVarDataFormatType (ElVdfType, SHOW_DETAIL);\r
264\r
265 //\r
266 // Display Type description\r
267 //\r
268 switch (ElVdfType) {\r
47d20b54
MK
269 case 0:\r
270 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_STD_FORMAT), gShellDebug1HiiHandle);\r
271 break;\r
272\r
273 case 1:\r
274 Word = (UINT16 *)(VarData + 1);\r
275 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), gShellDebug1HiiHandle);\r
276 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), gShellDebug1HiiHandle, *Word);\r
277 break;\r
278\r
279 case 2:\r
280 Dword = (UINT32 *)(VarData + 1);\r
281 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword);\r
282 break;\r
283\r
284 case 3:\r
285 Word = (UINT16 *)(VarData + 1);\r
286 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), gShellDebug1HiiHandle);\r
287 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), gShellDebug1HiiHandle, *Word);\r
288 //\r
289 // Followed by a multiple-event counter\r
290 //\r
291 Dword = (UINT32 *)(VarData + 1);\r
292 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword);\r
293 break;\r
294\r
295 case 4:\r
296 Dword = (UINT32 *)(VarData + 1);\r
297 DisplayPostResultsBitmapDw1 (*Dword, SHOW_DETAIL);\r
298 Dword++;\r
299 DisplayPostResultsBitmapDw2 (*Dword, SHOW_DETAIL);\r
300 break;\r
301\r
302 case 5:\r
303 Dword = (UINT32 *)(VarData + 1);\r
304 DisplaySELSysManagementTypes (*Dword, SHOW_DETAIL);\r
305 break;\r
306\r
307 case 6:\r
308 Dword = (UINT32 *)(VarData + 1);\r
309 DisplaySELSysManagementTypes (*Dword, SHOW_DETAIL);\r
310 //\r
311 // Followed by a multiple-event counter\r
312 //\r
313 Dword = (UINT32 *)(VarData + 1);\r
314 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword);\r
315 break;\r
316\r
317 default:\r
318 if (ElVdfType <= 0x7F) {\r
319 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_UNUSED_AVAIL_FOR_ASSIGN), gShellDebug1HiiHandle);\r
320 } else {\r
321 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_SYSTEM), gShellDebug1HiiHandle);\r
322 }\r
5d73d92f 323 }\r
324}\r
325\r
326/**\r
327 Function to display system event log data.\r
328\r
329 @param[in] LogData The data information.\r
330 @param[in] LogAreaLength Length of the data.\r
331**/\r
332VOID\r
5d73d92f 333DisplaySysEventLogData (\r
334 UINT8 *LogData,\r
335 UINT16 LogAreaLength\r
336 )\r
337{\r
47d20b54
MK
338 LOG_RECORD_FORMAT *Log;\r
339 UINT8 ElVdfType;\r
5d73d92f 340 //\r
341 // Event Log Variable Data Format Types\r
342 //\r
47d20b54 343 UINTN Offset;\r
5d73d92f 344\r
345 //\r
346 // Print prompt\r
347 //\r
47d20b54 348 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG_2), gShellDebug1HiiHandle);\r
5d73d92f 349\r
350 //\r
351 // Print Log info\r
352 //\r
47d20b54
MK
353 Offset = 0;\r
354 Log = (LOG_RECORD_FORMAT *)LogData;\r
33c031ee 355 while (Log != NULL && Log->Type != END_OF_LOG && Offset < LogAreaLength) {\r
33c031ee 356 if (Log != NULL) {\r
357 //\r
358 // Display Event Log Record Information\r
359 //\r
fc7d997c 360 DisplaySELTypes (Log->Type, SHOW_DETAIL);\r
33c031ee 361 DisplaySELLogHeaderLen (Log->Length, SHOW_DETAIL);\r
362\r
363 Offset += Log->Length;\r
364 //\r
365 // Display Log Header Date/Time Fields\r
366 // These fields contain the BCD representation of the date and time\r
367 // (as read from CMOS) of the occurrence of the event\r
368 // So Print as hex and represent decimal\r
369 //\r
47d20b54
MK
370 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_DATE), gShellDebug1HiiHandle);\r
371 if ((Log != NULL) && (Log->Year >= 80) && (Log->Year <= 99)) {\r
33c031ee 372 Print (L"19");\r
47d20b54 373 } else if ((Log != NULL) && (Log->Year <= 79)) {\r
33c031ee 374 Print (L"20");\r
375 } else {\r
47d20b54 376 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ERROR), gShellDebug1HiiHandle);\r
fc7d997c
DB
377 //\r
378 // Get a Event Log Record\r
379 //\r
47d20b54 380 Log = (LOG_RECORD_FORMAT *)(LogData + Offset);\r
33c031ee 381 continue;\r
382 }\r
383\r
47d20b54
MK
384 ShellPrintHiiEx (\r
385 -1,\r
386 -1,\r
387 NULL,\r
33c031ee 388 STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TIME_SIX_VARS),\r
389 gShellDebug1HiiHandle,\r
390 Log->Year,\r
391 Log->Month,\r
392 Log->Day,\r
393 Log->Hour,\r
394 Log->Minute,\r
395 Log->Second\r
47d20b54 396 );\r
33c031ee 397\r
398 //\r
399 // Display Variable Data Format\r
400 //\r
401 if (Log->Length <= (sizeof (LOG_RECORD_FORMAT) - 1)) {\r
fc7d997c
DB
402 //\r
403 // Get a Event Log Record\r
404 //\r
47d20b54 405 Log = (LOG_RECORD_FORMAT *)(LogData + Offset);\r
33c031ee 406 continue;\r
407 }\r
408\r
409 ElVdfType = Log->LogVariableData[0];\r
410 DisplayElVdfInfo (ElVdfType, Log->LogVariableData);\r
fc7d997c
DB
411 //\r
412 // Get a Event Log Record\r
413 //\r
47d20b54 414 Log = (LOG_RECORD_FORMAT *)(LogData + Offset);\r
5d73d92f 415 }\r
5d73d92f 416 }\r
417}\r