HalpIommuConvertPciBusMasterDescriptorToDeviceId

CHAR __fastcall HalpIommuConvertPciBusMasterDescriptorToDeviceId(INT64 a1, CHAR a2, INT64 a3){
  __int16 v3; 
  unsigned __int8 v4; 
  __int16 v5; 
  *(_OWORD *)a3 = 0i64;
  *(_QWORD *)(a3 + 16) = 0i64;
  *(_DWORD *)a3 = 1;
  v3 = *(_WORD *)(a1 + 4);
  *(_WORD *)(a3 + 8) = v3;
  if( !*(_DWORD *)a1 )
    goto LABEL_7;
  if( *(_DWORD *)a1 == 1 || *(_DWORD *)a1 == 2 )
  {
    v4 = a2 & 3;
    *(_WORD *)(a3 + 10) &= ~4u;
    v5 = *(_WORD *)(a3 + 10);
    *(_WORD *)(a3 + 12) = *(_BYTE *)(a1 + 10) & 7 | (8
                                                   * ((32 * *(unsigned __int8 *)(a1 + 8)) | *(_BYTE *)(a1 + 9) & 0x1F));
    v3 = v5 & 0xFFFC | v4;
    *(_WORD *)(a3 + 10) = v3;
    return v3;
  }
  if( *(_DWORD *)a1 != 3 )
  {
LABEL_7:
    *(_DWORD *)a3 = 0;
    return v3;
  }
  *(_WORD *)(a3 + 10) |= 4u;
  *(_BYTE *)(a3 + 12) = *(_BYTE *)(a1 + 9);
  LOBYTE(v3) = *(_BYTE *)(a1 + 8);
  *(_BYTE *)(a3 + 13) = v3;
  return v3;
}

Referenced by:

HalpIommuAllocateRemappingTableEntry