rem: while( ( intreq = SWAPLONG( pci_inl( dd->card.iobase + IPR ) ) ) != 0 )
context: EMU10kxInterrupt( struct EMU10kxData* dd ){  struct AHIAudioCtrlDrv* AudioCtrl = dd->audioctrl;  struct DriverBase*  AHIsubBase = (struct DriverBase*) dd->ahisubbase;  struct EMU10kxBase* EMU10kxBase = (struct EMU10kxBase*) AHIsubBase;  ULONG intreq;  BOOL  handled = FALSE;  while( ( intreq = SWAPLONG( pci_inl( dd->card.iobase + IPR ) ) ) != 0 )  {//    KPrintF("IRQ: %08lx\n", intreq );    if( intreq & IPR_INTERVALTIMER &&	AudioCtrl != NULL )    {      int hw   = sblive_readptr( &dd->card, CCCA_CURRADDR, dd->voice.num );      int diff = dd->current_position - ( hw - dd->voice.start );      if( diff < 0 )      {	diff += AudioCtrl->ahiac_MaxBuffSamples * 2;      }//      KPrintF( ">>> hw_pos = %08lx; current_pos = %08lx; diff=%ld <<<\n",//	       hw, dd->current_position, diff );      if( (ULONG) diff < dd->current_length )      {	if( dd->playback_interrupt_enabled )	{	  /* Invoke softint to fetch new sample data */	  dd->playback_interrupt_enabled = FALSE;	  Cause( &dd->playback_interrupt );	}      }    }    if( intreq & ( IPR_ADCBUFHALFFULL | IPR_ADCBUFFULL ) )    {      if( intreq & IPR_ADCBUFHALFFULL )      {	dd->current_record_buffer = dd->record_buffer;      }      else      {	dd->current_record_buffer = ( dd->record_buffer +				      RECORD_BUFFER_SAMPLES * 4 / 2 );      }      if( dd->record_interrupt_enabled )      {	/* Invoke softint to convert and feed AHI with the new sample data */	dd->record_interrupt_enabled = FALSE;	Cause( &dd->record_interrupt );      }    }    if( intreq & IPR_MIDIRECVBUFEMPTY )    {      unsigned char b;      while( emu10k1_mpu_read_data( &dd->card, &b ) >= 0 )      {	struct ReceiveMessage msg = { b };	if( dd->camd_receivefunc == NULL )	{	  KPrintF( "emu10kx.audio got unexpected IPR_MIDIRECVBUFEMPTY\n" );	}//	KPrintF( "\t%lx\n", (int) b );	CallHookA( dd->camd_receivefunc, (Object*) EMU10kxBase, &msg );      }    }     if( intreq & IPR_MIDITRANSBUFEMPTY )    {      ULONG b;      if( dd->camd_transmitfunc == NULL )      {	KPrintF( "emu10kx.audio got unexpected IPR_MIDITRANSBUFEMPTY\n" );      }      b = CallHookA( dd->camd_transmitfunc, (Object*) EMU10kxBase, NULL );//      KPrintF( "%08lx\n", b );      // Check if d0.w is negative (as the V37 did once?) or if bit 8      // is set (as the V40 example does)            if( ( b & 0x00008100 ) == 0x0000 )      {	emu10k1_mpu_write_data( &dd->card, b );      }      if( ( !dd->camd_v40 && ( b & 0x00ff0000 ) != 0 ) ||	  ( b & 0x00008100 ) != 0 )      {//	KPrintF( "Disabling interrupts\n" );	emu10k1_irq_disable( &dd->card, INTE_MIDITXENABLE );	      }    }       /* Clear interrupt pending bit(s) */    pci_outl( SWAPLONG( intreq ), dd->card.iobase + IPR );    handled = TRUE;  }  return handled;}