HalpIommuHsaDiscover

int __fastcall HalpIommuHsaDiscover(_QWORD *a1){
  INT64 Table; 
  INT64 v3; 
  int result; 
  __int64 v5; 
  unsigned __int64 v6; 
  int v7; 
  bool v8; 
  unsigned __int64 v9; 
  __int64 v10; 
  _BYTE *v11; 
  unsigned __int64 v12; 
  __int64 v13; 
  _BYTE *v14; 
  CHAR a3; 
  *a1 = 0i64;
  qword_140C486E8 = (__int64)&HsaIvhdList;
  HsaIvhdList = (__int64)&HsaIvhdList;
  a3 = 0;
  if( HalpExtEnvLoaderBlock )
  {
    Table = HalpAcpiGetTable((volatile INT64 *)HalpExtEnvLoaderBlock);
    v3 = Table;
    if( Table )
    {
      v5 = *(unsigned int *)(Table + 4);
      if( (unsigned int)v5 >= 0x5A )
      {
        v6 = v5 + v3;
        v7 = *(_DWORD *)(v3 + 36);
        if( (v7 & 1) != 0 )
        {
          if( (v7 & 2) != 0 )
          {
            v8 = 1;
            v9 = v3 + 48;
            while( v9 < v6 )
            {
              if( v9 + 4 > v6 )
                return -1073741811;
              v10 = *(unsigned __int16 *)(v9 + 2);
              if( (unsigned int)v10 < 4 || v9 + v10 > v6 )
                return -1073741811;
              v11 = (_BYTE *)v9;
              v9 += v10;
              if( *v11 == 64 )
              {
                result = HalpIommuProcessIvhdEntry(v3, (INT64)v11, &a3);
                if( result < 0 )
                  return result;
                v8 = v8 && !a3;
              }
            }
          }
          else
          {
            v8 = 0;
          }
          v12 = v3 + 48;
          while( v12 < v6 )
          {
            if( v12 + 4 > v6 )
              return -1073741811;
            v13 = *(unsigned __int16 *)(v12 + 2);
            if( (unsigned int)v13 < 4 || v12 + v13 > v6 )
              return -1073741811;
            v14 = (_BYTE *)v12;
            v12 += v13;
            if( *v14 == 17 )
            {
              result = HalpIommuProcessIvhdEntry(v3, (INT64)v14, &a3);
              if( result < 0 )
                return result;
              v8 = v8 && !a3;
            }
          }
          *a1 ^= (*(_DWORD *)a1 ^ (2 * v8)) & 2;
        }
      }
    }
  }
  return 0;
}

Referenced by:

HalpIommuRegisterBuiltinPlugins