HalpDmaAddReservedRangesToDomain

INT64 __fastcall HalpDmaAddReservedRangesToDomain(INT64 a1, INT64 rdx0){
  int ReservedRanges; 
  __int64 v4; 
  __int64 v5; 
  signed __int64 v6; 
  signed __int64 v7; 
  unsigned __int64 v8; 
  unsigned int a2; 
  __int64 a3; 
  a3 = 0i64;
  a2 = 0;
  if( rdx0 )
  {
    ReservedRanges = HalpIommuGetReservedRanges(rdx0, &a2, &a3);
    if( ReservedRanges >= 0 )
    {
      if( a2 )
        *(_BYTE *)(a1 + 33) = 1;
      v4 = 0i64;
      if( a2 )
      {
        v5 = a3;
        do
        {
          if( !*(_BYTE *)(v5 + 24 * v4 + 16) )
          {
            v6 = *(_QWORD *)(v5 + 24 * v4);
            v7 = *(_QWORD *)(v5 + 24 * v4 + 8);
            if( v6 >= v7 )
              return(unsigned int)-1073741503;
            v8 = v7 - v6 + 1;
            if( v8 >= 0xFFFFFFFF )
              return(unsigned int)-1073741503;
            ReservedRanges = HalpLaReserveRange(*(_QWORD *)(a1 + 48), *(_QWORD *)(v5 + 24 * v4), v8);
            if( ReservedRanges < 0 )
              return(unsigned int)ReservedRanges;
            ReservedRanges = HalpIommuDomainMapLogicalRange(
                               *(_QWORD *)(a1 + 40),
                               3i64,
                               *(_QWORD *)(v5 + 24 * v4),
                               v8,
                               v6);
          }
          v4 = (unsigned int)(v4 + 1);
        }
        while( (unsigned int)v4 < a2 );
      }
    }
  }
  else
  {
    return 0;
  }
  return(unsigned int)ReservedRanges;
}

Referenced by:

No references.