kernels/linux-2.4.0/drivers/scsi/ips.c
/****************************************************************************/
/*                                                                          */
/* Routine Name: do_ipsintr                                                 */
/*                                                                          */
/* Routine Description:                                                     */
/*                                                                          */
/*   Wrapper for the interrupt handler                                      */
/*                                                                          */
/****************************************************************************/


Routine Description.

Wrapper for the interrupt handler
Routine Description . Wrapper for the interrupt handler
void
do_ipsintr(int irq, void *dev_id, struct pt_regs *regs) {
   ips_ha_t         *ha;
   u32               cpu_flags;
   METHOD_TRACE("do_ipsintr", 2);
   ha = (ips_ha_t *) dev_id;
   spin_lock_irqsave(&io_request_lock, cpu_flags);
   if (test_and_set_bit(IPS_IN_INTR, &ha->flags)) {
      spin_unlock_irqrestore(&io_request_lock, cpu_flags);
      return ;
   }
   if (!ha) {
      clear_bit(IPS_IN_INTR, &ha->flags);
      spin_unlock_irqrestore(&io_request_lock, cpu_flags);
      return;
   }
   if (!ha->active) {
      clear_bit(IPS_IN_INTR, &ha->flags);
      spin_unlock_irqrestore(&io_request_lock, cpu_flags);
      return;
   }
   (*ha->func.intr)(ha);
   clear_bit(IPS_IN_INTR, &ha->flags);
   spin_unlock_irqrestore(&io_request_lock, cpu_flags);
   ips_next(ha, IPS_INTR_ON);
}
void do_ipsintr ( int irq , void * dev_id , struct pt_regs * regs ) { ips_ha_t * ha ; u32 cpu_flags ; METHOD_TRACE ( " " , 2 ) ; ha = ( ips_ha_t * ) dev_id ; spin_lock_irqsave ( & io_request_lock , cpu_flags ) ; if ( test_and_set_bit ( IPS_IN_INTR , & ha -> flags ) ) { spin_unlock_irqrestore ( & io_request_lock , cpu_flags ) ; return ; } if ( ! ha ) { clear_bit ( IPS_IN_INTR , & ha -> flags ) ; spin_unlock_irqrestore ( & io_request_lock , cpu_flags ) ; return ; } if ( ! ha -> active ) { clear_bit ( IPS_IN_INTR , & ha -> flags ) ; spin_unlock_irqrestore ( & io_request_lock , cpu_flags ) ; return ; } ( * ha -> func . intr ) ( ha ) ; clear_bit ( IPS_IN_INTR , & ha -> flags ) ; spin_unlock_irqrestore ( & io_request_lock , cpu_flags ) ; ips_next ( ha , IPS_INTR_ON ) ; }
Routine Name: do_ipsintr
Routine Name : do_ipsintr
/* start the next command */