uas.c 35 KB

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