diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex/init.c')
-rw-r--r-- | drivers/net/wireless/mwifiex/init.c | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/drivers/net/wireless/mwifiex/init.c b/drivers/net/wireless/mwifiex/init.c index 0ff4c37ab42a..9f44fda19db9 100644 --- a/drivers/net/wireless/mwifiex/init.c +++ b/drivers/net/wireless/mwifiex/init.c | |||
@@ -44,8 +44,6 @@ static int mwifiex_add_bss_prio_tbl(struct mwifiex_private *priv) | |||
44 | 44 | ||
45 | bss_prio->priv = priv; | 45 | bss_prio->priv = priv; |
46 | INIT_LIST_HEAD(&bss_prio->list); | 46 | INIT_LIST_HEAD(&bss_prio->list); |
47 | if (!tbl[priv->bss_priority].bss_prio_cur) | ||
48 | tbl[priv->bss_priority].bss_prio_cur = bss_prio; | ||
49 | 47 | ||
50 | spin_lock_irqsave(&tbl[priv->bss_priority].bss_prio_lock, flags); | 48 | spin_lock_irqsave(&tbl[priv->bss_priority].bss_prio_lock, flags); |
51 | list_add_tail(&bss_prio->list, &tbl[priv->bss_priority].bss_prio_head); | 49 | list_add_tail(&bss_prio->list, &tbl[priv->bss_priority].bss_prio_head); |
@@ -318,9 +316,9 @@ static void mwifiex_init_adapter(struct mwifiex_adapter *adapter) | |||
318 | adapter->curr_tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K; | 316 | adapter->curr_tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K; |
319 | 317 | ||
320 | adapter->is_hs_configured = false; | 318 | adapter->is_hs_configured = false; |
321 | adapter->hs_cfg.conditions = cpu_to_le32(HOST_SLEEP_CFG_COND_DEF); | 319 | adapter->hs_cfg.conditions = cpu_to_le32(HS_CFG_COND_DEF); |
322 | adapter->hs_cfg.gpio = HOST_SLEEP_CFG_GPIO_DEF; | 320 | adapter->hs_cfg.gpio = HS_CFG_GPIO_DEF; |
323 | adapter->hs_cfg.gap = HOST_SLEEP_CFG_GAP_DEF; | 321 | adapter->hs_cfg.gap = HS_CFG_GAP_DEF; |
324 | adapter->hs_activated = false; | 322 | adapter->hs_activated = false; |
325 | 323 | ||
326 | memset(adapter->event_body, 0, sizeof(adapter->event_body)); | 324 | memset(adapter->event_body, 0, sizeof(adapter->event_body)); |
@@ -525,7 +523,6 @@ int mwifiex_init_lock_list(struct mwifiex_adapter *adapter) | |||
525 | 523 | ||
526 | for (i = 0; i < adapter->priv_num; ++i) { | 524 | for (i = 0; i < adapter->priv_num; ++i) { |
527 | INIT_LIST_HEAD(&adapter->bss_prio_tbl[i].bss_prio_head); | 525 | INIT_LIST_HEAD(&adapter->bss_prio_tbl[i].bss_prio_head); |
528 | adapter->bss_prio_tbl[i].bss_prio_cur = NULL; | ||
529 | spin_lock_init(&adapter->bss_prio_tbl[i].bss_prio_lock); | 526 | spin_lock_init(&adapter->bss_prio_tbl[i].bss_prio_lock); |
530 | } | 527 | } |
531 | 528 | ||
@@ -533,10 +530,8 @@ int mwifiex_init_lock_list(struct mwifiex_adapter *adapter) | |||
533 | if (!adapter->priv[i]) | 530 | if (!adapter->priv[i]) |
534 | continue; | 531 | continue; |
535 | priv = adapter->priv[i]; | 532 | priv = adapter->priv[i]; |
536 | for (j = 0; j < MAX_NUM_TID; ++j) { | 533 | for (j = 0; j < MAX_NUM_TID; ++j) |
537 | INIT_LIST_HEAD(&priv->wmm.tid_tbl_ptr[j].ra_list); | 534 | INIT_LIST_HEAD(&priv->wmm.tid_tbl_ptr[j].ra_list); |
538 | spin_lock_init(&priv->wmm.tid_tbl_ptr[j].tid_tbl_lock); | ||
539 | } | ||
540 | INIT_LIST_HEAD(&priv->tx_ba_stream_tbl_ptr); | 535 | INIT_LIST_HEAD(&priv->tx_ba_stream_tbl_ptr); |
541 | INIT_LIST_HEAD(&priv->rx_reorder_tbl_ptr); | 536 | INIT_LIST_HEAD(&priv->rx_reorder_tbl_ptr); |
542 | INIT_LIST_HEAD(&priv->sta_list); | 537 | INIT_LIST_HEAD(&priv->sta_list); |
@@ -627,42 +622,36 @@ static void mwifiex_delete_bss_prio_tbl(struct mwifiex_private *priv) | |||
627 | { | 622 | { |
628 | int i; | 623 | int i; |
629 | struct mwifiex_adapter *adapter = priv->adapter; | 624 | struct mwifiex_adapter *adapter = priv->adapter; |
630 | struct mwifiex_bss_prio_node *bssprio_node, *tmp_node, **cur; | 625 | struct mwifiex_bss_prio_node *bssprio_node, *tmp_node; |
631 | struct list_head *head; | 626 | struct list_head *head; |
632 | spinlock_t *lock; /* bss priority lock */ | 627 | spinlock_t *lock; /* bss priority lock */ |
633 | unsigned long flags; | 628 | unsigned long flags; |
634 | 629 | ||
635 | for (i = 0; i < adapter->priv_num; ++i) { | 630 | for (i = 0; i < adapter->priv_num; ++i) { |
636 | head = &adapter->bss_prio_tbl[i].bss_prio_head; | 631 | head = &adapter->bss_prio_tbl[i].bss_prio_head; |
637 | cur = &adapter->bss_prio_tbl[i].bss_prio_cur; | ||
638 | lock = &adapter->bss_prio_tbl[i].bss_prio_lock; | 632 | lock = &adapter->bss_prio_tbl[i].bss_prio_lock; |
639 | dev_dbg(adapter->dev, "info: delete BSS priority table," | 633 | dev_dbg(adapter->dev, "info: delete BSS priority table," |
640 | " bss_type = %d, bss_num = %d, i = %d," | 634 | " bss_type = %d, bss_num = %d, i = %d," |
641 | " head = %p, cur = %p\n", | 635 | " head = %p\n", |
642 | priv->bss_type, priv->bss_num, i, head, *cur); | 636 | priv->bss_type, priv->bss_num, i, head); |
643 | if (*cur) { | 637 | |
638 | { | ||
644 | spin_lock_irqsave(lock, flags); | 639 | spin_lock_irqsave(lock, flags); |
645 | if (list_empty(head)) { | 640 | if (list_empty(head)) { |
646 | spin_unlock_irqrestore(lock, flags); | 641 | spin_unlock_irqrestore(lock, flags); |
647 | continue; | 642 | continue; |
648 | } | 643 | } |
649 | bssprio_node = list_first_entry(head, | ||
650 | struct mwifiex_bss_prio_node, list); | ||
651 | spin_unlock_irqrestore(lock, flags); | ||
652 | |||
653 | list_for_each_entry_safe(bssprio_node, tmp_node, head, | 644 | list_for_each_entry_safe(bssprio_node, tmp_node, head, |
654 | list) { | 645 | list) { |
655 | if (bssprio_node->priv == priv) { | 646 | if (bssprio_node->priv == priv) { |
656 | dev_dbg(adapter->dev, "info: Delete " | 647 | dev_dbg(adapter->dev, "info: Delete " |
657 | "node %p, next = %p\n", | 648 | "node %p, next = %p\n", |
658 | bssprio_node, tmp_node); | 649 | bssprio_node, tmp_node); |
659 | spin_lock_irqsave(lock, flags); | ||
660 | list_del(&bssprio_node->list); | 650 | list_del(&bssprio_node->list); |
661 | spin_unlock_irqrestore(lock, flags); | ||
662 | kfree(bssprio_node); | 651 | kfree(bssprio_node); |
663 | } | 652 | } |
664 | } | 653 | } |
665 | *cur = (struct mwifiex_bss_prio_node *)head; | 654 | spin_unlock_irqrestore(lock, flags); |
666 | } | 655 | } |
667 | } | 656 | } |
668 | } | 657 | } |
@@ -713,7 +702,7 @@ mwifiex_shutdown_drv(struct mwifiex_adapter *adapter) | |||
713 | if (adapter->curr_cmd) { | 702 | if (adapter->curr_cmd) { |
714 | dev_warn(adapter->dev, "curr_cmd is still in processing\n"); | 703 | dev_warn(adapter->dev, "curr_cmd is still in processing\n"); |
715 | del_timer(&adapter->cmd_timer); | 704 | del_timer(&adapter->cmd_timer); |
716 | mwifiex_insert_cmd_to_free_q(adapter, adapter->curr_cmd); | 705 | mwifiex_recycle_cmd_node(adapter, adapter->curr_cmd); |
717 | adapter->curr_cmd = NULL; | 706 | adapter->curr_cmd = NULL; |
718 | } | 707 | } |
719 | 708 | ||