/* This is the default timeout function which does the most necessary. Upper layers can implement their own timeout function, say to free resources they have with this SCB, and then call this one at the end of their timeout function. To do this, one should initialize the ascb->timer.{function, data, expires} prior to calling the post funcion. The timer is started by the post function.  */
void asd_ascb_timedout(unsigned long data)
/* This is the default timeout function which does the most necessary. Upper layers can implement their own timeout function, say to free resources they have with this SCB, and then call this one at the end of their timeout function. To do this, one should initialize the ascb->timer.{function, data, expires} prior to calling the post funcion. The timer is started by the post function.  */
void asd_ascb_timedout(unsigned long data)
{
	struct asd_ascb *ascb = (void *) data;
	struct asd_seq_data *seq = &ascb->ha->seq;
	unsigned long flags;
	ASD_DPRINTK("scb:0x%x timed out\n", ascb->scb->header.opcode);
	spin_lock_irqsave(&seq->pend_q_lock, flags);
	seq->pending--;
	list_del_init(&ascb->list);
	spin_unlock_irqrestore(&seq->pend_q_lock, flags);
	asd_ascb_free(ascb);
}