root/drivers/usb/storage/uas.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. uas_do_work
  2. uas_scan_work
  3. uas_add_work
  4. uas_zap_pending
  5. uas_sense
  6. uas_log_cmd_state
  7. uas_free_unsubmitted_urbs
  8. uas_try_complete
  9. uas_xfer_data
  10. uas_evaluate_response_iu
  11. uas_stat_cmplt
  12. uas_data_cmplt
  13. uas_cmd_cmplt
  14. uas_alloc_data_urb
  15. uas_alloc_sense_urb
  16. uas_alloc_cmd_urb
  17. uas_submit_sense_urb
  18. uas_submit_urbs
  19. uas_queuecommand_lck
  20. DEF_SCSI_QCMD
  21. uas_eh_device_reset_handler
  22. uas_target_alloc
  23. uas_slave_alloc
  24. uas_slave_configure
  25. uas_switch_interface
  26. uas_configure_endpoints
  27. uas_free_streams
  28. uas_probe
  29. uas_cmnd_list_empty
  30. uas_wait_for_pending_cmnds
  31. uas_pre_reset
  32. uas_post_reset
  33. uas_suspend
  34. uas_resume
  35. uas_reset_resume
  36. uas_disconnect
  37. uas_shutdown
  38. uas_init
  39. uas_exit

   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");

/* [<][>][^][v][top][bottom][index][help] */