Merge "wlan: SME changes to support SW PTA" into wlan-driver.lnx.1.0
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 601c91a..5eb95fe 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -6501,4 +6501,31 @@
uint8_t sae_status;
tSirMacAddr peer_mac_addr;
};
+
+#ifdef FEATURE_WLAN_SW_PTA
+/**
+ * enum sir_sw_pta_param_type - Type of sw pta coex param
+ * @SCO_STATUS: Enable/Disable SCO
+ * @NUD_STATUS: Enable/Disable NUD
+ * @BT_STATUS: Enable/Disable BT
+ */
+enum sir_sw_pta_param_type {
+ SCO_STATUS,
+ NUD_STATUS,
+ BT_STATUS,
+};
+
+#define SW_PTA_COEX_PARAMS_MAX_LEN 32
+/**
+ * struct sir_sw_pta_req - sw pta coex params request
+ * @param_type: sw pta coex param type
+ * @length: sw pta coex params value length
+ * @value: sw pta coex params value
+ */
+struct sir_sw_pta_req {
+ enum sir_sw_pta_param_type param_type;
+ uint8_t length;
+ uint8_t value[SW_PTA_COEX_PARAMS_MAX_LEN];
+};
+#endif
#endif /* __SIR_API_H */
diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h
index 67839eb..e1ea5a5 100644
--- a/CORE/MAC/inc/wniApi.h
+++ b/CORE/MAC/inc/wniApi.h
@@ -404,6 +404,9 @@
eWNI_SME_TRIGGER_SAE,
eWNI_SME_SEND_MGMT_FRAME_TX,
eWNI_SME_SEND_SAE_MSG,
+#ifdef FEATURE_WLAN_SW_PTA
+ eWNI_SME_SW_PTA_RESP,
+#endif
eWNI_SME_MSG_TYPES_END
};
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 51f6b0f..4f76572 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -832,6 +832,10 @@
#define SIR_HAL_BLACKLIST_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 308)
+#ifdef FEATURE_WLAN_SW_PTA
+#define SIR_HAL_SW_PTA_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 309)
+#endif
+
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
// CFG message types
diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h
index 38aa648..562dad3 100644
--- a/CORE/SME/inc/smeInside.h
+++ b/CORE/SME/inc/smeInside.h
@@ -211,6 +211,9 @@
tpSirUpdateChanList chan_list;
tpRoamParams RoamParams;
bool olpc_mode_enable;
+#ifdef FEATURE_WLAN_SW_PTA
+ struct sir_sw_pta_req *sw_pta_req;
+#endif
}u;
}tSmeCmd;
diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h
index 1a598ad..907f8d1 100644
--- a/CORE/SME/inc/smeInternal.h
+++ b/CORE/SME/inc/smeInternal.h
@@ -110,6 +110,9 @@
eSmeCommandRemainOnChannel,
eSmeCommandNoAUpdate,
eSmeCommandBlackList,
+#ifdef FEATURE_WLAN_SW_PTA
+ eSmeCommandSwPTAReq,
+#endif
} eSmeCommandType;
@@ -195,6 +198,9 @@
void (*roaming_mbb_callback)(void* mac, tANI_U32 session_id,
void* bss_description, void *reassoc_req, tANI_U32 csr_roam_op_code);
#endif
+#ifdef FEATURE_WLAN_SW_PTA
+ void (*sw_pta_resp_cb)(uint8_t status);
+#endif
} tSmeStruct, *tpSmeStruct;
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 04cc78b..cb6592c 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -4178,4 +4178,34 @@
*/
eHalStatus sme_update_olpc_mode(tHalHandle hHal, bool enable);
+#ifdef FEATURE_WLAN_SW_PTA
+/**
+ * sme_sw_pta_req() - Send sw pta coex params request to sme
+ * @hal: The handle returned by mac_open
+ * @resp_callback: callback to indicate sw pta response to hdd
+ * @session_id: session id
+ * @type: sw pta coex param type
+ * @length: length of sw pta coex param value
+ * @value: sw pta coex params value
+ *
+ * Return: HAL_STATUS
+ */
+eHalStatus sme_sw_pta_req(tHalHandle hal,
+ void (*resp_callback)(uint8_t resp_status),
+ uint8_t session_id, enum sir_sw_pta_param_type type,
+ uint8_t length, uint8_t *value);
+
+/**
+ * sme_sco_req() - Send sco request status to sme
+ * @hal: The handle returned by mac_open
+ * @resp_callback: callback to indicate sco response to hdd
+ * @session_id: session id
+ * @req_status: sco request status
+ *
+ * Return: HAL_STATUS
+ */
+eHalStatus sme_sco_req(tHalHandle hal,
+ void (*resp_callback)(uint8_t resp_status),
+ uint8_t session_id, uint8_t req_status);
+#endif /* FEATURE_WLAN_SW_PTA */
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 670a39d..7d83661 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -1022,6 +1022,36 @@
}
}
+#ifdef FEATURE_WLAN_SW_PTA
+/**
+ * sme_process_sw_pta_req() - Process sw pta request
+ * @mac - context handler
+ * @sme_cmd: cmd param containing sw pta request
+ *
+ * The function sends sw pta request to firmware
+ */
+static void sme_process_sw_pta_req(tpAniSirGlobal mac, tSmeCmd *sme_cmd)
+{
+ tSirRetStatus ret = eSIR_SUCCESS;
+ tSirMsgQ msg;
+
+ msg.type = WDA_SW_PTA_REQ;
+ msg.reserved = 0;
+ msg.bodyptr = sme_cmd->u.sw_pta_req;
+ msg.bodyval = 0;
+
+ ret = wdaPostCtrlMsg(mac, &msg);
+ if (ret != eSIR_SUCCESS) {
+ smsLog(mac, LOGE,
+ FL("Posting WDA_SW_PTA_REQ to WDA failed, reason=%X"),
+ ret);
+ vos_mem_free(sme_cmd->u.sw_pta_req);
+ } else {
+ smsLog(mac, LOG1, FL("posted WDA_SW_PTA_REQ command"));
+ }
+}
+#endif /* FEATURE_WLAN_SW_PTA */
+
tANI_BOOLEAN smeProcessCommand( tpAniSirGlobal pMac )
{
tANI_BOOLEAN fContinue = eANI_BOOLEAN_FALSE;
@@ -1499,7 +1529,19 @@
"sme_command_olpc_mode processed");
fContinue = eANI_BOOLEAN_TRUE;
break;
-
+#ifdef FEATURE_WLAN_SW_PTA
+ case eSmeCommandSwPTAReq:
+ csrLLUnlock(&pMac->sme.smeCmdActiveList);
+ sme_process_sw_pta_req(pMac, pCommand);
+ if (csrLLRemoveEntry(&pMac->sme.smeCmdActiveList,
+ &pCommand->Link, LL_ACCESS_LOCK)) {
+ csrReleaseCommand(pMac, pCommand);
+ }
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ "eSmeCommandScoIndReq processed");
+ fContinue = eANI_BOOLEAN_TRUE;
+ break;
+#endif /* FEATURE_WLAN_SW_PTA */
default:
//something is wrong
//remove it from the active list
@@ -3182,6 +3224,20 @@
FL("Empty message for (eWNI_SME_ECSA_IE_BEACON_COMP_IND)"));
}
break;
+#ifdef FEATURE_WLAN_SW_PTA
+ case eWNI_SME_SW_PTA_RESP:
+ MTRACE(vos_trace(VOS_MODULE_ID_SME,
+ TRACE_CODE_SME_RX_WDA_MSG, NO_SESSION, pMsg->type));
+
+ if (pMac->sme.sw_pta_resp_cb) {
+ smsLog(pMac, LOGE, FL("sw pta response"));
+ pMac->sme.sw_pta_resp_cb(pMsg->bodyval);
+ } else {
+ smsLog(pMac, LOGE,
+ FL("sw pta response is NULL"));
+ }
+ break;
+#endif
default:
@@ -15586,4 +15642,73 @@
return eHAL_STATUS_SUCCESS;
}
+#ifdef FEATURE_WLAN_SW_PTA
+eHalStatus sme_sw_pta_req(tHalHandle hal,
+ void (*resp_callback)(uint8_t resp_status),
+ uint8_t session_id, enum sir_sw_pta_param_type type,
+ uint8_t length, uint8_t *value)
+{
+ tpAniSirGlobal mac = PMAC_STRUCT(hal);
+ struct sir_sw_pta_req *sw_pta_req;
+ eHalStatus status;
+ tSmeCmd *sme_cmd;
+ if (length > SW_PTA_COEX_PARAMS_MAX_LEN) {
+ smsLog(mac, LOGE, FL("Invalid length"));
+ return eHAL_STATUS_FAILURE;
+ }
+
+ sme_cmd = csrGetCommandBuffer(mac);
+ if (!sme_cmd) {
+ smsLog(mac, LOGE, FL("Failed to get buffer for sw pta req"));
+ return eHAL_STATUS_RESOURCES;
+ }
+
+ sw_pta_req = vos_mem_malloc(sizeof(*sw_pta_req));
+ if (!sw_pta_req) {
+ smsLog(mac, LOGE, FL("Failed to allocate memory for sw pta"));
+ csrReleaseCommand(mac, sme_cmd);
+ return eHAL_STATUS_RESOURCES;
+ }
+
+ sw_pta_req->param_type = type;
+ sw_pta_req->length = length;
+ memcpy(sw_pta_req->value, value, length);
+
+ status = sme_AcquireGlobalLock(&mac->sme);
+ if (HAL_STATUS_SUCCESS(status)) {
+ mac->sme.sw_pta_resp_cb = resp_callback;
+
+ smsLog(mac, LOG1, "Posting sw pta request to csr queue");
+ sme_cmd->command = eSmeCommandSwPTAReq;
+ sme_cmd->sessionId = session_id;
+ sme_cmd->u.sw_pta_req = sw_pta_req;
+
+ if (!HAL_STATUS_SUCCESS(csrQueueSmeCommand(mac,
+ sme_cmd, TRUE))) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("failed queueing sme command"));
+ sme_ReleaseGlobalLock(&mac->sme);
+ csrReleaseCommand(mac, sme_cmd);
+ vos_mem_free(sw_pta_req);
+ return eHAL_STATUS_FAILURE;
+ }
+ } else {
+ smsLog(mac, LOGE, FL("sme_AcquireGlobalLock failed"));
+ csrReleaseCommand(mac, sme_cmd);
+ vos_mem_free(sw_pta_req);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ sme_ReleaseGlobalLock(&mac->sme);
+ return eHAL_STATUS_SUCCESS;
+}
+
+eHalStatus sme_sco_req(tHalHandle hal,
+ void (*resp_callback)(uint8_t resp_status),
+ uint8_t session_id, uint8_t req_status)
+{
+ return sme_sw_pta_req(hal, resp_callback, session_id,
+ SCO_STATUS, sizeof(req_status), &req_status);
+}
+#endif /* FEATURE_WLAN_SW_PTA */
diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c
index 4d98d99..6bd31ab 100644
--- a/CORE/SYS/legacy/src/utils/src/macTrace.c
+++ b/CORE/SYS/legacy/src/utils/src/macTrace.c
@@ -853,6 +853,9 @@
CASE_RETURN_STRING(WDA_GET_ROAM_RSSI_RSP);
CASE_RETURN_STRING(WDA_NAN_REQUEST);
CASE_RETURN_STRING(WDA_BLACKLIST_REQ);
+#ifdef FEATURE_WLAN_SW_PTA
+ CASE_RETURN_STRING(WDA_SW_PTA_REQ);
+#endif
CASE_RETURN_STRING(WDA_START_SCAN_OFFLOAD_REQ);
CASE_RETURN_STRING(WDA_START_SCAN_OFFLOAD_RSP);
CASE_RETURN_STRING(WDA_STOP_SCAN_OFFLOAD_REQ);
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 7ca2db4..2bd5594 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -1244,6 +1244,10 @@
#define WDA_BLACKLIST_REQ SIR_HAL_BLACKLIST_REQ
+#ifdef FEATURE_WLAN_SW_PTA
+#define WDA_SW_PTA_REQ SIR_HAL_SW_PTA_REQ
+#endif
+
#define WDA_START_SCAN_OFFLOAD_REQ SIR_HAL_START_SCAN_OFFLOAD_REQ
#define WDA_START_SCAN_OFFLOAD_RSP SIR_HAL_START_SCAN_OFFLOAD_RSP
#define WDA_STOP_SCAN_OFFLOAD_REQ SIR_HAL_STOP_SCAN_OFFLOAD_REQ