You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
408 lines
12 KiB
408 lines
12 KiB
/** @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);
|
|
}
|
|
}
|
|
}
|