Пример #1
0
static void mts_command_done( struct urb *transfer )
/* Interrupt context! */
{
	struct mts_transfer_context* context;

	MTS_INT_INIT();

	if ( transfer->status ) {
		context->srb->result = DID_ERROR<<16;
		mts_transfer_cleanup(transfer);
		
		return;
	}
	
	if ( context->data ) {
		context->state = mts_con_data;
		mts_int_submit_urb(transfer,
				   context->data_pipe,
				   context->data,
				   context->data_length,
				   mts_data_done);
	} else mts_get_status(transfer);
	
	return;
}
Пример #2
0
static void mts_command_done( struct urb *transfer )
/* Interrupt context! */
{
	MTS_INT_INIT();

	if ( transfer->status ) {
	        if (transfer->status == -ENOENT) {
		        /* We are being killed */
			MTS_DEBUG_GOT_HERE();
			context->srb->result = DID_ABORT<<16;
                } else {
		        /* A genuine error has occured */
			MTS_DEBUG_GOT_HERE();

		        context->srb->result = DID_ERROR<<16;
                }
		mts_transfer_cleanup(transfer);

		return;
	}

	if ( context->data ) {
		mts_int_submit_urb(transfer,
				   context->data_pipe,
				   context->data,
				   context->data_length,
				   context->srb->use_sg ? mts_do_sg : mts_data_done);
	} else mts_get_status(transfer);

	return;
}
static void mts_data_done( struct urb* transfer )
{
	int status = transfer->status;
	MTS_INT_INIT();

	if ( context->data_length != transfer->actual_length ) {
		scsi_set_resid(context->srb, context->data_length -
			       transfer->actual_length);
	} else if ( unlikely(status) ) {
		context->srb->result = (status == -ENOENT ? DID_ABORT : DID_ERROR)<<16;
	}

	mts_get_status(transfer);
}
Пример #4
0
static void mts_data_done( struct urb* transfer )
/* Interrupt context! */
{
	MTS_INT_INIT();

	if ( context->data_length != transfer->actual_length ) {
		context->srb->resid = context->data_length - transfer->actual_length;
	} else if ( transfer->status ) {
		context->srb->result = (transfer->status == -ENOENT ? DID_ABORT : DID_ERROR)<<16;
	}

	mts_get_status(transfer);

	return;
}
Пример #5
0
static void mts_data_done( struct urb* transfer )
/* Interrupt context! */
{
	struct mts_transfer_context* context;

	MTS_INT_INIT();

	if ( context->data_length != transfer->actual_length ) {
		context->srb->resid = context->data_length - transfer->actual_length;
	} else if ( transfer->status ) {
		context->srb->result = DID_ERROR<<16;
	}

	mts_get_status(transfer);

	return;
}
Пример #6
0
static void mts_command_done( struct urb *transfer )
/* Interrupt context! */
{
	int status = transfer->status;
	MTS_INT_INIT();

	if ( unlikely(status) ) {
	        if (status == -ENOENT) {
		        /* We are being killed */
			MTS_DEBUG_GOT_HERE();
			context->srb->result = DID_ABORT<<16;
                } else {
		        /* A genuine error has occurred */
			MTS_DEBUG_GOT_HERE();

		        context->srb->result = DID_ERROR<<16;
                }
		mts_transfer_cleanup(transfer);

		return;
	}

	if (context->srb->cmnd[0] == REQUEST_SENSE) {
		mts_int_submit_urb(transfer,
				   context->data_pipe,
				   context->srb->sense_buffer,
				   context->data_length,
				   mts_data_done);
	} else { if ( context->data ) {
			mts_int_submit_urb(transfer,
					   context->data_pipe,
					   context->data,
					   context->data_length,
					   scsi_sg_count(context->srb) > 1 ?
					           mts_do_sg : mts_data_done);
		} else {
			mts_get_status(transfer);
		}
	}

	return;
}
Пример #7
0
static void mts_data_done( struct urb* transfer )
/* Interrupt context! */
{
	struct mts_transfer_context* context;

	MTS_INT_INIT();

	if ( context->data_length != transfer->actual_length ) {
#if 0
		context->srb->resid = context->data_length - transfer->actual_length;
#else
		printk(KERN_WARNING "microtek.c: Don't know how to handle resid on 2.2 kernels\n");
#endif
	} else if ( transfer->status ) {
		context->srb->result = DID_ERROR<<16;
	}

	mts_get_status(transfer);

	return;
}