diff options
Diffstat (limited to 'drivers/net/wireless/ipw2200.c')
| -rw-r--r-- | drivers/net/wireless/ipw2200.c | 203 |
1 files changed, 107 insertions, 96 deletions
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index d74c061994ae..6e704608947c 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
| @@ -1753,6 +1753,8 @@ static int ipw_radio_kill_sw(struct ipw_priv *priv, int disable_radio) | |||
| 1753 | 1753 | ||
| 1754 | if (priv->workqueue) { | 1754 | if (priv->workqueue) { |
| 1755 | cancel_delayed_work(&priv->request_scan); | 1755 | cancel_delayed_work(&priv->request_scan); |
| 1756 | cancel_delayed_work(&priv->request_direct_scan); | ||
| 1757 | cancel_delayed_work(&priv->request_passive_scan); | ||
| 1756 | cancel_delayed_work(&priv->scan_event); | 1758 | cancel_delayed_work(&priv->scan_event); |
| 1757 | } | 1759 | } |
| 1758 | queue_work(priv->workqueue, &priv->down); | 1760 | queue_work(priv->workqueue, &priv->down); |
| @@ -2005,6 +2007,8 @@ static void ipw_irq_tasklet(struct ipw_priv *priv) | |||
| 2005 | wake_up_interruptible(&priv->wait_command_queue); | 2007 | wake_up_interruptible(&priv->wait_command_queue); |
| 2006 | priv->status &= ~(STATUS_ASSOCIATED | STATUS_ASSOCIATING); | 2008 | priv->status &= ~(STATUS_ASSOCIATED | STATUS_ASSOCIATING); |
| 2007 | cancel_delayed_work(&priv->request_scan); | 2009 | cancel_delayed_work(&priv->request_scan); |
| 2010 | cancel_delayed_work(&priv->request_direct_scan); | ||
| 2011 | cancel_delayed_work(&priv->request_passive_scan); | ||
| 2008 | cancel_delayed_work(&priv->scan_event); | 2012 | cancel_delayed_work(&priv->scan_event); |
| 2009 | schedule_work(&priv->link_down); | 2013 | schedule_work(&priv->link_down); |
| 2010 | queue_delayed_work(priv->workqueue, &priv->rf_kill, 2 * HZ); | 2014 | queue_delayed_work(priv->workqueue, &priv->rf_kill, 2 * HZ); |
| @@ -4712,6 +4716,12 @@ static void ipw_rx_notification(struct ipw_priv *priv, | |||
| 4712 | priv->status &= ~STATUS_SCAN_FORCED; | 4716 | priv->status &= ~STATUS_SCAN_FORCED; |
| 4713 | #endif /* CONFIG_IPW2200_MONITOR */ | 4717 | #endif /* CONFIG_IPW2200_MONITOR */ |
| 4714 | 4718 | ||
| 4719 | /* Do queued direct scans first */ | ||
| 4720 | if (priv->status & STATUS_DIRECT_SCAN_PENDING) { | ||
| 4721 | queue_delayed_work(priv->workqueue, | ||
| 4722 | &priv->request_direct_scan, 0); | ||
| 4723 | } | ||
| 4724 | |||
| 4715 | if (!(priv->status & (STATUS_ASSOCIATED | | 4725 | if (!(priv->status & (STATUS_ASSOCIATED | |
| 4716 | STATUS_ASSOCIATING | | 4726 | STATUS_ASSOCIATING | |
| 4717 | STATUS_ROAMING | | 4727 | STATUS_ROAMING | |
| @@ -6267,7 +6277,7 @@ static void ipw_add_scan_channels(struct ipw_priv *priv, | |||
| 6267 | } | 6277 | } |
| 6268 | } | 6278 | } |
| 6269 | 6279 | ||
| 6270 | static int ipw_request_scan_helper(struct ipw_priv *priv, int type) | 6280 | static int ipw_request_scan_helper(struct ipw_priv *priv, int type, int direct) |
| 6271 | { | 6281 | { |
| 6272 | struct ipw_scan_request_ext scan; | 6282 | struct ipw_scan_request_ext scan; |
| 6273 | int err = 0, scan_type; | 6283 | int err = 0, scan_type; |
| @@ -6278,22 +6288,31 @@ static int ipw_request_scan_helper(struct ipw_priv *priv, int type) | |||
| 6278 | 6288 | ||
| 6279 | mutex_lock(&priv->mutex); | 6289 | mutex_lock(&priv->mutex); |
| 6280 | 6290 | ||
| 6291 | if (direct && (priv->direct_scan_ssid_len == 0)) { | ||
| 6292 | IPW_DEBUG_HC("Direct scan requested but no SSID to scan for\n"); | ||
| 6293 | priv->status &= ~STATUS_DIRECT_SCAN_PENDING; | ||
| 6294 | goto done; | ||
| 6295 | } | ||
| 6296 | |||
| 6281 | if (priv->status & STATUS_SCANNING) { | 6297 | if (priv->status & STATUS_SCANNING) { |
| 6282 | IPW_DEBUG_HC("Concurrent scan requested. Ignoring.\n"); | 6298 | IPW_DEBUG_HC("Concurrent scan requested. Queuing.\n"); |
| 6283 | priv->status |= STATUS_SCAN_PENDING; | 6299 | priv->status |= direct ? STATUS_DIRECT_SCAN_PENDING : |
| 6300 | STATUS_SCAN_PENDING; | ||
| 6284 | goto done; | 6301 | goto done; |
| 6285 | } | 6302 | } |
| 6286 | 6303 | ||
| 6287 | if (!(priv->status & STATUS_SCAN_FORCED) && | 6304 | if (!(priv->status & STATUS_SCAN_FORCED) && |
| 6288 | priv->status & STATUS_SCAN_ABORTING) { | 6305 | priv->status & STATUS_SCAN_ABORTING) { |
| 6289 | IPW_DEBUG_HC("Scan request while abort pending. Queuing.\n"); | 6306 | IPW_DEBUG_HC("Scan request while abort pending. Queuing.\n"); |
| 6290 | priv->status |= STATUS_SCAN_PENDING; | 6307 | priv->status |= direct ? STATUS_DIRECT_SCAN_PENDING : |
| 6308 | STATUS_SCAN_PENDING; | ||
| 6291 | goto done; | 6309 | goto done; |
| 6292 | } | 6310 | } |
| 6293 | 6311 | ||
| 6294 | if (priv->status & STATUS_RF_KILL_MASK) { | 6312 | if (priv->status & STATUS_RF_KILL_MASK) { |
| 6295 | IPW_DEBUG_HC("Aborting scan due to RF Kill activation\n"); | 6313 | IPW_DEBUG_HC("Queuing scan due to RF Kill activation\n"); |
| 6296 | priv->status |= STATUS_SCAN_PENDING; | 6314 | priv->status |= direct ? STATUS_DIRECT_SCAN_PENDING : |
| 6315 | STATUS_SCAN_PENDING; | ||
| 6297 | goto done; | 6316 | goto done; |
| 6298 | } | 6317 | } |
| 6299 | 6318 | ||
| @@ -6321,6 +6340,7 @@ static int ipw_request_scan_helper(struct ipw_priv *priv, int type) | |||
| 6321 | cpu_to_le16(20); | 6340 | cpu_to_le16(20); |
| 6322 | 6341 | ||
| 6323 | scan.dwell_time[IPW_SCAN_PASSIVE_FULL_DWELL_SCAN] = cpu_to_le16(120); | 6342 | scan.dwell_time[IPW_SCAN_PASSIVE_FULL_DWELL_SCAN] = cpu_to_le16(120); |
| 6343 | scan.dwell_time[IPW_SCAN_ACTIVE_DIRECT_SCAN] = cpu_to_le16(20); | ||
| 6324 | 6344 | ||
| 6325 | #ifdef CONFIG_IPW2200_MONITOR | 6345 | #ifdef CONFIG_IPW2200_MONITOR |
| 6326 | if (priv->ieee->iw_mode == IW_MODE_MONITOR) { | 6346 | if (priv->ieee->iw_mode == IW_MODE_MONITOR) { |
| @@ -6360,13 +6380,23 @@ static int ipw_request_scan_helper(struct ipw_priv *priv, int type) | |||
| 6360 | cpu_to_le16(2000); | 6380 | cpu_to_le16(2000); |
| 6361 | } else { | 6381 | } else { |
| 6362 | #endif /* CONFIG_IPW2200_MONITOR */ | 6382 | #endif /* CONFIG_IPW2200_MONITOR */ |
| 6363 | /* If we are roaming, then make this a directed scan for the | 6383 | /* Honor direct scans first, otherwise if we are roaming make |
| 6364 | * current network. Otherwise, ensure that every other scan | 6384 | * this a direct scan for the current network. Finally, |
| 6365 | * is a fast channel hop scan */ | 6385 | * ensure that every other scan is a fast channel hop scan */ |
| 6366 | if ((priv->status & STATUS_ROAMING) | 6386 | if (direct) { |
| 6367 | || (!(priv->status & STATUS_ASSOCIATED) | 6387 | err = ipw_send_ssid(priv, priv->direct_scan_ssid, |
| 6368 | && (priv->config & CFG_STATIC_ESSID) | 6388 | priv->direct_scan_ssid_len); |
| 6369 | && (le32_to_cpu(scan.full_scan_index) % 2))) { | 6389 | if (err) { |
| 6390 | IPW_DEBUG_HC("Attempt to send SSID command " | ||
| 6391 | "failed\n"); | ||
| 6392 | goto done; | ||
| 6393 | } | ||
| 6394 | |||
| 6395 | scan_type = IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN; | ||
| 6396 | } else if ((priv->status & STATUS_ROAMING) | ||
| 6397 | || (!(priv->status & STATUS_ASSOCIATED) | ||
| 6398 | && (priv->config & CFG_STATIC_ESSID) | ||
| 6399 | && (le32_to_cpu(scan.full_scan_index) % 2))) { | ||
| 6370 | err = ipw_send_ssid(priv, priv->essid, priv->essid_len); | 6400 | err = ipw_send_ssid(priv, priv->essid, priv->essid_len); |
| 6371 | if (err) { | 6401 | if (err) { |
| 6372 | IPW_DEBUG_HC("Attempt to send SSID command " | 6402 | IPW_DEBUG_HC("Attempt to send SSID command " |
| @@ -6391,7 +6421,12 @@ send_request: | |||
| 6391 | } | 6421 | } |
| 6392 | 6422 | ||
| 6393 | priv->status |= STATUS_SCANNING; | 6423 | priv->status |= STATUS_SCANNING; |
| 6394 | priv->status &= ~STATUS_SCAN_PENDING; | 6424 | if (direct) { |
| 6425 | priv->status &= ~STATUS_DIRECT_SCAN_PENDING; | ||
| 6426 | priv->direct_scan_ssid_len = 0; | ||
| 6427 | } else | ||
| 6428 | priv->status &= ~STATUS_SCAN_PENDING; | ||
| 6429 | |||
| 6395 | queue_delayed_work(priv->workqueue, &priv->scan_check, | 6430 | queue_delayed_work(priv->workqueue, &priv->scan_check, |
| 6396 | IPW_SCAN_CHECK_WATCHDOG); | 6431 | IPW_SCAN_CHECK_WATCHDOG); |
| 6397 | done: | 6432 | done: |
| @@ -6402,15 +6437,22 @@ done: | |||
| 6402 | static void ipw_request_passive_scan(struct work_struct *work) | 6437 | static void ipw_request_passive_scan(struct work_struct *work) |
| 6403 | { | 6438 | { |
| 6404 | struct ipw_priv *priv = | 6439 | struct ipw_priv *priv = |
| 6405 | container_of(work, struct ipw_priv, request_passive_scan); | 6440 | container_of(work, struct ipw_priv, request_passive_scan.work); |
| 6406 | ipw_request_scan_helper(priv, IW_SCAN_TYPE_PASSIVE); | 6441 | ipw_request_scan_helper(priv, IW_SCAN_TYPE_PASSIVE, 0); |
| 6407 | } | 6442 | } |
| 6408 | 6443 | ||
| 6409 | static void ipw_request_scan(struct work_struct *work) | 6444 | static void ipw_request_scan(struct work_struct *work) |
| 6410 | { | 6445 | { |
| 6411 | struct ipw_priv *priv = | 6446 | struct ipw_priv *priv = |
| 6412 | container_of(work, struct ipw_priv, request_scan.work); | 6447 | container_of(work, struct ipw_priv, request_scan.work); |
| 6413 | ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE); | 6448 | ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE, 0); |
| 6449 | } | ||
| 6450 | |||
| 6451 | static void ipw_request_direct_scan(struct work_struct *work) | ||
| 6452 | { | ||
| 6453 | struct ipw_priv *priv = | ||
| 6454 | container_of(work, struct ipw_priv, request_direct_scan.work); | ||
| 6455 | ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE, 1); | ||
| 6414 | } | 6456 | } |
| 6415 | 6457 | ||
| 6416 | static void ipw_bg_abort_scan(struct work_struct *work) | 6458 | static void ipw_bg_abort_scan(struct work_struct *work) |
| @@ -7558,8 +7600,31 @@ static int ipw_associate(void *data) | |||
| 7558 | priv->ieee->iw_mode == IW_MODE_ADHOC && | 7600 | priv->ieee->iw_mode == IW_MODE_ADHOC && |
| 7559 | priv->config & CFG_ADHOC_CREATE && | 7601 | priv->config & CFG_ADHOC_CREATE && |
| 7560 | priv->config & CFG_STATIC_ESSID && | 7602 | priv->config & CFG_STATIC_ESSID && |
| 7561 | priv->config & CFG_STATIC_CHANNEL && | 7603 | priv->config & CFG_STATIC_CHANNEL) { |
| 7562 | !list_empty(&priv->ieee->network_free_list)) { | 7604 | /* Use oldest network if the free list is empty */ |
| 7605 | if (list_empty(&priv->ieee->network_free_list)) { | ||
| 7606 | struct ieee80211_network *oldest = NULL; | ||
| 7607 | struct ieee80211_network *target; | ||
| 7608 | DECLARE_MAC_BUF(mac); | ||
| 7609 | |||
| 7610 | list_for_each_entry(target, &priv->ieee->network_list, list) { | ||
| 7611 | if ((oldest == NULL) || | ||
| 7612 | (target->last_scanned < oldest->last_scanned)) | ||
| 7613 | oldest = target; | ||
| 7614 | } | ||
| 7615 | |||
| 7616 | /* If there are no more slots, expire the oldest */ | ||
| 7617 | list_del(&oldest->list); | ||
| 7618 | target = oldest; | ||
| 7619 | IPW_DEBUG_ASSOC("Expired '%s' (%s) from " | ||
| 7620 | "network list.\n", | ||
| 7621 | escape_essid(target->ssid, | ||
| 7622 | target->ssid_len), | ||
| 7623 | print_mac(mac, target->bssid)); | ||
| 7624 | list_add_tail(&target->list, | ||
| 7625 | &priv->ieee->network_free_list); | ||
| 7626 | } | ||
| 7627 | |||
| 7563 | element = priv->ieee->network_free_list.next; | 7628 | element = priv->ieee->network_free_list.next; |
| 7564 | network = list_entry(element, struct ieee80211_network, list); | 7629 | network = list_entry(element, struct ieee80211_network, list); |
| 7565 | ipw_adhoc_create(priv, network); | 7630 | ipw_adhoc_create(priv, network); |
| @@ -9454,99 +9519,38 @@ static int ipw_wx_get_retry(struct net_device *dev, | |||
| 9454 | return 0; | 9519 | return 0; |
| 9455 | } | 9520 | } |
| 9456 | 9521 | ||
| 9457 | static int ipw_request_direct_scan(struct ipw_priv *priv, char *essid, | ||
| 9458 | int essid_len) | ||
| 9459 | { | ||
| 9460 | struct ipw_scan_request_ext scan; | ||
| 9461 | int err = 0, scan_type; | ||
| 9462 | |||
| 9463 | if (!(priv->status & STATUS_INIT) || | ||
| 9464 | (priv->status & STATUS_EXIT_PENDING)) | ||
| 9465 | return 0; | ||
| 9466 | |||
| 9467 | mutex_lock(&priv->mutex); | ||
| 9468 | |||
| 9469 | if (priv->status & STATUS_RF_KILL_MASK) { | ||
| 9470 | IPW_DEBUG_HC("Aborting scan due to RF kill activation\n"); | ||
| 9471 | priv->status |= STATUS_SCAN_PENDING; | ||
| 9472 | goto done; | ||
| 9473 | } | ||
| 9474 | |||
| 9475 | IPW_DEBUG_HC("starting request direct scan!\n"); | ||
| 9476 | |||
| 9477 | if (priv->status & (STATUS_SCANNING | STATUS_SCAN_ABORTING)) { | ||
| 9478 | /* We should not sleep here; otherwise we will block most | ||
| 9479 | * of the system (for instance, we hold rtnl_lock when we | ||
| 9480 | * get here). | ||
| 9481 | */ | ||
| 9482 | err = -EAGAIN; | ||
| 9483 | goto done; | ||
| 9484 | } | ||
| 9485 | memset(&scan, 0, sizeof(scan)); | ||
| 9486 | |||
| 9487 | if (priv->config & CFG_SPEED_SCAN) | ||
| 9488 | scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_SCAN] = | ||
| 9489 | cpu_to_le16(30); | ||
| 9490 | else | ||
| 9491 | scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_SCAN] = | ||
| 9492 | cpu_to_le16(20); | ||
| 9493 | |||
| 9494 | scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN] = | ||
| 9495 | cpu_to_le16(20); | ||
| 9496 | scan.dwell_time[IPW_SCAN_PASSIVE_FULL_DWELL_SCAN] = cpu_to_le16(120); | ||
| 9497 | scan.dwell_time[IPW_SCAN_ACTIVE_DIRECT_SCAN] = cpu_to_le16(20); | ||
| 9498 | |||
| 9499 | scan.full_scan_index = cpu_to_le32(ieee80211_get_scans(priv->ieee)); | ||
| 9500 | |||
| 9501 | err = ipw_send_ssid(priv, essid, essid_len); | ||
| 9502 | if (err) { | ||
| 9503 | IPW_DEBUG_HC("Attempt to send SSID command failed\n"); | ||
| 9504 | goto done; | ||
| 9505 | } | ||
| 9506 | scan_type = IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN; | ||
| 9507 | |||
| 9508 | ipw_add_scan_channels(priv, &scan, scan_type); | ||
| 9509 | |||
| 9510 | err = ipw_send_scan_request_ext(priv, &scan); | ||
| 9511 | if (err) { | ||
| 9512 | IPW_DEBUG_HC("Sending scan command failed: %08X\n", err); | ||
| 9513 | goto done; | ||
| 9514 | } | ||
| 9515 | |||
| 9516 | priv->status |= STATUS_SCANNING; | ||
| 9517 | |||
| 9518 | done: | ||
| 9519 | mutex_unlock(&priv->mutex); | ||
| 9520 | return err; | ||
| 9521 | } | ||
| 9522 | |||
| 9523 | static int ipw_wx_set_scan(struct net_device *dev, | 9522 | static int ipw_wx_set_scan(struct net_device *dev, |
| 9524 | struct iw_request_info *info, | 9523 | struct iw_request_info *info, |
| 9525 | union iwreq_data *wrqu, char *extra) | 9524 | union iwreq_data *wrqu, char *extra) |
| 9526 | { | 9525 | { |
| 9527 | struct ipw_priv *priv = ieee80211_priv(dev); | 9526 | struct ipw_priv *priv = ieee80211_priv(dev); |
| 9528 | struct iw_scan_req *req = (struct iw_scan_req *)extra; | 9527 | struct iw_scan_req *req = (struct iw_scan_req *)extra; |
| 9528 | struct delayed_work *work = NULL; | ||
| 9529 | 9529 | ||
| 9530 | mutex_lock(&priv->mutex); | 9530 | mutex_lock(&priv->mutex); |
| 9531 | |||
| 9531 | priv->user_requested_scan = 1; | 9532 | priv->user_requested_scan = 1; |
| 9532 | mutex_unlock(&priv->mutex); | ||
| 9533 | 9533 | ||
| 9534 | if (wrqu->data.length == sizeof(struct iw_scan_req)) { | 9534 | if (wrqu->data.length == sizeof(struct iw_scan_req)) { |
| 9535 | if (wrqu->data.flags & IW_SCAN_THIS_ESSID) { | 9535 | if (wrqu->data.flags & IW_SCAN_THIS_ESSID) { |
| 9536 | ipw_request_direct_scan(priv, req->essid, | 9536 | int len = min((int)req->essid_len, |
| 9537 | req->essid_len); | 9537 | (int)sizeof(priv->direct_scan_ssid)); |
| 9538 | return 0; | 9538 | memcpy(priv->direct_scan_ssid, req->essid, len); |
| 9539 | } | 9539 | priv->direct_scan_ssid_len = len; |
| 9540 | if (req->scan_type == IW_SCAN_TYPE_PASSIVE) { | 9540 | work = &priv->request_direct_scan; |
| 9541 | queue_work(priv->workqueue, | 9541 | } else if (req->scan_type == IW_SCAN_TYPE_PASSIVE) { |
| 9542 | &priv->request_passive_scan); | 9542 | work = &priv->request_passive_scan; |
| 9543 | return 0; | ||
| 9544 | } | 9543 | } |
| 9544 | } else { | ||
| 9545 | /* Normal active broadcast scan */ | ||
| 9546 | work = &priv->request_scan; | ||
| 9545 | } | 9547 | } |
| 9546 | 9548 | ||
| 9549 | mutex_unlock(&priv->mutex); | ||
| 9550 | |||
| 9547 | IPW_DEBUG_WX("Start scan\n"); | 9551 | IPW_DEBUG_WX("Start scan\n"); |
| 9548 | 9552 | ||
| 9549 | queue_delayed_work(priv->workqueue, &priv->request_scan, 0); | 9553 | queue_delayed_work(priv->workqueue, work, 0); |
| 9550 | 9554 | ||
| 9551 | return 0; | 9555 | return 0; |
| 9552 | } | 9556 | } |
| @@ -10708,6 +10712,8 @@ static void ipw_link_up(struct ipw_priv *priv) | |||
| 10708 | } | 10712 | } |
| 10709 | 10713 | ||
| 10710 | cancel_delayed_work(&priv->request_scan); | 10714 | cancel_delayed_work(&priv->request_scan); |
| 10715 | cancel_delayed_work(&priv->request_direct_scan); | ||
| 10716 | cancel_delayed_work(&priv->request_passive_scan); | ||
| 10711 | cancel_delayed_work(&priv->scan_event); | 10717 | cancel_delayed_work(&priv->scan_event); |
| 10712 | ipw_reset_stats(priv); | 10718 | ipw_reset_stats(priv); |
| 10713 | /* Ensure the rate is updated immediately */ | 10719 | /* Ensure the rate is updated immediately */ |
| @@ -10738,6 +10744,8 @@ static void ipw_link_down(struct ipw_priv *priv) | |||
| 10738 | 10744 | ||
| 10739 | /* Cancel any queued work ... */ | 10745 | /* Cancel any queued work ... */ |
| 10740 | cancel_delayed_work(&priv->request_scan); | 10746 | cancel_delayed_work(&priv->request_scan); |
| 10747 | cancel_delayed_work(&priv->request_direct_scan); | ||
| 10748 | cancel_delayed_work(&priv->request_passive_scan); | ||
| 10741 | cancel_delayed_work(&priv->adhoc_check); | 10749 | cancel_delayed_work(&priv->adhoc_check); |
| 10742 | cancel_delayed_work(&priv->gather_stats); | 10750 | cancel_delayed_work(&priv->gather_stats); |
| 10743 | 10751 | ||
| @@ -10777,8 +10785,9 @@ static int __devinit ipw_setup_deferred_work(struct ipw_priv *priv) | |||
| 10777 | INIT_WORK(&priv->up, ipw_bg_up); | 10785 | INIT_WORK(&priv->up, ipw_bg_up); |
| 10778 | INIT_WORK(&priv->down, ipw_bg_down); | 10786 | INIT_WORK(&priv->down, ipw_bg_down); |
| 10779 | INIT_DELAYED_WORK(&priv->request_scan, ipw_request_scan); | 10787 | INIT_DELAYED_WORK(&priv->request_scan, ipw_request_scan); |
| 10788 | INIT_DELAYED_WORK(&priv->request_direct_scan, ipw_request_direct_scan); | ||
| 10789 | INIT_DELAYED_WORK(&priv->request_passive_scan, ipw_request_passive_scan); | ||
| 10780 | INIT_DELAYED_WORK(&priv->scan_event, ipw_scan_event); | 10790 | INIT_DELAYED_WORK(&priv->scan_event, ipw_scan_event); |
| 10781 | INIT_WORK(&priv->request_passive_scan, ipw_request_passive_scan); | ||
| 10782 | INIT_DELAYED_WORK(&priv->gather_stats, ipw_bg_gather_stats); | 10791 | INIT_DELAYED_WORK(&priv->gather_stats, ipw_bg_gather_stats); |
| 10783 | INIT_WORK(&priv->abort_scan, ipw_bg_abort_scan); | 10792 | INIT_WORK(&priv->abort_scan, ipw_bg_abort_scan); |
| 10784 | INIT_WORK(&priv->roam, ipw_bg_roam); | 10793 | INIT_WORK(&priv->roam, ipw_bg_roam); |
| @@ -11812,6 +11821,8 @@ static void __devexit ipw_pci_remove(struct pci_dev *pdev) | |||
| 11812 | cancel_delayed_work(&priv->adhoc_check); | 11821 | cancel_delayed_work(&priv->adhoc_check); |
| 11813 | cancel_delayed_work(&priv->gather_stats); | 11822 | cancel_delayed_work(&priv->gather_stats); |
| 11814 | cancel_delayed_work(&priv->request_scan); | 11823 | cancel_delayed_work(&priv->request_scan); |
| 11824 | cancel_delayed_work(&priv->request_direct_scan); | ||
| 11825 | cancel_delayed_work(&priv->request_passive_scan); | ||
| 11815 | cancel_delayed_work(&priv->scan_event); | 11826 | cancel_delayed_work(&priv->scan_event); |
| 11816 | cancel_delayed_work(&priv->rf_kill); | 11827 | cancel_delayed_work(&priv->rf_kill); |
| 11817 | cancel_delayed_work(&priv->scan_check); | 11828 | cancel_delayed_work(&priv->scan_check); |
