GNU Linux-libre 4.9.314-gnu1
[releases.git] / drivers / usb / storage / uas.c
1 /*
2  * USB Attached SCSI
3  * Note that this is not the same as the USB Mass Storage driver
4  *
5  * Copyright Hans de Goede <hdegoede@redhat.com> for Red Hat, Inc. 2013 - 2016
6  * Copyright Matthew Wilcox for Intel Corp, 2010
7  * Copyright Sarah Sharp for Intel Corp, 2010
8  *
9  * Distributed under the terms of the GNU GPL, version two.
10  */
11
12 #include <linux/blkdev.h>
13 #include <linux/slab.h>
14 #include <linux/types.h>
15 #include <linux/module.h>
16 #include <linux/usb.h>
17 #include <linux/usb_usual.h>
18 #include <linux/usb/hcd.h>
19 #include <linux/usb/storage.h>
20 #include <linux/usb/uas.h>
21
22 #include <scsi/scsi.h>
23 #include <scsi/scsi_eh.h>
24 #include <scsi/scsi_dbg.h>
25 #include <scsi/scsi_cmnd.h>
26 #include <scsi/scsi_device.h>
27 #include <scsi/scsi_host.h>
28 #include <scsi/scsi_tcq.h>
29
30 #include "uas-detect.h"
31 #include "scsiglue.h"
32
33 #define MAX_CMNDS 256
34
35 struct uas_dev_info {
36         struct usb_interface *intf;
37         struct usb_device *udev;
38         struct usb_anchor cmd_urbs;
39         struct usb_anchor sense_urbs;
40         struct usb_anchor data_urbs;
41         unsigned long flags;
42         int qdepth, resetting;
43         unsigned cmd_pipe, status_pipe, data_in_pipe, data_out_pipe;
44         unsigned use_streams:1;
45         unsigned shutdown:1;
46         struct scsi_cmnd *cmnd[MAX_CMNDS];
47         spinlock_t lock;
48         struct work_struct work;
49         struct work_struct scan_work;      /* for async scanning */
50 };
51
52 enum {
53         SUBMIT_STATUS_URB       = BIT(1),
54         ALLOC_DATA_IN_URB       = BIT(2),
55         SUBMIT_DATA_IN_URB      = BIT(3),
56         ALLOC_DATA_OUT_URB      = BIT(4),
57         SUBMIT_DATA_OUT_URB     = BIT(5),
58         ALLOC_CMD_URB           = BIT(6),
59         SUBMIT_CMD_URB          = BIT(7),
60         COMMAND_INFLIGHT        = BIT(8),
61         DATA_IN_URB_INFLIGHT    = BIT(9),
62         DATA_OUT_URB_INFLIGHT   = BIT(10),
63         COMMAND_ABORTED         = BIT(11),
64         IS_IN_WORK_LIST         = BIT(12),
65 };
66
67 /* Overrides scsi_pointer */
68 struct uas_cmd_info {
69         unsigned int state;
70         unsigned int uas_tag;
71         struct urb *cmd_urb;
72         struct urb *data_in_urb;
73         struct urb *data_out_urb;
74 };
75
76 /* I hate forward declarations, but I actually have a loop */
77 static int uas_submit_urbs(struct scsi_cmnd *cmnd,
78                                 struct uas_dev_info *devinfo);
79 static void uas_do_work(struct work_struct *work);
80 static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller);
81 static void uas_free_streams(struct uas_dev_info *devinfo);
82 static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *prefix,
83                                 int status);
84
85 /*
86  * This driver needs its own workqueue, as we need to control memory allocation.
87  *
88  * In the course of error handling and power management uas_wait_for_pending_cmnds()
89  * needs to flush pending work items. In these contexts we cannot allocate memory
90  * by doing block IO as we would deadlock. For the same reason we cannot wait
91  * for anything allocating memory not heeding these constraints.
92  *
93  * So we have to control all work items that can be on the workqueue we flush.
94  * Hence we cannot share a queue and need our own.
95  */
96 static struct workqueue_struct *workqueue;
97
98 static void uas_do_work(struct work_struct *work)
99 {
100         struct uas_dev_info *devinfo =
101                 container_of(work, struct uas_dev_info, work);
102         struct uas_cmd_info *cmdinfo;
103         struct scsi_cmnd *cmnd;
104         unsigned long flags;
105         int i, err;
106
107         spin_lock_irqsave(&devinfo->lock, flags);
108
109         if (devinfo->resetting)
110                 goto out;
111
112         for (i = 0; i < devinfo->qdepth; i++) {
113                 if (!devinfo->cmnd[i])
114                         continue;
115
116                 cmnd = devinfo->cmnd[i];
117                 cmdinfo = (void *)&cmnd->SCp;
118
119                 if (!(cmdinfo->state & IS_IN_WORK_LIST))
120                         continue;
121
122                 err = uas_submit_urbs(cmnd, cmnd->device->hostdata);
123                 if (!err)
124                         cmdinfo->state &= ~IS_IN_WORK_LIST;
125                 else
126                         queue_work(workqueue, &devinfo->work);
127         }
128 out:
129         spin_unlock_irqrestore(&devinfo->lock, flags);
130 }
131
132 static void uas_scan_work(struct work_struct *work)
133 {
134         struct uas_dev_info *devinfo =
135                 container_of(work, struct uas_dev_info, scan_work);
136         struct Scsi_Host *shost = usb_get_intfdata(devinfo->intf);
137
138         dev_dbg(&devinfo->intf->dev, "starting scan\n");
139         scsi_scan_host(shost);
140         dev_dbg(&devinfo->intf->dev, "scan complete\n");
141 }
142
143 static void uas_add_work(struct uas_cmd_info *cmdinfo)
144 {
145         struct scsi_pointer *scp = (void *)cmdinfo;
146         struct scsi_cmnd *cmnd = container_of(scp, struct scsi_cmnd, SCp);
147         struct uas_dev_info *devinfo = cmnd->device->hostdata;
148
149         lockdep_assert_held(&devinfo->lock);
150         cmdinfo->state |= IS_IN_WORK_LIST;
151         queue_work(workqueue, &devinfo->work);
152 }
153
154 static void uas_zap_pending(struct uas_dev_info *devinfo, int result)
155 {
156         struct uas_cmd_info *cmdinfo;
157         struct scsi_cmnd *cmnd;
158         unsigned long flags;
159         int i, err;
160
161         spin_lock_irqsave(&devinfo->lock, flags);
162         for (i = 0; i < devinfo->qdepth; i++) {
163                 if (!devinfo->cmnd[i])
164                         continue;
165
166                 cmnd = devinfo->cmnd[i];
167                 cmdinfo = (void *)&cmnd->SCp;
168                 uas_log_cmd_state(cmnd, __func__, 0);
169                 /* Sense urbs were killed, clear COMMAND_INFLIGHT manually */
170                 cmdinfo->state &= ~COMMAND_INFLIGHT;
171                 cmnd->result = result << 16;
172                 err = uas_try_complete(cmnd, __func__);
173                 WARN_ON(err != 0);
174         }
175         spin_unlock_irqrestore(&devinfo->lock, flags);
176 }
177
178 static void uas_sense(struct urb *urb, struct scsi_cmnd *cmnd)
179 {
180         struct sense_iu *sense_iu = urb->transfer_buffer;
181         struct scsi_device *sdev = cmnd->device;
182
183         if (urb->actual_length > 16) {
184                 unsigned len = be16_to_cpup(&sense_iu->len);
185                 if (len + 16 != urb->actual_length) {
186                         int newlen = min(len + 16, urb->actual_length) - 16;
187                         if (newlen < 0)
188                                 newlen = 0;
189                         sdev_printk(KERN_INFO, sdev, "%s: urb length %d "
190                                 "disagrees with IU sense data length %d, "
191                                 "using %d bytes of sense data\n", __func__,
192                                         urb->actual_length, len, newlen);
193                         len = newlen;
194                 }
195                 memcpy(cmnd->sense_buffer, sense_iu->sense, len);
196         }
197
198         cmnd->result = sense_iu->status;
199 }
200
201 static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *prefix,
202                               int status)
203 {
204         struct uas_cmd_info *ci = (void *)&cmnd->SCp;
205         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
206
207         if (status == -ENODEV) /* too late */
208                 return;
209
210         scmd_printk(KERN_INFO, cmnd,
211                     "%s %d uas-tag %d inflight:%s%s%s%s%s%s%s%s%s%s%s%s ",
212                     prefix, status, cmdinfo->uas_tag,
213                     (ci->state & SUBMIT_STATUS_URB)     ? " s-st"  : "",
214                     (ci->state & ALLOC_DATA_IN_URB)     ? " a-in"  : "",
215                     (ci->state & SUBMIT_DATA_IN_URB)    ? " s-in"  : "",
216                     (ci->state & ALLOC_DATA_OUT_URB)    ? " a-out" : "",
217                     (ci->state & SUBMIT_DATA_OUT_URB)   ? " s-out" : "",
218                     (ci->state & ALLOC_CMD_URB)         ? " a-cmd" : "",
219                     (ci->state & SUBMIT_CMD_URB)        ? " s-cmd" : "",
220                     (ci->state & COMMAND_INFLIGHT)      ? " CMD"   : "",
221                     (ci->state & DATA_IN_URB_INFLIGHT)  ? " IN"    : "",
222                     (ci->state & DATA_OUT_URB_INFLIGHT) ? " OUT"   : "",
223                     (ci->state & COMMAND_ABORTED)       ? " abort" : "",
224                     (ci->state & IS_IN_WORK_LIST)       ? " work"  : "");
225         scsi_print_command(cmnd);
226 }
227
228 static void uas_free_unsubmitted_urbs(struct scsi_cmnd *cmnd)
229 {
230         struct uas_cmd_info *cmdinfo;
231
232         if (!cmnd)
233                 return;
234
235         cmdinfo = (void *)&cmnd->SCp;
236
237         if (cmdinfo->state & SUBMIT_CMD_URB)
238                 usb_free_urb(cmdinfo->cmd_urb);
239
240         /* data urbs may have never gotten their submit flag set */
241         if (!(cmdinfo->state & DATA_IN_URB_INFLIGHT))
242                 usb_free_urb(cmdinfo->data_in_urb);
243         if (!(cmdinfo->state & DATA_OUT_URB_INFLIGHT))
244                 usb_free_urb(cmdinfo->data_out_urb);
245 }
246
247 static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller)
248 {
249         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
250         struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
251
252         lockdep_assert_held(&devinfo->lock);
253         if (cmdinfo->state & (COMMAND_INFLIGHT |
254                               DATA_IN_URB_INFLIGHT |
255                               DATA_OUT_URB_INFLIGHT |
256                               COMMAND_ABORTED))
257                 return -EBUSY;
258         devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL;
259         uas_free_unsubmitted_urbs(cmnd);
260         cmnd->scsi_done(cmnd);
261         return 0;
262 }
263
264 static void uas_xfer_data(struct urb *urb, struct scsi_cmnd *cmnd,
265                           unsigned direction)
266 {
267         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
268         int err;
269
270         cmdinfo->state |= direction | SUBMIT_STATUS_URB;
271         err = uas_submit_urbs(cmnd, cmnd->device->hostdata);
272         if (err) {
273                 uas_add_work(cmdinfo);
274         }
275 }
276
277 static bool uas_evaluate_response_iu(struct response_iu *riu, struct scsi_cmnd *cmnd)
278 {
279         u8 response_code = riu->response_code;
280
281         switch (response_code) {
282         case RC_INCORRECT_LUN:
283                 cmnd->result = DID_BAD_TARGET << 16;
284                 break;
285         case RC_TMF_SUCCEEDED:
286                 cmnd->result = DID_OK << 16;
287                 break;
288         case RC_TMF_NOT_SUPPORTED:
289                 cmnd->result = DID_TARGET_FAILURE << 16;
290                 break;
291         default:
292                 uas_log_cmd_state(cmnd, "response iu", response_code);
293                 cmnd->result = DID_ERROR << 16;
294                 break;
295         }
296
297         return response_code == RC_TMF_SUCCEEDED;
298 }
299
300 static void uas_stat_cmplt(struct urb *urb)
301 {
302         struct iu *iu = urb->transfer_buffer;
303         struct Scsi_Host *shost = urb->context;
304         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
305         struct urb *data_in_urb = NULL;
306         struct urb *data_out_urb = NULL;
307         struct scsi_cmnd *cmnd;
308         struct uas_cmd_info *cmdinfo;
309         unsigned long flags;
310         unsigned int idx;
311         int status = urb->status;
312         bool success;
313
314         spin_lock_irqsave(&devinfo->lock, flags);
315
316         if (devinfo->resetting)
317                 goto out;
318
319         if (status) {
320                 if (status != -ENOENT && status != -ECONNRESET && status != -ESHUTDOWN)
321                         dev_err(&urb->dev->dev, "stat urb: status %d\n", status);
322                 goto out;
323         }
324
325         idx = be16_to_cpup(&iu->tag) - 1;
326         if (idx >= MAX_CMNDS || !devinfo->cmnd[idx]) {
327                 dev_err(&urb->dev->dev,
328                         "stat urb: no pending cmd for uas-tag %d\n", idx + 1);
329                 goto out;
330         }
331
332         cmnd = devinfo->cmnd[idx];
333         cmdinfo = (void *)&cmnd->SCp;
334
335         if (!(cmdinfo->state & COMMAND_INFLIGHT)) {
336                 uas_log_cmd_state(cmnd, "unexpected status cmplt", 0);
337                 goto out;
338         }
339
340         switch (iu->iu_id) {
341         case IU_ID_STATUS:
342                 uas_sense(urb, cmnd);
343                 if (cmnd->result != 0) {
344                         /* cancel data transfers on error */
345                         data_in_urb = usb_get_urb(cmdinfo->data_in_urb);
346                         data_out_urb = usb_get_urb(cmdinfo->data_out_urb);
347                 }
348                 cmdinfo->state &= ~COMMAND_INFLIGHT;
349                 uas_try_complete(cmnd, __func__);
350                 break;
351         case IU_ID_READ_READY:
352                 if (!cmdinfo->data_in_urb ||
353                                 (cmdinfo->state & DATA_IN_URB_INFLIGHT)) {
354                         uas_log_cmd_state(cmnd, "unexpected read rdy", 0);
355                         break;
356                 }
357                 uas_xfer_data(urb, cmnd, SUBMIT_DATA_IN_URB);
358                 break;
359         case IU_ID_WRITE_READY:
360                 if (!cmdinfo->data_out_urb ||
361                                 (cmdinfo->state & DATA_OUT_URB_INFLIGHT)) {
362                         uas_log_cmd_state(cmnd, "unexpected write rdy", 0);
363                         break;
364                 }
365                 uas_xfer_data(urb, cmnd, SUBMIT_DATA_OUT_URB);
366                 break;
367         case IU_ID_RESPONSE:
368                 cmdinfo->state &= ~COMMAND_INFLIGHT;
369                 success = uas_evaluate_response_iu((struct response_iu *)iu, cmnd);
370                 if (!success) {
371                         /* Error, cancel data transfers */
372                         data_in_urb = usb_get_urb(cmdinfo->data_in_urb);
373                         data_out_urb = usb_get_urb(cmdinfo->data_out_urb);
374                 }
375                 uas_try_complete(cmnd, __func__);
376                 break;
377         default:
378                 uas_log_cmd_state(cmnd, "bogus IU", iu->iu_id);
379         }
380 out:
381         usb_free_urb(urb);
382         spin_unlock_irqrestore(&devinfo->lock, flags);
383
384         /* Unlinking of data urbs must be done without holding the lock */
385         if (data_in_urb) {
386                 usb_unlink_urb(data_in_urb);
387                 usb_put_urb(data_in_urb);
388         }
389         if (data_out_urb) {
390                 usb_unlink_urb(data_out_urb);
391                 usb_put_urb(data_out_urb);
392         }
393 }
394
395 static void uas_data_cmplt(struct urb *urb)
396 {
397         struct scsi_cmnd *cmnd = urb->context;
398         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
399         struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
400         struct scsi_data_buffer *sdb = NULL;
401         unsigned long flags;
402         int status = urb->status;
403
404         spin_lock_irqsave(&devinfo->lock, flags);
405
406         if (cmdinfo->data_in_urb == urb) {
407                 sdb = scsi_in(cmnd);
408                 cmdinfo->state &= ~DATA_IN_URB_INFLIGHT;
409                 cmdinfo->data_in_urb = NULL;
410         } else if (cmdinfo->data_out_urb == urb) {
411                 sdb = scsi_out(cmnd);
412                 cmdinfo->state &= ~DATA_OUT_URB_INFLIGHT;
413                 cmdinfo->data_out_urb = NULL;
414         }
415         if (sdb == NULL) {
416                 WARN_ON_ONCE(1);
417                 goto out;
418         }
419
420         if (devinfo->resetting)
421                 goto out;
422
423         /* Data urbs should not complete before the cmd urb is submitted */
424         if (cmdinfo->state & SUBMIT_CMD_URB) {
425                 uas_log_cmd_state(cmnd, "unexpected data cmplt", 0);
426                 goto out;
427         }
428
429         if (status) {
430                 if (status != -ENOENT && status != -ECONNRESET && status != -ESHUTDOWN)
431                         uas_log_cmd_state(cmnd, "data cmplt err", status);
432                 /* error: no data transfered */
433                 sdb->resid = sdb->length;
434         } else {
435                 sdb->resid = sdb->length - urb->actual_length;
436         }
437         uas_try_complete(cmnd, __func__);
438 out:
439         usb_free_urb(urb);
440         spin_unlock_irqrestore(&devinfo->lock, flags);
441 }
442
443 static void uas_cmd_cmplt(struct urb *urb)
444 {
445         if (urb->status)
446                 dev_err(&urb->dev->dev, "cmd cmplt err %d\n", urb->status);
447
448         usb_free_urb(urb);
449 }
450
451 static struct urb *uas_alloc_data_urb(struct uas_dev_info *devinfo, gfp_t gfp,
452                                       struct scsi_cmnd *cmnd,
453                                       enum dma_data_direction dir)
454 {
455         struct usb_device *udev = devinfo->udev;
456         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
457         struct urb *urb = usb_alloc_urb(0, gfp);
458         struct scsi_data_buffer *sdb = (dir == DMA_FROM_DEVICE)
459                 ? scsi_in(cmnd) : scsi_out(cmnd);
460         unsigned int pipe = (dir == DMA_FROM_DEVICE)
461                 ? devinfo->data_in_pipe : devinfo->data_out_pipe;
462
463         if (!urb)
464                 goto out;
465         usb_fill_bulk_urb(urb, udev, pipe, NULL, sdb->length,
466                           uas_data_cmplt, cmnd);
467         if (devinfo->use_streams)
468                 urb->stream_id = cmdinfo->uas_tag;
469         urb->num_sgs = udev->bus->sg_tablesize ? sdb->table.nents : 0;
470         urb->sg = sdb->table.sgl;
471  out:
472         return urb;
473 }
474
475 static struct urb *uas_alloc_sense_urb(struct uas_dev_info *devinfo, gfp_t gfp,
476                                        struct scsi_cmnd *cmnd)
477 {
478         struct usb_device *udev = devinfo->udev;
479         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
480         struct urb *urb = usb_alloc_urb(0, gfp);
481         struct sense_iu *iu;
482
483         if (!urb)
484                 goto out;
485
486         iu = kzalloc(sizeof(*iu), gfp);
487         if (!iu)
488                 goto free;
489
490         usb_fill_bulk_urb(urb, udev, devinfo->status_pipe, iu, sizeof(*iu),
491                           uas_stat_cmplt, cmnd->device->host);
492         if (devinfo->use_streams)
493                 urb->stream_id = cmdinfo->uas_tag;
494         urb->transfer_flags |= URB_FREE_BUFFER;
495  out:
496         return urb;
497  free:
498         usb_free_urb(urb);
499         return NULL;
500 }
501
502 static struct urb *uas_alloc_cmd_urb(struct uas_dev_info *devinfo, gfp_t gfp,
503                                         struct scsi_cmnd *cmnd)
504 {
505         struct usb_device *udev = devinfo->udev;
506         struct scsi_device *sdev = cmnd->device;
507         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
508         struct urb *urb = usb_alloc_urb(0, gfp);
509         struct command_iu *iu;
510         int len;
511
512         if (!urb)
513                 goto out;
514
515         len = cmnd->cmd_len - 16;
516         if (len < 0)
517                 len = 0;
518         len = ALIGN(len, 4);
519         iu = kzalloc(sizeof(*iu) + len, gfp);
520         if (!iu)
521                 goto free;
522
523         iu->iu_id = IU_ID_COMMAND;
524         iu->tag = cpu_to_be16(cmdinfo->uas_tag);
525         iu->prio_attr = UAS_SIMPLE_TAG;
526         iu->len = len;
527         int_to_scsilun(sdev->lun, &iu->lun);
528         memcpy(iu->cdb, cmnd->cmnd, cmnd->cmd_len);
529
530         usb_fill_bulk_urb(urb, udev, devinfo->cmd_pipe, iu, sizeof(*iu) + len,
531                                                         uas_cmd_cmplt, NULL);
532         urb->transfer_flags |= URB_FREE_BUFFER;
533  out:
534         return urb;
535  free:
536         usb_free_urb(urb);
537         return NULL;
538 }
539
540 /*
541  * Why should I request the Status IU before sending the Command IU?  Spec
542  * says to, but also says the device may receive them in any order.  Seems
543  * daft to me.
544  */
545
546 static struct urb *uas_submit_sense_urb(struct scsi_cmnd *cmnd, gfp_t gfp)
547 {
548         struct uas_dev_info *devinfo = cmnd->device->hostdata;
549         struct urb *urb;
550         int err;
551
552         urb = uas_alloc_sense_urb(devinfo, gfp, cmnd);
553         if (!urb)
554                 return NULL;
555         usb_anchor_urb(urb, &devinfo->sense_urbs);
556         err = usb_submit_urb(urb, gfp);
557         if (err) {
558                 usb_unanchor_urb(urb);
559                 uas_log_cmd_state(cmnd, "sense submit err", err);
560                 usb_free_urb(urb);
561                 return NULL;
562         }
563         return urb;
564 }
565
566 static int uas_submit_urbs(struct scsi_cmnd *cmnd,
567                            struct uas_dev_info *devinfo)
568 {
569         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
570         struct urb *urb;
571         int err;
572
573         lockdep_assert_held(&devinfo->lock);
574         if (cmdinfo->state & SUBMIT_STATUS_URB) {
575                 urb = uas_submit_sense_urb(cmnd, GFP_ATOMIC);
576                 if (!urb)
577                         return SCSI_MLQUEUE_DEVICE_BUSY;
578                 cmdinfo->state &= ~SUBMIT_STATUS_URB;
579         }
580
581         if (cmdinfo->state & ALLOC_DATA_IN_URB) {
582                 cmdinfo->data_in_urb = uas_alloc_data_urb(devinfo, GFP_ATOMIC,
583                                                         cmnd, DMA_FROM_DEVICE);
584                 if (!cmdinfo->data_in_urb)
585                         return SCSI_MLQUEUE_DEVICE_BUSY;
586                 cmdinfo->state &= ~ALLOC_DATA_IN_URB;
587         }
588
589         if (cmdinfo->state & SUBMIT_DATA_IN_URB) {
590                 usb_anchor_urb(cmdinfo->data_in_urb, &devinfo->data_urbs);
591                 err = usb_submit_urb(cmdinfo->data_in_urb, GFP_ATOMIC);
592                 if (err) {
593                         usb_unanchor_urb(cmdinfo->data_in_urb);
594                         uas_log_cmd_state(cmnd, "data in submit err", err);
595                         return SCSI_MLQUEUE_DEVICE_BUSY;
596                 }
597                 cmdinfo->state &= ~SUBMIT_DATA_IN_URB;
598                 cmdinfo->state |= DATA_IN_URB_INFLIGHT;
599         }
600
601         if (cmdinfo->state & ALLOC_DATA_OUT_URB) {
602                 cmdinfo->data_out_urb = uas_alloc_data_urb(devinfo, GFP_ATOMIC,
603                                                         cmnd, DMA_TO_DEVICE);
604                 if (!cmdinfo->data_out_urb)
605                         return SCSI_MLQUEUE_DEVICE_BUSY;
606                 cmdinfo->state &= ~ALLOC_DATA_OUT_URB;
607         }
608
609         if (cmdinfo->state & SUBMIT_DATA_OUT_URB) {
610                 usb_anchor_urb(cmdinfo->data_out_urb, &devinfo->data_urbs);
611                 err = usb_submit_urb(cmdinfo->data_out_urb, GFP_ATOMIC);
612                 if (err) {
613                         usb_unanchor_urb(cmdinfo->data_out_urb);
614                         uas_log_cmd_state(cmnd, "data out submit err", err);
615                         return SCSI_MLQUEUE_DEVICE_BUSY;
616                 }
617                 cmdinfo->state &= ~SUBMIT_DATA_OUT_URB;
618                 cmdinfo->state |= DATA_OUT_URB_INFLIGHT;
619         }
620
621         if (cmdinfo->state & ALLOC_CMD_URB) {
622                 cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, GFP_ATOMIC, cmnd);
623                 if (!cmdinfo->cmd_urb)
624                         return SCSI_MLQUEUE_DEVICE_BUSY;
625                 cmdinfo->state &= ~ALLOC_CMD_URB;
626         }
627
628         if (cmdinfo->state & SUBMIT_CMD_URB) {
629                 usb_anchor_urb(cmdinfo->cmd_urb, &devinfo->cmd_urbs);
630                 err = usb_submit_urb(cmdinfo->cmd_urb, GFP_ATOMIC);
631                 if (err) {
632                         usb_unanchor_urb(cmdinfo->cmd_urb);
633                         uas_log_cmd_state(cmnd, "cmd submit err", err);
634                         return SCSI_MLQUEUE_DEVICE_BUSY;
635                 }
636                 cmdinfo->cmd_urb = NULL;
637                 cmdinfo->state &= ~SUBMIT_CMD_URB;
638                 cmdinfo->state |= COMMAND_INFLIGHT;
639         }
640
641         return 0;
642 }
643
644 static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
645                                         void (*done)(struct scsi_cmnd *))
646 {
647         struct scsi_device *sdev = cmnd->device;
648         struct uas_dev_info *devinfo = sdev->hostdata;
649         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
650         unsigned long flags;
651         int idx, err;
652
653         BUILD_BUG_ON(sizeof(struct uas_cmd_info) > sizeof(struct scsi_pointer));
654
655         /* Re-check scsi_block_requests now that we've the host-lock */
656         if (cmnd->device->host->host_self_blocked)
657                 return SCSI_MLQUEUE_DEVICE_BUSY;
658
659         if ((devinfo->flags & US_FL_NO_ATA_1X) &&
660                         (cmnd->cmnd[0] == ATA_12 || cmnd->cmnd[0] == ATA_16)) {
661                 memcpy(cmnd->sense_buffer, usb_stor_sense_invalidCDB,
662                        sizeof(usb_stor_sense_invalidCDB));
663                 cmnd->result = SAM_STAT_CHECK_CONDITION;
664                 cmnd->scsi_done(cmnd);
665                 return 0;
666         }
667
668         spin_lock_irqsave(&devinfo->lock, flags);
669
670         if (devinfo->resetting) {
671                 cmnd->result = DID_ERROR << 16;
672                 cmnd->scsi_done(cmnd);
673                 goto zombie;
674         }
675
676         /* Find a free uas-tag */
677         for (idx = 0; idx < devinfo->qdepth; idx++) {
678                 if (!devinfo->cmnd[idx])
679                         break;
680         }
681         if (idx == devinfo->qdepth) {
682                 spin_unlock_irqrestore(&devinfo->lock, flags);
683                 return SCSI_MLQUEUE_DEVICE_BUSY;
684         }
685
686         cmnd->scsi_done = done;
687
688         memset(cmdinfo, 0, sizeof(*cmdinfo));
689         cmdinfo->uas_tag = idx + 1; /* uas-tag == usb-stream-id, so 1 based */
690         cmdinfo->state = SUBMIT_STATUS_URB | ALLOC_CMD_URB | SUBMIT_CMD_URB;
691
692         switch (cmnd->sc_data_direction) {
693         case DMA_FROM_DEVICE:
694                 cmdinfo->state |= ALLOC_DATA_IN_URB | SUBMIT_DATA_IN_URB;
695                 break;
696         case DMA_BIDIRECTIONAL:
697                 cmdinfo->state |= ALLOC_DATA_IN_URB | SUBMIT_DATA_IN_URB;
698         case DMA_TO_DEVICE:
699                 cmdinfo->state |= ALLOC_DATA_OUT_URB | SUBMIT_DATA_OUT_URB;
700         case DMA_NONE:
701                 break;
702         }
703
704         if (!devinfo->use_streams)
705                 cmdinfo->state &= ~(SUBMIT_DATA_IN_URB | SUBMIT_DATA_OUT_URB);
706
707         err = uas_submit_urbs(cmnd, devinfo);
708         /*
709          * in case of fatal errors the SCSI layer is peculiar
710          * a command that has finished is a success for the purpose
711          * of queueing, no matter how fatal the error
712          */
713         if (err == -ENODEV) {
714                 cmnd->result = DID_ERROR << 16;
715                 cmnd->scsi_done(cmnd);
716                 goto zombie;
717         }
718         if (err) {
719                 /* If we did nothing, give up now */
720                 if (cmdinfo->state & SUBMIT_STATUS_URB) {
721                         spin_unlock_irqrestore(&devinfo->lock, flags);
722                         return SCSI_MLQUEUE_DEVICE_BUSY;
723                 }
724                 uas_add_work(cmdinfo);
725         }
726
727         devinfo->cmnd[idx] = cmnd;
728 zombie:
729         spin_unlock_irqrestore(&devinfo->lock, flags);
730         return 0;
731 }
732
733 static DEF_SCSI_QCMD(uas_queuecommand)
734
735 /*
736  * For now we do not support actually sending an abort to the device, so
737  * this eh always fails. Still we must define it to make sure that we've
738  * dropped all references to the cmnd in question once this function exits.
739  */
740 static int uas_eh_abort_handler(struct scsi_cmnd *cmnd)
741 {
742         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
743         struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
744         struct urb *data_in_urb = NULL;
745         struct urb *data_out_urb = NULL;
746         unsigned long flags;
747
748         spin_lock_irqsave(&devinfo->lock, flags);
749
750         uas_log_cmd_state(cmnd, __func__, 0);
751
752         /* Ensure that try_complete does not call scsi_done */
753         cmdinfo->state |= COMMAND_ABORTED;
754
755         /* Drop all refs to this cmnd, kill data urbs to break their ref */
756         devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL;
757         if (cmdinfo->state & DATA_IN_URB_INFLIGHT)
758                 data_in_urb = usb_get_urb(cmdinfo->data_in_urb);
759         if (cmdinfo->state & DATA_OUT_URB_INFLIGHT)
760                 data_out_urb = usb_get_urb(cmdinfo->data_out_urb);
761
762         uas_free_unsubmitted_urbs(cmnd);
763
764         spin_unlock_irqrestore(&devinfo->lock, flags);
765
766         if (data_in_urb) {
767                 usb_kill_urb(data_in_urb);
768                 usb_put_urb(data_in_urb);
769         }
770         if (data_out_urb) {
771                 usb_kill_urb(data_out_urb);
772                 usb_put_urb(data_out_urb);
773         }
774
775         return FAILED;
776 }
777
778 static int uas_eh_bus_reset_handler(struct scsi_cmnd *cmnd)
779 {
780         struct scsi_device *sdev = cmnd->device;
781         struct uas_dev_info *devinfo = sdev->hostdata;
782         struct usb_device *udev = devinfo->udev;
783         unsigned long flags;
784         int err;
785
786         err = usb_lock_device_for_reset(udev, devinfo->intf);
787         if (err) {
788                 shost_printk(KERN_ERR, sdev->host,
789                              "%s FAILED to get lock err %d\n", __func__, err);
790                 return FAILED;
791         }
792
793         shost_printk(KERN_INFO, sdev->host, "%s start\n", __func__);
794
795         spin_lock_irqsave(&devinfo->lock, flags);
796         devinfo->resetting = 1;
797         spin_unlock_irqrestore(&devinfo->lock, flags);
798
799         usb_kill_anchored_urbs(&devinfo->cmd_urbs);
800         usb_kill_anchored_urbs(&devinfo->sense_urbs);
801         usb_kill_anchored_urbs(&devinfo->data_urbs);
802         uas_zap_pending(devinfo, DID_RESET);
803
804         err = usb_reset_device(udev);
805
806         spin_lock_irqsave(&devinfo->lock, flags);
807         devinfo->resetting = 0;
808         spin_unlock_irqrestore(&devinfo->lock, flags);
809
810         usb_unlock_device(udev);
811
812         if (err) {
813                 shost_printk(KERN_INFO, sdev->host, "%s FAILED err %d\n",
814                              __func__, err);
815                 return FAILED;
816         }
817
818         shost_printk(KERN_INFO, sdev->host, "%s success\n", __func__);
819         return SUCCESS;
820 }
821
822 static int uas_target_alloc(struct scsi_target *starget)
823 {
824         struct uas_dev_info *devinfo = (struct uas_dev_info *)
825                         dev_to_shost(starget->dev.parent)->hostdata;
826
827         if (devinfo->flags & US_FL_NO_REPORT_LUNS)
828                 starget->no_report_luns = 1;
829
830         return 0;
831 }
832
833 static int uas_slave_alloc(struct scsi_device *sdev)
834 {
835         struct uas_dev_info *devinfo =
836                 (struct uas_dev_info *)sdev->host->hostdata;
837
838         sdev->hostdata = devinfo;
839
840         /*
841          * The protocol has no requirements on alignment in the strict sense.
842          * Controllers may or may not have alignment restrictions.
843          * As this is not exported, we use an extremely conservative guess.
844          */
845         blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1));
846
847         if (devinfo->flags & US_FL_MAX_SECTORS_64)
848                 blk_queue_max_hw_sectors(sdev->request_queue, 64);
849         else if (devinfo->flags & US_FL_MAX_SECTORS_240)
850                 blk_queue_max_hw_sectors(sdev->request_queue, 240);
851
852         return 0;
853 }
854
855 static int uas_slave_configure(struct scsi_device *sdev)
856 {
857         struct uas_dev_info *devinfo = sdev->hostdata;
858
859         if (devinfo->flags & US_FL_NO_REPORT_OPCODES)
860                 sdev->no_report_opcodes = 1;
861
862         /* A few buggy USB-ATA bridges don't understand FUA */
863         if (devinfo->flags & US_FL_BROKEN_FUA)
864                 sdev->broken_fua = 1;
865
866         /* UAS also needs to support FL_ALWAYS_SYNC */
867         if (devinfo->flags & US_FL_ALWAYS_SYNC) {
868                 sdev->skip_ms_page_3f = 1;
869                 sdev->skip_ms_page_8 = 1;
870                 sdev->wce_default_on = 1;
871         }
872
873         /* Some disks cannot handle READ_CAPACITY_16 */
874         if (devinfo->flags & US_FL_NO_READ_CAPACITY_16)
875                 sdev->no_read_capacity_16 = 1;
876
877         /*
878          * Some disks return the total number of blocks in response
879          * to READ CAPACITY rather than the highest block number.
880          * If this device makes that mistake, tell the sd driver.
881          */
882         if (devinfo->flags & US_FL_FIX_CAPACITY)
883                 sdev->fix_capacity = 1;
884
885         /*
886          * in some cases we have to guess
887          */
888         if (devinfo->flags & US_FL_CAPACITY_HEURISTICS)
889                 sdev->guess_capacity = 1;
890
891         /*
892          * Some devices don't like MODE SENSE with page=0x3f,
893          * which is the command used for checking if a device
894          * is write-protected.  Now that we tell the sd driver
895          * to do a 192-byte transfer with this command the
896          * majority of devices work fine, but a few still can't
897          * handle it.  The sd driver will simply assume those
898          * devices are write-enabled.
899          */
900         if (devinfo->flags & US_FL_NO_WP_DETECT)
901                 sdev->skip_ms_page_3f = 1;
902
903         scsi_change_queue_depth(sdev, devinfo->qdepth - 2);
904         return 0;
905 }
906
907 static struct scsi_host_template uas_host_template = {
908         .module = THIS_MODULE,
909         .name = "uas",
910         .queuecommand = uas_queuecommand,
911         .target_alloc = uas_target_alloc,
912         .slave_alloc = uas_slave_alloc,
913         .slave_configure = uas_slave_configure,
914         .eh_abort_handler = uas_eh_abort_handler,
915         .eh_bus_reset_handler = uas_eh_bus_reset_handler,
916         .this_id = -1,
917         .sg_tablesize = SG_NONE,
918         .skip_settle_delay = 1,
919 };
920
921 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
922                     vendorName, productName, useProtocol, useTransport, \
923                     initFunction, flags) \
924 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
925         .driver_info = (flags) }
926
927 static struct usb_device_id uas_usb_ids[] = {
928 #       include "unusual_uas.h"
929         { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, USB_SC_SCSI, USB_PR_BULK) },
930         { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, USB_SC_SCSI, USB_PR_UAS) },
931         { }
932 };
933 MODULE_DEVICE_TABLE(usb, uas_usb_ids);
934
935 #undef UNUSUAL_DEV
936
937 static int uas_switch_interface(struct usb_device *udev,
938                                 struct usb_interface *intf)
939 {
940         struct usb_host_interface *alt;
941
942         alt = uas_find_uas_alt_setting(intf);
943         if (!alt)
944                 return -ENODEV;
945
946         return usb_set_interface(udev, alt->desc.bInterfaceNumber,
947                         alt->desc.bAlternateSetting);
948 }
949
950 static int uas_configure_endpoints(struct uas_dev_info *devinfo)
951 {
952         struct usb_host_endpoint *eps[4] = { };
953         struct usb_device *udev = devinfo->udev;
954         int r;
955
956         r = uas_find_endpoints(devinfo->intf->cur_altsetting, eps);
957         if (r)
958                 return r;
959
960         devinfo->cmd_pipe = usb_sndbulkpipe(udev,
961                                             usb_endpoint_num(&eps[0]->desc));
962         devinfo->status_pipe = usb_rcvbulkpipe(udev,
963                                             usb_endpoint_num(&eps[1]->desc));
964         devinfo->data_in_pipe = usb_rcvbulkpipe(udev,
965                                             usb_endpoint_num(&eps[2]->desc));
966         devinfo->data_out_pipe = usb_sndbulkpipe(udev,
967                                             usb_endpoint_num(&eps[3]->desc));
968
969         if (udev->speed < USB_SPEED_SUPER) {
970                 devinfo->qdepth = 32;
971                 devinfo->use_streams = 0;
972         } else {
973                 devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1,
974                                                     3, MAX_CMNDS, GFP_NOIO);
975                 if (devinfo->qdepth < 0)
976                         return devinfo->qdepth;
977                 devinfo->use_streams = 1;
978         }
979
980         return 0;
981 }
982
983 static void uas_free_streams(struct uas_dev_info *devinfo)
984 {
985         struct usb_device *udev = devinfo->udev;
986         struct usb_host_endpoint *eps[3];
987
988         eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe);
989         eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe);
990         eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe);
991         usb_free_streams(devinfo->intf, eps, 3, GFP_NOIO);
992 }
993
994 static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
995 {
996         int result = -ENOMEM;
997         struct Scsi_Host *shost = NULL;
998         struct uas_dev_info *devinfo;
999         struct usb_device *udev = interface_to_usbdev(intf);
1000         unsigned long dev_flags;
1001
1002         if (!uas_use_uas_driver(intf, id, &dev_flags))
1003                 return -ENODEV;
1004
1005         if (uas_switch_interface(udev, intf))
1006                 return -ENODEV;
1007
1008         shost = scsi_host_alloc(&uas_host_template,
1009                                 sizeof(struct uas_dev_info));
1010         if (!shost)
1011                 goto set_alt0;
1012
1013         shost->max_cmd_len = 16 + 252;
1014         shost->max_id = 1;
1015         shost->max_lun = 256;
1016         shost->max_channel = 0;
1017         shost->sg_tablesize = udev->bus->sg_tablesize;
1018
1019         devinfo = (struct uas_dev_info *)shost->hostdata;
1020         devinfo->intf = intf;
1021         devinfo->udev = udev;
1022         devinfo->resetting = 0;
1023         devinfo->shutdown = 0;
1024         devinfo->flags = dev_flags;
1025         init_usb_anchor(&devinfo->cmd_urbs);
1026         init_usb_anchor(&devinfo->sense_urbs);
1027         init_usb_anchor(&devinfo->data_urbs);
1028         spin_lock_init(&devinfo->lock);
1029         INIT_WORK(&devinfo->work, uas_do_work);
1030         INIT_WORK(&devinfo->scan_work, uas_scan_work);
1031
1032         result = uas_configure_endpoints(devinfo);
1033         if (result)
1034                 goto set_alt0;
1035
1036         /*
1037          * 1 tag is reserved for untagged commands +
1038          * 1 tag to avoid off by one errors in some bridge firmwares
1039          */
1040         shost->can_queue = devinfo->qdepth - 2;
1041
1042         usb_set_intfdata(intf, shost);
1043         result = scsi_add_host(shost, &intf->dev);
1044         if (result)
1045                 goto free_streams;
1046
1047         /* Submit the delayed_work for SCSI-device scanning */
1048         schedule_work(&devinfo->scan_work);
1049
1050         return result;
1051
1052 free_streams:
1053         uas_free_streams(devinfo);
1054         usb_set_intfdata(intf, NULL);
1055 set_alt0:
1056         usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0);
1057         if (shost)
1058                 scsi_host_put(shost);
1059         return result;
1060 }
1061
1062 static int uas_cmnd_list_empty(struct uas_dev_info *devinfo)
1063 {
1064         unsigned long flags;
1065         int i, r = 1;
1066
1067         spin_lock_irqsave(&devinfo->lock, flags);
1068
1069         for (i = 0; i < devinfo->qdepth; i++) {
1070                 if (devinfo->cmnd[i]) {
1071                         r = 0; /* Not empty */
1072                         break;
1073                 }
1074         }
1075
1076         spin_unlock_irqrestore(&devinfo->lock, flags);
1077
1078         return r;
1079 }
1080
1081 /*
1082  * Wait for any pending cmnds to complete, on usb-2 sense_urbs may temporarily
1083  * get empty while there still is more work to do due to sense-urbs completing
1084  * with a READ/WRITE_READY iu code, so keep waiting until the list gets empty.
1085  */
1086 static int uas_wait_for_pending_cmnds(struct uas_dev_info *devinfo)
1087 {
1088         unsigned long start_time;
1089         int r;
1090
1091         start_time = jiffies;
1092         do {
1093                 flush_work(&devinfo->work);
1094
1095                 r = usb_wait_anchor_empty_timeout(&devinfo->sense_urbs, 5000);
1096                 if (r == 0)
1097                         return -ETIME;
1098
1099                 r = usb_wait_anchor_empty_timeout(&devinfo->data_urbs, 500);
1100                 if (r == 0)
1101                         return -ETIME;
1102
1103                 if (time_after(jiffies, start_time + 5 * HZ))
1104                         return -ETIME;
1105         } while (!uas_cmnd_list_empty(devinfo));
1106
1107         return 0;
1108 }
1109
1110 static int uas_pre_reset(struct usb_interface *intf)
1111 {
1112         struct Scsi_Host *shost = usb_get_intfdata(intf);
1113         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1114         unsigned long flags;
1115
1116         if (devinfo->shutdown)
1117                 return 0;
1118
1119         /* Block new requests */
1120         spin_lock_irqsave(shost->host_lock, flags);
1121         scsi_block_requests(shost);
1122         spin_unlock_irqrestore(shost->host_lock, flags);
1123
1124         if (uas_wait_for_pending_cmnds(devinfo) != 0) {
1125                 shost_printk(KERN_ERR, shost, "%s: timed out\n", __func__);
1126                 scsi_unblock_requests(shost);
1127                 return 1;
1128         }
1129
1130         uas_free_streams(devinfo);
1131
1132         return 0;
1133 }
1134
1135 static int uas_post_reset(struct usb_interface *intf)
1136 {
1137         struct Scsi_Host *shost = usb_get_intfdata(intf);
1138         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1139         unsigned long flags;
1140         int err;
1141
1142         if (devinfo->shutdown)
1143                 return 0;
1144
1145         err = uas_configure_endpoints(devinfo);
1146         if (err && err != -ENODEV)
1147                 shost_printk(KERN_ERR, shost,
1148                              "%s: alloc streams error %d after reset",
1149                              __func__, err);
1150
1151         /* we must unblock the host in every case lest we deadlock */
1152         spin_lock_irqsave(shost->host_lock, flags);
1153         scsi_report_bus_reset(shost, 0);
1154         spin_unlock_irqrestore(shost->host_lock, flags);
1155
1156         scsi_unblock_requests(shost);
1157
1158         return err ? 1 : 0;
1159 }
1160
1161 static int uas_suspend(struct usb_interface *intf, pm_message_t message)
1162 {
1163         struct Scsi_Host *shost = usb_get_intfdata(intf);
1164         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1165
1166         if (uas_wait_for_pending_cmnds(devinfo) != 0) {
1167                 shost_printk(KERN_ERR, shost, "%s: timed out\n", __func__);
1168                 return -ETIME;
1169         }
1170
1171         return 0;
1172 }
1173
1174 static int uas_resume(struct usb_interface *intf)
1175 {
1176         return 0;
1177 }
1178
1179 static int uas_reset_resume(struct usb_interface *intf)
1180 {
1181         struct Scsi_Host *shost = usb_get_intfdata(intf);
1182         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1183         unsigned long flags;
1184         int err;
1185
1186         err = uas_configure_endpoints(devinfo);
1187         if (err) {
1188                 shost_printk(KERN_ERR, shost,
1189                              "%s: alloc streams error %d after reset",
1190                              __func__, err);
1191                 return -EIO;
1192         }
1193
1194         spin_lock_irqsave(shost->host_lock, flags);
1195         scsi_report_bus_reset(shost, 0);
1196         spin_unlock_irqrestore(shost->host_lock, flags);
1197
1198         return 0;
1199 }
1200
1201 static void uas_disconnect(struct usb_interface *intf)
1202 {
1203         struct Scsi_Host *shost = usb_get_intfdata(intf);
1204         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1205         unsigned long flags;
1206
1207         spin_lock_irqsave(&devinfo->lock, flags);
1208         devinfo->resetting = 1;
1209         spin_unlock_irqrestore(&devinfo->lock, flags);
1210
1211         cancel_work_sync(&devinfo->work);
1212         usb_kill_anchored_urbs(&devinfo->cmd_urbs);
1213         usb_kill_anchored_urbs(&devinfo->sense_urbs);
1214         usb_kill_anchored_urbs(&devinfo->data_urbs);
1215         uas_zap_pending(devinfo, DID_NO_CONNECT);
1216
1217         /*
1218          * Prevent SCSI scanning (if it hasn't started yet)
1219          * or wait for the SCSI-scanning routine to stop.
1220          */
1221         cancel_work_sync(&devinfo->scan_work);
1222
1223         scsi_remove_host(shost);
1224         uas_free_streams(devinfo);
1225         scsi_host_put(shost);
1226 }
1227
1228 /*
1229  * Put the device back in usb-storage mode on shutdown, as some BIOS-es
1230  * hang on reboot when the device is still in uas mode. Note the reset is
1231  * necessary as some devices won't revert to usb-storage mode without it.
1232  */
1233 static void uas_shutdown(struct device *dev)
1234 {
1235         struct usb_interface *intf = to_usb_interface(dev);
1236         struct usb_device *udev = interface_to_usbdev(intf);
1237         struct Scsi_Host *shost = usb_get_intfdata(intf);
1238         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1239
1240         if (system_state != SYSTEM_RESTART)
1241                 return;
1242
1243         devinfo->shutdown = 1;
1244         uas_free_streams(devinfo);
1245         usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0);
1246         usb_reset_device(udev);
1247 }
1248
1249 static struct usb_driver uas_driver = {
1250         .name = "uas",
1251         .probe = uas_probe,
1252         .disconnect = uas_disconnect,
1253         .pre_reset = uas_pre_reset,
1254         .post_reset = uas_post_reset,
1255         .suspend = uas_suspend,
1256         .resume = uas_resume,
1257         .reset_resume = uas_reset_resume,
1258         .drvwrap.driver.shutdown = uas_shutdown,
1259         .id_table = uas_usb_ids,
1260 };
1261
1262 static int __init uas_init(void)
1263 {
1264         int rv;
1265
1266         workqueue = alloc_workqueue("uas", WQ_MEM_RECLAIM, 0);
1267         if (!workqueue)
1268                 return -ENOMEM;
1269
1270         rv = usb_register(&uas_driver);
1271         if (rv) {
1272                 destroy_workqueue(workqueue);
1273                 return -ENOMEM;
1274         }
1275
1276         return 0;
1277 }
1278
1279 static void __exit uas_exit(void)
1280 {
1281         usb_deregister(&uas_driver);
1282         destroy_workqueue(workqueue);
1283 }
1284
1285 module_init(uas_init);
1286 module_exit(uas_exit);
1287
1288 MODULE_LICENSE("GPL");
1289 MODULE_AUTHOR(
1290         "Hans de Goede <hdegoede@redhat.com>, Matthew Wilcox and Sarah Sharp");