HalpIommuAllocateRemappingTableEntry

INT64 __fastcall HalpIommuAllocateRemappingTableEntry(
        UINT64 a1,
        UINT64 a2,
        UINT64 a3,
        UINT64 a4,
        INT64 a5,
        INT64 a6,
        CHAR a7){
  unsigned int v7; 
  __int128 *v8; 
  unsigned int v9; 
  unsigned int v10; 
  unsigned int v11; 
  __int128 *v12; 
  INT64 *v13; 
  unsigned int v14; 
  INT64 *v15; 
  __int64(__fastcall *v16)(INT64, _QWORD, _QWORD, _QWORD, int, int, int, _DWORD, __int128 *); 
  int v18; 
  int v19; 
  int v20; 
  __int128 v21; 
  __int64 v22; 
  v7 = a1;
  v8 = 0i64;
  v9 = a4;
  v10 = a3;
  v11 = a2;
  v21 = 0i64;
  v22 = 0i64;
  if( a6 )
  {
    HalpIommuConvertPciBusMasterDescriptorToDeviceId(a6, a7, (INT64)&v21);
    v12 = &v21;
    if( !(_DWORD)v21 )
      v12 = 0i64;
    v8 = v12;
  }
  v13 = (INT64 *)HalpIommuList;
  v14 = 0;
  while( v13 != &HalpIommuList )
  {
    v15 = v13;
    v13 = (INT64 *)*v13;
    if( (v15[57] & 0x40) != 0 )
    {
      v16 = (__int64(__fastcall *)(INT64, _QWORD, _QWORD, _QWORD, int, int, int, _DWORD, __int128 *))v15[19];
      if( v16 )
      {
        LOBYTE(v20) = (v9 >> 5) & 7;
        LOBYTE(v19) = v9 & 0x1F;
        LOWORD(v18) = (unsigned __int8)v10;
        v14 = v16(v15[2], v7, v11, v10 >> 8, v18, v19, v20, a5, v8);
        if( v14 != -1073741594 )
          break;
      }
    }
  }
  return v14;
}

Referenced by:

HalpIrtAllocateIndex