• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
DisplaySELAccessMethod(IN CONST UINT8 Key,IN CONST UINT8 Option)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
DisplaySELLogStatus(UINT8 Key,UINT8 Option)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
DisplaySysEventLogHeaderFormat(UINT8 Key,UINT8 Option)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
DisplaySELLogHeaderLen(UINT8 Key,UINT8 Option)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
DisplaySysEventLogHeaderType1(IN UINT8 * LogHeader)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
DisplaySysEventLogHeader(UINT8 LogHeaderFormat,UINT8 * LogHeader)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
DisplayElVdfInfo(UINT8 ElVdfType,UINT8 * VarData)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
DisplaySysEventLogData(UINT8 * LogData,UINT16 LogAreaLength)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 }
413