dsa: Combine core and tagging code
authorBen Hutchings <ben@decadent.org.uk>
Fri, 25 Nov 2011 14:35:02 +0000 (14:35 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 26 Nov 2011 19:48:15 +0000 (14:48 -0500)
These files have circular dependencies, so if we make DSA modular then
they must be built into the same module.  Therefore, link them
together and merge their respective module init and exit functions.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/Makefile
net/dsa/dsa.c
net/dsa/dsa_priv.h
net/dsa/tag_dsa.c
net/dsa/tag_edsa.c
net/dsa/tag_trailer.c

index 2374faff4dea8510cda51aec9d42391e3a124062..5431b4a43c130a9ab9df75d9abdb1dfc94954a1f 100644 (file)
@@ -1,13 +1,14 @@
+# the core
+obj-$(CONFIG_NET_DSA) += dsa_core.o
+dsa_core-y += dsa.o slave.o
+
 # tagging formats
-obj-$(CONFIG_NET_DSA_TAG_DSA) += tag_dsa.o
-obj-$(CONFIG_NET_DSA_TAG_EDSA) += tag_edsa.o
-obj-$(CONFIG_NET_DSA_TAG_TRAILER) += tag_trailer.o
+dsa_core-$(CONFIG_NET_DSA_TAG_DSA) += tag_dsa.o
+dsa_core-$(CONFIG_NET_DSA_TAG_EDSA) += tag_edsa.o
+dsa_core-$(CONFIG_NET_DSA_TAG_TRAILER) += tag_trailer.o
 
 # switch drivers
 obj-$(CONFIG_NET_DSA_MV88E6XXX) += mv88e6xxx.o
 obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o
 obj-$(CONFIG_NET_DSA_MV88E6123_61_65) += mv88e6123_61_65.o
 obj-$(CONFIG_NET_DSA_MV88E6131) += mv88e6131.o
-
-# the core
-obj-$(CONFIG_NET_DSA) += dsa.o slave.o
index fc93088cdc9019dc814269c9fdbfe7e03f85d384..88e7c2f3fa0d470404f6560db952cb30a9639a33 100644 (file)
@@ -398,12 +398,36 @@ static struct platform_driver dsa_driver = {
 
 static int __init dsa_init_module(void)
 {
-       return platform_driver_register(&dsa_driver);
+       int rc;
+
+       rc = platform_driver_register(&dsa_driver);
+       if (rc)
+               return rc;
+
+#ifdef CONFIG_NET_DSA_TAG_DSA
+       dev_add_pack(&dsa_packet_type);
+#endif
+#ifdef CONFIG_NET_DSA_TAG_EDSA
+       dev_add_pack(&edsa_packet_type);
+#endif
+#ifdef CONFIG_NET_DSA_TAG_TRAILER
+       dev_add_pack(&trailer_packet_type);
+#endif
+       return 0;
 }
 module_init(dsa_init_module);
 
 static void __exit dsa_cleanup_module(void)
 {
+#ifdef CONFIG_NET_DSA_TAG_TRAILER
+       dev_remove_pack(&trailer_packet_type);
+#endif
+#ifdef CONFIG_NET_DSA_TAG_EDSA
+       dev_remove_pack(&edsa_packet_type);
+#endif
+#ifdef CONFIG_NET_DSA_TAG_DSA
+       dev_remove_pack(&dsa_packet_type);
+#endif
        platform_driver_unregister(&dsa_driver);
 }
 module_exit(dsa_cleanup_module);
index a45186cb6daf9c006e29865b2dd29b8b1c713405..89a2eb48232a0ab154c97aaf82ea01c7394807af 100644 (file)
@@ -137,12 +137,15 @@ struct net_device *dsa_slave_create(struct dsa_switch *ds,
 
 /* tag_dsa.c */
 netdev_tx_t dsa_xmit(struct sk_buff *skb, struct net_device *dev);
+extern struct packet_type dsa_packet_type;
 
 /* tag_edsa.c */
 netdev_tx_t edsa_xmit(struct sk_buff *skb, struct net_device *dev);
+extern struct packet_type edsa_packet_type;
 
 /* tag_trailer.c */
 netdev_tx_t trailer_xmit(struct sk_buff *skb, struct net_device *dev);
+extern struct packet_type trailer_packet_type;
 
 
 #endif
index 98dfe80b45381f1c5b4bea6459f8d1b5e932c870..cacce1e22f9caa029c2374cd93c2e071932f365c 100644 (file)
@@ -186,20 +186,7 @@ out:
        return 0;
 }
 
-static struct packet_type dsa_packet_type __read_mostly = {
+struct packet_type dsa_packet_type __read_mostly = {
        .type   = cpu_to_be16(ETH_P_DSA),
        .func   = dsa_rcv,
 };
-
-static int __init dsa_init_module(void)
-{
-       dev_add_pack(&dsa_packet_type);
-       return 0;
-}
-module_init(dsa_init_module);
-
-static void __exit dsa_cleanup_module(void)
-{
-       dev_remove_pack(&dsa_packet_type);
-}
-module_exit(dsa_cleanup_module);
index 6f383322ad2508570d793f3c6bd8078c4152c0b4..e70c43c25e64c9310d3d5a61b407d8eeb76402d2 100644 (file)
@@ -205,20 +205,7 @@ out:
        return 0;
 }
 
-static struct packet_type edsa_packet_type __read_mostly = {
+struct packet_type edsa_packet_type __read_mostly = {
        .type   = cpu_to_be16(ETH_P_EDSA),
        .func   = edsa_rcv,
 };
-
-static int __init edsa_init_module(void)
-{
-       dev_add_pack(&edsa_packet_type);
-       return 0;
-}
-module_init(edsa_init_module);
-
-static void __exit edsa_cleanup_module(void)
-{
-       dev_remove_pack(&edsa_packet_type);
-}
-module_exit(edsa_cleanup_module);
index d6d7d0add3cb4634fd00d61fb983973a4e5a4551..94bc260d015d11f1a321ca3f3876c7b901716302 100644 (file)
@@ -114,20 +114,7 @@ out:
        return 0;
 }
 
-static struct packet_type trailer_packet_type __read_mostly = {
+struct packet_type trailer_packet_type __read_mostly = {
        .type   = cpu_to_be16(ETH_P_TRAILER),
        .func   = trailer_rcv,
 };
-
-static int __init trailer_init_module(void)
-{
-       dev_add_pack(&trailer_packet_type);
-       return 0;
-}
-module_init(trailer_init_module);
-
-static void __exit trailer_cleanup_module(void)
-{
-       dev_remove_pack(&trailer_packet_type);
-}
-module_exit(trailer_cleanup_module);