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