cdc-wdm.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * cdc-wdm.c
  4. *
  5. * This driver supports USB CDC WCM Device Management.
  6. *
  7. * Copyright (c) 2007-2009 Oliver Neukum
  8. *
  9. * Some code taken from cdc-acm.c
  10. *
  11. * Released under the GPLv2.
  12. *
  13. * Many thanks to Carl Nordbeck
  14. */
  15. #include <linux/kernel.h>
  16. #include <linux/errno.h>
  17. #include <linux/ioctl.h>
  18. #include <linux/slab.h>
  19. #include <linux/module.h>
  20. #include <linux/mutex.h>
  21. #include <linux/uaccess.h>
  22. #include <linux/bitops.h>
  23. #include <linux/poll.h>
  24. #include <linux/skbuff.h>
  25. #include <linux/usb.h>
  26. #include <linux/usb/cdc.h>
  27. #include <linux/wwan.h>
  28. #include <asm/byteorder.h>
  29. #include <linux/unaligned.h>
  30. #include <linux/usb/cdc-wdm.h>
  31. #define DRIVER_AUTHOR "Oliver Neukum"
  32. #define DRIVER_DESC "USB Abstract Control Model driver for USB WCM Device Management"
  33. static const struct usb_device_id wdm_ids[] = {
  34. {
  35. .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
  36. USB_DEVICE_ID_MATCH_INT_SUBCLASS,
  37. .bInterfaceClass = USB_CLASS_COMM,
  38. .bInterfaceSubClass = USB_CDC_SUBCLASS_DMM
  39. },
  40. { }
  41. };
  42. MODULE_DEVICE_TABLE (usb, wdm_ids);
  43. #define WDM_MINOR_BASE 176
  44. #define WDM_IN_USE 1
  45. #define WDM_DISCONNECTING 2
  46. #define WDM_RESULT 3
  47. #define WDM_READ 4
  48. #define WDM_INT_STALL 5
  49. #define WDM_POLL_RUNNING 6
  50. #define WDM_RESPONDING 7
  51. #define WDM_SUSPENDING 8
  52. #define WDM_RESETTING 9
  53. #define WDM_OVERFLOW 10
  54. #define WDM_WWAN_IN_USE 11
  55. #define WDM_MAX 16
  56. /* we cannot wait forever at flush() */
  57. #define WDM_FLUSH_TIMEOUT (30 * HZ)
  58. /* CDC-WMC r1.1 requires wMaxCommand to be "at least 256 decimal (0x100)" */
  59. #define WDM_DEFAULT_BUFSIZE 256
  60. static DEFINE_MUTEX(wdm_mutex);
  61. static DEFINE_SPINLOCK(wdm_device_list_lock);
  62. static LIST_HEAD(wdm_device_list);
  63. /* --- method tables --- */
  64. struct wdm_device {
  65. u8 *inbuf; /* buffer for response */
  66. u8 *outbuf; /* buffer for command */
  67. u8 *sbuf; /* buffer for status */
  68. u8 *ubuf; /* buffer for copy to user space */
  69. struct urb *command;
  70. struct urb *response;
  71. struct urb *validity;
  72. struct usb_interface *intf;
  73. struct usb_ctrlrequest *orq;
  74. struct usb_ctrlrequest *irq;
  75. spinlock_t iuspin;
  76. unsigned long flags;
  77. u16 bufsize;
  78. u16 wMaxCommand;
  79. u16 wMaxPacketSize;
  80. __le16 inum;
  81. int length;
  82. int read;
  83. int count;
  84. dma_addr_t shandle;
  85. dma_addr_t ihandle;
  86. struct mutex wlock;
  87. struct mutex rlock;
  88. wait_queue_head_t wait;
  89. struct work_struct rxwork;
  90. struct work_struct service_outs_intr;
  91. int werr;
  92. int rerr;
  93. int resp_count;
  94. struct list_head device_list;
  95. int (*manage_power)(struct usb_interface *, int);
  96. enum wwan_port_type wwanp_type;
  97. struct wwan_port *wwanp;
  98. };
  99. static struct usb_driver wdm_driver;
  100. /* return intfdata if we own the interface, else look up intf in the list */
  101. static struct wdm_device *wdm_find_device(struct usb_interface *intf)
  102. {
  103. struct wdm_device *desc;
  104. spin_lock(&wdm_device_list_lock);
  105. list_for_each_entry(desc, &wdm_device_list, device_list)
  106. if (desc->intf == intf)
  107. goto found;
  108. desc = NULL;
  109. found:
  110. spin_unlock(&wdm_device_list_lock);
  111. return desc;
  112. }
  113. static struct wdm_device *wdm_find_device_by_minor(int minor)
  114. {
  115. struct wdm_device *desc;
  116. spin_lock(&wdm_device_list_lock);
  117. list_for_each_entry(desc, &wdm_device_list, device_list)
  118. if (desc->intf->minor == minor)
  119. goto found;
  120. desc = NULL;
  121. found:
  122. spin_unlock(&wdm_device_list_lock);
  123. return desc;
  124. }
  125. /* --- callbacks --- */
  126. static void wdm_out_callback(struct urb *urb)
  127. {
  128. struct wdm_device *desc;
  129. unsigned long flags;
  130. desc = urb->context;
  131. spin_lock_irqsave(&desc->iuspin, flags);
  132. desc->werr = urb->status;
  133. spin_unlock_irqrestore(&desc->iuspin, flags);
  134. kfree(desc->outbuf);
  135. desc->outbuf = NULL;
  136. clear_bit(WDM_IN_USE, &desc->flags);
  137. wake_up_all(&desc->wait);
  138. }
  139. static void wdm_wwan_rx(struct wdm_device *desc, int length);
  140. static void wdm_in_callback(struct urb *urb)
  141. {
  142. unsigned long flags;
  143. struct wdm_device *desc = urb->context;
  144. int status = urb->status;
  145. int length = urb->actual_length;
  146. spin_lock_irqsave(&desc->iuspin, flags);
  147. clear_bit(WDM_RESPONDING, &desc->flags);
  148. if (status) {
  149. switch (status) {
  150. case -ENOENT:
  151. dev_dbg(&desc->intf->dev,
  152. "nonzero urb status received: -ENOENT\n");
  153. goto skip_error;
  154. case -ECONNRESET:
  155. dev_dbg(&desc->intf->dev,
  156. "nonzero urb status received: -ECONNRESET\n");
  157. goto skip_error;
  158. case -ESHUTDOWN:
  159. dev_dbg(&desc->intf->dev,
  160. "nonzero urb status received: -ESHUTDOWN\n");
  161. goto skip_error;
  162. case -EPIPE:
  163. dev_err(&desc->intf->dev,
  164. "nonzero urb status received: -EPIPE\n");
  165. break;
  166. default:
  167. dev_err(&desc->intf->dev,
  168. "Unexpected error %d\n", status);
  169. break;
  170. }
  171. }
  172. if (test_bit(WDM_WWAN_IN_USE, &desc->flags)) {
  173. wdm_wwan_rx(desc, length);
  174. goto out;
  175. }
  176. /*
  177. * only set a new error if there is no previous error.
  178. * Errors are only cleared during read/open
  179. * Avoid propagating -EPIPE (stall) to userspace since it is
  180. * better handled as an empty read
  181. */
  182. if (desc->rerr == 0 && status != -EPIPE)
  183. desc->rerr = status;
  184. if (length == 0) {
  185. dev_dbg(&desc->intf->dev, "received ZLP\n");
  186. goto skip_zlp;
  187. }
  188. if (length + desc->length > desc->wMaxCommand) {
  189. /* The buffer would overflow */
  190. set_bit(WDM_OVERFLOW, &desc->flags);
  191. } else {
  192. /* we may already be in overflow */
  193. if (!test_bit(WDM_OVERFLOW, &desc->flags)) {
  194. memmove(desc->ubuf + desc->length, desc->inbuf, length);
  195. smp_wmb(); /* against wdm_read() */
  196. WRITE_ONCE(desc->length, desc->length + length);
  197. }
  198. }
  199. skip_error:
  200. if (desc->rerr) {
  201. /*
  202. * If there was a ZLP or an error, userspace may decide to not
  203. * read any data after poll'ing.
  204. * We should respond to further attempts from the device to send
  205. * data, so that we can get unstuck.
  206. */
  207. skip_zlp:
  208. schedule_work(&desc->service_outs_intr);
  209. } else {
  210. set_bit(WDM_READ, &desc->flags);
  211. wake_up(&desc->wait);
  212. }
  213. out:
  214. spin_unlock_irqrestore(&desc->iuspin, flags);
  215. }
  216. static void wdm_int_callback(struct urb *urb)
  217. {
  218. unsigned long flags;
  219. int rv = 0;
  220. int responding;
  221. int status = urb->status;
  222. struct wdm_device *desc;
  223. struct usb_cdc_notification *dr;
  224. desc = urb->context;
  225. dr = (struct usb_cdc_notification *)desc->sbuf;
  226. if (status) {
  227. switch (status) {
  228. case -ESHUTDOWN:
  229. case -ENOENT:
  230. case -ECONNRESET:
  231. return; /* unplug */
  232. case -EPIPE:
  233. set_bit(WDM_INT_STALL, &desc->flags);
  234. dev_err(&desc->intf->dev, "Stall on int endpoint\n");
  235. goto sw; /* halt is cleared in work */
  236. default:
  237. dev_err_ratelimited(&desc->intf->dev,
  238. "nonzero urb status received: %d\n", status);
  239. break;
  240. }
  241. }
  242. if (urb->actual_length < sizeof(struct usb_cdc_notification)) {
  243. dev_err_ratelimited(&desc->intf->dev, "wdm_int_callback - %d bytes\n",
  244. urb->actual_length);
  245. goto exit;
  246. }
  247. switch (dr->bNotificationType) {
  248. case USB_CDC_NOTIFY_RESPONSE_AVAILABLE:
  249. dev_dbg(&desc->intf->dev,
  250. "NOTIFY_RESPONSE_AVAILABLE received: index %d len %d\n",
  251. le16_to_cpu(dr->wIndex), le16_to_cpu(dr->wLength));
  252. break;
  253. case USB_CDC_NOTIFY_NETWORK_CONNECTION:
  254. dev_dbg(&desc->intf->dev,
  255. "NOTIFY_NETWORK_CONNECTION %s network\n",
  256. dr->wValue ? "connected to" : "disconnected from");
  257. goto exit;
  258. case USB_CDC_NOTIFY_SPEED_CHANGE:
  259. dev_dbg(&desc->intf->dev, "SPEED_CHANGE received (len %u)\n",
  260. urb->actual_length);
  261. goto exit;
  262. default:
  263. clear_bit(WDM_POLL_RUNNING, &desc->flags);
  264. dev_err(&desc->intf->dev,
  265. "unknown notification %d received: index %d len %d\n",
  266. dr->bNotificationType,
  267. le16_to_cpu(dr->wIndex),
  268. le16_to_cpu(dr->wLength));
  269. goto exit;
  270. }
  271. spin_lock_irqsave(&desc->iuspin, flags);
  272. responding = test_and_set_bit(WDM_RESPONDING, &desc->flags);
  273. if (!desc->resp_count++ && !responding
  274. && !test_bit(WDM_DISCONNECTING, &desc->flags)
  275. && !test_bit(WDM_SUSPENDING, &desc->flags)) {
  276. rv = usb_submit_urb(desc->response, GFP_ATOMIC);
  277. dev_dbg(&desc->intf->dev, "submit response URB %d\n", rv);
  278. }
  279. spin_unlock_irqrestore(&desc->iuspin, flags);
  280. if (rv < 0) {
  281. clear_bit(WDM_RESPONDING, &desc->flags);
  282. if (rv == -EPERM)
  283. return;
  284. if (rv == -ENOMEM) {
  285. sw:
  286. rv = schedule_work(&desc->rxwork);
  287. if (rv)
  288. dev_err(&desc->intf->dev,
  289. "Cannot schedule work\n");
  290. }
  291. }
  292. exit:
  293. rv = usb_submit_urb(urb, GFP_ATOMIC);
  294. if (rv)
  295. dev_err(&desc->intf->dev,
  296. "%s - usb_submit_urb failed with result %d\n",
  297. __func__, rv);
  298. }
  299. static void poison_urbs(struct wdm_device *desc)
  300. {
  301. /* the order here is essential */
  302. usb_poison_urb(desc->command);
  303. usb_poison_urb(desc->validity);
  304. usb_poison_urb(desc->response);
  305. }
  306. static void unpoison_urbs(struct wdm_device *desc)
  307. {
  308. /*
  309. * the order here is not essential
  310. * it is symmetrical just to be nice
  311. */
  312. usb_unpoison_urb(desc->response);
  313. usb_unpoison_urb(desc->validity);
  314. usb_unpoison_urb(desc->command);
  315. }
  316. static void free_urbs(struct wdm_device *desc)
  317. {
  318. usb_free_urb(desc->validity);
  319. usb_free_urb(desc->response);
  320. usb_free_urb(desc->command);
  321. }
  322. static void cleanup(struct wdm_device *desc)
  323. {
  324. kfree(desc->sbuf);
  325. kfree(desc->inbuf);
  326. kfree(desc->orq);
  327. kfree(desc->irq);
  328. kfree(desc->ubuf);
  329. free_urbs(desc);
  330. kfree(desc);
  331. }
  332. static ssize_t wdm_write
  333. (struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
  334. {
  335. u8 *buf;
  336. int rv = -EMSGSIZE, r, we;
  337. struct wdm_device *desc = file->private_data;
  338. struct usb_ctrlrequest *req;
  339. if (count > desc->wMaxCommand)
  340. count = desc->wMaxCommand;
  341. spin_lock_irq(&desc->iuspin);
  342. we = desc->werr;
  343. desc->werr = 0;
  344. spin_unlock_irq(&desc->iuspin);
  345. if (we < 0)
  346. return usb_translate_errors(we);
  347. buf = memdup_user(buffer, count);
  348. if (IS_ERR(buf))
  349. return PTR_ERR(buf);
  350. /* concurrent writes and disconnect */
  351. r = mutex_lock_interruptible(&desc->wlock);
  352. rv = -ERESTARTSYS;
  353. if (r)
  354. goto out_free_mem;
  355. if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
  356. rv = -ENODEV;
  357. goto out_free_mem_lock;
  358. }
  359. r = usb_autopm_get_interface(desc->intf);
  360. if (r < 0) {
  361. rv = usb_translate_errors(r);
  362. goto out_free_mem_lock;
  363. }
  364. if (!(file->f_flags & O_NONBLOCK))
  365. r = wait_event_interruptible(desc->wait, !test_bit(WDM_IN_USE,
  366. &desc->flags));
  367. else
  368. if (test_bit(WDM_IN_USE, &desc->flags))
  369. r = -EAGAIN;
  370. if (test_bit(WDM_RESETTING, &desc->flags))
  371. r = -EIO;
  372. if (test_bit(WDM_DISCONNECTING, &desc->flags))
  373. r = -ENODEV;
  374. if (r < 0) {
  375. rv = r;
  376. goto out_free_mem_pm;
  377. }
  378. req = desc->orq;
  379. usb_fill_control_urb(
  380. desc->command,
  381. interface_to_usbdev(desc->intf),
  382. /* using common endpoint 0 */
  383. usb_sndctrlpipe(interface_to_usbdev(desc->intf), 0),
  384. (unsigned char *)req,
  385. buf,
  386. count,
  387. wdm_out_callback,
  388. desc
  389. );
  390. req->bRequestType = (USB_DIR_OUT | USB_TYPE_CLASS |
  391. USB_RECIP_INTERFACE);
  392. req->bRequest = USB_CDC_SEND_ENCAPSULATED_COMMAND;
  393. req->wValue = 0;
  394. req->wIndex = desc->inum; /* already converted */
  395. req->wLength = cpu_to_le16(count);
  396. set_bit(WDM_IN_USE, &desc->flags);
  397. desc->outbuf = buf;
  398. rv = usb_submit_urb(desc->command, GFP_KERNEL);
  399. if (rv < 0) {
  400. desc->outbuf = NULL;
  401. clear_bit(WDM_IN_USE, &desc->flags);
  402. wake_up_all(&desc->wait); /* for wdm_wait_for_response() */
  403. dev_err(&desc->intf->dev, "Tx URB error: %d\n", rv);
  404. rv = usb_translate_errors(rv);
  405. goto out_free_mem_pm;
  406. } else {
  407. dev_dbg(&desc->intf->dev, "Tx URB has been submitted index=%d\n",
  408. le16_to_cpu(req->wIndex));
  409. }
  410. usb_autopm_put_interface(desc->intf);
  411. mutex_unlock(&desc->wlock);
  412. return count;
  413. out_free_mem_pm:
  414. usb_autopm_put_interface(desc->intf);
  415. out_free_mem_lock:
  416. mutex_unlock(&desc->wlock);
  417. out_free_mem:
  418. kfree(buf);
  419. return rv;
  420. }
  421. /*
  422. * Submit the read urb if resp_count is non-zero.
  423. *
  424. * Called with desc->iuspin locked
  425. */
  426. static int service_outstanding_interrupt(struct wdm_device *desc)
  427. {
  428. int rv = 0;
  429. /* submit read urb only if the device is waiting for it */
  430. if (!desc->resp_count || !--desc->resp_count)
  431. goto out;
  432. if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
  433. rv = -ENODEV;
  434. goto out;
  435. }
  436. if (test_bit(WDM_RESETTING, &desc->flags)) {
  437. rv = -EIO;
  438. goto out;
  439. }
  440. set_bit(WDM_RESPONDING, &desc->flags);
  441. spin_unlock_irq(&desc->iuspin);
  442. rv = usb_submit_urb(desc->response, GFP_KERNEL);
  443. spin_lock_irq(&desc->iuspin);
  444. if (rv) {
  445. if (!test_bit(WDM_DISCONNECTING, &desc->flags))
  446. dev_err(&desc->intf->dev,
  447. "usb_submit_urb failed with result %d\n", rv);
  448. /* make sure the next notification trigger a submit */
  449. clear_bit(WDM_RESPONDING, &desc->flags);
  450. desc->resp_count = 0;
  451. }
  452. out:
  453. return rv;
  454. }
  455. static ssize_t wdm_read
  456. (struct file *file, char __user *buffer, size_t count, loff_t *ppos)
  457. {
  458. int rv, cntr;
  459. int i = 0;
  460. struct wdm_device *desc = file->private_data;
  461. rv = mutex_lock_interruptible(&desc->rlock); /*concurrent reads */
  462. if (rv < 0)
  463. return -ERESTARTSYS;
  464. cntr = READ_ONCE(desc->length);
  465. smp_rmb(); /* against wdm_in_callback() */
  466. if (cntr == 0) {
  467. desc->read = 0;
  468. retry:
  469. if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
  470. rv = -ENODEV;
  471. goto err;
  472. }
  473. if (test_bit(WDM_OVERFLOW, &desc->flags)) {
  474. clear_bit(WDM_OVERFLOW, &desc->flags);
  475. rv = -ENOBUFS;
  476. goto err;
  477. }
  478. i++;
  479. if (file->f_flags & O_NONBLOCK) {
  480. if (!test_bit(WDM_READ, &desc->flags)) {
  481. rv = -EAGAIN;
  482. goto err;
  483. }
  484. rv = 0;
  485. } else {
  486. rv = wait_event_interruptible(desc->wait,
  487. test_bit(WDM_READ, &desc->flags));
  488. }
  489. /* may have happened while we slept */
  490. if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
  491. rv = -ENODEV;
  492. goto err;
  493. }
  494. if (test_bit(WDM_RESETTING, &desc->flags)) {
  495. rv = -EIO;
  496. goto err;
  497. }
  498. usb_mark_last_busy(interface_to_usbdev(desc->intf));
  499. if (rv < 0) {
  500. rv = -ERESTARTSYS;
  501. goto err;
  502. }
  503. spin_lock_irq(&desc->iuspin);
  504. if (desc->rerr) { /* read completed, error happened */
  505. rv = usb_translate_errors(desc->rerr);
  506. desc->rerr = 0;
  507. spin_unlock_irq(&desc->iuspin);
  508. goto err;
  509. }
  510. /*
  511. * recheck whether we've lost the race
  512. * against the completion handler
  513. */
  514. if (!test_bit(WDM_READ, &desc->flags)) { /* lost race */
  515. spin_unlock_irq(&desc->iuspin);
  516. goto retry;
  517. }
  518. cntr = desc->length;
  519. spin_unlock_irq(&desc->iuspin);
  520. }
  521. if (cntr > count)
  522. cntr = count;
  523. rv = copy_to_user(buffer, desc->ubuf, cntr);
  524. if (rv > 0) {
  525. rv = -EFAULT;
  526. goto err;
  527. }
  528. spin_lock_irq(&desc->iuspin);
  529. for (i = 0; i < desc->length - cntr; i++)
  530. desc->ubuf[i] = desc->ubuf[i + cntr];
  531. desc->length -= cntr;
  532. /* in case we had outstanding data */
  533. if (!desc->length) {
  534. clear_bit(WDM_READ, &desc->flags);
  535. service_outstanding_interrupt(desc);
  536. }
  537. spin_unlock_irq(&desc->iuspin);
  538. rv = cntr;
  539. err:
  540. mutex_unlock(&desc->rlock);
  541. return rv;
  542. }
  543. static int wdm_wait_for_response(struct file *file, long timeout)
  544. {
  545. struct wdm_device *desc = file->private_data;
  546. long rv; /* Use long here because (int) MAX_SCHEDULE_TIMEOUT < 0. */
  547. /*
  548. * Needs both flags. We cannot do with one because resetting it would
  549. * cause a race with write() yet we need to signal a disconnect.
  550. */
  551. rv = wait_event_interruptible_timeout(desc->wait,
  552. !test_bit(WDM_IN_USE, &desc->flags) ||
  553. test_bit(WDM_DISCONNECTING, &desc->flags),
  554. timeout);
  555. /*
  556. * To report the correct error. This is best effort.
  557. * We are inevitably racing with the hardware.
  558. */
  559. if (test_bit(WDM_DISCONNECTING, &desc->flags))
  560. return -ENODEV;
  561. if (!rv)
  562. return -EIO;
  563. if (rv < 0)
  564. return -EINTR;
  565. spin_lock_irq(&desc->iuspin);
  566. rv = desc->werr;
  567. desc->werr = 0;
  568. spin_unlock_irq(&desc->iuspin);
  569. return usb_translate_errors(rv);
  570. }
  571. /*
  572. * You need to send a signal when you react to malicious or defective hardware.
  573. * Also, don't abort when fsync() returned -EINVAL, for older kernels which do
  574. * not implement wdm_flush() will return -EINVAL.
  575. */
  576. static int wdm_fsync(struct file *file, loff_t start, loff_t end, int datasync)
  577. {
  578. return wdm_wait_for_response(file, MAX_SCHEDULE_TIMEOUT);
  579. }
  580. /*
  581. * Same with wdm_fsync(), except it uses finite timeout in order to react to
  582. * malicious or defective hardware which ceased communication after close() was
  583. * implicitly called due to process termination.
  584. */
  585. static int wdm_flush(struct file *file, fl_owner_t id)
  586. {
  587. return wdm_wait_for_response(file, WDM_FLUSH_TIMEOUT);
  588. }
  589. static __poll_t wdm_poll(struct file *file, struct poll_table_struct *wait)
  590. {
  591. struct wdm_device *desc = file->private_data;
  592. unsigned long flags;
  593. __poll_t mask = 0;
  594. spin_lock_irqsave(&desc->iuspin, flags);
  595. if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
  596. mask = EPOLLHUP | EPOLLERR;
  597. spin_unlock_irqrestore(&desc->iuspin, flags);
  598. goto desc_out;
  599. }
  600. if (test_bit(WDM_READ, &desc->flags))
  601. mask = EPOLLIN | EPOLLRDNORM;
  602. if (desc->rerr || desc->werr)
  603. mask |= EPOLLERR;
  604. if (!test_bit(WDM_IN_USE, &desc->flags))
  605. mask |= EPOLLOUT | EPOLLWRNORM;
  606. spin_unlock_irqrestore(&desc->iuspin, flags);
  607. poll_wait(file, &desc->wait, wait);
  608. desc_out:
  609. return mask;
  610. }
  611. static int wdm_open(struct inode *inode, struct file *file)
  612. {
  613. int minor = iminor(inode);
  614. int rv = -ENODEV;
  615. struct usb_interface *intf;
  616. struct wdm_device *desc;
  617. mutex_lock(&wdm_mutex);
  618. desc = wdm_find_device_by_minor(minor);
  619. if (!desc)
  620. goto out;
  621. intf = desc->intf;
  622. if (test_bit(WDM_DISCONNECTING, &desc->flags))
  623. goto out;
  624. file->private_data = desc;
  625. if (test_bit(WDM_WWAN_IN_USE, &desc->flags)) {
  626. rv = -EBUSY;
  627. goto out;
  628. }
  629. smp_rmb(); /* ordered against wdm_wwan_port_stop() */
  630. rv = usb_autopm_get_interface(desc->intf);
  631. if (rv < 0) {
  632. dev_err(&desc->intf->dev, "Error autopm - %d\n", rv);
  633. goto out;
  634. }
  635. /* using write lock to protect desc->count */
  636. mutex_lock(&desc->wlock);
  637. if (!desc->count++) {
  638. desc->werr = 0;
  639. desc->rerr = 0;
  640. rv = usb_submit_urb(desc->validity, GFP_KERNEL);
  641. if (rv < 0) {
  642. desc->count--;
  643. dev_err(&desc->intf->dev,
  644. "Error submitting int urb - %d\n", rv);
  645. rv = usb_translate_errors(rv);
  646. }
  647. } else {
  648. rv = 0;
  649. }
  650. mutex_unlock(&desc->wlock);
  651. if (desc->count == 1)
  652. desc->manage_power(intf, 1);
  653. usb_autopm_put_interface(desc->intf);
  654. out:
  655. mutex_unlock(&wdm_mutex);
  656. return rv;
  657. }
  658. static int wdm_release(struct inode *inode, struct file *file)
  659. {
  660. struct wdm_device *desc = file->private_data;
  661. mutex_lock(&wdm_mutex);
  662. /* using write lock to protect desc->count */
  663. mutex_lock(&desc->wlock);
  664. desc->count--;
  665. mutex_unlock(&desc->wlock);
  666. if (!desc->count) {
  667. if (!test_bit(WDM_DISCONNECTING, &desc->flags)) {
  668. dev_dbg(&desc->intf->dev, "wdm_release: cleanup\n");
  669. poison_urbs(desc);
  670. spin_lock_irq(&desc->iuspin);
  671. desc->resp_count = 0;
  672. clear_bit(WDM_RESPONDING, &desc->flags);
  673. spin_unlock_irq(&desc->iuspin);
  674. desc->manage_power(desc->intf, 0);
  675. unpoison_urbs(desc);
  676. } else {
  677. /* must avoid dev_printk here as desc->intf is invalid */
  678. pr_debug(KBUILD_MODNAME " %s: device gone - cleaning up\n", __func__);
  679. cleanup(desc);
  680. }
  681. }
  682. mutex_unlock(&wdm_mutex);
  683. return 0;
  684. }
  685. static long wdm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
  686. {
  687. struct wdm_device *desc = file->private_data;
  688. int rv = 0;
  689. switch (cmd) {
  690. case IOCTL_WDM_MAX_COMMAND:
  691. if (copy_to_user((void __user *)arg, &desc->wMaxCommand, sizeof(desc->wMaxCommand)))
  692. rv = -EFAULT;
  693. break;
  694. default:
  695. rv = -ENOTTY;
  696. }
  697. return rv;
  698. }
  699. static const struct file_operations wdm_fops = {
  700. .owner = THIS_MODULE,
  701. .read = wdm_read,
  702. .write = wdm_write,
  703. .fsync = wdm_fsync,
  704. .open = wdm_open,
  705. .flush = wdm_flush,
  706. .release = wdm_release,
  707. .poll = wdm_poll,
  708. .unlocked_ioctl = wdm_ioctl,
  709. .compat_ioctl = compat_ptr_ioctl,
  710. .llseek = noop_llseek,
  711. };
  712. static struct usb_class_driver wdm_class = {
  713. .name = "cdc-wdm%d",
  714. .fops = &wdm_fops,
  715. .minor_base = WDM_MINOR_BASE,
  716. };
  717. /* --- WWAN framework integration --- */
  718. #ifdef CONFIG_WWAN
  719. static int wdm_wwan_port_start(struct wwan_port *port)
  720. {
  721. struct wdm_device *desc = wwan_port_get_drvdata(port);
  722. int rv;
  723. /* The interface is both exposed via the WWAN framework and as a
  724. * legacy usbmisc chardev. If chardev is already open, just fail
  725. * to prevent concurrent usage. Otherwise, switch to WWAN mode.
  726. */
  727. mutex_lock(&wdm_mutex);
  728. if (desc->count) {
  729. mutex_unlock(&wdm_mutex);
  730. return -EBUSY;
  731. }
  732. set_bit(WDM_WWAN_IN_USE, &desc->flags);
  733. mutex_unlock(&wdm_mutex);
  734. desc->manage_power(desc->intf, 1);
  735. /* tx is allowed */
  736. wwan_port_txon(port);
  737. /* Start getting events */
  738. rv = usb_submit_urb(desc->validity, GFP_KERNEL);
  739. if (rv < 0) {
  740. wwan_port_txoff(port);
  741. desc->manage_power(desc->intf, 0);
  742. /* this must be last lest we race with chardev open */
  743. clear_bit(WDM_WWAN_IN_USE, &desc->flags);
  744. }
  745. return rv;
  746. }
  747. static void wdm_wwan_port_stop(struct wwan_port *port)
  748. {
  749. struct wdm_device *desc = wwan_port_get_drvdata(port);
  750. /* Stop all transfers and disable WWAN mode */
  751. poison_urbs(desc);
  752. desc->manage_power(desc->intf, 0);
  753. clear_bit(WDM_READ, &desc->flags);
  754. unpoison_urbs(desc);
  755. smp_wmb(); /* ordered against wdm_open() */
  756. /* this must be last lest we open a poisoned device */
  757. clear_bit(WDM_WWAN_IN_USE, &desc->flags);
  758. }
  759. static void wdm_wwan_port_tx_complete(struct urb *urb)
  760. {
  761. struct sk_buff *skb = urb->context;
  762. struct wdm_device *desc = skb_shinfo(skb)->destructor_arg;
  763. usb_autopm_put_interface_async(desc->intf);
  764. wwan_port_txon(desc->wwanp);
  765. kfree_skb(skb);
  766. }
  767. static int wdm_wwan_port_tx(struct wwan_port *port, struct sk_buff *skb)
  768. {
  769. struct wdm_device *desc = wwan_port_get_drvdata(port);
  770. struct usb_interface *intf = desc->intf;
  771. struct usb_ctrlrequest *req = desc->orq;
  772. int rv;
  773. rv = usb_autopm_get_interface(intf);
  774. if (rv)
  775. return rv;
  776. usb_fill_control_urb(
  777. desc->command,
  778. interface_to_usbdev(intf),
  779. usb_sndctrlpipe(interface_to_usbdev(intf), 0),
  780. (unsigned char *)req,
  781. skb->data,
  782. skb->len,
  783. wdm_wwan_port_tx_complete,
  784. skb
  785. );
  786. req->bRequestType = (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE);
  787. req->bRequest = USB_CDC_SEND_ENCAPSULATED_COMMAND;
  788. req->wValue = 0;
  789. req->wIndex = desc->inum; /* already converted */
  790. req->wLength = cpu_to_le16(skb->len);
  791. skb_shinfo(skb)->destructor_arg = desc;
  792. rv = usb_submit_urb(desc->command, GFP_KERNEL);
  793. if (rv)
  794. usb_autopm_put_interface(intf);
  795. else /* One transfer at a time, stop TX until URB completion */
  796. wwan_port_txoff(port);
  797. return rv;
  798. }
  799. static const struct wwan_port_ops wdm_wwan_port_ops = {
  800. .start = wdm_wwan_port_start,
  801. .stop = wdm_wwan_port_stop,
  802. .tx = wdm_wwan_port_tx,
  803. };
  804. static void wdm_wwan_init(struct wdm_device *desc)
  805. {
  806. struct usb_interface *intf = desc->intf;
  807. struct wwan_port *port;
  808. /* Only register to WWAN core if protocol/type is known */
  809. if (desc->wwanp_type == WWAN_PORT_UNKNOWN) {
  810. dev_info(&intf->dev, "Unknown control protocol\n");
  811. return;
  812. }
  813. port = wwan_create_port(&intf->dev, desc->wwanp_type, &wdm_wwan_port_ops,
  814. NULL, desc);
  815. if (IS_ERR(port)) {
  816. dev_err(&intf->dev, "%s: Unable to create WWAN port\n",
  817. dev_name(intf->usb_dev));
  818. return;
  819. }
  820. desc->wwanp = port;
  821. }
  822. static void wdm_wwan_deinit(struct wdm_device *desc)
  823. {
  824. if (!desc->wwanp)
  825. return;
  826. wwan_remove_port(desc->wwanp);
  827. desc->wwanp = NULL;
  828. }
  829. static void wdm_wwan_rx(struct wdm_device *desc, int length)
  830. {
  831. struct wwan_port *port = desc->wwanp;
  832. struct sk_buff *skb;
  833. /* Forward data to WWAN port */
  834. skb = alloc_skb(length, GFP_ATOMIC);
  835. if (!skb)
  836. return;
  837. skb_put_data(skb, desc->inbuf, length);
  838. wwan_port_rx(port, skb);
  839. /* inbuf has been copied, it is safe to check for outstanding data */
  840. schedule_work(&desc->service_outs_intr);
  841. }
  842. #else /* CONFIG_WWAN */
  843. static void wdm_wwan_init(struct wdm_device *desc) {}
  844. static void wdm_wwan_deinit(struct wdm_device *desc) {}
  845. static void wdm_wwan_rx(struct wdm_device *desc, int length) {}
  846. #endif /* CONFIG_WWAN */
  847. /* --- error handling --- */
  848. static void wdm_rxwork(struct work_struct *work)
  849. {
  850. struct wdm_device *desc = container_of(work, struct wdm_device, rxwork);
  851. unsigned long flags;
  852. int rv = 0;
  853. int responding;
  854. spin_lock_irqsave(&desc->iuspin, flags);
  855. if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
  856. spin_unlock_irqrestore(&desc->iuspin, flags);
  857. } else {
  858. responding = test_and_set_bit(WDM_RESPONDING, &desc->flags);
  859. spin_unlock_irqrestore(&desc->iuspin, flags);
  860. if (!responding)
  861. rv = usb_submit_urb(desc->response, GFP_KERNEL);
  862. if (rv < 0 && rv != -EPERM) {
  863. spin_lock_irqsave(&desc->iuspin, flags);
  864. clear_bit(WDM_RESPONDING, &desc->flags);
  865. if (!test_bit(WDM_DISCONNECTING, &desc->flags))
  866. schedule_work(&desc->rxwork);
  867. spin_unlock_irqrestore(&desc->iuspin, flags);
  868. }
  869. }
  870. }
  871. static void service_interrupt_work(struct work_struct *work)
  872. {
  873. struct wdm_device *desc;
  874. desc = container_of(work, struct wdm_device, service_outs_intr);
  875. spin_lock_irq(&desc->iuspin);
  876. service_outstanding_interrupt(desc);
  877. if (!desc->resp_count && (desc->length || desc->rerr)) {
  878. set_bit(WDM_READ, &desc->flags);
  879. wake_up(&desc->wait);
  880. }
  881. spin_unlock_irq(&desc->iuspin);
  882. }
  883. /* --- hotplug --- */
  884. static int wdm_create(struct usb_interface *intf, struct usb_endpoint_descriptor *ep,
  885. u16 bufsize, enum wwan_port_type type,
  886. int (*manage_power)(struct usb_interface *, int))
  887. {
  888. int rv = -ENOMEM;
  889. struct wdm_device *desc;
  890. desc = kzalloc_obj(struct wdm_device);
  891. if (!desc)
  892. goto out;
  893. INIT_LIST_HEAD(&desc->device_list);
  894. mutex_init(&desc->rlock);
  895. mutex_init(&desc->wlock);
  896. spin_lock_init(&desc->iuspin);
  897. init_waitqueue_head(&desc->wait);
  898. desc->wMaxCommand = bufsize;
  899. /* this will be expanded and needed in hardware endianness */
  900. desc->inum = cpu_to_le16((u16)intf->cur_altsetting->desc.bInterfaceNumber);
  901. desc->intf = intf;
  902. desc->wwanp_type = type;
  903. INIT_WORK(&desc->rxwork, wdm_rxwork);
  904. INIT_WORK(&desc->service_outs_intr, service_interrupt_work);
  905. if (!usb_endpoint_is_int_in(ep)) {
  906. rv = -EINVAL;
  907. goto err;
  908. }
  909. desc->wMaxPacketSize = usb_endpoint_maxp(ep);
  910. desc->orq = kmalloc_obj(struct usb_ctrlrequest);
  911. if (!desc->orq)
  912. goto err;
  913. desc->irq = kmalloc_obj(struct usb_ctrlrequest);
  914. if (!desc->irq)
  915. goto err;
  916. desc->validity = usb_alloc_urb(0, GFP_KERNEL);
  917. if (!desc->validity)
  918. goto err;
  919. desc->response = usb_alloc_urb(0, GFP_KERNEL);
  920. if (!desc->response)
  921. goto err;
  922. desc->command = usb_alloc_urb(0, GFP_KERNEL);
  923. if (!desc->command)
  924. goto err;
  925. desc->ubuf = kmalloc(desc->wMaxCommand, GFP_KERNEL);
  926. if (!desc->ubuf)
  927. goto err;
  928. desc->sbuf = kmalloc(desc->wMaxPacketSize, GFP_KERNEL);
  929. if (!desc->sbuf)
  930. goto err;
  931. desc->inbuf = kmalloc(desc->wMaxCommand, GFP_KERNEL);
  932. if (!desc->inbuf)
  933. goto err;
  934. usb_fill_int_urb(
  935. desc->validity,
  936. interface_to_usbdev(intf),
  937. usb_rcvintpipe(interface_to_usbdev(intf), ep->bEndpointAddress),
  938. desc->sbuf,
  939. desc->wMaxPacketSize,
  940. wdm_int_callback,
  941. desc,
  942. ep->bInterval
  943. );
  944. desc->irq->bRequestType = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE);
  945. desc->irq->bRequest = USB_CDC_GET_ENCAPSULATED_RESPONSE;
  946. desc->irq->wValue = 0;
  947. desc->irq->wIndex = desc->inum; /* already converted */
  948. desc->irq->wLength = cpu_to_le16(desc->wMaxCommand);
  949. usb_fill_control_urb(
  950. desc->response,
  951. interface_to_usbdev(intf),
  952. /* using common endpoint 0 */
  953. usb_rcvctrlpipe(interface_to_usbdev(desc->intf), 0),
  954. (unsigned char *)desc->irq,
  955. desc->inbuf,
  956. desc->wMaxCommand,
  957. wdm_in_callback,
  958. desc
  959. );
  960. desc->manage_power = manage_power;
  961. spin_lock(&wdm_device_list_lock);
  962. list_add(&desc->device_list, &wdm_device_list);
  963. spin_unlock(&wdm_device_list_lock);
  964. rv = usb_register_dev(intf, &wdm_class);
  965. if (rv < 0)
  966. goto err;
  967. else
  968. dev_info(&intf->dev, "%s: USB WDM device\n", dev_name(intf->usb_dev));
  969. wdm_wwan_init(desc);
  970. out:
  971. return rv;
  972. err:
  973. spin_lock(&wdm_device_list_lock);
  974. list_del(&desc->device_list);
  975. spin_unlock(&wdm_device_list_lock);
  976. cleanup(desc);
  977. return rv;
  978. }
  979. static int wdm_manage_power(struct usb_interface *intf, int on)
  980. {
  981. /* need autopm_get/put here to ensure the usbcore sees the new value */
  982. int rv = usb_autopm_get_interface(intf);
  983. intf->needs_remote_wakeup = on;
  984. if (!rv)
  985. usb_autopm_put_interface(intf);
  986. return 0;
  987. }
  988. static int wdm_probe(struct usb_interface *intf, const struct usb_device_id *id)
  989. {
  990. int rv = -EINVAL;
  991. struct usb_host_interface *iface;
  992. struct usb_endpoint_descriptor *ep;
  993. struct usb_cdc_parsed_header hdr;
  994. u8 *buffer = intf->altsetting->extra;
  995. int buflen = intf->altsetting->extralen;
  996. u16 maxcom = WDM_DEFAULT_BUFSIZE;
  997. if (!buffer)
  998. goto err;
  999. cdc_parse_cdc_header(&hdr, intf, buffer, buflen);
  1000. if (hdr.usb_cdc_dmm_desc)
  1001. maxcom = le16_to_cpu(hdr.usb_cdc_dmm_desc->wMaxCommand);
  1002. iface = intf->cur_altsetting;
  1003. if (iface->desc.bNumEndpoints != 1)
  1004. goto err;
  1005. ep = &iface->endpoint[0].desc;
  1006. rv = wdm_create(intf, ep, maxcom, WWAN_PORT_UNKNOWN, &wdm_manage_power);
  1007. err:
  1008. return rv;
  1009. }
  1010. /**
  1011. * usb_cdc_wdm_register - register a WDM subdriver
  1012. * @intf: usb interface the subdriver will associate with
  1013. * @ep: interrupt endpoint to monitor for notifications
  1014. * @bufsize: maximum message size to support for read/write
  1015. * @type: Type/protocol of the transported data (MBIM, QMI...)
  1016. * @manage_power: call-back invoked during open and release to
  1017. * manage the device's power
  1018. * Create WDM usb class character device and associate it with intf
  1019. * without binding, allowing another driver to manage the interface.
  1020. *
  1021. * The subdriver will manage the given interrupt endpoint exclusively
  1022. * and will issue control requests referring to the given intf. It
  1023. * will otherwise avoid interferring, and in particular not do
  1024. * usb_set_intfdata/usb_get_intfdata on intf.
  1025. *
  1026. * The return value is a pointer to the subdriver's struct usb_driver.
  1027. * The registering driver is responsible for calling this subdriver's
  1028. * disconnect, suspend, resume, pre_reset and post_reset methods from
  1029. * its own.
  1030. */
  1031. struct usb_driver *usb_cdc_wdm_register(struct usb_interface *intf,
  1032. struct usb_endpoint_descriptor *ep,
  1033. int bufsize, enum wwan_port_type type,
  1034. int (*manage_power)(struct usb_interface *, int))
  1035. {
  1036. int rv;
  1037. rv = wdm_create(intf, ep, bufsize, type, manage_power);
  1038. if (rv < 0)
  1039. goto err;
  1040. return &wdm_driver;
  1041. err:
  1042. return ERR_PTR(rv);
  1043. }
  1044. EXPORT_SYMBOL(usb_cdc_wdm_register);
  1045. static void wdm_disconnect(struct usb_interface *intf)
  1046. {
  1047. struct wdm_device *desc;
  1048. unsigned long flags;
  1049. usb_deregister_dev(intf, &wdm_class);
  1050. desc = wdm_find_device(intf);
  1051. mutex_lock(&wdm_mutex);
  1052. wdm_wwan_deinit(desc);
  1053. /* the spinlock makes sure no new urbs are generated in the callbacks */
  1054. spin_lock_irqsave(&desc->iuspin, flags);
  1055. set_bit(WDM_DISCONNECTING, &desc->flags);
  1056. set_bit(WDM_READ, &desc->flags);
  1057. spin_unlock_irqrestore(&desc->iuspin, flags);
  1058. wake_up_all(&desc->wait);
  1059. mutex_lock(&desc->rlock);
  1060. mutex_lock(&desc->wlock);
  1061. poison_urbs(desc);
  1062. cancel_work_sync(&desc->rxwork);
  1063. cancel_work_sync(&desc->service_outs_intr);
  1064. mutex_unlock(&desc->wlock);
  1065. mutex_unlock(&desc->rlock);
  1066. /* the desc->intf pointer used as list key is now invalid */
  1067. spin_lock(&wdm_device_list_lock);
  1068. list_del(&desc->device_list);
  1069. spin_unlock(&wdm_device_list_lock);
  1070. if (!desc->count)
  1071. cleanup(desc);
  1072. else
  1073. dev_dbg(&intf->dev, "%d open files - postponing cleanup\n", desc->count);
  1074. mutex_unlock(&wdm_mutex);
  1075. }
  1076. #ifdef CONFIG_PM
  1077. static int wdm_suspend(struct usb_interface *intf, pm_message_t message)
  1078. {
  1079. struct wdm_device *desc = wdm_find_device(intf);
  1080. int rv = 0;
  1081. dev_dbg(&desc->intf->dev, "wdm%d_suspend\n", intf->minor);
  1082. /* if this is an autosuspend the caller does the locking */
  1083. if (!PMSG_IS_AUTO(message)) {
  1084. mutex_lock(&desc->rlock);
  1085. mutex_lock(&desc->wlock);
  1086. }
  1087. spin_lock_irq(&desc->iuspin);
  1088. if (PMSG_IS_AUTO(message) &&
  1089. (test_bit(WDM_IN_USE, &desc->flags)
  1090. || test_bit(WDM_RESPONDING, &desc->flags))) {
  1091. spin_unlock_irq(&desc->iuspin);
  1092. rv = -EBUSY;
  1093. } else {
  1094. set_bit(WDM_SUSPENDING, &desc->flags);
  1095. spin_unlock_irq(&desc->iuspin);
  1096. /* callback submits work - order is essential */
  1097. poison_urbs(desc);
  1098. cancel_work_sync(&desc->rxwork);
  1099. cancel_work_sync(&desc->service_outs_intr);
  1100. unpoison_urbs(desc);
  1101. }
  1102. if (!PMSG_IS_AUTO(message)) {
  1103. mutex_unlock(&desc->wlock);
  1104. mutex_unlock(&desc->rlock);
  1105. }
  1106. return rv;
  1107. }
  1108. #endif
  1109. static int recover_from_urb_loss(struct wdm_device *desc)
  1110. {
  1111. int rv = 0;
  1112. if (desc->count) {
  1113. rv = usb_submit_urb(desc->validity, GFP_NOIO);
  1114. if (rv < 0)
  1115. dev_err(&desc->intf->dev,
  1116. "Error resume submitting int urb - %d\n", rv);
  1117. }
  1118. return rv;
  1119. }
  1120. #ifdef CONFIG_PM
  1121. static int wdm_resume(struct usb_interface *intf)
  1122. {
  1123. struct wdm_device *desc = wdm_find_device(intf);
  1124. int rv;
  1125. dev_dbg(&desc->intf->dev, "wdm%d_resume\n", intf->minor);
  1126. clear_bit(WDM_SUSPENDING, &desc->flags);
  1127. rv = recover_from_urb_loss(desc);
  1128. return rv;
  1129. }
  1130. #endif
  1131. static int wdm_pre_reset(struct usb_interface *intf)
  1132. {
  1133. struct wdm_device *desc = wdm_find_device(intf);
  1134. /*
  1135. * we notify everybody using poll of
  1136. * an exceptional situation
  1137. * must be done before recovery lest a spontaneous
  1138. * message from the device is lost
  1139. */
  1140. spin_lock_irq(&desc->iuspin);
  1141. set_bit(WDM_RESETTING, &desc->flags); /* inform read/write */
  1142. set_bit(WDM_READ, &desc->flags); /* unblock read */
  1143. clear_bit(WDM_IN_USE, &desc->flags); /* unblock write */
  1144. desc->rerr = -EINTR;
  1145. spin_unlock_irq(&desc->iuspin);
  1146. wake_up_all(&desc->wait);
  1147. mutex_lock(&desc->rlock);
  1148. mutex_lock(&desc->wlock);
  1149. poison_urbs(desc);
  1150. cancel_work_sync(&desc->rxwork);
  1151. cancel_work_sync(&desc->service_outs_intr);
  1152. return 0;
  1153. }
  1154. static int wdm_post_reset(struct usb_interface *intf)
  1155. {
  1156. struct wdm_device *desc = wdm_find_device(intf);
  1157. int rv;
  1158. unpoison_urbs(desc);
  1159. clear_bit(WDM_OVERFLOW, &desc->flags);
  1160. clear_bit(WDM_RESETTING, &desc->flags);
  1161. rv = recover_from_urb_loss(desc);
  1162. mutex_unlock(&desc->wlock);
  1163. mutex_unlock(&desc->rlock);
  1164. return rv;
  1165. }
  1166. static struct usb_driver wdm_driver = {
  1167. .name = "cdc_wdm",
  1168. .probe = wdm_probe,
  1169. .disconnect = wdm_disconnect,
  1170. #ifdef CONFIG_PM
  1171. .suspend = wdm_suspend,
  1172. .resume = wdm_resume,
  1173. .reset_resume = wdm_resume,
  1174. #endif
  1175. .pre_reset = wdm_pre_reset,
  1176. .post_reset = wdm_post_reset,
  1177. .id_table = wdm_ids,
  1178. .supports_autosuspend = 1,
  1179. .disable_hub_initiated_lpm = 1,
  1180. };
  1181. module_usb_driver(wdm_driver);
  1182. MODULE_AUTHOR(DRIVER_AUTHOR);
  1183. MODULE_DESCRIPTION(DRIVER_DESC);
  1184. MODULE_LICENSE("GPL");