From 6a64664ccd3d7f76845b24e434cb3b62c3f3a391 Mon Sep 17 00:00:00 2001 From: Dmitry Tarnyagin Date: Wed, 3 Aug 2011 22:24:40 +0200 Subject: cw1200: Minor fixes. * Driver unloading without prior "ifconfig wlan0 down" caused warnings in cw1200_remove_interface() and cw1200_setup_mac(). * Entering SoftAP mode caused a warning in cw1200_set_tim_impl(). * Scan request failed with timeout if current BSS was out of range. * wsm_set_pm is failing if scanned BSS is out of range, and it is not a fault. * Some state wariables were not reset to initial state in cw1200_stop(). ST-Ericsson ID: ER354873 ST-Ericsson ID: ER354919 Change-Id: I7f12748c0570de5c6f25aa8bf83b6012b44d87de Signed-off-by: Dmitry Tarnyagin Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/28232 Reviewed-by: Bartosz MARKOWSKI Tested-by: Bartosz MARKOWSKI Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/33496 Reviewed-by: Philippe LANGLAIS --- drivers/staging/cw1200/main.c | 3 ++- drivers/staging/cw1200/scan.c | 10 +++++----- drivers/staging/cw1200/sta.c | 4 ++++ drivers/staging/cw1200/txrx.c | 3 ++- drivers/staging/cw1200/wsm.c | 6 +++--- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/staging/cw1200/main.c b/drivers/staging/cw1200/main.c index 8782f92aca7..a704d12d469 100644 --- a/drivers/staging/cw1200/main.c +++ b/drivers/staging/cw1200/main.c @@ -390,6 +390,8 @@ void cw1200_unregister_common(struct ieee80211_hw *dev) struct cw1200_common *priv = dev->priv; int i; + ieee80211_unregister_hw(dev); + cw1200_debug_release(priv); priv->sbus_ops->irq_unsubscribe(priv->sbus_priv); @@ -399,7 +401,6 @@ void cw1200_unregister_common(struct ieee80211_hw *dev) cw1200_unregister_leds(priv); #endif /* CONFIG_CW1200_LEDS */ - ieee80211_unregister_hw(dev); mutex_destroy(&priv->conf_mutex); mutex_destroy(&priv->eeprom_mutex); diff --git a/drivers/staging/cw1200/scan.c b/drivers/staging/cw1200/scan.c index 7fb42d4ee05..17706e58549 100644 --- a/drivers/staging/cw1200/scan.c +++ b/drivers/staging/cw1200/scan.c @@ -16,7 +16,7 @@ static int cw1200_scan_start(struct cw1200_common *priv, struct wsm_scan *scan) { int ret, i; - int tmo = 1000; + int tmo = 2000; for (i = 0; i < scan->numOfChannels; ++i) tmo += scan->ch[i].maxChannelTime + 10; @@ -91,7 +91,7 @@ int cw1200_hw_scan(struct ieee80211_hw *hw, !(priv->powersave_mode.pmMode & WSM_PSM_PS)) { struct wsm_set_pm pm = priv->powersave_mode; pm.pmMode = WSM_PSM_PS; - WARN_ON(wsm_set_pm(priv, &pm)); + wsm_set_pm(priv, &pm); } BUG_ON(priv->scan.req); @@ -140,7 +140,7 @@ void cw1200_scan_work(struct work_struct *work) priv->output_power * 10)); if (priv->join_status == CW1200_JOIN_STATUS_STA && !(priv->powersave_mode.pmMode & WSM_PSM_PS)) - WARN_ON(wsm_set_pm(priv, &priv->powersave_mode)); + wsm_set_pm(priv, &priv->powersave_mode); if (priv->scan.req) printk(KERN_DEBUG "[SCAN] Scan completed.\n"); @@ -273,8 +273,8 @@ void cw1200_scan_timeout(struct work_struct *work) struct cw1200_common *priv = container_of(work, struct cw1200_common, scan.timeout.work); if (likely(atomic_xchg(&priv->scan.in_progress, 0))) { - cw1200_dbg(CW1200_DBG_ERROR, - "CW1200 FW: Timeout waiting for scan " \ + wiphy_warn(priv->hw->wiphy, + "Timeout waiting for scan " \ "complete notification.\n"); cw1200_scan_complete(priv); } diff --git a/drivers/staging/cw1200/sta.c b/drivers/staging/cw1200/sta.c index c24e5c3c8c8..e69bd729f07 100644 --- a/drivers/staging/cw1200/sta.c +++ b/drivers/staging/cw1200/sta.c @@ -121,6 +121,10 @@ void cw1200_stop(struct ieee80211_hw *dev) * through the map and reset each link separately. */ WARN_ON(priv->link_id_map); priv->sta_asleep_mask = 0; + priv->enable_beacon = false; + priv->tx_multicast = false; + priv->aid0_bit_set = false; + priv->buffered_multicasts = false; wsm_reset(priv, &reset); break; case CW1200_JOIN_STATUS_MONITOR: diff --git a/drivers/staging/cw1200/txrx.c b/drivers/staging/cw1200/txrx.c index 8531994d3da..6cae1a046d6 100644 --- a/drivers/staging/cw1200/txrx.c +++ b/drivers/staging/cw1200/txrx.c @@ -426,7 +426,8 @@ void cw1200_tx(struct ieee80211_hw *dev, struct sk_buff *skb) int ret; if ((tx_info->flags | IEEE80211_TX_CTL_SEND_AFTER_DTIM) && - (priv->mode == NL80211_IFTYPE_AP)) + (priv->mode == NL80211_IFTYPE_AP) && + priv->enable_beacon) link_id = CW1200_LINK_ID_AFTER_DTIM; else if (tx_info->control.sta) link_id = sta_priv->link_id; diff --git a/drivers/staging/cw1200/wsm.c b/drivers/staging/cw1200/wsm.c index 035f8e3d8ce..097bd6d20f1 100644 --- a/drivers/staging/cw1200/wsm.c +++ b/drivers/staging/cw1200/wsm.c @@ -1184,10 +1184,10 @@ int wsm_handle_rx(struct cw1200_common *priv, int id, WARN_ON(wsm_arg != NULL); ret = wsm_generic_confirm(priv, wsm_arg, &wsm_buf); if (ret) - printk(KERN_ERR - "[WSM] wsm_generic_confirm " + wiphy_warn(priv->hw->wiphy, + "wsm_generic_confirm " "failed for request 0x%.4X.\n", - id); + id & ~0x0400); break; default: BUG_ON(1); -- cgit v1.2.3