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....@intel.com>
---
 .../net/ethernet/stmicro/stmmac/stmmac_tc.c   | 24 +++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
index 44bb133c3000..f4d8d7980ec5 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
@@ -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;
-- 
2.25.1

Reply via email to