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