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