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