From 0f74545bb37a616cda1c37aba93babca69c69438 Mon Sep 17 00:00:00 2001 From: Bala Venkatesh Date: Fri, 29 Mar 2019 11:16:22 +0530 Subject: [PATCH] qcacld-3.0: Replace duplicate api's of vdev_connected Currently, the vdev connection status is checked by getting the bss peer of that vdev, and if the bss peer is in associated state then vdev connected status is sent as true. It can happen vdev is present and bss peer is deleted after getting the bss peer from vdev pointer. Then bss peer can not be dereferenced to get the its status. Instead remove all the duplicate api's tdls_is_vdev_connected, pmo_core_is_vdev_connected, and wlan_vdev_is_connected with wlan_vdev_is_up. wlan_vdev_is_up gives success status if associated. Change-Id: I863c3c0689f329870bd08c813813c16956135209 CRs-Fixed: 2424996 --- components/pmo/core/inc/wlan_pmo_main.h | 10 +------- components/pmo/core/inc/wlan_pmo_objmgr.h | 4 +++- components/pmo/core/src/wlan_pmo_arp.c | 4 ++-- components/pmo/core/src/wlan_pmo_gtk.c | 6 ++--- components/pmo/core/src/wlan_pmo_hw_filter.c | 6 ++--- components/pmo/core/src/wlan_pmo_main.c | 20 ---------------- .../pmo/core/src/wlan_pmo_mc_addr_filtering.c | 4 ++-- components/pmo/core/src/wlan_pmo_ns.c | 4 ++-- components/pmo/core/src/wlan_pmo_wow.c | 2 +- .../pmo/dispatcher/src/wlan_pmo_ucfg_api.c | 5 +++- .../tdls/core/src/wlan_tdls_cmds_process.c | 2 +- components/tdls/core/src/wlan_tdls_ct.c | 24 +------------------ components/tdls/core/src/wlan_tdls_ct.h | 19 --------------- components/tdls/core/src/wlan_tdls_main.c | 2 +- components/tdls/core/src/wlan_tdls_main.h | 2 ++ 15 files changed, 26 insertions(+), 88 deletions(-) diff --git a/components/pmo/core/inc/wlan_pmo_main.h b/components/pmo/core/inc/wlan_pmo_main.h index 9232b44cc62a..e520343676ea 100644 --- a/components/pmo/core/inc/wlan_pmo_main.h +++ b/components/pmo/core/inc/wlan_pmo_main.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -140,14 +140,6 @@ bool pmo_is_vdev_in_beaconning_mode(enum QDF_OPMODE vdev_opmode); bool pmo_core_is_ap_mode_supports_arp_ns(struct wlan_objmgr_psoc *psoc, enum QDF_OPMODE vdev_opmode); -/** - * pmo_core_is_vdev_connected() - to check whether peer is associated or not - * @vdev: objmgr vdev - * - * Return: true in case success else false - */ -bool pmo_core_is_vdev_connected(struct wlan_objmgr_vdev *vdev); - /** * pmo_core_is_vdev_supports_offload() - Check offload is supported on vdev * @vdev: objmgr vdev diff --git a/components/pmo/core/inc/wlan_pmo_objmgr.h b/components/pmo/core/inc/wlan_pmo_objmgr.h index 41db7e33bd34..db37a5a9e031 100644 --- a/components/pmo/core/inc/wlan_pmo_objmgr.h +++ b/components/pmo/core/inc/wlan_pmo_objmgr.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -32,6 +32,8 @@ #include "wlan_objmgr_pdev_obj.h" #include "wlan_objmgr_psoc_obj.h" #include "wlan_pmo_obj_mgmt_public_struct.h" +#include "wlan_utility.h" + /* Get/Put Ref */ diff --git a/components/pmo/core/src/wlan_pmo_arp.c b/components/pmo/core/src/wlan_pmo_arp.c index cbc54c9a6d76..a1d0955d0eed 100644 --- a/components/pmo/core/src/wlan_pmo_arp.c +++ b/components/pmo/core/src/wlan_pmo_arp.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -216,7 +216,7 @@ static QDF_STATUS pmo_core_arp_offload_sanity( return QDF_STATUS_E_INVAL; } - if (!pmo_core_is_vdev_connected(vdev)) + if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) return QDF_STATUS_E_INVAL; return QDF_STATUS_SUCCESS; diff --git a/components/pmo/core/src/wlan_pmo_gtk.c b/components/pmo/core/src/wlan_pmo_gtk.c index 30a8ffd9960e..7ee6921b7f00 100644 --- a/components/pmo/core/src/wlan_pmo_gtk.c +++ b/components/pmo/core/src/wlan_pmo_gtk.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -79,7 +79,7 @@ static QDF_STATUS pmo_core_do_enable_gtk_offload( return QDF_STATUS_E_INVAL; } - if (!pmo_core_is_vdev_connected(vdev)) + if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) return QDF_STATUS_E_INVAL; vdev_id = pmo_vdev_get_id(vdev); @@ -122,7 +122,7 @@ static QDF_STATUS pmo_core_is_gtk_enabled_in_fwr( return QDF_STATUS_E_INVAL; } - if (!pmo_core_is_vdev_connected(vdev)) + if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) return QDF_STATUS_E_INVAL; status = pmo_get_vdev_bss_peer_mac_addr(vdev, diff --git a/components/pmo/core/src/wlan_pmo_hw_filter.c b/components/pmo/core/src/wlan_pmo_hw_filter.c index 6dec685e01f5..9900c6e97704 100644 --- a/components/pmo/core/src/wlan_pmo_hw_filter.c +++ b/components/pmo/core/src/wlan_pmo_hw_filter.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -39,7 +39,7 @@ QDF_STATUS pmo_core_enable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev) if (QDF_IS_STATUS_ERROR(status)) goto exit_with_status; - if (!pmo_core_is_vdev_connected(vdev)) { + if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) { status = QDF_STATUS_E_NOSUPPORT; goto exit_with_status; } @@ -75,7 +75,7 @@ QDF_STATUS pmo_core_disable_hw_filter_in_fwr(struct wlan_objmgr_vdev *vdev) if (QDF_IS_STATUS_ERROR(status)) goto exit_with_status; - if (!pmo_core_is_vdev_connected(vdev)) { + if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) { status = QDF_STATUS_E_NOSUPPORT; goto exit_with_status; } diff --git a/components/pmo/core/src/wlan_pmo_main.c b/components/pmo/core/src/wlan_pmo_main.c index b9304b28700a..b34521894f0b 100644 --- a/components/pmo/core/src/wlan_pmo_main.c +++ b/components/pmo/core/src/wlan_pmo_main.c @@ -286,26 +286,6 @@ bool pmo_core_is_ap_mode_supports_arp_ns(struct wlan_objmgr_psoc *psoc, return true; } -bool pmo_core_is_vdev_connected(struct wlan_objmgr_vdev *vdev) -{ - struct wlan_objmgr_peer *peer; - enum wlan_peer_state peer_state; - - peer = wlan_vdev_get_bsspeer(vdev); - if (!peer) { - pmo_debug("bss peer is null"); - return false; - } - - peer_state = wlan_peer_mlme_get_state(peer); - if (peer_state != WLAN_ASSOC_STATE) { - pmo_debug("peer is not associated; state:%d", peer_state); - return false; - } - - return true; -} - bool pmo_core_is_vdev_supports_offload(struct wlan_objmgr_vdev *vdev) { enum QDF_OPMODE opmode; diff --git a/components/pmo/core/src/wlan_pmo_mc_addr_filtering.c b/components/pmo/core/src/wlan_pmo_mc_addr_filtering.c index b63a69c178d8..c0df46b0e072 100644 --- a/components/pmo/core/src/wlan_pmo_mc_addr_filtering.c +++ b/components/pmo/core/src/wlan_pmo_mc_addr_filtering.c @@ -514,7 +514,7 @@ QDF_STATUS pmo_core_enable_mc_addr_filtering_in_fwr( if (status != QDF_STATUS_SUCCESS) goto put_vdev; - if (!pmo_core_is_vdev_connected(vdev)) { + if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) { status = QDF_STATUS_E_INVAL; goto put_vdev; } @@ -615,7 +615,7 @@ QDF_STATUS pmo_core_disable_mc_addr_filtering_in_fwr( if (status != QDF_STATUS_SUCCESS) goto put_ref; - if (!pmo_core_is_vdev_connected(vdev)) { + if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) { status = QDF_STATUS_E_INVAL; goto put_ref; } diff --git a/components/pmo/core/src/wlan_pmo_ns.c b/components/pmo/core/src/wlan_pmo_ns.c index 291cbe0d2a23..e61f54ea0d48 100644 --- a/components/pmo/core/src/wlan_pmo_ns.c +++ b/components/pmo/core/src/wlan_pmo_ns.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -252,7 +252,7 @@ static QDF_STATUS pmo_core_ns_offload_sanity(struct wlan_objmgr_vdev *vdev) return QDF_STATUS_E_INVAL; } - if (pmo_core_is_vdev_connected(vdev) == false) + if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) return QDF_STATUS_E_INVAL; return QDF_STATUS_SUCCESS; diff --git a/components/pmo/core/src/wlan_pmo_wow.c b/components/pmo/core/src/wlan_pmo_wow.c index 716ddb81945c..381b48ff4750 100644 --- a/components/pmo/core/src/wlan_pmo_wow.c +++ b/components/pmo/core/src/wlan_pmo_wow.c @@ -341,7 +341,7 @@ bool pmo_core_is_wow_applicable(struct wlan_objmgr_psoc *psoc) if (QDF_IS_STATUS_ERROR(status)) continue; - if (pmo_core_is_vdev_connected(vdev)) { + if (wlan_vdev_is_up(vdev) == QDF_STATUS_SUCCESS) { pmo_debug("STA is connected, enabling wow"); is_wow_applicable = true; } else if (ucfg_scan_get_pno_in_progress(vdev)) { diff --git a/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c b/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c index 554d82593405..1e915b78f6b2 100644 --- a/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c +++ b/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c @@ -98,7 +98,10 @@ bool ucfg_pmo_is_ap_mode_supports_arp_ns(struct wlan_objmgr_psoc *psoc, bool ucfg_pmo_is_vdev_connected(struct wlan_objmgr_vdev *vdev) { - return pmo_core_is_vdev_connected(vdev); + if (wlan_vdev_is_up(vdev) == QDF_STATUS_SUCCESS) + return true; + else + return false; } bool ucfg_pmo_is_vdev_supports_offload(struct wlan_objmgr_vdev *vdev) diff --git a/components/tdls/core/src/wlan_tdls_cmds_process.c b/components/tdls/core/src/wlan_tdls_cmds_process.c index abccfbf974bb..21b282ece672 100644 --- a/components/tdls/core/src/wlan_tdls_cmds_process.c +++ b/components/tdls/core/src/wlan_tdls_cmds_process.c @@ -684,7 +684,7 @@ int tdls_validate_mgmt_request(struct tdls_action_frame_request *tdls_mgmt_req) * STA or P2P client should be connected and authenticated before * sending any TDLS frames */ - if (!tdls_is_vdev_connected(vdev) || + if ((wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) || !tdls_is_vdev_authenticated(vdev)) { tdls_err("STA is not connected or not authenticated."); return -EAGAIN; diff --git a/components/tdls/core/src/wlan_tdls_ct.c b/components/tdls/core/src/wlan_tdls_ct.c index 9e16f3a35bc1..dfcdb417e1c5 100644 --- a/components/tdls/core/src/wlan_tdls_ct.c +++ b/components/tdls/core/src/wlan_tdls_ct.c @@ -27,28 +27,6 @@ #include "wlan_tdls_ct.h" #include "wlan_tdls_cmds_process.h" -bool tdls_is_vdev_connected(struct wlan_objmgr_vdev *vdev) -{ - struct wlan_objmgr_peer *peer; - enum wlan_peer_state peer_state; - - peer = wlan_vdev_get_bsspeer(vdev); - - if (!peer) { - tdls_err("peer is null"); - return false; - } - - peer_state = wlan_peer_mlme_get_state(peer); - - if (peer_state != WLAN_ASSOC_STATE) { - tdls_err("peer state: %d", peer_state); - return false; - } - - return true; -} - bool tdls_is_vdev_authenticated(struct wlan_objmgr_vdev *vdev) { struct wlan_objmgr_peer *peer; @@ -1032,7 +1010,7 @@ int tdls_set_tdls_offchannelmode(struct wlan_objmgr_vdev *vdev, return -EINVAL; } - if (!tdls_is_vdev_connected(vdev)) { + if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) { tdls_err("tdls off channel req in not associated state %d", offchanmode); return -EPERM; diff --git a/components/tdls/core/src/wlan_tdls_ct.h b/components/tdls/core/src/wlan_tdls_ct.h index 64af4b84e26d..54d966196b61 100644 --- a/components/tdls/core/src/wlan_tdls_ct.h +++ b/components/tdls/core/src/wlan_tdls_ct.h @@ -35,17 +35,6 @@ #define TDLS_PREFERRED_OFF_CHANNEL_NUM_MAX 165 #define TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT 36 -/** - * tdls_is_vdev_connected() - check the vdev is connected to ap - * @vdev: vdev object manager - * - * This function will check the vdev connection status and return - * true or false - * - * Return: true - Connected, false - Not connected - */ -bool tdls_is_vdev_connected(struct wlan_objmgr_vdev *vdev); - /** * tdls_implicit_enable() - enable implicit tdls triggering * @tdls_vdev: TDLS vdev @@ -162,14 +151,6 @@ void tdls_discovery_timeout_peer_cb(void *user_data); */ void tdls_implicit_disable(struct tdls_vdev_priv_obj *tdls_vdev); -/** - * tdls_is_vdev_connected() -check the vdev connection - * @vdev: vdev oobject - * - * Return: true or false - */ -bool tdls_is_vdev_connected(struct wlan_objmgr_vdev *vdev); - /** * tdls_is_vdev_authenticated() -check the vdev authentication state * @vdev: vdev oobject diff --git a/components/tdls/core/src/wlan_tdls_main.c b/components/tdls/core/src/wlan_tdls_main.c index b89e707f3932..89b7c2c7809f 100644 --- a/components/tdls/core/src/wlan_tdls_main.c +++ b/components/tdls/core/src/wlan_tdls_main.c @@ -370,7 +370,7 @@ static int __tdls_get_all_peers_from_list( buf = get_tdls_peers->buf; buf_len = get_tdls_peers->buf_len; - if (!tdls_is_vdev_connected(get_tdls_peers->vdev)) { + if (wlan_vdev_is_up(get_tdls_peers->vdev) != QDF_STATUS_SUCCESS) { len = qdf_scnprintf(buf, buf_len, "\nSTA is not associated\n"); return len; diff --git a/components/tdls/core/src/wlan_tdls_main.h b/components/tdls/core/src/wlan_tdls_main.h index d4d4a7aba4b4..9850546ebcde 100644 --- a/components/tdls/core/src/wlan_tdls_main.h +++ b/components/tdls/core/src/wlan_tdls_main.h @@ -34,6 +34,8 @@ #include #include #include "wlan_serialization_api.h" +#include + /* Bit mask flag for tdls_option to FW */ #define ENA_TDLS_OFFCHAN (1 << 0) /* TDLS Off Channel support */