diff --git a/core/hdd/src/wlan_hdd_nan_datapath.c b/core/hdd/src/wlan_hdd_nan_datapath.c index 4dde13d19221..4f4a35de848d 100644 --- a/core/hdd/src/wlan_hdd_nan_datapath.c +++ b/core/hdd/src/wlan_hdd_nan_datapath.c @@ -564,7 +564,7 @@ static int __wlan_hdd_cfg80211_process_ndp_cmd(struct wiphy *wiphy, } return os_if_nan_process_ndp_cmd(hdd_ctx->psoc, data, data_len, - hdd_is_ndp_allowed(hdd_ctx)); + hdd_is_ndp_allowed(hdd_ctx), wdev); } /** diff --git a/os_if/nan/inc/os_if_nan.h b/os_if/nan/inc/os_if_nan.h index 17f829b13339..f67def17c9bb 100644 --- a/os_if/nan/inc/os_if_nan.h +++ b/os_if/nan/inc/os_if_nan.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. 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 @@ -54,12 +55,14 @@ struct ndi_find_vdev_filter { * @data_len: length of data * @is_ndp_allowed: Indicates whether to allow NDP creation. * NDI creation is always allowed. + * @wdev: Wireless device structure pointer * * Return: status of operation */ int os_if_nan_process_ndp_cmd(struct wlan_objmgr_psoc *psoc, const void *data, int data_len, - bool is_ndp_allowed); + bool is_ndp_allowed, + struct wireless_dev *wdev); /** * os_if_nan_register_hdd_callbacks: os_if api to register hdd callbacks diff --git a/os_if/nan/src/os_if_nan.c b/os_if/nan/src/os_if_nan.c index 9a5996463cbd..252dada24b32 100644 --- a/os_if/nan/src/os_if_nan.c +++ b/os_if/nan/src/os_if_nan.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. 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 @@ -759,7 +759,6 @@ static int os_if_nan_process_ndp_initiator_req(struct wlan_objmgr_psoc *psoc, * Return: 0 on success or error code on failure */ static int __os_if_nan_process_ndp_responder_req(struct wlan_objmgr_psoc *psoc, - char *iface_name, struct nlattr **tb) { int ret = 0; @@ -767,6 +766,8 @@ static int __os_if_nan_process_ndp_responder_req(struct wlan_objmgr_psoc *psoc, enum nan_datapath_state state; struct wlan_objmgr_vdev *nan_vdev = NULL; struct nan_datapath_responder_req req = {0}; + char *iface_name; + int errno; if (!tb[QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE]) { osif_err("ndp_rsp is unavailable"); @@ -775,6 +776,13 @@ static int __os_if_nan_process_ndp_responder_req(struct wlan_objmgr_psoc *psoc, req.ndp_rsp = nla_get_u32(tb[QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE]); if (req.ndp_rsp == NAN_DATAPATH_RESPONSE_ACCEPT) { + errno = osif_nla_str(tb, QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR, + &iface_name); + + if (errno) { + osif_err("NAN data iface not provided"); + return errno; + } /* Check for an existing NAN interface */ nan_vdev = os_if_get_ndi_vdev_by_ifname(psoc, iface_name); if (!nan_vdev) { @@ -902,26 +910,17 @@ responder_req_failed: } static int os_if_nan_process_ndp_responder_req(struct wlan_objmgr_psoc *psoc, - struct nlattr **tb) + struct nlattr **tb, + struct wireless_dev *wdev) { - struct net_device *net_dev; struct osif_vdev_sync *vdev_sync; - char *ifname; int errno; - errno = osif_nla_str(tb, QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR, &ifname); + errno = osif_vdev_sync_op_start(wdev->netdev, &vdev_sync); if (errno) return errno; - errno = osif_net_dev_from_ifname(psoc, ifname, &net_dev); - if (errno) - return errno; - - errno = osif_vdev_sync_op_start(net_dev, &vdev_sync); - if (errno) - return errno; - - errno = __os_if_nan_process_ndp_responder_req(psoc, ifname, tb); + errno = __os_if_nan_process_ndp_responder_req(psoc, tb); osif_vdev_sync_op_stop(vdev_sync); @@ -1021,7 +1020,8 @@ static int os_if_nan_process_ndp_end_req(struct wlan_objmgr_psoc *psoc, int os_if_nan_process_ndp_cmd(struct wlan_objmgr_psoc *psoc, const void *data, int data_len, - bool is_ndp_allowed) + bool is_ndp_allowed, + struct wireless_dev *wdev) { uint32_t ndp_cmd_type; uint16_t transaction_id; @@ -1084,7 +1084,7 @@ int os_if_nan_process_ndp_cmd(struct wlan_objmgr_psoc *psoc, osif_err("Unsupported concurrency for NAN datapath"); return -EOPNOTSUPP; } - return os_if_nan_process_ndp_responder_req(psoc, tb); + return os_if_nan_process_ndp_responder_req(psoc, tb, wdev); case QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST: if (!is_ndp_allowed) { osif_err("Unsupported concurrency for NAN datapath");