summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVinay Gannevaram <quic_vganneva@quicinc.com>2019-07-01 14:55:03 +0530
committerSunil Ravi <sunilravi@google.com>2019-08-07 15:23:04 -0700
commita7ddf874d7d2c7a0302413326ddc8e54f5ae96da (patch)
treec75fe23c34f345a8fc236b3ba8ea28cf09b0e8c9
parent422f064f2021fa3c2e3e7d12de28f564562dc2ed (diff)
downloadqcacld-a7ddf874d7d2c7a0302413326ddc8e54f5ae96da.tar.gz
qcacld-3.0: Remove all calls to cdp_remove_peers_for_vdev
Remove all calls to cdp_remove_peers_for_vdev(). cdp_remove_peers_for_vdev() is called from vdev_resp_handler to remove all vdev peers. All the peers associated with the vdev are deleted before vdev stop and hence this call to cdp_remove_peers_for_vdev() is redundant. Delete only the self peer and remove the code to delete the vdev peers. Change-Id: I8a91509917a371b860058a66831d8417b3a78671 CRs-Fixed: 2002372 Bug: 135964915 Signed-off-by: Vinay Gannevaram <quic_vganneva@quicinc.com>
-rw-r--r--core/wma/src/wma_dev_if.c179
-rw-r--r--core/wma/src/wma_nan_datapath.c55
-rw-r--r--core/wma/src/wma_nan_datapath.h8
3 files changed, 68 insertions, 174 deletions
diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c
index 56d4542cea..d3c0d430c2 100644
--- a/core/wma/src/wma_dev_if.c
+++ b/core/wma/src/wma_dev_if.c
@@ -1512,83 +1512,6 @@ err:
return QDF_STATUS_E_FAILURE;
}
-#ifdef QCA_IBSS_SUPPORT
-
-/**
- * wma_delete_all_ibss_peers() - delete all ibss peer for vdev_id
- * @wma: wma handle
- * @vdev_id: vdev id
- *
- * This function send peer delete command to fw for all
- * peers in peer_list and remove ref count for peer id
- * peer will actually remove from list after receving
- * unmap event from firmware.
- *
- * Return: none
- */
-static void wma_delete_all_ibss_peers(tp_wma_handle wma, A_UINT32 vdev_id)
-{
- ol_txrx_vdev_handle vdev;
-
- if (!wma || vdev_id >= wma->max_bssid)
- return;
-
- vdev = wma->interfaces[vdev_id].handle;
- if (!vdev)
- return;
-
- /* remove all remote peers of IBSS */
- ol_txrx_remove_peers_for_vdev(vdev,
- (ol_txrx_vdev_peer_remove_cb)wma_remove_peer, wma,
- true);
-}
-#else
-/**
- * wma_delete_all_ibss_peers(): dummy function for when ibss is not supported
- * @wma: wma handle
- * @vdev_id: vdev id
- *
- * This function send peer delete command to fw for all
- * peers in peer_list and remove ref count for peer id
- * peer will actually remove from list after receving
- * unmap event from firmware.
- *
- * Return: none
- */
-static void wma_delete_all_ibss_peers(tp_wma_handle wma, A_UINT32 vdev_id)
-{
-}
-#endif /* QCA_IBSS_SUPPORT */
-
-/**
- * wma_delete_all_ap_remote_peers() - delete all ap peer for vdev_id
- * @wma: wma handle
- * @vdev_id: vdev id
- *
- * This function send peer delete command to fw for all
- * peers in peer_list and remove ref count for peer id
- * peer will actually remove from list after receving
- * unmap event from firmware.
- *
- * Return: none
- */
-static void wma_delete_all_ap_remote_peers(tp_wma_handle wma, A_UINT32 vdev_id)
-{
- ol_txrx_vdev_handle vdev;
-
- if (!wma || vdev_id >= wma->max_bssid)
- return;
-
- vdev = wma->interfaces[vdev_id].handle;
- if (!vdev)
- return;
-
- WMA_LOGD("%s: vdev_id - %d", __func__, vdev_id);
- /* remove all remote peers of SAP */
- ol_txrx_remove_peers_for_vdev(vdev,
- (ol_txrx_vdev_peer_remove_cb)wma_remove_peer, wma, false);
-}
-
/**
* wma_hidden_ssid_vdev_restart_on_vdev_stop() - restart vdev to set hidden ssid
* @wma_handle: wma handle
@@ -1660,6 +1583,60 @@ static void wma_cleanup_target_req_param(struct wma_target_req *tgt_req)
}
/**
+ * wma_remove_bss_peer() - remove BSS peer
+ * @wma: pointer to WMA handle
+ * @pdev: pointer to PDEV
+ * @vdev_id: vdev id on which delete BSS request was received
+ * @params: pointer to Delete BSS params
+ *
+ * This function is called on receiving vdev stop response from FW or
+ * vdev stop response timeout. In case of IBSS/NDI, use vdev's self MAC
+ * for removing the peer. In case of STA/SAP use bssid passed as part of
+ * delete STA parameter.
+ *
+ * Return: 0 on success, ERROR code on failure
+ */
+static int wma_remove_bss_peer(tp_wma_handle wma, void *pdev,
+ struct wma_target_req *req_msg, uint32_t vdev_id,
+ tpDeleteBssParams params)
+{
+ ol_txrx_vdev_handle vdev;
+ ol_txrx_peer_handle peer = NULL;
+ uint8_t peer_id;
+ uint8_t *mac_addr = NULL;
+
+ vdev = ol_txrx_get_vdev_from_vdev_id(vdev_id);
+ if (!vdev) {
+ WMA_LOGE(FL("vdev is NULL for vdev_id = %d"), vdev_id);
+ wma_cleanup_target_req_param(req_msg);
+ return -EINVAL;
+ }
+
+ if (wma_is_vdev_in_ibss_mode(wma, vdev_id) ||
+ WMA_IS_VDEV_IN_NDI_MODE(wma->interfaces, vdev_id)) {
+ mac_addr = ol_txrx_get_vdev_mac_addr(vdev);
+ if (!mac_addr) {
+ WMA_LOGE(FL("mac_addr is NULL for vdev_id = %d"),
+ vdev_id);
+ wma_cleanup_target_req_param(req_msg);
+ return -EINVAL;
+ }
+ } else {
+ mac_addr = params->bssid;
+ }
+
+ peer = ol_txrx_find_peer_by_addr(pdev, mac_addr, &peer_id);
+ if (!peer) {
+ WMA_LOGE(FL("peer NULL for vdev_id = %d"), vdev_id);
+ wma_cleanup_target_req_param(req_msg);
+ return -EINVAL;
+ }
+ wma_remove_peer(wma, mac_addr, vdev_id, peer, false);
+
+ return 0;
+}
+
+/**
* get_fw_active_apf_mode() - convert HDD APF mode to FW configurable APF
* mode
* @mode: APF mode maintained in HDD
@@ -1908,8 +1885,8 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info,
wmi_vdev_stopped_event_fixed_param *resp_event;
struct wma_target_req *req_msg, *new_req_msg;
ol_txrx_pdev_handle pdev;
- uint8_t peer_id;
struct wma_txrx_node *iface;
+ uint8_t peer_id;
int32_t status = 0;
QDF_STATUS result;
@@ -2012,28 +1989,11 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info,
qdf_mem_zero(&iface->arp_offload_req,
sizeof(iface->arp_offload_req));
- if (wma_is_vdev_in_ibss_mode(wma, resp_event->vdev_id))
- wma_delete_all_ibss_peers(wma, resp_event->vdev_id);
- else if (WMA_IS_VDEV_IN_NDI_MODE(wma->interfaces,
- resp_event->vdev_id)) {
- wma_delete_all_nan_remote_peers(wma,
- resp_event->vdev_id);
- } else {
- if (wma_is_vdev_in_ap_mode(wma, resp_event->vdev_id)) {
- wma_delete_all_ap_remote_peers(wma,
- resp_event->vdev_id);
- }
- result = wma_remove_peer_by_reference(pdev,
- wma, params,
- &peer_id,
- params->bssid,
- resp_event->vdev_id,
- WMA_DELETE_PEER_RSP);
-
- if (result == QDF_STATUS_SUCCESS)
- goto free_req_msg;
+ status = wma_remove_bss_peer(wma, pdev, req_msg,
+ resp_event->vdev_id, params);
+ if (status != 0)
+ goto free_req_msg;
- }
wma_send_del_bss_response(wma, req_msg, resp_event->vdev_id);
} else if (req_msg->msg_type == WMA_SET_LINK_STATE) {
@@ -3256,9 +3216,10 @@ void wma_vdev_resp_timer(void *data)
struct wma_target_req *tgt_req = (struct wma_target_req *)data;
ol_txrx_peer_handle peer;
ol_txrx_pdev_handle pdev;
- uint8_t peer_id;
struct wma_target_req *msg;
struct wma_txrx_node *iface;
+ QDF_STATUS status = QDF_STATUS_SUCCESS;
+ uint8_t peer_id;
#ifdef FEATURE_AP_MCC_CH_AVOIDANCE
tpAniSirGlobal mac_ctx;
#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
@@ -3359,19 +3320,11 @@ void wma_vdev_resp_timer(void *data)
return;
}
- if (wma_is_vdev_in_ibss_mode(wma, tgt_req->vdev_id))
- wma_delete_all_ibss_peers(wma, tgt_req->vdev_id);
- else {
- if (wma_is_vdev_in_ap_mode(wma, tgt_req->vdev_id)) {
- wma_delete_all_ap_remote_peers(wma,
- tgt_req->
- vdev_id);
- }
- peer = ol_txrx_find_peer_by_addr(pdev, params->bssid,
- &peer_id);
- wma_remove_peer(wma, params->bssid, tgt_req->vdev_id,
- peer, false);
- }
+
+ status = wma_remove_bss_peer(wma, pdev, tgt_req,
+ tgt_req->vdev_id, params);
+ if (QDF_IS_STATUS_ERROR(status))
+ goto free_tgt_req;
if (wma_send_vdev_down_to_fw(wma, tgt_req->vdev_id) !=
QDF_STATUS_SUCCESS) {
diff --git a/core/wma/src/wma_nan_datapath.c b/core/wma/src/wma_nan_datapath.c
index 56b3e1fe95..b5b41d2388 100644
--- a/core/wma/src/wma_nan_datapath.c
+++ b/core/wma/src/wma_nan_datapath.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -1280,59 +1280,6 @@ send_fail_resp:
}
/**
- * wma_delete_all_nan_remote_peers() - Delete all nan peers
- * @wma: wma handle
- * @vdev_id: vdev id
- *
- * Return: None
- */
-void wma_delete_all_nan_remote_peers(tp_wma_handle wma, uint32_t vdev_id)
-{
- ol_txrx_vdev_handle vdev;
- ol_txrx_peer_handle peer, temp;
-
- if (vdev_id >= wma->max_bssid) {
- WMA_LOGE("%s: invalid vdev_id = %d", __func__, vdev_id);
- return;
- }
-
- vdev = wma->interfaces[vdev_id].handle;
- if (!vdev) {
- WMA_LOGE("%s: vdev is NULL for vdev_id = %d",
- __func__, vdev_id);
- return;
- }
-
- /* remove all remote peers of ndi */
- qdf_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
-
- temp = NULL;
- TAILQ_FOREACH_REVERSE(peer, &vdev->peer_list,
- peer_list_t, peer_list_elem) {
- if (temp) {
- qdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
- if (qdf_atomic_read(
- &temp->delete_in_progress) == 0)
- wma_remove_peer(wma, temp->mac_addr.raw,
- vdev_id, temp, false);
- qdf_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
- }
- /* self peer is deleted last */
- if (peer == TAILQ_FIRST(&vdev->peer_list)) {
- WMA_LOGE("%s: self peer removed", __func__);
- break;
- }
- temp = peer;
- }
- qdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
-
- /* remove ndi self peer last */
- peer = TAILQ_FIRST(&vdev->peer_list);
- wma_remove_peer(wma, peer->mac_addr.raw, vdev_id, peer,
- false);
-}
-
-/**
* wma_register_ndp_cb() - Register NDP callbacks
* @pe_ndp_event_handler: PE NDP callback routine pointer
*
diff --git a/core/wma/src/wma_nan_datapath.h b/core/wma/src/wma_nan_datapath.h
index d65c2b100a..36d7d3bd4d 100644
--- a/core/wma/src/wma_nan_datapath.h
+++ b/core/wma/src/wma_nan_datapath.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2017, 2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -69,8 +69,6 @@ static inline bool wma_is_ndi_active(tp_wma_handle wma_handle)
QDF_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle,
struct ndp_responder_req *req_params);
-void wma_delete_all_nan_remote_peers(tp_wma_handle wma,
- uint32_t vdev_id);
void wma_ndp_register_all_event_handlers(tp_wma_handle wma_handle);
void wma_ndp_unregister_all_event_handlers(tp_wma_handle wma_handle);
@@ -95,10 +93,6 @@ static inline void wma_add_bss_ndi_mode(tp_wma_handle wma,
tpAddBssParams add_bss)
{
}
-static inline void wma_delete_all_nan_remote_peers(tp_wma_handle wma,
- uint32_t vdev_id)
-{
-}
static inline void wma_ndp_register_all_event_handlers(
tp_wma_handle wma_handle) {}
static inline void wma_ndp_unregister_all_event_handlers(