]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/usb/storage/uas.c
uas: Remove task-management / abort error handling code
[karo-tx-linux.git] / drivers / usb / storage / uas.c
1 /*
2  * USB Attached SCSI
3  * Note that this is not the same as the USB Mass Storage driver
4  *
5  * Copyright Hans de Goede <hdegoede@redhat.com> for Red Hat, Inc. 2013 - 2014
6  * Copyright Matthew Wilcox for Intel Corp, 2010
7  * Copyright Sarah Sharp for Intel Corp, 2010
8  *
9  * Distributed under the terms of the GNU GPL, version two.
10  */
11
12 #include <linux/blkdev.h>
13 #include <linux/slab.h>
14 #include <linux/types.h>
15 #include <linux/module.h>
16 #include <linux/usb.h>
17 #include <linux/usb_usual.h>
18 #include <linux/usb/hcd.h>
19 #include <linux/usb/storage.h>
20 #include <linux/usb/uas.h>
21
22 #include <scsi/scsi.h>
23 #include <scsi/scsi_eh.h>
24 #include <scsi/scsi_dbg.h>
25 #include <scsi/scsi_cmnd.h>
26 #include <scsi/scsi_device.h>
27 #include <scsi/scsi_host.h>
28 #include <scsi/scsi_tcq.h>
29
30 #include "uas-detect.h"
31 #include "scsiglue.h"
32
33 /*
34  * The r00-r01c specs define this version of the SENSE IU data structure.
35  * It's still in use by several different firmware releases.
36  */
37 struct sense_iu_old {
38         __u8 iu_id;
39         __u8 rsvd1;
40         __be16 tag;
41         __be16 len;
42         __u8 status;
43         __u8 service_response;
44         __u8 sense[SCSI_SENSE_BUFFERSIZE];
45 };
46
47 struct uas_dev_info {
48         struct usb_interface *intf;
49         struct usb_device *udev;
50         struct usb_anchor cmd_urbs;
51         struct usb_anchor sense_urbs;
52         struct usb_anchor data_urbs;
53         unsigned long flags;
54         int qdepth, resetting;
55         unsigned cmd_pipe, status_pipe, data_in_pipe, data_out_pipe;
56         unsigned use_streams:1;
57         unsigned uas_sense_old:1;
58         unsigned shutdown:1;
59         struct scsi_cmnd *cmnd;
60         spinlock_t lock;
61         struct work_struct work;
62         struct list_head inflight_list;
63         struct list_head dead_list;
64 };
65
66 enum {
67         SUBMIT_STATUS_URB       = (1 << 1),
68         ALLOC_DATA_IN_URB       = (1 << 2),
69         SUBMIT_DATA_IN_URB      = (1 << 3),
70         ALLOC_DATA_OUT_URB      = (1 << 4),
71         SUBMIT_DATA_OUT_URB     = (1 << 5),
72         ALLOC_CMD_URB           = (1 << 6),
73         SUBMIT_CMD_URB          = (1 << 7),
74         COMMAND_INFLIGHT        = (1 << 8),
75         DATA_IN_URB_INFLIGHT    = (1 << 9),
76         DATA_OUT_URB_INFLIGHT   = (1 << 10),
77         COMMAND_COMPLETED       = (1 << 11),
78         COMMAND_ABORTED         = (1 << 12),
79         UNLINK_DATA_URBS        = (1 << 13),
80         IS_IN_WORK_LIST         = (1 << 14),
81 };
82
83 /* Overrides scsi_pointer */
84 struct uas_cmd_info {
85         unsigned int state;
86         unsigned int stream;
87         struct urb *cmd_urb;
88         struct urb *data_in_urb;
89         struct urb *data_out_urb;
90         struct list_head list;
91 };
92
93 /* I hate forward declarations, but I actually have a loop */
94 static int uas_submit_urbs(struct scsi_cmnd *cmnd,
95                                 struct uas_dev_info *devinfo, gfp_t gfp);
96 static void uas_do_work(struct work_struct *work);
97 static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller);
98 static void uas_free_streams(struct uas_dev_info *devinfo);
99 static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *caller);
100
101 /* Must be called with devinfo->lock held, will temporary unlock the lock */
102 static void uas_unlink_data_urbs(struct uas_dev_info *devinfo,
103                                  struct uas_cmd_info *cmdinfo,
104                                  unsigned long *lock_flags)
105 {
106         /*
107          * The UNLINK_DATA_URBS flag makes sure uas_try_complete
108          * (called by urb completion) doesn't release cmdinfo
109          * underneath us.
110          */
111         cmdinfo->state |= UNLINK_DATA_URBS;
112         spin_unlock_irqrestore(&devinfo->lock, *lock_flags);
113
114         if (cmdinfo->data_in_urb)
115                 usb_unlink_urb(cmdinfo->data_in_urb);
116         if (cmdinfo->data_out_urb)
117                 usb_unlink_urb(cmdinfo->data_out_urb);
118
119         spin_lock_irqsave(&devinfo->lock, *lock_flags);
120         cmdinfo->state &= ~UNLINK_DATA_URBS;
121 }
122
123 static void uas_do_work(struct work_struct *work)
124 {
125         struct uas_dev_info *devinfo =
126                 container_of(work, struct uas_dev_info, work);
127         struct uas_cmd_info *cmdinfo;
128         unsigned long flags;
129         int err;
130
131         spin_lock_irqsave(&devinfo->lock, flags);
132         list_for_each_entry(cmdinfo, &devinfo->inflight_list, list) {
133                 struct scsi_pointer *scp = (void *)cmdinfo;
134                 struct scsi_cmnd *cmnd = container_of(scp, struct scsi_cmnd,
135                                                       SCp);
136
137                 if (!(cmdinfo->state & IS_IN_WORK_LIST))
138                         continue;
139
140                 err = uas_submit_urbs(cmnd, cmnd->device->hostdata, GFP_ATOMIC);
141                 if (!err)
142                         cmdinfo->state &= ~IS_IN_WORK_LIST;
143                 else
144                         schedule_work(&devinfo->work);
145         }
146         spin_unlock_irqrestore(&devinfo->lock, flags);
147 }
148
149 static void uas_mark_cmd_dead(struct uas_dev_info *devinfo,
150                               struct uas_cmd_info *cmdinfo,
151                               int result, const char *caller)
152 {
153         struct scsi_pointer *scp = (void *)cmdinfo;
154         struct scsi_cmnd *cmnd = container_of(scp, struct scsi_cmnd, SCp);
155
156         uas_log_cmd_state(cmnd, caller);
157         lockdep_assert_held(&devinfo->lock);
158         WARN_ON_ONCE(cmdinfo->state & COMMAND_ABORTED);
159         cmdinfo->state |= COMMAND_ABORTED;
160         cmdinfo->state &= ~IS_IN_WORK_LIST;
161         cmnd->result = result << 16;
162         list_move_tail(&cmdinfo->list, &devinfo->dead_list);
163 }
164
165 static void uas_abort_inflight(struct uas_dev_info *devinfo, int result,
166                                const char *caller)
167 {
168         struct uas_cmd_info *cmdinfo;
169         struct uas_cmd_info *temp;
170         unsigned long flags;
171
172         spin_lock_irqsave(&devinfo->lock, flags);
173         list_for_each_entry_safe(cmdinfo, temp, &devinfo->inflight_list, list)
174                 uas_mark_cmd_dead(devinfo, cmdinfo, result, caller);
175         spin_unlock_irqrestore(&devinfo->lock, flags);
176 }
177
178 static void uas_add_work(struct uas_cmd_info *cmdinfo)
179 {
180         struct scsi_pointer *scp = (void *)cmdinfo;
181         struct scsi_cmnd *cmnd = container_of(scp, struct scsi_cmnd, SCp);
182         struct uas_dev_info *devinfo = cmnd->device->hostdata;
183
184         lockdep_assert_held(&devinfo->lock);
185         cmdinfo->state |= IS_IN_WORK_LIST;
186         schedule_work(&devinfo->work);
187 }
188
189 static void uas_zap_dead(struct uas_dev_info *devinfo)
190 {
191         struct uas_cmd_info *cmdinfo;
192         struct uas_cmd_info *temp;
193         unsigned long flags;
194
195         spin_lock_irqsave(&devinfo->lock, flags);
196         list_for_each_entry_safe(cmdinfo, temp, &devinfo->dead_list, list) {
197                 struct scsi_pointer *scp = (void *)cmdinfo;
198                 struct scsi_cmnd *cmnd = container_of(scp, struct scsi_cmnd,
199                                                       SCp);
200                 uas_log_cmd_state(cmnd, __func__);
201                 WARN_ON_ONCE(!(cmdinfo->state & COMMAND_ABORTED));
202                 /* all urbs are killed, clear inflight bits */
203                 cmdinfo->state &= ~(COMMAND_INFLIGHT |
204                                     DATA_IN_URB_INFLIGHT |
205                                     DATA_OUT_URB_INFLIGHT);
206                 uas_try_complete(cmnd, __func__);
207         }
208         spin_unlock_irqrestore(&devinfo->lock, flags);
209 }
210
211 static void uas_sense(struct urb *urb, struct scsi_cmnd *cmnd)
212 {
213         struct sense_iu *sense_iu = urb->transfer_buffer;
214         struct scsi_device *sdev = cmnd->device;
215
216         if (urb->actual_length > 16) {
217                 unsigned len = be16_to_cpup(&sense_iu->len);
218                 if (len + 16 != urb->actual_length) {
219                         int newlen = min(len + 16, urb->actual_length) - 16;
220                         if (newlen < 0)
221                                 newlen = 0;
222                         sdev_printk(KERN_INFO, sdev, "%s: urb length %d "
223                                 "disagrees with IU sense data length %d, "
224                                 "using %d bytes of sense data\n", __func__,
225                                         urb->actual_length, len, newlen);
226                         len = newlen;
227                 }
228                 memcpy(cmnd->sense_buffer, sense_iu->sense, len);
229         }
230
231         cmnd->result = sense_iu->status;
232 }
233
234 static void uas_sense_old(struct urb *urb, struct scsi_cmnd *cmnd)
235 {
236         struct sense_iu_old *sense_iu = urb->transfer_buffer;
237         struct scsi_device *sdev = cmnd->device;
238
239         if (urb->actual_length > 8) {
240                 unsigned len = be16_to_cpup(&sense_iu->len) - 2;
241                 if (len + 8 != urb->actual_length) {
242                         int newlen = min(len + 8, urb->actual_length) - 8;
243                         if (newlen < 0)
244                                 newlen = 0;
245                         sdev_printk(KERN_INFO, sdev, "%s: urb length %d "
246                                 "disagrees with IU sense data length %d, "
247                                 "using %d bytes of sense data\n", __func__,
248                                         urb->actual_length, len, newlen);
249                         len = newlen;
250                 }
251                 memcpy(cmnd->sense_buffer, sense_iu->sense, len);
252         }
253
254         cmnd->result = sense_iu->status;
255 }
256
257 static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *caller)
258 {
259         struct uas_cmd_info *ci = (void *)&cmnd->SCp;
260
261         scmd_printk(KERN_INFO, cmnd, "%s %p tag %d, inflight:"
262                     "%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
263                     caller, cmnd, cmnd->request->tag,
264                     (ci->state & SUBMIT_STATUS_URB)     ? " s-st"  : "",
265                     (ci->state & ALLOC_DATA_IN_URB)     ? " a-in"  : "",
266                     (ci->state & SUBMIT_DATA_IN_URB)    ? " s-in"  : "",
267                     (ci->state & ALLOC_DATA_OUT_URB)    ? " a-out" : "",
268                     (ci->state & SUBMIT_DATA_OUT_URB)   ? " s-out" : "",
269                     (ci->state & ALLOC_CMD_URB)         ? " a-cmd" : "",
270                     (ci->state & SUBMIT_CMD_URB)        ? " s-cmd" : "",
271                     (ci->state & COMMAND_INFLIGHT)      ? " CMD"   : "",
272                     (ci->state & DATA_IN_URB_INFLIGHT)  ? " IN"    : "",
273                     (ci->state & DATA_OUT_URB_INFLIGHT) ? " OUT"   : "",
274                     (ci->state & COMMAND_COMPLETED)     ? " done"  : "",
275                     (ci->state & COMMAND_ABORTED)       ? " abort" : "",
276                     (ci->state & UNLINK_DATA_URBS)      ? " unlink": "",
277                     (ci->state & IS_IN_WORK_LIST)       ? " work"  : "");
278 }
279
280 static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller)
281 {
282         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
283         struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
284
285         lockdep_assert_held(&devinfo->lock);
286         if (cmdinfo->state & (COMMAND_INFLIGHT |
287                               DATA_IN_URB_INFLIGHT |
288                               DATA_OUT_URB_INFLIGHT |
289                               UNLINK_DATA_URBS))
290                 return -EBUSY;
291         WARN_ON_ONCE(cmdinfo->state & COMMAND_COMPLETED);
292         cmdinfo->state |= COMMAND_COMPLETED;
293         usb_free_urb(cmdinfo->data_in_urb);
294         usb_free_urb(cmdinfo->data_out_urb);
295         if (cmdinfo->state & COMMAND_ABORTED)
296                 scmd_printk(KERN_INFO, cmnd, "abort completed\n");
297         list_del(&cmdinfo->list);
298         cmnd->scsi_done(cmnd);
299         return 0;
300 }
301
302 static void uas_xfer_data(struct urb *urb, struct scsi_cmnd *cmnd,
303                           unsigned direction)
304 {
305         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
306         int err;
307
308         cmdinfo->state |= direction | SUBMIT_STATUS_URB;
309         err = uas_submit_urbs(cmnd, cmnd->device->hostdata, GFP_ATOMIC);
310         if (err) {
311                 uas_add_work(cmdinfo);
312         }
313 }
314
315 static void uas_stat_cmplt(struct urb *urb)
316 {
317         struct iu *iu = urb->transfer_buffer;
318         struct Scsi_Host *shost = urb->context;
319         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
320         struct scsi_cmnd *cmnd;
321         struct uas_cmd_info *cmdinfo;
322         unsigned long flags;
323         u16 tag;
324
325         if (urb->status) {
326                 if (urb->status == -ENOENT) {
327                         dev_err(&urb->dev->dev, "stat urb: killed, stream %d\n",
328                                 urb->stream_id);
329                 } else {
330                         dev_err(&urb->dev->dev, "stat urb: status %d\n",
331                                 urb->status);
332                 }
333                 usb_free_urb(urb);
334                 return;
335         }
336
337         if (devinfo->resetting) {
338                 usb_free_urb(urb);
339                 return;
340         }
341
342         spin_lock_irqsave(&devinfo->lock, flags);
343         tag = be16_to_cpup(&iu->tag) - 1;
344         if (tag == 0)
345                 cmnd = devinfo->cmnd;
346         else
347                 cmnd = scsi_host_find_tag(shost, tag - 1);
348
349         if (!cmnd) {
350                 usb_free_urb(urb);
351                 spin_unlock_irqrestore(&devinfo->lock, flags);
352                 return;
353         }
354
355         cmdinfo = (void *)&cmnd->SCp;
356         switch (iu->iu_id) {
357         case IU_ID_STATUS:
358                 if (devinfo->cmnd == cmnd)
359                         devinfo->cmnd = NULL;
360
361                 if (urb->actual_length < 16)
362                         devinfo->uas_sense_old = 1;
363                 if (devinfo->uas_sense_old)
364                         uas_sense_old(urb, cmnd);
365                 else
366                         uas_sense(urb, cmnd);
367                 if (cmnd->result != 0) {
368                         /* cancel data transfers on error */
369                         uas_unlink_data_urbs(devinfo, cmdinfo, &flags);
370                 }
371                 cmdinfo->state &= ~COMMAND_INFLIGHT;
372                 uas_try_complete(cmnd, __func__);
373                 break;
374         case IU_ID_READ_READY:
375                 if (!cmdinfo->data_in_urb ||
376                                 (cmdinfo->state & DATA_IN_URB_INFLIGHT)) {
377                         scmd_printk(KERN_ERR, cmnd, "unexpected read rdy\n");
378                         break;
379                 }
380                 uas_xfer_data(urb, cmnd, SUBMIT_DATA_IN_URB);
381                 break;
382         case IU_ID_WRITE_READY:
383                 if (!cmdinfo->data_out_urb ||
384                                 (cmdinfo->state & DATA_OUT_URB_INFLIGHT)) {
385                         scmd_printk(KERN_ERR, cmnd, "unexpected write rdy\n");
386                         break;
387                 }
388                 uas_xfer_data(urb, cmnd, SUBMIT_DATA_OUT_URB);
389                 break;
390         default:
391                 scmd_printk(KERN_ERR, cmnd,
392                         "Bogus IU (%d) received on status pipe\n", iu->iu_id);
393         }
394         usb_free_urb(urb);
395         spin_unlock_irqrestore(&devinfo->lock, flags);
396 }
397
398 static void uas_data_cmplt(struct urb *urb)
399 {
400         struct scsi_cmnd *cmnd = urb->context;
401         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
402         struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
403         struct scsi_data_buffer *sdb = NULL;
404         unsigned long flags;
405
406         spin_lock_irqsave(&devinfo->lock, flags);
407         if (cmdinfo->data_in_urb == urb) {
408                 sdb = scsi_in(cmnd);
409                 cmdinfo->state &= ~DATA_IN_URB_INFLIGHT;
410         } else if (cmdinfo->data_out_urb == urb) {
411                 sdb = scsi_out(cmnd);
412                 cmdinfo->state &= ~DATA_OUT_URB_INFLIGHT;
413         }
414         if (sdb == NULL) {
415                 WARN_ON_ONCE(1);
416         } else if (urb->status) {
417                 if (urb->status != -ECONNRESET) {
418                         uas_log_cmd_state(cmnd, __func__);
419                         scmd_printk(KERN_ERR, cmnd,
420                                 "data cmplt err %d stream %d\n",
421                                 urb->status, urb->stream_id);
422                 }
423                 /* error: no data transfered */
424                 sdb->resid = sdb->length;
425         } else {
426                 sdb->resid = sdb->length - urb->actual_length;
427         }
428         uas_try_complete(cmnd, __func__);
429         spin_unlock_irqrestore(&devinfo->lock, flags);
430 }
431
432 static void uas_cmd_cmplt(struct urb *urb)
433 {
434         struct scsi_cmnd *cmnd = urb->context;
435
436         if (urb->status) {
437                 uas_log_cmd_state(cmnd, __func__);
438                 scmd_printk(KERN_ERR, cmnd, "cmd cmplt err %d\n", urb->status);
439         }
440         usb_free_urb(urb);
441 }
442
443 static struct urb *uas_alloc_data_urb(struct uas_dev_info *devinfo, gfp_t gfp,
444                                       unsigned int pipe, u16 stream_id,
445                                       struct scsi_cmnd *cmnd,
446                                       enum dma_data_direction dir)
447 {
448         struct usb_device *udev = devinfo->udev;
449         struct urb *urb = usb_alloc_urb(0, gfp);
450         struct scsi_data_buffer *sdb = (dir == DMA_FROM_DEVICE)
451                 ? scsi_in(cmnd) : scsi_out(cmnd);
452
453         if (!urb)
454                 goto out;
455         usb_fill_bulk_urb(urb, udev, pipe, NULL, sdb->length,
456                           uas_data_cmplt, cmnd);
457         urb->stream_id = stream_id;
458         urb->num_sgs = udev->bus->sg_tablesize ? sdb->table.nents : 0;
459         urb->sg = sdb->table.sgl;
460  out:
461         return urb;
462 }
463
464 static struct urb *uas_alloc_sense_urb(struct uas_dev_info *devinfo, gfp_t gfp,
465                                        struct Scsi_Host *shost, u16 stream_id)
466 {
467         struct usb_device *udev = devinfo->udev;
468         struct urb *urb = usb_alloc_urb(0, gfp);
469         struct sense_iu *iu;
470
471         if (!urb)
472                 goto out;
473
474         iu = kzalloc(sizeof(*iu), gfp);
475         if (!iu)
476                 goto free;
477
478         usb_fill_bulk_urb(urb, udev, devinfo->status_pipe, iu, sizeof(*iu),
479                                                 uas_stat_cmplt, shost);
480         urb->stream_id = stream_id;
481         urb->transfer_flags |= URB_FREE_BUFFER;
482  out:
483         return urb;
484  free:
485         usb_free_urb(urb);
486         return NULL;
487 }
488
489 static struct urb *uas_alloc_cmd_urb(struct uas_dev_info *devinfo, gfp_t gfp,
490                                         struct scsi_cmnd *cmnd)
491 {
492         struct usb_device *udev = devinfo->udev;
493         struct scsi_device *sdev = cmnd->device;
494         struct urb *urb = usb_alloc_urb(0, gfp);
495         struct command_iu *iu;
496         int len;
497
498         if (!urb)
499                 goto out;
500
501         len = cmnd->cmd_len - 16;
502         if (len < 0)
503                 len = 0;
504         len = ALIGN(len, 4);
505         iu = kzalloc(sizeof(*iu) + len, gfp);
506         if (!iu)
507                 goto free;
508
509         iu->iu_id = IU_ID_COMMAND;
510         if (blk_rq_tagged(cmnd->request))
511                 iu->tag = cpu_to_be16(cmnd->request->tag + 2);
512         else
513                 iu->tag = cpu_to_be16(1);
514         iu->prio_attr = UAS_SIMPLE_TAG;
515         iu->len = len;
516         int_to_scsilun(sdev->lun, &iu->lun);
517         memcpy(iu->cdb, cmnd->cmnd, cmnd->cmd_len);
518
519         usb_fill_bulk_urb(urb, udev, devinfo->cmd_pipe, iu, sizeof(*iu) + len,
520                                                         uas_cmd_cmplt, cmnd);
521         urb->transfer_flags |= URB_FREE_BUFFER;
522  out:
523         return urb;
524  free:
525         usb_free_urb(urb);
526         return NULL;
527 }
528
529 /*
530  * Why should I request the Status IU before sending the Command IU?  Spec
531  * says to, but also says the device may receive them in any order.  Seems
532  * daft to me.
533  */
534
535 static struct urb *uas_submit_sense_urb(struct scsi_cmnd *cmnd,
536                                         gfp_t gfp, unsigned int stream)
537 {
538         struct Scsi_Host *shost = cmnd->device->host;
539         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
540         struct urb *urb;
541         int err;
542
543         urb = uas_alloc_sense_urb(devinfo, gfp, shost, stream);
544         if (!urb)
545                 return NULL;
546         usb_anchor_urb(urb, &devinfo->sense_urbs);
547         err = usb_submit_urb(urb, gfp);
548         if (err) {
549                 usb_unanchor_urb(urb);
550                 uas_log_cmd_state(cmnd, __func__);
551                 shost_printk(KERN_INFO, shost,
552                              "sense urb submission error %d stream %d\n",
553                              err, stream);
554                 usb_free_urb(urb);
555                 return NULL;
556         }
557         return urb;
558 }
559
560 static int uas_submit_urbs(struct scsi_cmnd *cmnd,
561                            struct uas_dev_info *devinfo, gfp_t gfp)
562 {
563         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
564         struct urb *urb;
565         int err;
566
567         lockdep_assert_held(&devinfo->lock);
568         if (cmdinfo->state & SUBMIT_STATUS_URB) {
569                 urb = uas_submit_sense_urb(cmnd, gfp, cmdinfo->stream);
570                 if (!urb)
571                         return SCSI_MLQUEUE_DEVICE_BUSY;
572                 cmdinfo->state &= ~SUBMIT_STATUS_URB;
573         }
574
575         if (cmdinfo->state & ALLOC_DATA_IN_URB) {
576                 cmdinfo->data_in_urb = uas_alloc_data_urb(devinfo, gfp,
577                                         devinfo->data_in_pipe, cmdinfo->stream,
578                                         cmnd, DMA_FROM_DEVICE);
579                 if (!cmdinfo->data_in_urb)
580                         return SCSI_MLQUEUE_DEVICE_BUSY;
581                 cmdinfo->state &= ~ALLOC_DATA_IN_URB;
582         }
583
584         if (cmdinfo->state & SUBMIT_DATA_IN_URB) {
585                 usb_anchor_urb(cmdinfo->data_in_urb, &devinfo->data_urbs);
586                 err = usb_submit_urb(cmdinfo->data_in_urb, gfp);
587                 if (err) {
588                         usb_unanchor_urb(cmdinfo->data_in_urb);
589                         uas_log_cmd_state(cmnd, __func__);
590                         scmd_printk(KERN_INFO, cmnd,
591                                 "data in urb submission error %d stream %d\n",
592                                 err, cmdinfo->data_in_urb->stream_id);
593                         return SCSI_MLQUEUE_DEVICE_BUSY;
594                 }
595                 cmdinfo->state &= ~SUBMIT_DATA_IN_URB;
596                 cmdinfo->state |= DATA_IN_URB_INFLIGHT;
597         }
598
599         if (cmdinfo->state & ALLOC_DATA_OUT_URB) {
600                 cmdinfo->data_out_urb = uas_alloc_data_urb(devinfo, gfp,
601                                         devinfo->data_out_pipe, cmdinfo->stream,
602                                         cmnd, DMA_TO_DEVICE);
603                 if (!cmdinfo->data_out_urb)
604                         return SCSI_MLQUEUE_DEVICE_BUSY;
605                 cmdinfo->state &= ~ALLOC_DATA_OUT_URB;
606         }
607
608         if (cmdinfo->state & SUBMIT_DATA_OUT_URB) {
609                 usb_anchor_urb(cmdinfo->data_out_urb, &devinfo->data_urbs);
610                 err = usb_submit_urb(cmdinfo->data_out_urb, gfp);
611                 if (err) {
612                         usb_unanchor_urb(cmdinfo->data_out_urb);
613                         uas_log_cmd_state(cmnd, __func__);
614                         scmd_printk(KERN_INFO, cmnd,
615                                 "data out urb submission error %d stream %d\n",
616                                 err, cmdinfo->data_out_urb->stream_id);
617                         return SCSI_MLQUEUE_DEVICE_BUSY;
618                 }
619                 cmdinfo->state &= ~SUBMIT_DATA_OUT_URB;
620                 cmdinfo->state |= DATA_OUT_URB_INFLIGHT;
621         }
622
623         if (cmdinfo->state & ALLOC_CMD_URB) {
624                 cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, gfp, cmnd);
625                 if (!cmdinfo->cmd_urb)
626                         return SCSI_MLQUEUE_DEVICE_BUSY;
627                 cmdinfo->state &= ~ALLOC_CMD_URB;
628         }
629
630         if (cmdinfo->state & SUBMIT_CMD_URB) {
631                 usb_anchor_urb(cmdinfo->cmd_urb, &devinfo->cmd_urbs);
632                 err = usb_submit_urb(cmdinfo->cmd_urb, gfp);
633                 if (err) {
634                         usb_unanchor_urb(cmdinfo->cmd_urb);
635                         uas_log_cmd_state(cmnd, __func__);
636                         scmd_printk(KERN_INFO, cmnd,
637                                     "cmd urb submission error %d\n", err);
638                         return SCSI_MLQUEUE_DEVICE_BUSY;
639                 }
640                 cmdinfo->cmd_urb = NULL;
641                 cmdinfo->state &= ~SUBMIT_CMD_URB;
642                 cmdinfo->state |= COMMAND_INFLIGHT;
643         }
644
645         return 0;
646 }
647
648 static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
649                                         void (*done)(struct scsi_cmnd *))
650 {
651         struct scsi_device *sdev = cmnd->device;
652         struct uas_dev_info *devinfo = sdev->hostdata;
653         struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
654         unsigned long flags;
655         int err;
656
657         BUILD_BUG_ON(sizeof(struct uas_cmd_info) > sizeof(struct scsi_pointer));
658
659         if ((devinfo->flags & US_FL_NO_ATA_1X) &&
660                         (cmnd->cmnd[0] == ATA_12 || cmnd->cmnd[0] == ATA_16)) {
661                 memcpy(cmnd->sense_buffer, usb_stor_sense_invalidCDB,
662                        sizeof(usb_stor_sense_invalidCDB));
663                 cmnd->result = SAM_STAT_CHECK_CONDITION;
664                 cmnd->scsi_done(cmnd);
665                 return 0;
666         }
667
668         spin_lock_irqsave(&devinfo->lock, flags);
669
670         if (devinfo->resetting) {
671                 cmnd->result = DID_ERROR << 16;
672                 cmnd->scsi_done(cmnd);
673                 spin_unlock_irqrestore(&devinfo->lock, flags);
674                 return 0;
675         }
676
677         if (devinfo->cmnd) {
678                 spin_unlock_irqrestore(&devinfo->lock, flags);
679                 return SCSI_MLQUEUE_DEVICE_BUSY;
680         }
681
682         memset(cmdinfo, 0, sizeof(*cmdinfo));
683
684         if (blk_rq_tagged(cmnd->request)) {
685                 cmdinfo->stream = cmnd->request->tag + 2;
686         } else {
687                 devinfo->cmnd = cmnd;
688                 cmdinfo->stream = 1;
689         }
690
691         cmnd->scsi_done = done;
692
693         cmdinfo->state = SUBMIT_STATUS_URB |
694                         ALLOC_CMD_URB | SUBMIT_CMD_URB;
695
696         switch (cmnd->sc_data_direction) {
697         case DMA_FROM_DEVICE:
698                 cmdinfo->state |= ALLOC_DATA_IN_URB | SUBMIT_DATA_IN_URB;
699                 break;
700         case DMA_BIDIRECTIONAL:
701                 cmdinfo->state |= ALLOC_DATA_IN_URB | SUBMIT_DATA_IN_URB;
702         case DMA_TO_DEVICE:
703                 cmdinfo->state |= ALLOC_DATA_OUT_URB | SUBMIT_DATA_OUT_URB;
704         case DMA_NONE:
705                 break;
706         }
707
708         if (!devinfo->use_streams) {
709                 cmdinfo->state &= ~(SUBMIT_DATA_IN_URB | SUBMIT_DATA_OUT_URB);
710                 cmdinfo->stream = 0;
711         }
712
713         err = uas_submit_urbs(cmnd, devinfo, GFP_ATOMIC);
714         if (err) {
715                 /* If we did nothing, give up now */
716                 if (cmdinfo->state & SUBMIT_STATUS_URB) {
717                         spin_unlock_irqrestore(&devinfo->lock, flags);
718                         return SCSI_MLQUEUE_DEVICE_BUSY;
719                 }
720                 uas_add_work(cmdinfo);
721         }
722
723         list_add_tail(&cmdinfo->list, &devinfo->inflight_list);
724         spin_unlock_irqrestore(&devinfo->lock, flags);
725         return 0;
726 }
727
728 static DEF_SCSI_QCMD(uas_queuecommand)
729
730 static int uas_eh_bus_reset_handler(struct scsi_cmnd *cmnd)
731 {
732         struct scsi_device *sdev = cmnd->device;
733         struct uas_dev_info *devinfo = sdev->hostdata;
734         struct usb_device *udev = devinfo->udev;
735         int err;
736
737         err = usb_lock_device_for_reset(udev, devinfo->intf);
738         if (err) {
739                 shost_printk(KERN_ERR, sdev->host,
740                              "%s FAILED to get lock err %d\n", __func__, err);
741                 return FAILED;
742         }
743
744         shost_printk(KERN_INFO, sdev->host, "%s start\n", __func__);
745         devinfo->resetting = 1;
746         uas_abort_inflight(devinfo, DID_RESET, __func__);
747         usb_kill_anchored_urbs(&devinfo->cmd_urbs);
748         usb_kill_anchored_urbs(&devinfo->sense_urbs);
749         usb_kill_anchored_urbs(&devinfo->data_urbs);
750         uas_zap_dead(devinfo);
751         err = usb_reset_device(udev);
752         devinfo->resetting = 0;
753
754         usb_unlock_device(udev);
755
756         if (err) {
757                 shost_printk(KERN_INFO, sdev->host, "%s FAILED\n", __func__);
758                 return FAILED;
759         }
760
761         shost_printk(KERN_INFO, sdev->host, "%s success\n", __func__);
762         return SUCCESS;
763 }
764
765 static int uas_slave_alloc(struct scsi_device *sdev)
766 {
767         sdev->hostdata = (void *)sdev->host->hostdata;
768
769         /* USB has unusual DMA-alignment requirements: Although the
770          * starting address of each scatter-gather element doesn't matter,
771          * the length of each element except the last must be divisible
772          * by the Bulk maxpacket value.  There's currently no way to
773          * express this by block-layer constraints, so we'll cop out
774          * and simply require addresses to be aligned at 512-byte
775          * boundaries.  This is okay since most block I/O involves
776          * hardware sectors that are multiples of 512 bytes in length,
777          * and since host controllers up through USB 2.0 have maxpacket
778          * values no larger than 512.
779          *
780          * But it doesn't suffice for Wireless USB, where Bulk maxpacket
781          * values can be as large as 2048.  To make that work properly
782          * will require changes to the block layer.
783          */
784         blk_queue_update_dma_alignment(sdev->request_queue, (512 - 1));
785
786         return 0;
787 }
788
789 static int uas_slave_configure(struct scsi_device *sdev)
790 {
791         struct uas_dev_info *devinfo = sdev->hostdata;
792
793         if (devinfo->flags & US_FL_NO_REPORT_OPCODES)
794                 sdev->no_report_opcodes = 1;
795
796         scsi_set_tag_type(sdev, MSG_ORDERED_TAG);
797         scsi_activate_tcq(sdev, devinfo->qdepth - 2);
798         return 0;
799 }
800
801 static struct scsi_host_template uas_host_template = {
802         .module = THIS_MODULE,
803         .name = "uas",
804         .queuecommand = uas_queuecommand,
805         .slave_alloc = uas_slave_alloc,
806         .slave_configure = uas_slave_configure,
807         .eh_bus_reset_handler = uas_eh_bus_reset_handler,
808         .can_queue = 65536,     /* Is there a limit on the _host_ ? */
809         .this_id = -1,
810         .sg_tablesize = SG_NONE,
811         .cmd_per_lun = 1,       /* until we override it */
812         .skip_settle_delay = 1,
813         .ordered_tag = 1,
814 };
815
816 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
817                     vendorName, productName, useProtocol, useTransport, \
818                     initFunction, flags) \
819 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
820         .driver_info = (flags) }
821
822 static struct usb_device_id uas_usb_ids[] = {
823 #       include "unusual_uas.h"
824         { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, USB_SC_SCSI, USB_PR_BULK) },
825         { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, USB_SC_SCSI, USB_PR_UAS) },
826         /* 0xaa is a prototype device I happen to have access to */
827         { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, USB_SC_SCSI, 0xaa) },
828         { }
829 };
830 MODULE_DEVICE_TABLE(usb, uas_usb_ids);
831
832 #undef UNUSUAL_DEV
833
834 static int uas_switch_interface(struct usb_device *udev,
835                                 struct usb_interface *intf)
836 {
837         int alt;
838
839         alt = uas_find_uas_alt_setting(intf);
840         if (alt < 0)
841                 return alt;
842
843         return usb_set_interface(udev,
844                         intf->altsetting[0].desc.bInterfaceNumber, alt);
845 }
846
847 static int uas_configure_endpoints(struct uas_dev_info *devinfo)
848 {
849         struct usb_host_endpoint *eps[4] = { };
850         struct usb_device *udev = devinfo->udev;
851         int r;
852
853         devinfo->uas_sense_old = 0;
854         devinfo->cmnd = NULL;
855
856         r = uas_find_endpoints(devinfo->intf->cur_altsetting, eps);
857         if (r)
858                 return r;
859
860         devinfo->cmd_pipe = usb_sndbulkpipe(udev,
861                                             usb_endpoint_num(&eps[0]->desc));
862         devinfo->status_pipe = usb_rcvbulkpipe(udev,
863                                             usb_endpoint_num(&eps[1]->desc));
864         devinfo->data_in_pipe = usb_rcvbulkpipe(udev,
865                                             usb_endpoint_num(&eps[2]->desc));
866         devinfo->data_out_pipe = usb_sndbulkpipe(udev,
867                                             usb_endpoint_num(&eps[3]->desc));
868
869         if (udev->speed != USB_SPEED_SUPER) {
870                 devinfo->qdepth = 32;
871                 devinfo->use_streams = 0;
872         } else {
873                 devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1,
874                                                     3, 256, GFP_NOIO);
875                 if (devinfo->qdepth < 0)
876                         return devinfo->qdepth;
877                 devinfo->use_streams = 1;
878         }
879
880         return 0;
881 }
882
883 static void uas_free_streams(struct uas_dev_info *devinfo)
884 {
885         struct usb_device *udev = devinfo->udev;
886         struct usb_host_endpoint *eps[3];
887
888         eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe);
889         eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe);
890         eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe);
891         usb_free_streams(devinfo->intf, eps, 3, GFP_NOIO);
892 }
893
894 static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
895 {
896         int result = -ENOMEM;
897         struct Scsi_Host *shost = NULL;
898         struct uas_dev_info *devinfo;
899         struct usb_device *udev = interface_to_usbdev(intf);
900
901         if (!uas_use_uas_driver(intf, id))
902                 return -ENODEV;
903
904         if (uas_switch_interface(udev, intf))
905                 return -ENODEV;
906
907         shost = scsi_host_alloc(&uas_host_template,
908                                 sizeof(struct uas_dev_info));
909         if (!shost)
910                 goto set_alt0;
911
912         shost->max_cmd_len = 16 + 252;
913         shost->max_id = 1;
914         shost->max_lun = 256;
915         shost->max_channel = 0;
916         shost->sg_tablesize = udev->bus->sg_tablesize;
917
918         devinfo = (struct uas_dev_info *)shost->hostdata;
919         devinfo->intf = intf;
920         devinfo->udev = udev;
921         devinfo->resetting = 0;
922         devinfo->shutdown = 0;
923         devinfo->flags = id->driver_info;
924         usb_stor_adjust_quirks(udev, &devinfo->flags);
925         init_usb_anchor(&devinfo->cmd_urbs);
926         init_usb_anchor(&devinfo->sense_urbs);
927         init_usb_anchor(&devinfo->data_urbs);
928         spin_lock_init(&devinfo->lock);
929         INIT_WORK(&devinfo->work, uas_do_work);
930         INIT_LIST_HEAD(&devinfo->inflight_list);
931         INIT_LIST_HEAD(&devinfo->dead_list);
932
933         result = uas_configure_endpoints(devinfo);
934         if (result)
935                 goto set_alt0;
936
937         result = scsi_init_shared_tag_map(shost, devinfo->qdepth - 2);
938         if (result)
939                 goto free_streams;
940
941         usb_set_intfdata(intf, shost);
942         result = scsi_add_host(shost, &intf->dev);
943         if (result)
944                 goto free_streams;
945
946         scsi_scan_host(shost);
947         return result;
948
949 free_streams:
950         uas_free_streams(devinfo);
951         usb_set_intfdata(intf, NULL);
952 set_alt0:
953         usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0);
954         if (shost)
955                 scsi_host_put(shost);
956         return result;
957 }
958
959 static int uas_pre_reset(struct usb_interface *intf)
960 {
961         struct Scsi_Host *shost = usb_get_intfdata(intf);
962         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
963         unsigned long flags;
964
965         if (devinfo->shutdown)
966                 return 0;
967
968         /* Block new requests */
969         spin_lock_irqsave(shost->host_lock, flags);
970         scsi_block_requests(shost);
971         spin_unlock_irqrestore(shost->host_lock, flags);
972
973         /* Wait for any pending requests to complete */
974         flush_work(&devinfo->work);
975         if (usb_wait_anchor_empty_timeout(&devinfo->sense_urbs, 5000) == 0) {
976                 shost_printk(KERN_ERR, shost, "%s: timed out\n", __func__);
977                 return 1;
978         }
979
980         uas_free_streams(devinfo);
981
982         return 0;
983 }
984
985 static int uas_post_reset(struct usb_interface *intf)
986 {
987         struct Scsi_Host *shost = usb_get_intfdata(intf);
988         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
989         unsigned long flags;
990
991         if (devinfo->shutdown)
992                 return 0;
993
994         if (uas_configure_endpoints(devinfo) != 0) {
995                 shost_printk(KERN_ERR, shost,
996                              "%s: alloc streams error after reset", __func__);
997                 return 1;
998         }
999
1000         spin_lock_irqsave(shost->host_lock, flags);
1001         scsi_report_bus_reset(shost, 0);
1002         spin_unlock_irqrestore(shost->host_lock, flags);
1003
1004         scsi_unblock_requests(shost);
1005
1006         return 0;
1007 }
1008
1009 static int uas_suspend(struct usb_interface *intf, pm_message_t message)
1010 {
1011         struct Scsi_Host *shost = usb_get_intfdata(intf);
1012         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1013
1014         /* Wait for any pending requests to complete */
1015         flush_work(&devinfo->work);
1016         if (usb_wait_anchor_empty_timeout(&devinfo->sense_urbs, 5000) == 0) {
1017                 shost_printk(KERN_ERR, shost, "%s: timed out\n", __func__);
1018                 return -ETIME;
1019         }
1020
1021         return 0;
1022 }
1023
1024 static int uas_resume(struct usb_interface *intf)
1025 {
1026         return 0;
1027 }
1028
1029 static int uas_reset_resume(struct usb_interface *intf)
1030 {
1031         struct Scsi_Host *shost = usb_get_intfdata(intf);
1032         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1033         unsigned long flags;
1034
1035         if (uas_configure_endpoints(devinfo) != 0) {
1036                 shost_printk(KERN_ERR, shost,
1037                              "%s: alloc streams error after reset", __func__);
1038                 return -EIO;
1039         }
1040
1041         spin_lock_irqsave(shost->host_lock, flags);
1042         scsi_report_bus_reset(shost, 0);
1043         spin_unlock_irqrestore(shost->host_lock, flags);
1044
1045         return 0;
1046 }
1047
1048 static void uas_disconnect(struct usb_interface *intf)
1049 {
1050         struct Scsi_Host *shost = usb_get_intfdata(intf);
1051         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1052
1053         devinfo->resetting = 1;
1054         cancel_work_sync(&devinfo->work);
1055         uas_abort_inflight(devinfo, DID_NO_CONNECT, __func__);
1056         usb_kill_anchored_urbs(&devinfo->cmd_urbs);
1057         usb_kill_anchored_urbs(&devinfo->sense_urbs);
1058         usb_kill_anchored_urbs(&devinfo->data_urbs);
1059         uas_zap_dead(devinfo);
1060         scsi_remove_host(shost);
1061         uas_free_streams(devinfo);
1062         scsi_host_put(shost);
1063 }
1064
1065 /*
1066  * Put the device back in usb-storage mode on shutdown, as some BIOS-es
1067  * hang on reboot when the device is still in uas mode. Note the reset is
1068  * necessary as some devices won't revert to usb-storage mode without it.
1069  */
1070 static void uas_shutdown(struct device *dev)
1071 {
1072         struct usb_interface *intf = to_usb_interface(dev);
1073         struct usb_device *udev = interface_to_usbdev(intf);
1074         struct Scsi_Host *shost = usb_get_intfdata(intf);
1075         struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1076
1077         if (system_state != SYSTEM_RESTART)
1078                 return;
1079
1080         devinfo->shutdown = 1;
1081         uas_free_streams(devinfo);
1082         usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0);
1083         usb_reset_device(udev);
1084 }
1085
1086 static struct usb_driver uas_driver = {
1087         .name = "uas",
1088         .probe = uas_probe,
1089         .disconnect = uas_disconnect,
1090         .pre_reset = uas_pre_reset,
1091         .post_reset = uas_post_reset,
1092         .suspend = uas_suspend,
1093         .resume = uas_resume,
1094         .reset_resume = uas_reset_resume,
1095         .drvwrap.driver.shutdown = uas_shutdown,
1096         .id_table = uas_usb_ids,
1097 };
1098
1099 module_usb_driver(uas_driver);
1100
1101 MODULE_LICENSE("GPL");
1102 MODULE_AUTHOR(
1103         "Hans de Goede <hdegoede@redhat.com>, Matthew Wilcox and Sarah Sharp");