Leaked source code of windows server 2003
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

/*++
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;
}
}