Commit 94793a56 authored by Vladimir Oltean's avatar Vladimir Oltean Committed by Jakub Kicinski

net: dsa: provide a second modalias to tag proto drivers based on their name

Currently, tagging protocol drivers have a modalias of
"dsa_tag:id-<number>", where the number is one of DSA_TAG_PROTO_*_VALUE.

This modalias makes it possible for the request_module() call in
dsa_tag_driver_get() to work, given the input it has - an integer
returned by ds->ops->get_tag_protocol().

It is also possible to change tagging protocols at (pseudo-)runtime, via
sysfs or via device tree, and this works via the name string of the
tagging protocol rather than via its id (DSA_TAG_PROTO_*_VALUE).

In the latter case, there is no request_module() call, because there is
no association that the DSA core has between the string name and the ID,
to construct the modalias. The module is simply assumed to have been
inserted. This is actually slightly problematic when the tagging
protocol change should take place at probe time, since it's expected
that the dependency module should get autoloaded.

For this purpose, let's introduce a second modalias, so that the DSA
core can call request_module() by name. There is no reason to make the
modalias by name optional, so just modify the MODULE_ALIAS_DSA_TAG_DRIVER()
macro to take both the ID and the name as arguments, and generate two
modaliases behind the scenes.
Suggested-by: default avatarMichael Walle <michael@walle.cc>
Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Tested-by: Michael Walle <michael@walle.cc> # on kontron-sl28 w/ ocelot_8021q
Tested-by: default avatarMichael Walle <michael@walle.cc>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 2610937d
...@@ -17,8 +17,12 @@ ...@@ -17,8 +17,12 @@
#define DSA_MAX_NUM_OFFLOADING_BRIDGES BITS_PER_LONG #define DSA_MAX_NUM_OFFLOADING_BRIDGES BITS_PER_LONG
/* Create 2 modaliases per tagging protocol, one to auto-load the module
* given the ID reported by get_tag_protocol(), and the other by name.
*/
#define DSA_TAG_DRIVER_ALIAS "dsa_tag:" #define DSA_TAG_DRIVER_ALIAS "dsa_tag:"
#define MODULE_ALIAS_DSA_TAG_DRIVER(__proto) \ #define MODULE_ALIAS_DSA_TAG_DRIVER(__proto, __name) \
MODULE_ALIAS(DSA_TAG_DRIVER_ALIAS __name); \
MODULE_ALIAS(DSA_TAG_DRIVER_ALIAS "id-" \ MODULE_ALIAS(DSA_TAG_DRIVER_ALIAS "id-" \
__stringify(__proto##_VALUE)) __stringify(__proto##_VALUE))
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include "dsa_priv.h" #include "dsa_priv.h"
#define AR9331_NAME "ar9331"
#define AR9331_HDR_LEN 2 #define AR9331_HDR_LEN 2
#define AR9331_HDR_VERSION 1 #define AR9331_HDR_VERSION 1
...@@ -80,7 +82,7 @@ static struct sk_buff *ar9331_tag_rcv(struct sk_buff *skb, ...@@ -80,7 +82,7 @@ static struct sk_buff *ar9331_tag_rcv(struct sk_buff *skb,
} }
static const struct dsa_device_ops ar9331_netdev_ops = { static const struct dsa_device_ops ar9331_netdev_ops = {
.name = "ar9331", .name = AR9331_NAME,
.proto = DSA_TAG_PROTO_AR9331, .proto = DSA_TAG_PROTO_AR9331,
.xmit = ar9331_tag_xmit, .xmit = ar9331_tag_xmit,
.rcv = ar9331_tag_rcv, .rcv = ar9331_tag_rcv,
...@@ -88,5 +90,5 @@ static const struct dsa_device_ops ar9331_netdev_ops = { ...@@ -88,5 +90,5 @@ static const struct dsa_device_ops ar9331_netdev_ops = {
}; };
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_AR9331); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_AR9331, AR9331_NAME);
module_dsa_tag_driver(ar9331_netdev_ops); module_dsa_tag_driver(ar9331_netdev_ops);
...@@ -12,6 +12,10 @@ ...@@ -12,6 +12,10 @@
#include "dsa_priv.h" #include "dsa_priv.h"
#define BRCM_NAME "brcm"
#define BRCM_LEGACY_NAME "brcm-legacy"
#define BRCM_PREPEND_NAME "brcm-prepend"
/* Legacy Broadcom tag (6 bytes) */ /* Legacy Broadcom tag (6 bytes) */
#define BRCM_LEG_TAG_LEN 6 #define BRCM_LEG_TAG_LEN 6
...@@ -196,7 +200,7 @@ static struct sk_buff *brcm_tag_rcv(struct sk_buff *skb, struct net_device *dev) ...@@ -196,7 +200,7 @@ static struct sk_buff *brcm_tag_rcv(struct sk_buff *skb, struct net_device *dev)
} }
static const struct dsa_device_ops brcm_netdev_ops = { static const struct dsa_device_ops brcm_netdev_ops = {
.name = "brcm", .name = BRCM_NAME,
.proto = DSA_TAG_PROTO_BRCM, .proto = DSA_TAG_PROTO_BRCM,
.xmit = brcm_tag_xmit, .xmit = brcm_tag_xmit,
.rcv = brcm_tag_rcv, .rcv = brcm_tag_rcv,
...@@ -204,7 +208,7 @@ static const struct dsa_device_ops brcm_netdev_ops = { ...@@ -204,7 +208,7 @@ static const struct dsa_device_ops brcm_netdev_ops = {
}; };
DSA_TAG_DRIVER(brcm_netdev_ops); DSA_TAG_DRIVER(brcm_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_BRCM); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_BRCM, BRCM_NAME);
#endif #endif
#if IS_ENABLED(CONFIG_NET_DSA_TAG_BRCM_LEGACY) #if IS_ENABLED(CONFIG_NET_DSA_TAG_BRCM_LEGACY)
...@@ -273,7 +277,7 @@ static struct sk_buff *brcm_leg_tag_rcv(struct sk_buff *skb, ...@@ -273,7 +277,7 @@ static struct sk_buff *brcm_leg_tag_rcv(struct sk_buff *skb,
} }
static const struct dsa_device_ops brcm_legacy_netdev_ops = { static const struct dsa_device_ops brcm_legacy_netdev_ops = {
.name = "brcm-legacy", .name = BRCM_LEGACY_NAME,
.proto = DSA_TAG_PROTO_BRCM_LEGACY, .proto = DSA_TAG_PROTO_BRCM_LEGACY,
.xmit = brcm_leg_tag_xmit, .xmit = brcm_leg_tag_xmit,
.rcv = brcm_leg_tag_rcv, .rcv = brcm_leg_tag_rcv,
...@@ -281,7 +285,7 @@ static const struct dsa_device_ops brcm_legacy_netdev_ops = { ...@@ -281,7 +285,7 @@ static const struct dsa_device_ops brcm_legacy_netdev_ops = {
}; };
DSA_TAG_DRIVER(brcm_legacy_netdev_ops); DSA_TAG_DRIVER(brcm_legacy_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_BRCM_LEGACY); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_BRCM_LEGACY, BRCM_LEGACY_NAME);
#endif /* CONFIG_NET_DSA_TAG_BRCM_LEGACY */ #endif /* CONFIG_NET_DSA_TAG_BRCM_LEGACY */
#if IS_ENABLED(CONFIG_NET_DSA_TAG_BRCM_PREPEND) #if IS_ENABLED(CONFIG_NET_DSA_TAG_BRCM_PREPEND)
...@@ -300,7 +304,7 @@ static struct sk_buff *brcm_tag_rcv_prepend(struct sk_buff *skb, ...@@ -300,7 +304,7 @@ static struct sk_buff *brcm_tag_rcv_prepend(struct sk_buff *skb,
} }
static const struct dsa_device_ops brcm_prepend_netdev_ops = { static const struct dsa_device_ops brcm_prepend_netdev_ops = {
.name = "brcm-prepend", .name = BRCM_PREPEND_NAME,
.proto = DSA_TAG_PROTO_BRCM_PREPEND, .proto = DSA_TAG_PROTO_BRCM_PREPEND,
.xmit = brcm_tag_xmit_prepend, .xmit = brcm_tag_xmit_prepend,
.rcv = brcm_tag_rcv_prepend, .rcv = brcm_tag_rcv_prepend,
...@@ -308,7 +312,7 @@ static const struct dsa_device_ops brcm_prepend_netdev_ops = { ...@@ -308,7 +312,7 @@ static const struct dsa_device_ops brcm_prepend_netdev_ops = {
}; };
DSA_TAG_DRIVER(brcm_prepend_netdev_ops); DSA_TAG_DRIVER(brcm_prepend_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_BRCM_PREPEND); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_BRCM_PREPEND, BRCM_PREPEND_NAME);
#endif #endif
static struct dsa_tag_driver *dsa_tag_driver_array[] = { static struct dsa_tag_driver *dsa_tag_driver_array[] = {
......
...@@ -52,6 +52,9 @@ ...@@ -52,6 +52,9 @@
#include "dsa_priv.h" #include "dsa_priv.h"
#define DSA_NAME "dsa"
#define EDSA_NAME "edsa"
#define DSA_HLEN 4 #define DSA_HLEN 4
/** /**
...@@ -339,7 +342,7 @@ static struct sk_buff *dsa_rcv(struct sk_buff *skb, struct net_device *dev) ...@@ -339,7 +342,7 @@ static struct sk_buff *dsa_rcv(struct sk_buff *skb, struct net_device *dev)
} }
static const struct dsa_device_ops dsa_netdev_ops = { static const struct dsa_device_ops dsa_netdev_ops = {
.name = "dsa", .name = DSA_NAME,
.proto = DSA_TAG_PROTO_DSA, .proto = DSA_TAG_PROTO_DSA,
.xmit = dsa_xmit, .xmit = dsa_xmit,
.rcv = dsa_rcv, .rcv = dsa_rcv,
...@@ -347,7 +350,7 @@ static const struct dsa_device_ops dsa_netdev_ops = { ...@@ -347,7 +350,7 @@ static const struct dsa_device_ops dsa_netdev_ops = {
}; };
DSA_TAG_DRIVER(dsa_netdev_ops); DSA_TAG_DRIVER(dsa_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_DSA); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_DSA, DSA_NAME);
#endif /* CONFIG_NET_DSA_TAG_DSA */ #endif /* CONFIG_NET_DSA_TAG_DSA */
#if IS_ENABLED(CONFIG_NET_DSA_TAG_EDSA) #if IS_ENABLED(CONFIG_NET_DSA_TAG_EDSA)
...@@ -381,7 +384,7 @@ static struct sk_buff *edsa_rcv(struct sk_buff *skb, struct net_device *dev) ...@@ -381,7 +384,7 @@ static struct sk_buff *edsa_rcv(struct sk_buff *skb, struct net_device *dev)
} }
static const struct dsa_device_ops edsa_netdev_ops = { static const struct dsa_device_ops edsa_netdev_ops = {
.name = "edsa", .name = EDSA_NAME,
.proto = DSA_TAG_PROTO_EDSA, .proto = DSA_TAG_PROTO_EDSA,
.xmit = edsa_xmit, .xmit = edsa_xmit,
.rcv = edsa_rcv, .rcv = edsa_rcv,
...@@ -389,7 +392,7 @@ static const struct dsa_device_ops edsa_netdev_ops = { ...@@ -389,7 +392,7 @@ static const struct dsa_device_ops edsa_netdev_ops = {
}; };
DSA_TAG_DRIVER(edsa_netdev_ops); DSA_TAG_DRIVER(edsa_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_EDSA); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_EDSA, EDSA_NAME);
#endif /* CONFIG_NET_DSA_TAG_EDSA */ #endif /* CONFIG_NET_DSA_TAG_EDSA */
static struct dsa_tag_driver *dsa_tag_drivers[] = { static struct dsa_tag_driver *dsa_tag_drivers[] = {
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include "dsa_priv.h" #include "dsa_priv.h"
#define GSWIP_NAME "gswip"
#define GSWIP_TX_HEADER_LEN 4 #define GSWIP_TX_HEADER_LEN 4
/* special tag in TX path header */ /* special tag in TX path header */
...@@ -98,7 +100,7 @@ static struct sk_buff *gswip_tag_rcv(struct sk_buff *skb, ...@@ -98,7 +100,7 @@ static struct sk_buff *gswip_tag_rcv(struct sk_buff *skb,
} }
static const struct dsa_device_ops gswip_netdev_ops = { static const struct dsa_device_ops gswip_netdev_ops = {
.name = "gswip", .name = GSWIP_NAME,
.proto = DSA_TAG_PROTO_GSWIP, .proto = DSA_TAG_PROTO_GSWIP,
.xmit = gswip_tag_xmit, .xmit = gswip_tag_xmit,
.rcv = gswip_tag_rcv, .rcv = gswip_tag_rcv,
...@@ -106,6 +108,6 @@ static const struct dsa_device_ops gswip_netdev_ops = { ...@@ -106,6 +108,6 @@ static const struct dsa_device_ops gswip_netdev_ops = {
}; };
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_GSWIP); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_GSWIP, GSWIP_NAME);
module_dsa_tag_driver(gswip_netdev_ops); module_dsa_tag_driver(gswip_netdev_ops);
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include "dsa_priv.h" #include "dsa_priv.h"
#define HELLCREEK_NAME "hellcreek"
#define HELLCREEK_TAG_LEN 1 #define HELLCREEK_TAG_LEN 1
static struct sk_buff *hellcreek_xmit(struct sk_buff *skb, static struct sk_buff *hellcreek_xmit(struct sk_buff *skb,
...@@ -57,7 +59,7 @@ static struct sk_buff *hellcreek_rcv(struct sk_buff *skb, ...@@ -57,7 +59,7 @@ static struct sk_buff *hellcreek_rcv(struct sk_buff *skb,
} }
static const struct dsa_device_ops hellcreek_netdev_ops = { static const struct dsa_device_ops hellcreek_netdev_ops = {
.name = "hellcreek", .name = HELLCREEK_NAME,
.proto = DSA_TAG_PROTO_HELLCREEK, .proto = DSA_TAG_PROTO_HELLCREEK,
.xmit = hellcreek_xmit, .xmit = hellcreek_xmit,
.rcv = hellcreek_rcv, .rcv = hellcreek_rcv,
...@@ -65,6 +67,6 @@ static const struct dsa_device_ops hellcreek_netdev_ops = { ...@@ -65,6 +67,6 @@ static const struct dsa_device_ops hellcreek_netdev_ops = {
}; };
MODULE_LICENSE("Dual MIT/GPL"); MODULE_LICENSE("Dual MIT/GPL");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_HELLCREEK); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_HELLCREEK, HELLCREEK_NAME);
module_dsa_tag_driver(hellcreek_netdev_ops); module_dsa_tag_driver(hellcreek_netdev_ops);
...@@ -9,6 +9,11 @@ ...@@ -9,6 +9,11 @@
#include <net/dsa.h> #include <net/dsa.h>
#include "dsa_priv.h" #include "dsa_priv.h"
#define KSZ8795_NAME "ksz8795"
#define KSZ9477_NAME "ksz9477"
#define KSZ9893_NAME "ksz9893"
#define LAN937X_NAME "lan937x"
/* Typically only one byte is used for tail tag. */ /* Typically only one byte is used for tail tag. */
#define KSZ_EGRESS_TAG_LEN 1 #define KSZ_EGRESS_TAG_LEN 1
#define KSZ_INGRESS_TAG_LEN 1 #define KSZ_INGRESS_TAG_LEN 1
...@@ -74,7 +79,7 @@ static struct sk_buff *ksz8795_rcv(struct sk_buff *skb, struct net_device *dev) ...@@ -74,7 +79,7 @@ static struct sk_buff *ksz8795_rcv(struct sk_buff *skb, struct net_device *dev)
} }
static const struct dsa_device_ops ksz8795_netdev_ops = { static const struct dsa_device_ops ksz8795_netdev_ops = {
.name = "ksz8795", .name = KSZ8795_NAME,
.proto = DSA_TAG_PROTO_KSZ8795, .proto = DSA_TAG_PROTO_KSZ8795,
.xmit = ksz8795_xmit, .xmit = ksz8795_xmit,
.rcv = ksz8795_rcv, .rcv = ksz8795_rcv,
...@@ -82,7 +87,7 @@ static const struct dsa_device_ops ksz8795_netdev_ops = { ...@@ -82,7 +87,7 @@ static const struct dsa_device_ops ksz8795_netdev_ops = {
}; };
DSA_TAG_DRIVER(ksz8795_netdev_ops); DSA_TAG_DRIVER(ksz8795_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_KSZ8795); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_KSZ8795, KSZ8795_NAME);
/* /*
* For Ingress (Host -> KSZ9477), 2 bytes are added before FCS. * For Ingress (Host -> KSZ9477), 2 bytes are added before FCS.
...@@ -147,7 +152,7 @@ static struct sk_buff *ksz9477_rcv(struct sk_buff *skb, struct net_device *dev) ...@@ -147,7 +152,7 @@ static struct sk_buff *ksz9477_rcv(struct sk_buff *skb, struct net_device *dev)
} }
static const struct dsa_device_ops ksz9477_netdev_ops = { static const struct dsa_device_ops ksz9477_netdev_ops = {
.name = "ksz9477", .name = KSZ9477_NAME,
.proto = DSA_TAG_PROTO_KSZ9477, .proto = DSA_TAG_PROTO_KSZ9477,
.xmit = ksz9477_xmit, .xmit = ksz9477_xmit,
.rcv = ksz9477_rcv, .rcv = ksz9477_rcv,
...@@ -155,7 +160,7 @@ static const struct dsa_device_ops ksz9477_netdev_ops = { ...@@ -155,7 +160,7 @@ static const struct dsa_device_ops ksz9477_netdev_ops = {
}; };
DSA_TAG_DRIVER(ksz9477_netdev_ops); DSA_TAG_DRIVER(ksz9477_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_KSZ9477); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_KSZ9477, KSZ9477_NAME);
#define KSZ9893_TAIL_TAG_OVERRIDE BIT(5) #define KSZ9893_TAIL_TAG_OVERRIDE BIT(5)
#define KSZ9893_TAIL_TAG_LOOKUP BIT(6) #define KSZ9893_TAIL_TAG_LOOKUP BIT(6)
...@@ -183,7 +188,7 @@ static struct sk_buff *ksz9893_xmit(struct sk_buff *skb, ...@@ -183,7 +188,7 @@ static struct sk_buff *ksz9893_xmit(struct sk_buff *skb,
} }
static const struct dsa_device_ops ksz9893_netdev_ops = { static const struct dsa_device_ops ksz9893_netdev_ops = {
.name = "ksz9893", .name = KSZ9893_NAME,
.proto = DSA_TAG_PROTO_KSZ9893, .proto = DSA_TAG_PROTO_KSZ9893,
.xmit = ksz9893_xmit, .xmit = ksz9893_xmit,
.rcv = ksz9477_rcv, .rcv = ksz9477_rcv,
...@@ -191,7 +196,7 @@ static const struct dsa_device_ops ksz9893_netdev_ops = { ...@@ -191,7 +196,7 @@ static const struct dsa_device_ops ksz9893_netdev_ops = {
}; };
DSA_TAG_DRIVER(ksz9893_netdev_ops); DSA_TAG_DRIVER(ksz9893_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_KSZ9893); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_KSZ9893, KSZ9893_NAME);
/* For xmit, 2 bytes are added before FCS. /* For xmit, 2 bytes are added before FCS.
* --------------------------------------------------------------------------- * ---------------------------------------------------------------------------
...@@ -241,7 +246,7 @@ static struct sk_buff *lan937x_xmit(struct sk_buff *skb, ...@@ -241,7 +246,7 @@ static struct sk_buff *lan937x_xmit(struct sk_buff *skb,
} }
static const struct dsa_device_ops lan937x_netdev_ops = { static const struct dsa_device_ops lan937x_netdev_ops = {
.name = "lan937x", .name = LAN937X_NAME,
.proto = DSA_TAG_PROTO_LAN937X, .proto = DSA_TAG_PROTO_LAN937X,
.xmit = lan937x_xmit, .xmit = lan937x_xmit,
.rcv = ksz9477_rcv, .rcv = ksz9477_rcv,
...@@ -249,7 +254,7 @@ static const struct dsa_device_ops lan937x_netdev_ops = { ...@@ -249,7 +254,7 @@ static const struct dsa_device_ops lan937x_netdev_ops = {
}; };
DSA_TAG_DRIVER(lan937x_netdev_ops); DSA_TAG_DRIVER(lan937x_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_LAN937X); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_LAN937X, LAN937X_NAME);
static struct dsa_tag_driver *dsa_tag_driver_array[] = { static struct dsa_tag_driver *dsa_tag_driver_array[] = {
&DSA_TAG_DRIVER_NAME(ksz8795_netdev_ops), &DSA_TAG_DRIVER_NAME(ksz8795_netdev_ops),
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
* Required when no forwarding between the external ports should happen. * Required when no forwarding between the external ports should happen.
*/ */
#define LAN9303_NAME "lan9303"
#define LAN9303_TAG_LEN 4 #define LAN9303_TAG_LEN 4
# define LAN9303_TAG_TX_USE_ALR BIT(3) # define LAN9303_TAG_TX_USE_ALR BIT(3)
# define LAN9303_TAG_TX_STP_OVERRIDE BIT(4) # define LAN9303_TAG_TX_STP_OVERRIDE BIT(4)
...@@ -110,7 +112,7 @@ static struct sk_buff *lan9303_rcv(struct sk_buff *skb, struct net_device *dev) ...@@ -110,7 +112,7 @@ static struct sk_buff *lan9303_rcv(struct sk_buff *skb, struct net_device *dev)
} }
static const struct dsa_device_ops lan9303_netdev_ops = { static const struct dsa_device_ops lan9303_netdev_ops = {
.name = "lan9303", .name = LAN9303_NAME,
.proto = DSA_TAG_PROTO_LAN9303, .proto = DSA_TAG_PROTO_LAN9303,
.xmit = lan9303_xmit, .xmit = lan9303_xmit,
.rcv = lan9303_rcv, .rcv = lan9303_rcv,
...@@ -118,6 +120,6 @@ static const struct dsa_device_ops lan9303_netdev_ops = { ...@@ -118,6 +120,6 @@ static const struct dsa_device_ops lan9303_netdev_ops = {
}; };
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_LAN9303); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_LAN9303, LAN9303_NAME);
module_dsa_tag_driver(lan9303_netdev_ops); module_dsa_tag_driver(lan9303_netdev_ops);
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
#include "dsa_priv.h" #include "dsa_priv.h"
#define MTK_NAME "mtk"
#define MTK_HDR_LEN 4 #define MTK_HDR_LEN 4
#define MTK_HDR_XMIT_UNTAGGED 0 #define MTK_HDR_XMIT_UNTAGGED 0
#define MTK_HDR_XMIT_TAGGED_TPID_8100 1 #define MTK_HDR_XMIT_TAGGED_TPID_8100 1
...@@ -91,7 +93,7 @@ static struct sk_buff *mtk_tag_rcv(struct sk_buff *skb, struct net_device *dev) ...@@ -91,7 +93,7 @@ static struct sk_buff *mtk_tag_rcv(struct sk_buff *skb, struct net_device *dev)
} }
static const struct dsa_device_ops mtk_netdev_ops = { static const struct dsa_device_ops mtk_netdev_ops = {
.name = "mtk", .name = MTK_NAME,
.proto = DSA_TAG_PROTO_MTK, .proto = DSA_TAG_PROTO_MTK,
.xmit = mtk_tag_xmit, .xmit = mtk_tag_xmit,
.rcv = mtk_tag_rcv, .rcv = mtk_tag_rcv,
...@@ -99,6 +101,6 @@ static const struct dsa_device_ops mtk_netdev_ops = { ...@@ -99,6 +101,6 @@ static const struct dsa_device_ops mtk_netdev_ops = {
}; };
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_MTK); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_MTK, MTK_NAME);
module_dsa_tag_driver(mtk_netdev_ops); module_dsa_tag_driver(mtk_netdev_ops);
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
#include <linux/dsa/ocelot.h> #include <linux/dsa/ocelot.h>
#include "dsa_priv.h" #include "dsa_priv.h"
#define OCELOT_NAME "ocelot"
#define SEVILLE_NAME "seville"
/* If the port is under a VLAN-aware bridge, remove the VLAN header from the /* If the port is under a VLAN-aware bridge, remove the VLAN header from the
* payload and move it into the DSA tag, which will make the switch classify * payload and move it into the DSA tag, which will make the switch classify
* the packet to the bridge VLAN. Otherwise, leave the classified VLAN at zero, * the packet to the bridge VLAN. Otherwise, leave the classified VLAN at zero,
...@@ -183,7 +186,7 @@ static struct sk_buff *ocelot_rcv(struct sk_buff *skb, ...@@ -183,7 +186,7 @@ static struct sk_buff *ocelot_rcv(struct sk_buff *skb,
} }
static const struct dsa_device_ops ocelot_netdev_ops = { static const struct dsa_device_ops ocelot_netdev_ops = {
.name = "ocelot", .name = OCELOT_NAME,
.proto = DSA_TAG_PROTO_OCELOT, .proto = DSA_TAG_PROTO_OCELOT,
.xmit = ocelot_xmit, .xmit = ocelot_xmit,
.rcv = ocelot_rcv, .rcv = ocelot_rcv,
...@@ -192,10 +195,10 @@ static const struct dsa_device_ops ocelot_netdev_ops = { ...@@ -192,10 +195,10 @@ static const struct dsa_device_ops ocelot_netdev_ops = {
}; };
DSA_TAG_DRIVER(ocelot_netdev_ops); DSA_TAG_DRIVER(ocelot_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_OCELOT); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_OCELOT, OCELOT_NAME);
static const struct dsa_device_ops seville_netdev_ops = { static const struct dsa_device_ops seville_netdev_ops = {
.name = "seville", .name = SEVILLE_NAME,
.proto = DSA_TAG_PROTO_SEVILLE, .proto = DSA_TAG_PROTO_SEVILLE,
.xmit = seville_xmit, .xmit = seville_xmit,
.rcv = ocelot_rcv, .rcv = ocelot_rcv,
...@@ -204,7 +207,7 @@ static const struct dsa_device_ops seville_netdev_ops = { ...@@ -204,7 +207,7 @@ static const struct dsa_device_ops seville_netdev_ops = {
}; };
DSA_TAG_DRIVER(seville_netdev_ops); DSA_TAG_DRIVER(seville_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_SEVILLE); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_SEVILLE, SEVILLE_NAME);
static struct dsa_tag_driver *ocelot_tag_driver_array[] = { static struct dsa_tag_driver *ocelot_tag_driver_array[] = {
&DSA_TAG_DRIVER_NAME(ocelot_netdev_ops), &DSA_TAG_DRIVER_NAME(ocelot_netdev_ops),
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
#include <linux/dsa/ocelot.h> #include <linux/dsa/ocelot.h>
#include "dsa_priv.h" #include "dsa_priv.h"
#define OCELOT_8021Q_NAME "ocelot-8021q"
struct ocelot_8021q_tagger_private { struct ocelot_8021q_tagger_private {
struct ocelot_8021q_tagger_data data; /* Must be first */ struct ocelot_8021q_tagger_data data; /* Must be first */
struct kthread_worker *xmit_worker; struct kthread_worker *xmit_worker;
...@@ -119,7 +121,7 @@ static int ocelot_connect(struct dsa_switch *ds) ...@@ -119,7 +121,7 @@ static int ocelot_connect(struct dsa_switch *ds)
} }
static const struct dsa_device_ops ocelot_8021q_netdev_ops = { static const struct dsa_device_ops ocelot_8021q_netdev_ops = {
.name = "ocelot-8021q", .name = OCELOT_8021Q_NAME,
.proto = DSA_TAG_PROTO_OCELOT_8021Q, .proto = DSA_TAG_PROTO_OCELOT_8021Q,
.xmit = ocelot_xmit, .xmit = ocelot_xmit,
.rcv = ocelot_rcv, .rcv = ocelot_rcv,
...@@ -130,6 +132,6 @@ static const struct dsa_device_ops ocelot_8021q_netdev_ops = { ...@@ -130,6 +132,6 @@ static const struct dsa_device_ops ocelot_8021q_netdev_ops = {
}; };
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_OCELOT_8021Q); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_OCELOT_8021Q, OCELOT_8021Q_NAME);
module_dsa_tag_driver(ocelot_8021q_netdev_ops); module_dsa_tag_driver(ocelot_8021q_netdev_ops);
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
#include "dsa_priv.h" #include "dsa_priv.h"
#define QCA_NAME "qca"
static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev) static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev)
{ {
struct dsa_port *dp = dsa_slave_to_port(dev); struct dsa_port *dp = dsa_slave_to_port(dev);
...@@ -107,7 +109,7 @@ static void qca_tag_disconnect(struct dsa_switch *ds) ...@@ -107,7 +109,7 @@ static void qca_tag_disconnect(struct dsa_switch *ds)
} }
static const struct dsa_device_ops qca_netdev_ops = { static const struct dsa_device_ops qca_netdev_ops = {
.name = "qca", .name = QCA_NAME,
.proto = DSA_TAG_PROTO_QCA, .proto = DSA_TAG_PROTO_QCA,
.connect = qca_tag_connect, .connect = qca_tag_connect,
.disconnect = qca_tag_disconnect, .disconnect = qca_tag_disconnect,
...@@ -118,6 +120,6 @@ static const struct dsa_device_ops qca_netdev_ops = { ...@@ -118,6 +120,6 @@ static const struct dsa_device_ops qca_netdev_ops = {
}; };
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_QCA); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_QCA, QCA_NAME);
module_dsa_tag_driver(qca_netdev_ops); module_dsa_tag_driver(qca_netdev_ops);
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
#include "dsa_priv.h" #include "dsa_priv.h"
#define RTL4_A_NAME "rtl4a"
#define RTL4_A_HDR_LEN 4 #define RTL4_A_HDR_LEN 4
#define RTL4_A_ETHERTYPE 0x8899 #define RTL4_A_ETHERTYPE 0x8899
#define RTL4_A_PROTOCOL_SHIFT 12 #define RTL4_A_PROTOCOL_SHIFT 12
...@@ -112,7 +114,7 @@ static struct sk_buff *rtl4a_tag_rcv(struct sk_buff *skb, ...@@ -112,7 +114,7 @@ static struct sk_buff *rtl4a_tag_rcv(struct sk_buff *skb,
} }
static const struct dsa_device_ops rtl4a_netdev_ops = { static const struct dsa_device_ops rtl4a_netdev_ops = {
.name = "rtl4a", .name = RTL4_A_NAME,
.proto = DSA_TAG_PROTO_RTL4_A, .proto = DSA_TAG_PROTO_RTL4_A,
.xmit = rtl4a_tag_xmit, .xmit = rtl4a_tag_xmit,
.rcv = rtl4a_tag_rcv, .rcv = rtl4a_tag_rcv,
...@@ -121,4 +123,4 @@ static const struct dsa_device_ops rtl4a_netdev_ops = { ...@@ -121,4 +123,4 @@ static const struct dsa_device_ops rtl4a_netdev_ops = {
module_dsa_tag_driver(rtl4a_netdev_ops); module_dsa_tag_driver(rtl4a_netdev_ops);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_RTL4_A); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_RTL4_A, RTL4_A_NAME);
...@@ -84,6 +84,9 @@ ...@@ -84,6 +84,9 @@
* 0x04 = RTL8365MB DSA protocol * 0x04 = RTL8365MB DSA protocol
*/ */
#define RTL8_4_NAME "rtl8_4"
#define RTL8_4T_NAME "rtl8_4t"
#define RTL8_4_TAG_LEN 8 #define RTL8_4_TAG_LEN 8
#define RTL8_4_PROTOCOL GENMASK(15, 8) #define RTL8_4_PROTOCOL GENMASK(15, 8)
...@@ -234,7 +237,7 @@ static const struct dsa_device_ops rtl8_4_netdev_ops = { ...@@ -234,7 +237,7 @@ static const struct dsa_device_ops rtl8_4_netdev_ops = {
DSA_TAG_DRIVER(rtl8_4_netdev_ops); DSA_TAG_DRIVER(rtl8_4_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_RTL8_4); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_RTL8_4, RTL8_4_NAME);
/* Tail version */ /* Tail version */
static const struct dsa_device_ops rtl8_4t_netdev_ops = { static const struct dsa_device_ops rtl8_4t_netdev_ops = {
...@@ -247,7 +250,7 @@ static const struct dsa_device_ops rtl8_4t_netdev_ops = { ...@@ -247,7 +250,7 @@ static const struct dsa_device_ops rtl8_4t_netdev_ops = {
DSA_TAG_DRIVER(rtl8_4t_netdev_ops); DSA_TAG_DRIVER(rtl8_4t_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_RTL8_4T); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_RTL8_4T, RTL8_4T_NAME);
static struct dsa_tag_driver *dsa_tag_drivers[] = { static struct dsa_tag_driver *dsa_tag_drivers[] = {
&DSA_TAG_DRIVER_NAME(rtl8_4_netdev_ops), &DSA_TAG_DRIVER_NAME(rtl8_4_netdev_ops),
......
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
* See struct a5psw_tag for layout * See struct a5psw_tag for layout
*/ */
#define A5PSW_NAME "a5psw"
#define ETH_P_DSA_A5PSW 0xE001 #define ETH_P_DSA_A5PSW 0xE001
#define A5PSW_TAG_LEN 8 #define A5PSW_TAG_LEN 8
#define A5PSW_CTRL_DATA_FORCE_FORWARD BIT(0) #define A5PSW_CTRL_DATA_FORCE_FORWARD BIT(0)
...@@ -101,7 +103,7 @@ static struct sk_buff *a5psw_tag_rcv(struct sk_buff *skb, ...@@ -101,7 +103,7 @@ static struct sk_buff *a5psw_tag_rcv(struct sk_buff *skb,
} }
static const struct dsa_device_ops a5psw_netdev_ops = { static const struct dsa_device_ops a5psw_netdev_ops = {
.name = "a5psw", .name = A5PSW_NAME,
.proto = DSA_TAG_PROTO_RZN1_A5PSW, .proto = DSA_TAG_PROTO_RZN1_A5PSW,
.xmit = a5psw_tag_xmit, .xmit = a5psw_tag_xmit,
.rcv = a5psw_tag_rcv, .rcv = a5psw_tag_rcv,
...@@ -109,5 +111,5 @@ static const struct dsa_device_ops a5psw_netdev_ops = { ...@@ -109,5 +111,5 @@ static const struct dsa_device_ops a5psw_netdev_ops = {
}; };
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_A5PSW); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_A5PSW, A5PSW_NAME);
module_dsa_tag_driver(a5psw_netdev_ops); module_dsa_tag_driver(a5psw_netdev_ops);
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
#include <linux/packing.h> #include <linux/packing.h>
#include "dsa_priv.h" #include "dsa_priv.h"
#define SJA1105_NAME "sja1105"
#define SJA1110_NAME "sja1110"
/* Is this a TX or an RX header? */ /* Is this a TX or an RX header? */
#define SJA1110_HEADER_HOST_TO_SWITCH BIT(15) #define SJA1110_HEADER_HOST_TO_SWITCH BIT(15)
...@@ -786,7 +789,7 @@ static int sja1105_connect(struct dsa_switch *ds) ...@@ -786,7 +789,7 @@ static int sja1105_connect(struct dsa_switch *ds)
} }
static const struct dsa_device_ops sja1105_netdev_ops = { static const struct dsa_device_ops sja1105_netdev_ops = {
.name = "sja1105", .name = SJA1105_NAME,
.proto = DSA_TAG_PROTO_SJA1105, .proto = DSA_TAG_PROTO_SJA1105,
.xmit = sja1105_xmit, .xmit = sja1105_xmit,
.rcv = sja1105_rcv, .rcv = sja1105_rcv,
...@@ -798,10 +801,10 @@ static const struct dsa_device_ops sja1105_netdev_ops = { ...@@ -798,10 +801,10 @@ static const struct dsa_device_ops sja1105_netdev_ops = {
}; };
DSA_TAG_DRIVER(sja1105_netdev_ops); DSA_TAG_DRIVER(sja1105_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_SJA1105); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_SJA1105, SJA1105_NAME);
static const struct dsa_device_ops sja1110_netdev_ops = { static const struct dsa_device_ops sja1110_netdev_ops = {
.name = "sja1110", .name = SJA1110_NAME,
.proto = DSA_TAG_PROTO_SJA1110, .proto = DSA_TAG_PROTO_SJA1110,
.xmit = sja1110_xmit, .xmit = sja1110_xmit,
.rcv = sja1110_rcv, .rcv = sja1110_rcv,
...@@ -813,7 +816,7 @@ static const struct dsa_device_ops sja1110_netdev_ops = { ...@@ -813,7 +816,7 @@ static const struct dsa_device_ops sja1110_netdev_ops = {
}; };
DSA_TAG_DRIVER(sja1110_netdev_ops); DSA_TAG_DRIVER(sja1110_netdev_ops);
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_SJA1110); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_SJA1110, SJA1110_NAME);
static struct dsa_tag_driver *sja1105_tag_driver_array[] = { static struct dsa_tag_driver *sja1105_tag_driver_array[] = {
&DSA_TAG_DRIVER_NAME(sja1105_netdev_ops), &DSA_TAG_DRIVER_NAME(sja1105_netdev_ops),
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
#include "dsa_priv.h" #include "dsa_priv.h"
#define TRAILER_NAME "trailer"
static struct sk_buff *trailer_xmit(struct sk_buff *skb, struct net_device *dev) static struct sk_buff *trailer_xmit(struct sk_buff *skb, struct net_device *dev)
{ {
struct dsa_port *dp = dsa_slave_to_port(dev); struct dsa_port *dp = dsa_slave_to_port(dev);
...@@ -50,7 +52,7 @@ static struct sk_buff *trailer_rcv(struct sk_buff *skb, struct net_device *dev) ...@@ -50,7 +52,7 @@ static struct sk_buff *trailer_rcv(struct sk_buff *skb, struct net_device *dev)
} }
static const struct dsa_device_ops trailer_netdev_ops = { static const struct dsa_device_ops trailer_netdev_ops = {
.name = "trailer", .name = TRAILER_NAME,
.proto = DSA_TAG_PROTO_TRAILER, .proto = DSA_TAG_PROTO_TRAILER,
.xmit = trailer_xmit, .xmit = trailer_xmit,
.rcv = trailer_rcv, .rcv = trailer_rcv,
...@@ -58,6 +60,6 @@ static const struct dsa_device_ops trailer_netdev_ops = { ...@@ -58,6 +60,6 @@ static const struct dsa_device_ops trailer_netdev_ops = {
}; };
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_TRAILER); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_TRAILER, TRAILER_NAME);
module_dsa_tag_driver(trailer_netdev_ops); module_dsa_tag_driver(trailer_netdev_ops);
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include "dsa_priv.h" #include "dsa_priv.h"
#define XRS700X_NAME "xrs700x"
static struct sk_buff *xrs700x_xmit(struct sk_buff *skb, struct net_device *dev) static struct sk_buff *xrs700x_xmit(struct sk_buff *skb, struct net_device *dev)
{ {
struct dsa_port *partner, *dp = dsa_slave_to_port(dev); struct dsa_port *partner, *dp = dsa_slave_to_port(dev);
...@@ -51,7 +53,7 @@ static struct sk_buff *xrs700x_rcv(struct sk_buff *skb, struct net_device *dev) ...@@ -51,7 +53,7 @@ static struct sk_buff *xrs700x_rcv(struct sk_buff *skb, struct net_device *dev)
} }
static const struct dsa_device_ops xrs700x_netdev_ops = { static const struct dsa_device_ops xrs700x_netdev_ops = {
.name = "xrs700x", .name = XRS700X_NAME,
.proto = DSA_TAG_PROTO_XRS700X, .proto = DSA_TAG_PROTO_XRS700X,
.xmit = xrs700x_xmit, .xmit = xrs700x_xmit,
.rcv = xrs700x_rcv, .rcv = xrs700x_rcv,
...@@ -59,6 +61,6 @@ static const struct dsa_device_ops xrs700x_netdev_ops = { ...@@ -59,6 +61,6 @@ static const struct dsa_device_ops xrs700x_netdev_ops = {
}; };
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_XRS700X); MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_XRS700X, XRS700X_NAME);
module_dsa_tag_driver(xrs700x_netdev_ops); module_dsa_tag_driver(xrs700x_netdev_ops);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment