diff options
| author | David S. Miller <davem@davemloft.net> | 2017-10-12 22:10:02 +0300 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2017-10-12 22:10:02 +0300 |
| commit | d71a756ad542c013e3ed5348db89f43ad105392e (patch) | |
| tree | 4a065af2789121f5df4bf8011ae1dfe83476c364 /include | |
| parent | 3f7832c26cc0cad2245981f777f3ee684399ce93 (diff) | |
| parent | 723934fb792f2dbc76ee3ac334fcde95136bf409 (diff) | |
| download | linux-d71a756ad542c013e3ed5348db89f43ad105392e.tar.xz | |
Merge branch 'dsa-ACB-for-bcm_sf2-and-bcmsysport'
Florian Fainelli says:
====================
Enable ACB for bcm_sf2 and bcmsysport
This patch series enables Broadcom's Advanced Congestion Buffering mechanism
which requires cooperation between the CPU/Management Ethernet MAC controller
and the switch.
I took the notifier approach because ultimately the information we need to
carry to the master network device is DSA specific and I saw little room for
generalizing beyond what DSA requires. Chances are that this is highly specific
to the Broadcom HW as I don't know of any HW out there that supports something
nearly similar for similar or identical needs.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/dsa.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/include/net/dsa.h b/include/net/dsa.h index 10dceccd9ce8..ce1d622734d7 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -471,4 +471,54 @@ static inline int dsa_switch_resume(struct dsa_switch *ds) } #endif /* CONFIG_PM_SLEEP */ +enum dsa_notifier_type { + DSA_PORT_REGISTER, + DSA_PORT_UNREGISTER, +}; + +struct dsa_notifier_info { + struct net_device *dev; +}; + +struct dsa_notifier_register_info { + struct dsa_notifier_info info; /* must be first */ + struct net_device *master; + unsigned int port_number; + unsigned int switch_number; +}; + +static inline struct net_device * +dsa_notifier_info_to_dev(const struct dsa_notifier_info *info) +{ + return info->dev; +} + +#if IS_ENABLED(CONFIG_NET_DSA) +int register_dsa_notifier(struct notifier_block *nb); +int unregister_dsa_notifier(struct notifier_block *nb); +int call_dsa_notifiers(unsigned long val, struct net_device *dev, + struct dsa_notifier_info *info); +#else +static inline int register_dsa_notifier(struct notifier_block *nb) +{ + return 0; +} + +static inline int unregister_dsa_notifier(struct notifier_block *nb) +{ + return 0; +} + +static inline int call_dsa_notifiers(unsigned long val, struct net_device *dev, + struct dsa_notifier_info *info) +{ + return NOTIFY_DONE; +} +#endif + +/* Broadcom tag specific helpers to insert and extract queue/port number */ +#define BRCM_TAG_SET_PORT_QUEUE(p, q) ((p) << 8 | q) +#define BRCM_TAG_GET_PORT(v) ((v) >> 8) +#define BRCM_TAG_GET_QUEUE(v) ((v) & 0xff) + #endif |
