Add a test to validate that Split Header feature is working correctly.
It works by using the rececently introduced counter that increments each
time a packet with split header is received.

Signed-off-by: Jose Abreu <joab...@synopsys.com>

---
Cc: Giuseppe Cavallaro <peppe.cavall...@st.com>
Cc: Alexandre Torgue <alexandre.tor...@st.com>
Cc: Jose Abreu <joab...@synopsys.com>
Cc: "David S. Miller" <da...@davemloft.net>
Cc: Maxime Coquelin <mcoquelin.st...@gmail.com>
Cc: net...@vger.kernel.org
Cc: linux-arm-ker...@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
---
 .../net/ethernet/stmicro/stmmac/stmmac_selftests.c | 42 ++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
index 2943943bec43..c56e89e1ae56 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
@@ -1603,6 +1603,44 @@ static int stmmac_test_mjumbo(struct stmmac_priv *priv)
        return 0;
 }
 
+static int stmmac_test_sph(struct stmmac_priv *priv)
+{
+       unsigned long cnt_end, cnt_start = priv->xstats.rx_split_hdr_pkt_n;
+       struct stmmac_packet_attrs attr = { };
+       int ret;
+
+       if (!priv->sph)
+               return -EOPNOTSUPP;
+
+       /* Check for UDP first */
+       attr.dst = priv->dev->dev_addr;
+       attr.tcp = false;
+
+       ret = __stmmac_test_loopback(priv, &attr);
+       if (ret)
+               return ret;
+
+       cnt_end = priv->xstats.rx_split_hdr_pkt_n;
+       if (cnt_end <= cnt_start)
+               return -EINVAL;
+
+       /* Check for TCP now */
+       cnt_start = cnt_end;
+
+       attr.dst = priv->dev->dev_addr;
+       attr.tcp = true;
+
+       ret = __stmmac_test_loopback(priv, &attr);
+       if (ret)
+               return ret;
+
+       cnt_end = priv->xstats.rx_split_hdr_pkt_n;
+       if (cnt_end <= cnt_start)
+               return -EINVAL;
+
+       return 0;
+}
+
 #define STMMAC_LOOPBACK_NONE   0
 #define STMMAC_LOOPBACK_MAC    1
 #define STMMAC_LOOPBACK_PHY    2
@@ -1724,6 +1762,10 @@ static const struct stmmac_test {
                .name = "Multichannel Jumbo  ",
                .lb = STMMAC_LOOPBACK_PHY,
                .fn = stmmac_test_mjumbo,
+       }, {
+               .name = "Split Header        ",
+               .lb = STMMAC_LOOPBACK_PHY,
+               .fn = stmmac_test_sph,
        },
 };
 
-- 
2.7.4

Reply via email to