Merge "wlan: Send PNO command via SME queue"
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index 129257b..8c2d25a 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -510,32 +510,40 @@
{
struct inet6_ifaddr *ifa = (struct inet6_ifaddr *)arg;
struct net_device *ndev = ifa->idev->dev;
- hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(ndev);
+ hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL;
hdd_context_t *pHddCtx;
+ VOS_STATUS vos_status;
int status;
- if (pAdapter && pAdapter->dev == ndev &&
- (pAdapter->device_mode == WLAN_HDD_INFRA_STATION ||
- pAdapter->device_mode == WLAN_HDD_P2P_CLIENT))
+ pHddCtx = container_of(nb, hdd_context_t, ipv6_notifier);
+ status = wlan_hdd_validate_context(pHddCtx);
+ if (0 != status)
{
- pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
- status = wlan_hdd_validate_context(pHddCtx);
- if (0 != status)
- {
- hddLog(LOGE, FL("HDD context is invalid"));
- return NOTIFY_DONE;
- }
+ hddLog(LOGE, FL("HDD context is invalid"));
+ return NOTIFY_DONE;
+ }
- if (pHddCtx->cfg_ini->nEnableSuspend ==
+ vos_status = hdd_get_front_adapter(pHddCtx, &pAdapterNode);
+ while (NULL != pAdapterNode && VOS_STATUS_SUCCESS == vos_status)
+ {
+ if (pAdapterNode->pAdapter && pAdapterNode->pAdapter->dev == ndev &&
+ (pAdapterNode->pAdapter->device_mode == WLAN_HDD_INFRA_STATION ||
+ pAdapterNode->pAdapter->device_mode == WLAN_HDD_P2P_CLIENT))
+ {
+ if (pHddCtx->cfg_ini->nEnableSuspend ==
WLAN_MAP_SUSPEND_TO_MCAST_BCAST_FILTER)
- {
- schedule_work(&pAdapter->ipv6NotifierWorkQueue);
- }
- else
- {
- hddLog(LOG1, FL("Not scheduling ipv6 wq nEnableSuspend = %d"),
- pHddCtx->cfg_ini->nEnableSuspend);
- }
+ {
+ schedule_work(&pAdapterNode->pAdapter->ipv6NotifierWorkQueue);
+ }
+ else
+ {
+ hddLog(LOG1, FL("Not scheduling ipv6 wq nEnableSuspend = %d"),
+ pHddCtx->cfg_ini->nEnableSuspend);
+ }
+ break;
+ }
+ vos_status = hdd_get_next_adapter(pHddCtx, pAdapterNode, &pNext);
+ pAdapterNode = pNext;
}
return NOTIFY_DONE;
@@ -969,47 +977,57 @@
struct in_device *in_dev;
struct net_device *ndev = ifa->ifa_dev->dev;
- hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(ndev);
+ hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL;
hdd_context_t *pHddCtx;
+ VOS_STATUS vos_status;
int status;
- if (pAdapter && pAdapter->dev == ndev &&
- (pAdapter->device_mode == WLAN_HDD_INFRA_STATION ||
- pAdapter->device_mode == WLAN_HDD_P2P_CLIENT))
+ pHddCtx = container_of(nb, hdd_context_t, ipv4_notifier);
+ status = wlan_hdd_validate_context(pHddCtx);
+ if (0 != status)
{
- pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
- status = wlan_hdd_validate_context(pHddCtx);
- if (0 != status)
- {
- hddLog(LOGE, FL("HDD context is invalid"));
- return NOTIFY_DONE;
- }
+ hddLog(LOGE, FL("HDD context is invalid"));
+ return NOTIFY_DONE;
+ }
- if ((pHddCtx->cfg_ini->nEnableSuspend !=
+ vos_status = hdd_get_front_adapter(pHddCtx, &pAdapterNode);
+ while (NULL != pAdapterNode && VOS_STATUS_SUCCESS == vos_status)
+ {
+ if (pAdapterNode->pAdapter && pAdapterNode->pAdapter->dev == ndev &&
+ (pAdapterNode->pAdapter->device_mode == WLAN_HDD_INFRA_STATION ||
+ pAdapterNode->pAdapter->device_mode == WLAN_HDD_P2P_CLIENT))
+ {
+ if ((pHddCtx->cfg_ini->nEnableSuspend !=
WLAN_MAP_SUSPEND_TO_MCAST_BCAST_FILTER)
- || (!pHddCtx->cfg_ini->fhostArpOffload))
- {
- hddLog(LOG1, FL("Offload not enabled MCBC=%d, ARPOffload=%d"),
- pHddCtx->cfg_ini->nEnableSuspend,
- pHddCtx->cfg_ini->fhostArpOffload);
- return NOTIFY_DONE;
- }
+ || (!pHddCtx->cfg_ini->fhostArpOffload))
+ {
+ hddLog(LOG1, FL("Offload not enabled MCBC=%d, ARPOffload=%d"),
+ pHddCtx->cfg_ini->nEnableSuspend,
+ pHddCtx->cfg_ini->fhostArpOffload);
+ return NOTIFY_DONE;
+ }
- if ((in_dev = __in_dev_get_rtnl(pAdapter->dev)) != NULL)
- {
- for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
- ifap = &ifa->ifa_next)
- {
- if (!strcmp(pAdapter->dev->name, ifa->ifa_label))
- {
- break; /* found */
- }
- }
- }
- if(ifa && ifa->ifa_local)
- {
- schedule_work(&pAdapter->ipv4NotifierWorkQueue);
- }
+ if ((in_dev =
+ __in_dev_get_rtnl(pAdapterNode->pAdapter->dev)) != NULL)
+ {
+ for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL;
+ ifap = &ifa->ifa_next)
+ {
+ if (!strcmp(pAdapterNode->pAdapter->dev->name,
+ ifa->ifa_label))
+ {
+ break; /* found */
+ }
+ }
+ }
+ if(ifa && ifa->ifa_local)
+ {
+ schedule_work(&pAdapterNode->pAdapter->ipv4NotifierWorkQueue);
+ }
+ break;
+ }
+ vos_status = hdd_get_next_adapter(pHddCtx, pAdapterNode, &pNext);
+ pAdapterNode = pNext;
}
return NOTIFY_DONE;
diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
index c761cd7..544860f 100644
--- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -782,8 +782,6 @@
pAdapter->aTxQueueLimit[WLANTL_AC_VI] = HDD_SOFTAP_TX_VI_QUEUE_MAX_LEN;
pAdapter->aTxQueueLimit[WLANTL_AC_VO] = HDD_SOFTAP_TX_VO_QUEUE_MAX_LEN;
- spin_lock_init( &pSapCtx->staInfo_lock );
-
for (STAId = 0; STAId < WLAN_MAX_STA_COUNT; STAId++)
{
vos_mem_zero(&pSapCtx->aStaInfo[STAId], sizeof(hdd_station_info_t));
diff --git a/CORE/SAP/src/sapModule.c b/CORE/SAP/src/sapModule.c
index b7d6e2d..9bd6a17 100644
--- a/CORE/SAP/src/sapModule.c
+++ b/CORE/SAP/src/sapModule.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -259,7 +259,12 @@
return VOS_STATUS_E_FAULT;
}
-
+ if (!VOS_IS_STATUS_SUCCESS(vos_spin_lock_init(&pSapCtx->staInfo_lock)))
+ {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "WLANSAP_Start failed init staInfo_lock\n");
+ return VOS_STATUS_E_FAULT;
+ }
return VOS_STATUS_SUCCESS;
}/* WLANSAP_Start */
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index d22dc4c..a8985ef 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -458,6 +458,13 @@
csrLLUnlock(&pMac->roam.roamCmdPendingList);
}
+ if( pRetCmd )
+ {
+ vos_mem_set((tANI_U8 *)&pRetCmd->command, sizeof(pRetCmd->command), 0);
+ vos_mem_set((tANI_U8 *)&pRetCmd->sessionId, sizeof(pRetCmd->sessionId), 0);
+ vos_mem_set((tANI_U8 *)&pRetCmd->u, sizeof(pRetCmd->u), 0);
+ }
+
return( pRetCmd );
}