zd_usb.c 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545
  1. /* ZD1211 USB-WLAN driver for Linux
  2. *
  3. * Copyright (C) 2005-2007 Ulrich Kunitz <kune@deine-taler.de>
  4. * Copyright (C) 2006-2007 Daniel Drake <dsd@gentoo.org>
  5. * Copyright (C) 2006-2007 Michael Wu <flamingice@sourmilk.net>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  20. */
  21. #include <linux/kernel.h>
  22. #include <linux/init.h>
  23. #include <linux/firmware.h>
  24. #include <linux/device.h>
  25. #include <linux/errno.h>
  26. #include <linux/skbuff.h>
  27. #include <linux/usb.h>
  28. #include <linux/workqueue.h>
  29. #include <net/mac80211.h>
  30. #include <asm/unaligned.h>
  31. #include "zd_def.h"
  32. #include "zd_mac.h"
  33. #include "zd_usb.h"
  34. static struct usb_device_id usb_ids[] = {
  35. /* ZD1211 */
  36. { USB_DEVICE(0x0ace, 0x1211), .driver_info = DEVICE_ZD1211 },
  37. { USB_DEVICE(0x07b8, 0x6001), .driver_info = DEVICE_ZD1211 },
  38. { USB_DEVICE(0x126f, 0xa006), .driver_info = DEVICE_ZD1211 },
  39. { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 },
  40. { USB_DEVICE(0x0df6, 0x9071), .driver_info = DEVICE_ZD1211 },
  41. { USB_DEVICE(0x0df6, 0x9075), .driver_info = DEVICE_ZD1211 },
  42. { USB_DEVICE(0x157e, 0x300b), .driver_info = DEVICE_ZD1211 },
  43. { USB_DEVICE(0x079b, 0x004a), .driver_info = DEVICE_ZD1211 },
  44. { USB_DEVICE(0x1740, 0x2000), .driver_info = DEVICE_ZD1211 },
  45. { USB_DEVICE(0x157e, 0x3204), .driver_info = DEVICE_ZD1211 },
  46. { USB_DEVICE(0x0586, 0x3402), .driver_info = DEVICE_ZD1211 },
  47. { USB_DEVICE(0x0b3b, 0x5630), .driver_info = DEVICE_ZD1211 },
  48. { USB_DEVICE(0x0b05, 0x170c), .driver_info = DEVICE_ZD1211 },
  49. { USB_DEVICE(0x1435, 0x0711), .driver_info = DEVICE_ZD1211 },
  50. { USB_DEVICE(0x0586, 0x3409), .driver_info = DEVICE_ZD1211 },
  51. { USB_DEVICE(0x0b3b, 0x1630), .driver_info = DEVICE_ZD1211 },
  52. { USB_DEVICE(0x0586, 0x3401), .driver_info = DEVICE_ZD1211 },
  53. { USB_DEVICE(0x14ea, 0xab13), .driver_info = DEVICE_ZD1211 },
  54. { USB_DEVICE(0x13b1, 0x001e), .driver_info = DEVICE_ZD1211 },
  55. { USB_DEVICE(0x0586, 0x3407), .driver_info = DEVICE_ZD1211 },
  56. { USB_DEVICE(0x129b, 0x1666), .driver_info = DEVICE_ZD1211 },
  57. { USB_DEVICE(0x157e, 0x300a), .driver_info = DEVICE_ZD1211 },
  58. /* ZD1211B */
  59. { USB_DEVICE(0x0ace, 0x1215), .driver_info = DEVICE_ZD1211B },
  60. { USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B },
  61. { USB_DEVICE(0x079b, 0x0062), .driver_info = DEVICE_ZD1211B },
  62. { USB_DEVICE(0x1582, 0x6003), .driver_info = DEVICE_ZD1211B },
  63. { USB_DEVICE(0x050d, 0x705c), .driver_info = DEVICE_ZD1211B },
  64. { USB_DEVICE(0x083a, 0xe506), .driver_info = DEVICE_ZD1211B },
  65. { USB_DEVICE(0x083a, 0x4505), .driver_info = DEVICE_ZD1211B },
  66. { USB_DEVICE(0x0471, 0x1236), .driver_info = DEVICE_ZD1211B },
  67. { USB_DEVICE(0x13b1, 0x0024), .driver_info = DEVICE_ZD1211B },
  68. { USB_DEVICE(0x0586, 0x340f), .driver_info = DEVICE_ZD1211B },
  69. { USB_DEVICE(0x0b05, 0x171b), .driver_info = DEVICE_ZD1211B },
  70. { USB_DEVICE(0x0586, 0x3410), .driver_info = DEVICE_ZD1211B },
  71. { USB_DEVICE(0x0baf, 0x0121), .driver_info = DEVICE_ZD1211B },
  72. { USB_DEVICE(0x0586, 0x3412), .driver_info = DEVICE_ZD1211B },
  73. { USB_DEVICE(0x0586, 0x3413), .driver_info = DEVICE_ZD1211B },
  74. { USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B },
  75. { USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
  76. { USB_DEVICE(0x2019, 0x5303), .driver_info = DEVICE_ZD1211B },
  77. { USB_DEVICE(0x129b, 0x1667), .driver_info = DEVICE_ZD1211B },
  78. { USB_DEVICE(0x0cde, 0x001a), .driver_info = DEVICE_ZD1211B },
  79. { USB_DEVICE(0x0586, 0x340a), .driver_info = DEVICE_ZD1211B },
  80. { USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B },
  81. /* "Driverless" devices that need ejecting */
  82. { USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
  83. { USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
  84. {}
  85. };
  86. MODULE_LICENSE("GPL");
  87. MODULE_DESCRIPTION("USB driver for devices with the ZD1211 chip.");
  88. MODULE_AUTHOR("Ulrich Kunitz");
  89. MODULE_AUTHOR("Daniel Drake");
  90. MODULE_VERSION("1.0");
  91. MODULE_DEVICE_TABLE(usb, usb_ids);
  92. #define FW_ZD1211_PREFIX "zd1211/zd1211_"
  93. #define FW_ZD1211B_PREFIX "zd1211/zd1211b_"
  94. /* USB device initialization */
  95. static void int_urb_complete(struct urb *urb);
  96. static int request_fw_file(
  97. const struct firmware **fw, const char *name, struct device *device)
  98. {
  99. int r;
  100. dev_dbg_f(device, "fw name %s\n", name);
  101. r = request_firmware(fw, name, device);
  102. if (r)
  103. dev_err(device,
  104. "Could not load firmware file %s. Error number %d\n",
  105. name, r);
  106. return r;
  107. }
  108. static inline u16 get_bcdDevice(const struct usb_device *udev)
  109. {
  110. return le16_to_cpu(udev->descriptor.bcdDevice);
  111. }
  112. enum upload_code_flags {
  113. REBOOT = 1,
  114. };
  115. /* Ensures that MAX_TRANSFER_SIZE is even. */
  116. #define MAX_TRANSFER_SIZE (USB_MAX_TRANSFER_SIZE & ~1)
  117. static int upload_code(struct usb_device *udev,
  118. const u8 *data, size_t size, u16 code_offset, int flags)
  119. {
  120. u8 *p;
  121. int r;
  122. /* USB request blocks need "kmalloced" buffers.
  123. */
  124. p = kmalloc(MAX_TRANSFER_SIZE, GFP_KERNEL);
  125. if (!p) {
  126. dev_err(&udev->dev, "out of memory\n");
  127. r = -ENOMEM;
  128. goto error;
  129. }
  130. size &= ~1;
  131. while (size > 0) {
  132. size_t transfer_size = size <= MAX_TRANSFER_SIZE ?
  133. size : MAX_TRANSFER_SIZE;
  134. dev_dbg_f(&udev->dev, "transfer size %zu\n", transfer_size);
  135. memcpy(p, data, transfer_size);
  136. r = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
  137. USB_REQ_FIRMWARE_DOWNLOAD,
  138. USB_DIR_OUT | USB_TYPE_VENDOR,
  139. code_offset, 0, p, transfer_size, 1000 /* ms */);
  140. if (r < 0) {
  141. dev_err(&udev->dev,
  142. "USB control request for firmware upload"
  143. " failed. Error number %d\n", r);
  144. goto error;
  145. }
  146. transfer_size = r & ~1;
  147. size -= transfer_size;
  148. data += transfer_size;
  149. code_offset += transfer_size/sizeof(u16);
  150. }
  151. if (flags & REBOOT) {
  152. u8 ret;
  153. r = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
  154. USB_REQ_FIRMWARE_CONFIRM,
  155. USB_DIR_IN | USB_TYPE_VENDOR,
  156. 0, 0, &ret, sizeof(ret), 5000 /* ms */);
  157. if (r != sizeof(ret)) {
  158. dev_err(&udev->dev,
  159. "control request firmeware confirmation failed."
  160. " Return value %d\n", r);
  161. if (r >= 0)
  162. r = -ENODEV;
  163. goto error;
  164. }
  165. if (ret & 0x80) {
  166. dev_err(&udev->dev,
  167. "Internal error while downloading."
  168. " Firmware confirm return value %#04x\n",
  169. (unsigned int)ret);
  170. r = -ENODEV;
  171. goto error;
  172. }
  173. dev_dbg_f(&udev->dev, "firmware confirm return value %#04x\n",
  174. (unsigned int)ret);
  175. }
  176. r = 0;
  177. error:
  178. kfree(p);
  179. return r;
  180. }
  181. static u16 get_word(const void *data, u16 offset)
  182. {
  183. const __le16 *p = data;
  184. return le16_to_cpu(p[offset]);
  185. }
  186. static char *get_fw_name(struct zd_usb *usb, char *buffer, size_t size,
  187. const char* postfix)
  188. {
  189. scnprintf(buffer, size, "%s%s",
  190. usb->is_zd1211b ?
  191. FW_ZD1211B_PREFIX : FW_ZD1211_PREFIX,
  192. postfix);
  193. return buffer;
  194. }
  195. static int handle_version_mismatch(struct zd_usb *usb,
  196. const struct firmware *ub_fw)
  197. {
  198. struct usb_device *udev = zd_usb_to_usbdev(usb);
  199. const struct firmware *ur_fw = NULL;
  200. int offset;
  201. int r = 0;
  202. char fw_name[128];
  203. r = request_fw_file(&ur_fw,
  204. get_fw_name(usb, fw_name, sizeof(fw_name), "ur"),
  205. &udev->dev);
  206. if (r)
  207. goto error;
  208. r = upload_code(udev, ur_fw->data, ur_fw->size, FW_START, REBOOT);
  209. if (r)
  210. goto error;
  211. offset = (E2P_BOOT_CODE_OFFSET * sizeof(u16));
  212. r = upload_code(udev, ub_fw->data + offset, ub_fw->size - offset,
  213. E2P_START + E2P_BOOT_CODE_OFFSET, REBOOT);
  214. /* At this point, the vendor driver downloads the whole firmware
  215. * image, hacks around with version IDs, and uploads it again,
  216. * completely overwriting the boot code. We do not do this here as
  217. * it is not required on any tested devices, and it is suspected to
  218. * cause problems. */
  219. error:
  220. release_firmware(ur_fw);
  221. return r;
  222. }
  223. static int upload_firmware(struct zd_usb *usb)
  224. {
  225. int r;
  226. u16 fw_bcdDevice;
  227. u16 bcdDevice;
  228. struct usb_device *udev = zd_usb_to_usbdev(usb);
  229. const struct firmware *ub_fw = NULL;
  230. const struct firmware *uph_fw = NULL;
  231. char fw_name[128];
  232. bcdDevice = get_bcdDevice(udev);
  233. r = request_fw_file(&ub_fw,
  234. get_fw_name(usb, fw_name, sizeof(fw_name), "ub"),
  235. &udev->dev);
  236. if (r)
  237. goto error;
  238. fw_bcdDevice = get_word(ub_fw->data, E2P_DATA_OFFSET);
  239. if (fw_bcdDevice != bcdDevice) {
  240. dev_info(&udev->dev,
  241. "firmware version %#06x and device bootcode version "
  242. "%#06x differ\n", fw_bcdDevice, bcdDevice);
  243. if (bcdDevice <= 0x4313)
  244. dev_warn(&udev->dev, "device has old bootcode, please "
  245. "report success or failure\n");
  246. r = handle_version_mismatch(usb, ub_fw);
  247. if (r)
  248. goto error;
  249. } else {
  250. dev_dbg_f(&udev->dev,
  251. "firmware device id %#06x is equal to the "
  252. "actual device id\n", fw_bcdDevice);
  253. }
  254. r = request_fw_file(&uph_fw,
  255. get_fw_name(usb, fw_name, sizeof(fw_name), "uphr"),
  256. &udev->dev);
  257. if (r)
  258. goto error;
  259. r = upload_code(udev, uph_fw->data, uph_fw->size, FW_START, REBOOT);
  260. if (r) {
  261. dev_err(&udev->dev,
  262. "Could not upload firmware code uph. Error number %d\n",
  263. r);
  264. }
  265. /* FALL-THROUGH */
  266. error:
  267. release_firmware(ub_fw);
  268. release_firmware(uph_fw);
  269. return r;
  270. }
  271. /* Read data from device address space using "firmware interface" which does
  272. * not require firmware to be loaded. */
  273. int zd_usb_read_fw(struct zd_usb *usb, zd_addr_t addr, u8 *data, u16 len)
  274. {
  275. int r;
  276. struct usb_device *udev = zd_usb_to_usbdev(usb);
  277. r = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
  278. USB_REQ_FIRMWARE_READ_DATA, USB_DIR_IN | 0x40, addr, 0,
  279. data, len, 5000);
  280. if (r < 0) {
  281. dev_err(&udev->dev,
  282. "read over firmware interface failed: %d\n", r);
  283. return r;
  284. } else if (r != len) {
  285. dev_err(&udev->dev,
  286. "incomplete read over firmware interface: %d/%d\n",
  287. r, len);
  288. return -EIO;
  289. }
  290. return 0;
  291. }
  292. #define urb_dev(urb) (&(urb)->dev->dev)
  293. static inline void handle_regs_int(struct urb *urb)
  294. {
  295. struct zd_usb *usb = urb->context;
  296. struct zd_usb_interrupt *intr = &usb->intr;
  297. int len;
  298. u16 int_num;
  299. ZD_ASSERT(in_interrupt());
  300. spin_lock(&intr->lock);
  301. int_num = le16_to_cpu(*(__le16 *)(urb->transfer_buffer+2));
  302. if (int_num == CR_INTERRUPT) {
  303. struct zd_mac *mac = zd_hw_mac(zd_usb_to_hw(urb->context));
  304. memcpy(&mac->intr_buffer, urb->transfer_buffer,
  305. USB_MAX_EP_INT_BUFFER);
  306. schedule_work(&mac->process_intr);
  307. } else if (intr->read_regs_enabled) {
  308. intr->read_regs.length = len = urb->actual_length;
  309. if (len > sizeof(intr->read_regs.buffer))
  310. len = sizeof(intr->read_regs.buffer);
  311. memcpy(intr->read_regs.buffer, urb->transfer_buffer, len);
  312. intr->read_regs_enabled = 0;
  313. complete(&intr->read_regs.completion);
  314. goto out;
  315. }
  316. out:
  317. spin_unlock(&intr->lock);
  318. }
  319. static void int_urb_complete(struct urb *urb)
  320. {
  321. int r;
  322. struct usb_int_header *hdr;
  323. switch (urb->status) {
  324. case 0:
  325. break;
  326. case -ESHUTDOWN:
  327. case -EINVAL:
  328. case -ENODEV:
  329. case -ENOENT:
  330. case -ECONNRESET:
  331. case -EPIPE:
  332. goto kfree;
  333. default:
  334. goto resubmit;
  335. }
  336. if (urb->actual_length < sizeof(hdr)) {
  337. dev_dbg_f(urb_dev(urb), "error: urb %p to small\n", urb);
  338. goto resubmit;
  339. }
  340. hdr = urb->transfer_buffer;
  341. if (hdr->type != USB_INT_TYPE) {
  342. dev_dbg_f(urb_dev(urb), "error: urb %p wrong type\n", urb);
  343. goto resubmit;
  344. }
  345. switch (hdr->id) {
  346. case USB_INT_ID_REGS:
  347. handle_regs_int(urb);
  348. break;
  349. case USB_INT_ID_RETRY_FAILED:
  350. zd_mac_tx_failed(zd_usb_to_hw(urb->context));
  351. break;
  352. default:
  353. dev_dbg_f(urb_dev(urb), "error: urb %p unknown id %x\n", urb,
  354. (unsigned int)hdr->id);
  355. goto resubmit;
  356. }
  357. resubmit:
  358. r = usb_submit_urb(urb, GFP_ATOMIC);
  359. if (r) {
  360. dev_dbg_f(urb_dev(urb), "resubmit urb %p\n", urb);
  361. goto kfree;
  362. }
  363. return;
  364. kfree:
  365. kfree(urb->transfer_buffer);
  366. }
  367. static inline int int_urb_interval(struct usb_device *udev)
  368. {
  369. switch (udev->speed) {
  370. case USB_SPEED_HIGH:
  371. return 4;
  372. case USB_SPEED_LOW:
  373. return 10;
  374. case USB_SPEED_FULL:
  375. default:
  376. return 1;
  377. }
  378. }
  379. static inline int usb_int_enabled(struct zd_usb *usb)
  380. {
  381. unsigned long flags;
  382. struct zd_usb_interrupt *intr = &usb->intr;
  383. struct urb *urb;
  384. spin_lock_irqsave(&intr->lock, flags);
  385. urb = intr->urb;
  386. spin_unlock_irqrestore(&intr->lock, flags);
  387. return urb != NULL;
  388. }
  389. int zd_usb_enable_int(struct zd_usb *usb)
  390. {
  391. int r;
  392. struct usb_device *udev;
  393. struct zd_usb_interrupt *intr = &usb->intr;
  394. void *transfer_buffer = NULL;
  395. struct urb *urb;
  396. dev_dbg_f(zd_usb_dev(usb), "\n");
  397. urb = usb_alloc_urb(0, GFP_KERNEL);
  398. if (!urb) {
  399. r = -ENOMEM;
  400. goto out;
  401. }
  402. ZD_ASSERT(!irqs_disabled());
  403. spin_lock_irq(&intr->lock);
  404. if (intr->urb) {
  405. spin_unlock_irq(&intr->lock);
  406. r = 0;
  407. goto error_free_urb;
  408. }
  409. intr->urb = urb;
  410. spin_unlock_irq(&intr->lock);
  411. /* TODO: make it a DMA buffer */
  412. r = -ENOMEM;
  413. transfer_buffer = kmalloc(USB_MAX_EP_INT_BUFFER, GFP_KERNEL);
  414. if (!transfer_buffer) {
  415. dev_dbg_f(zd_usb_dev(usb),
  416. "couldn't allocate transfer_buffer\n");
  417. goto error_set_urb_null;
  418. }
  419. udev = zd_usb_to_usbdev(usb);
  420. usb_fill_int_urb(urb, udev, usb_rcvintpipe(udev, EP_INT_IN),
  421. transfer_buffer, USB_MAX_EP_INT_BUFFER,
  422. int_urb_complete, usb,
  423. intr->interval);
  424. dev_dbg_f(zd_usb_dev(usb), "submit urb %p\n", intr->urb);
  425. r = usb_submit_urb(urb, GFP_KERNEL);
  426. if (r) {
  427. dev_dbg_f(zd_usb_dev(usb),
  428. "Couldn't submit urb. Error number %d\n", r);
  429. goto error;
  430. }
  431. return 0;
  432. error:
  433. kfree(transfer_buffer);
  434. error_set_urb_null:
  435. spin_lock_irq(&intr->lock);
  436. intr->urb = NULL;
  437. spin_unlock_irq(&intr->lock);
  438. error_free_urb:
  439. usb_free_urb(urb);
  440. out:
  441. return r;
  442. }
  443. void zd_usb_disable_int(struct zd_usb *usb)
  444. {
  445. unsigned long flags;
  446. struct zd_usb_interrupt *intr = &usb->intr;
  447. struct urb *urb;
  448. spin_lock_irqsave(&intr->lock, flags);
  449. urb = intr->urb;
  450. if (!urb) {
  451. spin_unlock_irqrestore(&intr->lock, flags);
  452. return;
  453. }
  454. intr->urb = NULL;
  455. spin_unlock_irqrestore(&intr->lock, flags);
  456. usb_kill_urb(urb);
  457. dev_dbg_f(zd_usb_dev(usb), "urb %p killed\n", urb);
  458. usb_free_urb(urb);
  459. }
  460. static void handle_rx_packet(struct zd_usb *usb, const u8 *buffer,
  461. unsigned int length)
  462. {
  463. int i;
  464. const struct rx_length_info *length_info;
  465. if (length < sizeof(struct rx_length_info)) {
  466. /* It's not a complete packet anyhow. */
  467. return;
  468. }
  469. length_info = (struct rx_length_info *)
  470. (buffer + length - sizeof(struct rx_length_info));
  471. /* It might be that three frames are merged into a single URB
  472. * transaction. We have to check for the length info tag.
  473. *
  474. * While testing we discovered that length_info might be unaligned,
  475. * because if USB transactions are merged, the last packet will not
  476. * be padded. Unaligned access might also happen if the length_info
  477. * structure is not present.
  478. */
  479. if (get_unaligned_le16(&length_info->tag) == RX_LENGTH_INFO_TAG)
  480. {
  481. unsigned int l, k, n;
  482. for (i = 0, l = 0;; i++) {
  483. k = get_unaligned_le16(&length_info->length[i]);
  484. if (k == 0)
  485. return;
  486. n = l+k;
  487. if (n > length)
  488. return;
  489. zd_mac_rx(zd_usb_to_hw(usb), buffer+l, k);
  490. if (i >= 2)
  491. return;
  492. l = (n+3) & ~3;
  493. }
  494. } else {
  495. zd_mac_rx(zd_usb_to_hw(usb), buffer, length);
  496. }
  497. }
  498. static void rx_urb_complete(struct urb *urb)
  499. {
  500. struct zd_usb *usb;
  501. struct zd_usb_rx *rx;
  502. const u8 *buffer;
  503. unsigned int length;
  504. switch (urb->status) {
  505. case 0:
  506. break;
  507. case -ESHUTDOWN:
  508. case -EINVAL:
  509. case -ENODEV:
  510. case -ENOENT:
  511. case -ECONNRESET:
  512. case -EPIPE:
  513. return;
  514. default:
  515. dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status);
  516. goto resubmit;
  517. }
  518. buffer = urb->transfer_buffer;
  519. length = urb->actual_length;
  520. usb = urb->context;
  521. rx = &usb->rx;
  522. if (length%rx->usb_packet_size > rx->usb_packet_size-4) {
  523. /* If there is an old first fragment, we don't care. */
  524. dev_dbg_f(urb_dev(urb), "*** first fragment ***\n");
  525. ZD_ASSERT(length <= ARRAY_SIZE(rx->fragment));
  526. spin_lock(&rx->lock);
  527. memcpy(rx->fragment, buffer, length);
  528. rx->fragment_length = length;
  529. spin_unlock(&rx->lock);
  530. goto resubmit;
  531. }
  532. spin_lock(&rx->lock);
  533. if (rx->fragment_length > 0) {
  534. /* We are on a second fragment, we believe */
  535. ZD_ASSERT(length + rx->fragment_length <=
  536. ARRAY_SIZE(rx->fragment));
  537. dev_dbg_f(urb_dev(urb), "*** second fragment ***\n");
  538. memcpy(rx->fragment+rx->fragment_length, buffer, length);
  539. handle_rx_packet(usb, rx->fragment,
  540. rx->fragment_length + length);
  541. rx->fragment_length = 0;
  542. spin_unlock(&rx->lock);
  543. } else {
  544. spin_unlock(&rx->lock);
  545. handle_rx_packet(usb, buffer, length);
  546. }
  547. resubmit:
  548. usb_submit_urb(urb, GFP_ATOMIC);
  549. }
  550. static struct urb *alloc_rx_urb(struct zd_usb *usb)
  551. {
  552. struct usb_device *udev = zd_usb_to_usbdev(usb);
  553. struct urb *urb;
  554. void *buffer;
  555. urb = usb_alloc_urb(0, GFP_KERNEL);
  556. if (!urb)
  557. return NULL;
  558. buffer = usb_buffer_alloc(udev, USB_MAX_RX_SIZE, GFP_KERNEL,
  559. &urb->transfer_dma);
  560. if (!buffer) {
  561. usb_free_urb(urb);
  562. return NULL;
  563. }
  564. usb_fill_bulk_urb(urb, udev, usb_rcvbulkpipe(udev, EP_DATA_IN),
  565. buffer, USB_MAX_RX_SIZE,
  566. rx_urb_complete, usb);
  567. urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
  568. return urb;
  569. }
  570. static void free_rx_urb(struct urb *urb)
  571. {
  572. if (!urb)
  573. return;
  574. usb_buffer_free(urb->dev, urb->transfer_buffer_length,
  575. urb->transfer_buffer, urb->transfer_dma);
  576. usb_free_urb(urb);
  577. }
  578. int zd_usb_enable_rx(struct zd_usb *usb)
  579. {
  580. int i, r;
  581. struct zd_usb_rx *rx = &usb->rx;
  582. struct urb **urbs;
  583. dev_dbg_f(zd_usb_dev(usb), "\n");
  584. r = -ENOMEM;
  585. urbs = kcalloc(RX_URBS_COUNT, sizeof(struct urb *), GFP_KERNEL);
  586. if (!urbs)
  587. goto error;
  588. for (i = 0; i < RX_URBS_COUNT; i++) {
  589. urbs[i] = alloc_rx_urb(usb);
  590. if (!urbs[i])
  591. goto error;
  592. }
  593. ZD_ASSERT(!irqs_disabled());
  594. spin_lock_irq(&rx->lock);
  595. if (rx->urbs) {
  596. spin_unlock_irq(&rx->lock);
  597. r = 0;
  598. goto error;
  599. }
  600. rx->urbs = urbs;
  601. rx->urbs_count = RX_URBS_COUNT;
  602. spin_unlock_irq(&rx->lock);
  603. for (i = 0; i < RX_URBS_COUNT; i++) {
  604. r = usb_submit_urb(urbs[i], GFP_KERNEL);
  605. if (r)
  606. goto error_submit;
  607. }
  608. return 0;
  609. error_submit:
  610. for (i = 0; i < RX_URBS_COUNT; i++) {
  611. usb_kill_urb(urbs[i]);
  612. }
  613. spin_lock_irq(&rx->lock);
  614. rx->urbs = NULL;
  615. rx->urbs_count = 0;
  616. spin_unlock_irq(&rx->lock);
  617. error:
  618. if (urbs) {
  619. for (i = 0; i < RX_URBS_COUNT; i++)
  620. free_rx_urb(urbs[i]);
  621. }
  622. return r;
  623. }
  624. void zd_usb_disable_rx(struct zd_usb *usb)
  625. {
  626. int i;
  627. unsigned long flags;
  628. struct urb **urbs;
  629. unsigned int count;
  630. struct zd_usb_rx *rx = &usb->rx;
  631. spin_lock_irqsave(&rx->lock, flags);
  632. urbs = rx->urbs;
  633. count = rx->urbs_count;
  634. spin_unlock_irqrestore(&rx->lock, flags);
  635. if (!urbs)
  636. return;
  637. for (i = 0; i < count; i++) {
  638. usb_kill_urb(urbs[i]);
  639. free_rx_urb(urbs[i]);
  640. }
  641. kfree(urbs);
  642. spin_lock_irqsave(&rx->lock, flags);
  643. rx->urbs = NULL;
  644. rx->urbs_count = 0;
  645. spin_unlock_irqrestore(&rx->lock, flags);
  646. }
  647. /**
  648. * zd_usb_disable_tx - disable transmission
  649. * @usb: the zd1211rw-private USB structure
  650. *
  651. * Frees all URBs in the free list and marks the transmission as disabled.
  652. */
  653. void zd_usb_disable_tx(struct zd_usb *usb)
  654. {
  655. struct zd_usb_tx *tx = &usb->tx;
  656. unsigned long flags;
  657. struct list_head *pos, *n;
  658. spin_lock_irqsave(&tx->lock, flags);
  659. list_for_each_safe(pos, n, &tx->free_urb_list) {
  660. list_del(pos);
  661. usb_free_urb(list_entry(pos, struct urb, urb_list));
  662. }
  663. tx->enabled = 0;
  664. tx->submitted_urbs = 0;
  665. /* The stopped state is ignored, relying on ieee80211_wake_queues()
  666. * in a potentionally following zd_usb_enable_tx().
  667. */
  668. spin_unlock_irqrestore(&tx->lock, flags);
  669. }
  670. /**
  671. * zd_usb_enable_tx - enables transmission
  672. * @usb: a &struct zd_usb pointer
  673. *
  674. * This function enables transmission and prepares the &zd_usb_tx data
  675. * structure.
  676. */
  677. void zd_usb_enable_tx(struct zd_usb *usb)
  678. {
  679. unsigned long flags;
  680. struct zd_usb_tx *tx = &usb->tx;
  681. spin_lock_irqsave(&tx->lock, flags);
  682. tx->enabled = 1;
  683. tx->submitted_urbs = 0;
  684. ieee80211_wake_queues(zd_usb_to_hw(usb));
  685. tx->stopped = 0;
  686. spin_unlock_irqrestore(&tx->lock, flags);
  687. }
  688. /**
  689. * alloc_tx_urb - provides an tx URB
  690. * @usb: a &struct zd_usb pointer
  691. *
  692. * Allocates a new URB. If possible takes the urb from the free list in
  693. * usb->tx.
  694. */
  695. static struct urb *alloc_tx_urb(struct zd_usb *usb)
  696. {
  697. struct zd_usb_tx *tx = &usb->tx;
  698. unsigned long flags;
  699. struct list_head *entry;
  700. struct urb *urb;
  701. spin_lock_irqsave(&tx->lock, flags);
  702. if (list_empty(&tx->free_urb_list)) {
  703. urb = usb_alloc_urb(0, GFP_ATOMIC);
  704. goto out;
  705. }
  706. entry = tx->free_urb_list.next;
  707. list_del(entry);
  708. urb = list_entry(entry, struct urb, urb_list);
  709. out:
  710. spin_unlock_irqrestore(&tx->lock, flags);
  711. return urb;
  712. }
  713. /**
  714. * free_tx_urb - frees a used tx URB
  715. * @usb: a &struct zd_usb pointer
  716. * @urb: URB to be freed
  717. *
  718. * Frees the the transmission URB, which means to put it on the free URB
  719. * list.
  720. */
  721. static void free_tx_urb(struct zd_usb *usb, struct urb *urb)
  722. {
  723. struct zd_usb_tx *tx = &usb->tx;
  724. unsigned long flags;
  725. spin_lock_irqsave(&tx->lock, flags);
  726. if (!tx->enabled) {
  727. usb_free_urb(urb);
  728. goto out;
  729. }
  730. list_add(&urb->urb_list, &tx->free_urb_list);
  731. out:
  732. spin_unlock_irqrestore(&tx->lock, flags);
  733. }
  734. static void tx_dec_submitted_urbs(struct zd_usb *usb)
  735. {
  736. struct zd_usb_tx *tx = &usb->tx;
  737. unsigned long flags;
  738. spin_lock_irqsave(&tx->lock, flags);
  739. --tx->submitted_urbs;
  740. if (tx->stopped && tx->submitted_urbs <= ZD_USB_TX_LOW) {
  741. ieee80211_wake_queues(zd_usb_to_hw(usb));
  742. tx->stopped = 0;
  743. }
  744. spin_unlock_irqrestore(&tx->lock, flags);
  745. }
  746. static void tx_inc_submitted_urbs(struct zd_usb *usb)
  747. {
  748. struct zd_usb_tx *tx = &usb->tx;
  749. unsigned long flags;
  750. spin_lock_irqsave(&tx->lock, flags);
  751. ++tx->submitted_urbs;
  752. if (!tx->stopped && tx->submitted_urbs > ZD_USB_TX_HIGH) {
  753. ieee80211_stop_queues(zd_usb_to_hw(usb));
  754. tx->stopped = 1;
  755. }
  756. spin_unlock_irqrestore(&tx->lock, flags);
  757. }
  758. /**
  759. * tx_urb_complete - completes the execution of an URB
  760. * @urb: a URB
  761. *
  762. * This function is called if the URB has been transferred to a device or an
  763. * error has happened.
  764. */
  765. static void tx_urb_complete(struct urb *urb)
  766. {
  767. int r;
  768. struct sk_buff *skb;
  769. struct zd_tx_skb_control_block *cb;
  770. struct zd_usb *usb;
  771. switch (urb->status) {
  772. case 0:
  773. break;
  774. case -ESHUTDOWN:
  775. case -EINVAL:
  776. case -ENODEV:
  777. case -ENOENT:
  778. case -ECONNRESET:
  779. case -EPIPE:
  780. dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status);
  781. break;
  782. default:
  783. dev_dbg_f(urb_dev(urb), "urb %p error %d\n", urb, urb->status);
  784. goto resubmit;
  785. }
  786. free_urb:
  787. skb = (struct sk_buff *)urb->context;
  788. /*
  789. * grab 'usb' pointer before handing off the skb (since
  790. * it might be freed by zd_mac_tx_to_dev or mac80211)
  791. */
  792. cb = (struct zd_tx_skb_control_block *)skb->cb;
  793. usb = &zd_hw_mac(cb->hw)->chip.usb;
  794. zd_mac_tx_to_dev(skb, urb->status);
  795. free_tx_urb(usb, urb);
  796. tx_dec_submitted_urbs(usb);
  797. return;
  798. resubmit:
  799. r = usb_submit_urb(urb, GFP_ATOMIC);
  800. if (r) {
  801. dev_dbg_f(urb_dev(urb), "error resubmit urb %p %d\n", urb, r);
  802. goto free_urb;
  803. }
  804. }
  805. /**
  806. * zd_usb_tx: initiates transfer of a frame of the device
  807. *
  808. * @usb: the zd1211rw-private USB structure
  809. * @skb: a &struct sk_buff pointer
  810. *
  811. * This function tranmits a frame to the device. It doesn't wait for
  812. * completion. The frame must contain the control set and have all the
  813. * control set information available.
  814. *
  815. * The function returns 0 if the transfer has been successfully initiated.
  816. */
  817. int zd_usb_tx(struct zd_usb *usb, struct sk_buff *skb)
  818. {
  819. int r;
  820. struct usb_device *udev = zd_usb_to_usbdev(usb);
  821. struct urb *urb;
  822. urb = alloc_tx_urb(usb);
  823. if (!urb) {
  824. r = -ENOMEM;
  825. goto out;
  826. }
  827. usb_fill_bulk_urb(urb, udev, usb_sndbulkpipe(udev, EP_DATA_OUT),
  828. skb->data, skb->len, tx_urb_complete, skb);
  829. r = usb_submit_urb(urb, GFP_ATOMIC);
  830. if (r)
  831. goto error;
  832. tx_inc_submitted_urbs(usb);
  833. return 0;
  834. error:
  835. free_tx_urb(usb, urb);
  836. out:
  837. return r;
  838. }
  839. static inline void init_usb_interrupt(struct zd_usb *usb)
  840. {
  841. struct zd_usb_interrupt *intr = &usb->intr;
  842. spin_lock_init(&intr->lock);
  843. intr->interval = int_urb_interval(zd_usb_to_usbdev(usb));
  844. init_completion(&intr->read_regs.completion);
  845. intr->read_regs.cr_int_addr = cpu_to_le16((u16)CR_INTERRUPT);
  846. }
  847. static inline void init_usb_rx(struct zd_usb *usb)
  848. {
  849. struct zd_usb_rx *rx = &usb->rx;
  850. spin_lock_init(&rx->lock);
  851. if (interface_to_usbdev(usb->intf)->speed == USB_SPEED_HIGH) {
  852. rx->usb_packet_size = 512;
  853. } else {
  854. rx->usb_packet_size = 64;
  855. }
  856. ZD_ASSERT(rx->fragment_length == 0);
  857. }
  858. static inline void init_usb_tx(struct zd_usb *usb)
  859. {
  860. struct zd_usb_tx *tx = &usb->tx;
  861. spin_lock_init(&tx->lock);
  862. tx->enabled = 0;
  863. tx->stopped = 0;
  864. INIT_LIST_HEAD(&tx->free_urb_list);
  865. tx->submitted_urbs = 0;
  866. }
  867. void zd_usb_init(struct zd_usb *usb, struct ieee80211_hw *hw,
  868. struct usb_interface *intf)
  869. {
  870. memset(usb, 0, sizeof(*usb));
  871. usb->intf = usb_get_intf(intf);
  872. usb_set_intfdata(usb->intf, hw);
  873. init_usb_interrupt(usb);
  874. init_usb_tx(usb);
  875. init_usb_rx(usb);
  876. }
  877. void zd_usb_clear(struct zd_usb *usb)
  878. {
  879. usb_set_intfdata(usb->intf, NULL);
  880. usb_put_intf(usb->intf);
  881. ZD_MEMCLEAR(usb, sizeof(*usb));
  882. /* FIXME: usb_interrupt, usb_tx, usb_rx? */
  883. }
  884. static const char *speed(enum usb_device_speed speed)
  885. {
  886. switch (speed) {
  887. case USB_SPEED_LOW:
  888. return "low";
  889. case USB_SPEED_FULL:
  890. return "full";
  891. case USB_SPEED_HIGH:
  892. return "high";
  893. default:
  894. return "unknown speed";
  895. }
  896. }
  897. static int scnprint_id(struct usb_device *udev, char *buffer, size_t size)
  898. {
  899. return scnprintf(buffer, size, "%04hx:%04hx v%04hx %s",
  900. le16_to_cpu(udev->descriptor.idVendor),
  901. le16_to_cpu(udev->descriptor.idProduct),
  902. get_bcdDevice(udev),
  903. speed(udev->speed));
  904. }
  905. int zd_usb_scnprint_id(struct zd_usb *usb, char *buffer, size_t size)
  906. {
  907. struct usb_device *udev = interface_to_usbdev(usb->intf);
  908. return scnprint_id(udev, buffer, size);
  909. }
  910. #ifdef DEBUG
  911. static void print_id(struct usb_device *udev)
  912. {
  913. char buffer[40];
  914. scnprint_id(udev, buffer, sizeof(buffer));
  915. buffer[sizeof(buffer)-1] = 0;
  916. dev_dbg_f(&udev->dev, "%s\n", buffer);
  917. }
  918. #else
  919. #define print_id(udev) do { } while (0)
  920. #endif
  921. static int eject_installer(struct usb_interface *intf)
  922. {
  923. struct usb_device *udev = interface_to_usbdev(intf);
  924. struct usb_host_interface *iface_desc = &intf->altsetting[0];
  925. struct usb_endpoint_descriptor *endpoint;
  926. unsigned char *cmd;
  927. u8 bulk_out_ep;
  928. int r;
  929. /* Find bulk out endpoint */
  930. endpoint = &iface_desc->endpoint[1].desc;
  931. if ((endpoint->bEndpointAddress & USB_TYPE_MASK) == USB_DIR_OUT &&
  932. (endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
  933. USB_ENDPOINT_XFER_BULK) {
  934. bulk_out_ep = endpoint->bEndpointAddress;
  935. } else {
  936. dev_err(&udev->dev,
  937. "zd1211rw: Could not find bulk out endpoint\n");
  938. return -ENODEV;
  939. }
  940. cmd = kzalloc(31, GFP_KERNEL);
  941. if (cmd == NULL)
  942. return -ENODEV;
  943. /* USB bulk command block */
  944. cmd[0] = 0x55; /* bulk command signature */
  945. cmd[1] = 0x53; /* bulk command signature */
  946. cmd[2] = 0x42; /* bulk command signature */
  947. cmd[3] = 0x43; /* bulk command signature */
  948. cmd[14] = 6; /* command length */
  949. cmd[15] = 0x1b; /* SCSI command: START STOP UNIT */
  950. cmd[19] = 0x2; /* eject disc */
  951. dev_info(&udev->dev, "Ejecting virtual installer media...\n");
  952. r = usb_bulk_msg(udev, usb_sndbulkpipe(udev, bulk_out_ep),
  953. cmd, 31, NULL, 2000);
  954. kfree(cmd);
  955. if (r)
  956. return r;
  957. /* At this point, the device disconnects and reconnects with the real
  958. * ID numbers. */
  959. usb_set_intfdata(intf, NULL);
  960. return 0;
  961. }
  962. int zd_usb_init_hw(struct zd_usb *usb)
  963. {
  964. int r;
  965. struct zd_mac *mac = zd_usb_to_mac(usb);
  966. dev_dbg_f(zd_usb_dev(usb), "\n");
  967. r = upload_firmware(usb);
  968. if (r) {
  969. dev_err(zd_usb_dev(usb),
  970. "couldn't load firmware. Error number %d\n", r);
  971. return r;
  972. }
  973. r = usb_reset_configuration(zd_usb_to_usbdev(usb));
  974. if (r) {
  975. dev_dbg_f(zd_usb_dev(usb),
  976. "couldn't reset configuration. Error number %d\n", r);
  977. return r;
  978. }
  979. r = zd_mac_init_hw(mac->hw);
  980. if (r) {
  981. dev_dbg_f(zd_usb_dev(usb),
  982. "couldn't initialize mac. Error number %d\n", r);
  983. return r;
  984. }
  985. usb->initialized = 1;
  986. return 0;
  987. }
  988. static int probe(struct usb_interface *intf, const struct usb_device_id *id)
  989. {
  990. int r;
  991. struct usb_device *udev = interface_to_usbdev(intf);
  992. struct zd_usb *usb;
  993. struct ieee80211_hw *hw = NULL;
  994. print_id(udev);
  995. if (id->driver_info & DEVICE_INSTALLER)
  996. return eject_installer(intf);
  997. switch (udev->speed) {
  998. case USB_SPEED_LOW:
  999. case USB_SPEED_FULL:
  1000. case USB_SPEED_HIGH:
  1001. break;
  1002. default:
  1003. dev_dbg_f(&intf->dev, "Unknown USB speed\n");
  1004. r = -ENODEV;
  1005. goto error;
  1006. }
  1007. r = usb_reset_device(udev);
  1008. if (r) {
  1009. dev_err(&intf->dev,
  1010. "couldn't reset usb device. Error number %d\n", r);
  1011. goto error;
  1012. }
  1013. hw = zd_mac_alloc_hw(intf);
  1014. if (hw == NULL) {
  1015. r = -ENOMEM;
  1016. goto error;
  1017. }
  1018. usb = &zd_hw_mac(hw)->chip.usb;
  1019. usb->is_zd1211b = (id->driver_info == DEVICE_ZD1211B) != 0;
  1020. r = zd_mac_preinit_hw(hw);
  1021. if (r) {
  1022. dev_dbg_f(&intf->dev,
  1023. "couldn't initialize mac. Error number %d\n", r);
  1024. goto error;
  1025. }
  1026. r = ieee80211_register_hw(hw);
  1027. if (r) {
  1028. dev_dbg_f(&intf->dev,
  1029. "couldn't register device. Error number %d\n", r);
  1030. goto error;
  1031. }
  1032. dev_dbg_f(&intf->dev, "successful\n");
  1033. dev_info(&intf->dev, "%s\n", wiphy_name(hw->wiphy));
  1034. return 0;
  1035. error:
  1036. usb_reset_device(interface_to_usbdev(intf));
  1037. if (hw) {
  1038. zd_mac_clear(zd_hw_mac(hw));
  1039. ieee80211_free_hw(hw);
  1040. }
  1041. return r;
  1042. }
  1043. static void disconnect(struct usb_interface *intf)
  1044. {
  1045. struct ieee80211_hw *hw = zd_intf_to_hw(intf);
  1046. struct zd_mac *mac;
  1047. struct zd_usb *usb;
  1048. /* Either something really bad happened, or we're just dealing with
  1049. * a DEVICE_INSTALLER. */
  1050. if (hw == NULL)
  1051. return;
  1052. mac = zd_hw_mac(hw);
  1053. usb = &mac->chip.usb;
  1054. dev_dbg_f(zd_usb_dev(usb), "\n");
  1055. ieee80211_unregister_hw(hw);
  1056. /* Just in case something has gone wrong! */
  1057. zd_usb_disable_rx(usb);
  1058. zd_usb_disable_int(usb);
  1059. /* If the disconnect has been caused by a removal of the
  1060. * driver module, the reset allows reloading of the driver. If the
  1061. * reset will not be executed here, the upload of the firmware in the
  1062. * probe function caused by the reloading of the driver will fail.
  1063. */
  1064. usb_reset_device(interface_to_usbdev(intf));
  1065. zd_mac_clear(mac);
  1066. ieee80211_free_hw(hw);
  1067. dev_dbg(&intf->dev, "disconnected\n");
  1068. }
  1069. static struct usb_driver driver = {
  1070. .name = KBUILD_MODNAME,
  1071. .id_table = usb_ids,
  1072. .probe = probe,
  1073. .disconnect = disconnect,
  1074. };
  1075. struct workqueue_struct *zd_workqueue;
  1076. static int __init usb_init(void)
  1077. {
  1078. int r;
  1079. pr_debug("%s usb_init()\n", driver.name);
  1080. zd_workqueue = create_singlethread_workqueue(driver.name);
  1081. if (zd_workqueue == NULL) {
  1082. printk(KERN_ERR "%s couldn't create workqueue\n", driver.name);
  1083. return -ENOMEM;
  1084. }
  1085. r = usb_register(&driver);
  1086. if (r) {
  1087. destroy_workqueue(zd_workqueue);
  1088. printk(KERN_ERR "%s usb_register() failed. Error number %d\n",
  1089. driver.name, r);
  1090. return r;
  1091. }
  1092. pr_debug("%s initialized\n", driver.name);
  1093. return 0;
  1094. }
  1095. static void __exit usb_exit(void)
  1096. {
  1097. pr_debug("%s usb_exit()\n", driver.name);
  1098. usb_deregister(&driver);
  1099. destroy_workqueue(zd_workqueue);
  1100. }
  1101. module_init(usb_init);
  1102. module_exit(usb_exit);
  1103. static int usb_int_regs_length(unsigned int count)
  1104. {
  1105. return sizeof(struct usb_int_regs) + count * sizeof(struct reg_data);
  1106. }
  1107. static void prepare_read_regs_int(struct zd_usb *usb)
  1108. {
  1109. struct zd_usb_interrupt *intr = &usb->intr;
  1110. spin_lock_irq(&intr->lock);
  1111. intr->read_regs_enabled = 1;
  1112. INIT_COMPLETION(intr->read_regs.completion);
  1113. spin_unlock_irq(&intr->lock);
  1114. }
  1115. static void disable_read_regs_int(struct zd_usb *usb)
  1116. {
  1117. struct zd_usb_interrupt *intr = &usb->intr;
  1118. spin_lock_irq(&intr->lock);
  1119. intr->read_regs_enabled = 0;
  1120. spin_unlock_irq(&intr->lock);
  1121. }
  1122. static int get_results(struct zd_usb *usb, u16 *values,
  1123. struct usb_req_read_regs *req, unsigned int count)
  1124. {
  1125. int r;
  1126. int i;
  1127. struct zd_usb_interrupt *intr = &usb->intr;
  1128. struct read_regs_int *rr = &intr->read_regs;
  1129. struct usb_int_regs *regs = (struct usb_int_regs *)rr->buffer;
  1130. spin_lock_irq(&intr->lock);
  1131. r = -EIO;
  1132. /* The created block size seems to be larger than expected.
  1133. * However results appear to be correct.
  1134. */
  1135. if (rr->length < usb_int_regs_length(count)) {
  1136. dev_dbg_f(zd_usb_dev(usb),
  1137. "error: actual length %d less than expected %d\n",
  1138. rr->length, usb_int_regs_length(count));
  1139. goto error_unlock;
  1140. }
  1141. if (rr->length > sizeof(rr->buffer)) {
  1142. dev_dbg_f(zd_usb_dev(usb),
  1143. "error: actual length %d exceeds buffer size %zu\n",
  1144. rr->length, sizeof(rr->buffer));
  1145. goto error_unlock;
  1146. }
  1147. for (i = 0; i < count; i++) {
  1148. struct reg_data *rd = &regs->regs[i];
  1149. if (rd->addr != req->addr[i]) {
  1150. dev_dbg_f(zd_usb_dev(usb),
  1151. "rd[%d] addr %#06hx expected %#06hx\n", i,
  1152. le16_to_cpu(rd->addr),
  1153. le16_to_cpu(req->addr[i]));
  1154. goto error_unlock;
  1155. }
  1156. values[i] = le16_to_cpu(rd->value);
  1157. }
  1158. r = 0;
  1159. error_unlock:
  1160. spin_unlock_irq(&intr->lock);
  1161. return r;
  1162. }
  1163. int zd_usb_ioread16v(struct zd_usb *usb, u16 *values,
  1164. const zd_addr_t *addresses, unsigned int count)
  1165. {
  1166. int r;
  1167. int i, req_len, actual_req_len;
  1168. struct usb_device *udev;
  1169. struct usb_req_read_regs *req = NULL;
  1170. unsigned long timeout;
  1171. if (count < 1) {
  1172. dev_dbg_f(zd_usb_dev(usb), "error: count is zero\n");
  1173. return -EINVAL;
  1174. }
  1175. if (count > USB_MAX_IOREAD16_COUNT) {
  1176. dev_dbg_f(zd_usb_dev(usb),
  1177. "error: count %u exceeds possible max %u\n",
  1178. count, USB_MAX_IOREAD16_COUNT);
  1179. return -EINVAL;
  1180. }
  1181. if (in_atomic()) {
  1182. dev_dbg_f(zd_usb_dev(usb),
  1183. "error: io in atomic context not supported\n");
  1184. return -EWOULDBLOCK;
  1185. }
  1186. if (!usb_int_enabled(usb)) {
  1187. dev_dbg_f(zd_usb_dev(usb),
  1188. "error: usb interrupt not enabled\n");
  1189. return -EWOULDBLOCK;
  1190. }
  1191. req_len = sizeof(struct usb_req_read_regs) + count * sizeof(__le16);
  1192. req = kmalloc(req_len, GFP_KERNEL);
  1193. if (!req)
  1194. return -ENOMEM;
  1195. req->id = cpu_to_le16(USB_REQ_READ_REGS);
  1196. for (i = 0; i < count; i++)
  1197. req->addr[i] = cpu_to_le16((u16)addresses[i]);
  1198. udev = zd_usb_to_usbdev(usb);
  1199. prepare_read_regs_int(usb);
  1200. r = usb_bulk_msg(udev, usb_sndbulkpipe(udev, EP_REGS_OUT),
  1201. req, req_len, &actual_req_len, 1000 /* ms */);
  1202. if (r) {
  1203. dev_dbg_f(zd_usb_dev(usb),
  1204. "error in usb_bulk_msg(). Error number %d\n", r);
  1205. goto error;
  1206. }
  1207. if (req_len != actual_req_len) {
  1208. dev_dbg_f(zd_usb_dev(usb), "error in usb_bulk_msg()\n"
  1209. " req_len %d != actual_req_len %d\n",
  1210. req_len, actual_req_len);
  1211. r = -EIO;
  1212. goto error;
  1213. }
  1214. timeout = wait_for_completion_timeout(&usb->intr.read_regs.completion,
  1215. msecs_to_jiffies(1000));
  1216. if (!timeout) {
  1217. disable_read_regs_int(usb);
  1218. dev_dbg_f(zd_usb_dev(usb), "read timed out\n");
  1219. r = -ETIMEDOUT;
  1220. goto error;
  1221. }
  1222. r = get_results(usb, values, req, count);
  1223. error:
  1224. kfree(req);
  1225. return r;
  1226. }
  1227. int zd_usb_iowrite16v(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs,
  1228. unsigned int count)
  1229. {
  1230. int r;
  1231. struct usb_device *udev;
  1232. struct usb_req_write_regs *req = NULL;
  1233. int i, req_len, actual_req_len;
  1234. if (count == 0)
  1235. return 0;
  1236. if (count > USB_MAX_IOWRITE16_COUNT) {
  1237. dev_dbg_f(zd_usb_dev(usb),
  1238. "error: count %u exceeds possible max %u\n",
  1239. count, USB_MAX_IOWRITE16_COUNT);
  1240. return -EINVAL;
  1241. }
  1242. if (in_atomic()) {
  1243. dev_dbg_f(zd_usb_dev(usb),
  1244. "error: io in atomic context not supported\n");
  1245. return -EWOULDBLOCK;
  1246. }
  1247. req_len = sizeof(struct usb_req_write_regs) +
  1248. count * sizeof(struct reg_data);
  1249. req = kmalloc(req_len, GFP_KERNEL);
  1250. if (!req)
  1251. return -ENOMEM;
  1252. req->id = cpu_to_le16(USB_REQ_WRITE_REGS);
  1253. for (i = 0; i < count; i++) {
  1254. struct reg_data *rw = &req->reg_writes[i];
  1255. rw->addr = cpu_to_le16((u16)ioreqs[i].addr);
  1256. rw->value = cpu_to_le16(ioreqs[i].value);
  1257. }
  1258. udev = zd_usb_to_usbdev(usb);
  1259. r = usb_bulk_msg(udev, usb_sndbulkpipe(udev, EP_REGS_OUT),
  1260. req, req_len, &actual_req_len, 1000 /* ms */);
  1261. if (r) {
  1262. dev_dbg_f(zd_usb_dev(usb),
  1263. "error in usb_bulk_msg(). Error number %d\n", r);
  1264. goto error;
  1265. }
  1266. if (req_len != actual_req_len) {
  1267. dev_dbg_f(zd_usb_dev(usb),
  1268. "error in usb_bulk_msg()"
  1269. " req_len %d != actual_req_len %d\n",
  1270. req_len, actual_req_len);
  1271. r = -EIO;
  1272. goto error;
  1273. }
  1274. /* FALL-THROUGH with r == 0 */
  1275. error:
  1276. kfree(req);
  1277. return r;
  1278. }
  1279. int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits)
  1280. {
  1281. int r;
  1282. struct usb_device *udev;
  1283. struct usb_req_rfwrite *req = NULL;
  1284. int i, req_len, actual_req_len;
  1285. u16 bit_value_template;
  1286. if (in_atomic()) {
  1287. dev_dbg_f(zd_usb_dev(usb),
  1288. "error: io in atomic context not supported\n");
  1289. return -EWOULDBLOCK;
  1290. }
  1291. if (bits < USB_MIN_RFWRITE_BIT_COUNT) {
  1292. dev_dbg_f(zd_usb_dev(usb),
  1293. "error: bits %d are smaller than"
  1294. " USB_MIN_RFWRITE_BIT_COUNT %d\n",
  1295. bits, USB_MIN_RFWRITE_BIT_COUNT);
  1296. return -EINVAL;
  1297. }
  1298. if (bits > USB_MAX_RFWRITE_BIT_COUNT) {
  1299. dev_dbg_f(zd_usb_dev(usb),
  1300. "error: bits %d exceed USB_MAX_RFWRITE_BIT_COUNT %d\n",
  1301. bits, USB_MAX_RFWRITE_BIT_COUNT);
  1302. return -EINVAL;
  1303. }
  1304. #ifdef DEBUG
  1305. if (value & (~0UL << bits)) {
  1306. dev_dbg_f(zd_usb_dev(usb),
  1307. "error: value %#09x has bits >= %d set\n",
  1308. value, bits);
  1309. return -EINVAL;
  1310. }
  1311. #endif /* DEBUG */
  1312. dev_dbg_f(zd_usb_dev(usb), "value %#09x bits %d\n", value, bits);
  1313. r = zd_usb_ioread16(usb, &bit_value_template, CR203);
  1314. if (r) {
  1315. dev_dbg_f(zd_usb_dev(usb),
  1316. "error %d: Couldn't read CR203\n", r);
  1317. goto out;
  1318. }
  1319. bit_value_template &= ~(RF_IF_LE|RF_CLK|RF_DATA);
  1320. req_len = sizeof(struct usb_req_rfwrite) + bits * sizeof(__le16);
  1321. req = kmalloc(req_len, GFP_KERNEL);
  1322. if (!req)
  1323. return -ENOMEM;
  1324. req->id = cpu_to_le16(USB_REQ_WRITE_RF);
  1325. /* 1: 3683a, but not used in ZYDAS driver */
  1326. req->value = cpu_to_le16(2);
  1327. req->bits = cpu_to_le16(bits);
  1328. for (i = 0; i < bits; i++) {
  1329. u16 bv = bit_value_template;
  1330. if (value & (1 << (bits-1-i)))
  1331. bv |= RF_DATA;
  1332. req->bit_values[i] = cpu_to_le16(bv);
  1333. }
  1334. udev = zd_usb_to_usbdev(usb);
  1335. r = usb_bulk_msg(udev, usb_sndbulkpipe(udev, EP_REGS_OUT),
  1336. req, req_len, &actual_req_len, 1000 /* ms */);
  1337. if (r) {
  1338. dev_dbg_f(zd_usb_dev(usb),
  1339. "error in usb_bulk_msg(). Error number %d\n", r);
  1340. goto out;
  1341. }
  1342. if (req_len != actual_req_len) {
  1343. dev_dbg_f(zd_usb_dev(usb), "error in usb_bulk_msg()"
  1344. " req_len %d != actual_req_len %d\n",
  1345. req_len, actual_req_len);
  1346. r = -EIO;
  1347. goto out;
  1348. }
  1349. /* FALL-THROUGH with r == 0 */
  1350. out:
  1351. kfree(req);
  1352. return r;
  1353. }