xref: /openbmc/linux/drivers/net/wireless/marvell/libertas/mesh.h (revision 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2f988d640SKalle Valo /*
3f988d640SKalle Valo  * Contains all definitions needed for the Libertas' MESH implementation.
4f988d640SKalle Valo  */
5f988d640SKalle Valo #ifndef _LBS_MESH_H_
6f988d640SKalle Valo #define _LBS_MESH_H_
7f988d640SKalle Valo 
8f988d640SKalle Valo 
9f988d640SKalle Valo #include <net/iw_handler.h>
10f988d640SKalle Valo #include <net/lib80211.h>
11f988d640SKalle Valo 
12f988d640SKalle Valo #include "host.h"
13f988d640SKalle Valo #include "dev.h"
14f988d640SKalle Valo 
15f988d640SKalle Valo #ifdef CONFIG_LIBERTAS_MESH
16f988d640SKalle Valo 
17f988d640SKalle Valo struct net_device;
18f988d640SKalle Valo 
192fd5fdcaSJason Yan void lbs_init_mesh(struct lbs_private *priv);
20f988d640SKalle Valo void lbs_start_mesh(struct lbs_private *priv);
21f988d640SKalle Valo int lbs_deinit_mesh(struct lbs_private *priv);
22f988d640SKalle Valo 
23f988d640SKalle Valo void lbs_remove_mesh(struct lbs_private *priv);
24f988d640SKalle Valo 
lbs_mesh_activated(struct lbs_private * priv)25f988d640SKalle Valo static inline bool lbs_mesh_activated(struct lbs_private *priv)
26f988d640SKalle Valo {
272199c981SLubomir Rintel 	return !!priv->mesh_tlv;
28f988d640SKalle Valo }
29f988d640SKalle Valo 
30f988d640SKalle Valo int lbs_mesh_set_channel(struct lbs_private *priv, u8 channel);
31f988d640SKalle Valo 
32f988d640SKalle Valo /* Sending / Receiving */
33f988d640SKalle Valo 
34f988d640SKalle Valo struct rxpd;
35f988d640SKalle Valo struct txpd;
36f988d640SKalle Valo 
37f988d640SKalle Valo struct net_device *lbs_mesh_set_dev(struct lbs_private *priv,
38f988d640SKalle Valo 	struct net_device *dev, struct rxpd *rxpd);
39f988d640SKalle Valo void lbs_mesh_set_txpd(struct lbs_private *priv,
40f988d640SKalle Valo 	struct net_device *dev, struct txpd *txpd);
41f988d640SKalle Valo 
42f988d640SKalle Valo 
43f988d640SKalle Valo /* Command handling */
44f988d640SKalle Valo 
45f988d640SKalle Valo struct cmd_ds_command;
46f988d640SKalle Valo struct cmd_ds_mesh_access;
47f988d640SKalle Valo struct cmd_ds_mesh_config;
48f988d640SKalle Valo 
49f988d640SKalle Valo 
50f988d640SKalle Valo /* Ethtool statistics */
51f988d640SKalle Valo 
52f988d640SKalle Valo struct ethtool_stats;
53f988d640SKalle Valo 
54f988d640SKalle Valo void lbs_mesh_ethtool_get_stats(struct net_device *dev,
55f988d640SKalle Valo 	struct ethtool_stats *stats, uint64_t *data);
56f988d640SKalle Valo int lbs_mesh_ethtool_get_sset_count(struct net_device *dev, int sset);
57f988d640SKalle Valo void lbs_mesh_ethtool_get_strings(struct net_device *dev,
58f988d640SKalle Valo 	uint32_t stringset, uint8_t *s);
59f988d640SKalle Valo 
60f988d640SKalle Valo 
61f988d640SKalle Valo #else
62f988d640SKalle Valo 
63*01414f88SArnd Bergmann #define lbs_init_mesh(priv)	do { } while (0)
64*01414f88SArnd Bergmann #define lbs_deinit_mesh(priv)	do { } while (0)
65*01414f88SArnd Bergmann #define lbs_start_mesh(priv)	do { } while (0)
66*01414f88SArnd Bergmann #define lbs_add_mesh(priv)	do { } while (0)
67*01414f88SArnd Bergmann #define lbs_remove_mesh(priv)	do { } while (0)
68f988d640SKalle Valo #define lbs_mesh_set_dev(priv, dev, rxpd) (dev)
69*01414f88SArnd Bergmann #define lbs_mesh_set_txpd(priv, dev, txpd) do { } while (0)
70f988d640SKalle Valo #define lbs_mesh_set_channel(priv, channel) (0)
71f988d640SKalle Valo #define lbs_mesh_activated(priv) (false)
72f988d640SKalle Valo 
73f988d640SKalle Valo #endif
74f988d640SKalle Valo 
75f988d640SKalle Valo 
76f988d640SKalle Valo 
77f988d640SKalle Valo #endif
78