Thomas Gleixner | d2912cb | 2019-06-04 10:11:33 +0200 | [diff] [blame^] | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
Solomon Peachy | a910e4a | 2013-05-24 20:04:38 -0400 | [diff] [blame] | 2 | /* |
| 3 | * Mac80211 STA interface for ST-Ericsson CW1200 mac80211 drivers |
| 4 | * |
| 5 | * Copyright (c) 2010, ST-Ericsson |
| 6 | * Author: Dmitry Tarnyagin <dmitry.tarnyagin@lockless.no> |
Solomon Peachy | a910e4a | 2013-05-24 20:04:38 -0400 | [diff] [blame] | 7 | */ |
| 8 | |
| 9 | #ifndef STA_H_INCLUDED |
| 10 | #define STA_H_INCLUDED |
| 11 | |
| 12 | /* ******************************************************************** */ |
| 13 | /* mac80211 API */ |
| 14 | |
| 15 | int cw1200_start(struct ieee80211_hw *dev); |
| 16 | void cw1200_stop(struct ieee80211_hw *dev); |
| 17 | int cw1200_add_interface(struct ieee80211_hw *dev, |
| 18 | struct ieee80211_vif *vif); |
| 19 | void cw1200_remove_interface(struct ieee80211_hw *dev, |
| 20 | struct ieee80211_vif *vif); |
| 21 | int cw1200_change_interface(struct ieee80211_hw *dev, |
| 22 | struct ieee80211_vif *vif, |
| 23 | enum nl80211_iftype new_type, |
| 24 | bool p2p); |
| 25 | int cw1200_config(struct ieee80211_hw *dev, u32 changed); |
| 26 | void cw1200_configure_filter(struct ieee80211_hw *dev, |
| 27 | unsigned int changed_flags, |
| 28 | unsigned int *total_flags, |
| 29 | u64 multicast); |
| 30 | int cw1200_conf_tx(struct ieee80211_hw *dev, struct ieee80211_vif *vif, |
| 31 | u16 queue, const struct ieee80211_tx_queue_params *params); |
| 32 | int cw1200_get_stats(struct ieee80211_hw *dev, |
| 33 | struct ieee80211_low_level_stats *stats); |
| 34 | int cw1200_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd, |
| 35 | struct ieee80211_vif *vif, struct ieee80211_sta *sta, |
| 36 | struct ieee80211_key_conf *key); |
| 37 | |
| 38 | int cw1200_set_rts_threshold(struct ieee80211_hw *hw, u32 value); |
| 39 | |
Emmanuel Grumbach | 77be2c5 | 2014-03-27 11:30:29 +0200 | [diff] [blame] | 40 | void cw1200_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
| 41 | u32 queues, bool drop); |
Solomon Peachy | a910e4a | 2013-05-24 20:04:38 -0400 | [diff] [blame] | 42 | |
| 43 | u64 cw1200_prepare_multicast(struct ieee80211_hw *hw, |
| 44 | struct netdev_hw_addr_list *mc_list); |
| 45 | |
| 46 | int cw1200_set_pm(struct cw1200_common *priv, const struct wsm_set_pm *arg); |
| 47 | |
| 48 | /* ******************************************************************** */ |
| 49 | /* WSM callbacks */ |
| 50 | |
| 51 | void cw1200_join_complete_cb(struct cw1200_common *priv, |
| 52 | struct wsm_join_complete *arg); |
| 53 | |
| 54 | /* ******************************************************************** */ |
| 55 | /* WSM events */ |
| 56 | |
| 57 | void cw1200_free_event_queue(struct cw1200_common *priv); |
| 58 | void cw1200_event_handler(struct work_struct *work); |
| 59 | void cw1200_bss_loss_work(struct work_struct *work); |
| 60 | void cw1200_bss_params_work(struct work_struct *work); |
| 61 | void cw1200_keep_alive_work(struct work_struct *work); |
| 62 | void cw1200_tx_failure_work(struct work_struct *work); |
| 63 | |
| 64 | void __cw1200_cqm_bssloss_sm(struct cw1200_common *priv, int init, int good, |
| 65 | int bad); |
| 66 | static inline void cw1200_cqm_bssloss_sm(struct cw1200_common *priv, |
| 67 | int init, int good, int bad) |
| 68 | { |
| 69 | spin_lock(&priv->bss_loss_lock); |
| 70 | __cw1200_cqm_bssloss_sm(priv, init, good, bad); |
| 71 | spin_unlock(&priv->bss_loss_lock); |
| 72 | } |
| 73 | |
| 74 | /* ******************************************************************** */ |
| 75 | /* Internal API */ |
| 76 | |
| 77 | int cw1200_setup_mac(struct cw1200_common *priv); |
| 78 | void cw1200_join_timeout(struct work_struct *work); |
| 79 | void cw1200_unjoin_work(struct work_struct *work); |
| 80 | void cw1200_join_complete_work(struct work_struct *work); |
| 81 | void cw1200_wep_key_work(struct work_struct *work); |
| 82 | void cw1200_update_listening(struct cw1200_common *priv, bool enabled); |
| 83 | void cw1200_update_filtering(struct cw1200_common *priv); |
| 84 | void cw1200_update_filtering_work(struct work_struct *work); |
| 85 | void cw1200_set_beacon_wakeup_period_work(struct work_struct *work); |
| 86 | int cw1200_enable_listening(struct cw1200_common *priv); |
| 87 | int cw1200_disable_listening(struct cw1200_common *priv); |
| 88 | int cw1200_set_uapsd_param(struct cw1200_common *priv, |
| 89 | const struct wsm_edca_params *arg); |
| 90 | void cw1200_ba_work(struct work_struct *work); |
| 91 | void cw1200_ba_timer(unsigned long arg); |
| 92 | |
| 93 | /* AP stuffs */ |
| 94 | int cw1200_set_tim(struct ieee80211_hw *dev, struct ieee80211_sta *sta, |
| 95 | bool set); |
| 96 | int cw1200_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
| 97 | struct ieee80211_sta *sta); |
| 98 | int cw1200_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
| 99 | struct ieee80211_sta *sta); |
| 100 | void cw1200_sta_notify(struct ieee80211_hw *dev, struct ieee80211_vif *vif, |
| 101 | enum sta_notify_cmd notify_cmd, |
| 102 | struct ieee80211_sta *sta); |
| 103 | void cw1200_bss_info_changed(struct ieee80211_hw *dev, |
| 104 | struct ieee80211_vif *vif, |
| 105 | struct ieee80211_bss_conf *info, |
| 106 | u32 changed); |
| 107 | int cw1200_ampdu_action(struct ieee80211_hw *hw, |
| 108 | struct ieee80211_vif *vif, |
Sara Sharon | 50ea05e | 2015-12-30 16:06:04 +0200 | [diff] [blame] | 109 | struct ieee80211_ampdu_params *params); |
Solomon Peachy | a910e4a | 2013-05-24 20:04:38 -0400 | [diff] [blame] | 110 | |
| 111 | void cw1200_suspend_resume(struct cw1200_common *priv, |
| 112 | struct wsm_suspend_resume *arg); |
| 113 | void cw1200_set_tim_work(struct work_struct *work); |
| 114 | void cw1200_set_cts_work(struct work_struct *work); |
| 115 | void cw1200_multicast_start_work(struct work_struct *work); |
| 116 | void cw1200_multicast_stop_work(struct work_struct *work); |
Kees Cook | e3dcf8b | 2017-10-24 02:29:00 -0700 | [diff] [blame] | 117 | void cw1200_mcast_timeout(struct timer_list *t); |
Solomon Peachy | a910e4a | 2013-05-24 20:04:38 -0400 | [diff] [blame] | 118 | |
| 119 | #endif |