kvaser_usb_hydra.c 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028
  1. // SPDX-License-Identifier: GPL-2.0
  2. /* Parts of this driver are based on the following:
  3. * - Kvaser linux mhydra driver (version 5.24)
  4. * - CAN driver for esd CAN-USB/2
  5. *
  6. * Copyright (C) 2018 KVASER AB, Sweden. All rights reserved.
  7. * Copyright (C) 2010 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh
  8. *
  9. * Known issues:
  10. * - Transition from CAN_STATE_ERROR_WARNING to CAN_STATE_ERROR_ACTIVE is only
  11. * reported after a call to do_get_berr_counter(), since firmware does not
  12. * distinguish between ERROR_WARNING and ERROR_ACTIVE.
  13. * - Hardware timestamps are not set for CAN Tx frames.
  14. */
  15. #include <linux/completion.h>
  16. #include <linux/device.h>
  17. #include <linux/gfp.h>
  18. #include <linux/jiffies.h>
  19. #include <linux/kernel.h>
  20. #include <linux/netdevice.h>
  21. #include <linux/spinlock.h>
  22. #include <linux/string.h>
  23. #include <linux/types.h>
  24. #include <linux/usb.h>
  25. #include <linux/can.h>
  26. #include <linux/can/dev.h>
  27. #include <linux/can/error.h>
  28. #include <linux/can/netlink.h>
  29. #include "kvaser_usb.h"
  30. /* Forward declarations */
  31. static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_kcan;
  32. static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_flexc;
  33. #define KVASER_USB_HYDRA_BULK_EP_IN_ADDR 0x82
  34. #define KVASER_USB_HYDRA_BULK_EP_OUT_ADDR 0x02
  35. #define KVASER_USB_HYDRA_MAX_TRANSID 0xff
  36. #define KVASER_USB_HYDRA_MIN_TRANSID 0x01
  37. /* Minihydra command IDs */
  38. #define CMD_SET_BUSPARAMS_REQ 16
  39. #define CMD_GET_CHIP_STATE_REQ 19
  40. #define CMD_CHIP_STATE_EVENT 20
  41. #define CMD_SET_DRIVERMODE_REQ 21
  42. #define CMD_START_CHIP_REQ 26
  43. #define CMD_START_CHIP_RESP 27
  44. #define CMD_STOP_CHIP_REQ 28
  45. #define CMD_STOP_CHIP_RESP 29
  46. #define CMD_TX_CAN_MESSAGE 33
  47. #define CMD_GET_CARD_INFO_REQ 34
  48. #define CMD_GET_CARD_INFO_RESP 35
  49. #define CMD_GET_SOFTWARE_INFO_REQ 38
  50. #define CMD_GET_SOFTWARE_INFO_RESP 39
  51. #define CMD_ERROR_EVENT 45
  52. #define CMD_FLUSH_QUEUE 48
  53. #define CMD_TX_ACKNOWLEDGE 50
  54. #define CMD_FLUSH_QUEUE_RESP 66
  55. #define CMD_SET_BUSPARAMS_FD_REQ 69
  56. #define CMD_SET_BUSPARAMS_FD_RESP 70
  57. #define CMD_SET_BUSPARAMS_RESP 85
  58. #define CMD_GET_CAPABILITIES_REQ 95
  59. #define CMD_GET_CAPABILITIES_RESP 96
  60. #define CMD_RX_MESSAGE 106
  61. #define CMD_MAP_CHANNEL_REQ 200
  62. #define CMD_MAP_CHANNEL_RESP 201
  63. #define CMD_GET_SOFTWARE_DETAILS_REQ 202
  64. #define CMD_GET_SOFTWARE_DETAILS_RESP 203
  65. #define CMD_EXTENDED 255
  66. /* Minihydra extended command IDs */
  67. #define CMD_TX_CAN_MESSAGE_FD 224
  68. #define CMD_TX_ACKNOWLEDGE_FD 225
  69. #define CMD_RX_MESSAGE_FD 226
  70. /* Hydra commands are handled by different threads in firmware.
  71. * The threads are denoted hydra entity (HE). Each HE got a unique 6-bit
  72. * address. The address is used in hydra commands to get/set source and
  73. * destination HE. There are two predefined HE addresses, the remaining
  74. * addresses are different between devices and firmware versions. Hence, we need
  75. * to enumerate the addresses (see kvaser_usb_hydra_map_channel()).
  76. */
  77. /* Well-known HE addresses */
  78. #define KVASER_USB_HYDRA_HE_ADDRESS_ROUTER 0x00
  79. #define KVASER_USB_HYDRA_HE_ADDRESS_ILLEGAL 0x3e
  80. #define KVASER_USB_HYDRA_TRANSID_CANHE 0x40
  81. #define KVASER_USB_HYDRA_TRANSID_SYSDBG 0x61
  82. struct kvaser_cmd_map_ch_req {
  83. char name[16];
  84. u8 channel;
  85. u8 reserved[11];
  86. } __packed;
  87. struct kvaser_cmd_map_ch_res {
  88. u8 he_addr;
  89. u8 channel;
  90. u8 reserved[26];
  91. } __packed;
  92. struct kvaser_cmd_card_info {
  93. __le32 serial_number;
  94. __le32 clock_res;
  95. __le32 mfg_date;
  96. __le32 ean[2];
  97. u8 hw_version;
  98. u8 usb_mode;
  99. u8 hw_type;
  100. u8 reserved0;
  101. u8 nchannels;
  102. u8 reserved1[3];
  103. } __packed;
  104. struct kvaser_cmd_sw_info {
  105. u8 reserved0[8];
  106. __le16 max_outstanding_tx;
  107. u8 reserved1[18];
  108. } __packed;
  109. struct kvaser_cmd_sw_detail_req {
  110. u8 use_ext_cmd;
  111. u8 reserved[27];
  112. } __packed;
  113. /* Software detail flags */
  114. #define KVASER_USB_HYDRA_SW_FLAG_FW_BETA BIT(2)
  115. #define KVASER_USB_HYDRA_SW_FLAG_FW_BAD BIT(4)
  116. #define KVASER_USB_HYDRA_SW_FLAG_FREQ_80M BIT(5)
  117. #define KVASER_USB_HYDRA_SW_FLAG_EXT_CMD BIT(9)
  118. #define KVASER_USB_HYDRA_SW_FLAG_CANFD BIT(10)
  119. #define KVASER_USB_HYDRA_SW_FLAG_NONISO BIT(11)
  120. #define KVASER_USB_HYDRA_SW_FLAG_EXT_CAP BIT(12)
  121. struct kvaser_cmd_sw_detail_res {
  122. __le32 sw_flags;
  123. __le32 sw_version;
  124. __le32 sw_name;
  125. __le32 ean[2];
  126. __le32 max_bitrate;
  127. u8 reserved[4];
  128. } __packed;
  129. /* Sub commands for cap_req and cap_res */
  130. #define KVASER_USB_HYDRA_CAP_CMD_LISTEN_MODE 0x02
  131. #define KVASER_USB_HYDRA_CAP_CMD_ERR_REPORT 0x05
  132. #define KVASER_USB_HYDRA_CAP_CMD_ONE_SHOT 0x06
  133. struct kvaser_cmd_cap_req {
  134. __le16 cap_cmd;
  135. u8 reserved[26];
  136. } __packed;
  137. /* Status codes for cap_res */
  138. #define KVASER_USB_HYDRA_CAP_STAT_OK 0x00
  139. #define KVASER_USB_HYDRA_CAP_STAT_NOT_IMPL 0x01
  140. #define KVASER_USB_HYDRA_CAP_STAT_UNAVAIL 0x02
  141. struct kvaser_cmd_cap_res {
  142. __le16 cap_cmd;
  143. __le16 status;
  144. __le32 mask;
  145. __le32 value;
  146. u8 reserved[16];
  147. } __packed;
  148. /* CMD_ERROR_EVENT error codes */
  149. #define KVASER_USB_HYDRA_ERROR_EVENT_CAN 0x01
  150. #define KVASER_USB_HYDRA_ERROR_EVENT_PARAM 0x09
  151. struct kvaser_cmd_error_event {
  152. __le16 timestamp[3];
  153. u8 reserved;
  154. u8 error_code;
  155. __le16 info1;
  156. __le16 info2;
  157. } __packed;
  158. /* Chip state status flags. Used for chip_state_event and err_frame_data. */
  159. #define KVASER_USB_HYDRA_BUS_ERR_ACT 0x00
  160. #define KVASER_USB_HYDRA_BUS_ERR_PASS BIT(5)
  161. #define KVASER_USB_HYDRA_BUS_BUS_OFF BIT(6)
  162. struct kvaser_cmd_chip_state_event {
  163. __le16 timestamp[3];
  164. u8 tx_err_counter;
  165. u8 rx_err_counter;
  166. u8 bus_status;
  167. u8 reserved[19];
  168. } __packed;
  169. /* Busparam modes */
  170. #define KVASER_USB_HYDRA_BUS_MODE_CAN 0x00
  171. #define KVASER_USB_HYDRA_BUS_MODE_CANFD_ISO 0x01
  172. #define KVASER_USB_HYDRA_BUS_MODE_NONISO 0x02
  173. struct kvaser_cmd_set_busparams {
  174. __le32 bitrate;
  175. u8 tseg1;
  176. u8 tseg2;
  177. u8 sjw;
  178. u8 nsamples;
  179. u8 reserved0[4];
  180. __le32 bitrate_d;
  181. u8 tseg1_d;
  182. u8 tseg2_d;
  183. u8 sjw_d;
  184. u8 nsamples_d;
  185. u8 canfd_mode;
  186. u8 reserved1[7];
  187. } __packed;
  188. /* Ctrl modes */
  189. #define KVASER_USB_HYDRA_CTRLMODE_NORMAL 0x01
  190. #define KVASER_USB_HYDRA_CTRLMODE_LISTEN 0x02
  191. struct kvaser_cmd_set_ctrlmode {
  192. u8 mode;
  193. u8 reserved[27];
  194. } __packed;
  195. struct kvaser_err_frame_data {
  196. u8 bus_status;
  197. u8 reserved0;
  198. u8 tx_err_counter;
  199. u8 rx_err_counter;
  200. u8 reserved1[4];
  201. } __packed;
  202. struct kvaser_cmd_rx_can {
  203. u8 cmd_len;
  204. u8 cmd_no;
  205. u8 channel;
  206. u8 flags;
  207. __le16 timestamp[3];
  208. u8 dlc;
  209. u8 padding;
  210. __le32 id;
  211. union {
  212. u8 data[8];
  213. struct kvaser_err_frame_data err_frame_data;
  214. };
  215. } __packed;
  216. /* Extended CAN ID flag. Used in rx_can and tx_can */
  217. #define KVASER_USB_HYDRA_EXTENDED_FRAME_ID BIT(31)
  218. struct kvaser_cmd_tx_can {
  219. __le32 id;
  220. u8 data[8];
  221. u8 dlc;
  222. u8 flags;
  223. __le16 transid;
  224. u8 channel;
  225. u8 reserved[11];
  226. } __packed;
  227. struct kvaser_cmd_header {
  228. u8 cmd_no;
  229. /* The destination HE address is stored in 0..5 of he_addr.
  230. * The upper part of source HE address is stored in 6..7 of he_addr, and
  231. * the lower part is stored in 12..15 of transid.
  232. */
  233. u8 he_addr;
  234. __le16 transid;
  235. } __packed;
  236. struct kvaser_cmd {
  237. struct kvaser_cmd_header header;
  238. union {
  239. struct kvaser_cmd_map_ch_req map_ch_req;
  240. struct kvaser_cmd_map_ch_res map_ch_res;
  241. struct kvaser_cmd_card_info card_info;
  242. struct kvaser_cmd_sw_info sw_info;
  243. struct kvaser_cmd_sw_detail_req sw_detail_req;
  244. struct kvaser_cmd_sw_detail_res sw_detail_res;
  245. struct kvaser_cmd_cap_req cap_req;
  246. struct kvaser_cmd_cap_res cap_res;
  247. struct kvaser_cmd_error_event error_event;
  248. struct kvaser_cmd_set_busparams set_busparams_req;
  249. struct kvaser_cmd_chip_state_event chip_state_event;
  250. struct kvaser_cmd_set_ctrlmode set_ctrlmode;
  251. struct kvaser_cmd_rx_can rx_can;
  252. struct kvaser_cmd_tx_can tx_can;
  253. } __packed;
  254. } __packed;
  255. /* CAN frame flags. Used in rx_can, ext_rx_can, tx_can and ext_tx_can */
  256. #define KVASER_USB_HYDRA_CF_FLAG_ERROR_FRAME BIT(0)
  257. #define KVASER_USB_HYDRA_CF_FLAG_OVERRUN BIT(1)
  258. #define KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME BIT(4)
  259. #define KVASER_USB_HYDRA_CF_FLAG_EXTENDED_ID BIT(5)
  260. /* CAN frame flags. Used in ext_rx_can and ext_tx_can */
  261. #define KVASER_USB_HYDRA_CF_FLAG_OSM_NACK BIT(12)
  262. #define KVASER_USB_HYDRA_CF_FLAG_ABL BIT(13)
  263. #define KVASER_USB_HYDRA_CF_FLAG_FDF BIT(16)
  264. #define KVASER_USB_HYDRA_CF_FLAG_BRS BIT(17)
  265. #define KVASER_USB_HYDRA_CF_FLAG_ESI BIT(18)
  266. /* KCAN packet header macros. Used in ext_rx_can and ext_tx_can */
  267. #define KVASER_USB_KCAN_DATA_DLC_BITS 4
  268. #define KVASER_USB_KCAN_DATA_DLC_SHIFT 8
  269. #define KVASER_USB_KCAN_DATA_DLC_MASK \
  270. GENMASK(KVASER_USB_KCAN_DATA_DLC_BITS - 1 + \
  271. KVASER_USB_KCAN_DATA_DLC_SHIFT, \
  272. KVASER_USB_KCAN_DATA_DLC_SHIFT)
  273. #define KVASER_USB_KCAN_DATA_BRS BIT(14)
  274. #define KVASER_USB_KCAN_DATA_FDF BIT(15)
  275. #define KVASER_USB_KCAN_DATA_OSM BIT(16)
  276. #define KVASER_USB_KCAN_DATA_AREQ BIT(31)
  277. #define KVASER_USB_KCAN_DATA_SRR BIT(31)
  278. #define KVASER_USB_KCAN_DATA_RTR BIT(29)
  279. #define KVASER_USB_KCAN_DATA_IDE BIT(30)
  280. struct kvaser_cmd_ext_rx_can {
  281. __le32 flags;
  282. __le32 id;
  283. __le32 kcan_id;
  284. __le32 kcan_header;
  285. __le64 timestamp;
  286. union {
  287. u8 kcan_payload[64];
  288. struct kvaser_err_frame_data err_frame_data;
  289. };
  290. } __packed;
  291. struct kvaser_cmd_ext_tx_can {
  292. __le32 flags;
  293. __le32 id;
  294. __le32 kcan_id;
  295. __le32 kcan_header;
  296. u8 databytes;
  297. u8 dlc;
  298. u8 reserved[6];
  299. u8 kcan_payload[64];
  300. } __packed;
  301. struct kvaser_cmd_ext_tx_ack {
  302. __le32 flags;
  303. u8 reserved0[4];
  304. __le64 timestamp;
  305. u8 reserved1[8];
  306. } __packed;
  307. /* struct for extended commands (CMD_EXTENDED) */
  308. struct kvaser_cmd_ext {
  309. struct kvaser_cmd_header header;
  310. __le16 len;
  311. u8 cmd_no_ext;
  312. u8 reserved;
  313. union {
  314. struct kvaser_cmd_ext_rx_can rx_can;
  315. struct kvaser_cmd_ext_tx_can tx_can;
  316. struct kvaser_cmd_ext_tx_ack tx_ack;
  317. } __packed;
  318. } __packed;
  319. static const struct can_bittiming_const kvaser_usb_hydra_kcan_bittiming_c = {
  320. .name = "kvaser_usb_kcan",
  321. .tseg1_min = 1,
  322. .tseg1_max = 255,
  323. .tseg2_min = 1,
  324. .tseg2_max = 32,
  325. .sjw_max = 16,
  326. .brp_min = 1,
  327. .brp_max = 4096,
  328. .brp_inc = 1,
  329. };
  330. static const struct can_bittiming_const kvaser_usb_hydra_flexc_bittiming_c = {
  331. .name = "kvaser_usb_flex",
  332. .tseg1_min = 4,
  333. .tseg1_max = 16,
  334. .tseg2_min = 2,
  335. .tseg2_max = 8,
  336. .sjw_max = 4,
  337. .brp_min = 1,
  338. .brp_max = 256,
  339. .brp_inc = 1,
  340. };
  341. #define KVASER_USB_HYDRA_TRANSID_BITS 12
  342. #define KVASER_USB_HYDRA_TRANSID_MASK \
  343. GENMASK(KVASER_USB_HYDRA_TRANSID_BITS - 1, 0)
  344. #define KVASER_USB_HYDRA_HE_ADDR_SRC_MASK GENMASK(7, 6)
  345. #define KVASER_USB_HYDRA_HE_ADDR_DEST_MASK GENMASK(5, 0)
  346. #define KVASER_USB_HYDRA_HE_ADDR_SRC_BITS 2
  347. static inline u16 kvaser_usb_hydra_get_cmd_transid(const struct kvaser_cmd *cmd)
  348. {
  349. return le16_to_cpu(cmd->header.transid) & KVASER_USB_HYDRA_TRANSID_MASK;
  350. }
  351. static inline void kvaser_usb_hydra_set_cmd_transid(struct kvaser_cmd *cmd,
  352. u16 transid)
  353. {
  354. cmd->header.transid =
  355. cpu_to_le16(transid & KVASER_USB_HYDRA_TRANSID_MASK);
  356. }
  357. static inline u8 kvaser_usb_hydra_get_cmd_src_he(const struct kvaser_cmd *cmd)
  358. {
  359. return (cmd->header.he_addr & KVASER_USB_HYDRA_HE_ADDR_SRC_MASK) >>
  360. KVASER_USB_HYDRA_HE_ADDR_SRC_BITS |
  361. le16_to_cpu(cmd->header.transid) >>
  362. KVASER_USB_HYDRA_TRANSID_BITS;
  363. }
  364. static inline void kvaser_usb_hydra_set_cmd_dest_he(struct kvaser_cmd *cmd,
  365. u8 dest_he)
  366. {
  367. cmd->header.he_addr =
  368. (cmd->header.he_addr & KVASER_USB_HYDRA_HE_ADDR_SRC_MASK) |
  369. (dest_he & KVASER_USB_HYDRA_HE_ADDR_DEST_MASK);
  370. }
  371. static u8 kvaser_usb_hydra_channel_from_cmd(const struct kvaser_usb *dev,
  372. const struct kvaser_cmd *cmd)
  373. {
  374. int i;
  375. u8 channel = 0xff;
  376. u8 src_he = kvaser_usb_hydra_get_cmd_src_he(cmd);
  377. for (i = 0; i < KVASER_USB_MAX_NET_DEVICES; i++) {
  378. if (dev->card_data.hydra.channel_to_he[i] == src_he) {
  379. channel = i;
  380. break;
  381. }
  382. }
  383. return channel;
  384. }
  385. static u16 kvaser_usb_hydra_get_next_transid(struct kvaser_usb *dev)
  386. {
  387. unsigned long flags;
  388. u16 transid;
  389. struct kvaser_usb_dev_card_data_hydra *card_data =
  390. &dev->card_data.hydra;
  391. spin_lock_irqsave(&card_data->transid_lock, flags);
  392. transid = card_data->transid;
  393. if (transid >= KVASER_USB_HYDRA_MAX_TRANSID)
  394. transid = KVASER_USB_HYDRA_MIN_TRANSID;
  395. else
  396. transid++;
  397. card_data->transid = transid;
  398. spin_unlock_irqrestore(&card_data->transid_lock, flags);
  399. return transid;
  400. }
  401. static size_t kvaser_usb_hydra_cmd_size(struct kvaser_cmd *cmd)
  402. {
  403. size_t ret;
  404. if (cmd->header.cmd_no == CMD_EXTENDED)
  405. ret = le16_to_cpu(((struct kvaser_cmd_ext *)cmd)->len);
  406. else
  407. ret = sizeof(struct kvaser_cmd);
  408. return ret;
  409. }
  410. static struct kvaser_usb_net_priv *
  411. kvaser_usb_hydra_net_priv_from_cmd(const struct kvaser_usb *dev,
  412. const struct kvaser_cmd *cmd)
  413. {
  414. struct kvaser_usb_net_priv *priv = NULL;
  415. u8 channel = kvaser_usb_hydra_channel_from_cmd(dev, cmd);
  416. if (channel >= dev->nchannels)
  417. dev_err(&dev->intf->dev,
  418. "Invalid channel number (%d)\n", channel);
  419. else
  420. priv = dev->nets[channel];
  421. return priv;
  422. }
  423. static ktime_t
  424. kvaser_usb_hydra_ktime_from_rx_cmd(const struct kvaser_usb_dev_cfg *cfg,
  425. const struct kvaser_cmd *cmd)
  426. {
  427. u64 ticks;
  428. if (cmd->header.cmd_no == CMD_EXTENDED) {
  429. struct kvaser_cmd_ext *cmd_ext = (struct kvaser_cmd_ext *)cmd;
  430. ticks = le64_to_cpu(cmd_ext->rx_can.timestamp);
  431. } else {
  432. ticks = le16_to_cpu(cmd->rx_can.timestamp[0]);
  433. ticks += (u64)(le16_to_cpu(cmd->rx_can.timestamp[1])) << 16;
  434. ticks += (u64)(le16_to_cpu(cmd->rx_can.timestamp[2])) << 32;
  435. }
  436. return ns_to_ktime(div_u64(ticks * 1000, cfg->timestamp_freq));
  437. }
  438. static int kvaser_usb_hydra_send_simple_cmd(struct kvaser_usb *dev,
  439. u8 cmd_no, int channel)
  440. {
  441. struct kvaser_cmd *cmd;
  442. int err;
  443. cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL);
  444. if (!cmd)
  445. return -ENOMEM;
  446. cmd->header.cmd_no = cmd_no;
  447. if (channel < 0) {
  448. kvaser_usb_hydra_set_cmd_dest_he
  449. (cmd, KVASER_USB_HYDRA_HE_ADDRESS_ILLEGAL);
  450. } else {
  451. if (channel >= KVASER_USB_MAX_NET_DEVICES) {
  452. dev_err(&dev->intf->dev, "channel (%d) out of range.\n",
  453. channel);
  454. err = -EINVAL;
  455. goto end;
  456. }
  457. kvaser_usb_hydra_set_cmd_dest_he
  458. (cmd, dev->card_data.hydra.channel_to_he[channel]);
  459. }
  460. kvaser_usb_hydra_set_cmd_transid
  461. (cmd, kvaser_usb_hydra_get_next_transid(dev));
  462. err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
  463. if (err)
  464. goto end;
  465. end:
  466. kfree(cmd);
  467. return err;
  468. }
  469. static int
  470. kvaser_usb_hydra_send_simple_cmd_async(struct kvaser_usb_net_priv *priv,
  471. u8 cmd_no)
  472. {
  473. struct kvaser_cmd *cmd;
  474. struct kvaser_usb *dev = priv->dev;
  475. int err;
  476. cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_ATOMIC);
  477. if (!cmd)
  478. return -ENOMEM;
  479. cmd->header.cmd_no = cmd_no;
  480. kvaser_usb_hydra_set_cmd_dest_he
  481. (cmd, dev->card_data.hydra.channel_to_he[priv->channel]);
  482. kvaser_usb_hydra_set_cmd_transid
  483. (cmd, kvaser_usb_hydra_get_next_transid(dev));
  484. err = kvaser_usb_send_cmd_async(priv, cmd,
  485. kvaser_usb_hydra_cmd_size(cmd));
  486. if (err)
  487. kfree(cmd);
  488. return err;
  489. }
  490. /* This function is used for synchronously waiting on hydra control commands.
  491. * Note: Compared to kvaser_usb_hydra_read_bulk_callback(), we never need to
  492. * handle partial hydra commands. Since hydra control commands are always
  493. * non-extended commands.
  494. */
  495. static int kvaser_usb_hydra_wait_cmd(const struct kvaser_usb *dev, u8 cmd_no,
  496. struct kvaser_cmd *cmd)
  497. {
  498. void *buf;
  499. int err;
  500. unsigned long timeout = jiffies + msecs_to_jiffies(KVASER_USB_TIMEOUT);
  501. if (cmd->header.cmd_no == CMD_EXTENDED) {
  502. dev_err(&dev->intf->dev, "Wait for CMD_EXTENDED not allowed\n");
  503. return -EINVAL;
  504. }
  505. buf = kzalloc(KVASER_USB_RX_BUFFER_SIZE, GFP_KERNEL);
  506. if (!buf)
  507. return -ENOMEM;
  508. do {
  509. int actual_len = 0;
  510. int pos = 0;
  511. err = kvaser_usb_recv_cmd(dev, buf, KVASER_USB_RX_BUFFER_SIZE,
  512. &actual_len);
  513. if (err < 0)
  514. goto end;
  515. while (pos < actual_len) {
  516. struct kvaser_cmd *tmp_cmd;
  517. size_t cmd_len;
  518. tmp_cmd = buf + pos;
  519. cmd_len = kvaser_usb_hydra_cmd_size(tmp_cmd);
  520. if (pos + cmd_len > actual_len) {
  521. dev_err_ratelimited(&dev->intf->dev,
  522. "Format error\n");
  523. break;
  524. }
  525. if (tmp_cmd->header.cmd_no == cmd_no) {
  526. memcpy(cmd, tmp_cmd, cmd_len);
  527. goto end;
  528. }
  529. pos += cmd_len;
  530. }
  531. } while (time_before(jiffies, timeout));
  532. err = -EINVAL;
  533. end:
  534. kfree(buf);
  535. return err;
  536. }
  537. static int kvaser_usb_hydra_map_channel_resp(struct kvaser_usb *dev,
  538. const struct kvaser_cmd *cmd)
  539. {
  540. u8 he, channel;
  541. u16 transid = kvaser_usb_hydra_get_cmd_transid(cmd);
  542. struct kvaser_usb_dev_card_data_hydra *card_data =
  543. &dev->card_data.hydra;
  544. if (transid > 0x007f || transid < 0x0040) {
  545. dev_err(&dev->intf->dev,
  546. "CMD_MAP_CHANNEL_RESP, invalid transid: 0x%x\n",
  547. transid);
  548. return -EINVAL;
  549. }
  550. switch (transid) {
  551. case KVASER_USB_HYDRA_TRANSID_CANHE:
  552. case KVASER_USB_HYDRA_TRANSID_CANHE + 1:
  553. case KVASER_USB_HYDRA_TRANSID_CANHE + 2:
  554. case KVASER_USB_HYDRA_TRANSID_CANHE + 3:
  555. case KVASER_USB_HYDRA_TRANSID_CANHE + 4:
  556. channel = transid & 0x000f;
  557. he = cmd->map_ch_res.he_addr;
  558. card_data->channel_to_he[channel] = he;
  559. break;
  560. case KVASER_USB_HYDRA_TRANSID_SYSDBG:
  561. card_data->sysdbg_he = cmd->map_ch_res.he_addr;
  562. break;
  563. default:
  564. dev_warn(&dev->intf->dev,
  565. "Unknown CMD_MAP_CHANNEL_RESP transid=0x%x\n",
  566. transid);
  567. break;
  568. }
  569. return 0;
  570. }
  571. static int kvaser_usb_hydra_map_channel(struct kvaser_usb *dev, u16 transid,
  572. u8 channel, const char *name)
  573. {
  574. struct kvaser_cmd *cmd;
  575. int err;
  576. cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL);
  577. if (!cmd)
  578. return -ENOMEM;
  579. strcpy(cmd->map_ch_req.name, name);
  580. cmd->header.cmd_no = CMD_MAP_CHANNEL_REQ;
  581. kvaser_usb_hydra_set_cmd_dest_he
  582. (cmd, KVASER_USB_HYDRA_HE_ADDRESS_ROUTER);
  583. cmd->map_ch_req.channel = channel;
  584. kvaser_usb_hydra_set_cmd_transid(cmd, transid);
  585. err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
  586. if (err)
  587. goto end;
  588. err = kvaser_usb_hydra_wait_cmd(dev, CMD_MAP_CHANNEL_RESP, cmd);
  589. if (err)
  590. goto end;
  591. err = kvaser_usb_hydra_map_channel_resp(dev, cmd);
  592. if (err)
  593. goto end;
  594. end:
  595. kfree(cmd);
  596. return err;
  597. }
  598. static int kvaser_usb_hydra_get_single_capability(struct kvaser_usb *dev,
  599. u16 cap_cmd_req, u16 *status)
  600. {
  601. struct kvaser_usb_dev_card_data *card_data = &dev->card_data;
  602. struct kvaser_cmd *cmd;
  603. u32 value = 0;
  604. u32 mask = 0;
  605. u16 cap_cmd_res;
  606. int err;
  607. int i;
  608. cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL);
  609. if (!cmd)
  610. return -ENOMEM;
  611. cmd->header.cmd_no = CMD_GET_CAPABILITIES_REQ;
  612. cmd->cap_req.cap_cmd = cpu_to_le16(cap_cmd_req);
  613. kvaser_usb_hydra_set_cmd_dest_he(cmd, card_data->hydra.sysdbg_he);
  614. kvaser_usb_hydra_set_cmd_transid
  615. (cmd, kvaser_usb_hydra_get_next_transid(dev));
  616. err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
  617. if (err)
  618. goto end;
  619. err = kvaser_usb_hydra_wait_cmd(dev, CMD_GET_CAPABILITIES_RESP, cmd);
  620. if (err)
  621. goto end;
  622. *status = le16_to_cpu(cmd->cap_res.status);
  623. if (*status != KVASER_USB_HYDRA_CAP_STAT_OK)
  624. goto end;
  625. cap_cmd_res = le16_to_cpu(cmd->cap_res.cap_cmd);
  626. switch (cap_cmd_res) {
  627. case KVASER_USB_HYDRA_CAP_CMD_LISTEN_MODE:
  628. case KVASER_USB_HYDRA_CAP_CMD_ERR_REPORT:
  629. case KVASER_USB_HYDRA_CAP_CMD_ONE_SHOT:
  630. value = le32_to_cpu(cmd->cap_res.value);
  631. mask = le32_to_cpu(cmd->cap_res.mask);
  632. break;
  633. default:
  634. dev_warn(&dev->intf->dev, "Unknown capability command %u\n",
  635. cap_cmd_res);
  636. break;
  637. }
  638. for (i = 0; i < dev->nchannels; i++) {
  639. if (BIT(i) & (value & mask)) {
  640. switch (cap_cmd_res) {
  641. case KVASER_USB_HYDRA_CAP_CMD_LISTEN_MODE:
  642. card_data->ctrlmode_supported |=
  643. CAN_CTRLMODE_LISTENONLY;
  644. break;
  645. case KVASER_USB_HYDRA_CAP_CMD_ERR_REPORT:
  646. card_data->capabilities |=
  647. KVASER_USB_CAP_BERR_CAP;
  648. break;
  649. case KVASER_USB_HYDRA_CAP_CMD_ONE_SHOT:
  650. card_data->ctrlmode_supported |=
  651. CAN_CTRLMODE_ONE_SHOT;
  652. break;
  653. }
  654. }
  655. }
  656. end:
  657. kfree(cmd);
  658. return err;
  659. }
  660. static void kvaser_usb_hydra_start_chip_reply(const struct kvaser_usb *dev,
  661. const struct kvaser_cmd *cmd)
  662. {
  663. struct kvaser_usb_net_priv *priv;
  664. priv = kvaser_usb_hydra_net_priv_from_cmd(dev, cmd);
  665. if (!priv)
  666. return;
  667. if (completion_done(&priv->start_comp) &&
  668. netif_queue_stopped(priv->netdev)) {
  669. netif_wake_queue(priv->netdev);
  670. } else {
  671. netif_start_queue(priv->netdev);
  672. complete(&priv->start_comp);
  673. }
  674. }
  675. static void kvaser_usb_hydra_stop_chip_reply(const struct kvaser_usb *dev,
  676. const struct kvaser_cmd *cmd)
  677. {
  678. struct kvaser_usb_net_priv *priv;
  679. priv = kvaser_usb_hydra_net_priv_from_cmd(dev, cmd);
  680. if (!priv)
  681. return;
  682. complete(&priv->stop_comp);
  683. }
  684. static void kvaser_usb_hydra_flush_queue_reply(const struct kvaser_usb *dev,
  685. const struct kvaser_cmd *cmd)
  686. {
  687. struct kvaser_usb_net_priv *priv;
  688. priv = kvaser_usb_hydra_net_priv_from_cmd(dev, cmd);
  689. if (!priv)
  690. return;
  691. complete(&priv->flush_comp);
  692. }
  693. static void
  694. kvaser_usb_hydra_bus_status_to_can_state(const struct kvaser_usb_net_priv *priv,
  695. u8 bus_status,
  696. const struct can_berr_counter *bec,
  697. enum can_state *new_state)
  698. {
  699. if (bus_status & KVASER_USB_HYDRA_BUS_BUS_OFF) {
  700. *new_state = CAN_STATE_BUS_OFF;
  701. } else if (bus_status & KVASER_USB_HYDRA_BUS_ERR_PASS) {
  702. *new_state = CAN_STATE_ERROR_PASSIVE;
  703. } else if (bus_status == KVASER_USB_HYDRA_BUS_ERR_ACT) {
  704. if (bec->txerr >= 128 || bec->rxerr >= 128) {
  705. netdev_warn(priv->netdev,
  706. "ERR_ACTIVE but err tx=%u or rx=%u >=128\n",
  707. bec->txerr, bec->rxerr);
  708. *new_state = CAN_STATE_ERROR_PASSIVE;
  709. } else if (bec->txerr >= 96 || bec->rxerr >= 96) {
  710. *new_state = CAN_STATE_ERROR_WARNING;
  711. } else {
  712. *new_state = CAN_STATE_ERROR_ACTIVE;
  713. }
  714. }
  715. }
  716. static void kvaser_usb_hydra_update_state(struct kvaser_usb_net_priv *priv,
  717. u8 bus_status,
  718. const struct can_berr_counter *bec)
  719. {
  720. struct net_device *netdev = priv->netdev;
  721. struct can_frame *cf;
  722. struct sk_buff *skb;
  723. struct net_device_stats *stats;
  724. enum can_state new_state, old_state;
  725. old_state = priv->can.state;
  726. kvaser_usb_hydra_bus_status_to_can_state(priv, bus_status, bec,
  727. &new_state);
  728. if (new_state == old_state)
  729. return;
  730. /* Ignore state change if previous state was STOPPED and the new state
  731. * is BUS_OFF. Firmware always report this as BUS_OFF, since firmware
  732. * does not distinguish between BUS_OFF and STOPPED.
  733. */
  734. if (old_state == CAN_STATE_STOPPED && new_state == CAN_STATE_BUS_OFF)
  735. return;
  736. skb = alloc_can_err_skb(netdev, &cf);
  737. if (skb) {
  738. enum can_state tx_state, rx_state;
  739. tx_state = (bec->txerr >= bec->rxerr) ?
  740. new_state : CAN_STATE_ERROR_ACTIVE;
  741. rx_state = (bec->txerr <= bec->rxerr) ?
  742. new_state : CAN_STATE_ERROR_ACTIVE;
  743. can_change_state(netdev, cf, tx_state, rx_state);
  744. }
  745. if (new_state == CAN_STATE_BUS_OFF && old_state < CAN_STATE_BUS_OFF) {
  746. if (!priv->can.restart_ms)
  747. kvaser_usb_hydra_send_simple_cmd_async
  748. (priv, CMD_STOP_CHIP_REQ);
  749. can_bus_off(netdev);
  750. }
  751. if (!skb) {
  752. netdev_warn(netdev, "No memory left for err_skb\n");
  753. return;
  754. }
  755. if (priv->can.restart_ms &&
  756. old_state >= CAN_STATE_BUS_OFF &&
  757. new_state < CAN_STATE_BUS_OFF)
  758. priv->can.can_stats.restarts++;
  759. cf->data[6] = bec->txerr;
  760. cf->data[7] = bec->rxerr;
  761. stats = &netdev->stats;
  762. stats->rx_packets++;
  763. stats->rx_bytes += cf->can_dlc;
  764. netif_rx(skb);
  765. }
  766. static void kvaser_usb_hydra_state_event(const struct kvaser_usb *dev,
  767. const struct kvaser_cmd *cmd)
  768. {
  769. struct kvaser_usb_net_priv *priv;
  770. struct can_berr_counter bec;
  771. u8 bus_status;
  772. priv = kvaser_usb_hydra_net_priv_from_cmd(dev, cmd);
  773. if (!priv)
  774. return;
  775. bus_status = cmd->chip_state_event.bus_status;
  776. bec.txerr = cmd->chip_state_event.tx_err_counter;
  777. bec.rxerr = cmd->chip_state_event.rx_err_counter;
  778. kvaser_usb_hydra_update_state(priv, bus_status, &bec);
  779. priv->bec.txerr = bec.txerr;
  780. priv->bec.rxerr = bec.rxerr;
  781. }
  782. static void kvaser_usb_hydra_error_event_parameter(const struct kvaser_usb *dev,
  783. const struct kvaser_cmd *cmd)
  784. {
  785. /* info1 will contain the offending cmd_no */
  786. switch (le16_to_cpu(cmd->error_event.info1)) {
  787. case CMD_START_CHIP_REQ:
  788. dev_warn(&dev->intf->dev,
  789. "CMD_START_CHIP_REQ error in parameter\n");
  790. break;
  791. case CMD_STOP_CHIP_REQ:
  792. dev_warn(&dev->intf->dev,
  793. "CMD_STOP_CHIP_REQ error in parameter\n");
  794. break;
  795. case CMD_FLUSH_QUEUE:
  796. dev_warn(&dev->intf->dev,
  797. "CMD_FLUSH_QUEUE error in parameter\n");
  798. break;
  799. case CMD_SET_BUSPARAMS_REQ:
  800. dev_warn(&dev->intf->dev,
  801. "Set bittiming failed. Error in parameter\n");
  802. break;
  803. case CMD_SET_BUSPARAMS_FD_REQ:
  804. dev_warn(&dev->intf->dev,
  805. "Set data bittiming failed. Error in parameter\n");
  806. break;
  807. default:
  808. dev_warn(&dev->intf->dev,
  809. "Unhandled parameter error event cmd_no (%u)\n",
  810. le16_to_cpu(cmd->error_event.info1));
  811. break;
  812. }
  813. }
  814. static void kvaser_usb_hydra_error_event(const struct kvaser_usb *dev,
  815. const struct kvaser_cmd *cmd)
  816. {
  817. switch (cmd->error_event.error_code) {
  818. case KVASER_USB_HYDRA_ERROR_EVENT_PARAM:
  819. kvaser_usb_hydra_error_event_parameter(dev, cmd);
  820. break;
  821. case KVASER_USB_HYDRA_ERROR_EVENT_CAN:
  822. /* Wrong channel mapping?! This should never happen!
  823. * info1 will contain the offending cmd_no
  824. */
  825. dev_err(&dev->intf->dev,
  826. "Received CAN error event for cmd_no (%u)\n",
  827. le16_to_cpu(cmd->error_event.info1));
  828. break;
  829. default:
  830. dev_warn(&dev->intf->dev,
  831. "Unhandled error event (%d)\n",
  832. cmd->error_event.error_code);
  833. break;
  834. }
  835. }
  836. static void
  837. kvaser_usb_hydra_error_frame(struct kvaser_usb_net_priv *priv,
  838. const struct kvaser_err_frame_data *err_frame_data,
  839. ktime_t hwtstamp)
  840. {
  841. struct net_device *netdev = priv->netdev;
  842. struct net_device_stats *stats = &netdev->stats;
  843. struct can_frame *cf;
  844. struct sk_buff *skb;
  845. struct skb_shared_hwtstamps *shhwtstamps;
  846. struct can_berr_counter bec;
  847. enum can_state new_state, old_state;
  848. u8 bus_status;
  849. priv->can.can_stats.bus_error++;
  850. stats->rx_errors++;
  851. bus_status = err_frame_data->bus_status;
  852. bec.txerr = err_frame_data->tx_err_counter;
  853. bec.rxerr = err_frame_data->rx_err_counter;
  854. old_state = priv->can.state;
  855. kvaser_usb_hydra_bus_status_to_can_state(priv, bus_status, &bec,
  856. &new_state);
  857. skb = alloc_can_err_skb(netdev, &cf);
  858. if (new_state != old_state) {
  859. if (skb) {
  860. enum can_state tx_state, rx_state;
  861. tx_state = (bec.txerr >= bec.rxerr) ?
  862. new_state : CAN_STATE_ERROR_ACTIVE;
  863. rx_state = (bec.txerr <= bec.rxerr) ?
  864. new_state : CAN_STATE_ERROR_ACTIVE;
  865. can_change_state(netdev, cf, tx_state, rx_state);
  866. }
  867. if (new_state == CAN_STATE_BUS_OFF) {
  868. if (!priv->can.restart_ms)
  869. kvaser_usb_hydra_send_simple_cmd_async
  870. (priv, CMD_STOP_CHIP_REQ);
  871. can_bus_off(netdev);
  872. }
  873. if (priv->can.restart_ms &&
  874. old_state >= CAN_STATE_BUS_OFF &&
  875. new_state < CAN_STATE_BUS_OFF)
  876. cf->can_id |= CAN_ERR_RESTARTED;
  877. }
  878. if (!skb) {
  879. stats->rx_dropped++;
  880. netdev_warn(netdev, "No memory left for err_skb\n");
  881. return;
  882. }
  883. shhwtstamps = skb_hwtstamps(skb);
  884. shhwtstamps->hwtstamp = hwtstamp;
  885. cf->can_id |= CAN_ERR_BUSERROR;
  886. cf->data[6] = bec.txerr;
  887. cf->data[7] = bec.rxerr;
  888. stats->rx_packets++;
  889. stats->rx_bytes += cf->can_dlc;
  890. netif_rx(skb);
  891. priv->bec.txerr = bec.txerr;
  892. priv->bec.rxerr = bec.rxerr;
  893. }
  894. static void kvaser_usb_hydra_one_shot_fail(struct kvaser_usb_net_priv *priv,
  895. const struct kvaser_cmd_ext *cmd)
  896. {
  897. struct net_device *netdev = priv->netdev;
  898. struct net_device_stats *stats = &netdev->stats;
  899. struct can_frame *cf;
  900. struct sk_buff *skb;
  901. u32 flags;
  902. skb = alloc_can_err_skb(netdev, &cf);
  903. if (!skb) {
  904. stats->rx_dropped++;
  905. netdev_warn(netdev, "No memory left for err_skb\n");
  906. return;
  907. }
  908. cf->can_id |= CAN_ERR_BUSERROR;
  909. flags = le32_to_cpu(cmd->tx_ack.flags);
  910. if (flags & KVASER_USB_HYDRA_CF_FLAG_OSM_NACK)
  911. cf->can_id |= CAN_ERR_ACK;
  912. if (flags & KVASER_USB_HYDRA_CF_FLAG_ABL) {
  913. cf->can_id |= CAN_ERR_LOSTARB;
  914. priv->can.can_stats.arbitration_lost++;
  915. }
  916. stats->tx_errors++;
  917. stats->rx_packets++;
  918. stats->rx_bytes += cf->can_dlc;
  919. netif_rx(skb);
  920. }
  921. static void kvaser_usb_hydra_tx_acknowledge(const struct kvaser_usb *dev,
  922. const struct kvaser_cmd *cmd)
  923. {
  924. struct kvaser_usb_tx_urb_context *context;
  925. struct kvaser_usb_net_priv *priv;
  926. unsigned long irq_flags;
  927. bool one_shot_fail = false;
  928. u16 transid = kvaser_usb_hydra_get_cmd_transid(cmd);
  929. priv = kvaser_usb_hydra_net_priv_from_cmd(dev, cmd);
  930. if (!priv)
  931. return;
  932. if (!netif_device_present(priv->netdev))
  933. return;
  934. if (cmd->header.cmd_no == CMD_EXTENDED) {
  935. struct kvaser_cmd_ext *cmd_ext = (struct kvaser_cmd_ext *)cmd;
  936. u32 flags = le32_to_cpu(cmd_ext->tx_ack.flags);
  937. if (flags & (KVASER_USB_HYDRA_CF_FLAG_OSM_NACK |
  938. KVASER_USB_HYDRA_CF_FLAG_ABL)) {
  939. kvaser_usb_hydra_one_shot_fail(priv, cmd_ext);
  940. one_shot_fail = true;
  941. }
  942. }
  943. context = &priv->tx_contexts[transid % dev->max_tx_urbs];
  944. if (!one_shot_fail) {
  945. struct net_device_stats *stats = &priv->netdev->stats;
  946. stats->tx_packets++;
  947. stats->tx_bytes += can_dlc2len(context->dlc);
  948. }
  949. spin_lock_irqsave(&priv->tx_contexts_lock, irq_flags);
  950. can_get_echo_skb(priv->netdev, context->echo_index);
  951. context->echo_index = dev->max_tx_urbs;
  952. --priv->active_tx_contexts;
  953. netif_wake_queue(priv->netdev);
  954. spin_unlock_irqrestore(&priv->tx_contexts_lock, irq_flags);
  955. }
  956. static void kvaser_usb_hydra_rx_msg_std(const struct kvaser_usb *dev,
  957. const struct kvaser_cmd *cmd)
  958. {
  959. struct kvaser_usb_net_priv *priv = NULL;
  960. struct can_frame *cf;
  961. struct sk_buff *skb;
  962. struct skb_shared_hwtstamps *shhwtstamps;
  963. struct net_device_stats *stats;
  964. u8 flags;
  965. ktime_t hwtstamp;
  966. priv = kvaser_usb_hydra_net_priv_from_cmd(dev, cmd);
  967. if (!priv)
  968. return;
  969. stats = &priv->netdev->stats;
  970. flags = cmd->rx_can.flags;
  971. hwtstamp = kvaser_usb_hydra_ktime_from_rx_cmd(dev->cfg, cmd);
  972. if (flags & KVASER_USB_HYDRA_CF_FLAG_ERROR_FRAME) {
  973. kvaser_usb_hydra_error_frame(priv, &cmd->rx_can.err_frame_data,
  974. hwtstamp);
  975. return;
  976. }
  977. skb = alloc_can_skb(priv->netdev, &cf);
  978. if (!skb) {
  979. stats->rx_dropped++;
  980. return;
  981. }
  982. shhwtstamps = skb_hwtstamps(skb);
  983. shhwtstamps->hwtstamp = hwtstamp;
  984. cf->can_id = le32_to_cpu(cmd->rx_can.id);
  985. if (cf->can_id & KVASER_USB_HYDRA_EXTENDED_FRAME_ID) {
  986. cf->can_id &= CAN_EFF_MASK;
  987. cf->can_id |= CAN_EFF_FLAG;
  988. } else {
  989. cf->can_id &= CAN_SFF_MASK;
  990. }
  991. if (flags & KVASER_USB_HYDRA_CF_FLAG_OVERRUN)
  992. kvaser_usb_can_rx_over_error(priv->netdev);
  993. cf->can_dlc = get_can_dlc(cmd->rx_can.dlc);
  994. if (flags & KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME)
  995. cf->can_id |= CAN_RTR_FLAG;
  996. else
  997. memcpy(cf->data, cmd->rx_can.data, cf->can_dlc);
  998. stats->rx_packets++;
  999. stats->rx_bytes += cf->can_dlc;
  1000. netif_rx(skb);
  1001. }
  1002. static void kvaser_usb_hydra_rx_msg_ext(const struct kvaser_usb *dev,
  1003. const struct kvaser_cmd_ext *cmd)
  1004. {
  1005. struct kvaser_cmd *std_cmd = (struct kvaser_cmd *)cmd;
  1006. struct kvaser_usb_net_priv *priv;
  1007. struct canfd_frame *cf;
  1008. struct sk_buff *skb;
  1009. struct skb_shared_hwtstamps *shhwtstamps;
  1010. struct net_device_stats *stats;
  1011. u32 flags;
  1012. u8 dlc;
  1013. u32 kcan_header;
  1014. ktime_t hwtstamp;
  1015. priv = kvaser_usb_hydra_net_priv_from_cmd(dev, std_cmd);
  1016. if (!priv)
  1017. return;
  1018. stats = &priv->netdev->stats;
  1019. kcan_header = le32_to_cpu(cmd->rx_can.kcan_header);
  1020. dlc = (kcan_header & KVASER_USB_KCAN_DATA_DLC_MASK) >>
  1021. KVASER_USB_KCAN_DATA_DLC_SHIFT;
  1022. flags = le32_to_cpu(cmd->rx_can.flags);
  1023. hwtstamp = kvaser_usb_hydra_ktime_from_rx_cmd(dev->cfg, std_cmd);
  1024. if (flags & KVASER_USB_HYDRA_CF_FLAG_ERROR_FRAME) {
  1025. kvaser_usb_hydra_error_frame(priv, &cmd->rx_can.err_frame_data,
  1026. hwtstamp);
  1027. return;
  1028. }
  1029. if (flags & KVASER_USB_HYDRA_CF_FLAG_FDF)
  1030. skb = alloc_canfd_skb(priv->netdev, &cf);
  1031. else
  1032. skb = alloc_can_skb(priv->netdev, (struct can_frame **)&cf);
  1033. if (!skb) {
  1034. stats->rx_dropped++;
  1035. return;
  1036. }
  1037. shhwtstamps = skb_hwtstamps(skb);
  1038. shhwtstamps->hwtstamp = hwtstamp;
  1039. cf->can_id = le32_to_cpu(cmd->rx_can.id);
  1040. if (flags & KVASER_USB_HYDRA_CF_FLAG_EXTENDED_ID) {
  1041. cf->can_id &= CAN_EFF_MASK;
  1042. cf->can_id |= CAN_EFF_FLAG;
  1043. } else {
  1044. cf->can_id &= CAN_SFF_MASK;
  1045. }
  1046. if (flags & KVASER_USB_HYDRA_CF_FLAG_OVERRUN)
  1047. kvaser_usb_can_rx_over_error(priv->netdev);
  1048. if (flags & KVASER_USB_HYDRA_CF_FLAG_FDF) {
  1049. cf->len = can_dlc2len(get_canfd_dlc(dlc));
  1050. if (flags & KVASER_USB_HYDRA_CF_FLAG_BRS)
  1051. cf->flags |= CANFD_BRS;
  1052. if (flags & KVASER_USB_HYDRA_CF_FLAG_ESI)
  1053. cf->flags |= CANFD_ESI;
  1054. } else {
  1055. cf->len = get_can_dlc(dlc);
  1056. }
  1057. if (flags & KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME)
  1058. cf->can_id |= CAN_RTR_FLAG;
  1059. else
  1060. memcpy(cf->data, cmd->rx_can.kcan_payload, cf->len);
  1061. stats->rx_packets++;
  1062. stats->rx_bytes += cf->len;
  1063. netif_rx(skb);
  1064. }
  1065. static void kvaser_usb_hydra_handle_cmd_std(const struct kvaser_usb *dev,
  1066. const struct kvaser_cmd *cmd)
  1067. {
  1068. switch (cmd->header.cmd_no) {
  1069. case CMD_START_CHIP_RESP:
  1070. kvaser_usb_hydra_start_chip_reply(dev, cmd);
  1071. break;
  1072. case CMD_STOP_CHIP_RESP:
  1073. kvaser_usb_hydra_stop_chip_reply(dev, cmd);
  1074. break;
  1075. case CMD_FLUSH_QUEUE_RESP:
  1076. kvaser_usb_hydra_flush_queue_reply(dev, cmd);
  1077. break;
  1078. case CMD_CHIP_STATE_EVENT:
  1079. kvaser_usb_hydra_state_event(dev, cmd);
  1080. break;
  1081. case CMD_ERROR_EVENT:
  1082. kvaser_usb_hydra_error_event(dev, cmd);
  1083. break;
  1084. case CMD_TX_ACKNOWLEDGE:
  1085. kvaser_usb_hydra_tx_acknowledge(dev, cmd);
  1086. break;
  1087. case CMD_RX_MESSAGE:
  1088. kvaser_usb_hydra_rx_msg_std(dev, cmd);
  1089. break;
  1090. /* Ignored commands */
  1091. case CMD_SET_BUSPARAMS_RESP:
  1092. case CMD_SET_BUSPARAMS_FD_RESP:
  1093. break;
  1094. default:
  1095. dev_warn(&dev->intf->dev, "Unhandled command (%d)\n",
  1096. cmd->header.cmd_no);
  1097. break;
  1098. }
  1099. }
  1100. static void kvaser_usb_hydra_handle_cmd_ext(const struct kvaser_usb *dev,
  1101. const struct kvaser_cmd_ext *cmd)
  1102. {
  1103. switch (cmd->cmd_no_ext) {
  1104. case CMD_TX_ACKNOWLEDGE_FD:
  1105. kvaser_usb_hydra_tx_acknowledge(dev, (struct kvaser_cmd *)cmd);
  1106. break;
  1107. case CMD_RX_MESSAGE_FD:
  1108. kvaser_usb_hydra_rx_msg_ext(dev, cmd);
  1109. break;
  1110. default:
  1111. dev_warn(&dev->intf->dev, "Unhandled extended command (%d)\n",
  1112. cmd->header.cmd_no);
  1113. break;
  1114. }
  1115. }
  1116. static void kvaser_usb_hydra_handle_cmd(const struct kvaser_usb *dev,
  1117. const struct kvaser_cmd *cmd)
  1118. {
  1119. if (cmd->header.cmd_no == CMD_EXTENDED)
  1120. kvaser_usb_hydra_handle_cmd_ext
  1121. (dev, (struct kvaser_cmd_ext *)cmd);
  1122. else
  1123. kvaser_usb_hydra_handle_cmd_std(dev, cmd);
  1124. }
  1125. static void *
  1126. kvaser_usb_hydra_frame_to_cmd_ext(const struct kvaser_usb_net_priv *priv,
  1127. const struct sk_buff *skb, int *frame_len,
  1128. int *cmd_len, u16 transid)
  1129. {
  1130. struct kvaser_usb *dev = priv->dev;
  1131. struct kvaser_cmd_ext *cmd;
  1132. struct canfd_frame *cf = (struct canfd_frame *)skb->data;
  1133. u8 dlc = can_len2dlc(cf->len);
  1134. u8 nbr_of_bytes = cf->len;
  1135. u32 flags;
  1136. u32 id;
  1137. u32 kcan_id;
  1138. u32 kcan_header;
  1139. *frame_len = nbr_of_bytes;
  1140. cmd = kcalloc(1, sizeof(struct kvaser_cmd_ext), GFP_ATOMIC);
  1141. if (!cmd)
  1142. return NULL;
  1143. kvaser_usb_hydra_set_cmd_dest_he
  1144. ((struct kvaser_cmd *)cmd,
  1145. dev->card_data.hydra.channel_to_he[priv->channel]);
  1146. kvaser_usb_hydra_set_cmd_transid((struct kvaser_cmd *)cmd, transid);
  1147. cmd->header.cmd_no = CMD_EXTENDED;
  1148. cmd->cmd_no_ext = CMD_TX_CAN_MESSAGE_FD;
  1149. *cmd_len = ALIGN(sizeof(struct kvaser_cmd_ext) -
  1150. sizeof(cmd->tx_can.kcan_payload) + nbr_of_bytes,
  1151. 8);
  1152. cmd->len = cpu_to_le16(*cmd_len);
  1153. cmd->tx_can.databytes = nbr_of_bytes;
  1154. cmd->tx_can.dlc = dlc;
  1155. if (cf->can_id & CAN_EFF_FLAG) {
  1156. id = cf->can_id & CAN_EFF_MASK;
  1157. flags = KVASER_USB_HYDRA_CF_FLAG_EXTENDED_ID;
  1158. kcan_id = (cf->can_id & CAN_EFF_MASK) |
  1159. KVASER_USB_KCAN_DATA_IDE | KVASER_USB_KCAN_DATA_SRR;
  1160. } else {
  1161. id = cf->can_id & CAN_SFF_MASK;
  1162. flags = 0;
  1163. kcan_id = cf->can_id & CAN_SFF_MASK;
  1164. }
  1165. if (cf->can_id & CAN_ERR_FLAG)
  1166. flags |= KVASER_USB_HYDRA_CF_FLAG_ERROR_FRAME;
  1167. kcan_header = ((dlc << KVASER_USB_KCAN_DATA_DLC_SHIFT) &
  1168. KVASER_USB_KCAN_DATA_DLC_MASK) |
  1169. KVASER_USB_KCAN_DATA_AREQ |
  1170. (priv->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT ?
  1171. KVASER_USB_KCAN_DATA_OSM : 0);
  1172. if (can_is_canfd_skb(skb)) {
  1173. kcan_header |= KVASER_USB_KCAN_DATA_FDF |
  1174. (cf->flags & CANFD_BRS ?
  1175. KVASER_USB_KCAN_DATA_BRS : 0);
  1176. } else {
  1177. if (cf->can_id & CAN_RTR_FLAG) {
  1178. kcan_id |= KVASER_USB_KCAN_DATA_RTR;
  1179. cmd->tx_can.databytes = 0;
  1180. flags |= KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME;
  1181. }
  1182. }
  1183. cmd->tx_can.kcan_id = cpu_to_le32(kcan_id);
  1184. cmd->tx_can.id = cpu_to_le32(id);
  1185. cmd->tx_can.flags = cpu_to_le32(flags);
  1186. cmd->tx_can.kcan_header = cpu_to_le32(kcan_header);
  1187. memcpy(cmd->tx_can.kcan_payload, cf->data, nbr_of_bytes);
  1188. return cmd;
  1189. }
  1190. static void *
  1191. kvaser_usb_hydra_frame_to_cmd_std(const struct kvaser_usb_net_priv *priv,
  1192. const struct sk_buff *skb, int *frame_len,
  1193. int *cmd_len, u16 transid)
  1194. {
  1195. struct kvaser_usb *dev = priv->dev;
  1196. struct kvaser_cmd *cmd;
  1197. struct can_frame *cf = (struct can_frame *)skb->data;
  1198. u32 flags;
  1199. u32 id;
  1200. *frame_len = cf->can_dlc;
  1201. cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_ATOMIC);
  1202. if (!cmd)
  1203. return NULL;
  1204. kvaser_usb_hydra_set_cmd_dest_he
  1205. (cmd, dev->card_data.hydra.channel_to_he[priv->channel]);
  1206. kvaser_usb_hydra_set_cmd_transid(cmd, transid);
  1207. cmd->header.cmd_no = CMD_TX_CAN_MESSAGE;
  1208. *cmd_len = ALIGN(sizeof(struct kvaser_cmd), 8);
  1209. if (cf->can_id & CAN_EFF_FLAG) {
  1210. id = (cf->can_id & CAN_EFF_MASK);
  1211. id |= KVASER_USB_HYDRA_EXTENDED_FRAME_ID;
  1212. } else {
  1213. id = cf->can_id & CAN_SFF_MASK;
  1214. }
  1215. cmd->tx_can.dlc = cf->can_dlc;
  1216. flags = (cf->can_id & CAN_EFF_FLAG ?
  1217. KVASER_USB_HYDRA_CF_FLAG_EXTENDED_ID : 0);
  1218. if (cf->can_id & CAN_RTR_FLAG)
  1219. flags |= KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME;
  1220. flags |= (cf->can_id & CAN_ERR_FLAG ?
  1221. KVASER_USB_HYDRA_CF_FLAG_ERROR_FRAME : 0);
  1222. cmd->tx_can.id = cpu_to_le32(id);
  1223. cmd->tx_can.flags = flags;
  1224. memcpy(cmd->tx_can.data, cf->data, *frame_len);
  1225. return cmd;
  1226. }
  1227. static int kvaser_usb_hydra_set_mode(struct net_device *netdev,
  1228. enum can_mode mode)
  1229. {
  1230. int err = 0;
  1231. switch (mode) {
  1232. case CAN_MODE_START:
  1233. /* CAN controller automatically recovers from BUS_OFF */
  1234. break;
  1235. default:
  1236. err = -EOPNOTSUPP;
  1237. }
  1238. return err;
  1239. }
  1240. static int kvaser_usb_hydra_set_bittiming(struct net_device *netdev)
  1241. {
  1242. struct kvaser_cmd *cmd;
  1243. struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
  1244. struct can_bittiming *bt = &priv->can.bittiming;
  1245. struct kvaser_usb *dev = priv->dev;
  1246. int tseg1 = bt->prop_seg + bt->phase_seg1;
  1247. int tseg2 = bt->phase_seg2;
  1248. int sjw = bt->sjw;
  1249. int err;
  1250. cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL);
  1251. if (!cmd)
  1252. return -ENOMEM;
  1253. cmd->header.cmd_no = CMD_SET_BUSPARAMS_REQ;
  1254. cmd->set_busparams_req.bitrate = cpu_to_le32(bt->bitrate);
  1255. cmd->set_busparams_req.sjw = (u8)sjw;
  1256. cmd->set_busparams_req.tseg1 = (u8)tseg1;
  1257. cmd->set_busparams_req.tseg2 = (u8)tseg2;
  1258. cmd->set_busparams_req.nsamples = 1;
  1259. kvaser_usb_hydra_set_cmd_dest_he
  1260. (cmd, dev->card_data.hydra.channel_to_he[priv->channel]);
  1261. kvaser_usb_hydra_set_cmd_transid
  1262. (cmd, kvaser_usb_hydra_get_next_transid(dev));
  1263. err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
  1264. kfree(cmd);
  1265. return err;
  1266. }
  1267. static int kvaser_usb_hydra_set_data_bittiming(struct net_device *netdev)
  1268. {
  1269. struct kvaser_cmd *cmd;
  1270. struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
  1271. struct can_bittiming *dbt = &priv->can.data_bittiming;
  1272. struct kvaser_usb *dev = priv->dev;
  1273. int tseg1 = dbt->prop_seg + dbt->phase_seg1;
  1274. int tseg2 = dbt->phase_seg2;
  1275. int sjw = dbt->sjw;
  1276. int err;
  1277. cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL);
  1278. if (!cmd)
  1279. return -ENOMEM;
  1280. cmd->header.cmd_no = CMD_SET_BUSPARAMS_FD_REQ;
  1281. cmd->set_busparams_req.bitrate_d = cpu_to_le32(dbt->bitrate);
  1282. cmd->set_busparams_req.sjw_d = (u8)sjw;
  1283. cmd->set_busparams_req.tseg1_d = (u8)tseg1;
  1284. cmd->set_busparams_req.tseg2_d = (u8)tseg2;
  1285. cmd->set_busparams_req.nsamples_d = 1;
  1286. if (priv->can.ctrlmode & CAN_CTRLMODE_FD) {
  1287. if (priv->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO)
  1288. cmd->set_busparams_req.canfd_mode =
  1289. KVASER_USB_HYDRA_BUS_MODE_NONISO;
  1290. else
  1291. cmd->set_busparams_req.canfd_mode =
  1292. KVASER_USB_HYDRA_BUS_MODE_CANFD_ISO;
  1293. }
  1294. kvaser_usb_hydra_set_cmd_dest_he
  1295. (cmd, dev->card_data.hydra.channel_to_he[priv->channel]);
  1296. kvaser_usb_hydra_set_cmd_transid
  1297. (cmd, kvaser_usb_hydra_get_next_transid(dev));
  1298. err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
  1299. kfree(cmd);
  1300. return err;
  1301. }
  1302. static int kvaser_usb_hydra_get_berr_counter(const struct net_device *netdev,
  1303. struct can_berr_counter *bec)
  1304. {
  1305. struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
  1306. int err;
  1307. err = kvaser_usb_hydra_send_simple_cmd(priv->dev,
  1308. CMD_GET_CHIP_STATE_REQ,
  1309. priv->channel);
  1310. if (err)
  1311. return err;
  1312. *bec = priv->bec;
  1313. return 0;
  1314. }
  1315. static int kvaser_usb_hydra_setup_endpoints(struct kvaser_usb *dev)
  1316. {
  1317. const struct usb_host_interface *iface_desc;
  1318. struct usb_endpoint_descriptor *ep;
  1319. int i;
  1320. iface_desc = &dev->intf->altsetting[0];
  1321. for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
  1322. ep = &iface_desc->endpoint[i].desc;
  1323. if (!dev->bulk_in && usb_endpoint_is_bulk_in(ep) &&
  1324. ep->bEndpointAddress == KVASER_USB_HYDRA_BULK_EP_IN_ADDR)
  1325. dev->bulk_in = ep;
  1326. if (!dev->bulk_out && usb_endpoint_is_bulk_out(ep) &&
  1327. ep->bEndpointAddress == KVASER_USB_HYDRA_BULK_EP_OUT_ADDR)
  1328. dev->bulk_out = ep;
  1329. if (dev->bulk_in && dev->bulk_out)
  1330. return 0;
  1331. }
  1332. return -ENODEV;
  1333. }
  1334. static int kvaser_usb_hydra_init_card(struct kvaser_usb *dev)
  1335. {
  1336. int err;
  1337. unsigned int i;
  1338. struct kvaser_usb_dev_card_data_hydra *card_data =
  1339. &dev->card_data.hydra;
  1340. card_data->transid = KVASER_USB_HYDRA_MIN_TRANSID;
  1341. spin_lock_init(&card_data->transid_lock);
  1342. memset(card_data->usb_rx_leftover, 0, KVASER_USB_HYDRA_MAX_CMD_LEN);
  1343. card_data->usb_rx_leftover_len = 0;
  1344. spin_lock_init(&card_data->usb_rx_leftover_lock);
  1345. memset(card_data->channel_to_he, KVASER_USB_HYDRA_HE_ADDRESS_ILLEGAL,
  1346. sizeof(card_data->channel_to_he));
  1347. card_data->sysdbg_he = 0;
  1348. for (i = 0; i < KVASER_USB_MAX_NET_DEVICES; i++) {
  1349. err = kvaser_usb_hydra_map_channel
  1350. (dev,
  1351. (KVASER_USB_HYDRA_TRANSID_CANHE | i),
  1352. i, "CAN");
  1353. if (err) {
  1354. dev_err(&dev->intf->dev,
  1355. "CMD_MAP_CHANNEL_REQ failed for CAN%u\n", i);
  1356. return err;
  1357. }
  1358. }
  1359. err = kvaser_usb_hydra_map_channel(dev, KVASER_USB_HYDRA_TRANSID_SYSDBG,
  1360. 0, "SYSDBG");
  1361. if (err) {
  1362. dev_err(&dev->intf->dev,
  1363. "CMD_MAP_CHANNEL_REQ failed for SYSDBG\n");
  1364. return err;
  1365. }
  1366. return 0;
  1367. }
  1368. static int kvaser_usb_hydra_get_software_info(struct kvaser_usb *dev)
  1369. {
  1370. struct kvaser_cmd cmd;
  1371. int err;
  1372. err = kvaser_usb_hydra_send_simple_cmd(dev, CMD_GET_SOFTWARE_INFO_REQ,
  1373. -1);
  1374. if (err)
  1375. return err;
  1376. memset(&cmd, 0, sizeof(struct kvaser_cmd));
  1377. err = kvaser_usb_hydra_wait_cmd(dev, CMD_GET_SOFTWARE_INFO_RESP, &cmd);
  1378. if (err)
  1379. return err;
  1380. dev->max_tx_urbs = min_t(unsigned int, KVASER_USB_MAX_TX_URBS,
  1381. le16_to_cpu(cmd.sw_info.max_outstanding_tx));
  1382. return 0;
  1383. }
  1384. static int kvaser_usb_hydra_get_software_details(struct kvaser_usb *dev)
  1385. {
  1386. struct kvaser_cmd *cmd;
  1387. int err;
  1388. u32 flags;
  1389. struct kvaser_usb_dev_card_data *card_data = &dev->card_data;
  1390. cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL);
  1391. if (!cmd)
  1392. return -ENOMEM;
  1393. cmd->header.cmd_no = CMD_GET_SOFTWARE_DETAILS_REQ;
  1394. cmd->sw_detail_req.use_ext_cmd = 1;
  1395. kvaser_usb_hydra_set_cmd_dest_he
  1396. (cmd, KVASER_USB_HYDRA_HE_ADDRESS_ILLEGAL);
  1397. kvaser_usb_hydra_set_cmd_transid
  1398. (cmd, kvaser_usb_hydra_get_next_transid(dev));
  1399. err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
  1400. if (err)
  1401. goto end;
  1402. err = kvaser_usb_hydra_wait_cmd(dev, CMD_GET_SOFTWARE_DETAILS_RESP,
  1403. cmd);
  1404. if (err)
  1405. goto end;
  1406. dev->fw_version = le32_to_cpu(cmd->sw_detail_res.sw_version);
  1407. flags = le32_to_cpu(cmd->sw_detail_res.sw_flags);
  1408. if (flags & KVASER_USB_HYDRA_SW_FLAG_FW_BAD) {
  1409. dev_err(&dev->intf->dev,
  1410. "Bad firmware, device refuse to run!\n");
  1411. err = -EINVAL;
  1412. goto end;
  1413. }
  1414. if (flags & KVASER_USB_HYDRA_SW_FLAG_FW_BETA)
  1415. dev_info(&dev->intf->dev, "Beta firmware in use\n");
  1416. if (flags & KVASER_USB_HYDRA_SW_FLAG_EXT_CAP)
  1417. card_data->capabilities |= KVASER_USB_CAP_EXT_CAP;
  1418. if (flags & KVASER_USB_HYDRA_SW_FLAG_EXT_CMD)
  1419. card_data->capabilities |= KVASER_USB_HYDRA_CAP_EXT_CMD;
  1420. if (flags & KVASER_USB_HYDRA_SW_FLAG_CANFD)
  1421. card_data->ctrlmode_supported |= CAN_CTRLMODE_FD;
  1422. if (flags & KVASER_USB_HYDRA_SW_FLAG_NONISO)
  1423. card_data->ctrlmode_supported |= CAN_CTRLMODE_FD_NON_ISO;
  1424. if (flags & KVASER_USB_HYDRA_SW_FLAG_FREQ_80M)
  1425. dev->cfg = &kvaser_usb_hydra_dev_cfg_kcan;
  1426. else
  1427. dev->cfg = &kvaser_usb_hydra_dev_cfg_flexc;
  1428. end:
  1429. kfree(cmd);
  1430. return err;
  1431. }
  1432. static int kvaser_usb_hydra_get_card_info(struct kvaser_usb *dev)
  1433. {
  1434. struct kvaser_cmd cmd;
  1435. int err;
  1436. err = kvaser_usb_hydra_send_simple_cmd(dev, CMD_GET_CARD_INFO_REQ, -1);
  1437. if (err)
  1438. return err;
  1439. memset(&cmd, 0, sizeof(struct kvaser_cmd));
  1440. err = kvaser_usb_hydra_wait_cmd(dev, CMD_GET_CARD_INFO_RESP, &cmd);
  1441. if (err)
  1442. return err;
  1443. dev->nchannels = cmd.card_info.nchannels;
  1444. if (dev->nchannels > KVASER_USB_MAX_NET_DEVICES)
  1445. return -EINVAL;
  1446. return 0;
  1447. }
  1448. static int kvaser_usb_hydra_get_capabilities(struct kvaser_usb *dev)
  1449. {
  1450. int err;
  1451. u16 status;
  1452. if (!(dev->card_data.capabilities & KVASER_USB_CAP_EXT_CAP)) {
  1453. dev_info(&dev->intf->dev,
  1454. "No extended capability support. Upgrade your device.\n");
  1455. return 0;
  1456. }
  1457. err = kvaser_usb_hydra_get_single_capability
  1458. (dev,
  1459. KVASER_USB_HYDRA_CAP_CMD_LISTEN_MODE,
  1460. &status);
  1461. if (err)
  1462. return err;
  1463. if (status)
  1464. dev_info(&dev->intf->dev,
  1465. "KVASER_USB_HYDRA_CAP_CMD_LISTEN_MODE failed %u\n",
  1466. status);
  1467. err = kvaser_usb_hydra_get_single_capability
  1468. (dev,
  1469. KVASER_USB_HYDRA_CAP_CMD_ERR_REPORT,
  1470. &status);
  1471. if (err)
  1472. return err;
  1473. if (status)
  1474. dev_info(&dev->intf->dev,
  1475. "KVASER_USB_HYDRA_CAP_CMD_ERR_REPORT failed %u\n",
  1476. status);
  1477. err = kvaser_usb_hydra_get_single_capability
  1478. (dev, KVASER_USB_HYDRA_CAP_CMD_ONE_SHOT,
  1479. &status);
  1480. if (err)
  1481. return err;
  1482. if (status)
  1483. dev_info(&dev->intf->dev,
  1484. "KVASER_USB_HYDRA_CAP_CMD_ONE_SHOT failed %u\n",
  1485. status);
  1486. return 0;
  1487. }
  1488. static int kvaser_usb_hydra_set_opt_mode(const struct kvaser_usb_net_priv *priv)
  1489. {
  1490. struct kvaser_usb *dev = priv->dev;
  1491. struct kvaser_cmd *cmd;
  1492. int err;
  1493. if ((priv->can.ctrlmode &
  1494. (CAN_CTRLMODE_FD | CAN_CTRLMODE_FD_NON_ISO)) ==
  1495. CAN_CTRLMODE_FD_NON_ISO) {
  1496. netdev_warn(priv->netdev,
  1497. "CTRLMODE_FD shall be on if CTRLMODE_FD_NON_ISO is on\n");
  1498. return -EINVAL;
  1499. }
  1500. cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL);
  1501. if (!cmd)
  1502. return -ENOMEM;
  1503. cmd->header.cmd_no = CMD_SET_DRIVERMODE_REQ;
  1504. kvaser_usb_hydra_set_cmd_dest_he
  1505. (cmd, dev->card_data.hydra.channel_to_he[priv->channel]);
  1506. kvaser_usb_hydra_set_cmd_transid
  1507. (cmd, kvaser_usb_hydra_get_next_transid(dev));
  1508. if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
  1509. cmd->set_ctrlmode.mode = KVASER_USB_HYDRA_CTRLMODE_LISTEN;
  1510. else
  1511. cmd->set_ctrlmode.mode = KVASER_USB_HYDRA_CTRLMODE_NORMAL;
  1512. err = kvaser_usb_send_cmd(dev, cmd, kvaser_usb_hydra_cmd_size(cmd));
  1513. kfree(cmd);
  1514. return err;
  1515. }
  1516. static int kvaser_usb_hydra_start_chip(struct kvaser_usb_net_priv *priv)
  1517. {
  1518. int err;
  1519. init_completion(&priv->start_comp);
  1520. err = kvaser_usb_hydra_send_simple_cmd(priv->dev, CMD_START_CHIP_REQ,
  1521. priv->channel);
  1522. if (err)
  1523. return err;
  1524. if (!wait_for_completion_timeout(&priv->start_comp,
  1525. msecs_to_jiffies(KVASER_USB_TIMEOUT)))
  1526. return -ETIMEDOUT;
  1527. return 0;
  1528. }
  1529. static int kvaser_usb_hydra_stop_chip(struct kvaser_usb_net_priv *priv)
  1530. {
  1531. int err;
  1532. init_completion(&priv->stop_comp);
  1533. /* Make sure we do not report invalid BUS_OFF from CMD_CHIP_STATE_EVENT
  1534. * see comment in kvaser_usb_hydra_update_state()
  1535. */
  1536. priv->can.state = CAN_STATE_STOPPED;
  1537. err = kvaser_usb_hydra_send_simple_cmd(priv->dev, CMD_STOP_CHIP_REQ,
  1538. priv->channel);
  1539. if (err)
  1540. return err;
  1541. if (!wait_for_completion_timeout(&priv->stop_comp,
  1542. msecs_to_jiffies(KVASER_USB_TIMEOUT)))
  1543. return -ETIMEDOUT;
  1544. return 0;
  1545. }
  1546. static int kvaser_usb_hydra_flush_queue(struct kvaser_usb_net_priv *priv)
  1547. {
  1548. int err;
  1549. init_completion(&priv->flush_comp);
  1550. err = kvaser_usb_hydra_send_simple_cmd(priv->dev, CMD_FLUSH_QUEUE,
  1551. priv->channel);
  1552. if (err)
  1553. return err;
  1554. if (!wait_for_completion_timeout(&priv->flush_comp,
  1555. msecs_to_jiffies(KVASER_USB_TIMEOUT)))
  1556. return -ETIMEDOUT;
  1557. return 0;
  1558. }
  1559. /* A single extended hydra command can be transmitted in multiple transfers
  1560. * We have to buffer partial hydra commands, and handle them on next callback.
  1561. */
  1562. static void kvaser_usb_hydra_read_bulk_callback(struct kvaser_usb *dev,
  1563. void *buf, int len)
  1564. {
  1565. unsigned long irq_flags;
  1566. struct kvaser_cmd *cmd;
  1567. int pos = 0;
  1568. size_t cmd_len;
  1569. struct kvaser_usb_dev_card_data_hydra *card_data =
  1570. &dev->card_data.hydra;
  1571. int usb_rx_leftover_len;
  1572. spinlock_t *usb_rx_leftover_lock = &card_data->usb_rx_leftover_lock;
  1573. spin_lock_irqsave(usb_rx_leftover_lock, irq_flags);
  1574. usb_rx_leftover_len = card_data->usb_rx_leftover_len;
  1575. if (usb_rx_leftover_len) {
  1576. int remaining_bytes;
  1577. cmd = (struct kvaser_cmd *)card_data->usb_rx_leftover;
  1578. cmd_len = kvaser_usb_hydra_cmd_size(cmd);
  1579. remaining_bytes = min_t(unsigned int, len,
  1580. cmd_len - usb_rx_leftover_len);
  1581. /* Make sure we do not overflow usb_rx_leftover */
  1582. if (remaining_bytes + usb_rx_leftover_len >
  1583. KVASER_USB_HYDRA_MAX_CMD_LEN) {
  1584. dev_err(&dev->intf->dev, "Format error\n");
  1585. spin_unlock_irqrestore(usb_rx_leftover_lock, irq_flags);
  1586. return;
  1587. }
  1588. memcpy(card_data->usb_rx_leftover + usb_rx_leftover_len, buf,
  1589. remaining_bytes);
  1590. pos += remaining_bytes;
  1591. if (remaining_bytes + usb_rx_leftover_len == cmd_len) {
  1592. kvaser_usb_hydra_handle_cmd(dev, cmd);
  1593. usb_rx_leftover_len = 0;
  1594. } else {
  1595. /* Command still not complete */
  1596. usb_rx_leftover_len += remaining_bytes;
  1597. }
  1598. card_data->usb_rx_leftover_len = usb_rx_leftover_len;
  1599. }
  1600. spin_unlock_irqrestore(usb_rx_leftover_lock, irq_flags);
  1601. while (pos < len) {
  1602. cmd = buf + pos;
  1603. cmd_len = kvaser_usb_hydra_cmd_size(cmd);
  1604. if (pos + cmd_len > len) {
  1605. /* We got first part of a command */
  1606. int leftover_bytes;
  1607. leftover_bytes = len - pos;
  1608. /* Make sure we do not overflow usb_rx_leftover */
  1609. if (leftover_bytes > KVASER_USB_HYDRA_MAX_CMD_LEN) {
  1610. dev_err(&dev->intf->dev, "Format error\n");
  1611. return;
  1612. }
  1613. spin_lock_irqsave(usb_rx_leftover_lock, irq_flags);
  1614. memcpy(card_data->usb_rx_leftover, buf + pos,
  1615. leftover_bytes);
  1616. card_data->usb_rx_leftover_len = leftover_bytes;
  1617. spin_unlock_irqrestore(usb_rx_leftover_lock, irq_flags);
  1618. break;
  1619. }
  1620. kvaser_usb_hydra_handle_cmd(dev, cmd);
  1621. pos += cmd_len;
  1622. }
  1623. }
  1624. static void *
  1625. kvaser_usb_hydra_frame_to_cmd(const struct kvaser_usb_net_priv *priv,
  1626. const struct sk_buff *skb, int *frame_len,
  1627. int *cmd_len, u16 transid)
  1628. {
  1629. void *buf;
  1630. if (priv->dev->card_data.capabilities & KVASER_USB_HYDRA_CAP_EXT_CMD)
  1631. buf = kvaser_usb_hydra_frame_to_cmd_ext(priv, skb, frame_len,
  1632. cmd_len, transid);
  1633. else
  1634. buf = kvaser_usb_hydra_frame_to_cmd_std(priv, skb, frame_len,
  1635. cmd_len, transid);
  1636. return buf;
  1637. }
  1638. const struct kvaser_usb_dev_ops kvaser_usb_hydra_dev_ops = {
  1639. .dev_set_mode = kvaser_usb_hydra_set_mode,
  1640. .dev_set_bittiming = kvaser_usb_hydra_set_bittiming,
  1641. .dev_set_data_bittiming = kvaser_usb_hydra_set_data_bittiming,
  1642. .dev_get_berr_counter = kvaser_usb_hydra_get_berr_counter,
  1643. .dev_setup_endpoints = kvaser_usb_hydra_setup_endpoints,
  1644. .dev_init_card = kvaser_usb_hydra_init_card,
  1645. .dev_get_software_info = kvaser_usb_hydra_get_software_info,
  1646. .dev_get_software_details = kvaser_usb_hydra_get_software_details,
  1647. .dev_get_card_info = kvaser_usb_hydra_get_card_info,
  1648. .dev_get_capabilities = kvaser_usb_hydra_get_capabilities,
  1649. .dev_set_opt_mode = kvaser_usb_hydra_set_opt_mode,
  1650. .dev_start_chip = kvaser_usb_hydra_start_chip,
  1651. .dev_stop_chip = kvaser_usb_hydra_stop_chip,
  1652. .dev_reset_chip = NULL,
  1653. .dev_flush_queue = kvaser_usb_hydra_flush_queue,
  1654. .dev_read_bulk_callback = kvaser_usb_hydra_read_bulk_callback,
  1655. .dev_frame_to_cmd = kvaser_usb_hydra_frame_to_cmd,
  1656. };
  1657. static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_kcan = {
  1658. .clock = {
  1659. .freq = 80000000,
  1660. },
  1661. .timestamp_freq = 80,
  1662. .bittiming_const = &kvaser_usb_hydra_kcan_bittiming_c,
  1663. .data_bittiming_const = &kvaser_usb_hydra_kcan_bittiming_c,
  1664. };
  1665. static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_flexc = {
  1666. .clock = {
  1667. .freq = 24000000,
  1668. },
  1669. .timestamp_freq = 1,
  1670. .bittiming_const = &kvaser_usb_hydra_flexc_bittiming_c,
  1671. };