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