#include <linux/math64.h>
#include "lib/aso.h"
#include "en/tc/post_act.h"
#include "meter.h"
#include "en/tc_priv.h"
#define MLX5_START_COLOR_SHIFT …
#define MLX5_METER_MODE_SHIFT …
#define MLX5_CBS_EXP_SHIFT …
#define MLX5_CBS_MAN_SHIFT …
#define MLX5_CIR_EXP_SHIFT …
#define MLX5_CONST_CIR …
#define MLX5_CALC_CIR(m, e) …
#define MLX5_MAX_CIR …
#define MLX5_CALC_CBS(m, e) …
#define MLX5_MAX_CBS …
#define MLX5_MAX_HW_CBS …
struct mlx5e_flow_meter_aso_obj { … };
struct mlx5e_flow_meters { … };
static void
mlx5e_flow_meter_cir_calc(u64 cir, u8 *man, u8 *exp)
{ … }
static void
mlx5e_flow_meter_cbs_calc(u64 cbs, u8 *man, u8 *exp)
{ … }
int
mlx5e_tc_meter_modify(struct mlx5_core_dev *mdev,
struct mlx5e_flow_meter_handle *meter,
struct mlx5e_flow_meter_params *meter_params)
{ … }
static int
mlx5e_flow_meter_create_aso_obj(struct mlx5e_flow_meters *flow_meters, int *obj_id)
{ … }
static void
mlx5e_flow_meter_destroy_aso_obj(struct mlx5_core_dev *mdev, u32 obj_id)
{ … }
static struct mlx5e_flow_meter_handle *
__mlx5e_flow_meter_alloc(struct mlx5e_flow_meters *flow_meters, bool alloc_aso)
{ … }
static void
__mlx5e_flow_meter_free(struct mlx5e_flow_meter_handle *meter)
{ … }
static struct mlx5e_flow_meter_handle *
__mlx5e_tc_meter_get(struct mlx5e_flow_meters *flow_meters, u32 index)
{ … }
struct mlx5e_flow_meter_handle *
mlx5e_tc_meter_get(struct mlx5_core_dev *mdev, struct mlx5e_flow_meter_params *params)
{ … }
static void
__mlx5e_tc_meter_put(struct mlx5e_flow_meter_handle *meter)
{ … }
void
mlx5e_tc_meter_put(struct mlx5e_flow_meter_handle *meter)
{ … }
static struct mlx5e_flow_meter_handle *
mlx5e_tc_meter_alloc(struct mlx5e_flow_meters *flow_meters,
struct mlx5e_flow_meter_params *params)
{ … }
static int
__mlx5e_tc_meter_update(struct mlx5e_flow_meter_handle *meter,
struct mlx5e_flow_meter_params *params)
{ … }
int
mlx5e_tc_meter_update(struct mlx5e_flow_meter_handle *meter,
struct mlx5e_flow_meter_params *params)
{ … }
struct mlx5e_flow_meter_handle *
mlx5e_tc_meter_replace(struct mlx5_core_dev *mdev, struct mlx5e_flow_meter_params *params)
{ … }
enum mlx5_flow_namespace_type
mlx5e_tc_meter_get_namespace(struct mlx5e_flow_meters *flow_meters)
{ … }
struct mlx5e_flow_meters *
mlx5e_flow_meters_init(struct mlx5e_priv *priv,
enum mlx5_flow_namespace_type ns_type,
struct mlx5e_post_act *post_act)
{ … }
void
mlx5e_flow_meters_cleanup(struct mlx5e_flow_meters *flow_meters)
{ … }
void
mlx5e_tc_meter_get_stats(struct mlx5e_flow_meter_handle *meter,
u64 *bytes, u64 *packets, u64 *drops, u64 *lastuse)
{ … }