summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbings <bings@codeaurora.org>2016-12-02 10:55:41 +0800
committerbings <bings@codeaurora.org>2017-02-15 17:42:37 +0800
commitbb3632803752dd17aa3461e66ba3e34ca9424864 (patch)
tree0ca02b20b1c4e1d89abb0835a8d6e223c1ab4d5d
parentfa99c695887d032cd78004b296254bbed6eb320f (diff)
qcacld-2.0: Fix invalid peer local id in sap start bss
Currently when cac ends, it will trigger eSAP_START_BSS_EVENT with peer local id 0. If there is no peer with local id 0, sap starts fails. Actually valid peer local id should be found based on self mac address of the sap. Change-Id: I3779cb181390650844475b1a2f18768cb5784cf2 CRs-Fixed: 1096534
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.c36
-rw-r--r--CORE/SAP/src/sapFsm.c4
-rw-r--r--CORE/TL/inc/wlan_qct_tl.h14
3 files changed, 52 insertions, 2 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
index a3823e320ace..b3eb14e7e69c 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
@@ -2135,6 +2135,42 @@ VOS_STATUS tl_shim_get_vdevid(struct ol_txrx_peer_t *peer, u_int8_t *vdev_id)
return VOS_STATUS_SUCCESS;
}
+#ifdef QCA_SUPPORT_TXRX_LOCAL_PEER_ID
+/**
+ * tl_shim_get_sta_id_by_addr() - get peer local id given the MAC address.
+ * @vos_context: pointer to vos context
+ * @mac_addr: pointer to mac address
+ *
+ * Return: local id of the peer given the MAC address.
+ */
+uint16_t tl_shim_get_sta_id_by_addr(void *vos_context, uint8_t *mac_addr)
+{
+ struct ol_txrx_peer_t *peer;
+ ol_txrx_pdev_handle pdev;
+ uint8_t peer_id;
+
+ if (vos_context == NULL || mac_addr == NULL) {
+ TLSHIM_LOGE("Invalid argument %p, %p", vos_context, mac_addr);
+ return 0;
+ }
+
+ pdev = vos_get_context(VOS_MODULE_ID_TXRX, vos_context);
+ if (!pdev) {
+ TLSHIM_LOGE("PDEV [%pM] not found", mac_addr);
+ return 0;
+ }
+
+ peer = ol_txrx_find_peer_by_addr(pdev, mac_addr, &peer_id);
+
+ if (!peer) {
+ TLSHIM_LOGW("PEER [%pM] not found", mac_addr);
+ return 0;
+ }
+
+ return peer->local_id;
+}
+#endif
+
/*
* Function to get vdev(tl_context) given the MAC address.
*/
diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c
index 1b501a5a6368..32de15b40af1 100644
--- a/CORE/SAP/src/sapFsm.c
+++ b/CORE/SAP/src/sapFsm.c
@@ -3289,7 +3289,9 @@ sapSignalHDDevent
}
else
{
- sapApAppEvent.sapevt.sapStartBssCompleteEvent.staId = 0;
+ sapApAppEvent.sapevt.sapStartBssCompleteEvent.staId =
+ tl_shim_get_sta_id_by_addr(sapContext->pvosGCtx,
+ sapContext->self_mac_addr);
}
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "%s(eSAP_START_BSS_EVENT): staId = %d",
diff --git a/CORE/TL/inc/wlan_qct_tl.h b/CORE/TL/inc/wlan_qct_tl.h
index 51cb7c1f2bb8..4956f47de65b 100644
--- a/CORE/TL/inc/wlan_qct_tl.h
+++ b/CORE/TL/inc/wlan_qct_tl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2014, 2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014, 2016-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -2950,4 +2950,16 @@ VOS_STATUS WLANTL_RegisterOCBPeer(void *vos_ctx, uint8_t *mac_addr,
void WLANTL_display_datapath_stats(void *vos_ctx, uint16_t bitmap);
void WLANTL_clear_datapath_stats(void *vos_ctx, uint16_t bitmap);
+#ifdef QCA_SUPPORT_TXRX_LOCAL_PEER_ID
+/**
+ * tl_shim_get_sta_id_by_addr() - get peer local id given the MAC address.
+ * @vos_context: pointer to vos context
+ * @mac_addr: pointer to mac address
+ *
+ * Return: local id of the peer given the MAC address.
+ */
+uint16_t tl_shim_get_sta_id_by_addr(void *vos_context, uint8_t *mac_addr);
+#else
+#define tl_shim_get_sta_id_by_addr(vos_context,mac_addr) 0
+#endif
#endif /* #ifndef WLAN_QCT_WLANTL_H */