if (Cmnd->use_sg != 0) BUG();  iqd = ((unsigned char *)Cmnd->buffer); 
iqd_len = scsi_rbuf_get(Cmnd, &iqd); 
static void ourdone(struct scsi_cmnd *Cmnd){	struct qlogicpti *qpti = (struct qlogicpti *) Cmnd->device->host->hostdata;	int tgt = Cmnd->device->id;	void (*done) (struct scsi_cmnd *);	/* This grot added by DaveM, blame him for ugliness.	 * The issue is that in the 2.3.x driver we use the	 * host_scribble portion of the scsi command as a	 * completion linked list at interrupt service time,	 * so we have to store the done function pointer elsewhere.	 */	done = (void (*)(struct scsi_cmnd *))		(((unsigned long) Cmnd->SCp.Message)#ifdef __sparc_v9__		 | ((unsigned long) Cmnd->SCp.Status << 32UL)#endif		 );	if ((qpti->sbits & (1 << tgt)) == 0) {		int ok = host_byte(Cmnd->result) == DID_OK;		if (Cmnd->cmnd[0] == 0x12 && ok) {			unsigned char *iqd;			if (Cmnd->use_sg != 0)				BUG();			iqd = ((unsigned char *)Cmnd->buffer);			/* tags handled in midlayer */			/* enable sync mode? */			if (iqd[7] & 0x10) {				qpti->dev_param[tgt].device_flags |= 0x10;			} else {				qpti->dev_param[tgt].synchronous_offset = 0;				qpti->dev_param[tgt].synchronous_period = 0;			}			/* are we wide capable? */			if (iqd[7] & 0x20) {				qpti->dev_param[tgt].device_flags |= 0x20;			}			qpti->sbits |= (1 << tgt);		} else if (!ok) {			qpti->sbits |= (1 << tgt);		}	}	done(Cmnd);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/f75884d28a6eae5a422d0454b982da3842f777af/qlogicpti.c/clean/drivers/scsi/qlogicpti.c