]> git.proxmox.com Git - mirror_edk2.git/blob - ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/EventLogInfo.c
f0a9d54b7397a2675199d00d2183dd27688673d3
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / SmbiosView / EventLogInfo.c
1 /**
2 Module for clarifying the content of the smbios structure element info.
3
4 Copyright (c) 2005-2010, 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 VOID
145 DisplaySELLogHeaderLen (
146 UINT8 Key,
147 UINT8 Option
148 )
149 {
150 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_LEN), gShellDebug1HiiHandle);
151 PRINT_INFO_OPTION (Key, Option);
152
153 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_VAR_D), gShellDebug1HiiHandle, Key & 0x7F);
154
155 //
156 // The most-significant bit of the field specifies
157 // whether (0) or not (1) the record has been read
158 //
159 if ((Key & 0x80) != 0) {
160 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_READ), gShellDebug1HiiHandle);
161 } else {
162 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_NOT_READ), gShellDebug1HiiHandle);
163 }
164 }
165
166 VOID
167 DisplaySysEventLogHeaderType1 (
168 UINT8 *LogHeader
169 )
170 {
171 LOG_HEADER_TYPE1_FORMAT *Header;
172
173 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG), gShellDebug1HiiHandle);
174
175 //
176 // Print Log Header Type1 Format info
177 //
178 Header = (LOG_HEADER_TYPE1_FORMAT *) (LogHeader);
179
180 ShellPrintHiiEx(-1,-1,NULL,
181 STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_OEM_RESERVED),
182 gShellDebug1HiiHandle,
183 Header->OEMReserved[0],
184 Header->OEMReserved[1],
185 Header->OEMReserved[2],
186 Header->OEMReserved[3],
187 Header->OEMReserved[4]
188 );
189 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_TIME), gShellDebug1HiiHandle, Header->METW);
190 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_COUNT), gShellDebug1HiiHandle, Header->MECI);
191 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_ADDRESS), gShellDebug1HiiHandle, Header->CMOSAddress);
192 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_INDEX), gShellDebug1HiiHandle, Header->CMOSBitIndex);
193 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUM_STARTING_OFF), gShellDebug1HiiHandle, Header->StartingOffset);
194 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUN_BYTE_COUNT), gShellDebug1HiiHandle, Header->ChecksumOffset);
195 ShellPrintHiiEx(-1,-1,NULL,
196 STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_RESERVED),
197 gShellDebug1HiiHandle,
198 Header->OEMReserved[0],
199 Header->OEMReserved[1],
200 Header->OEMReserved[2]
201 );
202 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_HEADER_REVISION), gShellDebug1HiiHandle, Header->HeaderRevision);
203 }
204
205 /**
206 Function to display system event log header information.
207
208 @param[in] LogHeaderFormat Format identifier.
209 @param[in] LogHeader Format informcation.
210 **/
211 VOID
212 EFIAPI
213 DisplaySysEventLogHeader (
214 UINT8 LogHeaderFormat,
215 UINT8 *LogHeader
216 )
217 {
218 //
219 // Print prompt
220 //
221 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER), gShellDebug1HiiHandle);
222
223 //
224 // Print value info
225 //
226 if (LogHeaderFormat == 0x00) {
227 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), gShellDebug1HiiHandle);
228 } else if (LogHeaderFormat == 0x01) {
229 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), gShellDebug1HiiHandle);
230 DisplaySysEventLogHeaderType1 (LogHeader);
231 } else if (LogHeaderFormat <= 0x7f) {
232 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FUTURE_ASSIGN), gShellDebug1HiiHandle);
233 } else {
234 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), gShellDebug1HiiHandle);
235 }
236 }
237
238 VOID
239 DisplayElVdfInfo (
240 UINT8 ElVdfType,
241 UINT8 *VarData
242 )
243 {
244 UINT16 *Word;
245 UINT32 *Dword;
246
247 //
248 // Display Type Name
249 //
250 DisplaySELVarDataFormatType (ElVdfType, SHOW_DETAIL);
251
252 //
253 // Display Type description
254 //
255 switch (ElVdfType) {
256 case 0:
257 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_STD_FORMAT), gShellDebug1HiiHandle);
258 break;
259
260 case 1:
261 Word = (UINT16 *) (VarData + 1);
262 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), gShellDebug1HiiHandle);
263 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), gShellDebug1HiiHandle, *Word);
264 break;
265
266 case 2:
267 Dword = (UINT32 *) (VarData + 1);
268 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword);
269 break;
270
271 case 3:
272 Word = (UINT16 *) (VarData + 1);
273 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), gShellDebug1HiiHandle);
274 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), gShellDebug1HiiHandle, *Word);
275 //
276 // Followed by a multiple-event counter
277 //
278 Dword = (UINT32 *) (VarData + 1);
279 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword);
280 break;
281
282 case 4:
283 Dword = (UINT32 *) (VarData + 1);
284 DisplayPostResultsBitmapDw1 (*Dword, SHOW_DETAIL);
285 Dword++;
286 DisplayPostResultsBitmapDw2 (*Dword, SHOW_DETAIL);
287 break;
288
289 case 5:
290 Dword = (UINT32 *) (VarData + 1);
291 DisplaySELSysManagementTypes (*Dword, SHOW_DETAIL);
292 break;
293
294 case 6:
295 Dword = (UINT32 *) (VarData + 1);
296 DisplaySELSysManagementTypes (*Dword, SHOW_DETAIL);
297 //
298 // Followed by a multiple-event counter
299 //
300 Dword = (UINT32 *) (VarData + 1);
301 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword);
302 break;
303
304 default:
305 if (ElVdfType <= 0x7F) {
306 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_UNUSED_AVAIL_FOR_ASSIGN), gShellDebug1HiiHandle);
307 } else {
308 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_SYSTEM), gShellDebug1HiiHandle);
309 }
310 }
311 }
312
313 /**
314 Function to display system event log data.
315
316 @param[in] LogData The data information.
317 @param[in] LogAreaLength Length of the data.
318 **/
319 VOID
320 EFIAPI
321 DisplaySysEventLogData (
322 UINT8 *LogData,
323 UINT16 LogAreaLength
324 )
325 {
326 LOG_RECORD_FORMAT *Log;
327 UINT8 ElVdfType;
328 //
329 // Event Log Variable Data Format Types
330 //
331 UINTN Offset;
332
333 //
334 // Print prompt
335 //
336 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG_2), gShellDebug1HiiHandle);
337
338 //
339 // Print Log info
340 //
341 Offset = 0;
342 Log = (LOG_RECORD_FORMAT *) LogData;
343 while (Log->Type != END_OF_LOG && Offset < LogAreaLength) {
344 //
345 // Get a Event Log Record
346 //
347 Log = (LOG_RECORD_FORMAT *) (LogData + Offset);
348
349 //
350 // Display Event Log Record Information
351 //
352 DisplaySELVarDataFormatType (Log->Type, SHOW_DETAIL);
353 DisplaySELLogHeaderLen (Log->Length, SHOW_DETAIL);
354
355 Offset += Log->Length;
356
357 //
358 // Display Log Header Date/Time Fields
359 // These fields contain the BCD representation of the date and time
360 // (as read from CMOS) of the occurrence of the event
361 // So Print as hex and represent decimal
362 //
363 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_DATE), gShellDebug1HiiHandle);
364 if (Log != NULL && Log->Year >= 80 && Log->Year <= 99) {
365 Print (L"19");
366 } else if (Log != NULL && Log->Year <= 79) {
367 Print (L"20");
368 } else {
369 ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ERROR), gShellDebug1HiiHandle);
370 continue;
371 }
372
373 ShellPrintHiiEx(-1,-1,NULL,
374 STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TIME_SIX_VARS),
375 gShellDebug1HiiHandle,
376 Log->Year,
377 Log->Month,
378 Log->Day,
379 Log->Hour,
380 Log->Minute,
381 Log->Second
382 );
383
384 //
385 // Display Variable Data Format
386 //
387 if (Log->Length <= (sizeof (LOG_RECORD_FORMAT) - 1)) {
388 continue;
389 }
390
391 ElVdfType = Log->LogVariableData[0];
392 DisplayElVdfInfo (ElVdfType, Log->LogVariableData);
393 }
394 }