sc_xfer->error = XS_RESET;
wdc_atapi_intr_data(chp, xfer, timeout)	struct channel_softc *chp;	struct wdc_xfer *xfer;	int timeout;{	struct scsi_xfer *sc_xfer = xfer->cmd;	struct ata_drive_datas *drvp = &chp->ch_drive[xfer->drive];	int len, ire;	char *message;	len = (CHP_READ_REG(chp, wdr_cyl_hi) << 8) |	    CHP_READ_REG(chp, wdr_cyl_lo);	ire = CHP_READ_REG(chp, wdr_ireason);	if ((message = wdc_atapi_in_data_phase(xfer, len, ire))) {		if (!timeout)			return (CONTINUE_POLL);		}	if (timeout) {		printf ("wdc_atapi_intr_data: error: %s\n", message);				xfer->next = wdc_atapi_reset;		return (GOTO_NEXT);	}		if (xfer->c_bcount >= len) {		WDCDEBUG_PRINT(("wdc_atapi_intr: c_bcount %d len %d "		    "st 0x%x err 0x%x "		    "ire 0x%x\n", xfer->c_bcount,		    len, chp->ch_status, chp->ch_error, ire), DEBUG_INTR);				/* Common case */		if (sc_xfer->flags & SCSI_DATA_OUT)			wdc_output_bytes(drvp, (u_int8_t *)xfer->databuf +			    xfer->c_skip, len);		else			wdc_input_bytes(drvp, (u_int8_t *)xfer->databuf +			    xfer->c_skip, len);		xfer->c_skip += len;		xfer->c_bcount -= len;	} else {		/* Exceptional case */		if (sc_xfer->flags & SCSI_DATA_OUT) {			printf("wdc_atapi_intr: warning: write only "			    "%d of %d requested bytes\n", xfer->c_bcount, len);			wdc_output_bytes(drvp, (u_int8_t *)xfer->databuf +			    xfer->c_skip, xfer->c_bcount);			 			CHP_WRITE_RAW_MULTI_2(chp, NULL, 			    len - xfer->c_bcount);		} else {			printf("wdc_atapi_intr: warning: reading only "			    "%d of %d bytes\n", xfer->c_bcount, len);			 			wdc_input_bytes(drvp,			    (char *)xfer->databuf + xfer->c_skip,			    xfer->c_bcount);			wdcbit_bucket(chp, len - xfer->c_bcount);		}		xfer->c_skip += xfer->c_bcount;		xfer->c_bcount = 0;	}	xfer->expect_irq = 1;	xfer->next = wdc_atapi_intr_for_us;	return (GOTO_NEXT);}