wlan: Add changes for auth in send mgmt path
propagation from qcacld-3.0 to prima
Add changes to support authentication in send mgmt path.
With these changes, supplicant/upper layer can send
authentication frame for station mode.
Change-Id: I6807f49acc9284e69c6362e07a583ff26f15edca
CRs-Fixed: 2531064
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 51c9425..1ed8abd 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -4115,4 +4115,16 @@
*/
VOS_STATUS sme_process_msg_callback(tHalHandle hal, vos_msg_t *msg);
+/**
+ * sme_send_mgmt_tx() - Sends mgmt frame from CSR to LIM
+ * @hal: The handle returned by mac_open
+ * @session_id: session id
+ * @buf: pointer to frame
+ * @len: frame length
+ *
+ * Return: eHalStatus
+ */
+eHalStatus sme_send_mgmt_tx(tHalHandle hal, uint8_t session_id,
+ const uint8_t *buf, uint32_t len);
+
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/inc/sme_Trace.h b/CORE/SME/inc/sme_Trace.h
index 77ff1d6..9fd4495 100644
--- a/CORE/SME/inc/sme_Trace.h
+++ b/CORE/SME/inc/sme_Trace.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2017, 2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -146,6 +146,7 @@
TRACE_CODE_SME_RX_HDD_LPHB_CONFIG_REQ,
#endif /* FEATURE_WLAN_LPHB */
TRACE_CODE_SME_RX_HDD_ROAM_DEL_PMKIDCACHE,
+ TRACE_CODE_SME_RX_HDD_SEND_MGMT_TX,
TRACE_CODE_SME_TX_HDD_CAP_TSF_REQ,
TRACE_CODE_SME_TX_HDD_GET_TSF_REQ,
TRACE_CODE_SME_DEL_STA_BA_SESSION_REQ,
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 7b19327..f7d81d4 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -15387,3 +15387,63 @@
return dot11fUnpackIeRSN(mac_ctx, buf, buf_len, rsn_ie);
}
+
+/**
+ * sme_prepare_mgmt_tx() - Prepares mgmt frame
+ * @hal: The handle returned by mac_open
+ * @session_id: session id
+ * @buf: pointer to frame
+ * @len: frame length
+ *
+ * Return: eHalStatus
+ */
+static eHalStatus sme_prepare_mgmt_tx(tHalHandle hal, uint8_t session_id,
+ const uint8_t *buf, uint32_t len)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ VOS_STATUS vos_status = VOS_STATUS_SUCCESS;
+ vos_msg_t vos_message;
+ struct sir_mgmt_msg *msg;
+ uint16_t msg_len;
+
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
+ ("prepares auth frame"));
+
+ msg_len = sizeof(*msg) + len;
+ msg = vos_mem_malloc(msg_len);
+ if (msg == NULL) {
+ status = eHAL_STATUS_FAILED_ALLOC;
+ } else {
+ msg->type = eWNI_SME_SEND_MGMT_FRAME_TX;
+ msg->msg_len = msg_len;
+ msg->session_id = session_id;
+ msg->data = (uint8_t *)msg + sizeof(*msg);
+ vos_mem_copy(msg->data, buf, len);
+ vos_message.bodyptr = msg;
+ vos_message.type = eWNI_SME_SEND_MGMT_FRAME_TX;
+ vos_status = vos_mq_post_message(VOS_MQ_ID_PE, &vos_message);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
+ vos_mem_free(msg);
+ status = eHAL_STATUS_FAILURE;
+ }
+ }
+ return status;
+}
+
+eHalStatus sme_send_mgmt_tx(tHalHandle hal, uint8_t session_id,
+ const uint8_t *buf, uint32_t len)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tpAniSirGlobal mac = PMAC_STRUCT(hal);
+
+ MTRACE(vos_trace(VOS_MODULE_ID_SME,
+ TRACE_CODE_SME_RX_HDD_SEND_MGMT_TX, session_id, 0));
+
+ status = sme_AcquireGlobalLock(&mac->sme);
+ if (HAL_STATUS_SUCCESS(status)) {
+ status = sme_prepare_mgmt_tx(hal, session_id, buf, len);
+ sme_ReleaseGlobalLock(&mac->sme);
+ }
+
+ return status;
+}