HalpIommuProcessMemoryErrata

INT64 __fastcall HalpIommuProcessMemoryErrata(UINT64 a1, INT64 a2, INT64 a3){
  __int64 v3; 
  unsigned int i; 
  __int64 v6; 
  __int64 j; 
  ULONG_PTR v8; 
  ULONG_PTR k; 
  unsigned __int64 v10; 
  __int64 v11; 
  unsigned __int64 v12; 
  bool v13; 
  v3 = 0i64;
  for( i = a1; (unsigned int)v3 < i; v3 = (unsigned int)(v3 + 1) )
  {
    v6 = *(_QWORD *)(a2 + 8 * v3);
    for( j = 0i64; (unsigned int)j < *(_DWORD *)(v6 + 24); j = (unsigned int)(j + 1) )
    {
      v8 = v6 + 8 * (j + 2 * (j + 2));
      if( !*(_BYTE *)(v8 + 16) )
      {
        for( k = *(_QWORD *)(a3 + 32); k != a3 + 32; k = *(_QWORD *)k )
        {
          v10 = *(int *)(k + 16);
          if( (unsigned int)v10 <= 0x25 )
          {
            v11 = 0x25C0C00048i64;
            if( _bittest64(&v11, v10) )
              continue;
          }
          v12 = *(_QWORD *)(k + 24) << 12;
          if( *(_QWORD *)v8 <= v12 + (*(_QWORD *)(k + 32) << 12) - 1i64 && *(_QWORD *)(v8 + 8) >= v12 )
          {
            v13 = HalpIommuDmaGuardTableOptIn == 0;
            *(_BYTE *)(v8 + 16) = 1;
            if( !v13 )
              KeBugCheckEx(0x5Cu, 0x501ui64, v8, k, 0i64);
          }
        }
      }
    }
  }
  return 1i64;
}

Referenced by:

HalpIommuProcessReservationsInternal