Commit c73b0ad3 authored by Vladimir Oltean's avatar Vladimir Oltean Committed by David S. Miller

net: mscc: ocelot: unexpose ocelot_vcap_policer_{add,del}

Remove the function prototypes from ocelot_police.h and make these
functions static. We need to move them above their callers. Note that
moving the implementations to ocelot_police.c is not trivially possible
due to dependency on is2_entry_set() which is static to ocelot_vcap.c.
Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent aae4e500
...@@ -33,9 +33,4 @@ struct qos_policer_conf { ...@@ -33,9 +33,4 @@ struct qos_policer_conf {
int qos_policer_conf_set(struct ocelot *ocelot, int port, u32 pol_ix, int qos_policer_conf_set(struct ocelot *ocelot, int port, u32 pol_ix,
struct qos_policer_conf *conf); struct qos_policer_conf *conf);
int ocelot_vcap_policer_add(struct ocelot *ocelot, u32 pol_ix,
struct ocelot_policer *pol);
int ocelot_vcap_policer_del(struct ocelot *ocelot, u32 pol_ix);
#endif /* _MSCC_OCELOT_POLICE_H_ */ #endif /* _MSCC_OCELOT_POLICE_H_ */
...@@ -651,6 +651,49 @@ static void is2_entry_get(struct ocelot *ocelot, struct ocelot_vcap_filter *filt ...@@ -651,6 +651,49 @@ static void is2_entry_get(struct ocelot *ocelot, struct ocelot_vcap_filter *filt
filter->stats.pkts = cnt; filter->stats.pkts = cnt;
} }
static int ocelot_vcap_policer_add(struct ocelot *ocelot, u32 pol_ix,
struct ocelot_policer *pol)
{
struct qos_policer_conf pp = { 0 };
if (!pol)
return -EINVAL;
pp.mode = MSCC_QOS_RATE_MODE_DATA;
pp.pir = pol->rate;
pp.pbs = pol->burst;
return qos_policer_conf_set(ocelot, 0, pol_ix, &pp);
}
static void ocelot_vcap_policer_del(struct ocelot *ocelot,
struct ocelot_vcap_block *block,
u32 pol_ix)
{
struct ocelot_vcap_filter *filter;
struct qos_policer_conf pp = {0};
int index = -1;
if (pol_ix < block->pol_lpr)
return;
list_for_each_entry(filter, &block->rules, list) {
index++;
if (filter->action == OCELOT_VCAP_ACTION_POLICE &&
filter->pol_ix < pol_ix) {
filter->pol_ix += 1;
ocelot_vcap_policer_add(ocelot, filter->pol_ix,
&filter->pol);
is2_entry_set(ocelot, index, filter);
}
}
pp.mode = MSCC_QOS_RATE_MODE_DISABLED;
qos_policer_conf_set(ocelot, 0, pol_ix, &pp);
block->pol_lpr++;
}
static void ocelot_vcap_filter_add_to_block(struct ocelot *ocelot, static void ocelot_vcap_filter_add_to_block(struct ocelot *ocelot,
struct ocelot_vcap_block *block, struct ocelot_vcap_block *block,
struct ocelot_vcap_filter *filter) struct ocelot_vcap_filter *filter)
...@@ -848,55 +891,6 @@ int ocelot_vcap_filter_add(struct ocelot *ocelot, ...@@ -848,55 +891,6 @@ int ocelot_vcap_filter_add(struct ocelot *ocelot,
return 0; return 0;
} }
int ocelot_vcap_policer_add(struct ocelot *ocelot, u32 pol_ix,
struct ocelot_policer *pol)
{
struct qos_policer_conf pp = { 0 };
if (!pol)
return -EINVAL;
pp.mode = MSCC_QOS_RATE_MODE_DATA;
pp.pir = pol->rate;
pp.pbs = pol->burst;
return qos_policer_conf_set(ocelot, 0, pol_ix, &pp);
}
int ocelot_vcap_policer_del(struct ocelot *ocelot, u32 pol_ix)
{
struct qos_policer_conf pp = { 0 };
pp.mode = MSCC_QOS_RATE_MODE_DISABLED;
return qos_policer_conf_set(ocelot, 0, pol_ix, &pp);
}
static void ocelot_vcap_police_del(struct ocelot *ocelot,
struct ocelot_vcap_block *block,
u32 ix)
{
struct ocelot_vcap_filter *filter;
int index = -1;
if (ix < block->pol_lpr)
return;
list_for_each_entry(filter, &block->rules, list) {
index++;
if (filter->action == OCELOT_VCAP_ACTION_POLICE &&
filter->pol_ix < ix) {
filter->pol_ix += 1;
ocelot_vcap_policer_add(ocelot, filter->pol_ix,
&filter->pol);
is2_entry_set(ocelot, index, filter);
}
}
ocelot_vcap_policer_del(ocelot, block->pol_lpr);
block->pol_lpr++;
}
static void ocelot_vcap_block_remove_filter(struct ocelot *ocelot, static void ocelot_vcap_block_remove_filter(struct ocelot *ocelot,
struct ocelot_vcap_block *block, struct ocelot_vcap_block *block,
struct ocelot_vcap_filter *filter) struct ocelot_vcap_filter *filter)
...@@ -908,7 +902,7 @@ static void ocelot_vcap_block_remove_filter(struct ocelot *ocelot, ...@@ -908,7 +902,7 @@ static void ocelot_vcap_block_remove_filter(struct ocelot *ocelot,
tmp = list_entry(pos, struct ocelot_vcap_filter, list); tmp = list_entry(pos, struct ocelot_vcap_filter, list);
if (tmp->id == filter->id) { if (tmp->id == filter->id) {
if (tmp->action == OCELOT_VCAP_ACTION_POLICE) if (tmp->action == OCELOT_VCAP_ACTION_POLICE)
ocelot_vcap_police_del(ocelot, block, ocelot_vcap_policer_del(ocelot, block,
tmp->pol_ix); tmp->pol_ix);
list_del(pos); list_del(pos);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment