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