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.
174 lines
5.1 KiB
174 lines
5.1 KiB
/*++
|
|
|
|
Copyright (c) 1998 Intel Corporation
|
|
|
|
Module Name:
|
|
|
|
ver64.c
|
|
|
|
Abstract:
|
|
|
|
Part of shell app "ver"
|
|
|
|
|
|
|
|
Revision History
|
|
|
|
--*/
|
|
|
|
#include "shell.h"
|
|
#include "ver.h"
|
|
#include "SalProc.h"
|
|
|
|
/*
|
|
*
|
|
*/
|
|
BOOLEAN
|
|
IsCacheEnabled (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DisplayExtendedVersionInfo (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_SYSTEM_TABLE *SystemTable
|
|
)
|
|
{
|
|
|
|
EFI_STATUS Status;
|
|
SAL_SYSTEM_TABLE_HDR *SST_Hdr;
|
|
VOID *SalSystemTable;
|
|
FIT_ENTRY *FIT;
|
|
UINTN FitCount;
|
|
UINT64 *FIT_Entry_Start_Ptr;
|
|
UINT8 FIT_Type;
|
|
PLABEL SalPlabel;
|
|
UINT64 PalEntry;
|
|
UINT64 IoPortBase;
|
|
CHAR8 BuildInfo[33];
|
|
|
|
/*
|
|
* walk the SST header to get SAL version info
|
|
*/
|
|
|
|
Status = LibGetSystemConfigurationTable(&SalSystemTableGuid,&SalSystemTable);
|
|
if (!EFI_ERROR(Status)) {
|
|
/*
|
|
* SAL revisions
|
|
*/
|
|
|
|
Print(L"\n");
|
|
SST_Hdr = (SAL_SYSTEM_TABLE_HDR *)SalSystemTable;
|
|
Print(L"SAL Specification Revision %d.%2d\n",BCDtoDecimal((UINT8)(SST_Hdr->Revision >> 8)),
|
|
BCDtoDecimal((UINT8)(SST_Hdr->Revision & 0x00FF)));
|
|
|
|
Print(L" SAL_A Revision = %d.%2d\n", BCDtoDecimal((UINT8)(SST_Hdr->SALA_Ver >> 8)),
|
|
BCDtoDecimal((UINT8)(SST_Hdr->SALA_Ver & 0x00FF)));
|
|
|
|
Print(L" SAL_B Revision = %d.%2d\n", BCDtoDecimal((UINT8)(SST_Hdr->SALB_Ver >> 8)),
|
|
BCDtoDecimal((UINT8)(SST_Hdr->SALB_Ver & 0x00FF)));
|
|
|
|
|
|
/*
|
|
* PAL revisions
|
|
*/
|
|
|
|
Print(L"\n");
|
|
FIT = (FIT_ENTRY *) FIT_PALA_ENTRY;
|
|
Print(L"PAL_A Revision %d.%2d\n",BCDtoDecimal((UINT8)(FIT->Revision >> 8)),
|
|
BCDtoDecimal((UINT8)(FIT->Revision & 0x00FF)));
|
|
|
|
FIT_Entry_Start_Ptr = (UINT64 *) FIT_ENTRY_PTR;
|
|
FIT = (FIT_ENTRY *) (*FIT_Entry_Start_Ptr);
|
|
FitCount = (FIT->Size[0]) + (FIT->Size[1]*256) + (FIT->Size[2]*256*256);
|
|
|
|
while (FitCount) {
|
|
FIT_Type = FIT->Type & 0x7F;
|
|
if (FIT_Type == FIT_PALB_TYPE) {
|
|
Print(L"PAL_B Revision %d.%2d\n",BCDtoDecimal((UINT8)(FIT->Revision >> 8)),
|
|
BCDtoDecimal((UINT8)(FIT->Revision & 0x00FF)));
|
|
} /* end of if */
|
|
|
|
FitCount--;
|
|
FIT++;
|
|
} /* end of while */
|
|
|
|
|
|
FIT = (FIT_ENTRY *) (*FIT_Entry_Start_Ptr);
|
|
FitCount = (FIT->Size[0]) + (FIT->Size[1]*256) + (FIT->Size[2]*256*256);
|
|
|
|
while (FitCount) {
|
|
FIT_Type = FIT->Type & 0x7F;
|
|
if (FIT_Type == 0x1D) {
|
|
CopyMem (BuildInfo, (VOID *)FIT->Address, 32);
|
|
BuildInfo[32] = 0;
|
|
Print(L"Build Info %a\n",BuildInfo);
|
|
} /* end of if */
|
|
|
|
FitCount--;
|
|
FIT++;
|
|
} /* end of while */
|
|
|
|
|
|
/*
|
|
* Other Modules revision
|
|
*/
|
|
|
|
Print(L"\n");
|
|
FIT = (FIT_ENTRY *) (*FIT_Entry_Start_Ptr);
|
|
FitCount = (FIT->Size[0]) + (FIT->Size[1]*256) + (FIT->Size[2]*256*256);
|
|
|
|
Print(L"Other modules mentioned in FIT (Firmware Interface Table)\n");
|
|
while (FitCount) {
|
|
FIT_Type = FIT->Type & 0x7F;
|
|
if ((FIT_Type != 0x7F) && (FIT_Type != FIT_PALB_TYPE)) {
|
|
Print(L"FIT_Entry Type %3d, Revision %d.%2d\n",FIT_Type,
|
|
BCDtoDecimal((UINT8)(FIT->Revision >> 8)),
|
|
BCDtoDecimal((UINT8)(FIT->Revision & 0x00FF)));
|
|
} /* end of if */
|
|
|
|
FitCount--;
|
|
FIT++;
|
|
} /* end of while */
|
|
|
|
} /* end of if */
|
|
|
|
LibInitSalAndPalProc(&SalPlabel, &PalEntry);
|
|
LibGetSalIoPortMapping (&IoPortBase);
|
|
|
|
Print (L"\n SalProc Entry %016x and GP %016x", SalProcPlabel.ProcEntryPoint, SalProcPlabel.GP);
|
|
Print (L"\n PalProc Entry %016x IO Port Base %016x", PalProcPlabel.ProcEntryPoint, IoPortBase);
|
|
|
|
/*
|
|
* BugBug: The IsCacheEnabled() Function does not work. Looks like the Lib
|
|
* call to make a PAL call is not working.
|
|
*/
|
|
Print (L"\n %HCache %a\n%N", IsCacheEnabled() ? "Enabled": "Disabled");
|
|
return;
|
|
}
|
|
|
|
/*
|
|
* BugBug: Debug code. Get an include file for PAL and make this a lib function.
|
|
*/
|
|
|
|
#define BIT59 (1I64<<59)
|
|
|
|
BOOLEAN
|
|
IsCacheEnabled (
|
|
VOID
|
|
)
|
|
{
|
|
rArg PalReturn;
|
|
|
|
LibPalProc (0x11, 0, 0, 0, &PalReturn);
|
|
if (PalReturn.p0 != 0x00) {
|
|
DEBUG((D_ERROR, "PAL Call Get Features Failed\n"));
|
|
return FALSE;
|
|
}
|
|
|
|
if ((PalReturn.p2 & BIT59) == BIT59) {
|
|
return FALSE;
|
|
} else {
|
|
return TRUE;
|
|
}
|
|
}
|