Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'linux-can-next-for-5.11-20201120' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next

Marc Kleine-Budde says:

====================
pull-request: can-next 2020-11-20

The first patch is by Yegor Yefremov and he improves the j1939 documentaton by
adding tables for the CAN identifier and its fields.

Then there are 8 patches by Oliver Hartkopp targeting the CAN driver
infrastructure and drivers. These add support for optional DLC element to the
Classical CAN frame structure. See patch ea7800565a12 ("can: add optional DLC
element to Classical CAN frame structure") for details. Oliver's last patch
adds len8_dlc support to several drivers. Stefan Mätje provides a patch to add
len8_dlc support to the esd_usb2 driver.

The next patch is by Oliver Hartkopp, too and adds support for modification of
Classical CAN DLCs to CAN GW sockets.

The next 3 patches target the nxp,flexcan DT bindings. One patch by my adds the
missing uint32 reference to the clock-frequency property. Joakim Zhang's
patches fix the fsl,clk-source property and add the IMX_SC_R_CAN() macro to the
imx firmware header file, which will be used in the flexcan driver later.

Another patch by Joakim Zhang prepares the flexcan driver for SCU based
stop-mode, by giving the existing, GPR based stop-mode, a _GPR postfix.

The next 5 patches are by me, target the flexcan driver, and clean up the
.ndo_open and .ndo_stop callbacks. These patches try to fix a sporadically
hanging flexcan_close() during simultanious ifdown, sending of CAN messages and
probably open CAN bus. I was never able to reproduce, but these seem to fix the
problem at the reporting user. As these changes are rather big, I'd like to
mainline them via net-next/master.

The next patches are by Jimmy Assarsson and Christer Beskow, they add support
for new USB devices to the existing kvaser_usb driver.

The last patch is by Kaixu Xia and simplifies the return in the
mcp251xfd_chip_softreset() function in the mcp251xfd driver.

* tag 'linux-can-next-for-5.11-20201120' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next: (25 commits)
can: mcp251xfd: remove useless code in mcp251xfd_chip_softreset
can: kvaser_usb: Add new Kvaser hydra devices
can: kvaser_usb: kvaser_usb_hydra: Add support for new device variant
can: kvaser_usb: Add new Kvaser Leaf v2 devices
can: kvaser_usb: Add USB_{LEAF,HYDRA}_PRODUCT_ID_END defines
can: flexcan: flexcan_close(): change order if commands to properly shut down the controller
can: flexcan: flexcan_open(): completely initialize controller before requesting IRQ
can: flexcan: flexcan_rx_offload_setup(): factor out mailbox and rx-offload setup into separate function
can: flexcan: move enabling/disabling of interrupts from flexcan_chip_{start,stop}() to callers
can: flexcan: factor out enabling and disabling of interrupts into separate function
can: flexcan: rename macro FLEXCAN_QUIRK_SETUP_STOP_MODE -> FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR
dt-bindings: firmware: add IMX_SC_R_CAN(x) macro for CAN
dt-bindings: can: fsl,flexcan: fix fsl,clk-source property
dt-bindings: can: fsl,flexcan: add uint32 reference to clock-frequency property
can: gw: support modification of Classical CAN DLCs
can: drivers: add len8_dlc support for esd_usb2 CAN adapter
can: drivers: add len8_dlc support for various CAN adapters
can: drivers: introduce helpers to access Classical CAN DLC values
can: update documentation for DLC usage in Classical CAN
can: rename CAN FD related can_len2dlc and can_dlc2len helpers
...
====================

Link: https://lore.kernel.org/r/20201120133318.3428231-1-mkl@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+676 -406
+3 -2
Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml
··· 57 57 - const: per 58 58 59 59 clock-frequency: 60 + $ref: /schemas/types.yaml#/definitions/uint32 60 61 description: | 61 62 The oscillator frequency driving the flexcan device, filled in by the 62 63 boot loader. This property should only be used the used operating system ··· 100 99 by default. 101 100 0: clock source 0 (oscillator clock) 102 101 1: clock source 1 (peripheral clock) 103 - $ref: /schemas/types.yaml#/definitions/uint32 102 + $ref: /schemas/types.yaml#/definitions/uint8 104 103 default: 1 105 104 minimum: 0 106 105 maximum: 1 ··· 125 124 interrupts = <48 0x2>; 126 125 interrupt-parent = <&mpic>; 127 126 clock-frequency = <200000000>; 128 - fsl,clk-source = <0>; 127 + fsl,clk-source = /bits/ 8 <0>; 129 128 }; 130 129 - | 131 130 #include <dt-bindings/interrupt-controller/irq.h>
+53 -17
Documentation/networking/can.rst
··· 228 228 on the socket as usual. There are also CAN specific socket options 229 229 described below. 230 230 231 - The basic CAN frame structure and the sockaddr structure are defined 232 - in include/linux/can.h: 231 + The Classical CAN frame structure (aka CAN 2.0B), the CAN FD frame structure 232 + and the sockaddr structure are defined in include/linux/can.h: 233 233 234 234 .. code-block:: C 235 235 236 236 struct can_frame { 237 237 canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ 238 - __u8 can_dlc; /* frame payload length in byte (0 .. 8) */ 238 + union { 239 + /* CAN frame payload length in byte (0 .. CAN_MAX_DLEN) 240 + * was previously named can_dlc so we need to carry that 241 + * name for legacy support 242 + */ 243 + __u8 len; 244 + __u8 can_dlc; /* deprecated */ 245 + }; 239 246 __u8 __pad; /* padding */ 240 247 __u8 __res0; /* reserved / padding */ 241 - __u8 __res1; /* reserved / padding */ 248 + __u8 len8_dlc; /* optional DLC for 8 byte payload length (9 .. 15) */ 242 249 __u8 data[8] __attribute__((aligned(8))); 243 250 }; 251 + 252 + Remark: The len element contains the payload length in bytes and should be 253 + used instead of can_dlc. The deprecated can_dlc was misleadingly named as 254 + it always contained the plain payload length in bytes and not the so called 255 + 'data length code' (DLC). 256 + 257 + To pass the raw DLC from/to a Classical CAN network device the len8_dlc 258 + element can contain values 9 .. 15 when the len element is 8 (the real 259 + payload length for all DLC values greater or equal to 8). 244 260 245 261 The alignment of the (linear) payload data[] to a 64bit boundary 246 262 allows the user to define their own structs and unions to easily access ··· 275 259 union { 276 260 /* transport protocol class address info (e.g. ISOTP) */ 277 261 struct { canid_t rx_id, tx_id; } tp; 262 + 263 + /* J1939 address information */ 264 + struct { 265 + /* 8 byte name when using dynamic addressing */ 266 + __u64 name; 267 + 268 + /* pgn: 269 + * 8 bit: PS in PDU2 case, else 0 270 + * 8 bit: PF 271 + * 1 bit: DP 272 + * 1 bit: reserved 273 + */ 274 + __u32 pgn; 275 + 276 + /* 1 byte address */ 277 + __u8 addr; 278 + } j1939; 278 279 279 280 /* reserved for future CAN protocols address information */ 280 281 } can_addr; ··· 404 371 bytes of payload (struct can_frame) like the CAN_RAW socket. Therefore e.g. 405 372 the CAN_RAW socket supports a new socket option CAN_RAW_FD_FRAMES that 406 373 switches the socket into a mode that allows the handling of CAN FD frames 407 - and (legacy) CAN frames simultaneously (see :ref:`socketcan-rawfd`). 374 + and Classical CAN frames simultaneously (see :ref:`socketcan-rawfd`). 408 375 409 376 The struct canfd_frame is defined in include/linux/can.h: 410 377 ··· 430 397 length and the DLC has a 1:1 mapping in the range of 0 .. 8. To preserve 431 398 the easy handling of the length information the canfd_frame.len element 432 399 contains a plain length value from 0 .. 64. So both canfd_frame.len and 433 - can_frame.can_dlc are equal and contain a length information and no DLC. 400 + can_frame.len are equal and contain a length information and no DLC. 434 401 For details about the distinction of CAN and CAN FD capable devices and 435 402 the mapping to the bus-relevant data length code (DLC), see :ref:`socketcan-can-fd-driver`. 436 403 ··· 440 407 441 408 .. code-block:: C 442 409 443 - #define CAN_MTU (sizeof(struct can_frame)) == 16 => 'legacy' CAN frame 410 + #define CAN_MTU (sizeof(struct can_frame)) == 16 => Classical CAN frame 444 411 #define CANFD_MTU (sizeof(struct canfd_frame)) == 72 => CAN FD frame 445 412 446 413 ··· 642 609 printf("got CAN FD frame with length %d\n", cfd.len); 643 610 /* cfd.flags contains valid data */ 644 611 } else if (nbytes == CAN_MTU) { 645 - printf("got legacy CAN frame with length %d\n", cfd.len); 612 + printf("got Classical CAN frame with length %d\n", cfd.len); 646 613 /* cfd.flags is undefined */ 647 614 } else { 648 615 fprintf(stderr, "read: invalid CAN(FD) frame\n"); ··· 656 623 printf("%02X ", cfd.data[i]); 657 624 658 625 When reading with size CANFD_MTU only returns CAN_MTU bytes that have 659 - been received from the socket a legacy CAN frame has been read into the 626 + been received from the socket a Classical CAN frame has been read into the 660 627 provided CAN FD structure. Note that the canfd_frame.flags data field is 661 628 not specified in the struct can_frame and therefore it is only valid in 662 629 CANFD_MTU sized CAN FD frames. ··· 666 633 To build a CAN FD aware application use struct canfd_frame as basic CAN 667 634 data structure for CAN_RAW based applications. When the application is 668 635 executed on an older Linux kernel and switching the CAN_RAW_FD_FRAMES 669 - socket option returns an error: No problem. You'll get legacy CAN frames 636 + socket option returns an error: No problem. You'll get Classical CAN frames 670 637 or CAN FD frames and can process them the same way. 671 638 672 639 When sending to CAN devices make sure that the device is capable to handle ··· 875 842 RX_RTR_FRAME: 876 843 Send reply for RTR-request (placed in op->frames[0]). 877 844 845 + CAN_FD_FRAME: 846 + The CAN frames following the bcm_msg_head are struct canfd_frame's 878 847 879 848 Broadcast Manager Transmission Timers 880 849 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ··· 1061 1026 1062 1027 stats - SocketCAN core statistics (rx/tx frames, match ratios, ...) 1063 1028 reset_stats - manual statistic reset 1064 - version - prints the SocketCAN core version and the ABI version 1029 + version - prints SocketCAN core and ABI version (removed in Linux 5.10) 1065 1030 1066 1031 1067 1032 Writing Own CAN Protocol Modules ··· 1105 1070 dev->type = ARPHRD_CAN; /* the netdevice hardware type */ 1106 1071 dev->flags = IFF_NOARP; /* CAN has no arp */ 1107 1072 1108 - dev->mtu = CAN_MTU; /* sizeof(struct can_frame) -> legacy CAN interface */ 1073 + dev->mtu = CAN_MTU; /* sizeof(struct can_frame) -> Classical CAN interface */ 1109 1074 1110 1075 or alternative, when the controller supports CAN with flexible data rate: 1111 1076 dev->mtu = CANFD_MTU; /* sizeof(struct canfd_frame) -> CAN FD interface */ ··· 1219 1184 [ fd { on | off } ] 1220 1185 [ fd-non-iso { on | off } ] 1221 1186 [ presume-ack { on | off } ] 1187 + [ cc-len8-dlc { on | off } ] 1222 1188 1223 1189 [ restart-ms TIME-MS ] 1224 1190 [ restart ] ··· 1362 1326 second bit timing has to be specified in order to enable the CAN FD bitrate. 1363 1327 1364 1328 Additionally CAN FD capable CAN controllers support up to 64 bytes of 1365 - payload. The representation of this length in can_frame.can_dlc and 1329 + payload. The representation of this length in can_frame.len and 1366 1330 canfd_frame.len for userspace applications and inside the Linux network 1367 1331 layer is a plain value from 0 .. 64 instead of the CAN 'data length code'. 1368 - The data length code was a 1:1 mapping to the payload length in the legacy 1332 + The data length code was a 1:1 mapping to the payload length in the Classical 1369 1333 CAN frames anyway. The payload length to the bus-relevant DLC mapping is 1370 1334 only performed inside the CAN drivers, preferably with the helper 1371 - functions can_dlc2len() and can_len2dlc(). 1335 + functions can_fd_dlc2len() and can_fd_len2dlc(). 1372 1336 1373 1337 The CAN netdevice driver capabilities can be distinguished by the network 1374 1338 devices maximum transfer unit (MTU):: 1375 1339 1376 - MTU = 16 (CAN_MTU) => sizeof(struct can_frame) => 'legacy' CAN device 1340 + MTU = 16 (CAN_MTU) => sizeof(struct can_frame) => Classical CAN device 1377 1341 MTU = 72 (CANFD_MTU) => sizeof(struct canfd_frame) => CAN FD capable device 1378 1342 1379 1343 The CAN device MTU can be retrieved e.g. with a SIOCGIFMTU ioctl() syscall. 1380 - N.B. CAN FD capable devices can also handle and send legacy CAN frames. 1344 + N.B. CAN FD capable devices can also handle and send Classical CAN frames. 1381 1345 1382 1346 When configuring CAN FD capable CAN controllers an additional 'data' bitrate 1383 1347 has to be set. This bitrate for the data phase of the CAN FD frame has to be
+42 -4
Documentation/networking/j1939.rst
··· 69 69 PGN 70 70 --- 71 71 72 + The J1939 protocol uses the 29-bit CAN identifier with the following structure: 73 + 74 + ============ ============== ==================== 75 + 29 bit CAN-ID 76 + -------------------------------------------------- 77 + Bit positions within the CAN-ID 78 + -------------------------------------------------- 79 + 28 ... 26 25 ... 8 7 ... 0 80 + ============ ============== ==================== 81 + Priority PGN SA (Source Address) 82 + ============ ============== ==================== 83 + 72 84 The PGN (Parameter Group Number) is a number to identify a packet. The PGN 73 85 is composed as follows: 74 - 1 bit : Reserved Bit 75 - 1 bit : Data Page 76 - 8 bits : PF (PDU Format) 77 - 8 bits : PS (PDU Specific) 86 + 87 + ============ ============== ================= ================= 88 + PGN 89 + ------------------------------------------------------------------ 90 + Bit positions within the CAN-ID 91 + ------------------------------------------------------------------ 92 + 25 24 23 ... 16 15 ... 8 93 + ============ ============== ================= ================= 94 + R (Reserved) DP (Data Page) PF (PDU Format) PS (PDU Specific) 95 + ============ ============== ================= ================= 78 96 79 97 In J1939-21 distinction is made between PDU1 format (where PF < 240) and PDU2 80 98 format (where PF >= 240). Furthermore, when using the PDU2 format, the PS-field 81 99 contains a so-called Group Extension, which is part of the PGN. When using PDU2 82 100 format, the Group Extension is set in the PS-field. 101 + 102 + ============== ======================== 103 + PDU1 Format (specific) (peer to peer) 104 + ---------------------------------------- 105 + Bit positions within the CAN-ID 106 + ---------------------------------------- 107 + 23 ... 16 15 ... 8 108 + ============== ======================== 109 + 00h ... EFh DA (Destination address) 110 + ============== ======================== 111 + 112 + ============== ======================== 113 + PDU2 Format (global) (broadcast) 114 + ---------------------------------------- 115 + Bit positions within the CAN-ID 116 + ---------------------------------------- 117 + 23 ... 16 15 ... 8 118 + ============== ======================== 119 + F0h ... FFh GE (Group Extenstion) 120 + ============== ======================== 83 121 84 122 On the other hand, when using PDU1 format, the PS-field contains a so-called 85 123 Destination Address, which is _not_ part of the PGN. When communicating a PGN
+7 -7
drivers/net/can/at91_can.c
··· 468 468 } 469 469 reg_mid = at91_can_id_to_reg_mid(cf->can_id); 470 470 reg_mcr = ((cf->can_id & CAN_RTR_FLAG) ? AT91_MCR_MRTR : 0) | 471 - (cf->can_dlc << 16) | AT91_MCR_MTCR; 471 + (cf->len << 16) | AT91_MCR_MTCR; 472 472 473 473 /* disable MB while writing ID (see datasheet) */ 474 474 set_mb_mode(priv, mb, AT91_MB_MODE_DISABLED); ··· 481 481 /* This triggers transmission */ 482 482 at91_write(priv, AT91_MCR(mb), reg_mcr); 483 483 484 - stats->tx_bytes += cf->can_dlc; 484 + stats->tx_bytes += cf->len; 485 485 486 486 /* _NOTE_: subtract AT91_MB_TX_FIRST offset from mb! */ 487 487 can_put_echo_skb(skb, dev, mb - get_mb_tx_first(priv)); ··· 554 554 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW; 555 555 556 556 stats->rx_packets++; 557 - stats->rx_bytes += cf->can_dlc; 557 + stats->rx_bytes += cf->len; 558 558 netif_receive_skb(skb); 559 559 } 560 560 ··· 580 580 cf->can_id = (reg_mid >> 18) & CAN_SFF_MASK; 581 581 582 582 reg_msr = at91_read(priv, AT91_MSR(mb)); 583 - cf->can_dlc = get_can_dlc((reg_msr >> 16) & 0xf); 583 + cf->len = can_cc_dlc2len((reg_msr >> 16) & 0xf); 584 584 585 585 if (reg_msr & AT91_MSR_MRTR) 586 586 cf->can_id |= CAN_RTR_FLAG; ··· 619 619 at91_read_mb(dev, mb, cf); 620 620 621 621 stats->rx_packets++; 622 - stats->rx_bytes += cf->can_dlc; 622 + stats->rx_bytes += cf->len; 623 623 netif_receive_skb(skb); 624 624 625 625 can_led_event(dev, CAN_LED_EVENT_RX); ··· 780 780 at91_poll_err_frame(dev, cf, reg_sr); 781 781 782 782 dev->stats.rx_packets++; 783 - dev->stats.rx_bytes += cf->can_dlc; 783 + dev->stats.rx_bytes += cf->len; 784 784 netif_receive_skb(skb); 785 785 786 786 return 1; ··· 1047 1047 at91_irq_err_state(dev, cf, new_state); 1048 1048 1049 1049 dev->stats.rx_packets++; 1050 - dev->stats.rx_bytes += cf->can_dlc; 1050 + dev->stats.rx_bytes += cf->len; 1051 1051 netif_rx(skb); 1052 1052 1053 1053 priv->can.state = new_state;
+10 -10
drivers/net/can/c_can/c_can.c
··· 306 306 struct can_frame *frame, int idx) 307 307 { 308 308 struct c_can_priv *priv = netdev_priv(dev); 309 - u16 ctrl = IF_MCONT_TX | frame->can_dlc; 309 + u16 ctrl = IF_MCONT_TX | frame->len; 310 310 bool rtr = frame->can_id & CAN_RTR_FLAG; 311 311 u32 arb = IF_ARB_MSGVAL; 312 312 int i; ··· 339 339 if (priv->type == BOSCH_D_CAN) { 340 340 u32 data = 0, dreg = C_CAN_IFACE(DATA1_REG, iface); 341 341 342 - for (i = 0; i < frame->can_dlc; i += 4, dreg += 2) { 342 + for (i = 0; i < frame->len; i += 4, dreg += 2) { 343 343 data = (u32)frame->data[i]; 344 344 data |= (u32)frame->data[i + 1] << 8; 345 345 data |= (u32)frame->data[i + 2] << 16; ··· 347 347 priv->write_reg32(priv, dreg, data); 348 348 } 349 349 } else { 350 - for (i = 0; i < frame->can_dlc; i += 2) { 350 + for (i = 0; i < frame->len; i += 2) { 351 351 priv->write_reg(priv, 352 352 C_CAN_IFACE(DATA1_REG, iface) + i / 2, 353 353 frame->data[i] | ··· 397 397 return -ENOMEM; 398 398 } 399 399 400 - frame->can_dlc = get_can_dlc(ctrl & 0x0F); 400 + frame->len = can_cc_dlc2len(ctrl & 0x0F); 401 401 402 402 arb = priv->read_reg32(priv, C_CAN_IFACE(ARB1_REG, iface)); 403 403 ··· 412 412 int i, dreg = C_CAN_IFACE(DATA1_REG, iface); 413 413 414 414 if (priv->type == BOSCH_D_CAN) { 415 - for (i = 0; i < frame->can_dlc; i += 4, dreg += 2) { 415 + for (i = 0; i < frame->len; i += 4, dreg += 2) { 416 416 data = priv->read_reg32(priv, dreg); 417 417 frame->data[i] = data; 418 418 frame->data[i + 1] = data >> 8; ··· 420 420 frame->data[i + 3] = data >> 24; 421 421 } 422 422 } else { 423 - for (i = 0; i < frame->can_dlc; i += 2, dreg++) { 423 + for (i = 0; i < frame->len; i += 2, dreg++) { 424 424 data = priv->read_reg(priv, dreg); 425 425 frame->data[i] = data; 426 426 frame->data[i + 1] = data >> 8; ··· 429 429 } 430 430 431 431 stats->rx_packets++; 432 - stats->rx_bytes += frame->can_dlc; 432 + stats->rx_bytes += frame->len; 433 433 434 434 netif_receive_skb(skb); 435 435 return 0; ··· 475 475 * transmit as we might race against do_tx(). 476 476 */ 477 477 c_can_setup_tx_object(dev, IF_TX, frame, idx); 478 - priv->dlc[idx] = frame->can_dlc; 478 + priv->dlc[idx] = frame->len; 479 479 can_put_echo_skb(skb, dev, idx); 480 480 481 481 /* Update the active bits */ ··· 977 977 } 978 978 979 979 stats->rx_packets++; 980 - stats->rx_bytes += cf->can_dlc; 980 + stats->rx_bytes += cf->len; 981 981 netif_receive_skb(skb); 982 982 983 983 return 1; ··· 1047 1047 } 1048 1048 1049 1049 stats->rx_packets++; 1050 - stats->rx_bytes += cf->can_dlc; 1050 + stats->rx_bytes += cf->len; 1051 1051 netif_receive_skb(skb); 1052 1052 return 1; 1053 1053 }
+7 -7
drivers/net/can/cc770/cc770.c
··· 390 390 u32 id; 391 391 int i; 392 392 393 - dlc = cf->can_dlc; 393 + dlc = cf->len; 394 394 id = cf->can_id; 395 395 rtr = cf->can_id & CAN_RTR_FLAG ? 0 : MSGCFG_DIR; 396 396 ··· 470 470 cf->can_id = CAN_RTR_FLAG; 471 471 if (config & MSGCFG_XTD) 472 472 cf->can_id |= CAN_EFF_FLAG; 473 - cf->can_dlc = 0; 473 + cf->len = 0; 474 474 } else { 475 475 if (config & MSGCFG_XTD) { 476 476 id = cc770_read_reg(priv, msgobj[mo].id[3]); ··· 486 486 } 487 487 488 488 cf->can_id = id; 489 - cf->can_dlc = get_can_dlc((config & 0xf0) >> 4); 490 - for (i = 0; i < cf->can_dlc; i++) 489 + cf->len = can_cc_dlc2len((config & 0xf0) >> 4); 490 + for (i = 0; i < cf->len; i++) 491 491 cf->data[i] = cc770_read_reg(priv, msgobj[mo].data[i]); 492 492 } 493 493 494 494 stats->rx_packets++; 495 - stats->rx_bytes += cf->can_dlc; 495 + stats->rx_bytes += cf->len; 496 496 netif_rx(skb); 497 497 } 498 498 ··· 572 572 573 573 574 574 stats->rx_packets++; 575 - stats->rx_bytes += cf->can_dlc; 575 + stats->rx_bytes += cf->len; 576 576 netif_rx(skb); 577 577 578 578 return 0; ··· 699 699 } 700 700 701 701 cf = (struct can_frame *)priv->tx_skb->data; 702 - stats->tx_bytes += cf->can_dlc; 702 + stats->tx_bytes += cf->len; 703 703 stats->tx_packets++; 704 704 705 705 can_put_echo_skb(priv->tx_skb, dev, 0);
+8 -8
drivers/net/can/dev.c
··· 30 30 static const u8 dlc2len[] = {0, 1, 2, 3, 4, 5, 6, 7, 31 31 8, 12, 16, 20, 24, 32, 48, 64}; 32 32 33 - /* get data length from can_dlc with sanitized can_dlc */ 34 - u8 can_dlc2len(u8 can_dlc) 33 + /* get data length from raw data length code (DLC) */ 34 + u8 can_fd_dlc2len(u8 dlc) 35 35 { 36 - return dlc2len[can_dlc & 0x0F]; 36 + return dlc2len[dlc & 0x0F]; 37 37 } 38 - EXPORT_SYMBOL_GPL(can_dlc2len); 38 + EXPORT_SYMBOL_GPL(can_fd_dlc2len); 39 39 40 40 static const u8 len2dlc[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, /* 0 - 8 */ 41 41 9, 9, 9, 9, /* 9 - 12 */ ··· 49 49 15, 15, 15, 15, 15, 15, 15, 15}; /* 57 - 64 */ 50 50 51 51 /* map the sanitized data length to an appropriate data length code */ 52 - u8 can_len2dlc(u8 len) 52 + u8 can_fd_len2dlc(u8 len) 53 53 { 54 54 if (unlikely(len > 64)) 55 55 return 0xF; 56 56 57 57 return len2dlc[len]; 58 58 } 59 - EXPORT_SYMBOL_GPL(can_len2dlc); 59 + EXPORT_SYMBOL_GPL(can_fd_len2dlc); 60 60 61 61 #ifdef CONFIG_CAN_CALC_BITTIMING 62 62 #define CAN_CALC_MAX_ERROR 50 /* in one-tenth of a percent */ ··· 595 595 netif_rx_ni(skb); 596 596 597 597 stats->rx_packets++; 598 - stats->rx_bytes += cf->can_dlc; 598 + stats->rx_bytes += cf->len; 599 599 600 600 restart: 601 601 netdev_dbg(dev, "restarted\n"); ··· 737 737 return NULL; 738 738 739 739 (*cf)->can_id = CAN_ERR_FLAG; 740 - (*cf)->can_dlc = CAN_ERR_DLC; 740 + (*cf)->len = CAN_ERR_DLC; 741 741 742 742 return skb; 743 743 }
+97 -68
drivers/net/can/flexcan.c
··· 236 236 #define FLEXCAN_QUIRK_BROKEN_PERR_STATE BIT(6) 237 237 /* default to BE register access */ 238 238 #define FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN BIT(7) 239 - /* Setup stop mode to support wakeup */ 240 - #define FLEXCAN_QUIRK_SETUP_STOP_MODE BIT(8) 239 + /* Setup stop mode with GPR to support wakeup */ 240 + #define FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR BIT(8) 241 241 /* Support CAN-FD mode */ 242 242 #define FLEXCAN_QUIRK_SUPPORT_FD BIT(9) 243 243 /* support memory detection and correction */ ··· 381 381 static const struct flexcan_devtype_data fsl_imx6q_devtype_data = { 382 382 .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | 383 383 FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | FLEXCAN_QUIRK_BROKEN_PERR_STATE | 384 - FLEXCAN_QUIRK_SETUP_STOP_MODE, 384 + FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR, 385 385 }; 386 386 387 387 static const struct flexcan_devtype_data fsl_imx8qm_devtype_data = { ··· 393 393 static struct flexcan_devtype_data fsl_imx8mp_devtype_data = { 394 394 .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | 395 395 FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | 396 - FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_SETUP_STOP_MODE | 396 + FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR | 397 397 FLEXCAN_QUIRK_SUPPORT_FD | FLEXCAN_QUIRK_SUPPORT_ECC, 398 398 }; 399 399 ··· 746 746 struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 747 747 u32 can_id; 748 748 u32 data; 749 - u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | ((can_len2dlc(cfd->len)) << 16); 749 + u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | ((can_fd_len2dlc(cfd->len)) << 16); 750 750 int i; 751 751 752 752 if (can_dropped_invalid_skb(dev, skb)) ··· 1000 1000 cfd->can_id = (reg_id >> 18) & CAN_SFF_MASK; 1001 1001 1002 1002 if (reg_ctrl & FLEXCAN_MB_CNT_EDL) { 1003 - cfd->len = can_dlc2len(get_canfd_dlc((reg_ctrl >> 16) & 0xf)); 1003 + cfd->len = can_fd_dlc2len((reg_ctrl >> 16) & 0xf); 1004 1004 1005 1005 if (reg_ctrl & FLEXCAN_MB_CNT_BRS) 1006 1006 cfd->flags |= CANFD_BRS; 1007 1007 } else { 1008 - cfd->len = get_can_dlc((reg_ctrl >> 16) & 0xf); 1008 + cfd->len = can_cc_dlc2len((reg_ctrl >> 16) & 0xf); 1009 1009 1010 1010 if (reg_ctrl & FLEXCAN_MB_CNT_RTR) 1011 1011 cfd->can_id |= CAN_RTR_FLAG; ··· 1346 1346 priv->write(reg_ctrl2, &regs->ctrl2); 1347 1347 } 1348 1348 1349 + static int flexcan_rx_offload_setup(struct net_device *dev) 1350 + { 1351 + struct flexcan_priv *priv = netdev_priv(dev); 1352 + int err; 1353 + 1354 + if (priv->can.ctrlmode & CAN_CTRLMODE_FD) 1355 + priv->mb_size = sizeof(struct flexcan_mb) + CANFD_MAX_DLEN; 1356 + else 1357 + priv->mb_size = sizeof(struct flexcan_mb) + CAN_MAX_DLEN; 1358 + priv->mb_count = (sizeof(priv->regs->mb[0]) / priv->mb_size) + 1359 + (sizeof(priv->regs->mb[1]) / priv->mb_size); 1360 + 1361 + if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) 1362 + priv->tx_mb_reserved = 1363 + flexcan_get_mb(priv, FLEXCAN_TX_MB_RESERVED_OFF_TIMESTAMP); 1364 + else 1365 + priv->tx_mb_reserved = 1366 + flexcan_get_mb(priv, FLEXCAN_TX_MB_RESERVED_OFF_FIFO); 1367 + priv->tx_mb_idx = priv->mb_count - 1; 1368 + priv->tx_mb = flexcan_get_mb(priv, priv->tx_mb_idx); 1369 + priv->tx_mask = FLEXCAN_IFLAG_MB(priv->tx_mb_idx); 1370 + 1371 + priv->offload.mailbox_read = flexcan_mailbox_read; 1372 + 1373 + if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { 1374 + priv->offload.mb_first = FLEXCAN_RX_MB_OFF_TIMESTAMP_FIRST; 1375 + priv->offload.mb_last = priv->mb_count - 2; 1376 + 1377 + priv->rx_mask = GENMASK_ULL(priv->offload.mb_last, 1378 + priv->offload.mb_first); 1379 + err = can_rx_offload_add_timestamp(dev, &priv->offload); 1380 + } else { 1381 + priv->rx_mask = FLEXCAN_IFLAG_RX_FIFO_OVERFLOW | 1382 + FLEXCAN_IFLAG_RX_FIFO_AVAILABLE; 1383 + err = can_rx_offload_add_fifo(dev, &priv->offload, 1384 + FLEXCAN_NAPI_WEIGHT); 1385 + } 1386 + 1387 + return err; 1388 + } 1389 + 1390 + static void flexcan_chip_interrupts_enable(const struct net_device *dev) 1391 + { 1392 + const struct flexcan_priv *priv = netdev_priv(dev); 1393 + struct flexcan_regs __iomem *regs = priv->regs; 1394 + u64 reg_imask; 1395 + 1396 + disable_irq(dev->irq); 1397 + priv->write(priv->reg_ctrl_default, &regs->ctrl); 1398 + reg_imask = priv->rx_mask | priv->tx_mask; 1399 + priv->write(upper_32_bits(reg_imask), &regs->imask2); 1400 + priv->write(lower_32_bits(reg_imask), &regs->imask1); 1401 + enable_irq(dev->irq); 1402 + } 1403 + 1404 + static void flexcan_chip_interrupts_disable(const struct net_device *dev) 1405 + { 1406 + const struct flexcan_priv *priv = netdev_priv(dev); 1407 + struct flexcan_regs __iomem *regs = priv->regs; 1408 + 1409 + priv->write(0, &regs->imask2); 1410 + priv->write(0, &regs->imask1); 1411 + priv->write(priv->reg_ctrl_default & ~FLEXCAN_CTRL_ERR_ALL, 1412 + &regs->ctrl); 1413 + } 1414 + 1349 1415 /* flexcan_chip_start 1350 1416 * 1351 1417 * this functions is entered with clocks enabled ··· 1422 1356 struct flexcan_priv *priv = netdev_priv(dev); 1423 1357 struct flexcan_regs __iomem *regs = priv->regs; 1424 1358 u32 reg_mcr, reg_ctrl, reg_ctrl2, reg_mecr; 1425 - u64 reg_imask; 1426 1359 int err, i; 1427 1360 struct flexcan_mb __iomem *mb; 1428 1361 ··· 1639 1574 1640 1575 priv->can.state = CAN_STATE_ERROR_ACTIVE; 1641 1576 1642 - /* enable interrupts atomically */ 1643 - disable_irq(dev->irq); 1644 - priv->write(priv->reg_ctrl_default, &regs->ctrl); 1645 - reg_imask = priv->rx_mask | priv->tx_mask; 1646 - priv->write(upper_32_bits(reg_imask), &regs->imask2); 1647 - priv->write(lower_32_bits(reg_imask), &regs->imask1); 1648 - enable_irq(dev->irq); 1649 - 1650 1577 /* print chip status */ 1651 1578 netdev_dbg(dev, "%s: reading mcr=0x%08x ctrl=0x%08x\n", __func__, 1652 1579 priv->read(&regs->mcr), priv->read(&regs->ctrl)); ··· 1657 1600 static int __flexcan_chip_stop(struct net_device *dev, bool disable_on_error) 1658 1601 { 1659 1602 struct flexcan_priv *priv = netdev_priv(dev); 1660 - struct flexcan_regs __iomem *regs = priv->regs; 1661 1603 int err; 1662 1604 1663 1605 /* freeze + disable module */ ··· 1666 1610 err = flexcan_chip_disable(priv); 1667 1611 if (err && !disable_on_error) 1668 1612 goto out_chip_unfreeze; 1669 - 1670 - /* Disable all interrupts */ 1671 - priv->write(0, &regs->imask2); 1672 - priv->write(0, &regs->imask1); 1673 - priv->write(priv->reg_ctrl_default & ~FLEXCAN_CTRL_ERR_ALL, 1674 - &regs->ctrl); 1675 1613 1676 1614 priv->can.state = CAN_STATE_STOPPED; 1677 1615 ··· 1712 1662 if (err) 1713 1663 goto out_close; 1714 1664 1715 - err = request_irq(dev->irq, flexcan_irq, IRQF_SHARED, dev->name, dev); 1665 + err = flexcan_rx_offload_setup(dev); 1716 1666 if (err) 1717 1667 goto out_transceiver_disable; 1718 1668 1719 - if (priv->can.ctrlmode & CAN_CTRLMODE_FD) 1720 - priv->mb_size = sizeof(struct flexcan_mb) + CANFD_MAX_DLEN; 1721 - else 1722 - priv->mb_size = sizeof(struct flexcan_mb) + CAN_MAX_DLEN; 1723 - priv->mb_count = (sizeof(priv->regs->mb[0]) / priv->mb_size) + 1724 - (sizeof(priv->regs->mb[1]) / priv->mb_size); 1725 - 1726 - if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) 1727 - priv->tx_mb_reserved = 1728 - flexcan_get_mb(priv, FLEXCAN_TX_MB_RESERVED_OFF_TIMESTAMP); 1729 - else 1730 - priv->tx_mb_reserved = 1731 - flexcan_get_mb(priv, FLEXCAN_TX_MB_RESERVED_OFF_FIFO); 1732 - priv->tx_mb_idx = priv->mb_count - 1; 1733 - priv->tx_mb = flexcan_get_mb(priv, priv->tx_mb_idx); 1734 - priv->tx_mask = FLEXCAN_IFLAG_MB(priv->tx_mb_idx); 1735 - 1736 - priv->offload.mailbox_read = flexcan_mailbox_read; 1737 - 1738 - if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) { 1739 - priv->offload.mb_first = FLEXCAN_RX_MB_OFF_TIMESTAMP_FIRST; 1740 - priv->offload.mb_last = priv->mb_count - 2; 1741 - 1742 - priv->rx_mask = GENMASK_ULL(priv->offload.mb_last, 1743 - priv->offload.mb_first); 1744 - err = can_rx_offload_add_timestamp(dev, &priv->offload); 1745 - } else { 1746 - priv->rx_mask = FLEXCAN_IFLAG_RX_FIFO_OVERFLOW | 1747 - FLEXCAN_IFLAG_RX_FIFO_AVAILABLE; 1748 - err = can_rx_offload_add_fifo(dev, &priv->offload, 1749 - FLEXCAN_NAPI_WEIGHT); 1750 - } 1751 - if (err) 1752 - goto out_free_irq; 1753 - 1754 - /* start chip and queuing */ 1755 1669 err = flexcan_chip_start(dev); 1756 1670 if (err) 1757 - goto out_offload_del; 1671 + goto out_can_rx_offload_del; 1672 + 1673 + can_rx_offload_enable(&priv->offload); 1674 + 1675 + err = request_irq(dev->irq, flexcan_irq, IRQF_SHARED, dev->name, dev); 1676 + if (err) 1677 + goto out_can_rx_offload_disable; 1678 + 1679 + flexcan_chip_interrupts_enable(dev); 1758 1680 1759 1681 can_led_event(dev, CAN_LED_EVENT_OPEN); 1760 1682 1761 - can_rx_offload_enable(&priv->offload); 1762 1683 netif_start_queue(dev); 1763 1684 1764 1685 return 0; 1765 1686 1766 - out_offload_del: 1687 + out_can_rx_offload_disable: 1688 + can_rx_offload_disable(&priv->offload); 1689 + flexcan_chip_stop(dev); 1690 + out_can_rx_offload_del: 1767 1691 can_rx_offload_del(&priv->offload); 1768 - out_free_irq: 1769 - free_irq(dev->irq, dev); 1770 1692 out_transceiver_disable: 1771 1693 flexcan_transceiver_disable(priv); 1772 1694 out_close: ··· 1754 1732 struct flexcan_priv *priv = netdev_priv(dev); 1755 1733 1756 1734 netif_stop_queue(dev); 1735 + flexcan_chip_interrupts_disable(dev); 1736 + free_irq(dev->irq, dev); 1757 1737 can_rx_offload_disable(&priv->offload); 1758 1738 flexcan_chip_stop_disable_on_error(dev); 1759 1739 1760 1740 can_rx_offload_del(&priv->offload); 1761 - free_irq(dev->irq, dev); 1762 1741 flexcan_transceiver_disable(priv); 1763 - 1764 1742 close_candev(dev); 1743 + 1765 1744 pm_runtime_put(priv->dev); 1766 1745 1767 1746 can_led_event(dev, CAN_LED_EVENT_STOP); ··· 1779 1756 err = flexcan_chip_start(dev); 1780 1757 if (err) 1781 1758 return err; 1759 + 1760 + flexcan_chip_interrupts_enable(dev); 1782 1761 1783 1762 netif_wake_queue(dev); 1784 1763 break; ··· 2072 2047 of_can_transceiver(dev); 2073 2048 devm_can_led_init(dev); 2074 2049 2075 - if (priv->devtype_data->quirks & FLEXCAN_QUIRK_SETUP_STOP_MODE) { 2050 + if (priv->devtype_data->quirks & FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR) { 2076 2051 err = flexcan_setup_stop_mode(pdev); 2077 2052 if (err) 2078 2053 dev_dbg(&pdev->dev, "failed to setup stop-mode\n"); ··· 2120 2095 if (err) 2121 2096 return err; 2122 2097 2098 + flexcan_chip_interrupts_disable(dev); 2099 + 2123 2100 err = pinctrl_pm_select_sleep_state(device); 2124 2101 if (err) 2125 2102 return err; ··· 2157 2130 err = flexcan_chip_start(dev); 2158 2131 if (err) 2159 2132 return err; 2133 + 2134 + flexcan_chip_interrupts_enable(dev); 2160 2135 } 2161 2136 } 2162 2137
+5 -5
drivers/net/can/grcan.c
··· 1201 1201 cf->can_id = ((slot[0] & GRCAN_MSG_BID) 1202 1202 >> GRCAN_MSG_BID_BIT); 1203 1203 } 1204 - cf->can_dlc = get_can_dlc((slot[1] & GRCAN_MSG_DLC) 1204 + cf->len = can_cc_dlc2len((slot[1] & GRCAN_MSG_DLC) 1205 1205 >> GRCAN_MSG_DLC_BIT); 1206 1206 if (rtr) { 1207 1207 cf->can_id |= CAN_RTR_FLAG; 1208 1208 } else { 1209 - for (i = 0; i < cf->can_dlc; i++) { 1209 + for (i = 0; i < cf->len; i++) { 1210 1210 j = GRCAN_MSG_DATA_SLOT_INDEX(i); 1211 1211 shift = GRCAN_MSG_DATA_SHIFT(i); 1212 1212 cf->data[i] = (u8)(slot[j] >> shift); ··· 1215 1215 1216 1216 /* Update statistics and read pointer */ 1217 1217 stats->rx_packets++; 1218 - stats->rx_bytes += cf->can_dlc; 1218 + stats->rx_bytes += cf->len; 1219 1219 netif_receive_skb(skb); 1220 1220 1221 1221 rd = grcan_ring_add(rd, GRCAN_MSG_SIZE, dma->rx.size); ··· 1399 1399 eff = cf->can_id & CAN_EFF_FLAG; 1400 1400 rtr = cf->can_id & CAN_RTR_FLAG; 1401 1401 id = cf->can_id & (eff ? CAN_EFF_MASK : CAN_SFF_MASK); 1402 - dlc = cf->can_dlc; 1402 + dlc = cf->len; 1403 1403 if (eff) 1404 1404 tmp = (id << GRCAN_MSG_EID_BIT) & GRCAN_MSG_EID; 1405 1405 else ··· 1447 1447 * can_put_echo_skb would be an error unless other measures are 1448 1448 * taken. 1449 1449 */ 1450 - priv->txdlc[slotindex] = cf->can_dlc; /* Store dlc for statistics */ 1450 + priv->txdlc[slotindex] = cf->len; /* Store dlc for statistics */ 1451 1451 can_put_echo_skb(skb, dev, slotindex); 1452 1452 1453 1453 /* Make sure everything is written before allowing hardware to
+5 -5
drivers/net/can/ifi_canfd/ifi_canfd.c
··· 271 271 dlc = (rxdlc >> IFI_CANFD_RXFIFO_DLC_DLC_OFFSET) & 272 272 IFI_CANFD_RXFIFO_DLC_DLC_MASK; 273 273 if (rxdlc & IFI_CANFD_RXFIFO_DLC_EDL) 274 - cf->len = can_dlc2len(dlc); 274 + cf->len = can_fd_dlc2len(dlc); 275 275 else 276 - cf->len = get_can_dlc(dlc); 276 + cf->len = can_cc_dlc2len(dlc); 277 277 278 278 rxid = readl(priv->base + IFI_CANFD_RXFIFO_ID); 279 279 id = (rxid >> IFI_CANFD_RXFIFO_ID_ID_OFFSET); ··· 431 431 writel(IFI_CANFD_ERROR_CTR_ER_ENABLE, priv->base + IFI_CANFD_ERROR_CTR); 432 432 433 433 stats->rx_packets++; 434 - stats->rx_bytes += cf->can_dlc; 434 + stats->rx_bytes += cf->len; 435 435 netif_receive_skb(skb); 436 436 437 437 return 1; ··· 523 523 } 524 524 525 525 stats->rx_packets++; 526 - stats->rx_bytes += cf->can_dlc; 526 + stats->rx_bytes += cf->len; 527 527 netif_receive_skb(skb); 528 528 529 529 return 1; ··· 900 900 txid = cf->can_id & CAN_SFF_MASK; 901 901 } 902 902 903 - txdlc = can_len2dlc(cf->len); 903 + txdlc = can_fd_len2dlc(cf->len); 904 904 if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) && can_is_canfd_skb(skb)) { 905 905 txdlc |= IFI_CANFD_TXFIFO_DLC_EDL; 906 906 if (cf->flags & CANFD_BRS)
+10 -10
drivers/net/can/janz-ican3.c
··· 916 916 917 917 cf->can_id |= desc->data[0] << 3; 918 918 cf->can_id |= (desc->data[1] & 0xe0) >> 5; 919 - cf->can_dlc = get_can_dlc(desc->data[1] & ICAN3_CAN_DLC_MASK); 920 - memcpy(cf->data, &desc->data[2], cf->can_dlc); 919 + cf->len = can_cc_dlc2len(desc->data[1] & ICAN3_CAN_DLC_MASK); 920 + memcpy(cf->data, &desc->data[2], cf->len); 921 921 } else { 922 - cf->can_dlc = get_can_dlc(desc->data[0] & ICAN3_CAN_DLC_MASK); 922 + cf->len = can_cc_dlc2len(desc->data[0] & ICAN3_CAN_DLC_MASK); 923 923 if (desc->data[0] & ICAN3_EFF_RTR) 924 924 cf->can_id |= CAN_RTR_FLAG; 925 925 ··· 934 934 cf->can_id |= desc->data[3] >> 5; /* 2-0 */ 935 935 } 936 936 937 - memcpy(cf->data, &desc->data[6], cf->can_dlc); 937 + memcpy(cf->data, &desc->data[6], cf->len); 938 938 } 939 939 } 940 940 ··· 947 947 948 948 /* we always use the extended format, with the ECHO flag set */ 949 949 desc->command = ICAN3_CAN_TYPE_EFF; 950 - desc->data[0] |= cf->can_dlc; 950 + desc->data[0] |= cf->len; 951 951 desc->data[1] |= ICAN3_ECHO; 952 952 953 953 /* support single transmission (no retries) mode */ ··· 970 970 } 971 971 972 972 /* copy the data bits into the descriptor */ 973 - memcpy(&desc->data[6], cf->data, cf->can_dlc); 973 + memcpy(&desc->data[6], cf->data, cf->len); 974 974 } 975 975 976 976 /* ··· 1294 1294 } 1295 1295 1296 1296 cf = (struct can_frame *)skb->data; 1297 - dlc = cf->can_dlc; 1297 + dlc = cf->len; 1298 1298 1299 1299 /* check flag whether this packet has to be looped back */ 1300 1300 if (skb->pkt_type != PACKET_LOOPBACK) { ··· 1332 1332 if (cf->can_id != echo_cf->can_id) 1333 1333 return false; 1334 1334 1335 - if (cf->can_dlc != echo_cf->can_dlc) 1335 + if (cf->len != echo_cf->len) 1336 1336 return false; 1337 1337 1338 - return memcmp(cf->data, echo_cf->data, cf->can_dlc) == 0; 1338 + return memcmp(cf->data, echo_cf->data, cf->len) == 0; 1339 1339 } 1340 1340 1341 1341 /* ··· 1421 1421 1422 1422 /* update statistics, receive the skb */ 1423 1423 stats->rx_packets++; 1424 - stats->rx_bytes += cf->can_dlc; 1424 + stats->rx_bytes += cf->len; 1425 1425 netif_receive_skb(skb); 1426 1426 1427 1427 err_noalloc:
+5 -5
drivers/net/can/kvaser_pciefd.c
··· 740 740 p->header[0] |= KVASER_PCIEFD_RPACKET_IDE; 741 741 742 742 p->header[0] |= cf->can_id & CAN_EFF_MASK; 743 - p->header[1] |= can_len2dlc(cf->len) << KVASER_PCIEFD_RPACKET_DLC_SHIFT; 743 + p->header[1] |= can_fd_len2dlc(cf->len) << KVASER_PCIEFD_RPACKET_DLC_SHIFT; 744 744 p->header[1] |= KVASER_PCIEFD_TPACKET_AREQ; 745 745 746 746 if (can_is_canfd_skb(skb)) { ··· 1174 1174 if (p->header[0] & KVASER_PCIEFD_RPACKET_IDE) 1175 1175 cf->can_id |= CAN_EFF_FLAG; 1176 1176 1177 - cf->len = can_dlc2len(p->header[1] >> KVASER_PCIEFD_RPACKET_DLC_SHIFT); 1177 + cf->len = can_fd_dlc2len(p->header[1] >> KVASER_PCIEFD_RPACKET_DLC_SHIFT); 1178 1178 1179 1179 if (p->header[0] & KVASER_PCIEFD_RPACKET_RTR) 1180 1180 cf->can_id |= CAN_RTR_FLAG; ··· 1299 1299 cf->data[7] = bec.rxerr; 1300 1300 1301 1301 stats->rx_packets++; 1302 - stats->rx_bytes += cf->can_dlc; 1302 + stats->rx_bytes += cf->len; 1303 1303 1304 1304 netif_rx(skb); 1305 1305 return 0; ··· 1498 1498 1499 1499 if (skb) { 1500 1500 cf->can_id |= CAN_ERR_BUSERROR; 1501 - stats->rx_bytes += cf->can_dlc; 1501 + stats->rx_bytes += cf->len; 1502 1502 stats->rx_packets++; 1503 1503 netif_rx(skb); 1504 1504 } else { ··· 1600 1600 if (!(p->header[0] & KVASER_PCIEFD_RPACKET_RTR)) { 1601 1601 u8 data_len; 1602 1602 1603 - data_len = can_dlc2len(p->header[1] >> 1603 + data_len = can_fd_dlc2len(p->header[1] >> 1604 1604 KVASER_PCIEFD_RPACKET_DLC_SHIFT); 1605 1605 pos += DIV_ROUND_UP(data_len, 4); 1606 1606 }
+6 -6
drivers/net/can/m_can/m_can.c
··· 457 457 } 458 458 459 459 if (dlc & RX_BUF_FDF) 460 - cf->len = can_dlc2len((dlc >> 16) & 0x0F); 460 + cf->len = can_fd_dlc2len((dlc >> 16) & 0x0F); 461 461 else 462 - cf->len = get_can_dlc((dlc >> 16) & 0x0F); 462 + cf->len = can_cc_dlc2len((dlc >> 16) & 0x0F); 463 463 464 464 id = m_can_fifo_read(cdev, fgi, M_CAN_FIFO_ID); 465 465 if (id & RX_BUF_XTD) ··· 596 596 } 597 597 598 598 stats->rx_packets++; 599 - stats->rx_bytes += cf->can_dlc; 599 + stats->rx_bytes += cf->len; 600 600 netif_receive_skb(skb); 601 601 602 602 return 1; ··· 723 723 } 724 724 725 725 stats->rx_packets++; 726 - stats->rx_bytes += cf->can_dlc; 726 + stats->rx_bytes += cf->len; 727 727 netif_receive_skb(skb); 728 728 729 729 return 1; ··· 1489 1489 /* message ram configuration */ 1490 1490 m_can_fifo_write(cdev, 0, M_CAN_FIFO_ID, id); 1491 1491 m_can_fifo_write(cdev, 0, M_CAN_FIFO_DLC, 1492 - can_len2dlc(cf->len) << 16); 1492 + can_fd_len2dlc(cf->len) << 16); 1493 1493 1494 1494 for (i = 0; i < cf->len; i += 4) 1495 1495 m_can_fifo_write(cdev, 0, ··· 1557 1557 m_can_fifo_write(cdev, putidx, M_CAN_FIFO_DLC, 1558 1558 ((putidx << TX_BUF_MM_SHIFT) & 1559 1559 TX_BUF_MM_MASK) | 1560 - (can_len2dlc(cf->len) << 16) | 1560 + (can_fd_len2dlc(cf->len) << 16) | 1561 1561 fdflags | TX_BUF_EFC); 1562 1562 1563 1563 for (i = 0; i < cf->len; i += 4)
+10 -10
drivers/net/can/mscan/mscan.c
··· 250 250 void __iomem *data = &regs->tx.dsr1_0; 251 251 u16 *payload = (u16 *)frame->data; 252 252 253 - for (i = 0; i < frame->can_dlc / 2; i++) { 253 + for (i = 0; i < frame->len / 2; i++) { 254 254 out_be16(data, *payload++); 255 255 data += 2 + _MSCAN_RESERVED_DSR_SIZE; 256 256 } 257 257 /* write remaining byte if necessary */ 258 - if (frame->can_dlc & 1) 259 - out_8(data, frame->data[frame->can_dlc - 1]); 258 + if (frame->len & 1) 259 + out_8(data, frame->data[frame->len - 1]); 260 260 } 261 261 262 - out_8(&regs->tx.dlr, frame->can_dlc); 262 + out_8(&regs->tx.dlr, frame->len); 263 263 out_8(&regs->tx.tbpr, priv->cur_pri); 264 264 265 265 /* Start transmission. */ ··· 312 312 if (can_id & 1) 313 313 frame->can_id |= CAN_RTR_FLAG; 314 314 315 - frame->can_dlc = get_can_dlc(in_8(&regs->rx.dlr) & 0xf); 315 + frame->len = can_cc_dlc2len(in_8(&regs->rx.dlr) & 0xf); 316 316 317 317 if (!(frame->can_id & CAN_RTR_FLAG)) { 318 318 void __iomem *data = &regs->rx.dsr1_0; 319 319 u16 *payload = (u16 *)frame->data; 320 320 321 - for (i = 0; i < frame->can_dlc / 2; i++) { 321 + for (i = 0; i < frame->len / 2; i++) { 322 322 *payload++ = in_be16(data); 323 323 data += 2 + _MSCAN_RESERVED_DSR_SIZE; 324 324 } 325 325 /* read remaining byte if necessary */ 326 - if (frame->can_dlc & 1) 327 - frame->data[frame->can_dlc - 1] = in_8(data); 326 + if (frame->len & 1) 327 + frame->data[frame->len - 1] = in_8(data); 328 328 } 329 329 330 330 out_8(&regs->canrflg, MSCAN_RXF); ··· 372 372 } 373 373 } 374 374 priv->shadow_statflg = canrflg & MSCAN_STAT_MSK; 375 - frame->can_dlc = CAN_ERR_DLC; 375 + frame->len = CAN_ERR_DLC; 376 376 out_8(&regs->canrflg, MSCAN_ERR_IF); 377 377 } 378 378 ··· 407 407 mscan_get_err_frame(dev, frame, canrflg); 408 408 409 409 stats->rx_packets++; 410 - stats->rx_bytes += frame->can_dlc; 410 + stats->rx_bytes += frame->len; 411 411 work_done++; 412 412 netif_receive_skb(skb); 413 413 }
+7 -7
drivers/net/can/pch_can.c
··· 563 563 netif_receive_skb(skb); 564 564 565 565 stats->rx_packets++; 566 - stats->rx_bytes += cf->can_dlc; 566 + stats->rx_bytes += cf->len; 567 567 } 568 568 569 569 static irqreturn_t pch_can_interrupt(int irq, void *dev_id) ··· 683 683 if (id2 & PCH_ID2_DIR) 684 684 cf->can_id |= CAN_RTR_FLAG; 685 685 686 - cf->can_dlc = get_can_dlc((ioread32(&priv->regs-> 686 + cf->len = can_cc_dlc2len((ioread32(&priv->regs-> 687 687 ifregs[0].mcont)) & 0xF); 688 688 689 - for (i = 0; i < cf->can_dlc; i += 2) { 689 + for (i = 0; i < cf->len; i += 2) { 690 690 data_reg = ioread16(&priv->regs->ifregs[0].data[i / 2]); 691 691 cf->data[i] = data_reg; 692 692 cf->data[i + 1] = data_reg >> 8; ··· 696 696 rcv_pkts++; 697 697 stats->rx_packets++; 698 698 quota--; 699 - stats->rx_bytes += cf->can_dlc; 699 + stats->rx_bytes += cf->len; 700 700 701 701 pch_fifo_thresh(priv, obj_num); 702 702 obj_num++; ··· 715 715 iowrite32(PCH_CMASK_RX_TX_GET | PCH_CMASK_CLRINTPND, 716 716 &priv->regs->ifregs[1].cmask); 717 717 pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, int_stat); 718 - dlc = get_can_dlc(ioread32(&priv->regs->ifregs[1].mcont) & 718 + dlc = can_cc_dlc2len(ioread32(&priv->regs->ifregs[1].mcont) & 719 719 PCH_IF_MCONT_DLC); 720 720 stats->tx_bytes += dlc; 721 721 stats->tx_packets++; ··· 919 919 iowrite32(id2, &priv->regs->ifregs[1].id2); 920 920 921 921 /* Copy data to register */ 922 - for (i = 0; i < cf->can_dlc; i += 2) { 922 + for (i = 0; i < cf->len; i += 2) { 923 923 iowrite16(cf->data[i] | (cf->data[i + 1] << 8), 924 924 &priv->regs->ifregs[1].data[i / 2]); 925 925 } ··· 927 927 can_put_echo_skb(skb, ndev, tx_obj_no - PCH_RX_OBJ_END - 1); 928 928 929 929 /* Set the size of the data. Update if2_mcont */ 930 - iowrite32(cf->can_dlc | PCH_IF_MCONT_NEWDAT | PCH_IF_MCONT_TXRQXT | 930 + iowrite32(cf->len | PCH_IF_MCONT_NEWDAT | PCH_IF_MCONT_TXRQXT | 931 931 PCH_IF_MCONT_TXIE, &priv->regs->ifregs[1].mcont); 932 932 933 933 pch_can_rw_msg_obj(&priv->regs->ifregs[1].creq, tx_obj_no);
+8 -8
drivers/net/can/peak_canfd/peak_canfd.c
··· 257 257 u8 cf_len; 258 258 259 259 if (rx_msg_flags & PUCAN_MSG_EXT_DATA_LEN) 260 - cf_len = can_dlc2len(get_canfd_dlc(pucan_msg_get_dlc(msg))); 260 + cf_len = can_fd_dlc2len(pucan_msg_get_dlc(msg)); 261 261 else 262 - cf_len = get_can_dlc(pucan_msg_get_dlc(msg)); 262 + cf_len = can_cc_dlc2len(pucan_msg_get_dlc(msg)); 263 263 264 264 /* if this frame is an echo, */ 265 265 if (rx_msg_flags & PUCAN_MSG_LOOPED_BACK) { ··· 410 410 } 411 411 412 412 stats->rx_packets++; 413 - stats->rx_bytes += cf->can_dlc; 413 + stats->rx_bytes += cf->len; 414 414 pucan_netif_rx(skb, msg->ts_low, msg->ts_high); 415 415 416 416 return 0; ··· 438 438 cf->data[6] = priv->bec.txerr; 439 439 cf->data[7] = priv->bec.rxerr; 440 440 441 - stats->rx_bytes += cf->can_dlc; 441 + stats->rx_bytes += cf->len; 442 442 stats->rx_packets++; 443 443 netif_rx(skb); 444 444 ··· 652 652 unsigned long flags; 653 653 bool should_stop_tx_queue; 654 654 int room_left; 655 - u8 can_dlc; 655 + u8 len; 656 656 657 657 if (can_dropped_invalid_skb(ndev, skb)) 658 658 return NETDEV_TX_OK; ··· 682 682 683 683 if (can_is_canfd_skb(skb)) { 684 684 /* CAN FD frame format */ 685 - can_dlc = can_len2dlc(cf->len); 685 + len = can_fd_len2dlc(cf->len); 686 686 687 687 msg_flags |= PUCAN_MSG_EXT_DATA_LEN; 688 688 ··· 693 693 msg_flags |= PUCAN_MSG_ERROR_STATE_IND; 694 694 } else { 695 695 /* CAN 2.0 frame format */ 696 - can_dlc = cf->len; 696 + len = cf->len; 697 697 698 698 if (cf->can_id & CAN_RTR_FLAG) 699 699 msg_flags |= PUCAN_MSG_RTR; ··· 707 707 msg_flags |= PUCAN_MSG_SELF_RECEIVE; 708 708 709 709 msg->flags = cpu_to_le16(msg_flags); 710 - msg->channel_dlc = PUCAN_MSG_CHANNEL_DLC(priv->index, can_dlc); 710 + msg->channel_dlc = PUCAN_MSG_CHANNEL_DLC(priv->index, len); 711 711 memcpy(msg->d, cf->data, cf->len); 712 712 713 713 /* struct msg client field is used as an index in the echo skbs ring */
+7 -7
drivers/net/can/rcar/rcar_can.c
··· 364 364 365 365 if (skb) { 366 366 stats->rx_packets++; 367 - stats->rx_bytes += cf->can_dlc; 367 + stats->rx_bytes += cf->len; 368 368 netif_rx(skb); 369 369 } 370 370 } ··· 607 607 if (cf->can_id & CAN_RTR_FLAG) { /* Remote transmission request */ 608 608 data |= RCAR_CAN_RTR; 609 609 } else { 610 - for (i = 0; i < cf->can_dlc; i++) 610 + for (i = 0; i < cf->len; i++) 611 611 writeb(cf->data[i], 612 612 &priv->regs->mb[RCAR_CAN_TX_FIFO_MBX].data[i]); 613 613 } 614 614 615 615 writel(data, &priv->regs->mb[RCAR_CAN_TX_FIFO_MBX].id); 616 616 617 - writeb(cf->can_dlc, &priv->regs->mb[RCAR_CAN_TX_FIFO_MBX].dlc); 617 + writeb(cf->len, &priv->regs->mb[RCAR_CAN_TX_FIFO_MBX].dlc); 618 618 619 - priv->tx_dlc[priv->tx_head % RCAR_CAN_FIFO_DEPTH] = cf->can_dlc; 619 + priv->tx_dlc[priv->tx_head % RCAR_CAN_FIFO_DEPTH] = cf->len; 620 620 can_put_echo_skb(skb, ndev, priv->tx_head % RCAR_CAN_FIFO_DEPTH); 621 621 priv->tx_head++; 622 622 /* Start Tx: write 0xff to the TFPCR register to increment ··· 659 659 cf->can_id = (data >> RCAR_CAN_SID_SHIFT) & CAN_SFF_MASK; 660 660 661 661 dlc = readb(&priv->regs->mb[RCAR_CAN_RX_FIFO_MBX].dlc); 662 - cf->can_dlc = get_can_dlc(dlc); 662 + cf->len = can_cc_dlc2len(dlc); 663 663 if (data & RCAR_CAN_RTR) { 664 664 cf->can_id |= CAN_RTR_FLAG; 665 665 } else { 666 - for (dlc = 0; dlc < cf->can_dlc; dlc++) 666 + for (dlc = 0; dlc < cf->len; dlc++) 667 667 cf->data[dlc] = 668 668 readb(&priv->regs->mb[RCAR_CAN_RX_FIFO_MBX].data[dlc]); 669 669 } 670 670 671 671 can_led_event(priv->ndev, CAN_LED_EVENT_RX); 672 672 673 - stats->rx_bytes += cf->can_dlc; 673 + stats->rx_bytes += cf->len; 674 674 stats->rx_packets++; 675 675 netif_receive_skb(skb); 676 676 }
+6 -6
drivers/net/can/rcar/rcar_canfd.c
··· 1025 1025 rcar_canfd_write(priv->base, RCANFD_CERFL(ch), 1026 1026 RCANFD_CERFL_ERR(~cerfl)); 1027 1027 stats->rx_packets++; 1028 - stats->rx_bytes += cf->can_dlc; 1028 + stats->rx_bytes += cf->len; 1029 1029 netif_rx(skb); 1030 1030 } 1031 1031 ··· 1134 1134 1135 1135 can_change_state(ndev, cf, tx_state, rx_state); 1136 1136 stats->rx_packets++; 1137 - stats->rx_bytes += cf->can_dlc; 1137 + stats->rx_bytes += cf->len; 1138 1138 netif_rx(skb); 1139 1139 } 1140 1140 } ··· 1357 1357 if (cf->can_id & CAN_RTR_FLAG) 1358 1358 id |= RCANFD_CFID_CFRTR; 1359 1359 1360 - dlc = RCANFD_CFPTR_CFDLC(can_len2dlc(cf->len)); 1360 + dlc = RCANFD_CFPTR_CFDLC(can_fd_len2dlc(cf->len)); 1361 1361 1362 1362 if (priv->can.ctrlmode & CAN_CTRLMODE_FD) { 1363 1363 rcar_canfd_write(priv->base, ··· 1446 1446 1447 1447 if (priv->can.ctrlmode & CAN_CTRLMODE_FD) { 1448 1448 if (sts & RCANFD_RFFDSTS_RFFDF) 1449 - cf->len = can_dlc2len(RCANFD_RFPTR_RFDLC(dlc)); 1449 + cf->len = can_fd_dlc2len(RCANFD_RFPTR_RFDLC(dlc)); 1450 1450 else 1451 - cf->len = get_can_dlc(RCANFD_RFPTR_RFDLC(dlc)); 1451 + cf->len = can_cc_dlc2len(RCANFD_RFPTR_RFDLC(dlc)); 1452 1452 1453 1453 if (sts & RCANFD_RFFDSTS_RFESI) { 1454 1454 cf->flags |= CANFD_ESI; ··· 1464 1464 rcar_canfd_get_data(priv, cf, RCANFD_F_RFDF(ridx, 0)); 1465 1465 } 1466 1466 } else { 1467 - cf->len = get_can_dlc(RCANFD_RFPTR_RFDLC(dlc)); 1467 + cf->len = can_cc_dlc2len(RCANFD_RFPTR_RFDLC(dlc)); 1468 1468 if (id & RCANFD_RFID_RFRTR) 1469 1469 cf->can_id |= CAN_RTR_FLAG; 1470 1470 else
+1 -1
drivers/net/can/rx-offload.c
··· 55 55 56 56 work_done++; 57 57 stats->rx_packets++; 58 - stats->rx_bytes += cf->can_dlc; 58 + stats->rx_bytes += cf->len; 59 59 netif_receive_skb(skb); 60 60 } 61 61
+8 -8
drivers/net/can/sja1000/sja1000.c
··· 284 284 struct sja1000_priv *priv = netdev_priv(dev); 285 285 struct can_frame *cf = (struct can_frame *)skb->data; 286 286 uint8_t fi; 287 - uint8_t dlc; 288 287 canid_t id; 289 288 uint8_t dreg; 290 289 u8 cmd_reg_val = 0x00; ··· 294 295 295 296 netif_stop_queue(dev); 296 297 297 - fi = dlc = cf->can_dlc; 298 + fi = can_get_cc_dlc(cf, priv->can.ctrlmode); 298 299 id = cf->can_id; 299 300 300 301 if (id & CAN_RTR_FLAG) ··· 315 316 priv->write_reg(priv, SJA1000_ID2, (id & 0x00000007) << 5); 316 317 } 317 318 318 - for (i = 0; i < dlc; i++) 319 + for (i = 0; i < cf->len; i++) 319 320 priv->write_reg(priv, dreg++, cf->data[i]); 320 321 321 322 can_put_echo_skb(skb, dev, 0); ··· 366 367 | (priv->read_reg(priv, SJA1000_ID2) >> 5); 367 368 } 368 369 369 - cf->can_dlc = get_can_dlc(fi & 0x0F); 370 + can_frame_set_cc_len(cf, fi & 0x0F, priv->can.ctrlmode); 370 371 if (fi & SJA1000_FI_RTR) { 371 372 id |= CAN_RTR_FLAG; 372 373 } else { 373 - for (i = 0; i < cf->can_dlc; i++) 374 + for (i = 0; i < cf->len; i++) 374 375 cf->data[i] = priv->read_reg(priv, dreg++); 375 376 } 376 377 ··· 380 381 sja1000_write_cmdreg(priv, CMD_RRB); 381 382 382 383 stats->rx_packets++; 383 - stats->rx_bytes += cf->can_dlc; 384 + stats->rx_bytes += cf->len; 384 385 netif_rx(skb); 385 386 386 387 can_led_event(dev, CAN_LED_EVENT_RX); ··· 489 490 } 490 491 491 492 stats->rx_packets++; 492 - stats->rx_bytes += cf->can_dlc; 493 + stats->rx_bytes += cf->len; 493 494 netif_rx(skb); 494 495 495 496 return 0; ··· 637 638 CAN_CTRLMODE_3_SAMPLES | 638 639 CAN_CTRLMODE_ONE_SHOT | 639 640 CAN_CTRLMODE_BERR_REPORTING | 640 - CAN_CTRLMODE_PRESUME_ACK; 641 + CAN_CTRLMODE_PRESUME_ACK | 642 + CAN_CTRLMODE_CC_LEN8_DLC; 641 643 642 644 spin_lock_init(&priv->cmdreg_lock); 643 645
+16 -16
drivers/net/can/slcan.c
··· 106 106 107 107 /* 108 108 * A CAN frame has a can_id (11 bit standard frame format OR 29 bit extended 109 - * frame format) a data length code (can_dlc) which can be from 0 to 8 110 - * and up to <can_dlc> data bytes as payload. 109 + * frame format) a data length code (len) which can be from 0 to 8 110 + * and up to <len> data bytes as payload. 111 111 * Additionally a CAN frame may become a remote transmission frame if the 112 112 * RTR-bit is set. This causes another ECU to send a CAN frame with the 113 113 * given can_id. ··· 128 128 * 129 129 * Examples: 130 130 * 131 - * t1230 : can_id 0x123, can_dlc 0, no data 132 - * t4563112233 : can_id 0x456, can_dlc 3, data 0x11 0x22 0x33 133 - * T12ABCDEF2AA55 : extended can_id 0x12ABCDEF, can_dlc 2, data 0xAA 0x55 134 - * r1230 : can_id 0x123, can_dlc 0, no data, remote transmission request 131 + * t1230 : can_id 0x123, len 0, no data 132 + * t4563112233 : can_id 0x456, len 3, data 0x11 0x22 0x33 133 + * T12ABCDEF2AA55 : extended can_id 0x12ABCDEF, len 2, data 0xAA 0x55 134 + * r1230 : can_id 0x123, len 0, no data, remote transmission request 135 135 * 136 136 */ 137 137 ··· 156 156 fallthrough; 157 157 case 't': 158 158 /* store dlc ASCII value and terminate SFF CAN ID string */ 159 - cf.can_dlc = sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN]; 159 + cf.len = sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN]; 160 160 sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN] = 0; 161 161 /* point to payload data behind the dlc */ 162 162 cmd += SLC_CMD_LEN + SLC_SFF_ID_LEN + 1; ··· 167 167 case 'T': 168 168 cf.can_id |= CAN_EFF_FLAG; 169 169 /* store dlc ASCII value and terminate EFF CAN ID string */ 170 - cf.can_dlc = sl->rbuff[SLC_CMD_LEN + SLC_EFF_ID_LEN]; 170 + cf.len = sl->rbuff[SLC_CMD_LEN + SLC_EFF_ID_LEN]; 171 171 sl->rbuff[SLC_CMD_LEN + SLC_EFF_ID_LEN] = 0; 172 172 /* point to payload data behind the dlc */ 173 173 cmd += SLC_CMD_LEN + SLC_EFF_ID_LEN + 1; ··· 181 181 182 182 cf.can_id |= tmpid; 183 183 184 - /* get can_dlc from sanitized ASCII value */ 185 - if (cf.can_dlc >= '0' && cf.can_dlc < '9') 186 - cf.can_dlc -= '0'; 184 + /* get len from sanitized ASCII value */ 185 + if (cf.len >= '0' && cf.len < '9') 186 + cf.len -= '0'; 187 187 else 188 188 return; 189 189 190 190 /* RTR frames may have a dlc > 0 but they never have any data bytes */ 191 191 if (!(cf.can_id & CAN_RTR_FLAG)) { 192 - for (i = 0; i < cf.can_dlc; i++) { 192 + for (i = 0; i < cf.len; i++) { 193 193 tmp = hex_to_bin(*cmd++); 194 194 if (tmp < 0) 195 195 return; ··· 218 218 skb_put_data(skb, &cf, sizeof(struct can_frame)); 219 219 220 220 sl->dev->stats.rx_packets++; 221 - sl->dev->stats.rx_bytes += cf.can_dlc; 221 + sl->dev->stats.rx_bytes += cf.len; 222 222 netif_rx_ni(skb); 223 223 } 224 224 ··· 282 282 283 283 pos += (cf->can_id & CAN_EFF_FLAG) ? SLC_EFF_ID_LEN : SLC_SFF_ID_LEN; 284 284 285 - *pos++ = cf->can_dlc + '0'; 285 + *pos++ = cf->len + '0'; 286 286 287 287 /* RTR frames may have a dlc > 0 but they never have any data bytes */ 288 288 if (!(cf->can_id & CAN_RTR_FLAG)) { 289 - for (i = 0; i < cf->can_dlc; i++) 289 + for (i = 0; i < cf->len; i++) 290 290 pos = hex_byte_pack_upper(pos, cf->data[i]); 291 291 } 292 292 ··· 304 304 actual = sl->tty->ops->write(sl->tty, sl->xbuff, pos - sl->xbuff); 305 305 sl->xleft = (pos - sl->xbuff) - actual; 306 306 sl->xhead = sl->xbuff + actual; 307 - sl->dev->stats.tx_bytes += cf->can_dlc; 307 + sl->dev->stats.tx_bytes += cf->len; 308 308 } 309 309 310 310 /* Write out any remaining transmit buffer. Scheduled when tty is writable */
+1 -1
drivers/net/can/softing/softing_fw.c
··· 624 624 */ 625 625 memset(&msg, 0, sizeof(msg)); 626 626 msg.can_id = CAN_ERR_FLAG | CAN_ERR_RESTARTED; 627 - msg.can_dlc = CAN_ERR_DLC; 627 + msg.len = CAN_ERR_DLC; 628 628 for (j = 0; j < ARRAY_SIZE(card->net); ++j) { 629 629 if (!(bus_bitmask_start & (1 << j))) 630 630 continue;
+7 -7
drivers/net/can/softing/softing_main.c
··· 84 84 if (priv->index) 85 85 *ptr |= CMD_BUS2; 86 86 ++ptr; 87 - *ptr++ = cf->can_dlc; 87 + *ptr++ = cf->len; 88 88 *ptr++ = (cf->can_id >> 0); 89 89 *ptr++ = (cf->can_id >> 8); 90 90 if (cf->can_id & CAN_EFF_FLAG) { ··· 95 95 ptr += 1; 96 96 } 97 97 if (!(cf->can_id & CAN_RTR_FLAG)) 98 - memcpy(ptr, &cf->data[0], cf->can_dlc); 98 + memcpy(ptr, &cf->data[0], cf->len); 99 99 memcpy_toio(&card->dpram[DPRAM_TX + DPRAM_TX_SIZE * fifo_wr], 100 100 buf, DPRAM_TX_SIZE); 101 101 if (++fifo_wr >= DPRAM_TX_CNT) ··· 167 167 iowrite8(0, &card->dpram[DPRAM_RX_LOST]); 168 168 /* prepare msg */ 169 169 msg.can_id = CAN_ERR_FLAG | CAN_ERR_CRTL; 170 - msg.can_dlc = CAN_ERR_DLC; 170 + msg.len = CAN_ERR_DLC; 171 171 msg.data[1] = CAN_ERR_CRTL_RX_OVERFLOW; 172 172 /* 173 173 * service to all buses, we don't know which it was applicable ··· 218 218 state = *ptr++; 219 219 220 220 msg.can_id = CAN_ERR_FLAG; 221 - msg.can_dlc = CAN_ERR_DLC; 221 + msg.len = CAN_ERR_DLC; 222 222 223 223 if (state & SF_MASK_BUSOFF) { 224 224 can_state = CAN_STATE_BUS_OFF; ··· 261 261 } else { 262 262 if (cmd & CMD_RTR) 263 263 msg.can_id |= CAN_RTR_FLAG; 264 - msg.can_dlc = get_can_dlc(*ptr++); 264 + msg.len = can_cc_dlc2len(*ptr++); 265 265 if (cmd & CMD_XTD) { 266 266 msg.can_id |= CAN_EFF_FLAG; 267 267 msg.can_id |= le32_to_cpup((void *)ptr); ··· 294 294 --card->tx.pending; 295 295 ++netdev->stats.tx_packets; 296 296 if (!(msg.can_id & CAN_RTR_FLAG)) 297 - netdev->stats.tx_bytes += msg.can_dlc; 297 + netdev->stats.tx_bytes += msg.len; 298 298 } else { 299 299 int ret; 300 300 ··· 302 302 if (ret == NET_RX_SUCCESS) { 303 303 ++netdev->stats.rx_packets; 304 304 if (!(msg.can_id & CAN_RTR_FLAG)) 305 - netdev->stats.rx_bytes += msg.can_dlc; 305 + netdev->stats.rx_bytes += msg.len; 306 306 } else { 307 307 ++netdev->stats.rx_dropped; 308 308 }
+10 -10
drivers/net/can/spi/hi311x.c
··· 277 277 ((frame->can_id & CAN_EFF_MASK) << 1) | 278 278 ((frame->can_id & CAN_RTR_FLAG) ? 1 : 0); 279 279 280 - buf[HI3110_FIFO_EXT_DLC_OFF] = frame->can_dlc; 280 + buf[HI3110_FIFO_EXT_DLC_OFF] = frame->len; 281 281 282 282 memcpy(buf + HI3110_FIFO_EXT_DATA_OFF, 283 - frame->data, frame->can_dlc); 283 + frame->data, frame->len); 284 284 285 285 hi3110_hw_tx_frame(spi, buf, HI3110_TX_EXT_BUF_LEN - 286 - (HI3110_CAN_MAX_DATA_LEN - frame->can_dlc)); 286 + (HI3110_CAN_MAX_DATA_LEN - frame->len)); 287 287 } else { 288 288 /* Standard frame */ 289 289 buf[HI3110_FIFO_ID_OFF] = (frame->can_id & CAN_SFF_MASK) >> 3; ··· 291 291 ((frame->can_id & CAN_SFF_MASK) << 5) | 292 292 ((frame->can_id & CAN_RTR_FLAG) ? (1 << 4) : 0); 293 293 294 - buf[HI3110_FIFO_STD_DLC_OFF] = frame->can_dlc; 294 + buf[HI3110_FIFO_STD_DLC_OFF] = frame->len; 295 295 296 296 memcpy(buf + HI3110_FIFO_STD_DATA_OFF, 297 - frame->data, frame->can_dlc); 297 + frame->data, frame->len); 298 298 299 299 hi3110_hw_tx_frame(spi, buf, HI3110_TX_STD_BUF_LEN - 300 - (HI3110_CAN_MAX_DATA_LEN - frame->can_dlc)); 300 + (HI3110_CAN_MAX_DATA_LEN - frame->len)); 301 301 } 302 302 } 303 303 ··· 341 341 } 342 342 343 343 /* Data length */ 344 - frame->can_dlc = get_can_dlc(buf[HI3110_FIFO_WOTIME_DLC_OFF] & 0x0F); 344 + frame->len = can_cc_dlc2len(buf[HI3110_FIFO_WOTIME_DLC_OFF] & 0x0F); 345 345 346 346 if (buf[HI3110_FIFO_WOTIME_ID_OFF + 3] & HI3110_FIFO_WOTIME_ID_RTR) 347 347 frame->can_id |= CAN_RTR_FLAG; 348 348 else 349 349 memcpy(frame->data, buf + HI3110_FIFO_WOTIME_DAT_OFF, 350 - frame->can_dlc); 350 + frame->len); 351 351 352 352 priv->net->stats.rx_packets++; 353 - priv->net->stats.rx_bytes += frame->can_dlc; 353 + priv->net->stats.rx_bytes += frame->len; 354 354 355 355 can_led_event(priv->net, CAN_LED_EVENT_RX); 356 356 ··· 585 585 } else { 586 586 frame = (struct can_frame *)priv->tx_skb->data; 587 587 hi3110_hw_tx(spi, frame); 588 - priv->tx_len = 1 + frame->can_dlc; 588 + priv->tx_len = 1 + frame->len; 589 589 can_put_echo_skb(priv->tx_skb, net, 0); 590 590 priv->tx_skb = NULL; 591 591 }
+10 -10
drivers/net/can/spi/mcp251x.c
··· 644 644 ((eid >> SIDL_EID_SHIFT) & SIDL_EID_MASK); 645 645 buf[TXBEID8_OFF] = GET_BYTE(eid, 1); 646 646 buf[TXBEID0_OFF] = GET_BYTE(eid, 0); 647 - buf[TXBDLC_OFF] = (rtr << DLC_RTR_SHIFT) | frame->can_dlc; 648 - memcpy(buf + TXBDAT_OFF, frame->data, frame->can_dlc); 649 - mcp251x_hw_tx_frame(spi, buf, frame->can_dlc, tx_buf_idx); 647 + buf[TXBDLC_OFF] = (rtr << DLC_RTR_SHIFT) | frame->len; 648 + memcpy(buf + TXBDAT_OFF, frame->data, frame->len); 649 + mcp251x_hw_tx_frame(spi, buf, frame->len, tx_buf_idx); 650 650 651 651 /* use INSTRUCTION_RTS, to avoid "repeated frame problem" */ 652 652 priv->spi_tx_buf[0] = INSTRUCTION_RTS(1 << tx_buf_idx); ··· 664 664 for (i = 1; i < RXBDAT_OFF; i++) 665 665 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i); 666 666 667 - len = get_can_dlc(buf[RXBDLC_OFF] & RXBDLC_LEN_MASK); 667 + len = can_cc_dlc2len(buf[RXBDLC_OFF] & RXBDLC_LEN_MASK); 668 668 for (; i < (RXBDAT_OFF + len); i++) 669 669 buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i); 670 670 } else { ··· 720 720 frame->can_id |= CAN_RTR_FLAG; 721 721 } 722 722 /* Data length */ 723 - frame->can_dlc = get_can_dlc(buf[RXBDLC_OFF] & RXBDLC_LEN_MASK); 724 - memcpy(frame->data, buf + RXBDAT_OFF, frame->can_dlc); 723 + frame->len = can_cc_dlc2len(buf[RXBDLC_OFF] & RXBDLC_LEN_MASK); 724 + memcpy(frame->data, buf + RXBDAT_OFF, frame->len); 725 725 726 726 priv->net->stats.rx_packets++; 727 - priv->net->stats.rx_bytes += frame->can_dlc; 727 + priv->net->stats.rx_bytes += frame->len; 728 728 729 729 can_led_event(priv->net, CAN_LED_EVENT_RX); 730 730 ··· 998 998 } else { 999 999 frame = (struct can_frame *)priv->tx_skb->data; 1000 1000 1001 - if (frame->can_dlc > CAN_FRAME_MAX_DATA_LEN) 1002 - frame->can_dlc = CAN_FRAME_MAX_DATA_LEN; 1001 + if (frame->len > CAN_FRAME_MAX_DATA_LEN) 1002 + frame->len = CAN_FRAME_MAX_DATA_LEN; 1003 1003 mcp251x_hw_tx(spi, frame, 0); 1004 - priv->tx_len = 1 + frame->can_dlc; 1004 + priv->tx_len = 1 + frame->len; 1005 1005 can_put_echo_skb(priv->tx_skb, net, 0); 1006 1006 priv->tx_skb = NULL; 1007 1007 }
+6 -9
drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
··· 644 644 return 0; 645 645 } 646 646 647 - if (err) 648 - return err; 649 - 650 - return -ETIMEDOUT; 647 + return err; 651 648 } 652 649 653 650 static int mcp251xfd_chip_clock_init(const struct mcp251xfd_priv *priv) ··· 1402 1405 cfd->flags |= CANFD_BRS; 1403 1406 1404 1407 dlc = FIELD_GET(MCP251XFD_OBJ_FLAGS_DLC, hw_rx_obj->flags); 1405 - cfd->len = can_dlc2len(get_canfd_dlc(dlc)); 1408 + cfd->len = can_fd_dlc2len(dlc); 1406 1409 } else { 1407 1410 if (hw_rx_obj->flags & MCP251XFD_OBJ_FLAGS_RTR) 1408 1411 cfd->can_id |= CAN_RTR_FLAG; 1409 1412 1410 - cfd->len = get_can_dlc(FIELD_GET(MCP251XFD_OBJ_FLAGS_DLC, 1413 + cfd->len = can_cc_dlc2len(FIELD_GET(MCP251XFD_OBJ_FLAGS_DLC, 1411 1414 hw_rx_obj->flags)); 1412 1415 } 1413 1416 ··· 2241 2244 * harm, only the lower 7 bits will be transferred into the 2242 2245 * TEF object. 2243 2246 */ 2244 - dlc = can_len2dlc(cfd->len); 2247 + dlc = can_fd_len2dlc(cfd->len); 2245 2248 flags |= FIELD_PREP(MCP251XFD_OBJ_FLAGS_SEQ_MCP2518FD_MASK, seq) | 2246 2249 FIELD_PREP(MCP251XFD_OBJ_FLAGS_DLC, dlc); 2247 2250 ··· 2270 2273 2271 2274 /* Clear data at end of CAN frame */ 2272 2275 offset = round_down(cfd->len, sizeof(u32)); 2273 - len = round_up(can_dlc2len(dlc), sizeof(u32)) - offset; 2276 + len = round_up(can_fd_dlc2len(dlc), sizeof(u32)) - offset; 2274 2277 if (MCP251XFD_SANITIZE_CAN && len) 2275 2278 memset(hw_tx_obj->data + offset, 0x0, len); 2276 2279 memcpy(hw_tx_obj->data, cfd->data, cfd->len); ··· 2278 2281 /* Number of bytes to be written into the RAM of the controller */ 2279 2282 len = sizeof(hw_tx_obj->id) + sizeof(hw_tx_obj->flags); 2280 2283 if (MCP251XFD_SANITIZE_CAN) 2281 - len += round_up(can_dlc2len(dlc), sizeof(u32)); 2284 + len += round_up(can_fd_dlc2len(dlc), sizeof(u32)); 2282 2285 else 2283 2286 len += round_up(cfd->len, sizeof(u32)); 2284 2287
+5 -5
drivers/net/can/sun4i_can.c
··· 424 424 netif_stop_queue(dev); 425 425 426 426 id = cf->can_id; 427 - dlc = cf->can_dlc; 427 + dlc = cf->len; 428 428 msg_flag_n = dlc; 429 429 430 430 if (id & CAN_RTR_FLAG) ··· 475 475 return; 476 476 477 477 fi = readl(priv->base + SUN4I_REG_BUF0_ADDR); 478 - cf->can_dlc = get_can_dlc(fi & 0x0F); 478 + cf->len = can_cc_dlc2len(fi & 0x0F); 479 479 if (fi & SUN4I_MSG_EFF_FLAG) { 480 480 dreg = SUN4I_REG_BUF5_ADDR; 481 481 id = (readl(priv->base + SUN4I_REG_BUF1_ADDR) << 21) | ··· 493 493 if (fi & SUN4I_MSG_RTR_FLAG) 494 494 id |= CAN_RTR_FLAG; 495 495 else 496 - for (i = 0; i < cf->can_dlc; i++) 496 + for (i = 0; i < cf->len; i++) 497 497 cf->data[i] = readl(priv->base + dreg + i * 4); 498 498 499 499 cf->can_id = id; ··· 501 501 sun4i_can_write_cmdreg(priv, SUN4I_CMD_RELEASE_RBUF); 502 502 503 503 stats->rx_packets++; 504 - stats->rx_bytes += cf->can_dlc; 504 + stats->rx_bytes += cf->len; 505 505 netif_rx(skb); 506 506 507 507 can_led_event(dev, CAN_LED_EVENT_RX); ··· 625 625 626 626 if (likely(skb)) { 627 627 stats->rx_packets++; 628 - stats->rx_bytes += cf->can_dlc; 628 + stats->rx_bytes += cf->len; 629 629 netif_rx(skb); 630 630 } else { 631 631 return -ENOMEM;
+4 -4
drivers/net/can/ti_hecc.c
··· 496 496 spin_unlock_irqrestore(&priv->mbx_lock, flags); 497 497 498 498 /* Prepare mailbox for transmission */ 499 - data = cf->can_dlc | (get_tx_head_prio(priv) << 8); 499 + data = cf->len | (get_tx_head_prio(priv) << 8); 500 500 if (cf->can_id & CAN_RTR_FLAG) /* Remote transmission request */ 501 501 data |= HECC_CANMCF_RTR; 502 502 hecc_write_mbx(priv, mbxno, HECC_CANMCF, data); ··· 508 508 hecc_write_mbx(priv, mbxno, HECC_CANMID, data); 509 509 hecc_write_mbx(priv, mbxno, HECC_CANMDL, 510 510 be32_to_cpu(*(__be32 *)(cf->data))); 511 - if (cf->can_dlc > 4) 511 + if (cf->len > 4) 512 512 hecc_write_mbx(priv, mbxno, HECC_CANMDH, 513 513 be32_to_cpu(*(__be32 *)(cf->data + 4))); 514 514 else ··· 566 566 data = hecc_read_mbx(priv, mbxno, HECC_CANMCF); 567 567 if (data & HECC_CANMCF_RTR) 568 568 cf->can_id |= CAN_RTR_FLAG; 569 - cf->can_dlc = get_can_dlc(data & 0xF); 569 + cf->len = can_cc_dlc2len(data & 0xF); 570 570 571 571 data = hecc_read_mbx(priv, mbxno, HECC_CANMDL); 572 572 *(__be32 *)(cf->data) = cpu_to_be32(data); 573 - if (cf->can_dlc > 4) { 573 + if (cf->len > 4) { 574 574 data = hecc_read_mbx(priv, mbxno, HECC_CANMDH); 575 575 *(__be32 *)(cf->data + 4) = cpu_to_be32(data); 576 576 }
+5
drivers/net/can/usb/Kconfig
··· 52 52 - Kvaser Leaf Light "China" 53 53 - Kvaser BlackBird SemiPro 54 54 - Kvaser USBcan R 55 + - Kvaser USBcan R v2 55 56 - Kvaser Leaf Light v2 57 + - Kvaser Leaf Light R v2 56 58 - Kvaser Mini PCI Express HS 57 59 - Kvaser Mini PCI Express 2xHS 58 60 - Kvaser USBcan Light 2xHS ··· 74 72 - Kvaser USBcan Light 4xHS 75 73 - Kvaser USBcan Pro 2xHS v2 76 74 - Kvaser USBcan Pro 5xHS 75 + - Kvaser U100 76 + - Kvaser U100P 77 + - Kvaser U100S 77 78 - ATI Memorator Pro 2xHS v2 78 79 - ATI USBcan Pro 2xHS v2 79 80
+8 -8
drivers/net/can/usb/ems_usb.c
··· 306 306 return; 307 307 308 308 cf->can_id = le32_to_cpu(msg->msg.can_msg.id); 309 - cf->can_dlc = get_can_dlc(msg->msg.can_msg.length & 0xF); 309 + cf->len = can_cc_dlc2len(msg->msg.can_msg.length & 0xF); 310 310 311 311 if (msg->type == CPC_MSG_TYPE_EXT_CAN_FRAME || 312 312 msg->type == CPC_MSG_TYPE_EXT_RTR_FRAME) ··· 316 316 msg->type == CPC_MSG_TYPE_EXT_RTR_FRAME) { 317 317 cf->can_id |= CAN_RTR_FLAG; 318 318 } else { 319 - for (i = 0; i < cf->can_dlc; i++) 319 + for (i = 0; i < cf->len; i++) 320 320 cf->data[i] = msg->msg.can_msg.msg[i]; 321 321 } 322 322 323 323 stats->rx_packets++; 324 - stats->rx_bytes += cf->can_dlc; 324 + stats->rx_bytes += cf->len; 325 325 netif_rx(skb); 326 326 } 327 327 ··· 396 396 } 397 397 398 398 stats->rx_packets++; 399 - stats->rx_bytes += cf->can_dlc; 399 + stats->rx_bytes += cf->len; 400 400 netif_rx(skb); 401 401 } 402 402 ··· 755 755 msg = (struct ems_cpc_msg *)&buf[CPC_HEADER_SIZE]; 756 756 757 757 msg->msg.can_msg.id = cpu_to_le32(cf->can_id & CAN_ERR_MASK); 758 - msg->msg.can_msg.length = cf->can_dlc; 758 + msg->msg.can_msg.length = cf->len; 759 759 760 760 if (cf->can_id & CAN_RTR_FLAG) { 761 761 msg->type = cf->can_id & CAN_EFF_FLAG ? ··· 766 766 msg->type = cf->can_id & CAN_EFF_FLAG ? 767 767 CPC_CMD_TYPE_EXT_CAN_FRAME : CPC_CMD_TYPE_CAN_FRAME; 768 768 769 - for (i = 0; i < cf->can_dlc; i++) 769 + for (i = 0; i < cf->len; i++) 770 770 msg->msg.can_msg.msg[i] = cf->data[i]; 771 771 772 - msg->length = CPC_CAN_MSG_MIN_SIZE + cf->can_dlc; 772 + msg->length = CPC_CAN_MSG_MIN_SIZE + cf->len; 773 773 } 774 774 775 775 for (i = 0; i < MAX_TX_URBS; i++) { ··· 794 794 795 795 context->dev = dev; 796 796 context->echo_index = i; 797 - context->dlc = cf->can_dlc; 797 + context->dlc = cf->len; 798 798 799 799 usb_fill_bulk_urb(urb, dev->udev, usb_sndbulkpipe(dev->udev, 2), buf, 800 800 size, ems_usb_write_bulk_callback, context);
+13 -11
drivers/net/can/usb/esd_usb2.c
··· 183 183 struct esd_tx_urb_context { 184 184 struct esd_usb2_net_priv *priv; 185 185 u32 echo_index; 186 - int dlc; 186 + int len; /* CAN payload length */ 187 187 }; 188 188 189 189 struct esd_usb2 { ··· 292 292 priv->bec.rxerr = rxerr; 293 293 294 294 stats->rx_packets++; 295 - stats->rx_bytes += cf->can_dlc; 295 + stats->rx_bytes += cf->len; 296 296 netif_rx(skb); 297 297 } 298 298 } ··· 321 321 } 322 322 323 323 cf->can_id = id & ESD_IDMASK; 324 - cf->can_dlc = get_can_dlc(msg->msg.rx.dlc & ~ESD_RTR); 324 + can_frame_set_cc_len(cf, msg->msg.rx.dlc & ~ESD_RTR, 325 + priv->can.ctrlmode); 325 326 326 327 if (id & ESD_EXTID) 327 328 cf->can_id |= CAN_EFF_FLAG; ··· 330 329 if (msg->msg.rx.dlc & ESD_RTR) { 331 330 cf->can_id |= CAN_RTR_FLAG; 332 331 } else { 333 - for (i = 0; i < cf->can_dlc; i++) 332 + for (i = 0; i < cf->len; i++) 334 333 cf->data[i] = msg->msg.rx.data[i]; 335 334 } 336 335 337 336 stats->rx_packets++; 338 - stats->rx_bytes += cf->can_dlc; 337 + stats->rx_bytes += cf->len; 339 338 netif_rx(skb); 340 339 } 341 340 ··· 356 355 357 356 if (!msg->msg.txdone.status) { 358 357 stats->tx_packets++; 359 - stats->tx_bytes += context->dlc; 358 + stats->tx_bytes += context->len; 360 359 can_get_echo_skb(netdev, context->echo_index); 361 360 } else { 362 361 stats->tx_errors++; ··· 738 737 msg->msg.hdr.len = 3; /* minimal length */ 739 738 msg->msg.hdr.cmd = CMD_CAN_TX; 740 739 msg->msg.tx.net = priv->index; 741 - msg->msg.tx.dlc = cf->can_dlc; 740 + msg->msg.tx.dlc = can_get_cc_dlc(cf, priv->can.ctrlmode); 742 741 msg->msg.tx.id = cpu_to_le32(cf->can_id & CAN_ERR_MASK); 743 742 744 743 if (cf->can_id & CAN_RTR_FLAG) ··· 747 746 if (cf->can_id & CAN_EFF_FLAG) 748 747 msg->msg.tx.id |= cpu_to_le32(ESD_EXTID); 749 748 750 - for (i = 0; i < cf->can_dlc; i++) 749 + for (i = 0; i < cf->len; i++) 751 750 msg->msg.tx.data[i] = cf->data[i]; 752 751 753 - msg->msg.hdr.len += (cf->can_dlc + 3) >> 2; 752 + msg->msg.hdr.len += (cf->len + 3) >> 2; 754 753 755 754 for (i = 0; i < MAX_TX_URBS; i++) { 756 755 if (priv->tx_contexts[i].echo_index == MAX_TX_URBS) { ··· 770 769 771 770 context->priv = priv; 772 771 context->echo_index = i; 773 - context->dlc = cf->can_dlc; 772 + context->len = cf->len; 774 773 775 774 /* hnd must not be 0 - MSB is stripped in txdone handling */ 776 775 msg->msg.tx.hnd = 0x80000000 | i; /* returned in TX done message */ ··· 989 988 priv->index = index; 990 989 991 990 priv->can.state = CAN_STATE_STOPPED; 992 - priv->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY; 991 + priv->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY | 992 + CAN_CTRLMODE_CC_LEN8_DLC; 993 993 994 994 if (le16_to_cpu(dev->udev->descriptor.idProduct) == 995 995 USB_CANUSBM_PRODUCT_ID)
+6 -5
drivers/net/can/usb/gs_usb.c
··· 331 331 332 332 cf->can_id = hf->can_id; 333 333 334 - cf->can_dlc = get_can_dlc(hf->can_dlc); 334 + can_frame_set_cc_len(cf, hf->can_dlc, dev->can.ctrlmode); 335 335 memcpy(cf->data, hf->data, 8); 336 336 337 337 /* ERROR frames tell us information about the controller */ ··· 378 378 goto resubmit_urb; 379 379 380 380 cf->can_id |= CAN_ERR_CRTL; 381 - cf->can_dlc = CAN_ERR_DLC; 381 + cf->len = CAN_ERR_DLC; 382 382 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW; 383 383 stats->rx_over_errors++; 384 384 stats->rx_errors++; ··· 504 504 cf = (struct can_frame *)skb->data; 505 505 506 506 hf->can_id = cf->can_id; 507 - hf->can_dlc = cf->can_dlc; 508 - memcpy(hf->data, cf->data, cf->can_dlc); 507 + hf->can_dlc = can_get_cc_dlc(cf, dev->can.ctrlmode); 508 + 509 + memcpy(hf->data, cf->data, cf->len); 509 510 510 511 usb_fill_bulk_urb(urb, dev->udev, 511 512 usb_sndbulkpipe(dev->udev, GSUSB_ENDPOINT_OUT), ··· 859 858 dev->can.bittiming_const = &dev->bt_const; 860 859 dev->can.do_set_bittiming = gs_usb_set_bittiming; 861 860 862 - dev->can.ctrlmode_supported = 0; 861 + dev->can.ctrlmode_supported = CAN_CTRLMODE_CC_LEN8_DLC; 863 862 864 863 if (bt_const->feature & GS_CAN_FEATURE_LISTEN_ONLY) 865 864 dev->can.ctrlmode_supported |= CAN_CTRLMODE_LISTENONLY;
+19 -3
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c
··· 58 58 #define USB_LEAF_LIGHT_HS_V2_OEM_PRODUCT_ID 290 59 59 #define USB_USBCAN_LIGHT_2HS_PRODUCT_ID 291 60 60 #define USB_MINI_PCIE_2HS_PRODUCT_ID 292 61 + #define USB_USBCAN_R_V2_PRODUCT_ID 294 62 + #define USB_LEAF_LIGHT_R_V2_PRODUCT_ID 295 63 + #define USB_LEAF_LIGHT_HS_V2_OEM2_PRODUCT_ID 296 64 + #define USB_LEAF_PRODUCT_ID_END \ 65 + USB_LEAF_LIGHT_HS_V2_OEM2_PRODUCT_ID 61 66 62 67 /* Kvaser USBCan-II devices product ids */ 63 68 #define USB_USBCAN_REVB_PRODUCT_ID 2 ··· 83 78 #define USB_ATI_USBCAN_PRO_2HS_V2_PRODUCT_ID 268 84 79 #define USB_ATI_MEMO_PRO_2HS_V2_PRODUCT_ID 269 85 80 #define USB_HYBRID_PRO_CANLIN_PRODUCT_ID 270 81 + #define USB_U100_PRODUCT_ID 273 82 + #define USB_U100P_PRODUCT_ID 274 83 + #define USB_U100S_PRODUCT_ID 275 84 + #define USB_HYDRA_PRODUCT_ID_END \ 85 + USB_U100S_PRODUCT_ID 86 86 87 87 static inline bool kvaser_is_leaf(const struct usb_device_id *id) 88 88 { 89 89 return (id->idProduct >= USB_LEAF_DEVEL_PRODUCT_ID && 90 90 id->idProduct <= USB_CAN_R_PRODUCT_ID) || 91 91 (id->idProduct >= USB_LEAF_LITE_V2_PRODUCT_ID && 92 - id->idProduct <= USB_MINI_PCIE_2HS_PRODUCT_ID); 92 + id->idProduct <= USB_LEAF_PRODUCT_ID_END); 93 93 } 94 94 95 95 static inline bool kvaser_is_usbcan(const struct usb_device_id *id) ··· 106 96 static inline bool kvaser_is_hydra(const struct usb_device_id *id) 107 97 { 108 98 return id->idProduct >= USB_BLACKBIRD_V2_PRODUCT_ID && 109 - id->idProduct <= USB_HYBRID_PRO_CANLIN_PRODUCT_ID; 99 + id->idProduct <= USB_HYDRA_PRODUCT_ID_END; 110 100 } 111 101 112 102 static const struct usb_device_id kvaser_usb_table[] = { ··· 163 153 { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LIGHT_HS_V2_OEM_PRODUCT_ID) }, 164 154 { USB_DEVICE(KVASER_VENDOR_ID, USB_USBCAN_LIGHT_2HS_PRODUCT_ID) }, 165 155 { USB_DEVICE(KVASER_VENDOR_ID, USB_MINI_PCIE_2HS_PRODUCT_ID) }, 156 + { USB_DEVICE(KVASER_VENDOR_ID, USB_USBCAN_R_V2_PRODUCT_ID) }, 157 + { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LIGHT_R_V2_PRODUCT_ID) }, 158 + { USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_LIGHT_HS_V2_OEM2_PRODUCT_ID) }, 166 159 167 160 /* USBCANII USB product IDs */ 168 161 { USB_DEVICE(KVASER_VENDOR_ID, USB_USBCAN2_PRODUCT_ID), ··· 190 177 { USB_DEVICE(KVASER_VENDOR_ID, USB_ATI_USBCAN_PRO_2HS_V2_PRODUCT_ID) }, 191 178 { USB_DEVICE(KVASER_VENDOR_ID, USB_ATI_MEMO_PRO_2HS_V2_PRODUCT_ID) }, 192 179 { USB_DEVICE(KVASER_VENDOR_ID, USB_HYBRID_PRO_CANLIN_PRODUCT_ID) }, 180 + { USB_DEVICE(KVASER_VENDOR_ID, USB_U100_PRODUCT_ID) }, 181 + { USB_DEVICE(KVASER_VENDOR_ID, USB_U100P_PRODUCT_ID) }, 182 + { USB_DEVICE(KVASER_VENDOR_ID, USB_U100S_PRODUCT_ID) }, 193 183 { } 194 184 }; 195 185 MODULE_DEVICE_TABLE(usb, kvaser_usb_table); ··· 274 258 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW; 275 259 276 260 stats->rx_packets++; 277 - stats->rx_bytes += cf->can_dlc; 261 + stats->rx_bytes += cf->len; 278 262 netif_rx(skb); 279 263 280 264 return 0;
+49 -12
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
··· 34 34 /* Forward declarations */ 35 35 static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_kcan; 36 36 static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_flexc; 37 + static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_rt; 37 38 38 39 #define KVASER_USB_HYDRA_BULK_EP_IN_ADDR 0x82 39 40 #define KVASER_USB_HYDRA_BULK_EP_OUT_ADDR 0x02 ··· 136 135 #define KVASER_USB_HYDRA_SW_FLAG_CANFD BIT(10) 137 136 #define KVASER_USB_HYDRA_SW_FLAG_NONISO BIT(11) 138 137 #define KVASER_USB_HYDRA_SW_FLAG_EXT_CAP BIT(12) 138 + #define KVASER_USB_HYDRA_SW_FLAG_CAN_FREQ_80M BIT(13) 139 139 struct kvaser_cmd_sw_detail_res { 140 140 __le32 sw_flags; 141 141 __le32 sw_version; ··· 382 380 .sjw_max = 4, 383 381 .brp_min = 1, 384 382 .brp_max = 256, 383 + .brp_inc = 1, 384 + }; 385 + 386 + static const struct can_bittiming_const kvaser_usb_hydra_rt_bittiming_c = { 387 + .name = "kvaser_usb_rt", 388 + .tseg1_min = 2, 389 + .tseg1_max = 96, 390 + .tseg2_min = 2, 391 + .tseg2_max = 32, 392 + .sjw_max = 32, 393 + .brp_min = 1, 394 + .brp_max = 1024, 395 + .brp_inc = 1, 396 + }; 397 + 398 + static const struct can_bittiming_const kvaser_usb_hydra_rtd_bittiming_c = { 399 + .name = "kvaser_usb_rt", 400 + .tseg1_min = 2, 401 + .tseg1_max = 39, 402 + .tseg2_min = 2, 403 + .tseg2_max = 8, 404 + .sjw_max = 8, 405 + .brp_min = 1, 406 + .brp_max = 1024, 385 407 .brp_inc = 1, 386 408 }; 387 409 ··· 921 895 922 896 stats = &netdev->stats; 923 897 stats->rx_packets++; 924 - stats->rx_bytes += cf->can_dlc; 898 + stats->rx_bytes += cf->len; 925 899 netif_rx(skb); 926 900 } 927 901 ··· 1075 1049 cf->data[7] = bec.rxerr; 1076 1050 1077 1051 stats->rx_packets++; 1078 - stats->rx_bytes += cf->can_dlc; 1052 + stats->rx_bytes += cf->len; 1079 1053 netif_rx(skb); 1080 1054 1081 1055 priv->bec.txerr = bec.txerr; ··· 1110 1084 1111 1085 stats->tx_errors++; 1112 1086 stats->rx_packets++; 1113 - stats->rx_bytes += cf->can_dlc; 1087 + stats->rx_bytes += cf->len; 1114 1088 netif_rx(skb); 1115 1089 } 1116 1090 ··· 1146 1120 struct net_device_stats *stats = &priv->netdev->stats; 1147 1121 1148 1122 stats->tx_packets++; 1149 - stats->tx_bytes += can_dlc2len(context->dlc); 1123 + stats->tx_bytes += can_fd_dlc2len(context->dlc); 1150 1124 } 1151 1125 1152 1126 spin_lock_irqsave(&priv->tx_contexts_lock, irq_flags); ··· 1206 1180 if (flags & KVASER_USB_HYDRA_CF_FLAG_OVERRUN) 1207 1181 kvaser_usb_can_rx_over_error(priv->netdev); 1208 1182 1209 - cf->can_dlc = get_can_dlc(cmd->rx_can.dlc); 1183 + cf->len = can_cc_dlc2len(cmd->rx_can.dlc); 1210 1184 1211 1185 if (flags & KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME) 1212 1186 cf->can_id |= CAN_RTR_FLAG; 1213 1187 else 1214 - memcpy(cf->data, cmd->rx_can.data, cf->can_dlc); 1188 + memcpy(cf->data, cmd->rx_can.data, cf->len); 1215 1189 1216 1190 stats->rx_packets++; 1217 - stats->rx_bytes += cf->can_dlc; 1191 + stats->rx_bytes += cf->len; 1218 1192 netif_rx(skb); 1219 1193 } 1220 1194 ··· 1277 1251 kvaser_usb_can_rx_over_error(priv->netdev); 1278 1252 1279 1253 if (flags & KVASER_USB_HYDRA_CF_FLAG_FDF) { 1280 - cf->len = can_dlc2len(get_canfd_dlc(dlc)); 1254 + cf->len = can_fd_dlc2len(dlc); 1281 1255 if (flags & KVASER_USB_HYDRA_CF_FLAG_BRS) 1282 1256 cf->flags |= CANFD_BRS; 1283 1257 if (flags & KVASER_USB_HYDRA_CF_FLAG_ESI) 1284 1258 cf->flags |= CANFD_ESI; 1285 1259 } else { 1286 - cf->len = get_can_dlc(dlc); 1260 + cf->len = can_cc_dlc2len(dlc); 1287 1261 } 1288 1262 1289 1263 if (flags & KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME) ··· 1377 1351 struct kvaser_usb *dev = priv->dev; 1378 1352 struct kvaser_cmd_ext *cmd; 1379 1353 struct canfd_frame *cf = (struct canfd_frame *)skb->data; 1380 - u8 dlc = can_len2dlc(cf->len); 1354 + u8 dlc = can_fd_len2dlc(cf->len); 1381 1355 u8 nbr_of_bytes = cf->len; 1382 1356 u32 flags; 1383 1357 u32 id; ··· 1460 1434 u32 flags; 1461 1435 u32 id; 1462 1436 1463 - *frame_len = cf->can_dlc; 1437 + *frame_len = cf->len; 1464 1438 1465 1439 cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_ATOMIC); 1466 1440 if (!cmd) ··· 1481 1455 id = cf->can_id & CAN_SFF_MASK; 1482 1456 } 1483 1457 1484 - cmd->tx_can.dlc = cf->can_dlc; 1458 + cmd->tx_can.dlc = cf->len; 1485 1459 1486 1460 flags = (cf->can_id & CAN_EFF_FLAG ? 1487 1461 KVASER_USB_HYDRA_CF_FLAG_EXTENDED_ID : 0); ··· 1753 1727 1754 1728 if (flags & KVASER_USB_HYDRA_SW_FLAG_FREQ_80M) 1755 1729 dev->cfg = &kvaser_usb_hydra_dev_cfg_kcan; 1730 + else if (flags & KVASER_USB_HYDRA_SW_FLAG_CAN_FREQ_80M) 1731 + dev->cfg = &kvaser_usb_hydra_dev_cfg_rt; 1756 1732 else 1757 1733 dev->cfg = &kvaser_usb_hydra_dev_cfg_flexc; 1758 1734 ··· 2053 2025 }, 2054 2026 .timestamp_freq = 1, 2055 2027 .bittiming_const = &kvaser_usb_hydra_flexc_bittiming_c, 2028 + }; 2029 + 2030 + static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_rt = { 2031 + .clock = { 2032 + .freq = 80000000, 2033 + }, 2034 + .timestamp_freq = 24, 2035 + .bittiming_const = &kvaser_usb_hydra_rt_bittiming_c, 2036 + .data_bittiming_const = &kvaser_usb_hydra_rtd_bittiming_c, 2056 2037 };
+11 -11
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
··· 350 350 u8 *cmd_tx_can_flags = NULL; /* GCC */ 351 351 struct can_frame *cf = (struct can_frame *)skb->data; 352 352 353 - *frame_len = cf->can_dlc; 353 + *frame_len = cf->len; 354 354 355 355 cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC); 356 356 if (cmd) { ··· 383 383 cmd->u.tx_can.data[1] = cf->can_id & 0x3f; 384 384 } 385 385 386 - cmd->u.tx_can.data[5] = cf->can_dlc; 387 - memcpy(&cmd->u.tx_can.data[6], cf->data, cf->can_dlc); 386 + cmd->u.tx_can.data[5] = cf->len; 387 + memcpy(&cmd->u.tx_can.data[6], cf->data, cf->len); 388 388 389 389 if (cf->can_id & CAN_RTR_FLAG) 390 390 *cmd_tx_can_flags |= MSG_FLAG_REMOTE_FRAME; ··· 576 576 cf->can_id |= CAN_ERR_RESTARTED; 577 577 578 578 stats->rx_packets++; 579 - stats->rx_bytes += cf->can_dlc; 579 + stats->rx_bytes += cf->len; 580 580 netif_rx(skb); 581 581 } else { 582 582 netdev_err(priv->netdev, ··· 694 694 { 695 695 struct can_frame *cf; 696 696 struct can_frame tmp_cf = { .can_id = CAN_ERR_FLAG, 697 - .can_dlc = CAN_ERR_DLC }; 697 + .len = CAN_ERR_DLC }; 698 698 struct sk_buff *skb; 699 699 struct net_device_stats *stats; 700 700 struct kvaser_usb_net_priv *priv; ··· 778 778 cf->data[7] = es->rxerr; 779 779 780 780 stats->rx_packets++; 781 - stats->rx_bytes += cf->can_dlc; 781 + stats->rx_bytes += cf->len; 782 782 netif_rx(skb); 783 783 } 784 784 ··· 978 978 else 979 979 cf->can_id &= CAN_SFF_MASK; 980 980 981 - cf->can_dlc = get_can_dlc(cmd->u.leaf.log_message.dlc); 981 + cf->len = can_cc_dlc2len(cmd->u.leaf.log_message.dlc); 982 982 983 983 if (cmd->u.leaf.log_message.flags & MSG_FLAG_REMOTE_FRAME) 984 984 cf->can_id |= CAN_RTR_FLAG; 985 985 else 986 986 memcpy(cf->data, &cmd->u.leaf.log_message.data, 987 - cf->can_dlc); 987 + cf->len); 988 988 } else { 989 989 cf->can_id = ((rx_data[0] & 0x1f) << 6) | (rx_data[1] & 0x3f); 990 990 ··· 996 996 cf->can_id |= CAN_EFF_FLAG; 997 997 } 998 998 999 - cf->can_dlc = get_can_dlc(rx_data[5]); 999 + cf->len = can_cc_dlc2len(rx_data[5]); 1000 1000 1001 1001 if (cmd->u.rx_can_header.flag & MSG_FLAG_REMOTE_FRAME) 1002 1002 cf->can_id |= CAN_RTR_FLAG; 1003 1003 else 1004 - memcpy(cf->data, &rx_data[6], cf->can_dlc); 1004 + memcpy(cf->data, &rx_data[6], cf->len); 1005 1005 } 1006 1006 1007 1007 stats->rx_packets++; 1008 - stats->rx_bytes += cf->can_dlc; 1008 + stats->rx_bytes += cf->len; 1009 1009 netif_rx(skb); 1010 1010 } 1011 1011
+5 -5
drivers/net/can/usb/mcba_usb.c
··· 184 184 185 185 if (cf) { 186 186 ctx->can = true; 187 - ctx->dlc = cf->can_dlc; 187 + ctx->dlc = cf->len; 188 188 } else { 189 189 ctx->can = false; 190 190 ctx->dlc = 0; ··· 348 348 usb_msg.eid = 0; 349 349 } 350 350 351 - usb_msg.dlc = cf->can_dlc; 351 + usb_msg.dlc = cf->len; 352 352 353 353 memcpy(usb_msg.data, cf->data, usb_msg.dlc); 354 354 ··· 451 451 if (msg->dlc & MCBA_DLC_RTR_MASK) 452 452 cf->can_id |= CAN_RTR_FLAG; 453 453 454 - cf->can_dlc = get_can_dlc(msg->dlc & MCBA_DLC_MASK); 454 + cf->len = can_cc_dlc2len(msg->dlc & MCBA_DLC_MASK); 455 455 456 - memcpy(cf->data, msg->data, cf->can_dlc); 456 + memcpy(cf->data, msg->data, cf->len); 457 457 458 458 stats->rx_packets++; 459 - stats->rx_bytes += cf->can_dlc; 459 + stats->rx_bytes += cf->len; 460 460 461 461 can_led_event(priv->netdev, CAN_LED_EVENT_RX); 462 462 netif_rx(skb);
+10 -8
drivers/net/can/usb/peak_usb/pcan_usb.c
··· 596 596 } 597 597 598 598 mc->netdev->stats.rx_packets++; 599 - mc->netdev->stats.rx_bytes += cf->can_dlc; 599 + mc->netdev->stats.rx_bytes += cf->len; 600 600 netif_rx(skb); 601 601 602 602 return 0; ··· 734 734 cf->can_id = le16_to_cpu(tmp16) >> 5; 735 735 } 736 736 737 - cf->can_dlc = get_can_dlc(rec_len); 737 + can_frame_set_cc_len(cf, rec_len, mc->pdev->dev.can.ctrlmode); 738 738 739 739 /* Only first packet timestamp is a word */ 740 740 if (pcan_usb_decode_ts(mc, !mc->rec_ts_idx)) ··· 751 751 if ((mc->ptr + rec_len) > mc->end) 752 752 goto decode_failed; 753 753 754 - memcpy(cf->data, mc->ptr, cf->can_dlc); 754 + memcpy(cf->data, mc->ptr, cf->len); 755 755 mc->ptr += rec_len; 756 756 } 757 757 ··· 761 761 762 762 /* update statistics */ 763 763 mc->netdev->stats.rx_packets++; 764 - mc->netdev->stats.rx_bytes += cf->can_dlc; 764 + mc->netdev->stats.rx_bytes += cf->len; 765 765 /* push the skb */ 766 766 netif_rx(skb); 767 767 ··· 838 838 pc = obuf + PCAN_USB_MSG_HEADER_LEN; 839 839 840 840 /* status/len byte */ 841 - *pc = cf->can_dlc; 841 + *pc = can_get_cc_dlc(cf, dev->can.ctrlmode); 842 + 842 843 if (cf->can_id & CAN_RTR_FLAG) 843 844 *pc |= PCAN_USB_STATUSLEN_RTR; 844 845 ··· 859 858 860 859 /* can data */ 861 860 if (!(cf->can_id & CAN_RTR_FLAG)) { 862 - memcpy(pc, cf->data, cf->can_dlc); 863 - pc += cf->can_dlc; 861 + memcpy(pc, cf->data, cf->len); 862 + pc += cf->len; 864 863 } 865 864 866 865 obuf[(*size)-1] = (u8)(stats->tx_packets & 0xff); ··· 993 992 .device_id = PCAN_USB_PRODUCT_ID, 994 993 .ctrl_count = 1, 995 994 .ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY | 996 - CAN_CTRLMODE_BERR_REPORTING, 995 + CAN_CTRLMODE_BERR_REPORTING | 996 + CAN_CTRLMODE_CC_LEN8_DLC, 997 997 .clock = { 998 998 .freq = PCAN_USB_CRYSTAL_HZ / 2 , 999 999 },
+18 -11
drivers/net/can/usb/peak_usb/pcan_usb_fd.c
··· 492 492 if (rx_msg_flags & PUCAN_MSG_ERROR_STATE_IND) 493 493 cfd->flags |= CANFD_ESI; 494 494 495 - cfd->len = can_dlc2len(get_canfd_dlc(pucan_msg_get_dlc(rm))); 495 + cfd->len = can_fd_dlc2len(pucan_msg_get_dlc(rm)); 496 496 } else { 497 497 /* CAN 2.0 frame case */ 498 498 skb = alloc_can_skb(netdev, (struct can_frame **)&cfd); 499 499 if (!skb) 500 500 return -ENOMEM; 501 501 502 - cfd->len = get_can_dlc(pucan_msg_get_dlc(rm)); 502 + can_frame_set_cc_len((struct can_frame *)cfd, 503 + pucan_msg_get_dlc(rm), 504 + dev->can.ctrlmode); 503 505 } 504 506 505 507 cfd->can_id = le32_to_cpu(rm->can_id); ··· 583 581 peak_usb_netif_rx(skb, &usb_if->time_ref, le32_to_cpu(sm->ts_low)); 584 582 585 583 netdev->stats.rx_packets++; 586 - netdev->stats.rx_bytes += cf->can_dlc; 584 + netdev->stats.rx_bytes += cf->len; 587 585 588 586 return 0; 589 587 } ··· 739 737 struct pucan_tx_msg *tx_msg = (struct pucan_tx_msg *)obuf; 740 738 struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 741 739 u16 tx_msg_size, tx_msg_flags; 742 - u8 can_dlc; 740 + u8 dlc; 743 741 744 742 if (cfd->len > CANFD_MAX_DLEN) 745 743 return -EINVAL; ··· 758 756 759 757 if (can_is_canfd_skb(skb)) { 760 758 /* considering a CANFD frame */ 761 - can_dlc = can_len2dlc(cfd->len); 759 + dlc = can_fd_len2dlc(cfd->len); 762 760 763 761 tx_msg_flags |= PUCAN_MSG_EXT_DATA_LEN; 764 762 ··· 769 767 tx_msg_flags |= PUCAN_MSG_ERROR_STATE_IND; 770 768 } else { 771 769 /* CAND 2.0 frames */ 772 - can_dlc = cfd->len; 770 + dlc = can_get_cc_dlc((struct can_frame *)cfd, 771 + dev->can.ctrlmode); 773 772 774 773 if (cfd->can_id & CAN_RTR_FLAG) 775 774 tx_msg_flags |= PUCAN_MSG_RTR; 776 775 } 777 776 778 777 tx_msg->flags = cpu_to_le16(tx_msg_flags); 779 - tx_msg->channel_dlc = PUCAN_MSG_CHANNEL_DLC(dev->ctrl_idx, can_dlc); 778 + tx_msg->channel_dlc = PUCAN_MSG_CHANNEL_DLC(dev->ctrl_idx, dlc); 780 779 memcpy(tx_msg->d, cfd->data, cfd->len); 781 780 782 781 /* add null size message to tag the end (messages are 32-bits aligned) ··· 1039 1036 .device_id = PCAN_USBFD_PRODUCT_ID, 1040 1037 .ctrl_count = PCAN_USBFD_CHANNEL_COUNT, 1041 1038 .ctrlmode_supported = CAN_CTRLMODE_FD | 1042 - CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY, 1039 + CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY | 1040 + CAN_CTRLMODE_CC_LEN8_DLC, 1043 1041 .clock = { 1044 1042 .freq = PCAN_UFD_CRYSTAL_HZ, 1045 1043 }, ··· 1112 1108 .device_id = PCAN_USBCHIP_PRODUCT_ID, 1113 1109 .ctrl_count = PCAN_USBFD_CHANNEL_COUNT, 1114 1110 .ctrlmode_supported = CAN_CTRLMODE_FD | 1115 - CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY, 1111 + CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY | 1112 + CAN_CTRLMODE_CC_LEN8_DLC, 1116 1113 .clock = { 1117 1114 .freq = PCAN_UFD_CRYSTAL_HZ, 1118 1115 }, ··· 1185 1180 .device_id = PCAN_USBPROFD_PRODUCT_ID, 1186 1181 .ctrl_count = PCAN_USBPROFD_CHANNEL_COUNT, 1187 1182 .ctrlmode_supported = CAN_CTRLMODE_FD | 1188 - CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY, 1183 + CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY | 1184 + CAN_CTRLMODE_CC_LEN8_DLC, 1189 1185 .clock = { 1190 1186 .freq = PCAN_UFD_CRYSTAL_HZ, 1191 1187 }, ··· 1258 1252 .device_id = PCAN_USBX6_PRODUCT_ID, 1259 1253 .ctrl_count = PCAN_USBPROFD_CHANNEL_COUNT, 1260 1254 .ctrlmode_supported = CAN_CTRLMODE_FD | 1261 - CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY, 1255 + CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY | 1256 + CAN_CTRLMODE_CC_LEN8_DLC, 1262 1257 .clock = { 1263 1258 .freq = PCAN_UFD_CRYSTAL_HZ, 1264 1259 },
+7 -7
drivers/net/can/usb/peak_usb/pcan_usb_pro.c
··· 532 532 return -ENOMEM; 533 533 534 534 can_frame->can_id = le32_to_cpu(rx->id); 535 - can_frame->can_dlc = rx->len & 0x0f; 535 + can_frame->len = rx->len & 0x0f; 536 536 537 537 if (rx->flags & PCAN_USBPRO_EXT) 538 538 can_frame->can_id |= CAN_EFF_FLAG; ··· 540 540 if (rx->flags & PCAN_USBPRO_RTR) 541 541 can_frame->can_id |= CAN_RTR_FLAG; 542 542 else 543 - memcpy(can_frame->data, rx->data, can_frame->can_dlc); 543 + memcpy(can_frame->data, rx->data, can_frame->len); 544 544 545 545 hwts = skb_hwtstamps(skb); 546 546 peak_usb_get_ts_time(&usb_if->time_ref, le32_to_cpu(rx->ts32), 547 547 &hwts->hwtstamp); 548 548 549 549 netdev->stats.rx_packets++; 550 - netdev->stats.rx_bytes += can_frame->can_dlc; 550 + netdev->stats.rx_bytes += can_frame->len; 551 551 netif_rx(skb); 552 552 553 553 return 0; ··· 662 662 hwts = skb_hwtstamps(skb); 663 663 peak_usb_get_ts_time(&usb_if->time_ref, le32_to_cpu(er->ts32), &hwts->hwtstamp); 664 664 netdev->stats.rx_packets++; 665 - netdev->stats.rx_bytes += can_frame->can_dlc; 665 + netdev->stats.rx_bytes += can_frame->len; 666 666 netif_rx(skb); 667 667 668 668 return 0; ··· 767 767 768 768 pcan_msg_init_empty(&usb_msg, obuf, *size); 769 769 770 - if ((cf->can_id & CAN_RTR_FLAG) || (cf->can_dlc == 0)) 770 + if ((cf->can_id & CAN_RTR_FLAG) || (cf->len == 0)) 771 771 data_type = PCAN_USBPRO_TXMSG0; 772 - else if (cf->can_dlc <= 4) 772 + else if (cf->len <= 4) 773 773 data_type = PCAN_USBPRO_TXMSG4; 774 774 else 775 775 data_type = PCAN_USBPRO_TXMSG8; 776 776 777 - len = (dev->ctrl_idx << 4) | (cf->can_dlc & 0x0f); 777 + len = (dev->ctrl_idx << 4) | (cf->len & 0x0f); 778 778 779 779 flags = 0; 780 780 if (cf->can_id & CAN_EFF_FLAG)
+10 -10
drivers/net/can/usb/ucan.c
··· 303 303 struct ucan_urb_context *context_array; 304 304 }; 305 305 306 - static u8 ucan_get_can_dlc(struct ucan_can_msg *msg, u16 len) 306 + static u8 ucan_can_cc_dlc2len(struct ucan_can_msg *msg, u16 len) 307 307 { 308 308 if (le32_to_cpu(msg->id) & CAN_RTR_FLAG) 309 - return get_can_dlc(msg->dlc); 309 + return can_cc_dlc2len(msg->dlc); 310 310 else 311 - return get_can_dlc(len - (UCAN_IN_HDR_SIZE + sizeof(msg->id))); 311 + return can_cc_dlc2len(len - (UCAN_IN_HDR_SIZE + sizeof(msg->id))); 312 312 } 313 313 314 314 static void ucan_release_context_array(struct ucan_priv *up) ··· 614 614 cf->can_id = canid; 615 615 616 616 /* compute DLC taking RTR_FLAG into account */ 617 - cf->can_dlc = ucan_get_can_dlc(&m->msg.can_msg, len); 617 + cf->len = ucan_can_cc_dlc2len(&m->msg.can_msg, len); 618 618 619 619 /* copy the payload of non RTR frames */ 620 620 if (!(cf->can_id & CAN_RTR_FLAG) || (cf->can_id & CAN_ERR_FLAG)) 621 - memcpy(cf->data, m->msg.can_msg.data, cf->can_dlc); 621 + memcpy(cf->data, m->msg.can_msg.data, cf->len); 622 622 623 623 /* don't count error frames as real packets */ 624 624 stats->rx_packets++; 625 - stats->rx_bytes += cf->can_dlc; 625 + stats->rx_bytes += cf->len; 626 626 627 627 /* pass it to Linux */ 628 628 netif_rx(skb); ··· 1078 1078 mlen = UCAN_OUT_HDR_SIZE + 1079 1079 offsetof(struct ucan_can_msg, dlc) + 1080 1080 sizeof(m->msg.can_msg.dlc); 1081 - m->msg.can_msg.dlc = cf->can_dlc; 1081 + m->msg.can_msg.dlc = cf->len; 1082 1082 } else { 1083 1083 mlen = UCAN_OUT_HDR_SIZE + 1084 - sizeof(m->msg.can_msg.id) + cf->can_dlc; 1085 - memcpy(m->msg.can_msg.data, cf->data, cf->can_dlc); 1084 + sizeof(m->msg.can_msg.id) + cf->len; 1085 + memcpy(m->msg.can_msg.data, cf->data, cf->len); 1086 1086 } 1087 1087 m->len = cpu_to_le16(mlen); 1088 1088 1089 - context->dlc = cf->can_dlc; 1089 + context->dlc = cf->len; 1090 1090 1091 1091 m->subtype = echo_index; 1092 1092
+9 -8
drivers/net/can/usb/usb_8dev.c
··· 449 449 priv->bec.rxerr = rxerr; 450 450 451 451 stats->rx_packets++; 452 - stats->rx_bytes += cf->can_dlc; 452 + stats->rx_bytes += cf->len; 453 453 netif_rx(skb); 454 454 } 455 455 ··· 470 470 return; 471 471 472 472 cf->can_id = be32_to_cpu(msg->id); 473 - cf->can_dlc = get_can_dlc(msg->dlc & 0xF); 473 + can_frame_set_cc_len(cf, msg->dlc & 0xF, priv->can.ctrlmode); 474 474 475 475 if (msg->flags & USB_8DEV_EXTID) 476 476 cf->can_id |= CAN_EFF_FLAG; ··· 478 478 if (msg->flags & USB_8DEV_RTR) 479 479 cf->can_id |= CAN_RTR_FLAG; 480 480 else 481 - memcpy(cf->data, msg->data, cf->can_dlc); 481 + memcpy(cf->data, msg->data, cf->len); 482 482 483 483 stats->rx_packets++; 484 - stats->rx_bytes += cf->can_dlc; 484 + stats->rx_bytes += cf->len; 485 485 netif_rx(skb); 486 486 487 487 can_led_event(priv->netdev, CAN_LED_EVENT_RX); ··· 637 637 msg->flags |= USB_8DEV_EXTID; 638 638 639 639 msg->id = cpu_to_be32(cf->can_id & CAN_ERR_MASK); 640 - msg->dlc = cf->can_dlc; 641 - memcpy(msg->data, cf->data, cf->can_dlc); 640 + msg->dlc = can_get_cc_dlc(cf, priv->can.ctrlmode); 641 + memcpy(msg->data, cf->data, cf->len); 642 642 msg->end = USB_8DEV_DATA_END; 643 643 644 644 for (i = 0; i < MAX_TX_URBS; i++) { ··· 656 656 657 657 context->priv = priv; 658 658 context->echo_index = i; 659 - context->dlc = cf->can_dlc; 659 + context->dlc = cf->len; 660 660 661 661 usb_fill_bulk_urb(urb, priv->udev, 662 662 usb_sndbulkpipe(priv->udev, USB_8DEV_ENDP_DATA_TX), ··· 928 928 priv->can.do_get_berr_counter = usb_8dev_get_berr_counter; 929 929 priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK | 930 930 CAN_CTRLMODE_LISTENONLY | 931 - CAN_CTRLMODE_ONE_SHOT; 931 + CAN_CTRLMODE_ONE_SHOT | 932 + CAN_CTRLMODE_CC_LEN8_DLC; 932 933 933 934 netdev->netdev_ops = &usb_8dev_netdev_ops; 934 935
+8 -8
drivers/net/can/xilinx_can.c
··· 583 583 id |= XCAN_IDR_SRR_MASK; 584 584 } 585 585 586 - dlc = can_len2dlc(cf->len) << XCAN_DLCR_DLC_SHIFT; 586 + dlc = can_fd_len2dlc(cf->len) << XCAN_DLCR_DLC_SHIFT; 587 587 if (can_is_canfd_skb(skb)) { 588 588 if (cf->flags & CANFD_BRS) 589 589 dlc |= XCAN_DLCR_BRS_MASK; ··· 759 759 XCAN_DLCR_DLC_SHIFT; 760 760 761 761 /* Change Xilinx CAN data length format to socketCAN data format */ 762 - cf->can_dlc = get_can_dlc(dlc); 762 + cf->len = can_cc_dlc2len(dlc); 763 763 764 764 /* Change Xilinx CAN ID format to socketCAN ID format */ 765 765 if (id_xcan & XCAN_IDR_IDE_MASK) { ··· 784 784 785 785 if (!(cf->can_id & CAN_RTR_FLAG)) { 786 786 /* Change Xilinx CAN data format to socketCAN data format */ 787 - if (cf->can_dlc > 0) 787 + if (cf->len > 0) 788 788 *(__be32 *)(cf->data) = cpu_to_be32(data[0]); 789 - if (cf->can_dlc > 4) 789 + if (cf->len > 4) 790 790 *(__be32 *)(cf->data + 4) = cpu_to_be32(data[1]); 791 791 } 792 792 793 - stats->rx_bytes += cf->can_dlc; 793 + stats->rx_bytes += cf->len; 794 794 stats->rx_packets++; 795 795 netif_receive_skb(skb); 796 796 ··· 832 832 * format 833 833 */ 834 834 if (dlc & XCAN_DLCR_EDL_MASK) 835 - cf->len = can_dlc2len((dlc & XCAN_DLCR_DLC_MASK) >> 835 + cf->len = can_fd_dlc2len((dlc & XCAN_DLCR_DLC_MASK) >> 836 836 XCAN_DLCR_DLC_SHIFT); 837 837 else 838 - cf->len = get_can_dlc((dlc & XCAN_DLCR_DLC_MASK) >> 838 + cf->len = can_cc_dlc2len((dlc & XCAN_DLCR_DLC_MASK) >> 839 839 XCAN_DLCR_DLC_SHIFT); 840 840 841 841 /* Change Xilinx CAN ID format to socketCAN ID format */ ··· 970 970 struct net_device_stats *stats = &ndev->stats; 971 971 972 972 stats->rx_packets++; 973 - stats->rx_bytes += cf->can_dlc; 973 + stats->rx_bytes += cf->len; 974 974 netif_rx(skb); 975 975 } 976 976 }
+1
include/dt-bindings/firmware/imx/rsrc.h
··· 111 111 #define IMX_SC_R_CAN_0 105 112 112 #define IMX_SC_R_CAN_1 106 113 113 #define IMX_SC_R_CAN_2 107 114 + #define IMX_SC_R_CAN(x) (IMX_SC_R_CAN_0 + (x)) 114 115 #define IMX_SC_R_DMA_1_CH0 108 115 116 #define IMX_SC_R_DMA_1_CH1 109 116 117 #define IMX_SC_R_DMA_1_CH2 110
+31 -7
include/linux/can/dev.h
··· 98 98 } 99 99 100 100 /* 101 - * get_can_dlc(value) - helper macro to cast a given data length code (dlc) 102 - * to u8 and ensure the dlc value to be max. 8 bytes. 101 + * can_cc_dlc2len(value) - convert a given data length code (dlc) of a 102 + * Classical CAN frame into a valid data length of max. 8 bytes. 103 103 * 104 104 * To be used in the CAN netdriver receive path to ensure conformance with 105 105 * ISO 11898-1 Chapter 8.4.2.3 (DLC field) 106 106 */ 107 - #define get_can_dlc(i) (min_t(u8, (i), CAN_MAX_DLC)) 108 - #define get_canfd_dlc(i) (min_t(u8, (i), CANFD_MAX_DLC)) 107 + #define can_cc_dlc2len(dlc) (min_t(u8, (dlc), CAN_MAX_DLEN)) 109 108 110 109 /* Check for outgoing skbs that have not been created by the CAN subsystem */ 111 110 static inline bool can_skb_headroom_valid(struct net_device *dev, ··· 170 171 return skb->len == CANFD_MTU; 171 172 } 172 173 174 + /* helper to get the data length code (DLC) for Classical CAN raw DLC access */ 175 + static inline u8 can_get_cc_dlc(const struct can_frame *cf, const u32 ctrlmode) 176 + { 177 + /* return len8_dlc as dlc value only if all conditions apply */ 178 + if ((ctrlmode & CAN_CTRLMODE_CC_LEN8_DLC) && 179 + (cf->len == CAN_MAX_DLEN) && 180 + (cf->len8_dlc > CAN_MAX_DLEN && cf->len8_dlc <= CAN_MAX_RAW_DLC)) 181 + return cf->len8_dlc; 182 + 183 + /* return the payload length as dlc value */ 184 + return cf->len; 185 + } 186 + 187 + /* helper to set len and len8_dlc value for Classical CAN raw DLC access */ 188 + static inline void can_frame_set_cc_len(struct can_frame *cf, const u8 dlc, 189 + const u32 ctrlmode) 190 + { 191 + /* the caller already ensured that dlc is a value from 0 .. 15 */ 192 + if (ctrlmode & CAN_CTRLMODE_CC_LEN8_DLC && dlc > CAN_MAX_DLEN) 193 + cf->len8_dlc = dlc; 194 + 195 + /* limit the payload length 'len' to CAN_MAX_DLEN */ 196 + cf->len = can_cc_dlc2len(dlc); 197 + } 198 + 173 199 /* helper to define static CAN controller features at device creation time */ 174 200 static inline void can_set_static_ctrlmode(struct net_device *dev, 175 201 u32 static_mode) ··· 210 186 dev->mtu = CANFD_MTU; 211 187 } 212 188 213 - /* get data length from can_dlc with sanitized can_dlc */ 214 - u8 can_dlc2len(u8 can_dlc); 189 + /* get data length from raw data length code (DLC) */ 190 + u8 can_fd_dlc2len(u8 dlc); 215 191 216 192 /* map the sanitized data length to an appropriate data length code */ 217 - u8 can_len2dlc(u8 len); 193 + u8 can_fd_len2dlc(u8 len); 218 194 219 195 struct net_device *alloc_candev_mqs(int sizeof_priv, unsigned int echo_skb_max, 220 196 unsigned int txqs, unsigned int rxqs);
+1 -1
include/linux/can/dev/peak_canfd.h
··· 282 282 } 283 283 284 284 /* return the dlc value from any received message channel_dlc field */ 285 - static inline int pucan_msg_get_dlc(const struct pucan_rx_msg *msg) 285 + static inline u8 pucan_msg_get_dlc(const struct pucan_rx_msg *msg) 286 286 { 287 287 return msg->channel_dlc >> 4; 288 288 }
+24 -14
include/uapi/linux/can.h
··· 84 84 85 85 /* CAN payload length and DLC definitions according to ISO 11898-1 */ 86 86 #define CAN_MAX_DLC 8 87 + #define CAN_MAX_RAW_DLC 15 87 88 #define CAN_MAX_DLEN 8 88 89 89 90 /* CAN FD payload length and DLC definitions according to ISO 11898-7 */ ··· 92 91 #define CANFD_MAX_DLEN 64 93 92 94 93 /** 95 - * struct can_frame - basic CAN frame structure 96 - * @can_id: CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition 97 - * @can_dlc: frame payload length in byte (0 .. 8) aka data length code 98 - * N.B. the DLC field from ISO 11898-1 Chapter 8.4.2.3 has a 1:1 99 - * mapping of the 'data length code' to the real payload length 100 - * @__pad: padding 101 - * @__res0: reserved / padding 102 - * @__res1: reserved / padding 103 - * @data: CAN frame payload (up to 8 byte) 94 + * struct can_frame - Classical CAN frame structure (aka CAN 2.0B) 95 + * @can_id: CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition 96 + * @len: CAN frame payload length in byte (0 .. 8) 97 + * @can_dlc: deprecated name for CAN frame payload length in byte (0 .. 8) 98 + * @__pad: padding 99 + * @__res0: reserved / padding 100 + * @len8_dlc: optional DLC value (9 .. 15) at 8 byte payload length 101 + * len8_dlc contains values from 9 .. 15 when the payload length is 102 + * 8 bytes but the DLC value (see ISO 11898-1) is greater then 8. 103 + * CAN_CTRLMODE_CC_LEN8_DLC flag has to be enabled in CAN driver. 104 + * @data: CAN frame payload (up to 8 byte) 104 105 */ 105 106 struct can_frame { 106 107 canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ 107 - __u8 can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */ 108 - __u8 __pad; /* padding */ 109 - __u8 __res0; /* reserved / padding */ 110 - __u8 __res1; /* reserved / padding */ 111 - __u8 data[CAN_MAX_DLEN] __attribute__((aligned(8))); 108 + union { 109 + /* CAN frame payload length in byte (0 .. CAN_MAX_DLEN) 110 + * was previously named can_dlc so we need to carry that 111 + * name for legacy support 112 + */ 113 + __u8 len; 114 + __u8 can_dlc; /* deprecated */ 115 + }; 116 + __u8 __pad; /* padding */ 117 + __u8 __res0; /* reserved / padding */ 118 + __u8 len8_dlc; /* optional DLC for 8 byte payload length (9 .. 15) */ 119 + __u8 data[CAN_MAX_DLEN] __attribute__((aligned(8))); 112 120 }; 113 121 114 122 /*
+2 -2
include/uapi/linux/can/gw.h
··· 98 98 99 99 /* CAN frame elements that are affected by curr. 3 CAN frame modifications */ 100 100 #define CGW_MOD_ID 0x01 101 - #define CGW_MOD_DLC 0x02 /* contains the data length in bytes */ 102 - #define CGW_MOD_LEN CGW_MOD_DLC /* CAN FD length representation */ 101 + #define CGW_MOD_DLC 0x02 /* Classical CAN data length code */ 102 + #define CGW_MOD_LEN CGW_MOD_DLC /* CAN FD (plain) data length */ 103 103 #define CGW_MOD_DATA 0x04 104 104 #define CGW_MOD_FLAGS 0x08 /* CAN FD flags */ 105 105
+1
include/uapi/linux/can/netlink.h
··· 100 100 #define CAN_CTRLMODE_FD 0x20 /* CAN FD mode */ 101 101 #define CAN_CTRLMODE_PRESUME_ACK 0x40 /* Ignore missing CAN ACKs */ 102 102 #define CAN_CTRLMODE_FD_NON_ISO 0x80 /* CAN FD in non-ISO mode */ 103 + #define CAN_CTRLMODE_CC_LEN8_DLC 0x100 /* Classic CAN DLC option */ 103 104 104 105 /* 105 106 * CAN device statistics
+1 -1
net/can/af_can.c
··· 888 888 int err; 889 889 890 890 /* check for correct padding to be able to use the structs similarly */ 891 - BUILD_BUG_ON(offsetof(struct can_frame, can_dlc) != 891 + BUILD_BUG_ON(offsetof(struct can_frame, len) != 892 892 offsetof(struct canfd_frame, len) || 893 893 offsetof(struct can_frame, data) != 894 894 offsetof(struct canfd_frame, data));
+71 -9
net/can/gw.c
··· 199 199 memcpy(cf->data, mod->modframe.set.data, CANFD_MAX_DLEN); 200 200 } 201 201 202 + /* retrieve valid CC DLC value and store it into 'len' */ 203 + static void mod_retrieve_ccdlc(struct canfd_frame *cf) 204 + { 205 + struct can_frame *ccf = (struct can_frame *)cf; 206 + 207 + /* len8_dlc is only valid if len == CAN_MAX_DLEN */ 208 + if (ccf->len != CAN_MAX_DLEN) 209 + return; 210 + 211 + /* do we have a valid len8_dlc value from 9 .. 15 ? */ 212 + if (ccf->len8_dlc > CAN_MAX_DLEN && ccf->len8_dlc <= CAN_MAX_RAW_DLC) 213 + ccf->len = ccf->len8_dlc; 214 + } 215 + 216 + /* convert valid CC DLC value in 'len' into struct can_frame elements */ 217 + static void mod_store_ccdlc(struct canfd_frame *cf) 218 + { 219 + struct can_frame *ccf = (struct can_frame *)cf; 220 + 221 + /* clear potential leftovers */ 222 + ccf->len8_dlc = 0; 223 + 224 + /* plain data length 0 .. 8 - that was easy */ 225 + if (ccf->len <= CAN_MAX_DLEN) 226 + return; 227 + 228 + /* potentially broken values are catched in can_can_gw_rcv() */ 229 + if (ccf->len > CAN_MAX_RAW_DLC) 230 + return; 231 + 232 + /* we have a valid dlc value from 9 .. 15 in ccf->len */ 233 + ccf->len8_dlc = ccf->len; 234 + ccf->len = CAN_MAX_DLEN; 235 + } 236 + 237 + static void mod_and_ccdlc(struct canfd_frame *cf, struct cf_mod *mod) 238 + { 239 + mod_retrieve_ccdlc(cf); 240 + mod_and_len(cf, mod); 241 + mod_store_ccdlc(cf); 242 + } 243 + 244 + static void mod_or_ccdlc(struct canfd_frame *cf, struct cf_mod *mod) 245 + { 246 + mod_retrieve_ccdlc(cf); 247 + mod_or_len(cf, mod); 248 + mod_store_ccdlc(cf); 249 + } 250 + 251 + static void mod_xor_ccdlc(struct canfd_frame *cf, struct cf_mod *mod) 252 + { 253 + mod_retrieve_ccdlc(cf); 254 + mod_xor_len(cf, mod); 255 + mod_store_ccdlc(cf); 256 + } 257 + 258 + static void mod_set_ccdlc(struct canfd_frame *cf, struct cf_mod *mod) 259 + { 260 + mod_set_len(cf, mod); 261 + mod_store_ccdlc(cf); 262 + } 263 + 202 264 static void canframecpy(struct canfd_frame *dst, struct can_frame *src) 203 265 { 204 266 /* Copy the struct members separately to ensure that no uninitialized ··· 269 207 */ 270 208 271 209 dst->can_id = src->can_id; 272 - dst->len = src->can_dlc; 210 + dst->len = src->len; 273 211 *(u64 *)dst->data = *(u64 *)src->data; 274 212 } 275 213 ··· 904 842 if (mb.modtype & CGW_MOD_ID) 905 843 mod->modfunc[modidx++] = mod_and_id; 906 844 907 - if (mb.modtype & CGW_MOD_LEN) 908 - mod->modfunc[modidx++] = mod_and_len; 845 + if (mb.modtype & CGW_MOD_DLC) 846 + mod->modfunc[modidx++] = mod_and_ccdlc; 909 847 910 848 if (mb.modtype & CGW_MOD_DATA) 911 849 mod->modfunc[modidx++] = mod_and_data; ··· 920 858 if (mb.modtype & CGW_MOD_ID) 921 859 mod->modfunc[modidx++] = mod_or_id; 922 860 923 - if (mb.modtype & CGW_MOD_LEN) 924 - mod->modfunc[modidx++] = mod_or_len; 861 + if (mb.modtype & CGW_MOD_DLC) 862 + mod->modfunc[modidx++] = mod_or_ccdlc; 925 863 926 864 if (mb.modtype & CGW_MOD_DATA) 927 865 mod->modfunc[modidx++] = mod_or_data; ··· 936 874 if (mb.modtype & CGW_MOD_ID) 937 875 mod->modfunc[modidx++] = mod_xor_id; 938 876 939 - if (mb.modtype & CGW_MOD_LEN) 940 - mod->modfunc[modidx++] = mod_xor_len; 877 + if (mb.modtype & CGW_MOD_DLC) 878 + mod->modfunc[modidx++] = mod_xor_ccdlc; 941 879 942 880 if (mb.modtype & CGW_MOD_DATA) 943 881 mod->modfunc[modidx++] = mod_xor_data; ··· 952 890 if (mb.modtype & CGW_MOD_ID) 953 891 mod->modfunc[modidx++] = mod_set_id; 954 892 955 - if (mb.modtype & CGW_MOD_LEN) 956 - mod->modfunc[modidx++] = mod_set_len; 893 + if (mb.modtype & CGW_MOD_DLC) 894 + mod->modfunc[modidx++] = mod_set_ccdlc; 957 895 958 896 if (mb.modtype & CGW_MOD_DATA) 959 897 mod->modfunc[modidx++] = mod_set_data;
+2 -2
net/can/j1939/main.c
··· 62 62 skb_pull(skb, J1939_CAN_HDR); 63 63 64 64 /* fix length, set to dlc, with 8 maximum */ 65 - skb_trim(skb, min_t(uint8_t, cf->can_dlc, 8)); 65 + skb_trim(skb, min_t(uint8_t, cf->len, 8)); 66 66 67 67 /* set addr */ 68 68 skcb = j1939_skb_to_cb(skb); ··· 335 335 canid |= skcb->addr.da << 8; 336 336 337 337 cf->can_id = canid; 338 - cf->can_dlc = dlc; 338 + cf->len = dlc; 339 339 340 340 return can_send(skb, 1); 341 341