Linux-libre 5.4.48-gnu
[librecmc/linux-libre.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                 cmnd->result = DID_BAD_TARGET << 16;
283                 break;
284         case RC_TMF_SUCCEEDED:
285                 cmnd->result = DID_OK << 16;
286                 break;
287         case RC_TMF_NOT_SUPPORTED:
288                 cmnd->result = DID_TARGET_FAILURE << 16;
289                 break;
290         default:
291                 uas_log_cmd_state(cmnd, "response iu", response_code);
292                 cmnd->result = DID_ERROR << 16;
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                 cmnd->result = DID_ERROR << 16;
664                 cmnd->scsi_done(cmnd);
665                 spin_unlock_irqrestore(&devinfo->lock, flags);
666                 return 0;
667         }
668
669         /* Find a free uas-tag */
670         for (idx = 0; idx < devinfo->qdepth; idx++) {
671                 if (!devinfo->cmnd[idx])
672                         break;
673         }
674         if (idx == devinfo->qdepth) {
675                 spin_unlock_irqrestore(&devinfo->lock, flags);
676                 return SCSI_MLQUEUE_DEVICE_BUSY;
677         }
678
679         cmnd->scsi_done = done;
680
681         memset(cmdinfo, 0, sizeof(*cmdinfo));
682         cmdinfo->uas_tag = idx + 1; /* uas-tag == usb-stream-id, so 1 based */
683         cmdinfo->state = SUBMIT_STATUS_URB | ALLOC_CMD_URB | SUBMIT_CMD_URB;
684
685         switch (cmnd->sc_data_direction) {
686         case DMA_FROM_DEVICE:
687                 cmdinfo->state |= ALLOC_DATA_IN_URB | SUBMIT_DATA_IN_URB;
688                 break;
689         case DMA_BIDIRECTIONAL:
690                 cmdinfo->state |= ALLOC_DATA_IN_URB | SUBMIT_DATA_IN_URB;
691                 /* fall through */
692         case DMA_TO_DEVICE:
693                 cmdinfo->state |= ALLOC_DATA_OUT_URB | SUBMIT_DATA_OUT_URB;
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         if (err) {
703                 /* If we did nothing, give up now */
704                 if (cmdinfo->state & SUBMIT_STATUS_URB) {
705                         spin_unlock_irqrestore(&devinfo->lock, flags);
706                         return SCSI_MLQUEUE_DEVICE_BUSY;
707                 }
708                 uas_add_work(cmdinfo);
709         }
710
711         devinfo->cmnd[idx] = cmnd;
712         spin_unlock_irqrestore(&devinfo->lock, flags);
713         return 0;
714 }
715
716 static DEF_SCSI_QCMD(uas_queuecommand)
717
718 /*
719  * For now we do not support actually sending an abort to the device, so
720  * this eh always fails. Still we must define it to make sure that we've
721  * dropped all references to the cmnd in question once this function exits.
722  */
723 static int uas_eh_abort_handler(struct scsi_cmnd *cmnd)
724 {
725         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
726         struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
727         struct urb *data_in_urb = NULL;
728         struct urb *data_out_urb = NULL;
729         unsigned long flags;
730
731         spin_lock_irqsave(&devinfo->lock, flags);
732
733         uas_log_cmd_state(cmnd, __func__, 0);
734
735         /* Ensure that try_complete does not call scsi_done */
736         cmdinfo->state |= COMMAND_ABORTED;
737
738         /* Drop all refs to this cmnd, kill data urbs to break their ref */
739         devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL;
740         if (cmdinfo->state & DATA_IN_URB_INFLIGHT)
741                 data_in_urb = usb_get_urb(cmdinfo->data_in_urb);
742         if (cmdinfo->state & DATA_OUT_URB_INFLIGHT)
743                 data_out_urb = usb_get_urb(cmdinfo->data_out_urb);
744
745         uas_free_unsubmitted_urbs(cmnd);
746
747         spin_unlock_irqrestore(&devinfo->lock, flags);
748
749         if (data_in_urb) {
750                 usb_kill_urb(data_in_urb);
751                 usb_put_urb(data_in_urb);
752         }
753         if (data_out_urb) {
754                 usb_kill_urb(data_out_urb);
755                 usb_put_urb(data_out_urb);
756         }
757
758         return FAILED;
759 }
760
761 static int uas_eh_device_reset_handler(struct scsi_cmnd *cmnd)
762 {
763         struct scsi_device *sdev = cmnd->device;
764         struct uas_dev_info *devinfo = sdev->hostdata;
765         struct usb_device *udev = devinfo->udev;
766         unsigned long flags;
767         int err;
768
769         err = usb_lock_device_for_reset(udev, devinfo->intf);
770         if (err) {
771                 shost_printk(KERN_ERR, sdev->host,
772                              "%s FAILED to get lock err %d\n", __func__, err);
773                 return FAILED;
774         }
775
776         shost_printk(KERN_INFO, sdev->host, "%s start\n", __func__);
777
778         spin_lock_irqsave(&devinfo->lock, flags);
779         devinfo->resetting = 1;
780         spin_unlock_irqrestore(&devinfo->lock, flags);
781
782         usb_kill_anchored_urbs(&devinfo->cmd_urbs);
783         usb_kill_anchored_urbs(&devinfo->sense_urbs);
784         usb_kill_anchored_urbs(&devinfo->data_urbs);
785         uas_zap_pending(devinfo, DID_RESET);
786
787         err = usb_reset_device(udev);
788
789         spin_lock_irqsave(&devinfo->lock, flags);
790         devinfo->resetting = 0;
791         spin_unlock_irqrestore(&devinfo->lock, flags);
792
793         usb_unlock_device(udev);
794
795         if (err) {
796                 shost_printk(KERN_INFO, sdev->host, "%s FAILED err %d\n",
797                              __func__, err);
798                 return FAILED;
799         }
800
801         shost_printk(KERN_INFO, sdev->host, "%s success\n", __func__);
802         return SUCCESS;
803 }
804
805 static int uas_target_alloc(struct scsi_target *starget)
806 {
807         struct uas_dev_info *devinfo = (struct uas_dev_info *)
808                         dev_to_shost(starget->dev.parent)->hostdata;
809
810         if (devinfo->flags & US_FL_NO_REPORT_LUNS)
811                 starget->no_report_luns = 1;
812
813         return 0;
814 }
815
816 static int uas_slave_alloc(struct scsi_device *sdev)
817 {
818         struct uas_dev_info *devinfo =
819                 (struct uas_dev_info *)sdev->host->hostdata;
820
821         sdev->hostdata = devinfo;
822
823         /*
824          * The protocol has no requirements on alignment in the strict sense.
825          * Controllers may or may not have alignment restrictions.
826          * As this is not exported, we use an extremely conservative guess.
827          */
828         blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1));
829
830         if (devinfo->flags & US_FL_MAX_SECTORS_64)
831                 blk_queue_max_hw_sectors(sdev->request_queue, 64);
832         else if (devinfo->flags & US_FL_MAX_SECTORS_240)
833                 blk_queue_max_hw_sectors(sdev->request_queue, 240);
834
835         return 0;
836 }
837
838 static int uas_slave_configure(struct scsi_device *sdev)
839 {
840         struct uas_dev_info *devinfo = sdev->hostdata;
841
842         if (devinfo->flags & US_FL_NO_REPORT_OPCODES)
843                 sdev->no_report_opcodes = 1;
844
845         /* A few buggy USB-ATA bridges don't understand FUA */
846         if (devinfo->flags & US_FL_BROKEN_FUA)
847                 sdev->broken_fua = 1;
848
849         /* UAS also needs to support FL_ALWAYS_SYNC */
850         if (devinfo->flags & US_FL_ALWAYS_SYNC) {
851                 sdev->skip_ms_page_3f = 1;
852                 sdev->skip_ms_page_8 = 1;
853                 sdev->wce_default_on = 1;
854         }
855
856         /* Some disks cannot handle READ_CAPACITY_16 */
857         if (devinfo->flags & US_FL_NO_READ_CAPACITY_16)
858                 sdev->no_read_capacity_16 = 1;
859
860         /*
861          * Some disks return the total number of blocks in response
862          * to READ CAPACITY rather than the highest block number.
863          * If this device makes that mistake, tell the sd driver.
864          */
865         if (devinfo->flags & US_FL_FIX_CAPACITY)
866                 sdev->fix_capacity = 1;
867
868         /*
869          * in some cases we have to guess
870          */
871         if (devinfo->flags & US_FL_CAPACITY_HEURISTICS)
872                 sdev->guess_capacity = 1;
873
874         /*
875          * Some devices don't like MODE SENSE with page=0x3f,
876          * which is the command used for checking if a device
877          * is write-protected.  Now that we tell the sd driver
878          * to do a 192-byte transfer with this command the
879          * majority of devices work fine, but a few still can't
880          * handle it.  The sd driver will simply assume those
881          * devices are write-enabled.
882          */
883         if (devinfo->flags & US_FL_NO_WP_DETECT)
884                 sdev->skip_ms_page_3f = 1;
885
886         scsi_change_queue_depth(sdev, devinfo->qdepth - 2);
887         return 0;
888 }
889
890 static struct scsi_host_template uas_host_template = {
891         .module = THIS_MODULE,
892         .name = "uas",
893         .queuecommand = uas_queuecommand,
894         .target_alloc = uas_target_alloc,
895         .slave_alloc = uas_slave_alloc,
896         .slave_configure = uas_slave_configure,
897         .eh_abort_handler = uas_eh_abort_handler,
898         .eh_device_reset_handler = uas_eh_device_reset_handler,
899         .this_id = -1,
900         .sg_tablesize = SG_NONE,
901         .skip_settle_delay = 1,
902         .dma_boundary = PAGE_SIZE - 1,
903 };
904
905 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
906                     vendorName, productName, useProtocol, useTransport, \
907                     initFunction, flags) \
908 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
909         .driver_info = (flags) }
910
911 static struct usb_device_id uas_usb_ids[] = {
912 #       include "unusual_uas.h"
913         { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, USB_SC_SCSI, USB_PR_BULK) },
914         { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, USB_SC_SCSI, USB_PR_UAS) },
915         { }
916 };
917 MODULE_DEVICE_TABLE(usb, uas_usb_ids);
918
919 #undef UNUSUAL_DEV
920
921 static int uas_switch_interface(struct usb_device *udev,
922                                 struct usb_interface *intf)
923 {
924         struct usb_host_interface *alt;
925
926         alt = uas_find_uas_alt_setting(intf);
927         if (!alt)
928                 return -ENODEV;
929
930         return usb_set_interface(udev, alt->desc.bInterfaceNumber,
931                         alt->desc.bAlternateSetting);
932 }
933
934 static int uas_configure_endpoints(struct uas_dev_info *devinfo)
935 {
936         struct usb_host_endpoint *eps[4] = { };
937         struct usb_device *udev = devinfo->udev;
938         int r;
939
940         r = uas_find_endpoints(devinfo->intf->cur_altsetting, eps);
941         if (r)
942                 return r;
943
944         devinfo->cmd_pipe = usb_sndbulkpipe(udev,
945                                             usb_endpoint_num(&eps[0]->desc));
946         devinfo->status_pipe = usb_rcvbulkpipe(udev,
947                                             usb_endpoint_num(&eps[1]->desc));
948         devinfo->data_in_pipe = usb_rcvbulkpipe(udev,
949                                             usb_endpoint_num(&eps[2]->desc));
950         devinfo->data_out_pipe = usb_sndbulkpipe(udev,
951                                             usb_endpoint_num(&eps[3]->desc));
952
953         if (udev->speed < USB_SPEED_SUPER) {
954                 devinfo->qdepth = 32;
955                 devinfo->use_streams = 0;
956         } else {
957                 devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1,
958                                                     3, MAX_CMNDS, GFP_NOIO);
959                 if (devinfo->qdepth < 0)
960                         return devinfo->qdepth;
961                 devinfo->use_streams = 1;
962         }
963
964         return 0;
965 }
966
967 static void uas_free_streams(struct uas_dev_info *devinfo)
968 {
969         struct usb_device *udev = devinfo->udev;
970         struct usb_host_endpoint *eps[3];
971
972         eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe);
973         eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe);
974         eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe);
975         usb_free_streams(devinfo->intf, eps, 3, GFP_NOIO);
976 }
977
978 static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
979 {
980         int result = -ENOMEM;
981         struct Scsi_Host *shost = NULL;
982         struct uas_dev_info *devinfo;
983         struct usb_device *udev = interface_to_usbdev(intf);
984         unsigned long dev_flags;
985
986         if (!uas_use_uas_driver(intf, id, &dev_flags))
987                 return -ENODEV;
988
989         if (uas_switch_interface(udev, intf))
990                 return -ENODEV;
991
992         shost = scsi_host_alloc(&uas_host_template,
993                                 sizeof(struct uas_dev_info));
994         if (!shost)
995                 goto set_alt0;
996
997         shost->max_cmd_len = 16 + 252;
998         shost->max_id = 1;
999         shost->max_lun = 256;
1000         shost->max_channel = 0;
1001         shost->sg_tablesize = udev->bus->sg_tablesize;
1002
1003         devinfo = (struct uas_dev_info *)shost->hostdata;
1004         devinfo->intf = intf;
1005         devinfo->udev = udev;
1006         devinfo->resetting = 0;
1007         devinfo->shutdown = 0;
1008         devinfo->flags = dev_flags;
1009         init_usb_anchor(&devinfo->cmd_urbs);
1010         init_usb_anchor(&devinfo->sense_urbs);
1011         init_usb_anchor(&devinfo->data_urbs);
1012         spin_lock_init(&devinfo->lock);
1013         INIT_WORK(&devinfo->work, uas_do_work);
1014         INIT_WORK(&devinfo->scan_work, uas_scan_work);
1015
1016         result = uas_configure_endpoints(devinfo);
1017         if (result)
1018                 goto set_alt0;
1019
1020         /*
1021          * 1 tag is reserved for untagged commands +
1022          * 1 tag to avoid off by one errors in some bridge firmwares
1023          */
1024         shost->can_queue = devinfo->qdepth - 2;
1025
1026         usb_set_intfdata(intf, shost);
1027         result = scsi_add_host(shost, &intf->dev);
1028         if (result)
1029                 goto free_streams;
1030
1031         /* Submit the delayed_work for SCSI-device scanning */
1032         schedule_work(&devinfo->scan_work);
1033
1034         return result;
1035
1036 free_streams:
1037         uas_free_streams(devinfo);
1038         usb_set_intfdata(intf, NULL);
1039 set_alt0:
1040         usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0);
1041         if (shost)
1042                 scsi_host_put(shost);
1043         return result;
1044 }
1045
1046 static int uas_cmnd_list_empty(struct uas_dev_info *devinfo)
1047 {
1048         unsigned long flags;
1049         int i, r = 1;
1050
1051         spin_lock_irqsave(&devinfo->lock, flags);
1052
1053         for (i = 0; i < devinfo->qdepth; i++) {
1054                 if (devinfo->cmnd[i]) {
1055                         r = 0; /* Not empty */
1056                         break;
1057                 }
1058         }
1059
1060         spin_unlock_irqrestore(&devinfo->lock, flags);
1061
1062         return r;
1063 }
1064
1065 /*
1066  * Wait for any pending cmnds to complete, on usb-2 sense_urbs may temporarily
1067  * get empty while there still is more work to do due to sense-urbs completing
1068  * with a READ/WRITE_READY iu code, so keep waiting until the list gets empty.
1069  */
1070 static int uas_wait_for_pending_cmnds(struct uas_dev_info *devinfo)
1071 {
1072         unsigned long start_time;
1073         int r;
1074
1075         start_time = jiffies;
1076         do {
1077                 flush_work(&devinfo->work);
1078
1079                 r = usb_wait_anchor_empty_timeout(&devinfo->sense_urbs, 5000);
1080                 if (r == 0)
1081                         return -ETIME;
1082
1083                 r = usb_wait_anchor_empty_timeout(&devinfo->data_urbs, 500);
1084                 if (r == 0)
1085                         return -ETIME;
1086
1087                 if (time_after(jiffies, start_time + 5 * HZ))
1088                         return -ETIME;
1089         } while (!uas_cmnd_list_empty(devinfo));
1090
1091         return 0;
1092 }
1093
1094 static int uas_pre_reset(struct usb_interface *intf)
1095 {
1096         struct Scsi_Host *shost = usb_get_intfdata(intf);
1097         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1098         unsigned long flags;
1099
1100         if (devinfo->shutdown)
1101                 return 0;
1102
1103         /* Block new requests */
1104         spin_lock_irqsave(shost->host_lock, flags);
1105         scsi_block_requests(shost);
1106         spin_unlock_irqrestore(shost->host_lock, flags);
1107
1108         if (uas_wait_for_pending_cmnds(devinfo) != 0) {
1109                 shost_printk(KERN_ERR, shost, "%s: timed out\n", __func__);
1110                 scsi_unblock_requests(shost);
1111                 return 1;
1112         }
1113
1114         uas_free_streams(devinfo);
1115
1116         return 0;
1117 }
1118
1119 static int uas_post_reset(struct usb_interface *intf)
1120 {
1121         struct Scsi_Host *shost = usb_get_intfdata(intf);
1122         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1123         unsigned long flags;
1124         int err;
1125
1126         if (devinfo->shutdown)
1127                 return 0;
1128
1129         err = uas_configure_endpoints(devinfo);
1130         if (err && err != -ENODEV)
1131                 shost_printk(KERN_ERR, shost,
1132                              "%s: alloc streams error %d after reset",
1133                              __func__, err);
1134
1135         /* we must unblock the host in every case lest we deadlock */
1136         spin_lock_irqsave(shost->host_lock, flags);
1137         scsi_report_bus_reset(shost, 0);
1138         spin_unlock_irqrestore(shost->host_lock, flags);
1139
1140         scsi_unblock_requests(shost);
1141
1142         return err ? 1 : 0;
1143 }
1144
1145 static int uas_suspend(struct usb_interface *intf, pm_message_t message)
1146 {
1147         struct Scsi_Host *shost = usb_get_intfdata(intf);
1148         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1149
1150         if (uas_wait_for_pending_cmnds(devinfo) != 0) {
1151                 shost_printk(KERN_ERR, shost, "%s: timed out\n", __func__);
1152                 return -ETIME;
1153         }
1154
1155         return 0;
1156 }
1157
1158 static int uas_resume(struct usb_interface *intf)
1159 {
1160         return 0;
1161 }
1162
1163 static int uas_reset_resume(struct usb_interface *intf)
1164 {
1165         struct Scsi_Host *shost = usb_get_intfdata(intf);
1166         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1167         unsigned long flags;
1168         int err;
1169
1170         err = uas_configure_endpoints(devinfo);
1171         if (err) {
1172                 shost_printk(KERN_ERR, shost,
1173                              "%s: alloc streams error %d after reset",
1174                              __func__, err);
1175                 return -EIO;
1176         }
1177
1178         spin_lock_irqsave(shost->host_lock, flags);
1179         scsi_report_bus_reset(shost, 0);
1180         spin_unlock_irqrestore(shost->host_lock, flags);
1181
1182         return 0;
1183 }
1184
1185 static void uas_disconnect(struct usb_interface *intf)
1186 {
1187         struct Scsi_Host *shost = usb_get_intfdata(intf);
1188         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1189         unsigned long flags;
1190
1191         spin_lock_irqsave(&devinfo->lock, flags);
1192         devinfo->resetting = 1;
1193         spin_unlock_irqrestore(&devinfo->lock, flags);
1194
1195         cancel_work_sync(&devinfo->work);
1196         usb_kill_anchored_urbs(&devinfo->cmd_urbs);
1197         usb_kill_anchored_urbs(&devinfo->sense_urbs);
1198         usb_kill_anchored_urbs(&devinfo->data_urbs);
1199         uas_zap_pending(devinfo, DID_NO_CONNECT);
1200
1201         /*
1202          * Prevent SCSI scanning (if it hasn't started yet)
1203          * or wait for the SCSI-scanning routine to stop.
1204          */
1205         cancel_work_sync(&devinfo->scan_work);
1206
1207         scsi_remove_host(shost);
1208         uas_free_streams(devinfo);
1209         scsi_host_put(shost);
1210 }
1211
1212 /*
1213  * Put the device back in usb-storage mode on shutdown, as some BIOS-es
1214  * hang on reboot when the device is still in uas mode. Note the reset is
1215  * necessary as some devices won't revert to usb-storage mode without it.
1216  */
1217 static void uas_shutdown(struct device *dev)
1218 {
1219         struct usb_interface *intf = to_usb_interface(dev);
1220         struct usb_device *udev = interface_to_usbdev(intf);
1221         struct Scsi_Host *shost = usb_get_intfdata(intf);
1222         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1223
1224         if (system_state != SYSTEM_RESTART)
1225                 return;
1226
1227         devinfo->shutdown = 1;
1228         uas_free_streams(devinfo);
1229         usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0);
1230         usb_reset_device(udev);
1231 }
1232
1233 static struct usb_driver uas_driver = {
1234         .name = "uas",
1235         .probe = uas_probe,
1236         .disconnect = uas_disconnect,
1237         .pre_reset = uas_pre_reset,
1238         .post_reset = uas_post_reset,
1239         .suspend = uas_suspend,
1240         .resume = uas_resume,
1241         .reset_resume = uas_reset_resume,
1242         .drvwrap.driver.shutdown = uas_shutdown,
1243         .id_table = uas_usb_ids,
1244 };
1245
1246 static int __init uas_init(void)
1247 {
1248         int rv;
1249
1250         workqueue = alloc_workqueue("uas", WQ_MEM_RECLAIM, 0);
1251         if (!workqueue)
1252                 return -ENOMEM;
1253
1254         rv = usb_register(&uas_driver);
1255         if (rv) {
1256                 destroy_workqueue(workqueue);
1257                 return -ENOMEM;
1258         }
1259
1260         return 0;
1261 }
1262
1263 static void __exit uas_exit(void)
1264 {
1265         usb_deregister(&uas_driver);
1266         destroy_workqueue(workqueue);
1267 }
1268
1269 module_init(uas_init);
1270 module_exit(uas_exit);
1271
1272 MODULE_LICENSE("GPL");
1273 MODULE_IMPORT_NS(USB_STORAGE);
1274 MODULE_AUTHOR(
1275         "Hans de Goede <hdegoede@redhat.com>, Matthew Wilcox and Sarah Sharp");