diff options
author | Jussi Kivilinna <jussi.kivilinna@mbnet.fi> | 2011-01-31 13:47:56 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-02-04 16:29:49 -0500 |
commit | 5cf6cf819bfffd89fc8c7c3a7406f54da4945a34 (patch) | |
tree | 9f360fece2d9865f4b598864d923dc9e6e9fed9c | |
parent | a6fb071bbf420841481e1c1bcdb65b3ffb33fc8a (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.c | 27 | ||||
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_mac.h | 3 |
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 | ||
1001 | static void set_rts_cts_work(struct work_struct *work) | 1001 | static 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 | ||