summaryrefslogtreecommitdiff
path: root/drivers/staging/cw1200/main.c
diff options
context:
space:
mode:
authorDmitry Tarnyagin <dmitry.tarnyagin@stericsson.com>2011-05-16 09:41:37 +0200
committerRobert Marklund <robert.marklund@stericsson.com>2011-10-05 12:12:27 +0200
commitab9a186770c4b3d3d825047a688d173f9a3a2e2d (patch)
tree7b7bf1eceae08f15dcd25c9518d6dd77c1111042 /drivers/staging/cw1200/main.c
parent7c399d9287d00678a9641a46ee3af2be848c9f81 (diff)
wlan: cw1200: .flush mac80211 API is implemented.
- .flush mac80211 API is implemented (expected to be called from mac80211 off_channel code). - TX queue statistics is implemented. Signed-off-by: Dmitry Tarnyagin <dmitry.tarnyagin@stericsson.com> Change-Id: If228ceccd856b699236999122c9989d0eca1e98d Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/23604 Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
Diffstat (limited to 'drivers/staging/cw1200/main.c')
-rw-r--r--drivers/staging/cw1200/main.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/staging/cw1200/main.c b/drivers/staging/cw1200/main.c
index 9cf3a3fba9e..a09832c7343 100644
--- a/drivers/staging/cw1200/main.c
+++ b/drivers/staging/cw1200/main.c
@@ -218,7 +218,11 @@ static const struct ieee80211_ops cw1200_ops = {
.conf_tx = cw1200_conf_tx,
.get_stats = cw1200_get_stats,
.ampdu_action = cw1200_ampdu_action,
- /* .get_tx_stats = cw1200_get_tx_stats */
+ .flush = cw1200_flush,
+ /* Intentionally not offloaded: */
+ /*.channel_switch = cw1200_channel_switch, */
+ /*.remain_on_channel = cw1200_remain_on_channel, */
+ /*.cancel_remain_on_channel = cw1200_cancel_remain_on_channel, */
};
struct ieee80211_hw *cw1200_init_common(size_t priv_data_len)
@@ -308,11 +312,18 @@ struct ieee80211_hw *cw1200_init_common(size_t priv_data_len)
INIT_WORK(&priv->multicast_start_work, cw1200_multicast_start_work);
INIT_WORK(&priv->multicast_stop_work, cw1200_multicast_stop_work);
+ if (unlikely(cw1200_queue_stats_init(&priv->tx_queue_stats,
+ CW1200_LINK_ID_AFTER_DTIM + 1))) {
+ ieee80211_free_hw(hw);
+ return NULL;
+ }
+
for (i = 0; i < 4; ++i) {
- if (unlikely(cw1200_queue_init(&priv->tx_queue[i], i,
- 16, CW1200_LINK_ID_AFTER_DTIM + 1))) {
+ if (unlikely(cw1200_queue_init(&priv->tx_queue[i],
+ &priv->tx_queue_stats, i, 16))) {
for (; i > 0; i--)
cw1200_queue_deinit(&priv->tx_queue[i - 1]);
+ cw1200_queue_stats_deinit(&priv->tx_queue_stats);
ieee80211_free_hw(hw);
return NULL;
}
@@ -364,6 +375,7 @@ EXPORT_SYMBOL_GPL(cw1200_free_common);
void cw1200_unregister_common(struct ieee80211_hw *dev)
{
struct cw1200_common *priv = dev->priv;
+ int i;
priv->sbus_ops->irq_unsubscribe(priv->sbus_priv);
cw1200_unregister_bh(priv);
@@ -388,6 +400,10 @@ void cw1200_unregister_common(struct ieee80211_hw *dev)
dev_kfree_skb(priv->skb_cache);
priv->skb_cache = NULL;
}
+
+ for (i = 0; i < 4; ++i)
+ cw1200_queue_deinit(&priv->tx_queue[i]);
+ cw1200_queue_stats_deinit(&priv->tx_queue_stats);
}
EXPORT_SYMBOL_GPL(cw1200_unregister_common);
@@ -421,7 +437,7 @@ int cw1200_probe(const struct sbus_ops *sbus_ops,
priv->wsm_cbc.rx = cw1200_rx_cb;
priv->wsm_cbc.suspend_resume = cw1200_suspend_resume;
/* priv->wsm_cbc.set_pm_complete = cw1200_set_pm_complete_cb; */
- /* priv->wsm_cbc.channel_switch = cw1200_channel_switch_cb; */
+ priv->wsm_cbc.channel_switch = cw1200_channel_switch_cb;
err = cw1200_register_bh(priv);
if (err)