1 | /* SPDX-License-Identifier: GPL-2.0 |
2 | * |
3 | * mcp251xfd - Microchip MCP251xFD Family CAN controller driver |
4 | * |
5 | * Copyright (c) 2021, 2022 Pengutronix, |
6 | * Marc Kleine-Budde <kernel@pengutronix.de> |
7 | */ |
8 | |
9 | #ifndef _MCP251XFD_RAM_H |
10 | #define _MCP251XFD_RAM_H |
11 | |
12 | #include <linux/ethtool.h> |
13 | |
14 | #define CAN_RAM_NUM_MAX (-1) |
15 | |
16 | enum can_ram_mode { |
17 | CAN_RAM_MODE_CAN, |
18 | CAN_RAM_MODE_CANFD, |
19 | __CAN_RAM_MODE_MAX |
20 | }; |
21 | |
22 | struct can_ram_obj_config { |
23 | u8 size[__CAN_RAM_MODE_MAX]; |
24 | |
25 | u8 def[__CAN_RAM_MODE_MAX]; |
26 | u8 min; |
27 | u8 max; |
28 | |
29 | u8 fifo_num; |
30 | u8 fifo_depth_min; |
31 | u8 fifo_depth_coalesce_min; |
32 | }; |
33 | |
34 | struct can_ram_config { |
35 | const struct can_ram_obj_config rx; |
36 | const struct can_ram_obj_config tx; |
37 | |
38 | u16 size; |
39 | u8 fifo_depth; |
40 | }; |
41 | |
42 | struct can_ram_layout { |
43 | u8 default_rx; |
44 | u8 default_tx; |
45 | |
46 | u8 max_rx; |
47 | u8 max_tx; |
48 | |
49 | u8 cur_rx; |
50 | u8 cur_tx; |
51 | |
52 | u8 rx_coalesce; |
53 | u8 tx_coalesce; |
54 | }; |
55 | |
56 | void can_ram_get_layout(struct can_ram_layout *layout, |
57 | const struct can_ram_config *config, |
58 | const struct ethtool_ringparam *ring, |
59 | const struct ethtool_coalesce *ec, |
60 | const bool fd_mode); |
61 | |
62 | #endif |
63 | |