HalpIommuLocateFromDevice

INT64 __fastcall HalpIommuLocateFromDevice(INT64 a1, INT64 *a2, INT64 a3){
  INT64 v3; 
  unsigned int v4; 
  INT64 v5; 
  char v6; 
  INT64 v7; 
  INT64 i; 
  v3 = HalpIommuList;
  v4 = 0;
  v5 = a3;
  v6 = 0;
  v7 = 0i64;
  while( (INT64 *)v3 != &HalpIommuList )
  {
    v7 = v3;
    if( *(_QWORD *)(v3 + 192) )
    {
      v6 = (*(__int64(__fastcall **)(_QWORD, INT64, _QWORD, INT64))(v3 + 192))(*(_QWORD *)(v3 + 16), a1, 0i64, v5);
      if( v6 )
        break;
    }
    v3 = *(_QWORD *)v3;
  }
  for( i = HalpIommuList; (INT64 *)i != &HalpIommuList; i = *(_QWORD *)i )
  {
    if( v6 )
      goto LABEL_8;
    v7 = i;
    if( *(_QWORD *)(i + 192) )
    {
      LOBYTE(a3) = 1;
      v6 = (*(__int64(__fastcall **)(_QWORD, INT64, INT64, INT64))(i + 192))(*(_QWORD *)(i + 16), a1, a3, v5);
      if( v6 )
        goto LABEL_8;
    }
  }
  if( !v6 )
    return(unsigned int)-1073741275;
LABEL_8:
  *a2 = v7;
  return v4;
}

Referenced by:

HalpQueryIommuReservedRegionInformation
IommuMapDevice