]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/EventLogInfo.c
ShellPkg/Debug1CommandsLib: Fix bugs in func DisplaySysEventLogData
[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
22 IN CONST UINT8 Key,\r
23 IN CONST UINT8 Option\r
24 )\r
25{\r
26 //\r
27 // Print prompt\r
28 //\r
29 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ACCESS_METHOD), gShellDebug1HiiHandle);\r
30 PRINT_INFO_OPTION (Key, Option);\r
31\r
32 //\r
33 // Print value info\r
34 //\r
35 switch (Key) {\r
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
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
73 UINT8 Key,\r
74 UINT8 Option\r
75 )\r
76{\r
77 //\r
78 // Print prompt\r
79 //\r
80 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_STATUS), gShellDebug1HiiHandle);\r
81 PRINT_INFO_OPTION (Key, Option);\r
82\r
83 //\r
84 // Print value info\r
85 //\r
86 if ((Key & 0x01) != 0) {\r
87 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_VALID), gShellDebug1HiiHandle);\r
88 } else {\r
89 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_VALID), gShellDebug1HiiHandle);\r
90 }\r
91\r
92 if ((Key & 0x02) != 0) {\r
93 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_FULL), gShellDebug1HiiHandle);\r
94 } else {\r
95 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_NOT_FULL), gShellDebug1HiiHandle);\r
96 }\r
97\r
98 if ((Key & 0xFC) != 0) {\r
99 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_RES_BITS_NOT_ZERO), gShellDebug1HiiHandle, Key & 0xFC);\r
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
111 UINT8 Key,\r
112 UINT8 Option\r
113 )\r
114{\r
115 //\r
116 // Print prompt\r
117 //\r
118 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_FORMAT), gShellDebug1HiiHandle);\r
119 PRINT_INFO_OPTION (Key, Option);\r
120\r
121 //\r
122 // Print value info\r
123 //\r
124 if (Key == 0x00) {\r
125 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), gShellDebug1HiiHandle);\r
126 } else if (Key == 0x01) {\r
127 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), gShellDebug1HiiHandle);\r
128 } else if (Key <= 0x7f) {\r
129 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_FUTURE), gShellDebug1HiiHandle);\r
130 } else {\r
131 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), gShellDebug1HiiHandle);\r
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
143 UINT8 Key,\r
144 UINT8 Option\r
145 )\r
146{\r
147 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_LEN), gShellDebug1HiiHandle);\r
148 PRINT_INFO_OPTION (Key, Option);\r
149\r
150 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_VAR_D), gShellDebug1HiiHandle, Key & 0x7F);\r
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
157 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_READ), gShellDebug1HiiHandle);\r
158 } else {\r
159 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_NOT_READ), gShellDebug1HiiHandle);\r
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
a1d4bfcc 170 IN UINT8 *LogHeader\r
5d73d92f 171 )\r
172{\r
173 LOG_HEADER_TYPE1_FORMAT *Header;\r
174\r
175 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG), gShellDebug1HiiHandle);\r
176\r
177 //\r
178 // Print Log Header Type1 Format info\r
179 //\r
180 Header = (LOG_HEADER_TYPE1_FORMAT *) (LogHeader);\r
181\r
182 ShellPrintHiiEx(-1,-1,NULL,\r
183 STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_OEM_RESERVED),\r
184 gShellDebug1HiiHandle,\r
185 Header->OEMReserved[0],\r
186 Header->OEMReserved[1],\r
187 Header->OEMReserved[2],\r
188 Header->OEMReserved[3],\r
189 Header->OEMReserved[4]\r
190 );\r
a1d4bfcc 191 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_TIME), gShellDebug1HiiHandle, Header->Metw);\r
192 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_COUNT), gShellDebug1HiiHandle, Header->Meci);\r
5d73d92f 193 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_ADDRESS), gShellDebug1HiiHandle, Header->CMOSAddress);\r
194 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_INDEX), gShellDebug1HiiHandle, Header->CMOSBitIndex);\r
195 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUM_STARTING_OFF), gShellDebug1HiiHandle, Header->StartingOffset);\r
196 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUN_BYTE_COUNT), gShellDebug1HiiHandle, Header->ChecksumOffset);\r
197 ShellPrintHiiEx(-1,-1,NULL,\r
198 STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_RESERVED),\r
199 gShellDebug1HiiHandle,\r
200 Header->OEMReserved[0],\r
201 Header->OEMReserved[1],\r
202 Header->OEMReserved[2]\r
203 );\r
204 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_HEADER_REVISION), gShellDebug1HiiHandle, Header->HeaderRevision);\r
205}\r
206\r
207/**\r
208 Function to display system event log header information.\r
209\r
210 @param[in] LogHeaderFormat Format identifier.\r
211 @param[in] LogHeader Format informcation.\r
212**/\r
213VOID\r
5d73d92f 214DisplaySysEventLogHeader (\r
215 UINT8 LogHeaderFormat,\r
216 UINT8 *LogHeader\r
217 )\r
218{\r
219 //\r
220 // Print prompt\r
221 //\r
222 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER), gShellDebug1HiiHandle);\r
223\r
224 //\r
225 // Print value info\r
226 //\r
227 if (LogHeaderFormat == 0x00) {\r
228 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), gShellDebug1HiiHandle);\r
229 } else if (LogHeaderFormat == 0x01) {\r
230 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), gShellDebug1HiiHandle);\r
231 DisplaySysEventLogHeaderType1 (LogHeader);\r
232 } else if (LogHeaderFormat <= 0x7f) {\r
233 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FUTURE_ASSIGN), gShellDebug1HiiHandle);\r
234 } else {\r
235 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), gShellDebug1HiiHandle);\r
236 }\r
237}\r
238\r
a1d4bfcc 239/**\r
240 Display the El Vdf information.\r
241\r
242 @param[in] ElVdfType The information type.\r
243 @param[in] VarData The information buffer.\r
244**/\r
5d73d92f 245VOID\r
246DisplayElVdfInfo (\r
247 UINT8 ElVdfType,\r
248 UINT8 *VarData\r
249 )\r
250{\r
251 UINT16 *Word;\r
252 UINT32 *Dword;\r
253\r
254 //\r
255 // Display Type Name\r
256 //\r
257 DisplaySELVarDataFormatType (ElVdfType, SHOW_DETAIL);\r
258\r
259 //\r
260 // Display Type description\r
261 //\r
262 switch (ElVdfType) {\r
263 case 0:\r
264 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_STD_FORMAT), gShellDebug1HiiHandle);\r
265 break;\r
266\r
267 case 1:\r
268 Word = (UINT16 *) (VarData + 1);\r
269 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), gShellDebug1HiiHandle);\r
270 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), gShellDebug1HiiHandle, *Word);\r
271 break;\r
272\r
273 case 2:\r
274 Dword = (UINT32 *) (VarData + 1);\r
275 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword);\r
276 break;\r
277\r
278 case 3:\r
279 Word = (UINT16 *) (VarData + 1);\r
280 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), gShellDebug1HiiHandle);\r
281 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), gShellDebug1HiiHandle, *Word);\r
282 //\r
283 // Followed by a multiple-event counter\r
284 //\r
285 Dword = (UINT32 *) (VarData + 1);\r
286 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword);\r
287 break;\r
288\r
289 case 4:\r
290 Dword = (UINT32 *) (VarData + 1);\r
291 DisplayPostResultsBitmapDw1 (*Dword, SHOW_DETAIL);\r
292 Dword++;\r
293 DisplayPostResultsBitmapDw2 (*Dword, SHOW_DETAIL);\r
294 break;\r
295\r
296 case 5:\r
297 Dword = (UINT32 *) (VarData + 1);\r
298 DisplaySELSysManagementTypes (*Dword, SHOW_DETAIL);\r
299 break;\r
300\r
301 case 6:\r
302 Dword = (UINT32 *) (VarData + 1);\r
303 DisplaySELSysManagementTypes (*Dword, SHOW_DETAIL);\r
304 //\r
305 // Followed by a multiple-event counter\r
306 //\r
307 Dword = (UINT32 *) (VarData + 1);\r
308 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword);\r
309 break;\r
310\r
311 default:\r
312 if (ElVdfType <= 0x7F) {\r
313 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_UNUSED_AVAIL_FOR_ASSIGN), gShellDebug1HiiHandle);\r
314 } else {\r
315 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_SYSTEM), gShellDebug1HiiHandle);\r
316 }\r
317 }\r
318}\r
319\r
320/**\r
321 Function to display system event log data.\r
322\r
323 @param[in] LogData The data information.\r
324 @param[in] LogAreaLength Length of the data.\r
325**/\r
326VOID\r
5d73d92f 327DisplaySysEventLogData (\r
328 UINT8 *LogData,\r
329 UINT16 LogAreaLength\r
330 )\r
331{\r
332 LOG_RECORD_FORMAT *Log;\r
333 UINT8 ElVdfType;\r
334 //\r
335 // Event Log Variable Data Format Types\r
336 //\r
337 UINTN Offset;\r
338\r
339 //\r
340 // Print prompt\r
341 //\r
342 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG_2), gShellDebug1HiiHandle);\r
343\r
344 //\r
345 // Print Log info\r
346 //\r
347 Offset = 0;\r
348 Log = (LOG_RECORD_FORMAT *) LogData;\r
33c031ee 349 while (Log != NULL && Log->Type != END_OF_LOG && Offset < LogAreaLength) {\r
5d73d92f 350\r
33c031ee 351 if (Log != NULL) {\r
352 //\r
353 // Display Event Log Record Information\r
354 //\r
fc7d997c 355 DisplaySELTypes (Log->Type, SHOW_DETAIL);\r
33c031ee 356 DisplaySELLogHeaderLen (Log->Length, SHOW_DETAIL);\r
357\r
358 Offset += Log->Length;\r
359 //\r
360 // Display Log Header Date/Time Fields\r
361 // These fields contain the BCD representation of the date and time\r
362 // (as read from CMOS) of the occurrence of the event\r
363 // So Print as hex and represent decimal\r
364 //\r
365 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_DATE), gShellDebug1HiiHandle);\r
366 if (Log != NULL && Log->Year >= 80 && Log->Year <= 99) {\r
367 Print (L"19");\r
368 } else if (Log != NULL && Log->Year <= 79) {\r
369 Print (L"20");\r
370 } else {\r
371 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ERROR), gShellDebug1HiiHandle);\r
fc7d997c
DB
372 //\r
373 // Get a Event Log Record\r
374 //\r
375 Log = (LOG_RECORD_FORMAT *) (LogData + Offset);\r
33c031ee 376 continue;\r
377 }\r
378\r
379 ShellPrintHiiEx(-1,-1,NULL,\r
380 STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TIME_SIX_VARS),\r
381 gShellDebug1HiiHandle,\r
382 Log->Year,\r
383 Log->Month,\r
384 Log->Day,\r
385 Log->Hour,\r
386 Log->Minute,\r
387 Log->Second\r
388 );\r
389\r
390 //\r
391 // Display Variable Data Format\r
392 //\r
393 if (Log->Length <= (sizeof (LOG_RECORD_FORMAT) - 1)) {\r
fc7d997c
DB
394 //\r
395 // Get a Event Log Record\r
396 //\r
397 Log = (LOG_RECORD_FORMAT *) (LogData + Offset);\r
33c031ee 398 continue;\r
399 }\r
400\r
401 ElVdfType = Log->LogVariableData[0];\r
402 DisplayElVdfInfo (ElVdfType, Log->LogVariableData);\r
fc7d997c
DB
403 //\r
404 // Get a Event Log Record\r
405 //\r
406 Log = (LOG_RECORD_FORMAT *) (LogData + Offset);\r
5d73d92f 407 }\r
5d73d92f 408 }\r
409}\r