497
498
499
500
501
502static irqreturn_t
503sbni_interrupt( int irq, void *dev_id )
504{
505 struct net_device *dev = dev_id;
506 struct net_local *nl = dev->priv;
507 int repeat;
508
509 spin_lock( &nl->lock );
510 if( nl->second )
511 spin_lock( &((struct net_local *) nl->second->priv)->lock );
512
513 do {
514 repeat = 0;
515 if( inb( dev->base_addr + CSR0 ) & (RC_RDY | TR_RDY) )
516 handle_channel( dev ),
517 repeat = 1;
518 if( nl->second &&
519 (inb( nl->second->base_addr+CSR0 ) & (RC_RDY | TR_RDY)) )
520 handle_channel( nl->second ),
521 repeat = 1;
522 } while( repeat );
523
524 if( nl->second )
525 spin_unlock( &((struct net_local *)nl->second->priv)->lock );
526 spin_unlock( &nl->lock );
527 return IRQ_HANDLED;
528}
529
530
531static void
532handle_channel( struct net_device *dev )
533{
534 struct net_local *nl = (struct net_local *) dev->priv;
535 unsigned long ioaddr = dev->base_addr;
536
537 int req_ans;