summaryrefslogtreecommitdiffstats
path: root/debian/patches/features/all/ethernet-microsoft/0023-net-mana-Add-support-for-vlan-tagging.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/features/all/ethernet-microsoft/0023-net-mana-Add-support-for-vlan-tagging.patch')
-rw-r--r--debian/patches/features/all/ethernet-microsoft/0023-net-mana-Add-support-for-vlan-tagging.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/debian/patches/features/all/ethernet-microsoft/0023-net-mana-Add-support-for-vlan-tagging.patch b/debian/patches/features/all/ethernet-microsoft/0023-net-mana-Add-support-for-vlan-tagging.patch
new file mode 100644
index 000000000..74866c088
--- /dev/null
+++ b/debian/patches/features/all/ethernet-microsoft/0023-net-mana-Add-support-for-vlan-tagging.patch
@@ -0,0 +1,67 @@
+From dc801500fea4fd5ddecc4007acffb5716a761f51 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Fri, 9 Jun 2023 05:47:17 -0700
+Subject: [PATCH 23/23] net: mana: Add support for vlan tagging
+
+To support vlan, use MANA_LONG_PKT_FMT if vlan tag is present in TX
+skb. Then extract the vlan tag from the skb struct, and save it to
+tx_oob for the NIC to transmit. For vlan tags on the payload, they
+are accepted by the NIC too.
+
+For RX, extract the vlan tag from CQE and put it into skb.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+(cherry picked from commit b803d1fded4085d268507a432dac8077ead68971)
+Signed-off-by: Bastian Blank <waldi@debian.org>
+---
+ drivers/net/ethernet/microsoft/mana/mana_en.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/microsoft/mana/mana_en.c b/drivers/net/ethernet/microsoft/mana/mana_en.c
+index 25b17213e54d..808dbf55beef 100644
+--- a/drivers/net/ethernet/microsoft/mana/mana_en.c
++++ b/drivers/net/ethernet/microsoft/mana/mana_en.c
+@@ -179,6 +179,14 @@ netdev_tx_t mana_start_xmit(struct sk_buff *skb, struct net_device *ndev)
+ pkg.tx_oob.s_oob.short_vp_offset = txq->vp_offset;
+ }
+
++ if (skb_vlan_tag_present(skb)) {
++ pkt_fmt = MANA_LONG_PKT_FMT;
++ pkg.tx_oob.l_oob.inject_vlan_pri_tag = 1;
++ pkg.tx_oob.l_oob.pcp = skb_vlan_tag_get_prio(skb);
++ pkg.tx_oob.l_oob.dei = skb_vlan_tag_get_cfi(skb);
++ pkg.tx_oob.l_oob.vlan_id = skb_vlan_tag_get_id(skb);
++ }
++
+ pkg.tx_oob.s_oob.pkt_fmt = pkt_fmt;
+
+ if (pkt_fmt == MANA_SHORT_PKT_FMT) {
+@@ -1458,6 +1466,12 @@ static void mana_rx_skb(void *buf_va, struct mana_rxcomp_oob *cqe,
+ skb_set_hash(skb, hash_value, PKT_HASH_TYPE_L3);
+ }
+
++ if (cqe->rx_vlantag_present) {
++ u16 vlan_tci = cqe->rx_vlan_id;
++
++ __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tci);
++ }
++
+ u64_stats_update_begin(&rx_stats->syncp);
+ rx_stats->packets++;
+ rx_stats->bytes += pkt_len;
+@@ -2454,8 +2468,9 @@ static int mana_probe_port(struct mana_context *ac, int port_idx,
+ ndev->hw_features |= NETIF_F_RXCSUM;
+ ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
+ ndev->hw_features |= NETIF_F_RXHASH;
+- ndev->features = ndev->hw_features;
+- ndev->vlan_features = 0;
++ ndev->features = ndev->hw_features | NETIF_F_HW_VLAN_CTAG_TX |
++ NETIF_F_HW_VLAN_CTAG_RX;
++ ndev->vlan_features = ndev->features;
+
+ err = register_netdev(ndev);
+ if (err) {
+--
+2.40.1
+