Merge "wlan: Send PNO command via SME queue"
diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h
index a7115c8..02d6133 100644
--- a/CORE/SME/inc/smeInside.h
+++ b/CORE/SME/inc/smeInside.h
@@ -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.
*
@@ -229,6 +229,7 @@
#ifdef FEATURE_WLAN_TDLS
tTdlsCmd tdlsCmd;
#endif
+ tSirPNOScanReq pnoInfo;
}u;
}tSmeCmd;
diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h
index fc21e87..4fd96ff 100644
--- a/CORE/SME/inc/smeInternal.h
+++ b/CORE/SME/inc/smeInternal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -74,6 +74,7 @@
eSmeCommandRemoveKey,
eSmeCommandAddStaSession,
eSmeCommandDelStaSession,
+ eSmeCommandPnoReq,
#ifdef FEATURE_WLAN_TDLS
//eSmeTdlsCommandMask = 0x80000, //To identify TDLS commands <TODO>
//These can be considered as csr commands.
diff --git a/CORE/SME/src/pmc/pmcApi.c b/CORE/SME/src/pmc/pmcApi.c
index ba43a29..11b381f 100644
--- a/CORE/SME/src/pmc/pmcApi.c
+++ b/CORE/SME/src/pmc/pmcApi.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.
*
@@ -2941,10 +2941,10 @@
)
{
tpSirPNOScanReq pRequestBuf;
- vos_msg_t msg;
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId );
tANI_U8 ucDot11Mode;
+ tSmeCmd *pCommand;
if (NULL == pSession)
{
@@ -2952,6 +2952,14 @@
"%s: pSession is NULL", __func__);
return eHAL_STATUS_FAILURE;
}
+
+ pCommand = csrGetCommandBuffer(pMac);
+ if(NULL == pCommand)
+ {
+ smsLog( pMac, LOGE, FL(" fail to get command buffer") );
+ return eHAL_STATUS_RESOURCES;
+ }
+
VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
"%s: SSID = 0x%08x%08x%08x%08x%08x%08x%08x%08x, "
"0x%08x%08x%08x%08x%08x%08x%08x%08x", __func__,
@@ -2978,12 +2986,7 @@
return eHAL_STATUS_FAILURE;
}
- pRequestBuf = vos_mem_malloc(sizeof(tSirPNOScanReq));
- if (NULL == pRequestBuf)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to allocate memory for PNO request", __func__);
- return eHAL_STATUS_FAILED_ALLOC;
- }
+ pRequestBuf = &(pCommand->u.pnoInfo);
vos_mem_copy(pRequestBuf, pRequest, sizeof(tSirPNOScanReq));
@@ -3047,13 +3050,13 @@
}
}
- msg.type = WDA_SET_PNO_REQ;
- msg.reserved = 0;
- msg.bodyptr = pRequestBuf;
- if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg)))
+ pCommand->command = eSmeCommandPnoReq;
+ pCommand->sessionId = (tANI_U8)sessionId;
+
+ if (!HAL_STATUS_SUCCESS(csrQueueSmeCommand(pMac, pCommand, TRUE)))
{
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to post WDA_SET_PNO_REQ message to WDA", __func__);
- vos_mem_free(pRequestBuf);
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("failed to post eSmeCommandPnoReq command"));
return eHAL_STATUS_FAILURE;
}
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index a446025..a8985ef 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.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.
*
@@ -698,6 +698,30 @@
return status;
}
+eHalStatus smeProcessPnoCommand(tpAniSirGlobal pMac, tSmeCmd *pCmd)
+{
+ tpSirPNOScanReq pnoReqBuf;
+ tSirMsgQ msgQ;
+
+ pnoReqBuf = vos_mem_malloc(sizeof(tSirPNOScanReq));
+ if ( NULL == pnoReqBuf )
+ {
+ smsLog(pMac, LOGE, FL("failed to allocate memory"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ vos_mem_copy(pnoReqBuf, &(pCmd->u.pnoInfo), sizeof(tSirPNOScanReq));
+
+ smsLog(pMac, LOG1, FL("post WDA_SET_PNO_REQ comamnd"));
+ msgQ.type = WDA_SET_PNO_REQ;
+ msgQ.reserved = 0;
+ msgQ.bodyptr = pnoReqBuf;
+ msgQ.bodyval = 0;
+ wdaPostCtrlMsg( pMac, &msgQ);
+
+ return eHAL_STATUS_SUCCESS;
+}
+
tANI_BOOLEAN smeProcessCommand( tpAniSirGlobal pMac )
{
tANI_BOOLEAN fContinue = eANI_BOOLEAN_FALSE;
@@ -997,7 +1021,19 @@
}
}
break;
-
+ case eSmeCommandPnoReq:
+ csrLLUnlock( &pMac->sme.smeCmdActiveList );
+ status = smeProcessPnoCommand(pMac, pCommand);
+ if (!HAL_STATUS_SUCCESS(status)){
+ smsLog(pMac, LOGE,
+ FL("failed to post SME PNO SCAN %d"), status);
+ }
+ if (csrLLRemoveEntry(&pMac->sme.smeCmdActiveList,
+ &pCommand->Link, LL_ACCESS_LOCK))
+ {
+ csrReleaseCommand(pMac, pCommand);
+ }
+ break;
case eSmeCommandAddTs:
case eSmeCommandDelTs:
csrLLUnlock( &pMac->sme.smeCmdActiveList );