HsaInitializeInterruptRemapping

NTSTATUS __stdcall HsaInitializeInterruptRemapping(INT64 a1){
  int v1; 
  int v3; 
  _LARGE_INTEGER v4; 
  UINT8 v5; 
  VOID *v6; 
  INT64 v7; 
  _RTL_BITMAP *v8; 
  INT64 v9; 
  INT64 v10; 
  INT64 v12; 
  INT64 v13; 

  v13 = 0i64;
  v1 = 0;
  v12 = 0i64;
  v3 = *(_DWORD *)(a1 + 176);
  if( v3 )
  {
    if( v3 == 1 )
    {
      if( !*(&CmpDummyThreadEvent + 397) )
      {
        *(&CmpDummyThreadEvent + 797) = *(_DWORD *)(a1 + 180);
        *(&CmpDummyThreadEvent + 796) = (16 * *(&CmpDummyThreadEvent + 797) + 4095) & 0xFFFFF000;
        v4.QuadPart = (*(&CmpDummyThreadEvent + 406))(-1i64, *(&CmpDummyThreadEvent + 796) >> 12);
        *(&CmpDummyThreadEvent + 396) = v4.QuadPart;
        if( v4.QuadPart
          && (v6 = (VOID *)HalMapIoSpace(v4, *(&CmpDummyThreadEvent + 796), MmCached, v5),
              (*(&CmpDummyThreadEvent + 397) = v6) != 0i64) )
        {
          memset(v6, 0i64, *(&CmpDummyThreadEvent + 796));
          v1 = ExtEnvAllocateMemory(v7, 4 * ((unsigned int)(*(_DWORD *)(a1 + 180) + 31) >> 5), &v12);
          if( v1 >= 0 )
          {
            RtlInitializeBitMap((PRTL_BITMAP)((char *)&CmpDummyThreadEvent + 3192), (PULONG)v12, *(_DWORD *)(a1 + 180));
            ExtEnvClearBits(v8, 0i64, *(unsigned int *)(a1 + 180));
            *(&CmpDummyThreadEvent + 802) = (unsigned int)HalpGetIrtEntryCount() >> 9;
            v1 = ExtEnvAllocateMemory(v9, 0x1C00ui64, &v13);
            if( v1 >= 0 )
            {
              v10 = v13;
              ExtEnvZeroMemory((VOID *)v13, 7168);
              ExtEnvInitializeSpinLock();
              *(&CmpDummyThreadEvent + 805) = 128;
              *(&CmpDummyThreadEvent + 412) = v10;
              *(_OWORD *)(v10 + 8) = *(&CmpDummyThreadEvent + 198);
              *(_OWORD *)(v10 + 24) = *(&CmpDummyThreadEvent + 199);
              *(_QWORD *)(v10 + 40) = *(&CmpDummyThreadEvent + 400);
              *(_DWORD *)(v10 + 48) = 1;
              *(_DWORD *)(v10 + 52) = -1;
            }
          }
        }
        else
        {
          return -1073741670;
        }
      }
    }
    else
    {
      return -1073741637;
    }
  }
  return v1;
}

Referenced by:

HsaInitializeIommu