esd_usb.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * CAN driver for esd electronics gmbh CAN-USB/2 and CAN-USB/Micro
  4. *
  5. * Copyright (C) 2010-2012 esd electronic system design gmbh, Matthias Fuchs <[email protected]>
  6. * Copyright (C) 2022 esd electronics gmbh, Frank Jungclaus <[email protected]>
  7. */
  8. #include <linux/ethtool.h>
  9. #include <linux/signal.h>
  10. #include <linux/slab.h>
  11. #include <linux/module.h>
  12. #include <linux/netdevice.h>
  13. #include <linux/usb.h>
  14. #include <linux/can.h>
  15. #include <linux/can/dev.h>
  16. #include <linux/can/error.h>
  17. MODULE_AUTHOR("Matthias Fuchs <[email protected]>");
  18. MODULE_AUTHOR("Frank Jungclaus <[email protected]>");
  19. MODULE_DESCRIPTION("CAN driver for esd electronics gmbh CAN-USB/2 and CAN-USB/Micro interfaces");
  20. MODULE_LICENSE("GPL v2");
  21. /* USB vendor and product ID */
  22. #define USB_ESDGMBH_VENDOR_ID 0x0ab4
  23. #define USB_CANUSB2_PRODUCT_ID 0x0010
  24. #define USB_CANUSBM_PRODUCT_ID 0x0011
  25. /* CAN controller clock frequencies */
  26. #define ESD_USB2_CAN_CLOCK 60000000
  27. #define ESD_USBM_CAN_CLOCK 36000000
  28. /* Maximum number of CAN nets */
  29. #define ESD_USB_MAX_NETS 2
  30. /* USB commands */
  31. #define CMD_VERSION 1 /* also used for VERSION_REPLY */
  32. #define CMD_CAN_RX 2 /* device to host only */
  33. #define CMD_CAN_TX 3 /* also used for TX_DONE */
  34. #define CMD_SETBAUD 4 /* also used for SETBAUD_REPLY */
  35. #define CMD_TS 5 /* also used for TS_REPLY */
  36. #define CMD_IDADD 6 /* also used for IDADD_REPLY */
  37. /* esd CAN message flags - dlc field */
  38. #define ESD_RTR 0x10
  39. /* esd CAN message flags - id field */
  40. #define ESD_EXTID 0x20000000
  41. #define ESD_EVENT 0x40000000
  42. #define ESD_IDMASK 0x1fffffff
  43. /* esd CAN event ids */
  44. #define ESD_EV_CAN_ERROR_EXT 2 /* CAN controller specific diagnostic data */
  45. /* baudrate message flags */
  46. #define ESD_USB_UBR 0x80000000
  47. #define ESD_USB_LOM 0x40000000
  48. #define ESD_USB_NO_BAUDRATE 0x7fffffff
  49. /* bit timing CAN-USB/2 */
  50. #define ESD_USB2_TSEG1_MIN 1
  51. #define ESD_USB2_TSEG1_MAX 16
  52. #define ESD_USB2_TSEG1_SHIFT 16
  53. #define ESD_USB2_TSEG2_MIN 1
  54. #define ESD_USB2_TSEG2_MAX 8
  55. #define ESD_USB2_TSEG2_SHIFT 20
  56. #define ESD_USB2_SJW_MAX 4
  57. #define ESD_USB2_SJW_SHIFT 14
  58. #define ESD_USBM_SJW_SHIFT 24
  59. #define ESD_USB2_BRP_MIN 1
  60. #define ESD_USB2_BRP_MAX 1024
  61. #define ESD_USB2_BRP_INC 1
  62. #define ESD_USB2_3_SAMPLES 0x00800000
  63. /* esd IDADD message */
  64. #define ESD_ID_ENABLE 0x80
  65. #define ESD_MAX_ID_SEGMENT 64
  66. /* SJA1000 ECC register (emulated by usb firmware) */
  67. #define SJA1000_ECC_SEG 0x1F
  68. #define SJA1000_ECC_DIR 0x20
  69. #define SJA1000_ECC_ERR 0x06
  70. #define SJA1000_ECC_BIT 0x00
  71. #define SJA1000_ECC_FORM 0x40
  72. #define SJA1000_ECC_STUFF 0x80
  73. #define SJA1000_ECC_MASK 0xc0
  74. /* esd bus state event codes */
  75. #define ESD_BUSSTATE_MASK 0xc0
  76. #define ESD_BUSSTATE_WARN 0x40
  77. #define ESD_BUSSTATE_ERRPASSIVE 0x80
  78. #define ESD_BUSSTATE_BUSOFF 0xc0
  79. #define RX_BUFFER_SIZE 1024
  80. #define MAX_RX_URBS 4
  81. #define MAX_TX_URBS 16 /* must be power of 2 */
  82. struct header_msg {
  83. u8 len; /* len is always the total message length in 32bit words */
  84. u8 cmd;
  85. u8 rsvd[2];
  86. };
  87. struct version_msg {
  88. u8 len;
  89. u8 cmd;
  90. u8 rsvd;
  91. u8 flags;
  92. __le32 drv_version;
  93. };
  94. struct version_reply_msg {
  95. u8 len;
  96. u8 cmd;
  97. u8 nets;
  98. u8 features;
  99. __le32 version;
  100. u8 name[16];
  101. __le32 rsvd;
  102. __le32 ts;
  103. };
  104. struct rx_msg {
  105. u8 len;
  106. u8 cmd;
  107. u8 net;
  108. u8 dlc;
  109. __le32 ts;
  110. __le32 id; /* upper 3 bits contain flags */
  111. u8 data[8];
  112. };
  113. struct tx_msg {
  114. u8 len;
  115. u8 cmd;
  116. u8 net;
  117. u8 dlc;
  118. u32 hnd; /* opaque handle, not used by device */
  119. __le32 id; /* upper 3 bits contain flags */
  120. u8 data[8];
  121. };
  122. struct tx_done_msg {
  123. u8 len;
  124. u8 cmd;
  125. u8 net;
  126. u8 status;
  127. u32 hnd; /* opaque handle, not used by device */
  128. __le32 ts;
  129. };
  130. struct id_filter_msg {
  131. u8 len;
  132. u8 cmd;
  133. u8 net;
  134. u8 option;
  135. __le32 mask[ESD_MAX_ID_SEGMENT + 1];
  136. };
  137. struct set_baudrate_msg {
  138. u8 len;
  139. u8 cmd;
  140. u8 net;
  141. u8 rsvd;
  142. __le32 baud;
  143. };
  144. /* Main message type used between library and application */
  145. struct __packed esd_usb_msg {
  146. union {
  147. struct header_msg hdr;
  148. struct version_msg version;
  149. struct version_reply_msg version_reply;
  150. struct rx_msg rx;
  151. struct tx_msg tx;
  152. struct tx_done_msg txdone;
  153. struct set_baudrate_msg setbaud;
  154. struct id_filter_msg filter;
  155. } msg;
  156. };
  157. static struct usb_device_id esd_usb_table[] = {
  158. {USB_DEVICE(USB_ESDGMBH_VENDOR_ID, USB_CANUSB2_PRODUCT_ID)},
  159. {USB_DEVICE(USB_ESDGMBH_VENDOR_ID, USB_CANUSBM_PRODUCT_ID)},
  160. {}
  161. };
  162. MODULE_DEVICE_TABLE(usb, esd_usb_table);
  163. struct esd_usb_net_priv;
  164. struct esd_tx_urb_context {
  165. struct esd_usb_net_priv *priv;
  166. u32 echo_index;
  167. };
  168. struct esd_usb {
  169. struct usb_device *udev;
  170. struct esd_usb_net_priv *nets[ESD_USB_MAX_NETS];
  171. struct usb_anchor rx_submitted;
  172. int net_count;
  173. u32 version;
  174. int rxinitdone;
  175. void *rxbuf[MAX_RX_URBS];
  176. dma_addr_t rxbuf_dma[MAX_RX_URBS];
  177. };
  178. struct esd_usb_net_priv {
  179. struct can_priv can; /* must be the first member */
  180. atomic_t active_tx_jobs;
  181. struct usb_anchor tx_submitted;
  182. struct esd_tx_urb_context tx_contexts[MAX_TX_URBS];
  183. struct esd_usb *usb;
  184. struct net_device *netdev;
  185. int index;
  186. u8 old_state;
  187. struct can_berr_counter bec;
  188. };
  189. static void esd_usb_rx_event(struct esd_usb_net_priv *priv,
  190. struct esd_usb_msg *msg)
  191. {
  192. struct net_device_stats *stats = &priv->netdev->stats;
  193. struct can_frame *cf;
  194. struct sk_buff *skb;
  195. u32 id = le32_to_cpu(msg->msg.rx.id) & ESD_IDMASK;
  196. if (id == ESD_EV_CAN_ERROR_EXT) {
  197. u8 state = msg->msg.rx.data[0];
  198. u8 ecc = msg->msg.rx.data[1];
  199. u8 rxerr = msg->msg.rx.data[2];
  200. u8 txerr = msg->msg.rx.data[3];
  201. netdev_dbg(priv->netdev,
  202. "CAN_ERR_EV_EXT: dlc=%#02x state=%02x ecc=%02x rec=%02x tec=%02x\n",
  203. msg->msg.rx.dlc, state, ecc, rxerr, txerr);
  204. skb = alloc_can_err_skb(priv->netdev, &cf);
  205. if (state != priv->old_state) {
  206. enum can_state tx_state, rx_state;
  207. enum can_state new_state = CAN_STATE_ERROR_ACTIVE;
  208. priv->old_state = state;
  209. switch (state & ESD_BUSSTATE_MASK) {
  210. case ESD_BUSSTATE_BUSOFF:
  211. new_state = CAN_STATE_BUS_OFF;
  212. can_bus_off(priv->netdev);
  213. break;
  214. case ESD_BUSSTATE_WARN:
  215. new_state = CAN_STATE_ERROR_WARNING;
  216. break;
  217. case ESD_BUSSTATE_ERRPASSIVE:
  218. new_state = CAN_STATE_ERROR_PASSIVE;
  219. break;
  220. default:
  221. new_state = CAN_STATE_ERROR_ACTIVE;
  222. txerr = 0;
  223. rxerr = 0;
  224. break;
  225. }
  226. if (new_state != priv->can.state) {
  227. tx_state = (txerr >= rxerr) ? new_state : 0;
  228. rx_state = (txerr <= rxerr) ? new_state : 0;
  229. can_change_state(priv->netdev, cf,
  230. tx_state, rx_state);
  231. }
  232. } else if (skb) {
  233. priv->can.can_stats.bus_error++;
  234. stats->rx_errors++;
  235. cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
  236. switch (ecc & SJA1000_ECC_MASK) {
  237. case SJA1000_ECC_BIT:
  238. cf->data[2] |= CAN_ERR_PROT_BIT;
  239. break;
  240. case SJA1000_ECC_FORM:
  241. cf->data[2] |= CAN_ERR_PROT_FORM;
  242. break;
  243. case SJA1000_ECC_STUFF:
  244. cf->data[2] |= CAN_ERR_PROT_STUFF;
  245. break;
  246. default:
  247. break;
  248. }
  249. /* Error occurred during transmission? */
  250. if (!(ecc & SJA1000_ECC_DIR))
  251. cf->data[2] |= CAN_ERR_PROT_TX;
  252. /* Bit stream position in CAN frame as the error was detected */
  253. cf->data[3] = ecc & SJA1000_ECC_SEG;
  254. }
  255. priv->bec.txerr = txerr;
  256. priv->bec.rxerr = rxerr;
  257. if (skb) {
  258. cf->can_id |= CAN_ERR_CNT;
  259. cf->data[6] = txerr;
  260. cf->data[7] = rxerr;
  261. netif_rx(skb);
  262. } else {
  263. stats->rx_dropped++;
  264. }
  265. }
  266. }
  267. static void esd_usb_rx_can_msg(struct esd_usb_net_priv *priv,
  268. struct esd_usb_msg *msg)
  269. {
  270. struct net_device_stats *stats = &priv->netdev->stats;
  271. struct can_frame *cf;
  272. struct sk_buff *skb;
  273. int i;
  274. u32 id;
  275. if (!netif_device_present(priv->netdev))
  276. return;
  277. id = le32_to_cpu(msg->msg.rx.id);
  278. if (id & ESD_EVENT) {
  279. esd_usb_rx_event(priv, msg);
  280. } else {
  281. skb = alloc_can_skb(priv->netdev, &cf);
  282. if (skb == NULL) {
  283. stats->rx_dropped++;
  284. return;
  285. }
  286. cf->can_id = id & ESD_IDMASK;
  287. can_frame_set_cc_len(cf, msg->msg.rx.dlc & ~ESD_RTR,
  288. priv->can.ctrlmode);
  289. if (id & ESD_EXTID)
  290. cf->can_id |= CAN_EFF_FLAG;
  291. if (msg->msg.rx.dlc & ESD_RTR) {
  292. cf->can_id |= CAN_RTR_FLAG;
  293. } else {
  294. for (i = 0; i < cf->len; i++)
  295. cf->data[i] = msg->msg.rx.data[i];
  296. stats->rx_bytes += cf->len;
  297. }
  298. stats->rx_packets++;
  299. netif_rx(skb);
  300. }
  301. }
  302. static void esd_usb_tx_done_msg(struct esd_usb_net_priv *priv,
  303. struct esd_usb_msg *msg)
  304. {
  305. struct net_device_stats *stats = &priv->netdev->stats;
  306. struct net_device *netdev = priv->netdev;
  307. struct esd_tx_urb_context *context;
  308. if (!netif_device_present(netdev))
  309. return;
  310. context = &priv->tx_contexts[msg->msg.txdone.hnd & (MAX_TX_URBS - 1)];
  311. if (!msg->msg.txdone.status) {
  312. stats->tx_packets++;
  313. stats->tx_bytes += can_get_echo_skb(netdev, context->echo_index,
  314. NULL);
  315. } else {
  316. stats->tx_errors++;
  317. can_free_echo_skb(netdev, context->echo_index, NULL);
  318. }
  319. /* Release context */
  320. context->echo_index = MAX_TX_URBS;
  321. atomic_dec(&priv->active_tx_jobs);
  322. netif_wake_queue(netdev);
  323. }
  324. static void esd_usb_read_bulk_callback(struct urb *urb)
  325. {
  326. struct esd_usb *dev = urb->context;
  327. int retval;
  328. int pos = 0;
  329. int i;
  330. switch (urb->status) {
  331. case 0: /* success */
  332. break;
  333. case -ENOENT:
  334. case -EPIPE:
  335. case -EPROTO:
  336. case -ESHUTDOWN:
  337. return;
  338. default:
  339. dev_info(dev->udev->dev.parent,
  340. "Rx URB aborted (%d)\n", urb->status);
  341. goto resubmit_urb;
  342. }
  343. while (pos < urb->actual_length) {
  344. struct esd_usb_msg *msg;
  345. msg = (struct esd_usb_msg *)(urb->transfer_buffer + pos);
  346. switch (msg->msg.hdr.cmd) {
  347. case CMD_CAN_RX:
  348. if (msg->msg.rx.net >= dev->net_count) {
  349. dev_err(dev->udev->dev.parent, "format error\n");
  350. break;
  351. }
  352. esd_usb_rx_can_msg(dev->nets[msg->msg.rx.net], msg);
  353. break;
  354. case CMD_CAN_TX:
  355. if (msg->msg.txdone.net >= dev->net_count) {
  356. dev_err(dev->udev->dev.parent, "format error\n");
  357. break;
  358. }
  359. esd_usb_tx_done_msg(dev->nets[msg->msg.txdone.net],
  360. msg);
  361. break;
  362. }
  363. pos += msg->msg.hdr.len << 2;
  364. if (pos > urb->actual_length) {
  365. dev_err(dev->udev->dev.parent, "format error\n");
  366. break;
  367. }
  368. }
  369. resubmit_urb:
  370. usb_fill_bulk_urb(urb, dev->udev, usb_rcvbulkpipe(dev->udev, 1),
  371. urb->transfer_buffer, RX_BUFFER_SIZE,
  372. esd_usb_read_bulk_callback, dev);
  373. retval = usb_submit_urb(urb, GFP_ATOMIC);
  374. if (retval == -ENODEV) {
  375. for (i = 0; i < dev->net_count; i++) {
  376. if (dev->nets[i])
  377. netif_device_detach(dev->nets[i]->netdev);
  378. }
  379. } else if (retval) {
  380. dev_err(dev->udev->dev.parent,
  381. "failed resubmitting read bulk urb: %d\n", retval);
  382. }
  383. }
  384. /* callback for bulk IN urb */
  385. static void esd_usb_write_bulk_callback(struct urb *urb)
  386. {
  387. struct esd_tx_urb_context *context = urb->context;
  388. struct esd_usb_net_priv *priv;
  389. struct net_device *netdev;
  390. size_t size = sizeof(struct esd_usb_msg);
  391. WARN_ON(!context);
  392. priv = context->priv;
  393. netdev = priv->netdev;
  394. /* free up our allocated buffer */
  395. usb_free_coherent(urb->dev, size,
  396. urb->transfer_buffer, urb->transfer_dma);
  397. if (!netif_device_present(netdev))
  398. return;
  399. if (urb->status)
  400. netdev_info(netdev, "Tx URB aborted (%d)\n", urb->status);
  401. netif_trans_update(netdev);
  402. }
  403. static ssize_t firmware_show(struct device *d,
  404. struct device_attribute *attr, char *buf)
  405. {
  406. struct usb_interface *intf = to_usb_interface(d);
  407. struct esd_usb *dev = usb_get_intfdata(intf);
  408. return sprintf(buf, "%d.%d.%d\n",
  409. (dev->version >> 12) & 0xf,
  410. (dev->version >> 8) & 0xf,
  411. dev->version & 0xff);
  412. }
  413. static DEVICE_ATTR_RO(firmware);
  414. static ssize_t hardware_show(struct device *d,
  415. struct device_attribute *attr, char *buf)
  416. {
  417. struct usb_interface *intf = to_usb_interface(d);
  418. struct esd_usb *dev = usb_get_intfdata(intf);
  419. return sprintf(buf, "%d.%d.%d\n",
  420. (dev->version >> 28) & 0xf,
  421. (dev->version >> 24) & 0xf,
  422. (dev->version >> 16) & 0xff);
  423. }
  424. static DEVICE_ATTR_RO(hardware);
  425. static ssize_t nets_show(struct device *d,
  426. struct device_attribute *attr, char *buf)
  427. {
  428. struct usb_interface *intf = to_usb_interface(d);
  429. struct esd_usb *dev = usb_get_intfdata(intf);
  430. return sprintf(buf, "%d", dev->net_count);
  431. }
  432. static DEVICE_ATTR_RO(nets);
  433. static int esd_usb_send_msg(struct esd_usb *dev, struct esd_usb_msg *msg)
  434. {
  435. int actual_length;
  436. return usb_bulk_msg(dev->udev,
  437. usb_sndbulkpipe(dev->udev, 2),
  438. msg,
  439. msg->msg.hdr.len << 2,
  440. &actual_length,
  441. 1000);
  442. }
  443. static int esd_usb_wait_msg(struct esd_usb *dev,
  444. struct esd_usb_msg *msg)
  445. {
  446. int actual_length;
  447. return usb_bulk_msg(dev->udev,
  448. usb_rcvbulkpipe(dev->udev, 1),
  449. msg,
  450. sizeof(*msg),
  451. &actual_length,
  452. 1000);
  453. }
  454. static int esd_usb_setup_rx_urbs(struct esd_usb *dev)
  455. {
  456. int i, err = 0;
  457. if (dev->rxinitdone)
  458. return 0;
  459. for (i = 0; i < MAX_RX_URBS; i++) {
  460. struct urb *urb = NULL;
  461. u8 *buf = NULL;
  462. dma_addr_t buf_dma;
  463. /* create a URB, and a buffer for it */
  464. urb = usb_alloc_urb(0, GFP_KERNEL);
  465. if (!urb) {
  466. err = -ENOMEM;
  467. break;
  468. }
  469. buf = usb_alloc_coherent(dev->udev, RX_BUFFER_SIZE, GFP_KERNEL,
  470. &buf_dma);
  471. if (!buf) {
  472. dev_warn(dev->udev->dev.parent,
  473. "No memory left for USB buffer\n");
  474. err = -ENOMEM;
  475. goto freeurb;
  476. }
  477. urb->transfer_dma = buf_dma;
  478. usb_fill_bulk_urb(urb, dev->udev,
  479. usb_rcvbulkpipe(dev->udev, 1),
  480. buf, RX_BUFFER_SIZE,
  481. esd_usb_read_bulk_callback, dev);
  482. urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
  483. usb_anchor_urb(urb, &dev->rx_submitted);
  484. err = usb_submit_urb(urb, GFP_KERNEL);
  485. if (err) {
  486. usb_unanchor_urb(urb);
  487. usb_free_coherent(dev->udev, RX_BUFFER_SIZE, buf,
  488. urb->transfer_dma);
  489. goto freeurb;
  490. }
  491. dev->rxbuf[i] = buf;
  492. dev->rxbuf_dma[i] = buf_dma;
  493. freeurb:
  494. /* Drop reference, USB core will take care of freeing it */
  495. usb_free_urb(urb);
  496. if (err)
  497. break;
  498. }
  499. /* Did we submit any URBs */
  500. if (i == 0) {
  501. dev_err(dev->udev->dev.parent, "couldn't setup read URBs\n");
  502. return err;
  503. }
  504. /* Warn if we've couldn't transmit all the URBs */
  505. if (i < MAX_RX_URBS) {
  506. dev_warn(dev->udev->dev.parent,
  507. "rx performance may be slow\n");
  508. }
  509. dev->rxinitdone = 1;
  510. return 0;
  511. }
  512. /* Start interface */
  513. static int esd_usb_start(struct esd_usb_net_priv *priv)
  514. {
  515. struct esd_usb *dev = priv->usb;
  516. struct net_device *netdev = priv->netdev;
  517. struct esd_usb_msg *msg;
  518. int err, i;
  519. msg = kmalloc(sizeof(*msg), GFP_KERNEL);
  520. if (!msg) {
  521. err = -ENOMEM;
  522. goto out;
  523. }
  524. /* Enable all IDs
  525. * The IDADD message takes up to 64 32 bit bitmasks (2048 bits).
  526. * Each bit represents one 11 bit CAN identifier. A set bit
  527. * enables reception of the corresponding CAN identifier. A cleared
  528. * bit disabled this identifier. An additional bitmask value
  529. * following the CAN 2.0A bits is used to enable reception of
  530. * extended CAN frames. Only the LSB of this final mask is checked
  531. * for the complete 29 bit ID range. The IDADD message also allows
  532. * filter configuration for an ID subset. In this case you can add
  533. * the number of the starting bitmask (0..64) to the filter.option
  534. * field followed by only some bitmasks.
  535. */
  536. msg->msg.hdr.cmd = CMD_IDADD;
  537. msg->msg.hdr.len = 2 + ESD_MAX_ID_SEGMENT;
  538. msg->msg.filter.net = priv->index;
  539. msg->msg.filter.option = ESD_ID_ENABLE; /* start with segment 0 */
  540. for (i = 0; i < ESD_MAX_ID_SEGMENT; i++)
  541. msg->msg.filter.mask[i] = cpu_to_le32(0xffffffff);
  542. /* enable 29bit extended IDs */
  543. msg->msg.filter.mask[ESD_MAX_ID_SEGMENT] = cpu_to_le32(0x00000001);
  544. err = esd_usb_send_msg(dev, msg);
  545. if (err)
  546. goto out;
  547. err = esd_usb_setup_rx_urbs(dev);
  548. if (err)
  549. goto out;
  550. priv->can.state = CAN_STATE_ERROR_ACTIVE;
  551. out:
  552. if (err == -ENODEV)
  553. netif_device_detach(netdev);
  554. if (err)
  555. netdev_err(netdev, "couldn't start device: %d\n", err);
  556. kfree(msg);
  557. return err;
  558. }
  559. static void unlink_all_urbs(struct esd_usb *dev)
  560. {
  561. struct esd_usb_net_priv *priv;
  562. int i, j;
  563. usb_kill_anchored_urbs(&dev->rx_submitted);
  564. for (i = 0; i < MAX_RX_URBS; ++i)
  565. usb_free_coherent(dev->udev, RX_BUFFER_SIZE,
  566. dev->rxbuf[i], dev->rxbuf_dma[i]);
  567. for (i = 0; i < dev->net_count; i++) {
  568. priv = dev->nets[i];
  569. if (priv) {
  570. usb_kill_anchored_urbs(&priv->tx_submitted);
  571. atomic_set(&priv->active_tx_jobs, 0);
  572. for (j = 0; j < MAX_TX_URBS; j++)
  573. priv->tx_contexts[j].echo_index = MAX_TX_URBS;
  574. }
  575. }
  576. }
  577. static int esd_usb_open(struct net_device *netdev)
  578. {
  579. struct esd_usb_net_priv *priv = netdev_priv(netdev);
  580. int err;
  581. /* common open */
  582. err = open_candev(netdev);
  583. if (err)
  584. return err;
  585. /* finally start device */
  586. err = esd_usb_start(priv);
  587. if (err) {
  588. netdev_warn(netdev, "couldn't start device: %d\n", err);
  589. close_candev(netdev);
  590. return err;
  591. }
  592. netif_start_queue(netdev);
  593. return 0;
  594. }
  595. static netdev_tx_t esd_usb_start_xmit(struct sk_buff *skb,
  596. struct net_device *netdev)
  597. {
  598. struct esd_usb_net_priv *priv = netdev_priv(netdev);
  599. struct esd_usb *dev = priv->usb;
  600. struct esd_tx_urb_context *context = NULL;
  601. struct net_device_stats *stats = &netdev->stats;
  602. struct can_frame *cf = (struct can_frame *)skb->data;
  603. struct esd_usb_msg *msg;
  604. struct urb *urb;
  605. u8 *buf;
  606. int i, err;
  607. int ret = NETDEV_TX_OK;
  608. size_t size = sizeof(struct esd_usb_msg);
  609. if (can_dev_dropped_skb(netdev, skb))
  610. return NETDEV_TX_OK;
  611. /* create a URB, and a buffer for it, and copy the data to the URB */
  612. urb = usb_alloc_urb(0, GFP_ATOMIC);
  613. if (!urb) {
  614. stats->tx_dropped++;
  615. dev_kfree_skb(skb);
  616. goto nourbmem;
  617. }
  618. buf = usb_alloc_coherent(dev->udev, size, GFP_ATOMIC,
  619. &urb->transfer_dma);
  620. if (!buf) {
  621. netdev_err(netdev, "No memory left for USB buffer\n");
  622. stats->tx_dropped++;
  623. dev_kfree_skb(skb);
  624. goto nobufmem;
  625. }
  626. msg = (struct esd_usb_msg *)buf;
  627. msg->msg.hdr.len = 3; /* minimal length */
  628. msg->msg.hdr.cmd = CMD_CAN_TX;
  629. msg->msg.tx.net = priv->index;
  630. msg->msg.tx.dlc = can_get_cc_dlc(cf, priv->can.ctrlmode);
  631. msg->msg.tx.id = cpu_to_le32(cf->can_id & CAN_ERR_MASK);
  632. if (cf->can_id & CAN_RTR_FLAG)
  633. msg->msg.tx.dlc |= ESD_RTR;
  634. if (cf->can_id & CAN_EFF_FLAG)
  635. msg->msg.tx.id |= cpu_to_le32(ESD_EXTID);
  636. for (i = 0; i < cf->len; i++)
  637. msg->msg.tx.data[i] = cf->data[i];
  638. msg->msg.hdr.len += (cf->len + 3) >> 2;
  639. for (i = 0; i < MAX_TX_URBS; i++) {
  640. if (priv->tx_contexts[i].echo_index == MAX_TX_URBS) {
  641. context = &priv->tx_contexts[i];
  642. break;
  643. }
  644. }
  645. /* This may never happen */
  646. if (!context) {
  647. netdev_warn(netdev, "couldn't find free context\n");
  648. ret = NETDEV_TX_BUSY;
  649. goto releasebuf;
  650. }
  651. context->priv = priv;
  652. context->echo_index = i;
  653. /* hnd must not be 0 - MSB is stripped in txdone handling */
  654. msg->msg.tx.hnd = 0x80000000 | i; /* returned in TX done message */
  655. usb_fill_bulk_urb(urb, dev->udev, usb_sndbulkpipe(dev->udev, 2), buf,
  656. msg->msg.hdr.len << 2,
  657. esd_usb_write_bulk_callback, context);
  658. urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
  659. usb_anchor_urb(urb, &priv->tx_submitted);
  660. can_put_echo_skb(skb, netdev, context->echo_index, 0);
  661. atomic_inc(&priv->active_tx_jobs);
  662. /* Slow down tx path */
  663. if (atomic_read(&priv->active_tx_jobs) >= MAX_TX_URBS)
  664. netif_stop_queue(netdev);
  665. err = usb_submit_urb(urb, GFP_ATOMIC);
  666. if (err) {
  667. can_free_echo_skb(netdev, context->echo_index, NULL);
  668. atomic_dec(&priv->active_tx_jobs);
  669. usb_unanchor_urb(urb);
  670. stats->tx_dropped++;
  671. if (err == -ENODEV)
  672. netif_device_detach(netdev);
  673. else
  674. netdev_warn(netdev, "failed tx_urb %d\n", err);
  675. goto releasebuf;
  676. }
  677. netif_trans_update(netdev);
  678. /* Release our reference to this URB, the USB core will eventually free
  679. * it entirely.
  680. */
  681. usb_free_urb(urb);
  682. return NETDEV_TX_OK;
  683. releasebuf:
  684. usb_free_coherent(dev->udev, size, buf, urb->transfer_dma);
  685. nobufmem:
  686. usb_free_urb(urb);
  687. nourbmem:
  688. return ret;
  689. }
  690. static int esd_usb_close(struct net_device *netdev)
  691. {
  692. struct esd_usb_net_priv *priv = netdev_priv(netdev);
  693. struct esd_usb_msg *msg;
  694. int i;
  695. msg = kmalloc(sizeof(*msg), GFP_KERNEL);
  696. if (!msg)
  697. return -ENOMEM;
  698. /* Disable all IDs (see esd_usb_start()) */
  699. msg->msg.hdr.cmd = CMD_IDADD;
  700. msg->msg.hdr.len = 2 + ESD_MAX_ID_SEGMENT;
  701. msg->msg.filter.net = priv->index;
  702. msg->msg.filter.option = ESD_ID_ENABLE; /* start with segment 0 */
  703. for (i = 0; i <= ESD_MAX_ID_SEGMENT; i++)
  704. msg->msg.filter.mask[i] = 0;
  705. if (esd_usb_send_msg(priv->usb, msg) < 0)
  706. netdev_err(netdev, "sending idadd message failed\n");
  707. /* set CAN controller to reset mode */
  708. msg->msg.hdr.len = 2;
  709. msg->msg.hdr.cmd = CMD_SETBAUD;
  710. msg->msg.setbaud.net = priv->index;
  711. msg->msg.setbaud.rsvd = 0;
  712. msg->msg.setbaud.baud = cpu_to_le32(ESD_USB_NO_BAUDRATE);
  713. if (esd_usb_send_msg(priv->usb, msg) < 0)
  714. netdev_err(netdev, "sending setbaud message failed\n");
  715. priv->can.state = CAN_STATE_STOPPED;
  716. netif_stop_queue(netdev);
  717. close_candev(netdev);
  718. kfree(msg);
  719. return 0;
  720. }
  721. static const struct net_device_ops esd_usb_netdev_ops = {
  722. .ndo_open = esd_usb_open,
  723. .ndo_stop = esd_usb_close,
  724. .ndo_start_xmit = esd_usb_start_xmit,
  725. .ndo_change_mtu = can_change_mtu,
  726. };
  727. static const struct ethtool_ops esd_usb_ethtool_ops = {
  728. .get_ts_info = ethtool_op_get_ts_info,
  729. };
  730. static const struct can_bittiming_const esd_usb2_bittiming_const = {
  731. .name = "esd_usb2",
  732. .tseg1_min = ESD_USB2_TSEG1_MIN,
  733. .tseg1_max = ESD_USB2_TSEG1_MAX,
  734. .tseg2_min = ESD_USB2_TSEG2_MIN,
  735. .tseg2_max = ESD_USB2_TSEG2_MAX,
  736. .sjw_max = ESD_USB2_SJW_MAX,
  737. .brp_min = ESD_USB2_BRP_MIN,
  738. .brp_max = ESD_USB2_BRP_MAX,
  739. .brp_inc = ESD_USB2_BRP_INC,
  740. };
  741. static int esd_usb2_set_bittiming(struct net_device *netdev)
  742. {
  743. struct esd_usb_net_priv *priv = netdev_priv(netdev);
  744. struct can_bittiming *bt = &priv->can.bittiming;
  745. struct esd_usb_msg *msg;
  746. int err;
  747. u32 canbtr;
  748. int sjw_shift;
  749. canbtr = ESD_USB_UBR;
  750. if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
  751. canbtr |= ESD_USB_LOM;
  752. canbtr |= (bt->brp - 1) & (ESD_USB2_BRP_MAX - 1);
  753. if (le16_to_cpu(priv->usb->udev->descriptor.idProduct) ==
  754. USB_CANUSBM_PRODUCT_ID)
  755. sjw_shift = ESD_USBM_SJW_SHIFT;
  756. else
  757. sjw_shift = ESD_USB2_SJW_SHIFT;
  758. canbtr |= ((bt->sjw - 1) & (ESD_USB2_SJW_MAX - 1))
  759. << sjw_shift;
  760. canbtr |= ((bt->prop_seg + bt->phase_seg1 - 1)
  761. & (ESD_USB2_TSEG1_MAX - 1))
  762. << ESD_USB2_TSEG1_SHIFT;
  763. canbtr |= ((bt->phase_seg2 - 1) & (ESD_USB2_TSEG2_MAX - 1))
  764. << ESD_USB2_TSEG2_SHIFT;
  765. if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
  766. canbtr |= ESD_USB2_3_SAMPLES;
  767. msg = kmalloc(sizeof(*msg), GFP_KERNEL);
  768. if (!msg)
  769. return -ENOMEM;
  770. msg->msg.hdr.len = 2;
  771. msg->msg.hdr.cmd = CMD_SETBAUD;
  772. msg->msg.setbaud.net = priv->index;
  773. msg->msg.setbaud.rsvd = 0;
  774. msg->msg.setbaud.baud = cpu_to_le32(canbtr);
  775. netdev_info(netdev, "setting BTR=%#x\n", canbtr);
  776. err = esd_usb_send_msg(priv->usb, msg);
  777. kfree(msg);
  778. return err;
  779. }
  780. static int esd_usb_get_berr_counter(const struct net_device *netdev,
  781. struct can_berr_counter *bec)
  782. {
  783. struct esd_usb_net_priv *priv = netdev_priv(netdev);
  784. bec->txerr = priv->bec.txerr;
  785. bec->rxerr = priv->bec.rxerr;
  786. return 0;
  787. }
  788. static int esd_usb_set_mode(struct net_device *netdev, enum can_mode mode)
  789. {
  790. switch (mode) {
  791. case CAN_MODE_START:
  792. netif_wake_queue(netdev);
  793. break;
  794. default:
  795. return -EOPNOTSUPP;
  796. }
  797. return 0;
  798. }
  799. static int esd_usb_probe_one_net(struct usb_interface *intf, int index)
  800. {
  801. struct esd_usb *dev = usb_get_intfdata(intf);
  802. struct net_device *netdev;
  803. struct esd_usb_net_priv *priv;
  804. int err = 0;
  805. int i;
  806. netdev = alloc_candev(sizeof(*priv), MAX_TX_URBS);
  807. if (!netdev) {
  808. dev_err(&intf->dev, "couldn't alloc candev\n");
  809. err = -ENOMEM;
  810. goto done;
  811. }
  812. priv = netdev_priv(netdev);
  813. init_usb_anchor(&priv->tx_submitted);
  814. atomic_set(&priv->active_tx_jobs, 0);
  815. for (i = 0; i < MAX_TX_URBS; i++)
  816. priv->tx_contexts[i].echo_index = MAX_TX_URBS;
  817. priv->usb = dev;
  818. priv->netdev = netdev;
  819. priv->index = index;
  820. priv->can.state = CAN_STATE_STOPPED;
  821. priv->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY |
  822. CAN_CTRLMODE_CC_LEN8_DLC;
  823. if (le16_to_cpu(dev->udev->descriptor.idProduct) ==
  824. USB_CANUSBM_PRODUCT_ID)
  825. priv->can.clock.freq = ESD_USBM_CAN_CLOCK;
  826. else {
  827. priv->can.clock.freq = ESD_USB2_CAN_CLOCK;
  828. priv->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES;
  829. }
  830. priv->can.bittiming_const = &esd_usb2_bittiming_const;
  831. priv->can.do_set_bittiming = esd_usb2_set_bittiming;
  832. priv->can.do_set_mode = esd_usb_set_mode;
  833. priv->can.do_get_berr_counter = esd_usb_get_berr_counter;
  834. netdev->flags |= IFF_ECHO; /* we support local echo */
  835. netdev->netdev_ops = &esd_usb_netdev_ops;
  836. netdev->ethtool_ops = &esd_usb_ethtool_ops;
  837. SET_NETDEV_DEV(netdev, &intf->dev);
  838. netdev->dev_id = index;
  839. err = register_candev(netdev);
  840. if (err) {
  841. dev_err(&intf->dev, "couldn't register CAN device: %d\n", err);
  842. free_candev(netdev);
  843. err = -ENOMEM;
  844. goto done;
  845. }
  846. dev->nets[index] = priv;
  847. netdev_info(netdev, "device %s registered\n", netdev->name);
  848. done:
  849. return err;
  850. }
  851. /* probe function for new USB devices
  852. *
  853. * check version information and number of available
  854. * CAN interfaces
  855. */
  856. static int esd_usb_probe(struct usb_interface *intf,
  857. const struct usb_device_id *id)
  858. {
  859. struct esd_usb *dev;
  860. struct esd_usb_msg *msg;
  861. int i, err;
  862. dev = kzalloc(sizeof(*dev), GFP_KERNEL);
  863. if (!dev) {
  864. err = -ENOMEM;
  865. goto done;
  866. }
  867. dev->udev = interface_to_usbdev(intf);
  868. init_usb_anchor(&dev->rx_submitted);
  869. usb_set_intfdata(intf, dev);
  870. msg = kmalloc(sizeof(*msg), GFP_KERNEL);
  871. if (!msg) {
  872. err = -ENOMEM;
  873. goto free_msg;
  874. }
  875. /* query number of CAN interfaces (nets) */
  876. msg->msg.hdr.cmd = CMD_VERSION;
  877. msg->msg.hdr.len = 2;
  878. msg->msg.version.rsvd = 0;
  879. msg->msg.version.flags = 0;
  880. msg->msg.version.drv_version = 0;
  881. err = esd_usb_send_msg(dev, msg);
  882. if (err < 0) {
  883. dev_err(&intf->dev, "sending version message failed\n");
  884. goto free_msg;
  885. }
  886. err = esd_usb_wait_msg(dev, msg);
  887. if (err < 0) {
  888. dev_err(&intf->dev, "no version message answer\n");
  889. goto free_msg;
  890. }
  891. dev->net_count = (int)msg->msg.version_reply.nets;
  892. dev->version = le32_to_cpu(msg->msg.version_reply.version);
  893. if (device_create_file(&intf->dev, &dev_attr_firmware))
  894. dev_err(&intf->dev,
  895. "Couldn't create device file for firmware\n");
  896. if (device_create_file(&intf->dev, &dev_attr_hardware))
  897. dev_err(&intf->dev,
  898. "Couldn't create device file for hardware\n");
  899. if (device_create_file(&intf->dev, &dev_attr_nets))
  900. dev_err(&intf->dev,
  901. "Couldn't create device file for nets\n");
  902. /* do per device probing */
  903. for (i = 0; i < dev->net_count; i++)
  904. esd_usb_probe_one_net(intf, i);
  905. free_msg:
  906. kfree(msg);
  907. if (err)
  908. kfree(dev);
  909. done:
  910. return err;
  911. }
  912. /* called by the usb core when the device is removed from the system */
  913. static void esd_usb_disconnect(struct usb_interface *intf)
  914. {
  915. struct esd_usb *dev = usb_get_intfdata(intf);
  916. struct net_device *netdev;
  917. int i;
  918. device_remove_file(&intf->dev, &dev_attr_firmware);
  919. device_remove_file(&intf->dev, &dev_attr_hardware);
  920. device_remove_file(&intf->dev, &dev_attr_nets);
  921. usb_set_intfdata(intf, NULL);
  922. if (dev) {
  923. for (i = 0; i < dev->net_count; i++) {
  924. if (dev->nets[i]) {
  925. netdev = dev->nets[i]->netdev;
  926. unregister_netdev(netdev);
  927. free_candev(netdev);
  928. }
  929. }
  930. unlink_all_urbs(dev);
  931. kfree(dev);
  932. }
  933. }
  934. /* usb specific object needed to register this driver with the usb subsystem */
  935. static struct usb_driver esd_usb_driver = {
  936. .name = KBUILD_MODNAME,
  937. .probe = esd_usb_probe,
  938. .disconnect = esd_usb_disconnect,
  939. .id_table = esd_usb_table,
  940. };
  941. module_usb_driver(esd_usb_driver);