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