aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>2011-01-31 13:47:56 -0500
committerJohn W. Linville <linville@tuxdriver.com>2011-02-04 16:29:49 -0500
commit5cf6cf819bfffd89fc8c7c3a7406f54da4945a34 (patch)
tree9f360fece2d9865f4b598864d923dc9e6e9fed9c
parenta6fb071bbf420841481e1c1bcdb65b3ffb33fc8a (diff)
zd1211rw: move set_rts_cts_work to bss_info_changed
As bss_info_changed may sleep, we can as well set RTS_CTS register right away. Keep mac->short_preamble for later use (hw reset). Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/zd1211rw/zd_mac.c27
-rw-r--r--drivers/net/wireless/zd1211rw/zd_mac.h3
2 files changed, 5 insertions, 25 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 75d9a137f318..487ed33e951d 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -998,20 +998,9 @@ static void zd_op_configure_filter(struct ieee80211_hw *hw,
998 * time. */ 998 * time. */
999} 999}
1000 1000
1001static void set_rts_cts_work(struct work_struct *work) 1001static void set_rts_cts(struct zd_mac *mac, unsigned int short_preamble)
1002{ 1002{
1003 struct zd_mac *mac =
1004 container_of(work, struct zd_mac, set_rts_cts_work);
1005 unsigned long flags;
1006 unsigned int short_preamble;
1007
1008 mutex_lock(&mac->chip.mutex); 1003 mutex_lock(&mac->chip.mutex);
1009
1010 spin_lock_irqsave(&mac->lock, flags);
1011 mac->updating_rts_rate = 0;
1012 short_preamble = mac->short_preamble;
1013 spin_unlock_irqrestore(&mac->lock, flags);
1014
1015 zd_chip_set_rts_cts_rate_locked(&mac->chip, short_preamble); 1004 zd_chip_set_rts_cts_rate_locked(&mac->chip, short_preamble);
1016 mutex_unlock(&mac->chip.mutex); 1005 mutex_unlock(&mac->chip.mutex);
1017} 1006}
@@ -1022,7 +1011,6 @@ static void zd_op_bss_info_changed(struct ieee80211_hw *hw,
1022 u32 changes) 1011 u32 changes)
1023{ 1012{
1024 struct zd_mac *mac = zd_hw_mac(hw); 1013 struct zd_mac *mac = zd_hw_mac(hw);
1025 unsigned long flags;
1026 int associated; 1014 int associated;
1027 1015
1028 dev_dbg_f(zd_mac_dev(mac), "changes: %x\n", changes); 1016 dev_dbg_f(zd_mac_dev(mac), "changes: %x\n", changes);
@@ -1060,15 +1048,11 @@ static void zd_op_bss_info_changed(struct ieee80211_hw *hw,
1060 /* TODO: do hardware bssid filtering */ 1048 /* TODO: do hardware bssid filtering */
1061 1049
1062 if (changes & BSS_CHANGED_ERP_PREAMBLE) { 1050 if (changes & BSS_CHANGED_ERP_PREAMBLE) {
1063 spin_lock_irqsave(&mac->lock, flags); 1051 spin_lock_irq(&mac->lock);
1064 mac->short_preamble = bss_conf->use_short_preamble; 1052 mac->short_preamble = bss_conf->use_short_preamble;
1065 if (!mac->updating_rts_rate) { 1053 spin_unlock_irq(&mac->lock);
1066 mac->updating_rts_rate = 1; 1054
1067 /* FIXME: should disable TX here, until work has 1055 set_rts_cts(mac, bss_conf->use_short_preamble);
1068 * completed and RTS_CTS reg is updated */
1069 queue_work(zd_workqueue, &mac->set_rts_cts_work);
1070 }
1071 spin_unlock_irqrestore(&mac->lock, flags);
1072 } 1056 }
1073} 1057}
1074 1058
@@ -1142,7 +1126,6 @@ struct ieee80211_hw *zd_mac_alloc_hw(struct usb_interface *intf)
1142 1126
1143 zd_chip_init(&mac->chip, hw, intf); 1127 zd_chip_init(&mac->chip, hw, intf);
1144 housekeeping_init(mac); 1128 housekeeping_init(mac);
1145 INIT_WORK(&mac->set_rts_cts_work, set_rts_cts_work);
1146 INIT_WORK(&mac->process_intr, zd_process_intr); 1129 INIT_WORK(&mac->process_intr, zd_process_intr);
1147 1130
1148 SET_IEEE80211_DEV(hw, &intf->dev); 1131 SET_IEEE80211_DEV(hw, &intf->dev);
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.h b/drivers/net/wireless/zd1211rw/zd_mac.h
index f28ecb94c2a4..ff7ef30372a1 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.h
+++ b/drivers/net/wireless/zd1211rw/zd_mac.h
@@ -189,9 +189,6 @@ struct zd_mac {
189 /* Short preamble (used for RTS/CTS) */ 189 /* Short preamble (used for RTS/CTS) */
190 unsigned int short_preamble:1; 190 unsigned int short_preamble:1;
191 191
192 /* flags to indicate update in progress */
193 unsigned int updating_rts_rate:1;
194
195 /* whether to pass frames with CRC errors to stack */ 192 /* whether to pass frames with CRC errors to stack */
196 unsigned int pass_failed_fcs:1; 193 unsigned int pass_failed_fcs:1;
197 194