HalpIommuInitDiscard

NTSTATUS __stdcall HalpIommuInitDiscard(INT64 a1){
  bool v2; 
  _QWORD *v3; 
  NTSTATUS result; 
  INT64 v5; 
  int v6; 
  INT64 v7[2]; 

  *(&CmpDummyThreadEvent + 514) = 0i64;
  qword_140C49BA0._bf_0 = 0i64;
  stru_140C49BA8._bf_0 = 0i64;
  v2 = byte_140C4A318 == 0;
  v3 = HalIommuDispatch;
  *(&CmpDummyThreadEvent + 513) = (char *)&CmpDummyThreadEvent + 4096;
  *(&CmpDummyThreadEvent + 512) = (char *)&CmpDummyThreadEvent + 4096;
  stru_140C49BB0.BufferList.Blink = (_LIST_ENTRY *)&stru_140C49BB0;
  stru_140C49BB0.BufferList.Flink = (_LIST_ENTRY *)&stru_140C49BB0;
  qword_140C49C08 = &qword_140C49C00;
  qword_140C49C00 = &qword_140C49C00;
  *((_QWORD *)HalIommuDispatch + 1) = IommuGetConfiguration;
  v3[2] = IommuGetLibraryContext;
  v3[3] = IommuMapDevice;
  v3[4] = IommuEnableDevicePasid;
  v3[5] = IommuSetAddressSpace;
  v3[6] = IommuDisableDevicePasid;
  v3[7] = IommuUnmapDevice;
  v3[9] = IommuFlushTb;
  v3[10] = IommuFlushAllPasid;
  v3[11] = IommuProcessPageRequestQueue;
  v3[16] = IommuDevicePowerChange;
  v3[17] = IommuBeginDeviceReset;
  v3[18] = IommuFinalizeDeviceReset;
  *(_OWORD *)v7 = 0i64;
  byte_140C49B2D = 0;
  byte_140C49B40 = 0;
  byte_140C49B2C = 0;
  if( !v2 )
  {
    byte_140C49B2E = ((unsigned int)EDX(__cpuid(1073741827, 0)) >> 24) & 1;
    byte_140C49B2D = (EDX(__cpuid(1073741827, 0)) & 0x2000000) != 0;
    HviGetHardwareFeatures((INT64)v7);
    if( (v7[0] & 0x20) != 0 )
    {
      byte_140C49B2C = 1;
      v3[1] = IommuHvGetConfiguration;
      v3[5] = IommuHvSetAddressSpace;
      v3[9] = IommuHvFlushTb;
      v3[10] = IommuHvFlushAllPasid;
      v3[16] = IommuHvDevicePowerChange;
    }
  }
  byte_140C49BF2 = *(int *)(*(_QWORD *)(a1 + 240) + 132i64) < 0;
  result = HalpIommuRegisterBuiltinPlugins();
  v5 = qword_140C49B50;
  if( (INT64 *)qword_140C49B50 != &qword_140C49B50 )
  {
    while( 1 )
    {
      v6 = *(_DWORD *)(v5 + 456);
      v5 = *(_QWORD *)v5;
      if( (v6 & 0x40) == 0 )
        break;
      if( (INT64 *)v5 == &qword_140C49B50 )
        return result;
    }
  }
  HalpInterruptX2ApicPolicy = 0;
  return result;
}

Referenced by:

HalpIommuInitSystem