diff options
Diffstat (limited to 'include/net/dsa.h')
| -rw-r--r-- | include/net/dsa.h | 43 | 
1 files changed, 26 insertions, 17 deletions
diff --git a/include/net/dsa.h b/include/net/dsa.h index 83a933e563fe..e1a2610a0e06 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -49,10 +49,12 @@ struct phylink_link_state;  #define DSA_TAG_PROTO_XRS700X_VALUE		19  #define DSA_TAG_PROTO_OCELOT_8021Q_VALUE	20  #define DSA_TAG_PROTO_SEVILLE_VALUE		21 +#define DSA_TAG_PROTO_BRCM_LEGACY_VALUE		22  enum dsa_tag_protocol {  	DSA_TAG_PROTO_NONE		= DSA_TAG_PROTO_NONE_VALUE,  	DSA_TAG_PROTO_BRCM		= DSA_TAG_PROTO_BRCM_VALUE, +	DSA_TAG_PROTO_BRCM_LEGACY	= DSA_TAG_PROTO_BRCM_LEGACY_VALUE,  	DSA_TAG_PROTO_BRCM_PREPEND	= DSA_TAG_PROTO_BRCM_PREPEND_VALUE,  	DSA_TAG_PROTO_DSA		= DSA_TAG_PROTO_DSA_VALUE,  	DSA_TAG_PROTO_EDSA		= DSA_TAG_PROTO_EDSA_VALUE, @@ -115,20 +117,6 @@ struct dsa_netdevice_ops {  #define MODULE_ALIAS_DSA_TAG_DRIVER(__proto)				\  	MODULE_ALIAS(DSA_TAG_DRIVER_ALIAS __stringify(__proto##_VALUE)) -struct dsa_skb_cb { -	struct sk_buff *clone; -}; - -struct __dsa_skb_cb { -	struct dsa_skb_cb cb; -	u8 priv[48 - sizeof(struct dsa_skb_cb)]; -}; - -#define DSA_SKB_CB(skb) ((struct dsa_skb_cb *)((skb)->cb)) - -#define DSA_SKB_CB_PRIV(skb)			\ -	((void *)(skb)->cb + offsetof(struct __dsa_skb_cb, priv)) -  struct dsa_switch_tree {  	struct list_head	list; @@ -147,6 +135,11 @@ struct dsa_switch_tree {  	/* Tagging protocol operations */  	const struct dsa_device_ops *tag_ops; +	/* Default tagging protocol preferred by the switches in this +	 * tree. +	 */ +	enum dsa_tag_protocol default_proto; +  	/*  	 * Configuration data for the platform device that owns  	 * this dsa switch tree instance. @@ -258,7 +251,7 @@ struct dsa_port {  	unsigned int		index;  	const char		*name;  	struct dsa_port		*cpu_dp; -	const char		*mac; +	u8			mac[ETH_ALEN];  	struct device_node	*dn;  	unsigned int		ageing_time;  	bool			vlan_filtering; @@ -491,6 +484,20 @@ static inline bool dsa_port_is_vlan_filtering(const struct dsa_port *dp)  		return dp->vlan_filtering;  } +static inline +struct net_device *dsa_port_to_bridge_port(const struct dsa_port *dp) +{ +	if (!dp->bridge_dev) +		return NULL; + +	if (dp->lag_dev) +		return dp->lag_dev; +	else if (dp->hsr_dev) +		return dp->hsr_dev; + +	return dp->slave; +} +  typedef int dsa_fdb_dump_cb_t(const unsigned char *addr, u16 vid,  			      bool is_static, void *data);  struct dsa_switch_ops { @@ -561,6 +568,8 @@ struct dsa_switch_ops {  					 int port, uint64_t *data);  	void	(*get_stats64)(struct dsa_switch *ds, int port,  				   struct rtnl_link_stats64 *s); +	void	(*self_test)(struct dsa_switch *ds, int port, +			     struct ethtool_test *etest, u64 *data);  	/*  	 * ethtool Wake-on-LAN @@ -717,8 +726,8 @@ struct dsa_switch_ops {  				     struct ifreq *ifr);  	int	(*port_hwtstamp_set)(struct dsa_switch *ds, int port,  				     struct ifreq *ifr); -	bool	(*port_txtstamp)(struct dsa_switch *ds, int port, -				 struct sk_buff *clone, unsigned int type); +	void	(*port_txtstamp)(struct dsa_switch *ds, int port, +				 struct sk_buff *skb);  	bool	(*port_rxtstamp)(struct dsa_switch *ds, int port,  				 struct sk_buff *skb, unsigned int type);  |