0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef __ES58X_FD_H__
0015 #define __ES58X_FD_H__
0016
0017 #include <linux/types.h>
0018
0019 #define ES582_1_NUM_CAN_CH 2
0020 #define ES584_1_NUM_CAN_CH 1
0021 #define ES58X_FD_NUM_CAN_CH 2
0022 #define ES58X_FD_CHANNEL_IDX_OFFSET 0
0023
0024 #define ES58X_FD_TX_BULK_MAX 100
0025 #define ES58X_FD_RX_BULK_MAX 100
0026 #define ES58X_FD_ECHO_BULK_MAX 100
0027
0028 enum es58x_fd_cmd_type {
0029 ES58X_FD_CMD_TYPE_CAN = 0x03,
0030 ES58X_FD_CMD_TYPE_CANFD = 0x04,
0031 ES58X_FD_CMD_TYPE_DEVICE = 0xFF
0032 };
0033
0034
0035 enum es58x_fd_can_cmd_id {
0036 ES58X_FD_CAN_CMD_ID_ENABLE_CHANNEL = 0x01,
0037 ES58X_FD_CAN_CMD_ID_DISABLE_CHANNEL = 0x02,
0038 ES58X_FD_CAN_CMD_ID_TX_MSG = 0x05,
0039 ES58X_FD_CAN_CMD_ID_ECHO_MSG = 0x07,
0040 ES58X_FD_CAN_CMD_ID_RX_MSG = 0x10,
0041 ES58X_FD_CAN_CMD_ID_ERROR_OR_EVENT_MSG = 0x11,
0042 ES58X_FD_CAN_CMD_ID_RESET_RX = 0x20,
0043 ES58X_FD_CAN_CMD_ID_RESET_TX = 0x21,
0044 ES58X_FD_CAN_CMD_ID_TX_MSG_NO_ACK = 0x55
0045 };
0046
0047
0048 enum es58x_fd_dev_cmd_id {
0049 ES58X_FD_DEV_CMD_ID_GETTIMETICKS = 0x01,
0050 ES58X_FD_DEV_CMD_ID_TIMESTAMP = 0x02
0051 };
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072 enum es58x_fd_ctrlmode {
0073 ES58X_FD_CTRLMODE_ACTIVE = 0,
0074 ES58X_FD_CTRLMODE_PASSIVE = BIT(0),
0075 ES58X_FD_CTRLMODE_FD = BIT(4),
0076 ES58X_FD_CTRLMODE_FD_NON_ISO = BIT(5),
0077 ES58X_FD_CTRLMODE_DISABLE_PROTOCOL_EXCEPTION_HANDLING = BIT(6),
0078 ES58X_FD_CTRLMODE_EDGE_FILTER_DURING_BUS_INTEGRATION = BIT(7)
0079 };
0080
0081 struct es58x_fd_bittiming {
0082 __le32 bitrate;
0083 __le16 tseg1;
0084 __le16 tseg2;
0085 __le16 brp;
0086 __le16 sjw;
0087 } __packed;
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108 struct es58x_fd_tx_conf_msg {
0109 struct es58x_fd_bittiming nominal_bittiming;
0110 u8 samples_per_bit;
0111 u8 sync_edge;
0112 u8 physical_layer;
0113 u8 echo_mode;
0114 u8 ctrlmode;
0115 u8 canfd_enabled;
0116 struct es58x_fd_bittiming data_bittiming;
0117 u8 tdc_enabled;
0118 __le16 tdco;
0119 __le16 tdcf;
0120 } __packed;
0121
0122 #define ES58X_FD_CAN_CONF_LEN \
0123 (offsetof(struct es58x_fd_tx_conf_msg, canfd_enabled))
0124 #define ES58X_FD_CANFD_CONF_LEN (sizeof(struct es58x_fd_tx_conf_msg))
0125
0126 struct es58x_fd_tx_can_msg {
0127 u8 packet_idx;
0128 __le32 can_id;
0129 u8 flags;
0130 union {
0131 u8 dlc;
0132 u8 len;
0133 } __packed;
0134 u8 data[CANFD_MAX_DLEN];
0135 } __packed;
0136
0137 #define ES58X_FD_CAN_TX_LEN \
0138 (offsetof(struct es58x_fd_tx_can_msg, data[CAN_MAX_DLEN]))
0139 #define ES58X_FD_CANFD_TX_LEN (sizeof(struct es58x_fd_tx_can_msg))
0140
0141 struct es58x_fd_rx_can_msg {
0142 __le64 timestamp;
0143 __le32 can_id;
0144 u8 flags;
0145 union {
0146 u8 dlc;
0147 u8 len;
0148 } __packed;
0149 u8 data[CANFD_MAX_DLEN];
0150 } __packed;
0151
0152 #define ES58X_FD_CAN_RX_LEN \
0153 (offsetof(struct es58x_fd_rx_can_msg, data[CAN_MAX_DLEN]))
0154 #define ES58X_FD_CANFD_RX_LEN (sizeof(struct es58x_fd_rx_can_msg))
0155
0156 struct es58x_fd_echo_msg {
0157 __le64 timestamp;
0158 u8 packet_idx;
0159 } __packed;
0160
0161 struct es58x_fd_rx_event_msg {
0162 __le64 timestamp;
0163 __le32 can_id;
0164 u8 flags;
0165 u8 error_type;
0166 u8 error_code;
0167 u8 event_code;
0168 } __packed;
0169
0170 struct es58x_fd_tx_ack_msg {
0171 __le32 rx_cmd_ret_le32;
0172 __le16 tx_free_entries;
0173 } __packed;
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206 struct es58x_fd_urb_cmd {
0207 __le16 SOF;
0208 u8 cmd_type;
0209 u8 cmd_id;
0210 u8 channel_idx;
0211 __le16 msg_len;
0212
0213 union {
0214 struct es58x_fd_tx_conf_msg tx_conf_msg;
0215 u8 tx_can_msg_buf[ES58X_FD_TX_BULK_MAX * ES58X_FD_CANFD_TX_LEN];
0216 u8 rx_can_msg_buf[ES58X_FD_RX_BULK_MAX * ES58X_FD_CANFD_RX_LEN];
0217 struct es58x_fd_echo_msg echo_msg[ES58X_FD_ECHO_BULK_MAX];
0218 struct es58x_fd_rx_event_msg rx_event_msg;
0219 struct es58x_fd_tx_ack_msg tx_ack_msg;
0220 __le64 timestamp;
0221 __le32 rx_cmd_ret_le32;
0222 DECLARE_FLEX_ARRAY(u8, raw_msg);
0223 } __packed;
0224
0225 __le16 reserved_for_crc16_do_not_use;
0226 } __packed;
0227
0228 #define ES58X_FD_URB_CMD_HEADER_LEN (offsetof(struct es58x_fd_urb_cmd, raw_msg))
0229 #define ES58X_FD_TX_URB_CMD_MAX_LEN \
0230 ES58X_SIZEOF_URB_CMD(struct es58x_fd_urb_cmd, tx_can_msg_buf)
0231 #define ES58X_FD_RX_URB_CMD_MAX_LEN \
0232 ES58X_SIZEOF_URB_CMD(struct es58x_fd_urb_cmd, rx_can_msg_buf)
0233
0234 #endif