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