static void asd_tmf_tasklet_complete(struct asd_ascb *ascb,
				     struct done_list_struct *dl)
{
	if (!del_timer(&ascb->timer))
		return;

	ASD_DPRINTK("tmf tasklet complete\n");

	if (dl->opcode == TC_SSP_RESP)
		ascb->uldd_task = (void *) (unsigned long)
			asd_get_tmf_resp_tasklet(ascb, dl);
	else
		ascb->uldd_task = (void *) 0xFF00 + (unsigned long) dl->opcode;

	complete(&ascb->completion);
}
示例#2
0
static void asd_tmf_tasklet_complete(struct asd_ascb *ascb,
				     struct done_list_struct *dl)
{
	struct tasklet_completion_status *tcs;

	if (!del_timer(&ascb->timer))
		return;

	tcs = ascb->uldd_task;
	ASD_DPRINTK("tmf tasklet complete\n");

	tcs->dl_opcode = dl->opcode;

	if (dl->opcode == TC_SSP_RESP) {
		tcs->tmf_state = asd_get_tmf_resp_tasklet(ascb, dl);
		tcs->tag_valid = ascb->tag_valid;
		tcs->tag = ascb->tag;
	}

	complete(ascb->completion);
	asd_ascb_free(ascb);
}