diff --git a/os_if/linux/scan/src/wlan_cfg80211_scan.c b/os_if/linux/scan/src/wlan_cfg80211_scan.c index 81c17b9229..7e8a2740c7 100644 --- a/os_if/linux/scan/src/wlan_cfg80211_scan.c +++ b/os_if/linux/scan/src/wlan_cfg80211_scan.c @@ -2055,83 +2055,6 @@ struct cfg80211_bss *wlan_cfg80211_get_bss(struct wiphy *wiphy, } #endif -/** - * struct wlan_check_bssid_context - bssid check context - * @bssid: bssid to be checked - * @connected: connected by vdev or not - * @vdev_id: vdev id of connected vdev - */ -struct wlan_check_bssid_context { - struct qdf_mac_addr bssid; - bool connected; - uint8_t vdev_id; -}; - -/** - * wlan_get_connected_vdev_handler() - check vdev connected on bssid - * @psoc: psoc object - * @obj: vdev object - * @args: handler context - * - * This function will check whether vdev is connected on bssid or not and - * update the result to handler context accordingly. - * - * Return: void - */ -static void wlan_get_connected_vdev_handler(struct wlan_objmgr_psoc *psoc, - void *obj, void *args) -{ - struct wlan_objmgr_vdev *vdev = (struct wlan_objmgr_vdev *)obj; - struct wlan_check_bssid_context *context = - (struct wlan_check_bssid_context *)args; - struct qdf_mac_addr bss_peer_mac; - enum QDF_OPMODE op_mode; - - if (context->connected) - return; - op_mode = wlan_vdev_mlme_get_opmode(vdev); - if (op_mode != QDF_STA_MODE && op_mode != QDF_P2P_CLIENT_MODE) - return; - if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) - return; - if (wlan_vdev_get_bss_peer_mac(vdev, &bss_peer_mac) != - QDF_STATUS_SUCCESS) - return; - if (qdf_is_macaddr_equal(&bss_peer_mac, &context->bssid)) { - context->connected = true; - context->vdev_id = wlan_vdev_get_id(vdev); - } -} - -/** - * wlan_get_connected_vdev_by_bssid() - check/get any vdev connected on bssid - * @pdev: pdev object - * @bssid: bssid to be checked - * @vdev_id: vdev id - * - * This function will loop through all the vdev in psoc and find/return the - * vdev which is connected to bssid provided. - * - * Return: bool - */ -static bool wlan_get_connected_vdev_by_bssid(struct wlan_objmgr_pdev *pdev, - uint8_t *bssid, uint8_t *vdev_id) -{ - struct wlan_objmgr_psoc *psoc; - struct wlan_check_bssid_context context; - - psoc = wlan_pdev_get_psoc(pdev); - qdf_mem_zero(&context, sizeof(struct wlan_check_bssid_context)); - qdf_mem_copy(context.bssid.bytes, bssid, QDF_MAC_ADDR_SIZE); - wlan_objmgr_iterate_obj_list(psoc, WLAN_VDEV_OP, - wlan_get_connected_vdev_handler, - &context, true, WLAN_OSIF_SCAN_ID); - if (context.connected) - *vdev_id = context.vdev_id; - - return context.connected; -} - QDF_STATUS __wlan_cfg80211_unlink_bss_list(struct wiphy *wiphy, struct wlan_objmgr_pdev *pdev, uint8_t *bssid, uint8_t *ssid, diff --git a/umac/cmn_services/utils/inc/wlan_utility.h b/umac/cmn_services/utils/inc/wlan_utility.h index ad9763cbe4..9d52f467c7 100644 --- a/umac/cmn_services/utils/inc/wlan_utility.h +++ b/umac/cmn_services/utils/inc/wlan_utility.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2021 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 above @@ -304,6 +304,20 @@ void wlan_chan_copy(struct wlan_channel *tgt, struct wlan_channel *src); struct wlan_channel *wlan_vdev_get_active_channel (struct wlan_objmgr_vdev *vdev); +/** + * wlan_get_connected_vdev_by_bssid() - check/get any vdev connected on bssid + * @pdev: pdev object + * @bssid: bssid to be checked + * @vdev_id: vdev id + * + * This function will loop through all the vdev in psoc and find/return the + * vdev which is connected to bssid provided. + * + * Return: bool + */ +bool wlan_get_connected_vdev_by_bssid(struct wlan_objmgr_pdev *pdev, + uint8_t *bssid, uint8_t *vdev_id); + /** * wlan_util_stats_get_rssi() - API to get rssi in dbm * @db2dbm_enabled: If db2dbm capability is enabled diff --git a/umac/cmn_services/utils/src/wlan_utility.c b/umac/cmn_services/utils/src/wlan_utility.c index 81c5e62339..c10bb03cf0 100644 --- a/umac/cmn_services/utils/src/wlan_utility.c +++ b/umac/cmn_services/utils/src/wlan_utility.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2021 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 above @@ -402,6 +402,74 @@ struct wlan_channel *wlan_vdev_get_active_channel(struct wlan_objmgr_vdev *vdev) return comp_vdev_chan; } +/** + * struct wlan_check_bssid_context - bssid check context + * @bssid: bssid to be checked + * @connected: connected by vdev or not + * @vdev_id: vdev id of connected vdev + */ +struct wlan_check_bssid_context { + struct qdf_mac_addr bssid; + bool connected; + uint8_t vdev_id; +}; + +/** + * wlan_get_connected_vdev_handler() - check vdev connected on bssid + * @psoc: psoc object + * @obj: vdev object + * @args: handler context + * + * This function will check whether vdev is connected on bssid or not and + * update the result to handler context accordingly. + * + * Return: void + */ +static void wlan_get_connected_vdev_handler(struct wlan_objmgr_psoc *psoc, + void *obj, void *args) +{ + struct wlan_objmgr_vdev *vdev = (struct wlan_objmgr_vdev *)obj; + struct wlan_check_bssid_context *context = + (struct wlan_check_bssid_context *)args; + struct qdf_mac_addr bss_peer_mac; + enum QDF_OPMODE op_mode; + + if (context->connected) + return; + op_mode = wlan_vdev_mlme_get_opmode(vdev); + if (op_mode != QDF_STA_MODE && op_mode != QDF_P2P_CLIENT_MODE) + return; + if (wlan_vdev_is_up(vdev) != QDF_STATUS_SUCCESS) + return; + if (wlan_vdev_get_bss_peer_mac(vdev, &bss_peer_mac) != + QDF_STATUS_SUCCESS) + return; + if (qdf_is_macaddr_equal(&bss_peer_mac, &context->bssid)) { + context->connected = true; + context->vdev_id = wlan_vdev_get_id(vdev); + } +} + +bool wlan_get_connected_vdev_by_bssid(struct wlan_objmgr_pdev *pdev, + uint8_t *bssid, uint8_t *vdev_id) +{ + struct wlan_objmgr_psoc *psoc; + struct wlan_check_bssid_context context; + + psoc = wlan_pdev_get_psoc(pdev); + qdf_mem_zero(&context, sizeof(struct wlan_check_bssid_context)); + qdf_mem_copy(context.bssid.bytes, bssid, QDF_MAC_ADDR_SIZE); + wlan_objmgr_iterate_obj_list(psoc, WLAN_VDEV_OP, + wlan_get_connected_vdev_handler, + &context, true, WLAN_OSIF_SCAN_ID); + if (context.connected) + *vdev_id = context.vdev_id; + + return context.connected; +} + +qdf_export_symbol(wlan_get_connected_vdev_by_bssid); + static void wlan_pdev_chan_match(struct wlan_objmgr_pdev *pdev, void *object, void *arg) {