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