162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 262306a36Sopenharmony_ci/* Copyright (c) 2020 Mellanox Technologies. All rights reserved */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#ifndef _MLXSW_SPECTRUM_TRAP_H 562306a36Sopenharmony_ci#define _MLXSW_SPECTRUM_TRAP_H 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <linux/list.h> 862306a36Sopenharmony_ci#include <net/devlink.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistruct mlxsw_sp_trap { 1162306a36Sopenharmony_ci struct mlxsw_sp_trap_policer_item *policer_items_arr; 1262306a36Sopenharmony_ci size_t policers_count; /* Number of registered policers */ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci struct mlxsw_sp_trap_group_item *group_items_arr; 1562306a36Sopenharmony_ci size_t groups_count; /* Number of registered groups */ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci struct mlxsw_sp_trap_item *trap_items_arr; 1862306a36Sopenharmony_ci size_t traps_count; /* Number of registered traps */ 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci u16 thin_policer_hw_id; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci u64 max_policers; 2362306a36Sopenharmony_ci unsigned long policers_usage[]; /* Usage bitmap */ 2462306a36Sopenharmony_ci}; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistruct mlxsw_sp_trap_ops { 2762306a36Sopenharmony_ci int (*groups_init)(struct mlxsw_sp *mlxsw_sp, 2862306a36Sopenharmony_ci const struct mlxsw_sp_trap_group_item **arr, 2962306a36Sopenharmony_ci size_t *p_groups_count); 3062306a36Sopenharmony_ci int (*traps_init)(struct mlxsw_sp *mlxsw_sp, 3162306a36Sopenharmony_ci const struct mlxsw_sp_trap_item **arr, 3262306a36Sopenharmony_ci size_t *p_traps_count); 3362306a36Sopenharmony_ci}; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciextern const struct mlxsw_sp_trap_ops mlxsw_sp1_trap_ops; 3662306a36Sopenharmony_ciextern const struct mlxsw_sp_trap_ops mlxsw_sp2_trap_ops; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci#endif 39