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