kvaser_usb.c 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653
  1. /*
  2. * This program is free software; you can redistribute it and/or
  3. * modify it under the terms of the GNU General Public License as
  4. * published by the Free Software Foundation version 2.
  5. *
  6. * Parts of this driver are based on the following:
  7. * - Kvaser linux leaf driver (version 4.78)
  8. * - CAN driver for esd CAN-USB/2
  9. *
  10. * Copyright (C) 2002-2006 KVASER AB, Sweden. All rights reserved.
  11. * Copyright (C) 2010 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh
  12. * Copyright (C) 2012 Olivier Sobrie <olivier@sobrie.be>
  13. */
  14. #include <linux/init.h>
  15. #include <linux/completion.h>
  16. #include <linux/module.h>
  17. #include <linux/netdevice.h>
  18. #include <linux/usb.h>
  19. #include <linux/can.h>
  20. #include <linux/can/dev.h>
  21. #include <linux/can/error.h>
  22. #define MAX_TX_URBS 16
  23. #define MAX_RX_URBS 4
  24. #define START_TIMEOUT 1000 /* msecs */
  25. #define STOP_TIMEOUT 1000 /* msecs */
  26. #define USB_SEND_TIMEOUT 1000 /* msecs */
  27. #define USB_RECV_TIMEOUT 1000 /* msecs */
  28. #define RX_BUFFER_SIZE 3072
  29. #define CAN_USB_CLOCK 8000000
  30. #define MAX_NET_DEVICES 3
  31. /* Kvaser USB devices */
  32. #define KVASER_VENDOR_ID 0x0bfd
  33. #define USB_LEAF_DEVEL_PRODUCT_ID 10
  34. #define USB_LEAF_LITE_PRODUCT_ID 11
  35. #define USB_LEAF_PRO_PRODUCT_ID 12
  36. #define USB_LEAF_SPRO_PRODUCT_ID 14
  37. #define USB_LEAF_PRO_LS_PRODUCT_ID 15
  38. #define USB_LEAF_PRO_SWC_PRODUCT_ID 16
  39. #define USB_LEAF_PRO_LIN_PRODUCT_ID 17
  40. #define USB_LEAF_SPRO_LS_PRODUCT_ID 18
  41. #define USB_LEAF_SPRO_SWC_PRODUCT_ID 19
  42. #define USB_MEMO2_DEVEL_PRODUCT_ID 22
  43. #define USB_MEMO2_HSHS_PRODUCT_ID 23
  44. #define USB_UPRO_HSHS_PRODUCT_ID 24
  45. #define USB_LEAF_LITE_GI_PRODUCT_ID 25
  46. #define USB_LEAF_PRO_OBDII_PRODUCT_ID 26
  47. #define USB_MEMO2_HSLS_PRODUCT_ID 27
  48. #define USB_LEAF_LITE_CH_PRODUCT_ID 28
  49. #define USB_BLACKBIRD_SPRO_PRODUCT_ID 29
  50. #define USB_OEM_MERCURY_PRODUCT_ID 34
  51. #define USB_OEM_LEAF_PRODUCT_ID 35
  52. #define USB_CAN_R_PRODUCT_ID 39
  53. /* USB devices features */
  54. #define KVASER_HAS_SILENT_MODE BIT(0)
  55. #define KVASER_HAS_TXRX_ERRORS BIT(1)
  56. /* Message header size */
  57. #define MSG_HEADER_LEN 2
  58. /* Can message flags */
  59. #define MSG_FLAG_ERROR_FRAME BIT(0)
  60. #define MSG_FLAG_OVERRUN BIT(1)
  61. #define MSG_FLAG_NERR BIT(2)
  62. #define MSG_FLAG_WAKEUP BIT(3)
  63. #define MSG_FLAG_REMOTE_FRAME BIT(4)
  64. #define MSG_FLAG_RESERVED BIT(5)
  65. #define MSG_FLAG_TX_ACK BIT(6)
  66. #define MSG_FLAG_TX_REQUEST BIT(7)
  67. /* Can states */
  68. #define M16C_STATE_BUS_RESET BIT(0)
  69. #define M16C_STATE_BUS_ERROR BIT(4)
  70. #define M16C_STATE_BUS_PASSIVE BIT(5)
  71. #define M16C_STATE_BUS_OFF BIT(6)
  72. /* Can msg ids */
  73. #define CMD_RX_STD_MESSAGE 12
  74. #define CMD_TX_STD_MESSAGE 13
  75. #define CMD_RX_EXT_MESSAGE 14
  76. #define CMD_TX_EXT_MESSAGE 15
  77. #define CMD_SET_BUS_PARAMS 16
  78. #define CMD_GET_BUS_PARAMS 17
  79. #define CMD_GET_BUS_PARAMS_REPLY 18
  80. #define CMD_GET_CHIP_STATE 19
  81. #define CMD_CHIP_STATE_EVENT 20
  82. #define CMD_SET_CTRL_MODE 21
  83. #define CMD_GET_CTRL_MODE 22
  84. #define CMD_GET_CTRL_MODE_REPLY 23
  85. #define CMD_RESET_CHIP 24
  86. #define CMD_RESET_CARD 25
  87. #define CMD_START_CHIP 26
  88. #define CMD_START_CHIP_REPLY 27
  89. #define CMD_STOP_CHIP 28
  90. #define CMD_STOP_CHIP_REPLY 29
  91. #define CMD_GET_CARD_INFO2 32
  92. #define CMD_GET_CARD_INFO 34
  93. #define CMD_GET_CARD_INFO_REPLY 35
  94. #define CMD_GET_SOFTWARE_INFO 38
  95. #define CMD_GET_SOFTWARE_INFO_REPLY 39
  96. #define CMD_ERROR_EVENT 45
  97. #define CMD_FLUSH_QUEUE 48
  98. #define CMD_RESET_ERROR_COUNTER 49
  99. #define CMD_TX_ACKNOWLEDGE 50
  100. #define CMD_CAN_ERROR_EVENT 51
  101. #define CMD_USB_THROTTLE 77
  102. #define CMD_LOG_MESSAGE 106
  103. /* error factors */
  104. #define M16C_EF_ACKE BIT(0)
  105. #define M16C_EF_CRCE BIT(1)
  106. #define M16C_EF_FORME BIT(2)
  107. #define M16C_EF_STFE BIT(3)
  108. #define M16C_EF_BITE0 BIT(4)
  109. #define M16C_EF_BITE1 BIT(5)
  110. #define M16C_EF_RCVE BIT(6)
  111. #define M16C_EF_TRE BIT(7)
  112. /* bittiming parameters */
  113. #define KVASER_USB_TSEG1_MIN 1
  114. #define KVASER_USB_TSEG1_MAX 16
  115. #define KVASER_USB_TSEG2_MIN 1
  116. #define KVASER_USB_TSEG2_MAX 8
  117. #define KVASER_USB_SJW_MAX 4
  118. #define KVASER_USB_BRP_MIN 1
  119. #define KVASER_USB_BRP_MAX 64
  120. #define KVASER_USB_BRP_INC 1
  121. /* ctrl modes */
  122. #define KVASER_CTRL_MODE_NORMAL 1
  123. #define KVASER_CTRL_MODE_SILENT 2
  124. #define KVASER_CTRL_MODE_SELFRECEPTION 3
  125. #define KVASER_CTRL_MODE_OFF 4
  126. /* log message */
  127. #define KVASER_EXTENDED_FRAME BIT(31)
  128. struct kvaser_msg_simple {
  129. u8 tid;
  130. u8 channel;
  131. } __packed;
  132. struct kvaser_msg_cardinfo {
  133. u8 tid;
  134. u8 nchannels;
  135. __le32 serial_number;
  136. __le32 padding;
  137. __le32 clock_resolution;
  138. __le32 mfgdate;
  139. u8 ean[8];
  140. u8 hw_revision;
  141. u8 usb_hs_mode;
  142. __le16 padding2;
  143. } __packed;
  144. struct kvaser_msg_cardinfo2 {
  145. u8 tid;
  146. u8 channel;
  147. u8 pcb_id[24];
  148. __le32 oem_unlock_code;
  149. } __packed;
  150. struct kvaser_msg_softinfo {
  151. u8 tid;
  152. u8 channel;
  153. __le32 sw_options;
  154. __le32 fw_version;
  155. __le16 max_outstanding_tx;
  156. __le16 padding[9];
  157. } __packed;
  158. struct kvaser_msg_busparams {
  159. u8 tid;
  160. u8 channel;
  161. __le32 bitrate;
  162. u8 tseg1;
  163. u8 tseg2;
  164. u8 sjw;
  165. u8 no_samp;
  166. } __packed;
  167. struct kvaser_msg_tx_can {
  168. u8 channel;
  169. u8 tid;
  170. u8 msg[14];
  171. u8 padding;
  172. u8 flags;
  173. } __packed;
  174. struct kvaser_msg_rx_can {
  175. u8 channel;
  176. u8 flag;
  177. __le16 time[3];
  178. u8 msg[14];
  179. } __packed;
  180. struct kvaser_msg_chip_state_event {
  181. u8 tid;
  182. u8 channel;
  183. __le16 time[3];
  184. u8 tx_errors_count;
  185. u8 rx_errors_count;
  186. u8 status;
  187. u8 padding[3];
  188. } __packed;
  189. struct kvaser_msg_tx_acknowledge {
  190. u8 channel;
  191. u8 tid;
  192. __le16 time[3];
  193. u8 flags;
  194. u8 time_offset;
  195. } __packed;
  196. struct kvaser_msg_error_event {
  197. u8 tid;
  198. u8 flags;
  199. __le16 time[3];
  200. u8 channel;
  201. u8 padding;
  202. u8 tx_errors_count;
  203. u8 rx_errors_count;
  204. u8 status;
  205. u8 error_factor;
  206. } __packed;
  207. struct kvaser_msg_ctrl_mode {
  208. u8 tid;
  209. u8 channel;
  210. u8 ctrl_mode;
  211. u8 padding[3];
  212. } __packed;
  213. struct kvaser_msg_flush_queue {
  214. u8 tid;
  215. u8 channel;
  216. u8 flags;
  217. u8 padding[3];
  218. } __packed;
  219. struct kvaser_msg_log_message {
  220. u8 channel;
  221. u8 flags;
  222. __le16 time[3];
  223. u8 dlc;
  224. u8 time_offset;
  225. __le32 id;
  226. u8 data[8];
  227. } __packed;
  228. struct kvaser_msg {
  229. u8 len;
  230. u8 id;
  231. union {
  232. struct kvaser_msg_simple simple;
  233. struct kvaser_msg_cardinfo cardinfo;
  234. struct kvaser_msg_cardinfo2 cardinfo2;
  235. struct kvaser_msg_softinfo softinfo;
  236. struct kvaser_msg_busparams busparams;
  237. struct kvaser_msg_tx_can tx_can;
  238. struct kvaser_msg_rx_can rx_can;
  239. struct kvaser_msg_chip_state_event chip_state_event;
  240. struct kvaser_msg_tx_acknowledge tx_acknowledge;
  241. struct kvaser_msg_error_event error_event;
  242. struct kvaser_msg_ctrl_mode ctrl_mode;
  243. struct kvaser_msg_flush_queue flush_queue;
  244. struct kvaser_msg_log_message log_message;
  245. } u;
  246. } __packed;
  247. struct kvaser_usb_tx_urb_context {
  248. struct kvaser_usb_net_priv *priv;
  249. u32 echo_index;
  250. int dlc;
  251. };
  252. struct kvaser_usb {
  253. struct usb_device *udev;
  254. struct kvaser_usb_net_priv *nets[MAX_NET_DEVICES];
  255. struct usb_endpoint_descriptor *bulk_in, *bulk_out;
  256. struct usb_anchor rx_submitted;
  257. u32 fw_version;
  258. unsigned int nchannels;
  259. bool rxinitdone;
  260. void *rxbuf[MAX_RX_URBS];
  261. dma_addr_t rxbuf_dma[MAX_RX_URBS];
  262. };
  263. struct kvaser_usb_net_priv {
  264. struct can_priv can;
  265. atomic_t active_tx_urbs;
  266. struct usb_anchor tx_submitted;
  267. struct kvaser_usb_tx_urb_context tx_contexts[MAX_TX_URBS];
  268. struct completion start_comp, stop_comp;
  269. struct kvaser_usb *dev;
  270. struct net_device *netdev;
  271. int channel;
  272. struct can_berr_counter bec;
  273. };
  274. static const struct usb_device_id kvaser_usb_table[] = {
  275. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_DEVEL_PRODUCT_ID) },
  276. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LITE_PRODUCT_ID) },
  277. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_PRO_PRODUCT_ID),
  278. .driver_info = KVASER_HAS_TXRX_ERRORS |
  279. KVASER_HAS_SILENT_MODE },
  280. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_SPRO_PRODUCT_ID),
  281. .driver_info = KVASER_HAS_TXRX_ERRORS |
  282. KVASER_HAS_SILENT_MODE },
  283. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_PRO_LS_PRODUCT_ID),
  284. .driver_info = KVASER_HAS_TXRX_ERRORS |
  285. KVASER_HAS_SILENT_MODE },
  286. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_PRO_SWC_PRODUCT_ID),
  287. .driver_info = KVASER_HAS_TXRX_ERRORS |
  288. KVASER_HAS_SILENT_MODE },
  289. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_PRO_LIN_PRODUCT_ID),
  290. .driver_info = KVASER_HAS_TXRX_ERRORS |
  291. KVASER_HAS_SILENT_MODE },
  292. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_SPRO_LS_PRODUCT_ID),
  293. .driver_info = KVASER_HAS_TXRX_ERRORS |
  294. KVASER_HAS_SILENT_MODE },
  295. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_SPRO_SWC_PRODUCT_ID),
  296. .driver_info = KVASER_HAS_TXRX_ERRORS |
  297. KVASER_HAS_SILENT_MODE },
  298. { USB_DEVICE(KVASER_VENDOR_ID, USB_MEMO2_DEVEL_PRODUCT_ID),
  299. .driver_info = KVASER_HAS_TXRX_ERRORS |
  300. KVASER_HAS_SILENT_MODE },
  301. { USB_DEVICE(KVASER_VENDOR_ID, USB_MEMO2_HSHS_PRODUCT_ID),
  302. .driver_info = KVASER_HAS_TXRX_ERRORS |
  303. KVASER_HAS_SILENT_MODE },
  304. { USB_DEVICE(KVASER_VENDOR_ID, USB_UPRO_HSHS_PRODUCT_ID),
  305. .driver_info = KVASER_HAS_TXRX_ERRORS },
  306. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LITE_GI_PRODUCT_ID) },
  307. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_PRO_OBDII_PRODUCT_ID),
  308. .driver_info = KVASER_HAS_TXRX_ERRORS |
  309. KVASER_HAS_SILENT_MODE },
  310. { USB_DEVICE(KVASER_VENDOR_ID, USB_MEMO2_HSLS_PRODUCT_ID),
  311. .driver_info = KVASER_HAS_TXRX_ERRORS },
  312. { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LITE_CH_PRODUCT_ID),
  313. .driver_info = KVASER_HAS_TXRX_ERRORS },
  314. { USB_DEVICE(KVASER_VENDOR_ID, USB_BLACKBIRD_SPRO_PRODUCT_ID),
  315. .driver_info = KVASER_HAS_TXRX_ERRORS },
  316. { USB_DEVICE(KVASER_VENDOR_ID, USB_OEM_MERCURY_PRODUCT_ID),
  317. .driver_info = KVASER_HAS_TXRX_ERRORS },
  318. { USB_DEVICE(KVASER_VENDOR_ID, USB_OEM_LEAF_PRODUCT_ID),
  319. .driver_info = KVASER_HAS_TXRX_ERRORS },
  320. { USB_DEVICE(KVASER_VENDOR_ID, USB_CAN_R_PRODUCT_ID),
  321. .driver_info = KVASER_HAS_TXRX_ERRORS },
  322. { }
  323. };
  324. MODULE_DEVICE_TABLE(usb, kvaser_usb_table);
  325. static inline int kvaser_usb_send_msg(const struct kvaser_usb *dev,
  326. struct kvaser_msg *msg)
  327. {
  328. int actual_len;
  329. return usb_bulk_msg(dev->udev,
  330. usb_sndbulkpipe(dev->udev,
  331. dev->bulk_out->bEndpointAddress),
  332. msg, msg->len, &actual_len,
  333. USB_SEND_TIMEOUT);
  334. }
  335. static int kvaser_usb_wait_msg(const struct kvaser_usb *dev, u8 id,
  336. struct kvaser_msg *msg)
  337. {
  338. struct kvaser_msg *tmp;
  339. void *buf;
  340. int actual_len;
  341. int err;
  342. int pos = 0;
  343. buf = kzalloc(RX_BUFFER_SIZE, GFP_KERNEL);
  344. if (!buf)
  345. return -ENOMEM;
  346. err = usb_bulk_msg(dev->udev,
  347. usb_rcvbulkpipe(dev->udev,
  348. dev->bulk_in->bEndpointAddress),
  349. buf, RX_BUFFER_SIZE, &actual_len,
  350. USB_RECV_TIMEOUT);
  351. if (err < 0)
  352. goto end;
  353. while (pos <= actual_len - MSG_HEADER_LEN) {
  354. tmp = buf + pos;
  355. if (!tmp->len)
  356. break;
  357. if (pos + tmp->len > actual_len) {
  358. dev_err(dev->udev->dev.parent, "Format error\n");
  359. break;
  360. }
  361. if (tmp->id == id) {
  362. memcpy(msg, tmp, tmp->len);
  363. goto end;
  364. }
  365. pos += tmp->len;
  366. }
  367. err = -EINVAL;
  368. end:
  369. kfree(buf);
  370. return err;
  371. }
  372. static int kvaser_usb_send_simple_msg(const struct kvaser_usb *dev,
  373. u8 msg_id, int channel)
  374. {
  375. struct kvaser_msg *msg;
  376. int rc;
  377. msg = kmalloc(sizeof(*msg), GFP_KERNEL);
  378. if (!msg)
  379. return -ENOMEM;
  380. msg->id = msg_id;
  381. msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_simple);
  382. msg->u.simple.channel = channel;
  383. msg->u.simple.tid = 0xff;
  384. rc = kvaser_usb_send_msg(dev, msg);
  385. kfree(msg);
  386. return rc;
  387. }
  388. static int kvaser_usb_get_software_info(struct kvaser_usb *dev)
  389. {
  390. struct kvaser_msg msg;
  391. int err;
  392. err = kvaser_usb_send_simple_msg(dev, CMD_GET_SOFTWARE_INFO, 0);
  393. if (err)
  394. return err;
  395. err = kvaser_usb_wait_msg(dev, CMD_GET_SOFTWARE_INFO_REPLY, &msg);
  396. if (err)
  397. return err;
  398. dev->fw_version = le32_to_cpu(msg.u.softinfo.fw_version);
  399. return 0;
  400. }
  401. static int kvaser_usb_get_card_info(struct kvaser_usb *dev)
  402. {
  403. struct kvaser_msg msg;
  404. int err;
  405. err = kvaser_usb_send_simple_msg(dev, CMD_GET_CARD_INFO, 0);
  406. if (err)
  407. return err;
  408. err = kvaser_usb_wait_msg(dev, CMD_GET_CARD_INFO_REPLY, &msg);
  409. if (err)
  410. return err;
  411. dev->nchannels = msg.u.cardinfo.nchannels;
  412. return 0;
  413. }
  414. static void kvaser_usb_tx_acknowledge(const struct kvaser_usb *dev,
  415. const struct kvaser_msg *msg)
  416. {
  417. struct net_device_stats *stats;
  418. struct kvaser_usb_tx_urb_context *context;
  419. struct kvaser_usb_net_priv *priv;
  420. struct sk_buff *skb;
  421. struct can_frame *cf;
  422. u8 channel = msg->u.tx_acknowledge.channel;
  423. u8 tid = msg->u.tx_acknowledge.tid;
  424. if (channel >= dev->nchannels) {
  425. dev_err(dev->udev->dev.parent,
  426. "Invalid channel number (%d)\n", channel);
  427. return;
  428. }
  429. priv = dev->nets[channel];
  430. if (!netif_device_present(priv->netdev))
  431. return;
  432. stats = &priv->netdev->stats;
  433. context = &priv->tx_contexts[tid % MAX_TX_URBS];
  434. /* Sometimes the state change doesn't come after a bus-off event */
  435. if (priv->can.restart_ms &&
  436. (priv->can.state >= CAN_STATE_BUS_OFF)) {
  437. skb = alloc_can_err_skb(priv->netdev, &cf);
  438. if (skb) {
  439. cf->can_id |= CAN_ERR_RESTARTED;
  440. netif_rx(skb);
  441. stats->rx_packets++;
  442. stats->rx_bytes += cf->can_dlc;
  443. } else {
  444. netdev_err(priv->netdev,
  445. "No memory left for err_skb\n");
  446. }
  447. priv->can.can_stats.restarts++;
  448. netif_carrier_on(priv->netdev);
  449. priv->can.state = CAN_STATE_ERROR_ACTIVE;
  450. }
  451. stats->tx_packets++;
  452. stats->tx_bytes += context->dlc;
  453. can_get_echo_skb(priv->netdev, context->echo_index);
  454. context->echo_index = MAX_TX_URBS;
  455. atomic_dec(&priv->active_tx_urbs);
  456. netif_wake_queue(priv->netdev);
  457. }
  458. static void kvaser_usb_simple_msg_callback(struct urb *urb)
  459. {
  460. struct net_device *netdev = urb->context;
  461. kfree(urb->transfer_buffer);
  462. if (urb->status)
  463. netdev_warn(netdev, "urb status received: %d\n",
  464. urb->status);
  465. }
  466. static int kvaser_usb_simple_msg_async(struct kvaser_usb_net_priv *priv,
  467. u8 msg_id)
  468. {
  469. struct kvaser_usb *dev = priv->dev;
  470. struct net_device *netdev = priv->netdev;
  471. struct kvaser_msg *msg;
  472. struct urb *urb;
  473. void *buf;
  474. int err;
  475. urb = usb_alloc_urb(0, GFP_ATOMIC);
  476. if (!urb) {
  477. netdev_err(netdev, "No memory left for URBs\n");
  478. return -ENOMEM;
  479. }
  480. buf = kmalloc(sizeof(struct kvaser_msg), GFP_ATOMIC);
  481. if (!buf) {
  482. usb_free_urb(urb);
  483. return -ENOMEM;
  484. }
  485. msg = (struct kvaser_msg *)buf;
  486. msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_simple);
  487. msg->id = msg_id;
  488. msg->u.simple.channel = priv->channel;
  489. usb_fill_bulk_urb(urb, dev->udev,
  490. usb_sndbulkpipe(dev->udev,
  491. dev->bulk_out->bEndpointAddress),
  492. buf, msg->len,
  493. kvaser_usb_simple_msg_callback, priv);
  494. usb_anchor_urb(urb, &priv->tx_submitted);
  495. err = usb_submit_urb(urb, GFP_ATOMIC);
  496. if (err) {
  497. netdev_err(netdev, "Error transmitting URB\n");
  498. usb_unanchor_urb(urb);
  499. usb_free_urb(urb);
  500. kfree(buf);
  501. return err;
  502. }
  503. usb_free_urb(urb);
  504. return 0;
  505. }
  506. static void kvaser_usb_unlink_tx_urbs(struct kvaser_usb_net_priv *priv)
  507. {
  508. int i;
  509. usb_kill_anchored_urbs(&priv->tx_submitted);
  510. atomic_set(&priv->active_tx_urbs, 0);
  511. for (i = 0; i < MAX_TX_URBS; i++)
  512. priv->tx_contexts[i].echo_index = MAX_TX_URBS;
  513. }
  514. static void kvaser_usb_rx_error(const struct kvaser_usb *dev,
  515. const struct kvaser_msg *msg)
  516. {
  517. struct can_frame *cf;
  518. struct sk_buff *skb;
  519. struct net_device_stats *stats;
  520. struct kvaser_usb_net_priv *priv;
  521. unsigned int new_state;
  522. u8 channel, status, txerr, rxerr, error_factor;
  523. switch (msg->id) {
  524. case CMD_CAN_ERROR_EVENT:
  525. channel = msg->u.error_event.channel;
  526. status = msg->u.error_event.status;
  527. txerr = msg->u.error_event.tx_errors_count;
  528. rxerr = msg->u.error_event.rx_errors_count;
  529. error_factor = msg->u.error_event.error_factor;
  530. break;
  531. case CMD_LOG_MESSAGE:
  532. channel = msg->u.log_message.channel;
  533. status = msg->u.log_message.data[0];
  534. txerr = msg->u.log_message.data[2];
  535. rxerr = msg->u.log_message.data[3];
  536. error_factor = msg->u.log_message.data[1];
  537. break;
  538. case CMD_CHIP_STATE_EVENT:
  539. channel = msg->u.chip_state_event.channel;
  540. status = msg->u.chip_state_event.status;
  541. txerr = msg->u.chip_state_event.tx_errors_count;
  542. rxerr = msg->u.chip_state_event.rx_errors_count;
  543. error_factor = 0;
  544. break;
  545. default:
  546. dev_err(dev->udev->dev.parent, "Invalid msg id (%d)\n",
  547. msg->id);
  548. return;
  549. }
  550. if (channel >= dev->nchannels) {
  551. dev_err(dev->udev->dev.parent,
  552. "Invalid channel number (%d)\n", channel);
  553. return;
  554. }
  555. priv = dev->nets[channel];
  556. stats = &priv->netdev->stats;
  557. if (status & M16C_STATE_BUS_RESET) {
  558. kvaser_usb_unlink_tx_urbs(priv);
  559. return;
  560. }
  561. skb = alloc_can_err_skb(priv->netdev, &cf);
  562. if (!skb) {
  563. stats->rx_dropped++;
  564. return;
  565. }
  566. new_state = priv->can.state;
  567. netdev_dbg(priv->netdev, "Error status: 0x%02x\n", status);
  568. if (status & M16C_STATE_BUS_OFF) {
  569. cf->can_id |= CAN_ERR_BUSOFF;
  570. priv->can.can_stats.bus_off++;
  571. if (!priv->can.restart_ms)
  572. kvaser_usb_simple_msg_async(priv, CMD_STOP_CHIP);
  573. netif_carrier_off(priv->netdev);
  574. new_state = CAN_STATE_BUS_OFF;
  575. } else if (status & M16C_STATE_BUS_PASSIVE) {
  576. if (priv->can.state != CAN_STATE_ERROR_PASSIVE) {
  577. cf->can_id |= CAN_ERR_CRTL;
  578. if (txerr || rxerr)
  579. cf->data[1] = (txerr > rxerr)
  580. ? CAN_ERR_CRTL_TX_PASSIVE
  581. : CAN_ERR_CRTL_RX_PASSIVE;
  582. else
  583. cf->data[1] = CAN_ERR_CRTL_TX_PASSIVE |
  584. CAN_ERR_CRTL_RX_PASSIVE;
  585. priv->can.can_stats.error_passive++;
  586. }
  587. new_state = CAN_STATE_ERROR_PASSIVE;
  588. }
  589. if (status == M16C_STATE_BUS_ERROR) {
  590. if ((priv->can.state < CAN_STATE_ERROR_WARNING) &&
  591. ((txerr >= 96) || (rxerr >= 96))) {
  592. cf->can_id |= CAN_ERR_CRTL;
  593. cf->data[1] = (txerr > rxerr)
  594. ? CAN_ERR_CRTL_TX_WARNING
  595. : CAN_ERR_CRTL_RX_WARNING;
  596. priv->can.can_stats.error_warning++;
  597. new_state = CAN_STATE_ERROR_WARNING;
  598. } else if (priv->can.state > CAN_STATE_ERROR_ACTIVE) {
  599. cf->can_id |= CAN_ERR_PROT;
  600. cf->data[2] = CAN_ERR_PROT_ACTIVE;
  601. new_state = CAN_STATE_ERROR_ACTIVE;
  602. }
  603. }
  604. if (!status) {
  605. cf->can_id |= CAN_ERR_PROT;
  606. cf->data[2] = CAN_ERR_PROT_ACTIVE;
  607. new_state = CAN_STATE_ERROR_ACTIVE;
  608. }
  609. if (priv->can.restart_ms &&
  610. (priv->can.state >= CAN_STATE_BUS_OFF) &&
  611. (new_state < CAN_STATE_BUS_OFF)) {
  612. cf->can_id |= CAN_ERR_RESTARTED;
  613. netif_carrier_on(priv->netdev);
  614. priv->can.can_stats.restarts++;
  615. }
  616. if (error_factor) {
  617. priv->can.can_stats.bus_error++;
  618. stats->rx_errors++;
  619. cf->can_id |= CAN_ERR_BUSERROR | CAN_ERR_PROT;
  620. if (error_factor & M16C_EF_ACKE)
  621. cf->data[3] |= (CAN_ERR_PROT_LOC_ACK);
  622. if (error_factor & M16C_EF_CRCE)
  623. cf->data[3] |= (CAN_ERR_PROT_LOC_CRC_SEQ |
  624. CAN_ERR_PROT_LOC_CRC_DEL);
  625. if (error_factor & M16C_EF_FORME)
  626. cf->data[2] |= CAN_ERR_PROT_FORM;
  627. if (error_factor & M16C_EF_STFE)
  628. cf->data[2] |= CAN_ERR_PROT_STUFF;
  629. if (error_factor & M16C_EF_BITE0)
  630. cf->data[2] |= CAN_ERR_PROT_BIT0;
  631. if (error_factor & M16C_EF_BITE1)
  632. cf->data[2] |= CAN_ERR_PROT_BIT1;
  633. if (error_factor & M16C_EF_TRE)
  634. cf->data[2] |= CAN_ERR_PROT_TX;
  635. }
  636. cf->data[6] = txerr;
  637. cf->data[7] = rxerr;
  638. priv->bec.txerr = txerr;
  639. priv->bec.rxerr = rxerr;
  640. priv->can.state = new_state;
  641. netif_rx(skb);
  642. stats->rx_packets++;
  643. stats->rx_bytes += cf->can_dlc;
  644. }
  645. static void kvaser_usb_rx_can_err(const struct kvaser_usb_net_priv *priv,
  646. const struct kvaser_msg *msg)
  647. {
  648. struct can_frame *cf;
  649. struct sk_buff *skb;
  650. struct net_device_stats *stats = &priv->netdev->stats;
  651. if (msg->u.rx_can.flag & (MSG_FLAG_ERROR_FRAME |
  652. MSG_FLAG_NERR)) {
  653. netdev_err(priv->netdev, "Unknow error (flags: 0x%02x)\n",
  654. msg->u.rx_can.flag);
  655. stats->rx_errors++;
  656. return;
  657. }
  658. if (msg->u.rx_can.flag & MSG_FLAG_OVERRUN) {
  659. skb = alloc_can_err_skb(priv->netdev, &cf);
  660. if (!skb) {
  661. stats->rx_dropped++;
  662. return;
  663. }
  664. cf->can_id |= CAN_ERR_CRTL;
  665. cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
  666. stats->rx_over_errors++;
  667. stats->rx_errors++;
  668. netif_rx(skb);
  669. stats->rx_packets++;
  670. stats->rx_bytes += cf->can_dlc;
  671. }
  672. }
  673. static void kvaser_usb_rx_can_msg(const struct kvaser_usb *dev,
  674. const struct kvaser_msg *msg)
  675. {
  676. struct kvaser_usb_net_priv *priv;
  677. struct can_frame *cf;
  678. struct sk_buff *skb;
  679. struct net_device_stats *stats;
  680. u8 channel = msg->u.rx_can.channel;
  681. if (channel >= dev->nchannels) {
  682. dev_err(dev->udev->dev.parent,
  683. "Invalid channel number (%d)\n", channel);
  684. return;
  685. }
  686. priv = dev->nets[channel];
  687. stats = &priv->netdev->stats;
  688. if ((msg->u.rx_can.flag & MSG_FLAG_ERROR_FRAME) &&
  689. (msg->id == CMD_LOG_MESSAGE)) {
  690. kvaser_usb_rx_error(dev, msg);
  691. return;
  692. } else if (msg->u.rx_can.flag & (MSG_FLAG_ERROR_FRAME |
  693. MSG_FLAG_NERR |
  694. MSG_FLAG_OVERRUN)) {
  695. kvaser_usb_rx_can_err(priv, msg);
  696. return;
  697. } else if (msg->u.rx_can.flag & ~MSG_FLAG_REMOTE_FRAME) {
  698. netdev_warn(priv->netdev,
  699. "Unhandled frame (flags: 0x%02x)",
  700. msg->u.rx_can.flag);
  701. return;
  702. }
  703. skb = alloc_can_skb(priv->netdev, &cf);
  704. if (!skb) {
  705. stats->tx_dropped++;
  706. return;
  707. }
  708. if (msg->id == CMD_LOG_MESSAGE) {
  709. cf->can_id = le32_to_cpu(msg->u.log_message.id);
  710. if (cf->can_id & KVASER_EXTENDED_FRAME)
  711. cf->can_id &= CAN_EFF_MASK | CAN_EFF_FLAG;
  712. else
  713. cf->can_id &= CAN_SFF_MASK;
  714. cf->can_dlc = get_can_dlc(msg->u.log_message.dlc);
  715. if (msg->u.log_message.flags & MSG_FLAG_REMOTE_FRAME)
  716. cf->can_id |= CAN_RTR_FLAG;
  717. else
  718. memcpy(cf->data, &msg->u.log_message.data,
  719. cf->can_dlc);
  720. } else {
  721. cf->can_id = ((msg->u.rx_can.msg[0] & 0x1f) << 6) |
  722. (msg->u.rx_can.msg[1] & 0x3f);
  723. if (msg->id == CMD_RX_EXT_MESSAGE) {
  724. cf->can_id <<= 18;
  725. cf->can_id |= ((msg->u.rx_can.msg[2] & 0x0f) << 14) |
  726. ((msg->u.rx_can.msg[3] & 0xff) << 6) |
  727. (msg->u.rx_can.msg[4] & 0x3f);
  728. cf->can_id |= CAN_EFF_FLAG;
  729. }
  730. cf->can_dlc = get_can_dlc(msg->u.rx_can.msg[5]);
  731. if (msg->u.rx_can.flag & MSG_FLAG_REMOTE_FRAME)
  732. cf->can_id |= CAN_RTR_FLAG;
  733. else
  734. memcpy(cf->data, &msg->u.rx_can.msg[6],
  735. cf->can_dlc);
  736. }
  737. netif_rx(skb);
  738. stats->rx_packets++;
  739. stats->rx_bytes += cf->can_dlc;
  740. }
  741. static void kvaser_usb_start_chip_reply(const struct kvaser_usb *dev,
  742. const struct kvaser_msg *msg)
  743. {
  744. struct kvaser_usb_net_priv *priv;
  745. u8 channel = msg->u.simple.channel;
  746. if (channel >= dev->nchannels) {
  747. dev_err(dev->udev->dev.parent,
  748. "Invalid channel number (%d)\n", channel);
  749. return;
  750. }
  751. priv = dev->nets[channel];
  752. if (completion_done(&priv->start_comp) &&
  753. netif_queue_stopped(priv->netdev)) {
  754. netif_wake_queue(priv->netdev);
  755. } else {
  756. netif_start_queue(priv->netdev);
  757. complete(&priv->start_comp);
  758. }
  759. }
  760. static void kvaser_usb_stop_chip_reply(const struct kvaser_usb *dev,
  761. const struct kvaser_msg *msg)
  762. {
  763. struct kvaser_usb_net_priv *priv;
  764. u8 channel = msg->u.simple.channel;
  765. if (channel >= dev->nchannels) {
  766. dev_err(dev->udev->dev.parent,
  767. "Invalid channel number (%d)\n", channel);
  768. return;
  769. }
  770. priv = dev->nets[channel];
  771. complete(&priv->stop_comp);
  772. }
  773. static void kvaser_usb_handle_message(const struct kvaser_usb *dev,
  774. const struct kvaser_msg *msg)
  775. {
  776. switch (msg->id) {
  777. case CMD_START_CHIP_REPLY:
  778. kvaser_usb_start_chip_reply(dev, msg);
  779. break;
  780. case CMD_STOP_CHIP_REPLY:
  781. kvaser_usb_stop_chip_reply(dev, msg);
  782. break;
  783. case CMD_RX_STD_MESSAGE:
  784. case CMD_RX_EXT_MESSAGE:
  785. case CMD_LOG_MESSAGE:
  786. kvaser_usb_rx_can_msg(dev, msg);
  787. break;
  788. case CMD_CHIP_STATE_EVENT:
  789. case CMD_CAN_ERROR_EVENT:
  790. kvaser_usb_rx_error(dev, msg);
  791. break;
  792. case CMD_TX_ACKNOWLEDGE:
  793. kvaser_usb_tx_acknowledge(dev, msg);
  794. break;
  795. default:
  796. dev_warn(dev->udev->dev.parent,
  797. "Unhandled message (%d)\n", msg->id);
  798. break;
  799. }
  800. }
  801. static void kvaser_usb_read_bulk_callback(struct urb *urb)
  802. {
  803. struct kvaser_usb *dev = urb->context;
  804. struct kvaser_msg *msg;
  805. int pos = 0;
  806. int err, i;
  807. switch (urb->status) {
  808. case 0:
  809. break;
  810. case -ENOENT:
  811. case -ESHUTDOWN:
  812. return;
  813. default:
  814. dev_info(dev->udev->dev.parent, "Rx URB aborted (%d)\n",
  815. urb->status);
  816. goto resubmit_urb;
  817. }
  818. while (pos <= urb->actual_length - MSG_HEADER_LEN) {
  819. msg = urb->transfer_buffer + pos;
  820. if (!msg->len)
  821. break;
  822. if (pos + msg->len > urb->actual_length) {
  823. dev_err(dev->udev->dev.parent, "Format error\n");
  824. break;
  825. }
  826. kvaser_usb_handle_message(dev, msg);
  827. pos += msg->len;
  828. }
  829. resubmit_urb:
  830. usb_fill_bulk_urb(urb, dev->udev,
  831. usb_rcvbulkpipe(dev->udev,
  832. dev->bulk_in->bEndpointAddress),
  833. urb->transfer_buffer, RX_BUFFER_SIZE,
  834. kvaser_usb_read_bulk_callback, dev);
  835. err = usb_submit_urb(urb, GFP_ATOMIC);
  836. if (err == -ENODEV) {
  837. for (i = 0; i < dev->nchannels; i++) {
  838. if (!dev->nets[i])
  839. continue;
  840. netif_device_detach(dev->nets[i]->netdev);
  841. }
  842. } else if (err) {
  843. dev_err(dev->udev->dev.parent,
  844. "Failed resubmitting read bulk urb: %d\n", err);
  845. }
  846. return;
  847. }
  848. static int kvaser_usb_setup_rx_urbs(struct kvaser_usb *dev)
  849. {
  850. int i, err = 0;
  851. if (dev->rxinitdone)
  852. return 0;
  853. for (i = 0; i < MAX_RX_URBS; i++) {
  854. struct urb *urb = NULL;
  855. u8 *buf = NULL;
  856. dma_addr_t buf_dma;
  857. urb = usb_alloc_urb(0, GFP_KERNEL);
  858. if (!urb) {
  859. dev_warn(dev->udev->dev.parent,
  860. "No memory left for URBs\n");
  861. err = -ENOMEM;
  862. break;
  863. }
  864. buf = usb_alloc_coherent(dev->udev, RX_BUFFER_SIZE,
  865. GFP_KERNEL, &buf_dma);
  866. if (!buf) {
  867. dev_warn(dev->udev->dev.parent,
  868. "No memory left for USB buffer\n");
  869. usb_free_urb(urb);
  870. err = -ENOMEM;
  871. break;
  872. }
  873. usb_fill_bulk_urb(urb, dev->udev,
  874. usb_rcvbulkpipe(dev->udev,
  875. dev->bulk_in->bEndpointAddress),
  876. buf, RX_BUFFER_SIZE,
  877. kvaser_usb_read_bulk_callback,
  878. dev);
  879. urb->transfer_dma = buf_dma;
  880. urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
  881. usb_anchor_urb(urb, &dev->rx_submitted);
  882. err = usb_submit_urb(urb, GFP_KERNEL);
  883. if (err) {
  884. usb_unanchor_urb(urb);
  885. usb_free_coherent(dev->udev, RX_BUFFER_SIZE, buf,
  886. buf_dma);
  887. usb_free_urb(urb);
  888. break;
  889. }
  890. dev->rxbuf[i] = buf;
  891. dev->rxbuf_dma[i] = buf_dma;
  892. usb_free_urb(urb);
  893. }
  894. if (i == 0) {
  895. dev_warn(dev->udev->dev.parent,
  896. "Cannot setup read URBs, error %d\n", err);
  897. return err;
  898. } else if (i < MAX_RX_URBS) {
  899. dev_warn(dev->udev->dev.parent,
  900. "RX performances may be slow\n");
  901. }
  902. dev->rxinitdone = true;
  903. return 0;
  904. }
  905. static int kvaser_usb_set_opt_mode(const struct kvaser_usb_net_priv *priv)
  906. {
  907. struct kvaser_msg *msg;
  908. int rc;
  909. msg = kmalloc(sizeof(*msg), GFP_KERNEL);
  910. if (!msg)
  911. return -ENOMEM;
  912. msg->id = CMD_SET_CTRL_MODE;
  913. msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_ctrl_mode);
  914. msg->u.ctrl_mode.tid = 0xff;
  915. msg->u.ctrl_mode.channel = priv->channel;
  916. if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
  917. msg->u.ctrl_mode.ctrl_mode = KVASER_CTRL_MODE_SILENT;
  918. else
  919. msg->u.ctrl_mode.ctrl_mode = KVASER_CTRL_MODE_NORMAL;
  920. rc = kvaser_usb_send_msg(priv->dev, msg);
  921. kfree(msg);
  922. return rc;
  923. }
  924. static int kvaser_usb_start_chip(struct kvaser_usb_net_priv *priv)
  925. {
  926. int err;
  927. init_completion(&priv->start_comp);
  928. err = kvaser_usb_send_simple_msg(priv->dev, CMD_START_CHIP,
  929. priv->channel);
  930. if (err)
  931. return err;
  932. if (!wait_for_completion_timeout(&priv->start_comp,
  933. msecs_to_jiffies(START_TIMEOUT)))
  934. return -ETIMEDOUT;
  935. return 0;
  936. }
  937. static int kvaser_usb_open(struct net_device *netdev)
  938. {
  939. struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
  940. struct kvaser_usb *dev = priv->dev;
  941. int err;
  942. err = open_candev(netdev);
  943. if (err)
  944. return err;
  945. err = kvaser_usb_setup_rx_urbs(dev);
  946. if (err)
  947. goto error;
  948. err = kvaser_usb_set_opt_mode(priv);
  949. if (err)
  950. goto error;
  951. err = kvaser_usb_start_chip(priv);
  952. if (err) {
  953. netdev_warn(netdev, "Cannot start device, error %d\n", err);
  954. goto error;
  955. }
  956. priv->can.state = CAN_STATE_ERROR_ACTIVE;
  957. return 0;
  958. error:
  959. close_candev(netdev);
  960. return err;
  961. }
  962. static void kvaser_usb_unlink_all_urbs(struct kvaser_usb *dev)
  963. {
  964. int i;
  965. usb_kill_anchored_urbs(&dev->rx_submitted);
  966. for (i = 0; i < MAX_RX_URBS; i++)
  967. usb_free_coherent(dev->udev, RX_BUFFER_SIZE,
  968. dev->rxbuf[i],
  969. dev->rxbuf_dma[i]);
  970. for (i = 0; i < MAX_NET_DEVICES; i++) {
  971. struct kvaser_usb_net_priv *priv = dev->nets[i];
  972. if (priv)
  973. kvaser_usb_unlink_tx_urbs(priv);
  974. }
  975. }
  976. static int kvaser_usb_stop_chip(struct kvaser_usb_net_priv *priv)
  977. {
  978. int err;
  979. init_completion(&priv->stop_comp);
  980. err = kvaser_usb_send_simple_msg(priv->dev, CMD_STOP_CHIP,
  981. priv->channel);
  982. if (err)
  983. return err;
  984. if (!wait_for_completion_timeout(&priv->stop_comp,
  985. msecs_to_jiffies(STOP_TIMEOUT)))
  986. return -ETIMEDOUT;
  987. return 0;
  988. }
  989. static int kvaser_usb_flush_queue(struct kvaser_usb_net_priv *priv)
  990. {
  991. struct kvaser_msg *msg;
  992. int rc;
  993. msg = kmalloc(sizeof(*msg), GFP_KERNEL);
  994. if (!msg)
  995. return -ENOMEM;
  996. msg->id = CMD_FLUSH_QUEUE;
  997. msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_flush_queue);
  998. msg->u.flush_queue.channel = priv->channel;
  999. msg->u.flush_queue.flags = 0x00;
  1000. rc = kvaser_usb_send_msg(priv->dev, msg);
  1001. kfree(msg);
  1002. return rc;
  1003. }
  1004. static int kvaser_usb_close(struct net_device *netdev)
  1005. {
  1006. struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
  1007. struct kvaser_usb *dev = priv->dev;
  1008. int err;
  1009. netif_stop_queue(netdev);
  1010. err = kvaser_usb_flush_queue(priv);
  1011. if (err)
  1012. netdev_warn(netdev, "Cannot flush queue, error %d\n", err);
  1013. if (kvaser_usb_send_simple_msg(dev, CMD_RESET_CHIP, priv->channel))
  1014. netdev_warn(netdev, "Cannot reset card, error %d\n", err);
  1015. err = kvaser_usb_stop_chip(priv);
  1016. if (err)
  1017. netdev_warn(netdev, "Cannot stop device, error %d\n", err);
  1018. priv->can.state = CAN_STATE_STOPPED;
  1019. close_candev(priv->netdev);
  1020. return 0;
  1021. }
  1022. static void kvaser_usb_write_bulk_callback(struct urb *urb)
  1023. {
  1024. struct kvaser_usb_tx_urb_context *context = urb->context;
  1025. struct kvaser_usb_net_priv *priv;
  1026. struct net_device *netdev;
  1027. if (WARN_ON(!context))
  1028. return;
  1029. priv = context->priv;
  1030. netdev = priv->netdev;
  1031. kfree(urb->transfer_buffer);
  1032. if (!netif_device_present(netdev))
  1033. return;
  1034. if (urb->status)
  1035. netdev_info(netdev, "Tx URB aborted (%d)\n", urb->status);
  1036. }
  1037. static netdev_tx_t kvaser_usb_start_xmit(struct sk_buff *skb,
  1038. struct net_device *netdev)
  1039. {
  1040. struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
  1041. struct kvaser_usb *dev = priv->dev;
  1042. struct net_device_stats *stats = &netdev->stats;
  1043. struct can_frame *cf = (struct can_frame *)skb->data;
  1044. struct kvaser_usb_tx_urb_context *context = NULL;
  1045. struct urb *urb;
  1046. void *buf;
  1047. struct kvaser_msg *msg;
  1048. int i, err;
  1049. int ret = NETDEV_TX_OK;
  1050. if (can_dropped_invalid_skb(netdev, skb))
  1051. return NETDEV_TX_OK;
  1052. urb = usb_alloc_urb(0, GFP_ATOMIC);
  1053. if (!urb) {
  1054. netdev_err(netdev, "No memory left for URBs\n");
  1055. stats->tx_dropped++;
  1056. goto nourbmem;
  1057. }
  1058. buf = kmalloc(sizeof(struct kvaser_msg), GFP_ATOMIC);
  1059. if (!buf) {
  1060. stats->tx_dropped++;
  1061. goto nobufmem;
  1062. }
  1063. msg = buf;
  1064. msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_tx_can);
  1065. msg->u.tx_can.flags = 0;
  1066. msg->u.tx_can.channel = priv->channel;
  1067. if (cf->can_id & CAN_EFF_FLAG) {
  1068. msg->id = CMD_TX_EXT_MESSAGE;
  1069. msg->u.tx_can.msg[0] = (cf->can_id >> 24) & 0x1f;
  1070. msg->u.tx_can.msg[1] = (cf->can_id >> 18) & 0x3f;
  1071. msg->u.tx_can.msg[2] = (cf->can_id >> 14) & 0x0f;
  1072. msg->u.tx_can.msg[3] = (cf->can_id >> 6) & 0xff;
  1073. msg->u.tx_can.msg[4] = cf->can_id & 0x3f;
  1074. } else {
  1075. msg->id = CMD_TX_STD_MESSAGE;
  1076. msg->u.tx_can.msg[0] = (cf->can_id >> 6) & 0x1f;
  1077. msg->u.tx_can.msg[1] = cf->can_id & 0x3f;
  1078. }
  1079. msg->u.tx_can.msg[5] = cf->can_dlc;
  1080. memcpy(&msg->u.tx_can.msg[6], cf->data, cf->can_dlc);
  1081. if (cf->can_id & CAN_RTR_FLAG)
  1082. msg->u.tx_can.flags |= MSG_FLAG_REMOTE_FRAME;
  1083. for (i = 0; i < ARRAY_SIZE(priv->tx_contexts); i++) {
  1084. if (priv->tx_contexts[i].echo_index == MAX_TX_URBS) {
  1085. context = &priv->tx_contexts[i];
  1086. break;
  1087. }
  1088. }
  1089. if (!context) {
  1090. netdev_warn(netdev, "cannot find free context\n");
  1091. ret = NETDEV_TX_BUSY;
  1092. goto releasebuf;
  1093. }
  1094. context->priv = priv;
  1095. context->echo_index = i;
  1096. context->dlc = cf->can_dlc;
  1097. msg->u.tx_can.tid = context->echo_index;
  1098. usb_fill_bulk_urb(urb, dev->udev,
  1099. usb_sndbulkpipe(dev->udev,
  1100. dev->bulk_out->bEndpointAddress),
  1101. buf, msg->len,
  1102. kvaser_usb_write_bulk_callback, context);
  1103. usb_anchor_urb(urb, &priv->tx_submitted);
  1104. can_put_echo_skb(skb, netdev, context->echo_index);
  1105. atomic_inc(&priv->active_tx_urbs);
  1106. if (atomic_read(&priv->active_tx_urbs) >= MAX_TX_URBS)
  1107. netif_stop_queue(netdev);
  1108. err = usb_submit_urb(urb, GFP_ATOMIC);
  1109. if (unlikely(err)) {
  1110. can_free_echo_skb(netdev, context->echo_index);
  1111. skb = NULL; /* set to NULL to avoid double free in
  1112. * dev_kfree_skb(skb) */
  1113. atomic_dec(&priv->active_tx_urbs);
  1114. usb_unanchor_urb(urb);
  1115. stats->tx_dropped++;
  1116. if (err == -ENODEV)
  1117. netif_device_detach(netdev);
  1118. else
  1119. netdev_warn(netdev, "Failed tx_urb %d\n", err);
  1120. goto releasebuf;
  1121. }
  1122. usb_free_urb(urb);
  1123. return NETDEV_TX_OK;
  1124. releasebuf:
  1125. kfree(buf);
  1126. nobufmem:
  1127. usb_free_urb(urb);
  1128. nourbmem:
  1129. dev_kfree_skb(skb);
  1130. return ret;
  1131. }
  1132. static const struct net_device_ops kvaser_usb_netdev_ops = {
  1133. .ndo_open = kvaser_usb_open,
  1134. .ndo_stop = kvaser_usb_close,
  1135. .ndo_start_xmit = kvaser_usb_start_xmit,
  1136. };
  1137. static const struct can_bittiming_const kvaser_usb_bittiming_const = {
  1138. .name = "kvaser_usb",
  1139. .tseg1_min = KVASER_USB_TSEG1_MIN,
  1140. .tseg1_max = KVASER_USB_TSEG1_MAX,
  1141. .tseg2_min = KVASER_USB_TSEG2_MIN,
  1142. .tseg2_max = KVASER_USB_TSEG2_MAX,
  1143. .sjw_max = KVASER_USB_SJW_MAX,
  1144. .brp_min = KVASER_USB_BRP_MIN,
  1145. .brp_max = KVASER_USB_BRP_MAX,
  1146. .brp_inc = KVASER_USB_BRP_INC,
  1147. };
  1148. static int kvaser_usb_set_bittiming(struct net_device *netdev)
  1149. {
  1150. struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
  1151. struct can_bittiming *bt = &priv->can.bittiming;
  1152. struct kvaser_usb *dev = priv->dev;
  1153. struct kvaser_msg *msg;
  1154. int rc;
  1155. msg = kmalloc(sizeof(*msg), GFP_KERNEL);
  1156. if (!msg)
  1157. return -ENOMEM;
  1158. msg->id = CMD_SET_BUS_PARAMS;
  1159. msg->len = MSG_HEADER_LEN + sizeof(struct kvaser_msg_busparams);
  1160. msg->u.busparams.channel = priv->channel;
  1161. msg->u.busparams.tid = 0xff;
  1162. msg->u.busparams.bitrate = cpu_to_le32(bt->bitrate);
  1163. msg->u.busparams.sjw = bt->sjw;
  1164. msg->u.busparams.tseg1 = bt->prop_seg + bt->phase_seg1;
  1165. msg->u.busparams.tseg2 = bt->phase_seg2;
  1166. if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
  1167. msg->u.busparams.no_samp = 3;
  1168. else
  1169. msg->u.busparams.no_samp = 1;
  1170. rc = kvaser_usb_send_msg(dev, msg);
  1171. kfree(msg);
  1172. return rc;
  1173. }
  1174. static int kvaser_usb_set_mode(struct net_device *netdev,
  1175. enum can_mode mode)
  1176. {
  1177. struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
  1178. int err;
  1179. switch (mode) {
  1180. case CAN_MODE_START:
  1181. err = kvaser_usb_simple_msg_async(priv, CMD_START_CHIP);
  1182. if (err)
  1183. return err;
  1184. break;
  1185. default:
  1186. return -EOPNOTSUPP;
  1187. }
  1188. return 0;
  1189. }
  1190. static int kvaser_usb_get_berr_counter(const struct net_device *netdev,
  1191. struct can_berr_counter *bec)
  1192. {
  1193. struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
  1194. *bec = priv->bec;
  1195. return 0;
  1196. }
  1197. static void kvaser_usb_remove_interfaces(struct kvaser_usb *dev)
  1198. {
  1199. int i;
  1200. for (i = 0; i < dev->nchannels; i++) {
  1201. if (!dev->nets[i])
  1202. continue;
  1203. unregister_netdev(dev->nets[i]->netdev);
  1204. }
  1205. kvaser_usb_unlink_all_urbs(dev);
  1206. for (i = 0; i < dev->nchannels; i++) {
  1207. if (!dev->nets[i])
  1208. continue;
  1209. free_candev(dev->nets[i]->netdev);
  1210. }
  1211. }
  1212. static int kvaser_usb_init_one(struct usb_interface *intf,
  1213. const struct usb_device_id *id, int channel)
  1214. {
  1215. struct kvaser_usb *dev = usb_get_intfdata(intf);
  1216. struct net_device *netdev;
  1217. struct kvaser_usb_net_priv *priv;
  1218. int i, err;
  1219. netdev = alloc_candev(sizeof(*priv), MAX_TX_URBS);
  1220. if (!netdev) {
  1221. dev_err(&intf->dev, "Cannot alloc candev\n");
  1222. return -ENOMEM;
  1223. }
  1224. priv = netdev_priv(netdev);
  1225. init_completion(&priv->start_comp);
  1226. init_completion(&priv->stop_comp);
  1227. init_usb_anchor(&priv->tx_submitted);
  1228. atomic_set(&priv->active_tx_urbs, 0);
  1229. for (i = 0; i < ARRAY_SIZE(priv->tx_contexts); i++)
  1230. priv->tx_contexts[i].echo_index = MAX_TX_URBS;
  1231. priv->dev = dev;
  1232. priv->netdev = netdev;
  1233. priv->channel = channel;
  1234. priv->can.state = CAN_STATE_STOPPED;
  1235. priv->can.clock.freq = CAN_USB_CLOCK;
  1236. priv->can.bittiming_const = &kvaser_usb_bittiming_const;
  1237. priv->can.do_set_bittiming = kvaser_usb_set_bittiming;
  1238. priv->can.do_set_mode = kvaser_usb_set_mode;
  1239. if (id->driver_info & KVASER_HAS_TXRX_ERRORS)
  1240. priv->can.do_get_berr_counter = kvaser_usb_get_berr_counter;
  1241. priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES;
  1242. if (id->driver_info & KVASER_HAS_SILENT_MODE)
  1243. priv->can.ctrlmode_supported |= CAN_CTRLMODE_LISTENONLY;
  1244. netdev->flags |= IFF_ECHO;
  1245. netdev->netdev_ops = &kvaser_usb_netdev_ops;
  1246. SET_NETDEV_DEV(netdev, &intf->dev);
  1247. dev->nets[channel] = priv;
  1248. err = register_candev(netdev);
  1249. if (err) {
  1250. dev_err(&intf->dev, "Failed to register can device\n");
  1251. free_candev(netdev);
  1252. dev->nets[channel] = NULL;
  1253. return err;
  1254. }
  1255. netdev_dbg(netdev, "device registered\n");
  1256. return 0;
  1257. }
  1258. static int kvaser_usb_get_endpoints(const struct usb_interface *intf,
  1259. struct usb_endpoint_descriptor **in,
  1260. struct usb_endpoint_descriptor **out)
  1261. {
  1262. const struct usb_host_interface *iface_desc;
  1263. struct usb_endpoint_descriptor *endpoint;
  1264. int i;
  1265. iface_desc = &intf->altsetting[0];
  1266. for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
  1267. endpoint = &iface_desc->endpoint[i].desc;
  1268. if (!*in && usb_endpoint_is_bulk_in(endpoint))
  1269. *in = endpoint;
  1270. if (!*out && usb_endpoint_is_bulk_out(endpoint))
  1271. *out = endpoint;
  1272. /* use first bulk endpoint for in and out */
  1273. if (*in && *out)
  1274. return 0;
  1275. }
  1276. return -ENODEV;
  1277. }
  1278. static int kvaser_usb_probe(struct usb_interface *intf,
  1279. const struct usb_device_id *id)
  1280. {
  1281. struct kvaser_usb *dev;
  1282. int err = -ENOMEM;
  1283. int i;
  1284. dev = devm_kzalloc(&intf->dev, sizeof(*dev), GFP_KERNEL);
  1285. if (!dev)
  1286. return -ENOMEM;
  1287. err = kvaser_usb_get_endpoints(intf, &dev->bulk_in, &dev->bulk_out);
  1288. if (err) {
  1289. dev_err(&intf->dev, "Cannot get usb endpoint(s)");
  1290. return err;
  1291. }
  1292. dev->udev = interface_to_usbdev(intf);
  1293. init_usb_anchor(&dev->rx_submitted);
  1294. usb_set_intfdata(intf, dev);
  1295. for (i = 0; i < MAX_NET_DEVICES; i++)
  1296. kvaser_usb_send_simple_msg(dev, CMD_RESET_CHIP, i);
  1297. err = kvaser_usb_get_software_info(dev);
  1298. if (err) {
  1299. dev_err(&intf->dev,
  1300. "Cannot get software infos, error %d\n", err);
  1301. return err;
  1302. }
  1303. err = kvaser_usb_get_card_info(dev);
  1304. if (err) {
  1305. dev_err(&intf->dev,
  1306. "Cannot get card infos, error %d\n", err);
  1307. return err;
  1308. }
  1309. dev_dbg(&intf->dev, "Firmware version: %d.%d.%d\n",
  1310. ((dev->fw_version >> 24) & 0xff),
  1311. ((dev->fw_version >> 16) & 0xff),
  1312. (dev->fw_version & 0xffff));
  1313. for (i = 0; i < dev->nchannels; i++) {
  1314. err = kvaser_usb_init_one(intf, id, i);
  1315. if (err) {
  1316. kvaser_usb_remove_interfaces(dev);
  1317. return err;
  1318. }
  1319. }
  1320. return 0;
  1321. }
  1322. static void kvaser_usb_disconnect(struct usb_interface *intf)
  1323. {
  1324. struct kvaser_usb *dev = usb_get_intfdata(intf);
  1325. usb_set_intfdata(intf, NULL);
  1326. if (!dev)
  1327. return;
  1328. kvaser_usb_remove_interfaces(dev);
  1329. }
  1330. static struct usb_driver kvaser_usb_driver = {
  1331. .name = "kvaser_usb",
  1332. .probe = kvaser_usb_probe,
  1333. .disconnect = kvaser_usb_disconnect,
  1334. .id_table = kvaser_usb_table,
  1335. };
  1336. module_usb_driver(kvaser_usb_driver);
  1337. MODULE_AUTHOR("Olivier Sobrie <olivier@sobrie.be>");
  1338. MODULE_DESCRIPTION("CAN driver for Kvaser CAN/USB devices");
  1339. MODULE_LICENSE("GPL v2");