HalpIvtProcessDmarTable

NTSTATUS __stdcall HalpIvtProcessDmarTable(UINT64 a1, _BYTE *a2){
  UINT64 v3; 
  int v4; 
  bool v5; 
  char v6; 
  INT64 v7; 
  _WORD *NextRemappingStructure; 
  INT64 i; 
  _WORD *v10; 
  _WORD *v11; 

  v3 = a1;
  v4 = 0;
  if( a1 )
  {
    if( *(_DWORD *)(a1 + 4) >= 0x40u )
    {
      v5 = (*(_BYTE *)(a1 + 37) & 4) == 0;
      v6 = 0;
      qword_140CF4F98 = a1;
      if( !v5 )
      {
        v7 = 0i64;
        while( 1 )
        {
          NextRemappingStructure = (_WORD *)DmrGetNextRemappingStructure(a1, v7);
          if( !NextRemappingStructure )
            break;
          if( *NextRemappingStructure == 4 )
          {
            v6 = 0;
            break;
          }
          v7 = (INT64)NextRemappingStructure;
          a1 = v3;
        }
      }
      *a2 = v6;
      for( i = 0i64; ; i = (INT64)v11 )
      {
        v10 = (_WORD *)DmrGetNextRemappingStructure(v3, i);
        v11 = v10;
        if( !v10 )
          break;
        if( !*v10 )
          v4 = HalpIvtProcessDrhdEntry(v3, (UINT64)v10);
        if( v4 < 0 )
          break;
      }
    }
    else
    {
      return -1073741811;
    }
  }
  return v4;
}

Referenced by:

HalpIommuRegisterBuiltinPlugins