| /** @file | |
| Module for clarifying the content of the smbios structure element info. | |
| Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved. <BR> | |
| This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #include "../UefiShellDebug1CommandsLib.h" | |
| #include "PrintInfo.h" | |
| #include "QueryTable.h" | |
| #include "EventLogInfo.h" | |
| /** | |
| Function to display system event log access information. | |
| @param[in] Key Additional information to print. | |
| @param[in] Option Whether to print the additional information. | |
| **/ | |
| VOID | |
| DisplaySELAccessMethod ( | |
| IN CONST UINT8 Key, | |
| IN CONST UINT8 Option | |
| ) | |
| { | |
| // | |
| // Print prompt | |
| // | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ACCESS_METHOD), gShellDebug1HiiHandle); | |
| PRINT_INFO_OPTION (Key, Option); | |
| // | |
| // Print value info | |
| // | |
| switch (Key) { | |
| case 0: | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_EIGHT_BIT), gShellDebug1HiiHandle); | |
| break; | |
| case 1: | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TWO_EIGHT_BITS), gShellDebug1HiiHandle); | |
| break; | |
| case 2: | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_SIXTEEN_BIT), gShellDebug1HiiHandle); | |
| break; | |
| case 3: | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MEM_MAPPED_PHYS), gShellDebug1HiiHandle); | |
| break; | |
| case 4: | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_VIA_GENERAL), gShellDebug1HiiHandle); | |
| break; | |
| default: | |
| if (Key <= 0x7f) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_FUTURE_ASSIGN), gShellDebug1HiiHandle); | |
| } else { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR_OEM), gShellDebug1HiiHandle); | |
| } | |
| } | |
| } | |
| /** | |
| Function to display system event log status information. | |
| @param[in] Key Additional information to print. | |
| @param[in] Option Whether to print the additional information. | |
| **/ | |
| VOID | |
| DisplaySELLogStatus ( | |
| UINT8 Key, | |
| UINT8 Option | |
| ) | |
| { | |
| // | |
| // Print prompt | |
| // | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_STATUS), gShellDebug1HiiHandle); | |
| PRINT_INFO_OPTION (Key, Option); | |
| // | |
| // Print value info | |
| // | |
| if ((Key & 0x01) != 0) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_VALID), gShellDebug1HiiHandle); | |
| } else { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_VALID), gShellDebug1HiiHandle); | |
| } | |
| if ((Key & 0x02) != 0) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_FULL), gShellDebug1HiiHandle); | |
| } else { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_AREA_NOT_FULL), gShellDebug1HiiHandle); | |
| } | |
| if ((Key & 0xFC) != 0) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_RES_BITS_NOT_ZERO), gShellDebug1HiiHandle, Key & 0xFC); | |
| } | |
| } | |
| /** | |
| Function to display system event log header format information. | |
| @param[in] Key Additional information to print. | |
| @param[in] Option Whether to print the additional information. | |
| **/ | |
| VOID | |
| DisplaySysEventLogHeaderFormat ( | |
| UINT8 Key, | |
| UINT8 Option | |
| ) | |
| { | |
| // | |
| // Print prompt | |
| // | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_FORMAT), gShellDebug1HiiHandle); | |
| PRINT_INFO_OPTION (Key, Option); | |
| // | |
| // Print value info | |
| // | |
| if (Key == 0x00) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), gShellDebug1HiiHandle); | |
| } else if (Key == 0x01) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), gShellDebug1HiiHandle); | |
| } else if (Key <= 0x7f) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_FUTURE), gShellDebug1HiiHandle); | |
| } else { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), gShellDebug1HiiHandle); | |
| } | |
| } | |
| /** | |
| Display the header information for SEL log items. | |
| @param[in] Key The information key. | |
| @param[in] Option The option index. | |
| **/ | |
| VOID | |
| DisplaySELLogHeaderLen ( | |
| UINT8 Key, | |
| UINT8 Option | |
| ) | |
| { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER_LEN), gShellDebug1HiiHandle); | |
| PRINT_INFO_OPTION (Key, Option); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ONE_VAR_D), gShellDebug1HiiHandle, Key & 0x7F); | |
| // | |
| // The most-significant bit of the field specifies | |
| // whether (0) or not (1) the record has been read | |
| // | |
| if ((Key & 0x80) != 0) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_READ), gShellDebug1HiiHandle); | |
| } else { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_THIS_RECORD_NOT_READ), gShellDebug1HiiHandle); | |
| } | |
| } | |
| /** | |
| Display the header information for type 1 items. | |
| @param[in] LogHeader The buffer with the information. | |
| **/ | |
| VOID | |
| DisplaySysEventLogHeaderType1 ( | |
| IN UINT8 *LogHeader | |
| ) | |
| { | |
| LOG_HEADER_TYPE1_FORMAT *Header; | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG), gShellDebug1HiiHandle); | |
| // | |
| // Print Log Header Type1 Format info | |
| // | |
| Header = (LOG_HEADER_TYPE1_FORMAT *) (LogHeader); | |
| ShellPrintHiiEx(-1,-1,NULL, | |
| STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_OEM_RESERVED), | |
| gShellDebug1HiiHandle, | |
| Header->OEMReserved[0], | |
| Header->OEMReserved[1], | |
| Header->OEMReserved[2], | |
| Header->OEMReserved[3], | |
| Header->OEMReserved[4] | |
| ); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_TIME), gShellDebug1HiiHandle, Header->Metw); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULTIPLE_EVENT_COUNT), gShellDebug1HiiHandle, Header->Meci); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_ADDRESS), gShellDebug1HiiHandle, Header->CMOSAddress); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_PREBOOT_INDEX), gShellDebug1HiiHandle, Header->CMOSBitIndex); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUM_STARTING_OFF), gShellDebug1HiiHandle, Header->StartingOffset); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_CHECKSUN_BYTE_COUNT), gShellDebug1HiiHandle, Header->ChecksumOffset); | |
| ShellPrintHiiEx(-1,-1,NULL, | |
| STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_RESERVED), | |
| gShellDebug1HiiHandle, | |
| Header->OEMReserved[0], | |
| Header->OEMReserved[1], | |
| Header->OEMReserved[2] | |
| ); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_HEADER_REVISION), gShellDebug1HiiHandle, Header->HeaderRevision); | |
| } | |
| /** | |
| Function to display system event log header information. | |
| @param[in] LogHeaderFormat Format identifier. | |
| @param[in] LogHeader Format informcation. | |
| **/ | |
| VOID | |
| DisplaySysEventLogHeader ( | |
| UINT8 LogHeaderFormat, | |
| UINT8 *LogHeader | |
| ) | |
| { | |
| // | |
| // Print prompt | |
| // | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_LOG_HEADER), gShellDebug1HiiHandle); | |
| // | |
| // Print value info | |
| // | |
| if (LogHeaderFormat == 0x00) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_HEADER), gShellDebug1HiiHandle); | |
| } else if (LogHeaderFormat == 0x01) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TYPE_LOG_HEADER), gShellDebug1HiiHandle); | |
| DisplaySysEventLogHeaderType1 (LogHeader); | |
| } else if (LogHeaderFormat <= 0x7f) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FUTURE_ASSIGN), gShellDebug1HiiHandle); | |
| } else { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_BIOS_VENDOR), gShellDebug1HiiHandle); | |
| } | |
| } | |
| /** | |
| Display the El Vdf information. | |
| @param[in] ElVdfType The information type. | |
| @param[in] VarData The information buffer. | |
| **/ | |
| VOID | |
| DisplayElVdfInfo ( | |
| UINT8 ElVdfType, | |
| UINT8 *VarData | |
| ) | |
| { | |
| UINT16 *Word; | |
| UINT32 *Dword; | |
| // | |
| // Display Type Name | |
| // | |
| DisplaySELVarDataFormatType (ElVdfType, SHOW_DETAIL); | |
| // | |
| // Display Type description | |
| // | |
| switch (ElVdfType) { | |
| case 0: | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_NO_STD_FORMAT), gShellDebug1HiiHandle); | |
| break; | |
| case 1: | |
| Word = (UINT16 *) (VarData + 1); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), gShellDebug1HiiHandle); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), gShellDebug1HiiHandle, *Word); | |
| break; | |
| case 2: | |
| Dword = (UINT32 *) (VarData + 1); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword); | |
| break; | |
| case 3: | |
| Word = (UINT16 *) (VarData + 1); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SMBIOS_STRUCT_ASSOC), gShellDebug1HiiHandle); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_STRUCT_HANDLE), gShellDebug1HiiHandle, *Word); | |
| // | |
| // Followed by a multiple-event counter | |
| // | |
| Dword = (UINT32 *) (VarData + 1); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword); | |
| break; | |
| case 4: | |
| Dword = (UINT32 *) (VarData + 1); | |
| DisplayPostResultsBitmapDw1 (*Dword, SHOW_DETAIL); | |
| Dword++; | |
| DisplayPostResultsBitmapDw2 (*Dword, SHOW_DETAIL); | |
| break; | |
| case 5: | |
| Dword = (UINT32 *) (VarData + 1); | |
| DisplaySELSysManagementTypes (*Dword, SHOW_DETAIL); | |
| break; | |
| case 6: | |
| Dword = (UINT32 *) (VarData + 1); | |
| DisplaySELSysManagementTypes (*Dword, SHOW_DETAIL); | |
| // | |
| // Followed by a multiple-event counter | |
| // | |
| Dword = (UINT32 *) (VarData + 1); | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_MULT_EVENT_COUNTER), gShellDebug1HiiHandle, *Dword); | |
| break; | |
| default: | |
| if (ElVdfType <= 0x7F) { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_UNUSED_AVAIL_FOR_ASSIGN), gShellDebug1HiiHandle); | |
| } else { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_AVAIL_FOR_SYSTEM), gShellDebug1HiiHandle); | |
| } | |
| } | |
| } | |
| /** | |
| Function to display system event log data. | |
| @param[in] LogData The data information. | |
| @param[in] LogAreaLength Length of the data. | |
| **/ | |
| VOID | |
| DisplaySysEventLogData ( | |
| UINT8 *LogData, | |
| UINT16 LogAreaLength | |
| ) | |
| { | |
| LOG_RECORD_FORMAT *Log; | |
| UINT8 ElVdfType; | |
| // | |
| // Event Log Variable Data Format Types | |
| // | |
| UINTN Offset; | |
| // | |
| // Print prompt | |
| // | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_SYSTEM_EVENT_LOG_2), gShellDebug1HiiHandle); | |
| // | |
| // Print Log info | |
| // | |
| Offset = 0; | |
| Log = (LOG_RECORD_FORMAT *) LogData; | |
| while (Log != NULL && Log->Type != END_OF_LOG && Offset < LogAreaLength) { | |
| // | |
| // Get a Event Log Record | |
| // | |
| Log = (LOG_RECORD_FORMAT *) (LogData + Offset); | |
| if (Log != NULL) { | |
| // | |
| // Display Event Log Record Information | |
| // | |
| DisplaySELVarDataFormatType (Log->Type, SHOW_DETAIL); | |
| DisplaySELLogHeaderLen (Log->Length, SHOW_DETAIL); | |
| Offset += Log->Length; | |
| // | |
| // Display Log Header Date/Time Fields | |
| // These fields contain the BCD representation of the date and time | |
| // (as read from CMOS) of the occurrence of the event | |
| // So Print as hex and represent decimal | |
| // | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_DATE), gShellDebug1HiiHandle); | |
| if (Log != NULL && Log->Year >= 80 && Log->Year <= 99) { | |
| Print (L"19"); | |
| } else if (Log != NULL && Log->Year <= 79) { | |
| Print (L"20"); | |
| } else { | |
| ShellPrintHiiEx(-1,-1,NULL,STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_ERROR), gShellDebug1HiiHandle); | |
| continue; | |
| } | |
| ShellPrintHiiEx(-1,-1,NULL, | |
| STRING_TOKEN (STR_SMBIOSVIEW_EVENTLOGINFO_TIME_SIX_VARS), | |
| gShellDebug1HiiHandle, | |
| Log->Year, | |
| Log->Month, | |
| Log->Day, | |
| Log->Hour, | |
| Log->Minute, | |
| Log->Second | |
| ); | |
| // | |
| // Display Variable Data Format | |
| // | |
| if (Log->Length <= (sizeof (LOG_RECORD_FORMAT) - 1)) { | |
| continue; | |
| } | |
| ElVdfType = Log->LogVariableData[0]; | |
| DisplayElVdfInfo (ElVdfType, Log->LogVariableData); | |
| } | |
| } | |
| } |