net: dsa: stop exposing tag proto module helpers to the world
The DSA tagging protocol driver macros are in the public include/net/dsa.h probably because that's also where the DSA_TAG_PROTO_*_VALUE macros are (MODULE_ALIAS_DSA_TAG_DRIVER hinges on those macro definitions). But there is no reason to expose these helpers to <net/dsa.h>. That header is shared between switch drivers (drivers/net/dsa/), tagging protocol drivers (net/dsa/tag_*.c), the DSA core (net/dsa/ sans tag_*.c), and the rest of the world (DSA master drivers, network stack, etc). Too much exposure. On the other hand, net/dsa/dsa_priv.h is included only by the DSA core and by DSA tagging protocol drivers (or IOW, "friend" modules). Also a bit too much exposure - I've contemplated creating a new header which is only included by tagging protocol drivers, but completely separating a new dsa_tag_proto.h from dsa_priv.h is not immediately trivial - for example dsa_slave_to_port() is used both from the fast path and from the control path. So for now, move these definitions to dsa_priv.h which at least hides them from the world. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Tested-by: Michael Walle <michael@walle.cc> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
4a8c14384f
commit
9999f85ba3
@ -118,10 +118,6 @@ struct dsa_netdevice_ops {
|
||||
int cmd);
|
||||
};
|
||||
|
||||
#define DSA_TAG_DRIVER_ALIAS "dsa_tag-"
|
||||
#define MODULE_ALIAS_DSA_TAG_DRIVER(__proto) \
|
||||
MODULE_ALIAS(DSA_TAG_DRIVER_ALIAS __stringify(__proto##_VALUE))
|
||||
|
||||
struct dsa_lag {
|
||||
struct net_device *dev;
|
||||
unsigned int id;
|
||||
@ -1400,70 +1396,4 @@ static inline bool dsa_slave_dev_check(const struct net_device *dev)
|
||||
netdev_tx_t dsa_enqueue_skb(struct sk_buff *skb, struct net_device *dev);
|
||||
void dsa_port_phylink_mac_change(struct dsa_switch *ds, int port, bool up);
|
||||
|
||||
struct dsa_tag_driver {
|
||||
const struct dsa_device_ops *ops;
|
||||
struct list_head list;
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
void dsa_tag_drivers_register(struct dsa_tag_driver *dsa_tag_driver_array[],
|
||||
unsigned int count,
|
||||
struct module *owner);
|
||||
void dsa_tag_drivers_unregister(struct dsa_tag_driver *dsa_tag_driver_array[],
|
||||
unsigned int count);
|
||||
|
||||
#define dsa_tag_driver_module_drivers(__dsa_tag_drivers_array, __count) \
|
||||
static int __init dsa_tag_driver_module_init(void) \
|
||||
{ \
|
||||
dsa_tag_drivers_register(__dsa_tag_drivers_array, __count, \
|
||||
THIS_MODULE); \
|
||||
return 0; \
|
||||
} \
|
||||
module_init(dsa_tag_driver_module_init); \
|
||||
\
|
||||
static void __exit dsa_tag_driver_module_exit(void) \
|
||||
{ \
|
||||
dsa_tag_drivers_unregister(__dsa_tag_drivers_array, __count); \
|
||||
} \
|
||||
module_exit(dsa_tag_driver_module_exit)
|
||||
|
||||
/**
|
||||
* module_dsa_tag_drivers() - Helper macro for registering DSA tag
|
||||
* drivers
|
||||
* @__ops_array: Array of tag driver structures
|
||||
*
|
||||
* Helper macro for DSA tag drivers which do not do anything special
|
||||
* in module init/exit. Each module may only use this macro once, and
|
||||
* calling it replaces module_init() and module_exit().
|
||||
*/
|
||||
#define module_dsa_tag_drivers(__ops_array) \
|
||||
dsa_tag_driver_module_drivers(__ops_array, ARRAY_SIZE(__ops_array))
|
||||
|
||||
#define DSA_TAG_DRIVER_NAME(__ops) dsa_tag_driver ## _ ## __ops
|
||||
|
||||
/* Create a static structure we can build a linked list of dsa_tag
|
||||
* drivers
|
||||
*/
|
||||
#define DSA_TAG_DRIVER(__ops) \
|
||||
static struct dsa_tag_driver DSA_TAG_DRIVER_NAME(__ops) = { \
|
||||
.ops = &__ops, \
|
||||
}
|
||||
|
||||
/**
|
||||
* module_dsa_tag_driver() - Helper macro for registering a single DSA tag
|
||||
* driver
|
||||
* @__ops: Single tag driver structures
|
||||
*
|
||||
* Helper macro for DSA tag drivers which do not do anything special
|
||||
* in module init/exit. Each module may only use this macro once, and
|
||||
* calling it replaces module_init() and module_exit().
|
||||
*/
|
||||
#define module_dsa_tag_driver(__ops) \
|
||||
DSA_TAG_DRIVER(__ops); \
|
||||
\
|
||||
static struct dsa_tag_driver *dsa_tag_driver_array[] = { \
|
||||
&DSA_TAG_DRIVER_NAME(__ops) \
|
||||
}; \
|
||||
module_dsa_tag_drivers(dsa_tag_driver_array)
|
||||
#endif
|
||||
|
||||
|
@ -17,6 +17,76 @@
|
||||
|
||||
#define DSA_MAX_NUM_OFFLOADING_BRIDGES BITS_PER_LONG
|
||||
|
||||
#define DSA_TAG_DRIVER_ALIAS "dsa_tag-"
|
||||
#define MODULE_ALIAS_DSA_TAG_DRIVER(__proto) \
|
||||
MODULE_ALIAS(DSA_TAG_DRIVER_ALIAS __stringify(__proto##_VALUE))
|
||||
|
||||
struct dsa_tag_driver {
|
||||
const struct dsa_device_ops *ops;
|
||||
struct list_head list;
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
void dsa_tag_drivers_register(struct dsa_tag_driver *dsa_tag_driver_array[],
|
||||
unsigned int count,
|
||||
struct module *owner);
|
||||
void dsa_tag_drivers_unregister(struct dsa_tag_driver *dsa_tag_driver_array[],
|
||||
unsigned int count);
|
||||
|
||||
#define dsa_tag_driver_module_drivers(__dsa_tag_drivers_array, __count) \
|
||||
static int __init dsa_tag_driver_module_init(void) \
|
||||
{ \
|
||||
dsa_tag_drivers_register(__dsa_tag_drivers_array, __count, \
|
||||
THIS_MODULE); \
|
||||
return 0; \
|
||||
} \
|
||||
module_init(dsa_tag_driver_module_init); \
|
||||
\
|
||||
static void __exit dsa_tag_driver_module_exit(void) \
|
||||
{ \
|
||||
dsa_tag_drivers_unregister(__dsa_tag_drivers_array, __count); \
|
||||
} \
|
||||
module_exit(dsa_tag_driver_module_exit)
|
||||
|
||||
/**
|
||||
* module_dsa_tag_drivers() - Helper macro for registering DSA tag
|
||||
* drivers
|
||||
* @__ops_array: Array of tag driver structures
|
||||
*
|
||||
* Helper macro for DSA tag drivers which do not do anything special
|
||||
* in module init/exit. Each module may only use this macro once, and
|
||||
* calling it replaces module_init() and module_exit().
|
||||
*/
|
||||
#define module_dsa_tag_drivers(__ops_array) \
|
||||
dsa_tag_driver_module_drivers(__ops_array, ARRAY_SIZE(__ops_array))
|
||||
|
||||
#define DSA_TAG_DRIVER_NAME(__ops) dsa_tag_driver ## _ ## __ops
|
||||
|
||||
/* Create a static structure we can build a linked list of dsa_tag
|
||||
* drivers
|
||||
*/
|
||||
#define DSA_TAG_DRIVER(__ops) \
|
||||
static struct dsa_tag_driver DSA_TAG_DRIVER_NAME(__ops) = { \
|
||||
.ops = &__ops, \
|
||||
}
|
||||
|
||||
/**
|
||||
* module_dsa_tag_driver() - Helper macro for registering a single DSA tag
|
||||
* driver
|
||||
* @__ops: Single tag driver structures
|
||||
*
|
||||
* Helper macro for DSA tag drivers which do not do anything special
|
||||
* in module init/exit. Each module may only use this macro once, and
|
||||
* calling it replaces module_init() and module_exit().
|
||||
*/
|
||||
#define module_dsa_tag_driver(__ops) \
|
||||
DSA_TAG_DRIVER(__ops); \
|
||||
\
|
||||
static struct dsa_tag_driver *dsa_tag_driver_array[] = { \
|
||||
&DSA_TAG_DRIVER_NAME(__ops) \
|
||||
}; \
|
||||
module_dsa_tag_drivers(dsa_tag_driver_array)
|
||||
|
||||
enum {
|
||||
DSA_NOTIFIER_AGEING_TIME,
|
||||
DSA_NOTIFIER_BRIDGE_JOIN,
|
||||
|
Loading…
x
Reference in New Issue
Block a user