mesh.h revision e86dc1ca4676445d9f0dfe35104efe0eb8a2f566
1/** 2 * Contains all definitions needed for the Libertas' MESH implementation. 3 */ 4#ifndef _LBS_MESH_H_ 5#define _LBS_MESH_H_ 6 7 8#include <net/iw_handler.h> 9#include <net/lib80211.h> 10 11 12#ifdef CONFIG_LIBERTAS_MESH 13 14/* Mesh statistics */ 15struct lbs_mesh_stats { 16 u32 fwd_bcast_cnt; /* Fwd: Broadcast counter */ 17 u32 fwd_unicast_cnt; /* Fwd: Unicast counter */ 18 u32 fwd_drop_ttl; /* Fwd: TTL zero */ 19 u32 fwd_drop_rbt; /* Fwd: Recently Broadcasted */ 20 u32 fwd_drop_noroute; /* Fwd: No route to Destination */ 21 u32 fwd_drop_nobuf; /* Fwd: Run out of internal buffers */ 22 u32 drop_blind; /* Rx: Dropped by blinding table */ 23 u32 tx_failed_cnt; /* Tx: Failed transmissions */ 24}; 25 26 27struct net_device; 28struct lbs_private; 29 30int lbs_init_mesh(struct lbs_private *priv); 31int lbs_deinit_mesh(struct lbs_private *priv); 32 33int lbs_add_mesh(struct lbs_private *priv); 34void lbs_remove_mesh(struct lbs_private *priv); 35 36 37/* Sending / Receiving */ 38 39struct rxpd; 40struct txpd; 41 42struct net_device *lbs_mesh_set_dev(struct lbs_private *priv, 43 struct net_device *dev, struct rxpd *rxpd); 44void lbs_mesh_set_txpd(struct lbs_private *priv, 45 struct net_device *dev, struct txpd *txpd); 46 47 48/* Command handling */ 49 50struct cmd_ds_command; 51struct cmd_ds_mesh_access; 52struct cmd_ds_mesh_config; 53 54int lbs_cmd_bt_access(struct cmd_ds_command *cmd, 55 u16 cmd_action, void *pdata_buf); 56int lbs_cmd_fwt_access(struct cmd_ds_command *cmd, 57 u16 cmd_action, void *pdata_buf); 58int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action, 59 struct cmd_ds_mesh_access *cmd); 60int lbs_mesh_config_send(struct lbs_private *priv, 61 struct cmd_ds_mesh_config *cmd, 62 uint16_t action, uint16_t type); 63int lbs_mesh_config(struct lbs_private *priv, uint16_t enable, uint16_t chan); 64 65 66 67/* Persistent configuration */ 68 69void lbs_persist_config_init(struct net_device *net); 70void lbs_persist_config_remove(struct net_device *net); 71 72 73/* Ethtool statistics */ 74 75struct ethtool_stats; 76 77void lbs_mesh_ethtool_get_stats(struct net_device *dev, 78 struct ethtool_stats *stats, uint64_t *data); 79int lbs_mesh_ethtool_get_sset_count(struct net_device *dev, int sset); 80void lbs_mesh_ethtool_get_strings(struct net_device *dev, 81 uint32_t stringset, uint8_t *s); 82 83 84/* Accessors */ 85 86#define lbs_mesh_open(priv) (priv->mesh_open) 87#define lbs_mesh_connected(priv) (priv->mesh_connect_status == LBS_CONNECTED) 88 89#else 90 91#define lbs_init_mesh(priv) 92#define lbs_deinit_mesh(priv) 93#define lbs_add_mesh(priv) 94#define lbs_remove_mesh(priv) 95#define lbs_mesh_set_dev(priv, dev, rxpd) (dev) 96#define lbs_mesh_set_txpd(priv, dev, txpd) 97#define lbs_mesh_config(priv, enable, chan) 98#define lbs_mesh_open(priv) (0) 99#define lbs_mesh_connected(priv) (0) 100 101#endif 102 103 104 105#endif 106