diff options
Diffstat (limited to 'drivers/net/wireless/ipw2200.c')
| -rw-r--r-- | drivers/net/wireless/ipw2200.c | 227 |
1 files changed, 123 insertions, 104 deletions
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index 1f742814a01c..587a0918fa52 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
| @@ -187,9 +187,9 @@ static struct ipw_rx_queue *ipw_rx_queue_alloc(struct ipw_priv *); | |||
| 187 | static void ipw_rx_queue_free(struct ipw_priv *, struct ipw_rx_queue *); | 187 | static void ipw_rx_queue_free(struct ipw_priv *, struct ipw_rx_queue *); |
| 188 | static void ipw_rx_queue_replenish(void *); | 188 | static void ipw_rx_queue_replenish(void *); |
| 189 | static int ipw_up(struct ipw_priv *); | 189 | static int ipw_up(struct ipw_priv *); |
| 190 | static void ipw_bg_up(void *); | 190 | static void ipw_bg_up(struct work_struct *work); |
| 191 | static void ipw_down(struct ipw_priv *); | 191 | static void ipw_down(struct ipw_priv *); |
| 192 | static void ipw_bg_down(void *); | 192 | static void ipw_bg_down(struct work_struct *work); |
| 193 | static int ipw_config(struct ipw_priv *); | 193 | static int ipw_config(struct ipw_priv *); |
| 194 | static int init_supported_rates(struct ipw_priv *priv, | 194 | static int init_supported_rates(struct ipw_priv *priv, |
| 195 | struct ipw_supported_rates *prates); | 195 | struct ipw_supported_rates *prates); |
| @@ -862,11 +862,12 @@ static void ipw_led_link_on(struct ipw_priv *priv) | |||
| 862 | spin_unlock_irqrestore(&priv->lock, flags); | 862 | spin_unlock_irqrestore(&priv->lock, flags); |
| 863 | } | 863 | } |
| 864 | 864 | ||
| 865 | static void ipw_bg_led_link_on(void *data) | 865 | static void ipw_bg_led_link_on(struct work_struct *work) |
| 866 | { | 866 | { |
| 867 | struct ipw_priv *priv = data; | 867 | struct ipw_priv *priv = |
| 868 | container_of(work, struct ipw_priv, led_link_on.work); | ||
| 868 | mutex_lock(&priv->mutex); | 869 | mutex_lock(&priv->mutex); |
| 869 | ipw_led_link_on(data); | 870 | ipw_led_link_on(priv); |
| 870 | mutex_unlock(&priv->mutex); | 871 | mutex_unlock(&priv->mutex); |
| 871 | } | 872 | } |
| 872 | 873 | ||
| @@ -906,11 +907,12 @@ static void ipw_led_link_off(struct ipw_priv *priv) | |||
| 906 | spin_unlock_irqrestore(&priv->lock, flags); | 907 | spin_unlock_irqrestore(&priv->lock, flags); |
| 907 | } | 908 | } |
| 908 | 909 | ||
| 909 | static void ipw_bg_led_link_off(void *data) | 910 | static void ipw_bg_led_link_off(struct work_struct *work) |
| 910 | { | 911 | { |
| 911 | struct ipw_priv *priv = data; | 912 | struct ipw_priv *priv = |
| 913 | container_of(work, struct ipw_priv, led_link_off.work); | ||
| 912 | mutex_lock(&priv->mutex); | 914 | mutex_lock(&priv->mutex); |
| 913 | ipw_led_link_off(data); | 915 | ipw_led_link_off(priv); |
| 914 | mutex_unlock(&priv->mutex); | 916 | mutex_unlock(&priv->mutex); |
| 915 | } | 917 | } |
| 916 | 918 | ||
| @@ -985,11 +987,12 @@ static void ipw_led_activity_off(struct ipw_priv *priv) | |||
| 985 | spin_unlock_irqrestore(&priv->lock, flags); | 987 | spin_unlock_irqrestore(&priv->lock, flags); |
| 986 | } | 988 | } |
| 987 | 989 | ||
| 988 | static void ipw_bg_led_activity_off(void *data) | 990 | static void ipw_bg_led_activity_off(struct work_struct *work) |
| 989 | { | 991 | { |
| 990 | struct ipw_priv *priv = data; | 992 | struct ipw_priv *priv = |
| 993 | container_of(work, struct ipw_priv, led_act_off.work); | ||
| 991 | mutex_lock(&priv->mutex); | 994 | mutex_lock(&priv->mutex); |
| 992 | ipw_led_activity_off(data); | 995 | ipw_led_activity_off(priv); |
| 993 | mutex_unlock(&priv->mutex); | 996 | mutex_unlock(&priv->mutex); |
| 994 | } | 997 | } |
| 995 | 998 | ||
| @@ -2228,11 +2231,12 @@ static void ipw_adapter_restart(void *adapter) | |||
| 2228 | } | 2231 | } |
| 2229 | } | 2232 | } |
| 2230 | 2233 | ||
| 2231 | static void ipw_bg_adapter_restart(void *data) | 2234 | static void ipw_bg_adapter_restart(struct work_struct *work) |
| 2232 | { | 2235 | { |
| 2233 | struct ipw_priv *priv = data; | 2236 | struct ipw_priv *priv = |
| 2237 | container_of(work, struct ipw_priv, adapter_restart); | ||
| 2234 | mutex_lock(&priv->mutex); | 2238 | mutex_lock(&priv->mutex); |
| 2235 | ipw_adapter_restart(data); | 2239 | ipw_adapter_restart(priv); |
| 2236 | mutex_unlock(&priv->mutex); | 2240 | mutex_unlock(&priv->mutex); |
| 2237 | } | 2241 | } |
| 2238 | 2242 | ||
| @@ -2249,11 +2253,12 @@ static void ipw_scan_check(void *data) | |||
| 2249 | } | 2253 | } |
| 2250 | } | 2254 | } |
| 2251 | 2255 | ||
| 2252 | static void ipw_bg_scan_check(void *data) | 2256 | static void ipw_bg_scan_check(struct work_struct *work) |
| 2253 | { | 2257 | { |
| 2254 | struct ipw_priv *priv = data; | 2258 | struct ipw_priv *priv = |
| 2259 | container_of(work, struct ipw_priv, scan_check.work); | ||
| 2255 | mutex_lock(&priv->mutex); | 2260 | mutex_lock(&priv->mutex); |
| 2256 | ipw_scan_check(data); | 2261 | ipw_scan_check(priv); |
| 2257 | mutex_unlock(&priv->mutex); | 2262 | mutex_unlock(&priv->mutex); |
| 2258 | } | 2263 | } |
| 2259 | 2264 | ||
| @@ -3831,17 +3836,19 @@ static int ipw_disassociate(void *data) | |||
| 3831 | return 1; | 3836 | return 1; |
| 3832 | } | 3837 | } |
| 3833 | 3838 | ||
| 3834 | static void ipw_bg_disassociate(void *data) | 3839 | static void ipw_bg_disassociate(struct work_struct *work) |
| 3835 | { | 3840 | { |
| 3836 | struct ipw_priv *priv = data; | 3841 | struct ipw_priv *priv = |
| 3842 | container_of(work, struct ipw_priv, disassociate); | ||
| 3837 | mutex_lock(&priv->mutex); | 3843 | mutex_lock(&priv->mutex); |
| 3838 | ipw_disassociate(data); | 3844 | ipw_disassociate(priv); |
| 3839 | mutex_unlock(&priv->mutex); | 3845 | mutex_unlock(&priv->mutex); |
| 3840 | } | 3846 | } |
| 3841 | 3847 | ||
| 3842 | static void ipw_system_config(void *data) | 3848 | static void ipw_system_config(struct work_struct *work) |
| 3843 | { | 3849 | { |
| 3844 | struct ipw_priv *priv = data; | 3850 | struct ipw_priv *priv = |
| 3851 | container_of(work, struct ipw_priv, system_config); | ||
| 3845 | 3852 | ||
| 3846 | #ifdef CONFIG_IPW2200_PROMISCUOUS | 3853 | #ifdef CONFIG_IPW2200_PROMISCUOUS |
| 3847 | if (priv->prom_net_dev && netif_running(priv->prom_net_dev)) { | 3854 | if (priv->prom_net_dev && netif_running(priv->prom_net_dev)) { |
| @@ -4208,11 +4215,12 @@ static void ipw_gather_stats(struct ipw_priv *priv) | |||
| 4208 | IPW_STATS_INTERVAL); | 4215 | IPW_STATS_INTERVAL); |
| 4209 | } | 4216 | } |
| 4210 | 4217 | ||
| 4211 | static void ipw_bg_gather_stats(void *data) | 4218 | static void ipw_bg_gather_stats(struct work_struct *work) |
| 4212 | { | 4219 | { |
| 4213 | struct ipw_priv *priv = data; | 4220 | struct ipw_priv *priv = |
| 4221 | container_of(work, struct ipw_priv, gather_stats.work); | ||
| 4214 | mutex_lock(&priv->mutex); | 4222 | mutex_lock(&priv->mutex); |
| 4215 | ipw_gather_stats(data); | 4223 | ipw_gather_stats(priv); |
| 4216 | mutex_unlock(&priv->mutex); | 4224 | mutex_unlock(&priv->mutex); |
| 4217 | } | 4225 | } |
| 4218 | 4226 | ||
| @@ -4268,8 +4276,8 @@ static void ipw_handle_missed_beacon(struct ipw_priv *priv, | |||
| 4268 | if (!(priv->status & STATUS_ROAMING)) { | 4276 | if (!(priv->status & STATUS_ROAMING)) { |
| 4269 | priv->status |= STATUS_ROAMING; | 4277 | priv->status |= STATUS_ROAMING; |
| 4270 | if (!(priv->status & STATUS_SCANNING)) | 4278 | if (!(priv->status & STATUS_SCANNING)) |
| 4271 | queue_work(priv->workqueue, | 4279 | queue_delayed_work(priv->workqueue, |
| 4272 | &priv->request_scan); | 4280 | &priv->request_scan, 0); |
| 4273 | } | 4281 | } |
| 4274 | return; | 4282 | return; |
| 4275 | } | 4283 | } |
| @@ -4607,8 +4615,8 @@ static void ipw_rx_notification(struct ipw_priv *priv, | |||
| 4607 | #ifdef CONFIG_IPW2200_MONITOR | 4615 | #ifdef CONFIG_IPW2200_MONITOR |
| 4608 | if (priv->ieee->iw_mode == IW_MODE_MONITOR) { | 4616 | if (priv->ieee->iw_mode == IW_MODE_MONITOR) { |
| 4609 | priv->status |= STATUS_SCAN_FORCED; | 4617 | priv->status |= STATUS_SCAN_FORCED; |
| 4610 | queue_work(priv->workqueue, | 4618 | queue_delayed_work(priv->workqueue, |
| 4611 | &priv->request_scan); | 4619 | &priv->request_scan, 0); |
| 4612 | break; | 4620 | break; |
| 4613 | } | 4621 | } |
| 4614 | priv->status &= ~STATUS_SCAN_FORCED; | 4622 | priv->status &= ~STATUS_SCAN_FORCED; |
| @@ -4631,8 +4639,8 @@ static void ipw_rx_notification(struct ipw_priv *priv, | |||
| 4631 | /* Don't schedule if we aborted the scan */ | 4639 | /* Don't schedule if we aborted the scan */ |
| 4632 | priv->status &= ~STATUS_ROAMING; | 4640 | priv->status &= ~STATUS_ROAMING; |
| 4633 | } else if (priv->status & STATUS_SCAN_PENDING) | 4641 | } else if (priv->status & STATUS_SCAN_PENDING) |
| 4634 | queue_work(priv->workqueue, | 4642 | queue_delayed_work(priv->workqueue, |
| 4635 | &priv->request_scan); | 4643 | &priv->request_scan, 0); |
| 4636 | else if (priv->config & CFG_BACKGROUND_SCAN | 4644 | else if (priv->config & CFG_BACKGROUND_SCAN |
| 4637 | && priv->status & STATUS_ASSOCIATED) | 4645 | && priv->status & STATUS_ASSOCIATED) |
| 4638 | queue_delayed_work(priv->workqueue, | 4646 | queue_delayed_work(priv->workqueue, |
| @@ -5055,11 +5063,12 @@ static void ipw_rx_queue_replenish(void *data) | |||
| 5055 | ipw_rx_queue_restock(priv); | 5063 | ipw_rx_queue_restock(priv); |
| 5056 | } | 5064 | } |
| 5057 | 5065 | ||
| 5058 | static void ipw_bg_rx_queue_replenish(void *data) | 5066 | static void ipw_bg_rx_queue_replenish(struct work_struct *work) |
| 5059 | { | 5067 | { |
| 5060 | struct ipw_priv *priv = data; | 5068 | struct ipw_priv *priv = |
| 5069 | container_of(work, struct ipw_priv, rx_replenish); | ||
| 5061 | mutex_lock(&priv->mutex); | 5070 | mutex_lock(&priv->mutex); |
| 5062 | ipw_rx_queue_replenish(data); | 5071 | ipw_rx_queue_replenish(priv); |
| 5063 | mutex_unlock(&priv->mutex); | 5072 | mutex_unlock(&priv->mutex); |
| 5064 | } | 5073 | } |
| 5065 | 5074 | ||
| @@ -5489,9 +5498,10 @@ static int ipw_find_adhoc_network(struct ipw_priv *priv, | |||
| 5489 | return 1; | 5498 | return 1; |
| 5490 | } | 5499 | } |
| 5491 | 5500 | ||
| 5492 | static void ipw_merge_adhoc_network(void *data) | 5501 | static void ipw_merge_adhoc_network(struct work_struct *work) |
| 5493 | { | 5502 | { |
| 5494 | struct ipw_priv *priv = data; | 5503 | struct ipw_priv *priv = |
| 5504 | container_of(work, struct ipw_priv, merge_networks); | ||
| 5495 | struct ieee80211_network *network = NULL; | 5505 | struct ieee80211_network *network = NULL; |
| 5496 | struct ipw_network_match match = { | 5506 | struct ipw_network_match match = { |
| 5497 | .network = priv->assoc_network | 5507 | .network = priv->assoc_network |
| @@ -5948,11 +5958,12 @@ static void ipw_adhoc_check(void *data) | |||
| 5948 | priv->assoc_request.beacon_interval); | 5958 | priv->assoc_request.beacon_interval); |
| 5949 | } | 5959 | } |
| 5950 | 5960 | ||
| 5951 | static void ipw_bg_adhoc_check(void *data) | 5961 | static void ipw_bg_adhoc_check(struct work_struct *work) |
| 5952 | { | 5962 | { |
| 5953 | struct ipw_priv *priv = data; | 5963 | struct ipw_priv *priv = |
| 5964 | container_of(work, struct ipw_priv, adhoc_check.work); | ||
| 5954 | mutex_lock(&priv->mutex); | 5965 | mutex_lock(&priv->mutex); |
| 5955 | ipw_adhoc_check(data); | 5966 | ipw_adhoc_check(priv); |
| 5956 | mutex_unlock(&priv->mutex); | 5967 | mutex_unlock(&priv->mutex); |
| 5957 | } | 5968 | } |
| 5958 | 5969 | ||
| @@ -6299,19 +6310,26 @@ done: | |||
| 6299 | return err; | 6310 | return err; |
| 6300 | } | 6311 | } |
| 6301 | 6312 | ||
| 6302 | static int ipw_request_passive_scan(struct ipw_priv *priv) { | 6313 | static void ipw_request_passive_scan(struct work_struct *work) |
| 6303 | return ipw_request_scan_helper(priv, IW_SCAN_TYPE_PASSIVE); | 6314 | { |
| 6315 | struct ipw_priv *priv = | ||
| 6316 | container_of(work, struct ipw_priv, request_passive_scan); | ||
| 6317 | ipw_request_scan_helper(priv, IW_SCAN_TYPE_PASSIVE); | ||
| 6304 | } | 6318 | } |
| 6305 | 6319 | ||
| 6306 | static int ipw_request_scan(struct ipw_priv *priv) { | 6320 | static void ipw_request_scan(struct work_struct *work) |
| 6307 | return ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE); | 6321 | { |
| 6322 | struct ipw_priv *priv = | ||
| 6323 | container_of(work, struct ipw_priv, request_scan.work); | ||
| 6324 | ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE); | ||
| 6308 | } | 6325 | } |
| 6309 | 6326 | ||
| 6310 | static void ipw_bg_abort_scan(void *data) | 6327 | static void ipw_bg_abort_scan(struct work_struct *work) |
| 6311 | { | 6328 | { |
| 6312 | struct ipw_priv *priv = data; | 6329 | struct ipw_priv *priv = |
| 6330 | container_of(work, struct ipw_priv, abort_scan); | ||
| 6313 | mutex_lock(&priv->mutex); | 6331 | mutex_lock(&priv->mutex); |
| 6314 | ipw_abort_scan(data); | 6332 | ipw_abort_scan(priv); |
| 6315 | mutex_unlock(&priv->mutex); | 6333 | mutex_unlock(&priv->mutex); |
| 6316 | } | 6334 | } |
| 6317 | 6335 | ||
| @@ -7084,9 +7102,10 @@ static int ipw_qos_set_tx_queue_command(struct ipw_priv *priv, | |||
| 7084 | /* | 7102 | /* |
| 7085 | * background support to run QoS activate functionality | 7103 | * background support to run QoS activate functionality |
| 7086 | */ | 7104 | */ |
| 7087 | static void ipw_bg_qos_activate(void *data) | 7105 | static void ipw_bg_qos_activate(struct work_struct *work) |
| 7088 | { | 7106 | { |
| 7089 | struct ipw_priv *priv = data; | 7107 | struct ipw_priv *priv = |
| 7108 | container_of(work, struct ipw_priv, qos_activate); | ||
| 7090 | 7109 | ||
| 7091 | if (priv == NULL) | 7110 | if (priv == NULL) |
| 7092 | return; | 7111 | return; |
| @@ -7394,11 +7413,12 @@ static void ipw_roam(void *data) | |||
| 7394 | priv->status &= ~STATUS_ROAMING; | 7413 | priv->status &= ~STATUS_ROAMING; |
| 7395 | } | 7414 | } |
| 7396 | 7415 | ||
| 7397 | static void ipw_bg_roam(void *data) | 7416 | static void ipw_bg_roam(struct work_struct *work) |
| 7398 | { | 7417 | { |
| 7399 | struct ipw_priv *priv = data; | 7418 | struct ipw_priv *priv = |
| 7419 | container_of(work, struct ipw_priv, roam); | ||
| 7400 | mutex_lock(&priv->mutex); | 7420 | mutex_lock(&priv->mutex); |
| 7401 | ipw_roam(data); | 7421 | ipw_roam(priv); |
| 7402 | mutex_unlock(&priv->mutex); | 7422 | mutex_unlock(&priv->mutex); |
| 7403 | } | 7423 | } |
| 7404 | 7424 | ||
| @@ -7479,8 +7499,8 @@ static int ipw_associate(void *data) | |||
| 7479 | &priv->request_scan, | 7499 | &priv->request_scan, |
| 7480 | SCAN_INTERVAL); | 7500 | SCAN_INTERVAL); |
| 7481 | else | 7501 | else |
| 7482 | queue_work(priv->workqueue, | 7502 | queue_delayed_work(priv->workqueue, |
| 7483 | &priv->request_scan); | 7503 | &priv->request_scan, 0); |
| 7484 | } | 7504 | } |
| 7485 | 7505 | ||
| 7486 | return 0; | 7506 | return 0; |
| @@ -7491,11 +7511,12 @@ static int ipw_associate(void *data) | |||
| 7491 | return 1; | 7511 | return 1; |
| 7492 | } | 7512 | } |
| 7493 | 7513 | ||
| 7494 | static void ipw_bg_associate(void *data) | 7514 | static void ipw_bg_associate(struct work_struct *work) |
| 7495 | { | 7515 | { |
| 7496 | struct ipw_priv *priv = data; | 7516 | struct ipw_priv *priv = |
| 7517 | container_of(work, struct ipw_priv, associate); | ||
| 7497 | mutex_lock(&priv->mutex); | 7518 | mutex_lock(&priv->mutex); |
| 7498 | ipw_associate(data); | 7519 | ipw_associate(priv); |
| 7499 | mutex_unlock(&priv->mutex); | 7520 | mutex_unlock(&priv->mutex); |
| 7500 | } | 7521 | } |
| 7501 | 7522 | ||
| @@ -9410,7 +9431,7 @@ static int ipw_wx_set_scan(struct net_device *dev, | |||
| 9410 | 9431 | ||
| 9411 | IPW_DEBUG_WX("Start scan\n"); | 9432 | IPW_DEBUG_WX("Start scan\n"); |
| 9412 | 9433 | ||
| 9413 | queue_work(priv->workqueue, &priv->request_scan); | 9434 | queue_delayed_work(priv->workqueue, &priv->request_scan, 0); |
| 9414 | 9435 | ||
| 9415 | return 0; | 9436 | return 0; |
| 9416 | } | 9437 | } |
| @@ -10547,11 +10568,12 @@ static void ipw_rf_kill(void *adapter) | |||
| 10547 | spin_unlock_irqrestore(&priv->lock, flags); | 10568 | spin_unlock_irqrestore(&priv->lock, flags); |
| 10548 | } | 10569 | } |
| 10549 | 10570 | ||
| 10550 | static void ipw_bg_rf_kill(void *data) | 10571 | static void ipw_bg_rf_kill(struct work_struct *work) |
| 10551 | { | 10572 | { |
| 10552 | struct ipw_priv *priv = data; | 10573 | struct ipw_priv *priv = |
| 10574 | container_of(work, struct ipw_priv, rf_kill.work); | ||
| 10553 | mutex_lock(&priv->mutex); | 10575 | mutex_lock(&priv->mutex); |
| 10554 | ipw_rf_kill(data); | 10576 | ipw_rf_kill(priv); |
| 10555 | mutex_unlock(&priv->mutex); | 10577 | mutex_unlock(&priv->mutex); |
| 10556 | } | 10578 | } |
| 10557 | 10579 | ||
| @@ -10582,11 +10604,12 @@ static void ipw_link_up(struct ipw_priv *priv) | |||
| 10582 | queue_delayed_work(priv->workqueue, &priv->request_scan, HZ); | 10604 | queue_delayed_work(priv->workqueue, &priv->request_scan, HZ); |
| 10583 | } | 10605 | } |
| 10584 | 10606 | ||
| 10585 | static void ipw_bg_link_up(void *data) | 10607 | static void ipw_bg_link_up(struct work_struct *work) |
| 10586 | { | 10608 | { |
| 10587 | struct ipw_priv *priv = data; | 10609 | struct ipw_priv *priv = |
| 10610 | container_of(work, struct ipw_priv, link_up); | ||
| 10588 | mutex_lock(&priv->mutex); | 10611 | mutex_lock(&priv->mutex); |
| 10589 | ipw_link_up(data); | 10612 | ipw_link_up(priv); |
| 10590 | mutex_unlock(&priv->mutex); | 10613 | mutex_unlock(&priv->mutex); |
| 10591 | } | 10614 | } |
| 10592 | 10615 | ||
| @@ -10606,15 +10629,16 @@ static void ipw_link_down(struct ipw_priv *priv) | |||
| 10606 | 10629 | ||
| 10607 | if (!(priv->status & STATUS_EXIT_PENDING)) { | 10630 | if (!(priv->status & STATUS_EXIT_PENDING)) { |
| 10608 | /* Queue up another scan... */ | 10631 | /* Queue up another scan... */ |
| 10609 | queue_work(priv->workqueue, &priv->request_scan); | 10632 | queue_delayed_work(priv->workqueue, &priv->request_scan, 0); |
| 10610 | } | 10633 | } |
| 10611 | } | 10634 | } |
| 10612 | 10635 | ||
| 10613 | static void ipw_bg_link_down(void *data) | 10636 | static void ipw_bg_link_down(struct work_struct *work) |
| 10614 | { | 10637 | { |
| 10615 | struct ipw_priv *priv = data; | 10638 | struct ipw_priv *priv = |
| 10639 | container_of(work, struct ipw_priv, link_down); | ||
| 10616 | mutex_lock(&priv->mutex); | 10640 | mutex_lock(&priv->mutex); |
| 10617 | ipw_link_down(data); | 10641 | ipw_link_down(priv); |
| 10618 | mutex_unlock(&priv->mutex); | 10642 | mutex_unlock(&priv->mutex); |
| 10619 | } | 10643 | } |
| 10620 | 10644 | ||
| @@ -10626,38 +10650,30 @@ static int ipw_setup_deferred_work(struct ipw_priv *priv) | |||
| 10626 | init_waitqueue_head(&priv->wait_command_queue); | 10650 | init_waitqueue_head(&priv->wait_command_queue); |
| 10627 | init_waitqueue_head(&priv->wait_state); | 10651 | init_waitqueue_head(&priv->wait_state); |
| 10628 | 10652 | ||
| 10629 | INIT_WORK(&priv->adhoc_check, ipw_bg_adhoc_check, priv); | 10653 | INIT_DELAYED_WORK(&priv->adhoc_check, ipw_bg_adhoc_check); |
| 10630 | INIT_WORK(&priv->associate, ipw_bg_associate, priv); | 10654 | INIT_WORK(&priv->associate, ipw_bg_associate); |
| 10631 | INIT_WORK(&priv->disassociate, ipw_bg_disassociate, priv); | 10655 | INIT_WORK(&priv->disassociate, ipw_bg_disassociate); |
| 10632 | INIT_WORK(&priv->system_config, ipw_system_config, priv); | 10656 | INIT_WORK(&priv->system_config, ipw_system_config); |
| 10633 | INIT_WORK(&priv->rx_replenish, ipw_bg_rx_queue_replenish, priv); | 10657 | INIT_WORK(&priv->rx_replenish, ipw_bg_rx_queue_replenish); |
| 10634 | INIT_WORK(&priv->adapter_restart, ipw_bg_adapter_restart, priv); | 10658 | INIT_WORK(&priv->adapter_restart, ipw_bg_adapter_restart); |
| 10635 | INIT_WORK(&priv->rf_kill, ipw_bg_rf_kill, priv); | 10659 | INIT_DELAYED_WORK(&priv->rf_kill, ipw_bg_rf_kill); |
| 10636 | INIT_WORK(&priv->up, (void (*)(void *))ipw_bg_up, priv); | 10660 | INIT_WORK(&priv->up, ipw_bg_up); |
| 10637 | INIT_WORK(&priv->down, (void (*)(void *))ipw_bg_down, priv); | 10661 | INIT_WORK(&priv->down, ipw_bg_down); |
| 10638 | INIT_WORK(&priv->request_scan, | 10662 | INIT_DELAYED_WORK(&priv->request_scan, ipw_request_scan); |
| 10639 | (void (*)(void *))ipw_request_scan, priv); | 10663 | INIT_WORK(&priv->request_passive_scan, ipw_request_passive_scan); |
| 10640 | INIT_WORK(&priv->request_passive_scan, | 10664 | INIT_DELAYED_WORK(&priv->gather_stats, ipw_bg_gather_stats); |
| 10641 | (void (*)(void *))ipw_request_passive_scan, priv); | 10665 | INIT_WORK(&priv->abort_scan, ipw_bg_abort_scan); |
| 10642 | INIT_WORK(&priv->gather_stats, | 10666 | INIT_WORK(&priv->roam, ipw_bg_roam); |
| 10643 | (void (*)(void *))ipw_bg_gather_stats, priv); | 10667 | INIT_DELAYED_WORK(&priv->scan_check, ipw_bg_scan_check); |
| 10644 | INIT_WORK(&priv->abort_scan, (void (*)(void *))ipw_bg_abort_scan, priv); | 10668 | INIT_WORK(&priv->link_up, ipw_bg_link_up); |
| 10645 | INIT_WORK(&priv->roam, ipw_bg_roam, priv); | 10669 | INIT_WORK(&priv->link_down, ipw_bg_link_down); |
| 10646 | INIT_WORK(&priv->scan_check, ipw_bg_scan_check, priv); | 10670 | INIT_DELAYED_WORK(&priv->led_link_on, ipw_bg_led_link_on); |
| 10647 | INIT_WORK(&priv->link_up, (void (*)(void *))ipw_bg_link_up, priv); | 10671 | INIT_DELAYED_WORK(&priv->led_link_off, ipw_bg_led_link_off); |
| 10648 | INIT_WORK(&priv->link_down, (void (*)(void *))ipw_bg_link_down, priv); | 10672 | INIT_DELAYED_WORK(&priv->led_act_off, ipw_bg_led_activity_off); |
| 10649 | INIT_WORK(&priv->led_link_on, (void (*)(void *))ipw_bg_led_link_on, | 10673 | INIT_WORK(&priv->merge_networks, ipw_merge_adhoc_network); |
| 10650 | priv); | ||
| 10651 | INIT_WORK(&priv->led_link_off, (void (*)(void *))ipw_bg_led_link_off, | ||
| 10652 | priv); | ||
| 10653 | INIT_WORK(&priv->led_act_off, (void (*)(void *))ipw_bg_led_activity_off, | ||
| 10654 | priv); | ||
| 10655 | INIT_WORK(&priv->merge_networks, | ||
| 10656 | (void (*)(void *))ipw_merge_adhoc_network, priv); | ||
| 10657 | 10674 | ||
| 10658 | #ifdef CONFIG_IPW2200_QOS | 10675 | #ifdef CONFIG_IPW2200_QOS |
| 10659 | INIT_WORK(&priv->qos_activate, (void (*)(void *))ipw_bg_qos_activate, | 10676 | INIT_WORK(&priv->qos_activate, ipw_bg_qos_activate); |
| 10660 | priv); | ||
| 10661 | #endif /* CONFIG_IPW2200_QOS */ | 10677 | #endif /* CONFIG_IPW2200_QOS */ |
| 10662 | 10678 | ||
| 10663 | tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long)) | 10679 | tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long)) |
| @@ -11190,7 +11206,8 @@ static int ipw_up(struct ipw_priv *priv) | |||
| 11190 | 11206 | ||
| 11191 | /* If configure to try and auto-associate, kick | 11207 | /* If configure to try and auto-associate, kick |
| 11192 | * off a scan. */ | 11208 | * off a scan. */ |
| 11193 | queue_work(priv->workqueue, &priv->request_scan); | 11209 | queue_delayed_work(priv->workqueue, |
| 11210 | &priv->request_scan, 0); | ||
| 11194 | 11211 | ||
| 11195 | return 0; | 11212 | return 0; |
| 11196 | } | 11213 | } |
| @@ -11211,11 +11228,12 @@ static int ipw_up(struct ipw_priv *priv) | |||
| 11211 | return -EIO; | 11228 | return -EIO; |
| 11212 | } | 11229 | } |
| 11213 | 11230 | ||
| 11214 | static void ipw_bg_up(void *data) | 11231 | static void ipw_bg_up(struct work_struct *work) |
| 11215 | { | 11232 | { |
| 11216 | struct ipw_priv *priv = data; | 11233 | struct ipw_priv *priv = |
| 11234 | container_of(work, struct ipw_priv, up); | ||
| 11217 | mutex_lock(&priv->mutex); | 11235 | mutex_lock(&priv->mutex); |
| 11218 | ipw_up(data); | 11236 | ipw_up(priv); |
| 11219 | mutex_unlock(&priv->mutex); | 11237 | mutex_unlock(&priv->mutex); |
| 11220 | } | 11238 | } |
| 11221 | 11239 | ||
| @@ -11282,11 +11300,12 @@ static void ipw_down(struct ipw_priv *priv) | |||
| 11282 | ipw_led_radio_off(priv); | 11300 | ipw_led_radio_off(priv); |
| 11283 | } | 11301 | } |
| 11284 | 11302 | ||
| 11285 | static void ipw_bg_down(void *data) | 11303 | static void ipw_bg_down(struct work_struct *work) |
| 11286 | { | 11304 | { |
| 11287 | struct ipw_priv *priv = data; | 11305 | struct ipw_priv *priv = |
| 11306 | container_of(work, struct ipw_priv, down); | ||
| 11288 | mutex_lock(&priv->mutex); | 11307 | mutex_lock(&priv->mutex); |
| 11289 | ipw_down(data); | 11308 | ipw_down(priv); |
| 11290 | mutex_unlock(&priv->mutex); | 11309 | mutex_unlock(&priv->mutex); |
| 11291 | } | 11310 | } |
| 11292 | 11311 | ||
