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