uas: task mgmt & error handling

Add task management support, wind up in abort and device reset error
handlers.  Cancel all in-flight urbs in bus reset handler.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Gerd Hoffmann
2012-06-19 09:54:54 +02:00
committed by Greg Kroah-Hartman
parent bdd000fb34
commit 023b515e5b
2 changed files with 173 additions and 31 deletions

View File

@@ -20,6 +20,28 @@ enum {
IU_ID_WRITE_READY = 0x07,
};
enum {
TMF_ABORT_TASK = 0x01,
TMF_ABORT_TASK_SET = 0x02,
TMF_CLEAR_TASK_SET = 0x04,
TMF_LOGICAL_UNIT_RESET = 0x08,
TMF_I_T_NEXUS_RESET = 0x10,
TMF_CLEAR_ACA = 0x40,
TMF_QUERY_TASK = 0x80,
TMF_QUERY_TASK_SET = 0x81,
TMF_QUERY_ASYNC_EVENT = 0x82,
};
enum {
RC_TMF_COMPLETE = 0x00,
RC_INVALID_INFO_UNIT = 0x02,
RC_TMF_NOT_SUPPORTED = 0x04,
RC_TMF_FAILED = 0x05,
RC_TMF_SUCCEEDED = 0x08,
RC_INCORRECT_LUN = 0x09,
RC_OVERLAPPED_TAG = 0x0a,
};
struct command_iu {
__u8 iu_id;
__u8 rsvd1;
@@ -32,6 +54,16 @@ struct command_iu {
__u8 cdb[16]; /* XXX: Overflow-checking tools may misunderstand */
};
struct task_mgmt_iu {
__u8 iu_id;
__u8 rsvd1;
__be16 tag;
__u8 function;
__u8 rsvd2;
__be16 task_tag;
struct scsi_lun lun;
};
/*
* Also used for the Read Ready and Write Ready IUs since they have the
* same first four bytes
@@ -47,6 +79,14 @@ struct sense_iu {
__u8 sense[SCSI_SENSE_BUFFERSIZE];
};
struct response_ui {
__u8 iu_id;
__u8 rsvd1;
__be16 tag;
__be16 add_response_info;
__u8 response_code;
};
struct usb_pipe_usage_descriptor {
__u8 bLength;
__u8 bDescriptorType;