]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
can: kvaser_usb: hydra: Add struct for Tx ACK commands
authorJimmy Assarsson <extja@kvaser.com>
Mon, 1 Jul 2024 15:49:24 +0000 (17:49 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 5 Aug 2024 15:39:00 +0000 (17:39 +0200)
Add, struct kvaser_cmd_tx_ack, for standard Tx ACK commands.

Expand kvaser_usb_hydra_ktime_from_cmd() to extract timestamps from both
standard and extended Tx ACK commands. Unsupported commands are silently
ignored, and 0 is returned.

Signed-off-by: Jimmy Assarsson <extja@kvaser.com>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Link: https://lore.kernel.org/all/20240701154936.92633-4-extja@kvaser.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c

index 84f1f1f9c1079b771665b4a5344514159a718e03..f102f9de7d1630f51fdbe68caa3dd35b201d86db 100644 (file)
@@ -261,6 +261,15 @@ struct kvaser_cmd_tx_can {
        u8 reserved[11];
 } __packed;
 
+struct kvaser_cmd_tx_ack {
+       __le32 id;
+       u8 data[8];
+       u8 dlc;
+       u8 flags;
+       __le16 timestamp[3];
+       u8 reserved0[8];
+} __packed;
+
 struct kvaser_cmd_header {
        u8 cmd_no;
        /* The destination HE address is stored in 0..5 of he_addr.
@@ -297,6 +306,7 @@ struct kvaser_cmd {
 
                struct kvaser_cmd_rx_can rx_can;
                struct kvaser_cmd_tx_can tx_can;
+               struct kvaser_cmd_tx_ack tx_ack;
        } __packed;
 } __packed;
 
@@ -530,9 +540,14 @@ static ktime_t kvaser_usb_hydra_ktime_from_cmd(const struct kvaser_usb_dev_cfg *
        if (cmd->header.cmd_no == CMD_EXTENDED) {
                struct kvaser_cmd_ext *cmd_ext = (struct kvaser_cmd_ext *)cmd;
 
-               hwtstamp = kvaser_usb_timestamp64_to_ktime(cfg, cmd_ext->rx_can.timestamp);
-       } else {
+               if (cmd_ext->cmd_no_ext == CMD_RX_MESSAGE_FD)
+                       hwtstamp = kvaser_usb_timestamp64_to_ktime(cfg, cmd_ext->rx_can.timestamp);
+               else if (cmd_ext->cmd_no_ext == CMD_TX_ACKNOWLEDGE_FD)
+                       hwtstamp = kvaser_usb_timestamp64_to_ktime(cfg, cmd_ext->tx_ack.timestamp);
+       } else if (cmd->header.cmd_no == CMD_RX_MESSAGE) {
                hwtstamp = kvaser_usb_timestamp48_to_ktime(cfg, cmd->rx_can.timestamp);
+       } else if (cmd->header.cmd_no == CMD_TX_ACKNOWLEDGE) {
+               hwtstamp = kvaser_usb_timestamp48_to_ktime(cfg, cmd->tx_ack.timestamp);
        }
 
        return hwtstamp;