From: George McCollister <george.mccollister@gmail.com>
To: Andrew Lunn <andrew@lunn.ch>,
Vivien Didelot <vivien.didelot@gmail.com>,
Florian Fainelli <f.fainelli@gmail.com>,
Vladimir Oltean <olteanv@gmail.com>
Cc: "David S . Miller " <davem@davemloft.net>,
netdev@vger.kernel.org, devicetree@vger.kernel.org,
George McCollister <george.mccollister@gmail.com>
Subject: [PATCH net-next v2 1/3] dsa: add support for Arrow XRS700x tag trailer
Date: Wed, 25 Nov 2020 13:37:38 -0600 [thread overview]
Message-ID: <20201125193740.36825-2-george.mccollister@gmail.com> (raw)
In-Reply-To: <20201125193740.36825-1-george.mccollister@gmail.com>
Add support for Arrow SpeedChips XRS700x single byte tag trailer. This
is modeled on tag_trailer.c which works in a similar way.
Signed-off-by: George McCollister <george.mccollister@gmail.com>
---
include/net/dsa.h | 2 ++
net/dsa/Kconfig | 6 +++++
net/dsa/Makefile | 1 +
net/dsa/tag_xrs700x.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 76 insertions(+)
create mode 100644 net/dsa/tag_xrs700x.c
diff --git a/include/net/dsa.h b/include/net/dsa.h
index 2e64e8de4631..eb46ecdcf165 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -46,6 +46,7 @@ struct phylink_link_state;
#define DSA_TAG_PROTO_AR9331_VALUE 16
#define DSA_TAG_PROTO_RTL4_A_VALUE 17
#define DSA_TAG_PROTO_HELLCREEK_VALUE 18
+#define DSA_TAG_PROTO_XRS700X_VALUE 19
enum dsa_tag_protocol {
DSA_TAG_PROTO_NONE = DSA_TAG_PROTO_NONE_VALUE,
@@ -67,6 +68,7 @@ enum dsa_tag_protocol {
DSA_TAG_PROTO_AR9331 = DSA_TAG_PROTO_AR9331_VALUE,
DSA_TAG_PROTO_RTL4_A = DSA_TAG_PROTO_RTL4_A_VALUE,
DSA_TAG_PROTO_HELLCREEK = DSA_TAG_PROTO_HELLCREEK_VALUE,
+ DSA_TAG_PROTO_XRS700X = DSA_TAG_PROTO_XRS700X_VALUE,
};
struct packet_type;
diff --git a/net/dsa/Kconfig b/net/dsa/Kconfig
index dfecd7b22fd7..2d226a5c085f 100644
--- a/net/dsa/Kconfig
+++ b/net/dsa/Kconfig
@@ -139,4 +139,10 @@ config NET_DSA_TAG_TRAILER
Say Y or M if you want to enable support for tagging frames at
with a trailed. e.g. Marvell 88E6060.
+config NET_DSA_TAG_XRS700X
+ tristate "Tag driver for XRS700x switches"
+ help
+ Say Y or M if you want to enable support for tagging frames for
+ Arrow SpeedChips XRS700x switches that use a single byte tag trailer.
+
endif
diff --git a/net/dsa/Makefile b/net/dsa/Makefile
index 0fb2b75a7ae3..92cea2132241 100644
--- a/net/dsa/Makefile
+++ b/net/dsa/Makefile
@@ -18,3 +18,4 @@ obj-$(CONFIG_NET_DSA_TAG_OCELOT) += tag_ocelot.o
obj-$(CONFIG_NET_DSA_TAG_QCA) += tag_qca.o
obj-$(CONFIG_NET_DSA_TAG_SJA1105) += tag_sja1105.o
obj-$(CONFIG_NET_DSA_TAG_TRAILER) += tag_trailer.o
+obj-$(CONFIG_NET_DSA_TAG_XRS700X) += tag_xrs700x.o
diff --git a/net/dsa/tag_xrs700x.c b/net/dsa/tag_xrs700x.c
new file mode 100644
index 000000000000..4ee7c260a8a9
--- /dev/null
+++ b/net/dsa/tag_xrs700x.c
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * XRS700x tag format handling
+ * Copyright (c) 2008-2009 Marvell Semiconductor
+ * Copyright (c) 2020 NovaTech LLC
+ */
+
+#include <linux/etherdevice.h>
+#include <linux/list.h>
+#include <linux/slab.h>
+#include <linux/bitops.h>
+
+#include "dsa_priv.h"
+
+static struct sk_buff *xrs700x_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+ struct dsa_port *dp = dsa_slave_to_port(dev);
+ u8 *trailer;
+
+ trailer = skb_put(skb, 1);
+ trailer[0] = BIT(dp->index);
+
+ return skb;
+}
+
+static struct sk_buff *xrs700x_rcv(struct sk_buff *skb, struct net_device *dev,
+ struct packet_type *pt)
+{
+ int source_port;
+ u8 *trailer;
+
+ if (skb_linearize(skb))
+ return NULL;
+
+ trailer = skb_tail_pointer(skb) - 1;
+
+ source_port = ffs((int)trailer[0]) - 1;
+
+ if (source_port < 0)
+ return NULL;
+
+ skb->dev = dsa_master_find_slave(dev, 0, source_port);
+ if (!skb->dev)
+ return NULL;
+
+ if (pskb_trim_rcsum(skb, skb->len - 1))
+ return NULL;
+
+ /* Frame is forwarded by hardware, don't forward in software. */
+ skb->offload_fwd_mark = 1;
+
+ return skb;
+}
+
+static const struct dsa_device_ops xrs700x_netdev_ops = {
+ .name = "xrs700x",
+ .proto = DSA_TAG_PROTO_XRS700X,
+ .xmit = xrs700x_xmit,
+ .rcv = xrs700x_rcv,
+ .overhead = 1,
+ .tail_tag = true,
+};
+
+MODULE_LICENSE("GPL");
+MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_XRS700X);
+
+module_dsa_tag_driver(xrs700x_netdev_ops);
--
2.11.0
next prev parent reply other threads:[~2020-11-25 19:38 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-25 19:37 [PATCH net-next v2 0/3] Arrow SpeedChips XRS700x DSA Driver George McCollister
2020-11-25 19:37 ` George McCollister [this message]
2020-11-25 20:34 ` [PATCH net-next v2 1/3] dsa: add support for Arrow XRS700x tag trailer Andrew Lunn
2020-11-26 13:50 ` Vladimir Oltean
2020-11-26 14:01 ` Andrew Lunn
2020-11-26 14:28 ` Vladimir Oltean
2020-11-25 20:34 ` Andrew Lunn
2020-11-26 1:31 ` Florian Fainelli
2020-11-25 19:37 ` [PATCH net-next v2 2/3] net: dsa: add Arrow SpeedChips XRS700x driver George McCollister
2020-11-26 1:42 ` Jakub Kicinski
2020-11-26 2:25 ` George McCollister
2020-11-26 13:24 ` Vladimir Oltean
2020-11-26 17:56 ` Vladimir Oltean
2020-11-26 19:07 ` George McCollister
2020-11-26 22:05 ` Vladimir Oltean
2020-11-27 18:35 ` Jakub Kicinski
[not found] ` <CAFSKS=MAdnR2jzmkQfTnSQZ7GY5x5KJE=oeqPCQdbZdf5n=4ZQ@mail.gmail.com>
2020-11-27 19:50 ` Vladimir Oltean
2020-11-27 20:58 ` George McCollister
2020-11-27 21:37 ` Jakub Kicinski
2020-11-27 22:42 ` Vladimir Oltean
2020-11-27 23:21 ` Vladimir Oltean
2020-11-27 23:51 ` Jakub Kicinski
2020-11-27 23:30 ` Andrew Lunn
2020-11-27 23:39 ` Vladimir Oltean
2020-11-27 23:56 ` Jakub Kicinski
2020-11-28 1:45 ` Vladimir Oltean
2020-11-28 0:02 ` Vladimir Oltean
2020-11-28 0:39 ` Andrew Lunn
2020-11-28 1:41 ` Vladimir Oltean
2020-11-28 2:15 ` Jakub Kicinski
2020-11-30 16:52 ` George McCollister
2020-11-30 23:50 ` Vladimir Oltean
2020-11-30 23:58 ` George McCollister
2020-12-01 0:19 ` Vladimir Oltean
2020-11-27 20:47 ` Andrew Lunn
2020-11-27 21:13 ` Jakub Kicinski
2020-11-27 21:23 ` Vladimir Oltean
2020-11-27 21:36 ` Andrew Lunn
2020-12-02 0:28 ` Vladimir Oltean
2020-12-02 0:54 ` Jakub Kicinski
2020-11-27 22:03 ` Jakub Kicinski
2020-11-27 21:32 ` Andrew Lunn
2020-11-27 22:14 ` Jakub Kicinski
2020-11-27 22:46 ` Andrew Lunn
2020-11-25 19:37 ` [PATCH net-next v2 3/3] dt-bindings: net: dsa: add bindings for xrs700x switches George McCollister
2020-11-26 1:30 ` Florian Fainelli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201125193740.36825-2-george.mccollister@gmail.com \
--to=george.mccollister@gmail.com \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=f.fainelli@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=vivien.didelot@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.