mwifiex: allocate space for one more mwifiex_private structure
authorAvinash Patil <patila@marvell.com>
Wed, 9 May 2012 01:30:13 +0000 (18:30 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 16 May 2012 16:46:34 +0000 (12:46 -0400)
Reserve space for one more priv structure.
This will be used by AP interface.

Signed-off-by: Avinash Patil <patila@marvell.com>
Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com>
Signed-off-by: Kiran Divekar <dkiran@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwifiex/decl.h
drivers/net/wireless/mwifiex/main.c
drivers/net/wireless/mwifiex/wmm.c

index d04aba4131dc9250c4d6c12203833b2d27cc740b..6b8f9129b7049ac62f7daee358d2181de21d56a3 100644 (file)
@@ -28,7 +28,7 @@
 #include <linux/ieee80211.h>
 
 
-#define MWIFIEX_MAX_BSS_NUM         (1)
+#define MWIFIEX_MAX_BSS_NUM         (2)
 
 #define MWIFIEX_MIN_DATA_HEADER_LEN 36 /* sizeof(mwifiex_txpd)
                                         *   + 4 byte alignment
index be0f0e583f75485bd6780ccb3f810ef7eec3aca5..5ac0059890b04eb1f8d8c7547c5a0f15a663797e 100644 (file)
@@ -64,17 +64,17 @@ static int mwifiex_register(void *card, struct mwifiex_if_ops *if_ops,
 
        adapter->priv_num = 0;
 
-       /* Allocate memory for private structure */
-       adapter->priv[0] = kzalloc(sizeof(struct mwifiex_private), GFP_KERNEL);
-       if (!adapter->priv[0]) {
-               dev_err(adapter->dev,
-                       "%s: failed to alloc priv[0]\n", __func__);
-               goto error;
-       }
-
-       adapter->priv_num++;
+       for (i = 0; i < MWIFIEX_MAX_BSS_NUM; i++) {
+               /* Allocate memory for private structure */
+               adapter->priv[i] =
+                       kzalloc(sizeof(struct mwifiex_private), GFP_KERNEL);
+               if (!adapter->priv[i])
+                       goto error;
 
-       adapter->priv[0]->adapter = adapter;
+               adapter->priv[i]->adapter = adapter;
+               adapter->priv[i]->bss_priority = i;
+               adapter->priv_num++;
+       }
        mwifiex_init_lock_list(adapter);
 
        init_timer(&adapter->cmd_timer);
@@ -836,13 +836,16 @@ int mwifiex_remove_card(struct mwifiex_adapter *adapter, struct semaphore *sem)
        }
 
        priv = adapter->priv[0];
-       if (!priv)
+       if (!priv || !priv->wdev)
                goto exit_remove;
 
-       if (priv->wdev) {
-               wiphy_unregister(priv->wdev->wiphy);
-               wiphy_free(priv->wdev->wiphy);
-               kfree(priv->wdev);
+       wiphy_unregister(priv->wdev->wiphy);
+       wiphy_free(priv->wdev->wiphy);
+
+       for (i = 0; i < adapter->priv_num; i++) {
+               priv = adapter->priv[i];
+               if (priv)
+                       kfree(priv->wdev);
        }
 
        mwifiex_terminate_workqueue(adapter);
index 429a1dee2d2602096970f5790ed7790da1e1d454..f3fc6551585780b08724bb8112457caafeef220e 100644 (file)
@@ -885,6 +885,10 @@ mwifiex_wmm_get_highest_priolist_ptr(struct mwifiex_adapter *adapter,
                                tid_ptr = &(priv_tmp)->wmm.
                                        tid_tbl_ptr[tos_to_tid[i]];
 
+                               /* For non-STA ra_list_curr may be NULL */
+                               if (!tid_ptr->ra_list_curr)
+                                       continue;
+
                                spin_lock_irqsave(&tid_ptr->tid_tbl_lock,
                                                  flags);
                                is_list_empty =