aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/main.h
diff options
context:
space:
mode:
authorAvinash Patil <patila@marvell.com>2014-11-13 11:24:16 -0500
committerJohn W. Linville <linville@tuxdriver.com>2014-11-17 15:32:14 -0500
commit9927baa3c7244b1f80582fc7360a7662bcb648ba (patch)
tree83cf97d5dfa4cf33c6a86389f780602ac87789d9 /drivers/net/wireless/mwifiex/main.h
parent16fa5e659f3c3b2a5edfd0a40fc8d0116d9cd52b (diff)
mwifiex: add auto TDLS support
This patch adds auto TDLS support to mwifiex. Auto TDLS functionality works as follows: 1. Whenever userspace application has triggered TDLS connection with any peer, driver would store this peer mac address details in its database. 2. After this driver whenever driver receives packet on direct link, it would store rssi and timestamp in peer information. 3. Whenever a packet is to be transmitted to non-AP peer in station mode, driver would check if TDLS link can be established by looking at peer RSSI information. Driver would initiate TDLS setup in such cases. 4. Periodic timer is used for updating peer information. 5. Auto TDLS peer list & timer are cleared during disconnection or driver unload. Signed-off-by: Avinash Patil <patila@marvell.com> Signed-off-by: Cathy Luo <cluo@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/mwifiex/main.h')
-rw-r--r--drivers/net/wireless/mwifiex/main.h31
1 files changed, 30 insertions, 1 deletions
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h
index fa84888cf092..51a67f34c8cb 100644
--- a/drivers/net/wireless/mwifiex/main.h
+++ b/drivers/net/wireless/mwifiex/main.h
@@ -506,8 +506,11 @@ struct mwifiex_private {
506 struct mwifiex_wmm_desc wmm; 506 struct mwifiex_wmm_desc wmm;
507 atomic_t wmm_tx_pending[IEEE80211_NUM_ACS]; 507 atomic_t wmm_tx_pending[IEEE80211_NUM_ACS];
508 struct list_head sta_list; 508 struct list_head sta_list;
509 /* spin lock for associated station list */ 509 /* spin lock for associated station/TDLS peers list */
510 spinlock_t sta_list_spinlock; 510 spinlock_t sta_list_spinlock;
511 struct list_head auto_tdls_list;
512 /* spin lock for auto TDLS peer list */
513 spinlock_t auto_tdls_lock;
511 struct list_head tx_ba_stream_tbl_ptr; 514 struct list_head tx_ba_stream_tbl_ptr;
512 /* spin lock for tx_ba_stream_tbl_ptr queue */ 515 /* spin lock for tx_ba_stream_tbl_ptr queue */
513 spinlock_t tx_ba_stream_tbl_lock; 516 spinlock_t tx_ba_stream_tbl_lock;
@@ -572,6 +575,9 @@ struct mwifiex_private {
572 bool hs2_enabled; 575 bool hs2_enabled;
573 struct station_parameters *sta_params; 576 struct station_parameters *sta_params;
574 struct sk_buff_head tdls_txq; 577 struct sk_buff_head tdls_txq;
578 u8 check_tdls_tx;
579 struct timer_list auto_tdls_timer;
580 bool auto_tdls_timer_active;
575}; 581};
576 582
577enum mwifiex_ba_status { 583enum mwifiex_ba_status {
@@ -671,6 +677,17 @@ struct mwifiex_sta_node {
671 struct mwifiex_tdls_capab tdls_cap; 677 struct mwifiex_tdls_capab tdls_cap;
672}; 678};
673 679
680struct mwifiex_auto_tdls_peer {
681 struct list_head list;
682 u8 mac_addr[ETH_ALEN];
683 u8 tdls_status;
684 int rssi;
685 long rssi_jiffies;
686 u8 failure_count;
687 u8 do_discover;
688 u8 do_setup;
689};
690
674struct mwifiex_if_ops { 691struct mwifiex_if_ops {
675 int (*init_if) (struct mwifiex_adapter *); 692 int (*init_if) (struct mwifiex_adapter *);
676 void (*cleanup_if) (struct mwifiex_adapter *); 693 void (*cleanup_if) (struct mwifiex_adapter *);
@@ -848,6 +865,7 @@ struct mwifiex_adapter {
848 struct mwifiex_chan_stats *chan_stats; 865 struct mwifiex_chan_stats *chan_stats;
849 u32 num_in_chan_stats; 866 u32 num_in_chan_stats;
850 int survey_idx; 867 int survey_idx;
868 bool auto_tdls;
851}; 869};
852 870
853int mwifiex_init_lock_list(struct mwifiex_adapter *adapter); 871int mwifiex_init_lock_list(struct mwifiex_adapter *adapter);
@@ -1305,6 +1323,17 @@ u8 mwifiex_get_center_freq_index(struct mwifiex_private *priv, u8 band,
1305 u32 pri_chan, u8 chan_bw); 1323 u32 pri_chan, u8 chan_bw);
1306int mwifiex_init_channel_scan_gap(struct mwifiex_adapter *adapter); 1324int mwifiex_init_channel_scan_gap(struct mwifiex_adapter *adapter);
1307 1325
1326int mwifiex_tdls_check_tx(struct mwifiex_private *priv, struct sk_buff *skb);
1327void mwifiex_flush_auto_tdls_list(struct mwifiex_private *priv);
1328void mwifiex_auto_tdls_update_peer_status(struct mwifiex_private *priv,
1329 const u8 *mac, u8 link_status);
1330void mwifiex_auto_tdls_update_peer_signal(struct mwifiex_private *priv,
1331 u8 *mac, s8 snr, s8 nflr);
1332void mwifiex_check_auto_tdls(unsigned long context);
1333void mwifiex_add_auto_tdls_peer(struct mwifiex_private *priv, const u8 *mac);
1334void mwifiex_setup_auto_tdls_timer(struct mwifiex_private *priv);
1335void mwifiex_clean_auto_tdls(struct mwifiex_private *priv);
1336
1308#ifdef CONFIG_DEBUG_FS 1337#ifdef CONFIG_DEBUG_FS
1309void mwifiex_debugfs_init(void); 1338void mwifiex_debugfs_init(void);
1310void mwifiex_debugfs_remove(void); 1339void mwifiex_debugfs_remove(void);