Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
0002 /* Microsemi Ocelot Switch driver
0003  *
0004  * Copyright (c) 2019 Microsemi Corporation
0005  */
0006 
0007 #ifndef _MSCC_OCELOT_POLICE_H_
0008 #define _MSCC_OCELOT_POLICE_H_
0009 
0010 #include "ocelot.h"
0011 #include <net/flow_offload.h>
0012 
0013 enum mscc_qos_rate_mode {
0014     MSCC_QOS_RATE_MODE_DISABLED, /* Policer/shaper disabled */
0015     MSCC_QOS_RATE_MODE_LINE, /* Measure line rate in kbps incl. IPG */
0016     MSCC_QOS_RATE_MODE_DATA, /* Measures data rate in kbps excl. IPG */
0017     MSCC_QOS_RATE_MODE_FRAME, /* Measures frame rate in fps */
0018     __MSCC_QOS_RATE_MODE_END,
0019     NUM_MSCC_QOS_RATE_MODE = __MSCC_QOS_RATE_MODE_END,
0020     MSCC_QOS_RATE_MODE_MAX = __MSCC_QOS_RATE_MODE_END - 1,
0021 };
0022 
0023 struct qos_policer_conf {
0024     enum mscc_qos_rate_mode mode;
0025     bool dlb; /* Enable DLB (dual leaky bucket mode */
0026     bool cf;  /* Coupling flag (ignored in SLB mode) */
0027     u32  cir; /* CIR in kbps/fps (ignored in SLB mode) */
0028     u32  cbs; /* CBS in bytes/frames (ignored in SLB mode) */
0029     u32  pir; /* PIR in kbps/fps */
0030     u32  pbs; /* PBS in bytes/frames */
0031     u8   ipg; /* Size of IPG when MSCC_QOS_RATE_MODE_LINE is chosen */
0032 };
0033 
0034 int qos_policer_conf_set(struct ocelot *ocelot, u32 pol_ix,
0035              struct qos_policer_conf *conf);
0036 
0037 int ocelot_policer_validate(const struct flow_action *action,
0038                 const struct flow_action_entry *a,
0039                 struct netlink_ext_ack *extack);
0040 
0041 #endif /* _MSCC_OCELOT_POLICE_H_ */