HalpAcpiCheckAndMapTable

UINT64 __stdcall HalpAcpiCheckAndMapTable(
        _LOADER_PARAMETER_BLOCK *LoaderBlock,
        _LARGE_INTEGER PhysicalAddress,
        UINT8 *OemId,
        UINT8 *OemTableId,
        UINT8 *Str1,
        UINT8 *OemTableIda,
        INT64 PerformChecksum,
        UINT64 *Size){
  UINT64 v8; 
  int v9; 
  unsigned int v10; 
  UINT64 v13; 
  UINT64 v14; 
  UINT64 v15; 
  UINT64 v17; 
  int v18; 
  char v19; 
  char *v20; 
  char v21; 
  char v22; 
  UINT64 Protection; 

  v8 = 0i64;
  v9 = (int)OemTableId;
  v10 = (unsigned int)OemId;
  if( PhysicalAddress.QuadPart )
  {
    LODWORD(v13) = 36;
    if( LoaderBlock )
    {
      LODWORD(Protection) = 4;
      v14 = HalpMap(
              PhysicalAddress,
              (_MEMORY_CACHING_TYPE)(((unsigned __int64)(PhysicalAddress.anonymous_0.LowPart & 0xFFF) + 4131) >> 12),
              MmCached,
              0,
              Protection);
    }
    else
    {
      v14 = (UINT64)MmMapIoSpaceEx(PhysicalAddress, 0x24ui64, 0x204ui64);
    }
    v15 = v14;
    if( v14 )
    {
      if( *(_DWORD *)(v14 + 4) < v10
        || v9 && *(_DWORD *)v14 != v9
        || Str1 && strncmp((INT8 *)Str1, (INT8 *)(v14 + 10), 6ui64)
        || OemTableIda && strncmp((INT8 *)OemTableIda, (INT8 *)(v15 + 16), 8ui64) )
      {
LABEL_8:
        if( v15 )
        {
          if( LoaderBlock )
            HalpUnmapVirtualAddress((PVOID)v15, ((v15 & 0xFFF) + 4095 + (unsigned int)v13) >> 12, 0);
          else
            MmUnmapIoSpace((VOID *)v15, (unsigned int)v13);
        }
        return v8;
      }
      v13 = *(unsigned int *)(v15 + 4);
      if( LoaderBlock )
        HalpUnmapVirtualAddress((PVOID)v15, ((v15 & 0xFFF) + 4131) >> 12, 0);
      else
        MmUnmapIoSpace((VOID *)v15, 0x24ui64);
      if( LoaderBlock )
      {
        LODWORD(Protection) = 4;
        v17 = HalpMap(
                PhysicalAddress,
                (_MEMORY_CACHING_TYPE)(((PhysicalAddress.anonymous_0.LowPart & 0xFFF) + 4095i64 + v13) >> 12),
                MmCached,
                0,
                Protection);
      }
      else
      {
        v17 = (UINT64)MmMapIoSpaceEx(PhysicalAddress, v13, 0x204ui64);
      }
      v15 = v17;
      if( v17 )
      {
        if( !(_BYTE)PerformChecksum )
          goto LABEL_26;
        v18 = *(_DWORD *)(v17 + 4);
        v19 = 0;
        if( !v18 )
          goto LABEL_26;
        v20 = (char *)v17;
        do
        {
          v21 = *v20++;
          v22 = v19 + v21;
          v19 = v22;
          --v18;
        }
        while( v18 );
        if( !v22 )
        {
LABEL_26:
          v8 = v15;
          v15 = 0i64;
          *(_DWORD *)Size = v13;
        }
        goto LABEL_8;
      }
    }
  }
  return v8;
}

Referenced by:

HalpAcpiGetAllTablesWork
HalpAcpiGetFacsMapping
HalpAcpiGetRsdt
HalpAcpiGetTableFromBios