net: stmmac: restructure tc implementation for RX VLAN Priority steering
authorOng Boon Leong <boon.leong.ong@intel.com>
Thu, 18 Mar 2021 17:22:03 +0000 (01:22 +0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 18 Mar 2021 21:17:51 +0000 (14:17 -0700)
The current tc_add_flow() and tc_del_flow() use hardware L3 & L4 filters
as offloading. The number of L3/L4 filters is read from L3L4FNUM field
from MAC_HW_Feature1 register and is used to alloc priv->tc_entries[].

For RX frame steering based on VLAN priority offloading, we use
MAC_RXQ_CTRL2 & MAC_RXQ_CTRL3 registers and all VLAN priority level
can be configured independent from L3 & L4 filters.

Signed-off-by: Ong Boon Leong <boon.leong.ong@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c

index 44bb133..f4d8d79 100644 (file)
@@ -598,6 +598,26 @@ static int tc_del_flow(struct stmmac_priv *priv,
        return ret;
 }
 
+static int tc_add_flow_cls(struct stmmac_priv *priv,
+                          struct flow_cls_offload *cls)
+{
+       int ret;
+
+       ret = tc_add_flow(priv, cls);
+
+       return ret;
+}
+
+static int tc_del_flow_cls(struct stmmac_priv *priv,
+                          struct flow_cls_offload *cls)
+{
+       int ret;
+
+       ret = tc_del_flow(priv, cls);
+
+       return ret;
+}
+
 static int tc_setup_cls(struct stmmac_priv *priv,
                        struct flow_cls_offload *cls)
 {
@@ -609,10 +629,10 @@ static int tc_setup_cls(struct stmmac_priv *priv,
 
        switch (cls->command) {
        case FLOW_CLS_REPLACE:
-               ret = tc_add_flow(priv, cls);
+               ret = tc_add_flow_cls(priv, cls);
                break;
        case FLOW_CLS_DESTROY:
-               ret = tc_del_flow(priv, cls);
+               ret = tc_del_flow_cls(priv, cls);
                break;
        default:
                return -EOPNOTSUPP;