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