mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-14 06:35:12 +00:00
net: microchip: vcap api: Always enable VCAP lookups
This changes the VCAP lookups state to always be enabled so that it is possible to add "internal" VCAP rules that must be available even though the user has not yet enabled the VCAP chains via a TC matchall filter. The API callback to enable and disable VCAP lookups is therefore removed. Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com> Signed-off-by: Steen Hegelund <steen.hegelund@microchip.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
95fa74148d
commit
01ef75a257
7 changed files with 16 additions and 65 deletions
|
@ -390,20 +390,6 @@ static int lan966x_vcap_port_info(struct net_device *dev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int lan966x_vcap_enable(struct net_device *dev,
|
||||
struct vcap_admin *admin,
|
||||
bool enable)
|
||||
{
|
||||
struct lan966x_port *port = netdev_priv(dev);
|
||||
struct lan966x *lan966x = port->lan966x;
|
||||
|
||||
lan_rmw(ANA_VCAP_S2_CFG_ENA_SET(enable),
|
||||
ANA_VCAP_S2_CFG_ENA,
|
||||
lan966x, ANA_VCAP_S2_CFG(port->chip_port));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct vcap_operations lan966x_vcap_ops = {
|
||||
.validate_keyset = lan966x_vcap_validate_keyset,
|
||||
.add_default_fields = lan966x_vcap_add_default_fields,
|
||||
|
@ -414,7 +400,6 @@ static struct vcap_operations lan966x_vcap_ops = {
|
|||
.update = lan966x_vcap_update,
|
||||
.move = lan966x_vcap_move,
|
||||
.port_info = lan966x_vcap_port_info,
|
||||
.enable = lan966x_vcap_enable,
|
||||
};
|
||||
|
||||
static void lan966x_vcap_admin_free(struct vcap_admin *admin)
|
||||
|
@ -521,6 +506,12 @@ int lan966x_vcap_init(struct lan966x *lan966x)
|
|||
list_add_tail(&admin->list, &ctrl->list);
|
||||
}
|
||||
|
||||
for (int p = 0; p < lan966x->num_phys_ports; ++p)
|
||||
if (lan966x->ports[p])
|
||||
lan_rmw(ANA_VCAP_S2_CFG_ENA_SET(true),
|
||||
ANA_VCAP_S2_CFG_ENA, lan966x,
|
||||
ANA_VCAP_S2_CFG(lan966x->ports[p]->chip_port));
|
||||
|
||||
lan966x->vcap_ctrl = ctrl;
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -29,7 +29,7 @@ static void sparx5_vcap_port_keys(struct sparx5 *sparx5,
|
|||
/* Get lookup state */
|
||||
value = spx5_rd(sparx5, ANA_ACL_VCAP_S2_CFG(port->portno));
|
||||
out->prf(out->dst, "\n state: ");
|
||||
if (ANA_ACL_VCAP_S2_CFG_SEC_ENA_GET(value))
|
||||
if (ANA_ACL_VCAP_S2_CFG_SEC_ENA_GET(value) & BIT(lookup))
|
||||
out->prf(out->dst, "on");
|
||||
else
|
||||
out->prf(out->dst, "off");
|
||||
|
|
|
@ -510,28 +510,6 @@ static void sparx5_vcap_move(struct net_device *ndev, struct vcap_admin *admin,
|
|||
sparx5_vcap_wait_super_update(sparx5);
|
||||
}
|
||||
|
||||
/* Enable all lookups in the VCAP instance */
|
||||
static int sparx5_vcap_enable(struct net_device *ndev,
|
||||
struct vcap_admin *admin,
|
||||
bool enable)
|
||||
{
|
||||
struct sparx5_port *port = netdev_priv(ndev);
|
||||
struct sparx5 *sparx5;
|
||||
int portno;
|
||||
|
||||
sparx5 = port->sparx5;
|
||||
portno = port->portno;
|
||||
|
||||
/* For now we only consider IS2 */
|
||||
if (enable)
|
||||
spx5_wr(ANA_ACL_VCAP_S2_CFG_SEC_ENA_SET(0xf), sparx5,
|
||||
ANA_ACL_VCAP_S2_CFG(portno));
|
||||
else
|
||||
spx5_wr(ANA_ACL_VCAP_S2_CFG_SEC_ENA_SET(0), sparx5,
|
||||
ANA_ACL_VCAP_S2_CFG(portno));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* API callback operations: only IS2 is supported for now */
|
||||
static struct vcap_operations sparx5_vcap_ops = {
|
||||
.validate_keyset = sparx5_vcap_validate_keyset,
|
||||
|
@ -543,7 +521,6 @@ static struct vcap_operations sparx5_vcap_ops = {
|
|||
.update = sparx5_vcap_update,
|
||||
.move = sparx5_vcap_move,
|
||||
.port_info = sparx5_port_info,
|
||||
.enable = sparx5_vcap_enable,
|
||||
};
|
||||
|
||||
/* Enable lookups per port and set the keyset generation: only IS2 for now */
|
||||
|
@ -568,6 +545,12 @@ static void sparx5_vcap_port_key_selection(struct sparx5 *sparx5,
|
|||
ANA_ACL_VCAP_S2_KEY_SEL(portno, lookup));
|
||||
}
|
||||
}
|
||||
/* IS2 lookups are in bit 0:3 */
|
||||
for (portno = 0; portno < SPX5_PORTS; ++portno)
|
||||
spx5_rmw(ANA_ACL_VCAP_S2_CFG_SEC_ENA_SET(0xf),
|
||||
ANA_ACL_VCAP_S2_CFG_SEC_ENA,
|
||||
sparx5,
|
||||
ANA_ACL_VCAP_S2_CFG(portno));
|
||||
}
|
||||
|
||||
/* Disable lookups per port and set the keyset generation: only IS2 for now */
|
||||
|
|
|
@ -738,7 +738,7 @@ int vcap_api_check(struct vcap_control *ctrl)
|
|||
!ctrl->ops->add_default_fields || !ctrl->ops->cache_erase ||
|
||||
!ctrl->ops->cache_write || !ctrl->ops->cache_read ||
|
||||
!ctrl->ops->init || !ctrl->ops->update || !ctrl->ops->move ||
|
||||
!ctrl->ops->port_info || !ctrl->ops->enable) {
|
||||
!ctrl->ops->port_info) {
|
||||
pr_err("%s:%d: client operations are missing\n",
|
||||
__func__, __LINE__);
|
||||
return -ENOENT;
|
||||
|
@ -2656,10 +2656,6 @@ int vcap_enable_lookups(struct vcap_control *vctrl, struct net_device *ndev,
|
|||
if (admin->vinst || chain_id > admin->first_cid)
|
||||
return -EFAULT;
|
||||
|
||||
err = vctrl->ops->enable(ndev, admin, enable);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (chain_id) {
|
||||
if (vcap_is_enabled(admin, ndev, cookie))
|
||||
return -EADDRINUSE;
|
||||
|
|
|
@ -259,11 +259,6 @@ struct vcap_operations {
|
|||
(struct net_device *ndev,
|
||||
struct vcap_admin *admin,
|
||||
struct vcap_output_print *out);
|
||||
/* enable/disable the lookups in a vcap instance */
|
||||
int (*enable)
|
||||
(struct net_device *ndev,
|
||||
struct vcap_admin *admin,
|
||||
bool enable);
|
||||
};
|
||||
|
||||
/* VCAP API Client control interface */
|
||||
|
|
|
@ -221,13 +221,6 @@ static int vcap_test_port_info(struct net_device *ndev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int vcap_test_enable(struct net_device *ndev,
|
||||
struct vcap_admin *admin,
|
||||
bool enable)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct vcap_operations test_callbacks = {
|
||||
.validate_keyset = test_val_keyset,
|
||||
.add_default_fields = test_add_def_fields,
|
||||
|
@ -238,7 +231,6 @@ static struct vcap_operations test_callbacks = {
|
|||
.update = test_cache_update,
|
||||
.move = test_cache_move,
|
||||
.port_info = vcap_test_port_info,
|
||||
.enable = vcap_test_enable,
|
||||
};
|
||||
|
||||
static struct vcap_control test_vctrl = {
|
||||
|
@ -253,6 +245,7 @@ static void vcap_test_api_init(struct vcap_admin *admin)
|
|||
INIT_LIST_HEAD(&test_vctrl.list);
|
||||
INIT_LIST_HEAD(&admin->list);
|
||||
INIT_LIST_HEAD(&admin->rules);
|
||||
INIT_LIST_HEAD(&admin->enabled);
|
||||
list_add_tail(&admin->list, &test_vctrl.list);
|
||||
memset(test_updateaddr, 0, sizeof(test_updateaddr));
|
||||
test_updateaddridx = 0;
|
||||
|
|
|
@ -211,13 +211,6 @@ static int vcap_test_port_info(struct net_device *ndev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int vcap_test_enable(struct net_device *ndev,
|
||||
struct vcap_admin *admin,
|
||||
bool enable)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct vcap_operations test_callbacks = {
|
||||
.validate_keyset = test_val_keyset,
|
||||
.add_default_fields = test_add_def_fields,
|
||||
|
@ -228,7 +221,6 @@ static struct vcap_operations test_callbacks = {
|
|||
.update = test_cache_update,
|
||||
.move = test_cache_move,
|
||||
.port_info = vcap_test_port_info,
|
||||
.enable = vcap_test_enable,
|
||||
};
|
||||
|
||||
static struct vcap_control test_vctrl = {
|
||||
|
@ -243,6 +235,7 @@ static void vcap_test_api_init(struct vcap_admin *admin)
|
|||
INIT_LIST_HEAD(&test_vctrl.list);
|
||||
INIT_LIST_HEAD(&admin->list);
|
||||
INIT_LIST_HEAD(&admin->rules);
|
||||
INIT_LIST_HEAD(&admin->enabled);
|
||||
list_add_tail(&admin->list, &test_vctrl.list);
|
||||
memset(test_updateaddr, 0, sizeof(test_updateaddr));
|
||||
test_updateaddridx = 0;
|
||||
|
|
Loading…
Reference in a new issue