xref: /linux/drivers/net/wireless/marvell/libertas/mesh.h (revision c771600c6af14749609b49565ffb4cac2959710d)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
28973a6e7SRandy Dunlap /*
35e8e8b57SHolger Schurig  * Contains all definitions needed for the Libertas' MESH implementation.
45e8e8b57SHolger Schurig  */
55e8e8b57SHolger Schurig #ifndef _LBS_MESH_H_
65e8e8b57SHolger Schurig #define _LBS_MESH_H_
75e8e8b57SHolger Schurig 
85e8e8b57SHolger Schurig 
95e8e8b57SHolger Schurig #include <net/iw_handler.h>
105e8e8b57SHolger Schurig 
11a6bb1bceSDan Williams #include "host.h"
1249fee692SDaniel Drake #include "dev.h"
135e8e8b57SHolger Schurig 
144143a23dSHolger Schurig #ifdef CONFIG_LIBERTAS_MESH
154143a23dSHolger Schurig 
165e8e8b57SHolger Schurig struct net_device;
17e0e42da3SHolger Schurig 
182fd5fdcaSJason Yan void lbs_init_mesh(struct lbs_private *priv);
1949fee692SDaniel Drake void lbs_start_mesh(struct lbs_private *priv);
20e0e42da3SHolger Schurig int lbs_deinit_mesh(struct lbs_private *priv);
21e0e42da3SHolger Schurig 
22e0e42da3SHolger Schurig void lbs_remove_mesh(struct lbs_private *priv);
23e0e42da3SHolger Schurig 
lbs_mesh_activated(struct lbs_private * priv)2449fee692SDaniel Drake static inline bool lbs_mesh_activated(struct lbs_private *priv)
2549fee692SDaniel Drake {
262199c981SLubomir Rintel 	return !!priv->mesh_tlv;
2749fee692SDaniel Drake }
2849fee692SDaniel Drake 
2949fee692SDaniel Drake int lbs_mesh_set_channel(struct lbs_private *priv, u8 channel);
30e0e42da3SHolger Schurig 
31e0e42da3SHolger Schurig /* Sending / Receiving */
32e0e42da3SHolger Schurig 
33e0e42da3SHolger Schurig struct rxpd;
34e0e42da3SHolger Schurig struct txpd;
35e0e42da3SHolger Schurig 
36e0e42da3SHolger Schurig struct net_device *lbs_mesh_set_dev(struct lbs_private *priv,
37e0e42da3SHolger Schurig 	struct net_device *dev, struct rxpd *rxpd);
38e0e42da3SHolger Schurig void lbs_mesh_set_txpd(struct lbs_private *priv,
39e0e42da3SHolger Schurig 	struct net_device *dev, struct txpd *txpd);
40e0e42da3SHolger Schurig 
41e0e42da3SHolger Schurig 
42ece1e3c6SHolger Schurig /* Command handling */
43ece1e3c6SHolger Schurig 
44ece1e3c6SHolger Schurig struct cmd_ds_command;
4555e1ff92SHolger Schurig struct cmd_ds_mesh_access;
4655e1ff92SHolger Schurig struct cmd_ds_mesh_config;
47ece1e3c6SHolger Schurig 
48e0e42da3SHolger Schurig 
49c7fe64cfSHolger Schurig /* Ethtool statistics */
50c7fe64cfSHolger Schurig 
51c7fe64cfSHolger Schurig struct ethtool_stats;
52c7fe64cfSHolger Schurig 
53c7fe64cfSHolger Schurig void lbs_mesh_ethtool_get_stats(struct net_device *dev,
54c7fe64cfSHolger Schurig 	struct ethtool_stats *stats, uint64_t *data);
55c7fe64cfSHolger Schurig int lbs_mesh_ethtool_get_sset_count(struct net_device *dev, int sset);
56c7fe64cfSHolger Schurig void lbs_mesh_ethtool_get_strings(struct net_device *dev,
57c7fe64cfSHolger Schurig 	uint32_t stringset, uint8_t *s);
58c7fe64cfSHolger Schurig 
59c7fe64cfSHolger Schurig 
604143a23dSHolger Schurig #else
614143a23dSHolger Schurig 
6201414f88SArnd Bergmann #define lbs_init_mesh(priv)	do { } while (0)
6301414f88SArnd Bergmann #define lbs_deinit_mesh(priv)	do { } while (0)
6401414f88SArnd Bergmann #define lbs_start_mesh(priv)	do { } while (0)
6501414f88SArnd Bergmann #define lbs_add_mesh(priv)	do { } while (0)
6601414f88SArnd Bergmann #define lbs_remove_mesh(priv)	do { } while (0)
674143a23dSHolger Schurig #define lbs_mesh_set_dev(priv, dev, rxpd) (dev)
6801414f88SArnd Bergmann #define lbs_mesh_set_txpd(priv, dev, txpd) do { } while (0)
6949fee692SDaniel Drake #define lbs_mesh_set_channel(priv, channel) (0)
7049fee692SDaniel Drake #define lbs_mesh_activated(priv) (false)
714143a23dSHolger Schurig 
724143a23dSHolger Schurig #endif
734143a23dSHolger Schurig 
744143a23dSHolger Schurig 
75602114aeSHolger Schurig 
765e8e8b57SHolger Schurig #endif
77