103484e49SIdo Schimmel /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 203484e49SIdo Schimmel /* Copyright (c) 2020 Mellanox Technologies. All rights reserved */ 303484e49SIdo Schimmel 403484e49SIdo Schimmel #ifndef _MLXSW_SPECTRUM_TRAP_H 503484e49SIdo Schimmel #define _MLXSW_SPECTRUM_TRAP_H 603484e49SIdo Schimmel 713f2e64bSIdo Schimmel #include <linux/list.h> 84561705bSIdo Schimmel #include <net/devlink.h> 94561705bSIdo Schimmel 1003484e49SIdo Schimmel struct mlxsw_sp_trap { 11cc678f4dSIdo Schimmel struct mlxsw_sp_trap_policer_item *policer_items_arr; 1276ba292cSIdo Schimmel size_t policers_count; /* Number of registered policers */ 13b14a40dbSIdo Schimmel 14b14a40dbSIdo Schimmel struct mlxsw_sp_trap_group_item *group_items_arr; 1576ba292cSIdo Schimmel size_t groups_count; /* Number of registered groups */ 16b14a40dbSIdo Schimmel 17200b7ccaSIdo Schimmel struct mlxsw_sp_trap_item *trap_items_arr; 1876ba292cSIdo Schimmel size_t traps_count; /* Number of registered traps */ 19200b7ccaSIdo Schimmel 20b87bde80SIdo Schimmel u16 thin_policer_hw_id; 21b87bde80SIdo Schimmel 2203484e49SIdo Schimmel u64 max_policers; 2303484e49SIdo Schimmel unsigned long policers_usage[]; /* Usage bitmap */ 2403484e49SIdo Schimmel }; 2503484e49SIdo Schimmel 2636d1fd68SIdo Schimmel struct mlxsw_sp_trap_ops { 2736d1fd68SIdo Schimmel int (*groups_init)(struct mlxsw_sp *mlxsw_sp, 2836d1fd68SIdo Schimmel const struct mlxsw_sp_trap_group_item **arr, 2936d1fd68SIdo Schimmel size_t *p_groups_count); 30*869c7be9SIdo Schimmel int (*traps_init)(struct mlxsw_sp *mlxsw_sp, 31*869c7be9SIdo Schimmel const struct mlxsw_sp_trap_item **arr, 32*869c7be9SIdo Schimmel size_t *p_traps_count); 3336d1fd68SIdo Schimmel }; 3436d1fd68SIdo Schimmel 3536d1fd68SIdo Schimmel extern const struct mlxsw_sp_trap_ops mlxsw_sp1_trap_ops; 3636d1fd68SIdo Schimmel extern const struct mlxsw_sp_trap_ops mlxsw_sp2_trap_ops; 3736d1fd68SIdo Schimmel 3803484e49SIdo Schimmel #endif 39