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; }
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); }
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; }
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; }
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; }
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; }