162306a36Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */ 262306a36Sopenharmony_ci/* Microsemi Ocelot Switch driver 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (c) 2019 Microsemi Corporation 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef _MSCC_OCELOT_POLICE_H_ 862306a36Sopenharmony_ci#define _MSCC_OCELOT_POLICE_H_ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include "ocelot.h" 1162306a36Sopenharmony_ci#include <net/flow_offload.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cienum mscc_qos_rate_mode { 1462306a36Sopenharmony_ci MSCC_QOS_RATE_MODE_DISABLED, /* Policer/shaper disabled */ 1562306a36Sopenharmony_ci MSCC_QOS_RATE_MODE_LINE, /* Measure line rate in kbps incl. IPG */ 1662306a36Sopenharmony_ci MSCC_QOS_RATE_MODE_DATA, /* Measures data rate in kbps excl. IPG */ 1762306a36Sopenharmony_ci MSCC_QOS_RATE_MODE_FRAME, /* Measures frame rate in fps */ 1862306a36Sopenharmony_ci __MSCC_QOS_RATE_MODE_END, 1962306a36Sopenharmony_ci NUM_MSCC_QOS_RATE_MODE = __MSCC_QOS_RATE_MODE_END, 2062306a36Sopenharmony_ci MSCC_QOS_RATE_MODE_MAX = __MSCC_QOS_RATE_MODE_END - 1, 2162306a36Sopenharmony_ci}; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistruct qos_policer_conf { 2462306a36Sopenharmony_ci enum mscc_qos_rate_mode mode; 2562306a36Sopenharmony_ci bool dlb; /* Enable DLB (dual leaky bucket mode */ 2662306a36Sopenharmony_ci bool cf; /* Coupling flag (ignored in SLB mode) */ 2762306a36Sopenharmony_ci u32 cir; /* CIR in kbps/fps (ignored in SLB mode) */ 2862306a36Sopenharmony_ci u32 cbs; /* CBS in bytes/frames (ignored in SLB mode) */ 2962306a36Sopenharmony_ci u32 pir; /* PIR in kbps/fps */ 3062306a36Sopenharmony_ci u32 pbs; /* PBS in bytes/frames */ 3162306a36Sopenharmony_ci u8 ipg; /* Size of IPG when MSCC_QOS_RATE_MODE_LINE is chosen */ 3262306a36Sopenharmony_ci}; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ciint qos_policer_conf_set(struct ocelot *ocelot, u32 pol_ix, 3562306a36Sopenharmony_ci struct qos_policer_conf *conf); 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ciint ocelot_policer_validate(const struct flow_action *action, 3862306a36Sopenharmony_ci const struct flow_action_entry *a, 3962306a36Sopenharmony_ci struct netlink_ext_ack *extack); 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci#endif /* _MSCC_OCELOT_POLICE_H_ */ 42