HvlpLogIommuEvent

VOID __fastcall HvlpLogIommuEvent(INT64 a1){
  __int64 *v2; 
  UINT64 v3; 
  int *v4; 
  __int64 v5; 
  $AC492906E908F75CD234F2140A5AAD56 *v6; 
  INT64 v7; 
  unsigned int v8; 
  int v9[4]; 
  struct _EVENT_DATA_DESCRIPTOR UserData; 
  if( (HvlpRootFlags & 1) != 0 && *(_BYTE *)a1 )
  {
    switch( *(_WORD *)(a1 + 2) )
    {
      case 1:
        v2 = (__int64 *)&HV_EVENTLOG_IOMMU_WARNING_SCOPE_CONFLICT;
        break;
      case 2:
        v2 = HV_EVENTLOG_IOMMU_FAILED_RID_CONFLICT;
        break;
      case 3:
        v2 = HV_EVENTLOG_IOMMU_FAILED_NO_RESOURCES;
        break;
      case 4:
        v2 = HV_EVENTLOG_IOMMU_FAILED_INVALID_IOAPIC;
        v3 = 1i64;
        v9[0] = 1;
        goto LABEL_17;
      case 5:
        v2 = HV_EVENTLOG_IOMMU_FAILED_NO_DEVICE_ASSIGNMENT;
        v9[2] = 8;
        v3 = 3i64;
LABEL_16:
        v9[1] = 8;
        v9[0] = 8;
LABEL_17:
        v4 = v9;
        v5 = (unsigned int)v3;
        v6 = &UserData.12;
        v7 = a1 + 8;
        do
        {
          v6->Reserved = 0;
          v8 = *v4++;
          *(_QWORD *)&v6[-3].Reserved = v7;
          v7 += 8i64;
          v6[-1].Reserved = v8;
          v6 += 4;
          --v5;
        }
        while( v5 );
        HvlpWriteEventLog((EVENT_DESCRIPTOR *)v2, v3, &UserData);
        return;
      case 6:
        v2 = HV_EVENTLOG_IOMMU_FAILED_RESERVED_DEVICE;
        break;
      default:
        return;
    }
    v3 = 2i64;
    goto LABEL_16;
  }
}

Referenced by:

HvlMapDeviceInterrupt