Hi,
this should fix a bug with error handling visible on the Sacn Dual II
Regards
Oliver
--- hpusbscsi.h.alt Sun Oct 7 19:12:48 2001
+++ hpusbscsi.h Sun Dec 9 13:58:14 2001
@@ -50,7 +50,8 @@
static int hpusbscsi_scsi_detect (struct SHT * sht);
static void simple_command_callback(struct urb *u);
static void scatter_gather_callback(struct urb *u);
-static void simple_payload_callback (struct urb *u);
+static void simple_payload_callback(struct urb *u);
+static void request_sense_callback(struct urb *u);
static void control_interrupt_callback (struct urb *u);
static void simple_done (struct urb *u);
static int hpusbscsi_scsi_queuecommand (Scsi_Cmnd *srb, scsi_callback callback);
--- hpusbscsi.c.alt Tue Oct 9 19:17:54 2001
+++ hpusbscsi.c Sun Dec 9 13:58:09 2001
@@ -270,7 +270,12 @@
/* Now we need to decide which callback to give to the urb we send the command
with */
if (!srb->bufflen) {
- usb_callback = simple_command_callback;
+ if (srb->cmnd[0] != REQUEST_SENSE) {
+ usb_callback = simple_command_callback;
+ } else { /* transfer into an internal buffer */
+ usb_callback = request_sense_callback;
+ hpusbscsi->current_data_pipe = usb_rcvbulkpipe(hpusbscsi->dev,
+hpusbscsi->ep_in);
+ }
} else {
if (srb->use_sg) {
usb_callback = scatter_gather_callback;
@@ -517,3 +522,39 @@
}
}
+static void request_sense_callback (struct urb *u)
+{
+ struct hpusbscsi * hpusbscsi = (struct hpusbscsi *)u->context;
+ int res;
+
+ if (u->status<0) {
+ handle_usb_error(hpusbscsi);
+ return;
+ }
+
+ FILL_BULK_URB(
+ u,
+ hpusbscsi->dev,
+ hpusbscsi->current_data_pipe,
+ hpusbscsi->srb->sense_buffer,
+ SCSI_SENSE_BUFFERSIZE,
+ simple_done,
+ hpusbscsi
+ );
+
+ res = usb_submit_urb(u);
+ if (res) {
+ handle_usb_error(hpusbscsi);
+ return;
+ }
+ TRACE_STATE;
+ if (hpusbscsi->state != HP_STATE_PREMATURE) {
+ hpusbscsi->state = HP_STATE_WORKING;
+ TRACE_STATE;
+ } else {
+ if (hpusbscsi->scallback != NULL)
+ hpusbscsi->scallback(hpusbscsi->srb);
+ hpusbscsi->state = HP_STATE_FREE;
+ TRACE_STATE;
+ }
+}
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel