summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Girigowda <sgirigow@qca.qualcomm.com>2014-01-22 19:00:20 -0800
committerPrakash Dhavali <pdhavali@qca.qualcomm.com>2014-01-26 21:37:05 -0800
commitb136a7fa03a117481dd6be1f1d69c1f28682bee8 (patch)
treec9f443d8d459726dba12a1c405f2f8f5e66d9c6c
parent2419ff9c90a119c6aa14bb7196417323cfdb9ec4 (diff)
qcacld-new: Set PMF QoS vdev param for PMF connection
For PMF association, host driver need to configure the firmware to inform about PMF association to encrypt and decrypt robust management frames properly. Change-Id: I1edc6604f5cb04b58760e3620b80837273c2e812 CRs-Fixed: 602154
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.c4
-rw-r--r--CORE/SERVICES/WMA/wma.c37
2 files changed, 41 insertions, 0 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
index 36496d224639..a34f6c7ae61b 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
@@ -549,6 +549,10 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data,
adf_nbuf_trim_tail(wbuf, IEEE80211_CCMP_MICLEN);
rx_pkt->pkt_meta.mpdu_hdr_ptr = adf_nbuf_data(wbuf);
+ rx_pkt->pkt_meta.mpdu_len = adf_nbuf_len(wbuf);
+ rx_pkt->pkt_meta.mpdu_data_len =
+ rx_pkt->pkt_meta.mpdu_len -
+ rx_pkt->pkt_meta.mpdu_hdr_len;
rx_pkt->pkt_meta.mpdu_data_ptr =
rx_pkt->pkt_meta.mpdu_hdr_ptr +
rx_pkt->pkt_meta.mpdu_hdr_len;
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index b7ad3ab512ac..6437d1a3eb47 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -7369,6 +7369,9 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss)
VOS_STATUS status;
struct wma_txrx_node *iface;
tPowerdBm maxTxPower = 0;
+#ifdef WLAN_FEATURE_11W
+ int ret = 0;
+#endif /* WLAN_FEATURE_11W */
pdev = vos_get_context(VOS_MODULE_ID_TXRX, wma->vos_context);
@@ -7470,6 +7473,22 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss)
wmi_unified_send_peer_assoc(wma, add_bss->nwType,
&add_bss->staContext);
+#ifdef WLAN_FEATURE_11W
+ if (add_bss->rmfEnabled) {
+ /* when 802.11w PMF is enabled for hw encr/decr
+ use hw MFP Qos bits 0x10 */
+ ret = wmi_unified_pdev_set_param(wma->wmi_handle,
+ WMI_PDEV_PARAM_PMF_QOS, TRUE);
+ if(ret) {
+ WMA_LOGE("%s: Failed to set QOS MFP/PMF (%d)",
+ __func__, ret);
+ } else {
+ WMA_LOGI("%s: QOS MFP/PMF set to %d",
+ __func__, TRUE);
+ }
+ }
+#endif /* WLAN_FEATURE_11W */
+
if (add_bss->staContext.encryptType == eSIR_ED_NONE) {
WMA_LOGD("%s: send peer authorize wmi cmd for %pM\n",
__func__, add_bss->bssId);
@@ -8027,6 +8046,9 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params)
ol_txrx_peer_handle peer;
struct wma_txrx_node *iface;
tPowerdBm maxTxPower;
+#ifdef WLAN_FEATURE_11W
+ int ret = 0;
+#endif
#ifdef FEATURE_WLAN_TDLS
if (STA_ENTRY_TDLS_PEER == params->staType)
@@ -8080,6 +8102,21 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params)
wmi_unified_send_txbf(wma, params);
wmi_unified_send_peer_assoc(wma, params->nwType,
(tAddStaParams *)iface->addBssStaContext);
+#ifdef WLAN_FEATURE_11W
+ if (params->rmfEnabled) {
+ /* when 802.11w PMF is enabled for hw encr/decr
+ use hw MFP Qos bits 0x10 */
+ ret = wmi_unified_pdev_set_param(wma->wmi_handle,
+ WMI_PDEV_PARAM_PMF_QOS, TRUE);
+ if(ret) {
+ WMA_LOGE("%s: Failed to set QOS MFP/PMF (%d)",
+ __func__, ret);
+ } else {
+ WMA_LOGI("%s: QOS MFP/PMF set to %d",
+ __func__, TRUE);
+ }
+ }
+#endif /* WLAN_FEATURE_11W */
}
#if defined WLAN_FEATURE_VOWIFI
maxTxPower = params->maxTxPower;