uas.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938
  1. /*
  2. * USB Attached SCSI
  3. * Note that this is not the same as the USB Mass Storage driver
  4. *
  5. * Copyright Matthew Wilcox for Intel Corp, 2010
  6. * Copyright Sarah Sharp for Intel Corp, 2010
  7. *
  8. * Distributed under the terms of the GNU GPL, version two.
  9. */
  10. #include <linux/blkdev.h>
  11. #include <linux/slab.h>
  12. #include <linux/types.h>
  13. #include <linux/module.h>
  14. #include <linux/usb.h>
  15. #include <linux/usb/hcd.h>
  16. #include <linux/usb/storage.h>
  17. #include <linux/usb/uas.h>
  18. #include <scsi/scsi.h>
  19. #include <scsi/scsi_dbg.h>
  20. #include <scsi/scsi_cmnd.h>
  21. #include <scsi/scsi_device.h>
  22. #include <scsi/scsi_host.h>
  23. #include <scsi/scsi_tcq.h>
  24. /*
  25. * The r00-r01c specs define this version of the SENSE IU data structure.
  26. * It's still in use by several different firmware releases.
  27. */
  28. struct sense_iu_old {
  29. __u8 iu_id;
  30. __u8 rsvd1;
  31. __be16 tag;
  32. __be16 len;
  33. __u8 status;
  34. __u8 service_response;
  35. __u8 sense[SCSI_SENSE_BUFFERSIZE];
  36. };
  37. struct uas_dev_info {
  38. struct usb_interface *intf;
  39. struct usb_device *udev;
  40. struct usb_anchor sense_urbs;
  41. struct usb_anchor data_urbs;
  42. int qdepth, resetting;
  43. struct response_ui response;
  44. unsigned cmd_pipe, status_pipe, data_in_pipe, data_out_pipe;
  45. unsigned use_streams:1;
  46. unsigned uas_sense_old:1;
  47. struct scsi_cmnd *cmnd;
  48. };
  49. enum {
  50. SUBMIT_STATUS_URB = (1 << 1),
  51. ALLOC_DATA_IN_URB = (1 << 2),
  52. SUBMIT_DATA_IN_URB = (1 << 3),
  53. ALLOC_DATA_OUT_URB = (1 << 4),
  54. SUBMIT_DATA_OUT_URB = (1 << 5),
  55. ALLOC_CMD_URB = (1 << 6),
  56. SUBMIT_CMD_URB = (1 << 7),
  57. COMMAND_INFLIGHT = (1 << 8),
  58. DATA_IN_URB_INFLIGHT = (1 << 9),
  59. DATA_OUT_URB_INFLIGHT = (1 << 10),
  60. COMMAND_COMPLETED = (1 << 11),
  61. };
  62. /* Overrides scsi_pointer */
  63. struct uas_cmd_info {
  64. unsigned int state;
  65. unsigned int stream;
  66. unsigned int aborted;
  67. struct urb *cmd_urb;
  68. struct urb *data_in_urb;
  69. struct urb *data_out_urb;
  70. struct list_head list;
  71. };
  72. /* I hate forward declarations, but I actually have a loop */
  73. static int uas_submit_urbs(struct scsi_cmnd *cmnd,
  74. struct uas_dev_info *devinfo, gfp_t gfp);
  75. static void uas_do_work(struct work_struct *work);
  76. static DECLARE_WORK(uas_work, uas_do_work);
  77. static DEFINE_SPINLOCK(uas_work_lock);
  78. static LIST_HEAD(uas_work_list);
  79. static void uas_do_work(struct work_struct *work)
  80. {
  81. struct uas_cmd_info *cmdinfo;
  82. struct uas_cmd_info *temp;
  83. struct list_head list;
  84. int err;
  85. spin_lock_irq(&uas_work_lock);
  86. list_replace_init(&uas_work_list, &list);
  87. spin_unlock_irq(&uas_work_lock);
  88. list_for_each_entry_safe(cmdinfo, temp, &list, list) {
  89. struct scsi_pointer *scp = (void *)cmdinfo;
  90. struct scsi_cmnd *cmnd = container_of(scp,
  91. struct scsi_cmnd, SCp);
  92. err = uas_submit_urbs(cmnd, cmnd->device->hostdata, GFP_NOIO);
  93. if (err) {
  94. list_del(&cmdinfo->list);
  95. spin_lock_irq(&uas_work_lock);
  96. list_add_tail(&cmdinfo->list, &uas_work_list);
  97. spin_unlock_irq(&uas_work_lock);
  98. schedule_work(&uas_work);
  99. }
  100. }
  101. }
  102. static void uas_sense(struct urb *urb, struct scsi_cmnd *cmnd)
  103. {
  104. struct sense_iu *sense_iu = urb->transfer_buffer;
  105. struct scsi_device *sdev = cmnd->device;
  106. if (urb->actual_length > 16) {
  107. unsigned len = be16_to_cpup(&sense_iu->len);
  108. if (len + 16 != urb->actual_length) {
  109. int newlen = min(len + 16, urb->actual_length) - 16;
  110. if (newlen < 0)
  111. newlen = 0;
  112. sdev_printk(KERN_INFO, sdev, "%s: urb length %d "
  113. "disagrees with IU sense data length %d, "
  114. "using %d bytes of sense data\n", __func__,
  115. urb->actual_length, len, newlen);
  116. len = newlen;
  117. }
  118. memcpy(cmnd->sense_buffer, sense_iu->sense, len);
  119. }
  120. cmnd->result = sense_iu->status;
  121. }
  122. static void uas_sense_old(struct urb *urb, struct scsi_cmnd *cmnd)
  123. {
  124. struct sense_iu_old *sense_iu = urb->transfer_buffer;
  125. struct scsi_device *sdev = cmnd->device;
  126. if (urb->actual_length > 8) {
  127. unsigned len = be16_to_cpup(&sense_iu->len) - 2;
  128. if (len + 8 != urb->actual_length) {
  129. int newlen = min(len + 8, urb->actual_length) - 8;
  130. if (newlen < 0)
  131. newlen = 0;
  132. sdev_printk(KERN_INFO, sdev, "%s: urb length %d "
  133. "disagrees with IU sense data length %d, "
  134. "using %d bytes of sense data\n", __func__,
  135. urb->actual_length, len, newlen);
  136. len = newlen;
  137. }
  138. memcpy(cmnd->sense_buffer, sense_iu->sense, len);
  139. }
  140. cmnd->result = sense_iu->status;
  141. }
  142. static void uas_log_cmd_state(struct scsi_cmnd *cmnd, const char *caller)
  143. {
  144. struct uas_cmd_info *ci = (void *)&cmnd->SCp;
  145. scmd_printk(KERN_INFO, cmnd, "%s %p tag %d, inflight:"
  146. "%s%s%s%s%s%s%s%s%s%s%s\n",
  147. caller, cmnd, cmnd->request->tag,
  148. (ci->state & SUBMIT_STATUS_URB) ? " s-st" : "",
  149. (ci->state & ALLOC_DATA_IN_URB) ? " a-in" : "",
  150. (ci->state & SUBMIT_DATA_IN_URB) ? " s-in" : "",
  151. (ci->state & ALLOC_DATA_OUT_URB) ? " a-out" : "",
  152. (ci->state & SUBMIT_DATA_OUT_URB) ? " s-out" : "",
  153. (ci->state & ALLOC_CMD_URB) ? " a-cmd" : "",
  154. (ci->state & SUBMIT_CMD_URB) ? " s-cmd" : "",
  155. (ci->state & COMMAND_INFLIGHT) ? " CMD" : "",
  156. (ci->state & DATA_IN_URB_INFLIGHT) ? " IN" : "",
  157. (ci->state & DATA_OUT_URB_INFLIGHT) ? " OUT" : "",
  158. (ci->state & COMMAND_COMPLETED) ? " done" : "");
  159. }
  160. static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller)
  161. {
  162. struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
  163. if (cmdinfo->state & (COMMAND_INFLIGHT |
  164. DATA_IN_URB_INFLIGHT |
  165. DATA_OUT_URB_INFLIGHT))
  166. return -EBUSY;
  167. BUG_ON(cmdinfo->state & COMMAND_COMPLETED);
  168. cmdinfo->state |= COMMAND_COMPLETED;
  169. usb_free_urb(cmdinfo->data_in_urb);
  170. usb_free_urb(cmdinfo->data_out_urb);
  171. cmnd->scsi_done(cmnd);
  172. return 0;
  173. }
  174. static void uas_xfer_data(struct urb *urb, struct scsi_cmnd *cmnd,
  175. unsigned direction)
  176. {
  177. struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
  178. int err;
  179. cmdinfo->state |= direction | SUBMIT_STATUS_URB;
  180. err = uas_submit_urbs(cmnd, cmnd->device->hostdata, GFP_ATOMIC);
  181. if (err) {
  182. spin_lock(&uas_work_lock);
  183. list_add_tail(&cmdinfo->list, &uas_work_list);
  184. spin_unlock(&uas_work_lock);
  185. schedule_work(&uas_work);
  186. }
  187. }
  188. static void uas_stat_cmplt(struct urb *urb)
  189. {
  190. struct iu *iu = urb->transfer_buffer;
  191. struct Scsi_Host *shost = urb->context;
  192. struct uas_dev_info *devinfo = (void *)shost->hostdata[0];
  193. struct scsi_cmnd *cmnd;
  194. struct uas_cmd_info *cmdinfo;
  195. u16 tag;
  196. if (urb->status) {
  197. dev_err(&urb->dev->dev, "URB BAD STATUS %d\n", urb->status);
  198. usb_free_urb(urb);
  199. return;
  200. }
  201. if (devinfo->resetting) {
  202. usb_free_urb(urb);
  203. return;
  204. }
  205. tag = be16_to_cpup(&iu->tag) - 1;
  206. if (tag == 0)
  207. cmnd = devinfo->cmnd;
  208. else
  209. cmnd = scsi_host_find_tag(shost, tag - 1);
  210. if (!cmnd) {
  211. if (iu->iu_id != IU_ID_RESPONSE) {
  212. usb_free_urb(urb);
  213. return;
  214. }
  215. } else {
  216. cmdinfo = (void *)&cmnd->SCp;
  217. }
  218. switch (iu->iu_id) {
  219. case IU_ID_STATUS:
  220. if (devinfo->cmnd == cmnd)
  221. devinfo->cmnd = NULL;
  222. if (urb->actual_length < 16)
  223. devinfo->uas_sense_old = 1;
  224. if (devinfo->uas_sense_old)
  225. uas_sense_old(urb, cmnd);
  226. else
  227. uas_sense(urb, cmnd);
  228. if (cmnd->result != 0) {
  229. /* cancel data transfers on error */
  230. if (cmdinfo->state & DATA_IN_URB_INFLIGHT)
  231. usb_unlink_urb(cmdinfo->data_in_urb);
  232. if (cmdinfo->state & DATA_OUT_URB_INFLIGHT)
  233. usb_unlink_urb(cmdinfo->data_out_urb);
  234. }
  235. cmdinfo->state &= ~COMMAND_INFLIGHT;
  236. uas_try_complete(cmnd, __func__);
  237. break;
  238. case IU_ID_READ_READY:
  239. uas_xfer_data(urb, cmnd, SUBMIT_DATA_IN_URB);
  240. break;
  241. case IU_ID_WRITE_READY:
  242. uas_xfer_data(urb, cmnd, SUBMIT_DATA_OUT_URB);
  243. break;
  244. case IU_ID_RESPONSE:
  245. /* store results for uas_eh_task_mgmt() */
  246. memcpy(&devinfo->response, iu, sizeof(devinfo->response));
  247. break;
  248. default:
  249. scmd_printk(KERN_ERR, cmnd,
  250. "Bogus IU (%d) received on status pipe\n", iu->iu_id);
  251. }
  252. usb_free_urb(urb);
  253. }
  254. static void uas_data_cmplt(struct urb *urb)
  255. {
  256. struct scsi_cmnd *cmnd = urb->context;
  257. struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
  258. struct scsi_data_buffer *sdb = NULL;
  259. if (cmdinfo->data_in_urb == urb) {
  260. sdb = scsi_in(cmnd);
  261. cmdinfo->state &= ~DATA_IN_URB_INFLIGHT;
  262. } else if (cmdinfo->data_out_urb == urb) {
  263. sdb = scsi_out(cmnd);
  264. cmdinfo->state &= ~DATA_OUT_URB_INFLIGHT;
  265. }
  266. BUG_ON(sdb == NULL);
  267. if (urb->status) {
  268. /* error: no data transfered */
  269. sdb->resid = sdb->length;
  270. } else {
  271. sdb->resid = sdb->length - urb->actual_length;
  272. }
  273. if (cmdinfo->aborted) {
  274. return;
  275. }
  276. uas_try_complete(cmnd, __func__);
  277. }
  278. static struct urb *uas_alloc_data_urb(struct uas_dev_info *devinfo, gfp_t gfp,
  279. unsigned int pipe, u16 stream_id,
  280. struct scsi_cmnd *cmnd,
  281. enum dma_data_direction dir)
  282. {
  283. struct usb_device *udev = devinfo->udev;
  284. struct urb *urb = usb_alloc_urb(0, gfp);
  285. struct scsi_data_buffer *sdb = (dir == DMA_FROM_DEVICE)
  286. ? scsi_in(cmnd) : scsi_out(cmnd);
  287. if (!urb)
  288. goto out;
  289. usb_fill_bulk_urb(urb, udev, pipe, NULL, sdb->length,
  290. uas_data_cmplt, cmnd);
  291. if (devinfo->use_streams)
  292. urb->stream_id = stream_id;
  293. urb->num_sgs = udev->bus->sg_tablesize ? sdb->table.nents : 0;
  294. urb->sg = sdb->table.sgl;
  295. out:
  296. return urb;
  297. }
  298. static struct urb *uas_alloc_sense_urb(struct uas_dev_info *devinfo, gfp_t gfp,
  299. struct Scsi_Host *shost, u16 stream_id)
  300. {
  301. struct usb_device *udev = devinfo->udev;
  302. struct urb *urb = usb_alloc_urb(0, gfp);
  303. struct sense_iu *iu;
  304. if (!urb)
  305. goto out;
  306. iu = kzalloc(sizeof(*iu), gfp);
  307. if (!iu)
  308. goto free;
  309. usb_fill_bulk_urb(urb, udev, devinfo->status_pipe, iu, sizeof(*iu),
  310. uas_stat_cmplt, shost);
  311. urb->stream_id = stream_id;
  312. urb->transfer_flags |= URB_FREE_BUFFER;
  313. out:
  314. return urb;
  315. free:
  316. usb_free_urb(urb);
  317. return NULL;
  318. }
  319. static struct urb *uas_alloc_cmd_urb(struct uas_dev_info *devinfo, gfp_t gfp,
  320. struct scsi_cmnd *cmnd, u16 stream_id)
  321. {
  322. struct usb_device *udev = devinfo->udev;
  323. struct scsi_device *sdev = cmnd->device;
  324. struct urb *urb = usb_alloc_urb(0, gfp);
  325. struct command_iu *iu;
  326. int len;
  327. if (!urb)
  328. goto out;
  329. len = cmnd->cmd_len - 16;
  330. if (len < 0)
  331. len = 0;
  332. len = ALIGN(len, 4);
  333. iu = kzalloc(sizeof(*iu) + len, gfp);
  334. if (!iu)
  335. goto free;
  336. iu->iu_id = IU_ID_COMMAND;
  337. if (blk_rq_tagged(cmnd->request))
  338. iu->tag = cpu_to_be16(cmnd->request->tag + 2);
  339. else
  340. iu->tag = cpu_to_be16(1);
  341. iu->prio_attr = UAS_SIMPLE_TAG;
  342. iu->len = len;
  343. int_to_scsilun(sdev->lun, &iu->lun);
  344. memcpy(iu->cdb, cmnd->cmnd, cmnd->cmd_len);
  345. usb_fill_bulk_urb(urb, udev, devinfo->cmd_pipe, iu, sizeof(*iu) + len,
  346. usb_free_urb, NULL);
  347. urb->transfer_flags |= URB_FREE_BUFFER;
  348. out:
  349. return urb;
  350. free:
  351. usb_free_urb(urb);
  352. return NULL;
  353. }
  354. static int uas_submit_task_urb(struct scsi_cmnd *cmnd, gfp_t gfp,
  355. u8 function, u16 stream_id)
  356. {
  357. struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
  358. struct usb_device *udev = devinfo->udev;
  359. struct urb *urb = usb_alloc_urb(0, gfp);
  360. struct task_mgmt_iu *iu;
  361. int err = -ENOMEM;
  362. if (!urb)
  363. goto err;
  364. iu = kzalloc(sizeof(*iu), gfp);
  365. if (!iu)
  366. goto err;
  367. iu->iu_id = IU_ID_TASK_MGMT;
  368. iu->tag = cpu_to_be16(stream_id);
  369. int_to_scsilun(cmnd->device->lun, &iu->lun);
  370. iu->function = function;
  371. switch (function) {
  372. case TMF_ABORT_TASK:
  373. if (blk_rq_tagged(cmnd->request))
  374. iu->task_tag = cpu_to_be16(cmnd->request->tag + 2);
  375. else
  376. iu->task_tag = cpu_to_be16(1);
  377. break;
  378. }
  379. usb_fill_bulk_urb(urb, udev, devinfo->cmd_pipe, iu, sizeof(*iu),
  380. usb_free_urb, NULL);
  381. urb->transfer_flags |= URB_FREE_BUFFER;
  382. err = usb_submit_urb(urb, gfp);
  383. if (err)
  384. goto err;
  385. return 0;
  386. err:
  387. usb_free_urb(urb);
  388. return err;
  389. }
  390. /*
  391. * Why should I request the Status IU before sending the Command IU? Spec
  392. * says to, but also says the device may receive them in any order. Seems
  393. * daft to me.
  394. */
  395. static int uas_submit_sense_urb(struct Scsi_Host *shost,
  396. gfp_t gfp, unsigned int stream)
  397. {
  398. struct uas_dev_info *devinfo = (void *)shost->hostdata[0];
  399. struct urb *urb;
  400. urb = uas_alloc_sense_urb(devinfo, gfp, shost, stream);
  401. if (!urb)
  402. return SCSI_MLQUEUE_DEVICE_BUSY;
  403. if (usb_submit_urb(urb, gfp)) {
  404. shost_printk(KERN_INFO, shost,
  405. "sense urb submission failure\n");
  406. usb_free_urb(urb);
  407. return SCSI_MLQUEUE_DEVICE_BUSY;
  408. }
  409. usb_anchor_urb(urb, &devinfo->sense_urbs);
  410. return 0;
  411. }
  412. static int uas_submit_urbs(struct scsi_cmnd *cmnd,
  413. struct uas_dev_info *devinfo, gfp_t gfp)
  414. {
  415. struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
  416. int err;
  417. if (cmdinfo->state & SUBMIT_STATUS_URB) {
  418. err = uas_submit_sense_urb(cmnd->device->host, gfp,
  419. cmdinfo->stream);
  420. if (err) {
  421. return err;
  422. }
  423. cmdinfo->state &= ~SUBMIT_STATUS_URB;
  424. }
  425. if (cmdinfo->state & ALLOC_DATA_IN_URB) {
  426. cmdinfo->data_in_urb = uas_alloc_data_urb(devinfo, gfp,
  427. devinfo->data_in_pipe, cmdinfo->stream,
  428. cmnd, DMA_FROM_DEVICE);
  429. if (!cmdinfo->data_in_urb)
  430. return SCSI_MLQUEUE_DEVICE_BUSY;
  431. cmdinfo->state &= ~ALLOC_DATA_IN_URB;
  432. }
  433. if (cmdinfo->state & SUBMIT_DATA_IN_URB) {
  434. if (usb_submit_urb(cmdinfo->data_in_urb, gfp)) {
  435. scmd_printk(KERN_INFO, cmnd,
  436. "data in urb submission failure\n");
  437. return SCSI_MLQUEUE_DEVICE_BUSY;
  438. }
  439. cmdinfo->state &= ~SUBMIT_DATA_IN_URB;
  440. cmdinfo->state |= DATA_IN_URB_INFLIGHT;
  441. usb_anchor_urb(cmdinfo->data_in_urb, &devinfo->data_urbs);
  442. }
  443. if (cmdinfo->state & ALLOC_DATA_OUT_URB) {
  444. cmdinfo->data_out_urb = uas_alloc_data_urb(devinfo, gfp,
  445. devinfo->data_out_pipe, cmdinfo->stream,
  446. cmnd, DMA_TO_DEVICE);
  447. if (!cmdinfo->data_out_urb)
  448. return SCSI_MLQUEUE_DEVICE_BUSY;
  449. cmdinfo->state &= ~ALLOC_DATA_OUT_URB;
  450. }
  451. if (cmdinfo->state & SUBMIT_DATA_OUT_URB) {
  452. if (usb_submit_urb(cmdinfo->data_out_urb, gfp)) {
  453. scmd_printk(KERN_INFO, cmnd,
  454. "data out urb submission failure\n");
  455. return SCSI_MLQUEUE_DEVICE_BUSY;
  456. }
  457. cmdinfo->state &= ~SUBMIT_DATA_OUT_URB;
  458. cmdinfo->state |= DATA_OUT_URB_INFLIGHT;
  459. usb_anchor_urb(cmdinfo->data_out_urb, &devinfo->data_urbs);
  460. }
  461. if (cmdinfo->state & ALLOC_CMD_URB) {
  462. cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, gfp, cmnd,
  463. cmdinfo->stream);
  464. if (!cmdinfo->cmd_urb)
  465. return SCSI_MLQUEUE_DEVICE_BUSY;
  466. cmdinfo->state &= ~ALLOC_CMD_URB;
  467. }
  468. if (cmdinfo->state & SUBMIT_CMD_URB) {
  469. if (usb_submit_urb(cmdinfo->cmd_urb, gfp)) {
  470. scmd_printk(KERN_INFO, cmnd,
  471. "cmd urb submission failure\n");
  472. return SCSI_MLQUEUE_DEVICE_BUSY;
  473. }
  474. cmdinfo->state &= ~SUBMIT_CMD_URB;
  475. cmdinfo->state |= COMMAND_INFLIGHT;
  476. }
  477. return 0;
  478. }
  479. static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
  480. void (*done)(struct scsi_cmnd *))
  481. {
  482. struct scsi_device *sdev = cmnd->device;
  483. struct uas_dev_info *devinfo = sdev->hostdata;
  484. struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
  485. int err;
  486. BUILD_BUG_ON(sizeof(struct uas_cmd_info) > sizeof(struct scsi_pointer));
  487. if (devinfo->cmnd)
  488. return SCSI_MLQUEUE_DEVICE_BUSY;
  489. if (blk_rq_tagged(cmnd->request)) {
  490. cmdinfo->stream = cmnd->request->tag + 2;
  491. } else {
  492. devinfo->cmnd = cmnd;
  493. cmdinfo->stream = 1;
  494. }
  495. cmnd->scsi_done = done;
  496. cmdinfo->state = SUBMIT_STATUS_URB |
  497. ALLOC_CMD_URB | SUBMIT_CMD_URB;
  498. cmdinfo->aborted = 0;
  499. switch (cmnd->sc_data_direction) {
  500. case DMA_FROM_DEVICE:
  501. cmdinfo->state |= ALLOC_DATA_IN_URB | SUBMIT_DATA_IN_URB;
  502. break;
  503. case DMA_BIDIRECTIONAL:
  504. cmdinfo->state |= ALLOC_DATA_IN_URB | SUBMIT_DATA_IN_URB;
  505. case DMA_TO_DEVICE:
  506. cmdinfo->state |= ALLOC_DATA_OUT_URB | SUBMIT_DATA_OUT_URB;
  507. case DMA_NONE:
  508. break;
  509. }
  510. if (!devinfo->use_streams) {
  511. cmdinfo->state &= ~(SUBMIT_DATA_IN_URB | SUBMIT_DATA_OUT_URB);
  512. cmdinfo->stream = 0;
  513. }
  514. err = uas_submit_urbs(cmnd, devinfo, GFP_ATOMIC);
  515. if (err) {
  516. /* If we did nothing, give up now */
  517. if (cmdinfo->state & SUBMIT_STATUS_URB) {
  518. return SCSI_MLQUEUE_DEVICE_BUSY;
  519. }
  520. spin_lock(&uas_work_lock);
  521. list_add_tail(&cmdinfo->list, &uas_work_list);
  522. spin_unlock(&uas_work_lock);
  523. schedule_work(&uas_work);
  524. }
  525. return 0;
  526. }
  527. static DEF_SCSI_QCMD(uas_queuecommand)
  528. static int uas_eh_task_mgmt(struct scsi_cmnd *cmnd,
  529. const char *fname, u8 function)
  530. {
  531. struct Scsi_Host *shost = cmnd->device->host;
  532. struct uas_dev_info *devinfo = (void *)shost->hostdata[0];
  533. u16 tag = 9999; /* FIXME */
  534. memset(&devinfo->response, 0, sizeof(devinfo->response));
  535. if (uas_submit_sense_urb(shost, GFP_NOIO, tag)) {
  536. shost_printk(KERN_INFO, shost,
  537. "%s: %s: submit sense urb failed\n",
  538. __func__, fname);
  539. return FAILED;
  540. }
  541. if (uas_submit_task_urb(cmnd, GFP_NOIO, function, tag)) {
  542. shost_printk(KERN_INFO, shost,
  543. "%s: %s: submit task mgmt urb failed\n",
  544. __func__, fname);
  545. return FAILED;
  546. }
  547. if (0 == usb_wait_anchor_empty_timeout(&devinfo->sense_urbs, 3000)) {
  548. shost_printk(KERN_INFO, shost,
  549. "%s: %s timed out\n", __func__, fname);
  550. return FAILED;
  551. }
  552. if (be16_to_cpu(devinfo->response.tag) != tag) {
  553. shost_printk(KERN_INFO, shost,
  554. "%s: %s failed (wrong tag %d/%d)\n", __func__,
  555. fname, be16_to_cpu(devinfo->response.tag), tag);
  556. return FAILED;
  557. }
  558. if (devinfo->response.response_code != RC_TMF_COMPLETE) {
  559. shost_printk(KERN_INFO, shost,
  560. "%s: %s failed (rc 0x%x)\n", __func__,
  561. fname, devinfo->response.response_code);
  562. return FAILED;
  563. }
  564. return SUCCESS;
  565. }
  566. static int uas_eh_abort_handler(struct scsi_cmnd *cmnd)
  567. {
  568. struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
  569. int ret;
  570. uas_log_cmd_state(cmnd, __func__);
  571. cmdinfo->aborted = 1;
  572. ret = uas_eh_task_mgmt(cmnd, "ABORT TASK", TMF_ABORT_TASK);
  573. if (cmdinfo->state & DATA_IN_URB_INFLIGHT)
  574. usb_kill_urb(cmdinfo->data_in_urb);
  575. if (cmdinfo->state & DATA_OUT_URB_INFLIGHT)
  576. usb_kill_urb(cmdinfo->data_out_urb);
  577. return ret;
  578. }
  579. static int uas_eh_device_reset_handler(struct scsi_cmnd *cmnd)
  580. {
  581. sdev_printk(KERN_INFO, cmnd->device, "%s\n", __func__);
  582. return uas_eh_task_mgmt(cmnd, "LOGICAL UNIT RESET",
  583. TMF_LOGICAL_UNIT_RESET);
  584. }
  585. static int uas_eh_bus_reset_handler(struct scsi_cmnd *cmnd)
  586. {
  587. struct scsi_device *sdev = cmnd->device;
  588. struct uas_dev_info *devinfo = sdev->hostdata;
  589. struct usb_device *udev = devinfo->udev;
  590. int err;
  591. devinfo->resetting = 1;
  592. usb_kill_anchored_urbs(&devinfo->sense_urbs);
  593. usb_kill_anchored_urbs(&devinfo->data_urbs);
  594. err = usb_reset_device(udev);
  595. devinfo->resetting = 0;
  596. if (err) {
  597. shost_printk(KERN_INFO, sdev->host, "%s FAILED\n", __func__);
  598. return FAILED;
  599. }
  600. shost_printk(KERN_INFO, sdev->host, "%s success\n", __func__);
  601. return SUCCESS;
  602. }
  603. static int uas_slave_alloc(struct scsi_device *sdev)
  604. {
  605. sdev->hostdata = (void *)sdev->host->hostdata[0];
  606. return 0;
  607. }
  608. static int uas_slave_configure(struct scsi_device *sdev)
  609. {
  610. struct uas_dev_info *devinfo = sdev->hostdata;
  611. scsi_set_tag_type(sdev, MSG_ORDERED_TAG);
  612. scsi_activate_tcq(sdev, devinfo->qdepth - 2);
  613. return 0;
  614. }
  615. static struct scsi_host_template uas_host_template = {
  616. .module = THIS_MODULE,
  617. .name = "uas",
  618. .queuecommand = uas_queuecommand,
  619. .slave_alloc = uas_slave_alloc,
  620. .slave_configure = uas_slave_configure,
  621. .eh_abort_handler = uas_eh_abort_handler,
  622. .eh_device_reset_handler = uas_eh_device_reset_handler,
  623. .eh_bus_reset_handler = uas_eh_bus_reset_handler,
  624. .can_queue = 65536, /* Is there a limit on the _host_ ? */
  625. .this_id = -1,
  626. .sg_tablesize = SG_NONE,
  627. .cmd_per_lun = 1, /* until we override it */
  628. .skip_settle_delay = 1,
  629. .ordered_tag = 1,
  630. };
  631. static struct usb_device_id uas_usb_ids[] = {
  632. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, USB_SC_SCSI, USB_PR_BULK) },
  633. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, USB_SC_SCSI, USB_PR_UAS) },
  634. /* 0xaa is a prototype device I happen to have access to */
  635. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, USB_SC_SCSI, 0xaa) },
  636. { }
  637. };
  638. MODULE_DEVICE_TABLE(usb, uas_usb_ids);
  639. static int uas_is_interface(struct usb_host_interface *intf)
  640. {
  641. return (intf->desc.bInterfaceClass == USB_CLASS_MASS_STORAGE &&
  642. intf->desc.bInterfaceSubClass == USB_SC_SCSI &&
  643. intf->desc.bInterfaceProtocol == USB_PR_UAS);
  644. }
  645. static int uas_isnt_supported(struct usb_device *udev)
  646. {
  647. struct usb_hcd *hcd = bus_to_hcd(udev->bus);
  648. dev_warn(&udev->dev, "The driver for the USB controller %s does not "
  649. "support scatter-gather which is\n",
  650. hcd->driver->description);
  651. dev_warn(&udev->dev, "required by the UAS driver. Please try an"
  652. "alternative USB controller if you wish to use UAS.\n");
  653. return -ENODEV;
  654. }
  655. static int uas_switch_interface(struct usb_device *udev,
  656. struct usb_interface *intf)
  657. {
  658. int i;
  659. int sg_supported = udev->bus->sg_tablesize != 0;
  660. for (i = 0; i < intf->num_altsetting; i++) {
  661. struct usb_host_interface *alt = &intf->altsetting[i];
  662. if (uas_is_interface(alt)) {
  663. if (!sg_supported)
  664. return uas_isnt_supported(udev);
  665. return usb_set_interface(udev,
  666. alt->desc.bInterfaceNumber,
  667. alt->desc.bAlternateSetting);
  668. }
  669. }
  670. return -ENODEV;
  671. }
  672. static void uas_configure_endpoints(struct uas_dev_info *devinfo)
  673. {
  674. struct usb_host_endpoint *eps[4] = { };
  675. struct usb_interface *intf = devinfo->intf;
  676. struct usb_device *udev = devinfo->udev;
  677. struct usb_host_endpoint *endpoint = intf->cur_altsetting->endpoint;
  678. unsigned i, n_endpoints = intf->cur_altsetting->desc.bNumEndpoints;
  679. devinfo->uas_sense_old = 0;
  680. devinfo->cmnd = NULL;
  681. for (i = 0; i < n_endpoints; i++) {
  682. unsigned char *extra = endpoint[i].extra;
  683. int len = endpoint[i].extralen;
  684. while (len > 1) {
  685. if (extra[1] == USB_DT_PIPE_USAGE) {
  686. unsigned pipe_id = extra[2];
  687. if (pipe_id > 0 && pipe_id < 5)
  688. eps[pipe_id - 1] = &endpoint[i];
  689. break;
  690. }
  691. len -= extra[0];
  692. extra += extra[0];
  693. }
  694. }
  695. /*
  696. * Assume that if we didn't find a control pipe descriptor, we're
  697. * using a device with old firmware that happens to be set up like
  698. * this.
  699. */
  700. if (!eps[0]) {
  701. devinfo->cmd_pipe = usb_sndbulkpipe(udev, 1);
  702. devinfo->status_pipe = usb_rcvbulkpipe(udev, 1);
  703. devinfo->data_in_pipe = usb_rcvbulkpipe(udev, 2);
  704. devinfo->data_out_pipe = usb_sndbulkpipe(udev, 2);
  705. eps[1] = usb_pipe_endpoint(udev, devinfo->status_pipe);
  706. eps[2] = usb_pipe_endpoint(udev, devinfo->data_in_pipe);
  707. eps[3] = usb_pipe_endpoint(udev, devinfo->data_out_pipe);
  708. } else {
  709. devinfo->cmd_pipe = usb_sndbulkpipe(udev,
  710. eps[0]->desc.bEndpointAddress);
  711. devinfo->status_pipe = usb_rcvbulkpipe(udev,
  712. eps[1]->desc.bEndpointAddress);
  713. devinfo->data_in_pipe = usb_rcvbulkpipe(udev,
  714. eps[2]->desc.bEndpointAddress);
  715. devinfo->data_out_pipe = usb_sndbulkpipe(udev,
  716. eps[3]->desc.bEndpointAddress);
  717. }
  718. devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1, 3, 256,
  719. GFP_KERNEL);
  720. if (devinfo->qdepth < 0) {
  721. devinfo->qdepth = 256;
  722. devinfo->use_streams = 0;
  723. } else {
  724. devinfo->use_streams = 1;
  725. }
  726. }
  727. static void uas_free_streams(struct uas_dev_info *devinfo)
  728. {
  729. struct usb_device *udev = devinfo->udev;
  730. struct usb_host_endpoint *eps[3];
  731. eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe);
  732. eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe);
  733. eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe);
  734. usb_free_streams(devinfo->intf, eps, 3, GFP_KERNEL);
  735. }
  736. /*
  737. * XXX: What I'd like to do here is register a SCSI host for each USB host in
  738. * the system. Follow usb-storage's design of registering a SCSI host for
  739. * each USB device for the moment. Can implement this by walking up the
  740. * USB hierarchy until we find a USB host.
  741. */
  742. static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
  743. {
  744. int result;
  745. struct Scsi_Host *shost;
  746. struct uas_dev_info *devinfo;
  747. struct usb_device *udev = interface_to_usbdev(intf);
  748. if (uas_switch_interface(udev, intf))
  749. return -ENODEV;
  750. devinfo = kmalloc(sizeof(struct uas_dev_info), GFP_KERNEL);
  751. if (!devinfo)
  752. return -ENOMEM;
  753. result = -ENOMEM;
  754. shost = scsi_host_alloc(&uas_host_template, sizeof(void *));
  755. if (!shost)
  756. goto free;
  757. shost->max_cmd_len = 16 + 252;
  758. shost->max_id = 1;
  759. shost->sg_tablesize = udev->bus->sg_tablesize;
  760. devinfo->intf = intf;
  761. devinfo->udev = udev;
  762. devinfo->resetting = 0;
  763. init_usb_anchor(&devinfo->sense_urbs);
  764. init_usb_anchor(&devinfo->data_urbs);
  765. uas_configure_endpoints(devinfo);
  766. result = scsi_init_shared_tag_map(shost, devinfo->qdepth - 2);
  767. if (result)
  768. goto free;
  769. result = scsi_add_host(shost, &intf->dev);
  770. if (result)
  771. goto deconfig_eps;
  772. shost->hostdata[0] = (unsigned long)devinfo;
  773. scsi_scan_host(shost);
  774. usb_set_intfdata(intf, shost);
  775. return result;
  776. deconfig_eps:
  777. uas_free_streams(devinfo);
  778. free:
  779. kfree(devinfo);
  780. if (shost)
  781. scsi_host_put(shost);
  782. return result;
  783. }
  784. static int uas_pre_reset(struct usb_interface *intf)
  785. {
  786. /* XXX: Need to return 1 if it's not our device in error handling */
  787. return 0;
  788. }
  789. static int uas_post_reset(struct usb_interface *intf)
  790. {
  791. /* XXX: Need to return 1 if it's not our device in error handling */
  792. return 0;
  793. }
  794. static void uas_disconnect(struct usb_interface *intf)
  795. {
  796. struct Scsi_Host *shost = usb_get_intfdata(intf);
  797. struct uas_dev_info *devinfo = (void *)shost->hostdata[0];
  798. scsi_remove_host(shost);
  799. usb_kill_anchored_urbs(&devinfo->sense_urbs);
  800. usb_kill_anchored_urbs(&devinfo->data_urbs);
  801. uas_free_streams(devinfo);
  802. kfree(devinfo);
  803. }
  804. /*
  805. * XXX: Should this plug into libusual so we can auto-upgrade devices from
  806. * Bulk-Only to UAS?
  807. */
  808. static struct usb_driver uas_driver = {
  809. .name = "uas",
  810. .probe = uas_probe,
  811. .disconnect = uas_disconnect,
  812. .pre_reset = uas_pre_reset,
  813. .post_reset = uas_post_reset,
  814. .id_table = uas_usb_ids,
  815. };
  816. module_usb_driver(uas_driver);
  817. MODULE_LICENSE("GPL");
  818. MODULE_AUTHOR("Matthew Wilcox and Sarah Sharp");