HalpAcpiGetTableWork
_LARGE_INTEGER *__stdcall HalpAcpiGetTableWork(
_LOADER_PARAMETER_BLOCK *LoaderBlock,
const UINT8 *OemId,
const UINT8 *OemTableId){
UINT8 *v3;
unsigned int v5;
_LARGE_INTEGER *v7;
_LARGE_INTEGER *CachedTable;
_DESCRIPTION_HEADER *TableFromBios;
_LARGE_INTEGER *v11;
_LARGE_INTEGER TablePhysicalAddressa;
_LARGE_INTEGER PhysicalAddress;
PhysicalAddress.QuadPart = 0i64;
TablePhysicalAddressa.anonymous_0.LowPart = 0;
v5 = (unsigned int)OemId;
v7 = (_LARGE_INTEGER *)v3;
CachedTable = (_LARGE_INTEGER *)HalpAcpiGetCachedTable((unsigned int)OemId, (UINT8 *)OemTableId, v3);
if( !CachedTable
|| HalpAcpiIsCachedTableCompromised(LoaderBlock, (const UINT8 *)v5, OemTableId, (_DESCRIPTION_HEADER *)v7) )
{
TableFromBios = (_DESCRIPTION_HEADER *)HalpAcpiGetTableFromBios(
LoaderBlock,
(UINT8 *)v5,
(UINT8 *)OemTableId,
v7,
&TablePhysicalAddressa);
CachedTable = (_LARGE_INTEGER *)TableFromBios;
if( TableFromBios )
{
v11 = HalpAcpiCopyBiosTable(LoaderBlock, TableFromBios, PhysicalAddress);
if( LoaderBlock )
HalpUnmapVirtualAddress(
CachedTable,
(((unsigned __int16)CachedTable & 0xFFF) + (unsigned __int64)TablePhysicalAddressa.anonymous_0.LowPart + 4095) >> 12,
0);
else
MmUnmapIoSpace(CachedTable, TablePhysicalAddressa.anonymous_0.LowPart);
if( v11 )
{
HalpAcpiCacheTable(LoaderBlock, v11);
return v11;
}
else
{
return 0i64;
}
}
}
return CachedTable;
}Referenced by:
HalpAcpiGetAllTablesWork
HalpAcpiGetFacsMapping
HalpAcpiGetTable
HalpAcpiGetTableFromBios