18973a6e770fc891f92daacbc1c92c7cd396fcf7eRandy Dunlap/*
28973a6e770fc891f92daacbc1c92c7cd396fcf7eRandy Dunlap * Contains all definitions needed for the Libertas' MESH implementation.
38973a6e770fc891f92daacbc1c92c7cd396fcf7eRandy Dunlap */
45e8e8b5759566b76bdf36046ae015796676a423cHolger Schurig#ifndef _LBS_MESH_H_
55e8e8b5759566b76bdf36046ae015796676a423cHolger Schurig#define _LBS_MESH_H_
65e8e8b5759566b76bdf36046ae015796676a423cHolger Schurig
75e8e8b5759566b76bdf36046ae015796676a423cHolger Schurig
85e8e8b5759566b76bdf36046ae015796676a423cHolger Schurig#include <net/iw_handler.h>
9ece1e3c61e59ba184150e5aff57bbc6355613e3eHolger Schurig#include <net/lib80211.h>
105e8e8b5759566b76bdf36046ae015796676a423cHolger Schurig
11a6bb1bcebced1eeed6a96f37cda7cbb7cbd6dae6Dan Williams#include "host.h"
1249fee69204035247fd2a5828863fc6f633e829f2Daniel Drake#include "dev.h"
135e8e8b5759566b76bdf36046ae015796676a423cHolger Schurig
144143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig#ifdef CONFIG_LIBERTAS_MESH
154143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig
165e8e8b5759566b76bdf36046ae015796676a423cHolger Schurigstruct net_device;
17e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig
18e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurigint lbs_init_mesh(struct lbs_private *priv);
1949fee69204035247fd2a5828863fc6f633e829f2Daniel Drakevoid lbs_start_mesh(struct lbs_private *priv);
20e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurigint lbs_deinit_mesh(struct lbs_private *priv);
21e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig
22e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurigvoid lbs_remove_mesh(struct lbs_private *priv);
23e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig
2449fee69204035247fd2a5828863fc6f633e829f2Daniel Drakestatic inline bool lbs_mesh_activated(struct lbs_private *priv)
2549fee69204035247fd2a5828863fc6f633e829f2Daniel Drake{
2649fee69204035247fd2a5828863fc6f633e829f2Daniel Drake	/* Mesh SSID is only programmed after successful init */
2749fee69204035247fd2a5828863fc6f633e829f2Daniel Drake	return priv->mesh_ssid_len != 0;
2849fee69204035247fd2a5828863fc6f633e829f2Daniel Drake}
2949fee69204035247fd2a5828863fc6f633e829f2Daniel Drake
3049fee69204035247fd2a5828863fc6f633e829f2Daniel Drakeint lbs_mesh_set_channel(struct lbs_private *priv, u8 channel);
31e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig
32e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig/* Sending / Receiving */
33e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig
34e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurigstruct rxpd;
35e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurigstruct txpd;
36e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig
37e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurigstruct net_device *lbs_mesh_set_dev(struct lbs_private *priv,
38e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig	struct net_device *dev, struct rxpd *rxpd);
39e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurigvoid lbs_mesh_set_txpd(struct lbs_private *priv,
40e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig	struct net_device *dev, struct txpd *txpd);
41e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig
42e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig
43ece1e3c61e59ba184150e5aff57bbc6355613e3eHolger Schurig/* Command handling */
44ece1e3c61e59ba184150e5aff57bbc6355613e3eHolger Schurig
45ece1e3c61e59ba184150e5aff57bbc6355613e3eHolger Schurigstruct cmd_ds_command;
4655e1ff924414111a6afbfde00375a1302aef9353Holger Schurigstruct cmd_ds_mesh_access;
4755e1ff924414111a6afbfde00375a1302aef9353Holger Schurigstruct cmd_ds_mesh_config;
48ece1e3c61e59ba184150e5aff57bbc6355613e3eHolger Schurig
49e0e42da3a4df6f487b59dad608db56e25001bcdbHolger Schurig
50c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurig/* Ethtool statistics */
51c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurig
52c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurigstruct ethtool_stats;
53c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurig
54c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurigvoid lbs_mesh_ethtool_get_stats(struct net_device *dev,
55c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurig	struct ethtool_stats *stats, uint64_t *data);
56c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurigint lbs_mesh_ethtool_get_sset_count(struct net_device *dev, int sset);
57c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurigvoid lbs_mesh_ethtool_get_strings(struct net_device *dev,
58c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurig	uint32_t stringset, uint8_t *s);
59c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurig
60c7fe64cf4a08561a9e8f57e6018a504881236e34Holger Schurig
614143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig#else
624143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig
634143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig#define lbs_init_mesh(priv)
644143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig#define lbs_deinit_mesh(priv)
6549fee69204035247fd2a5828863fc6f633e829f2Daniel Drake#define lbs_start_mesh(priv)
664143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig#define lbs_add_mesh(priv)
674143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig#define lbs_remove_mesh(priv)
684143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig#define lbs_mesh_set_dev(priv, dev, rxpd) (dev)
694143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig#define lbs_mesh_set_txpd(priv, dev, txpd)
7049fee69204035247fd2a5828863fc6f633e829f2Daniel Drake#define lbs_mesh_set_channel(priv, channel) (0)
7149fee69204035247fd2a5828863fc6f633e829f2Daniel Drake#define lbs_mesh_activated(priv) (false)
724143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig
734143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig#endif
744143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig
754143a23de096910e3ceb0939f41de6ffb8c59475Holger Schurig
76602114ae595af6c89eab149cf9f939e3f7ef4a34Holger Schurig
775e8e8b5759566b76bdf36046ae015796676a423cHolger Schurig#endif
78