aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/mwifiex/init.c')
-rw-r--r--drivers/net/wireless/mwifiex/init.c33
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