diff --git a/components/nan/core/inc/nan_public_structs.h b/components/nan/core/inc/nan_public_structs.h index 13d0d4109a..dbb9256ef7 100644 --- a/components/nan/core/inc/nan_public_structs.h +++ b/components/nan/core/inc/nan_public_structs.h @@ -705,7 +705,6 @@ struct nan_datapath_sch_update_event { * @drv_ndi_create_rsp_handler: HDD callback for handling NDI interface creation * @drv_ndi_delete_rsp_handler: HDD callback for handling NDI interface deletion * @new_peer_ind: HDD callback for handling new NDP peer - * @get_peer_idx: HDD callback for getting NDP peer index * @add_ndi_peer: LIM callback for adding NDP peer * @peer_departed_ind: HDD callback for handling departing of NDP peer * @ndp_delete_peers: LIM callback for deleting NDP peer @@ -726,7 +725,6 @@ struct nan_callbacks { (uint8_t, struct nan_datapath_inf_create_rsp *); void (*drv_ndi_delete_rsp_handler)(uint8_t); int (*new_peer_ind)(uint8_t, uint16_t, struct qdf_mac_addr *, bool); - int (*get_peer_idx)(uint8_t, struct qdf_mac_addr *); QDF_STATUS (*add_ndi_peer)(uint32_t, struct qdf_mac_addr); void (*peer_departed_ind)(uint8_t, uint16_t, struct qdf_mac_addr *, bool); diff --git a/components/nan/core/inc/wlan_nan_api.h b/components/nan/core/inc/wlan_nan_api.h index 1e59efab79..2b962e1222 100644 --- a/components/nan/core/inc/wlan_nan_api.h +++ b/components/nan/core/inc/wlan_nan_api.h @@ -64,6 +64,26 @@ QDF_STATUS nan_psoc_enable(struct wlan_objmgr_psoc *psoc); */ QDF_STATUS nan_psoc_disable(struct wlan_objmgr_psoc *psoc); +/** + * nan_get_peer_priv_obj: get NAN priv object from peer object + * @peer: pointer to peer object + * + * Return: pointer to NAN peer private object + */ +static inline +struct nan_peer_priv_obj *nan_get_peer_priv_obj(struct wlan_objmgr_peer *peer) +{ + struct nan_peer_priv_obj *obj; + + if (!peer) { + nan_err("peer is null"); + return NULL; + } + obj = wlan_objmgr_peer_get_comp_private_obj(peer, WLAN_UMAC_COMP_NAN); + + return obj; +} + /** * nan_get_vdev_priv_obj: get NAN priv object from vdev object * @vdev: pointer to vdev object diff --git a/components/nan/core/src/nan_api.c b/components/nan/core/src/nan_api.c index 757ff983cd..40c9506d75 100644 --- a/components/nan/core/src/nan_api.c +++ b/components/nan/core/src/nan_api.c @@ -249,6 +249,81 @@ static QDF_STATUS nan_vdev_obj_destroyed_notification( return status; } +/** + * nan_peer_obj_created_notification() - Handler for peer object creation + * notification event + * @peer: Pointer to the PEER Object + * @arg_list: Pointer to private argument - NULL + * + * This function gets called from object manager when peer is being + * created. + * + * Return: QDF_STATUS + */ +static QDF_STATUS nan_peer_obj_created_notification( + struct wlan_objmgr_peer *peer, void *arg_list) +{ + struct nan_peer_priv_obj *nan_peer_obj; + QDF_STATUS status = QDF_STATUS_SUCCESS; + + nan_peer_obj = qdf_mem_malloc(sizeof(*nan_peer_obj)); + if (!nan_peer_obj) { + nan_err("malloc failed for nan prv obj"); + return QDF_STATUS_E_NOMEM; + } + + qdf_spinlock_create(&nan_peer_obj->lock); + status = wlan_objmgr_peer_component_obj_attach(peer, WLAN_UMAC_COMP_NAN, + (void *)nan_peer_obj, + QDF_STATUS_SUCCESS); + if (QDF_IS_STATUS_ERROR(status)) { + nan_alert("obj attach with peer failed"); + goto nan_peer_notif_failed; + } + + return QDF_STATUS_SUCCESS; + +nan_peer_notif_failed: + + qdf_spinlock_destroy(&nan_peer_obj->lock); + qdf_mem_free(nan_peer_obj); + return status; +} + +/** + * nan_peer_obj_destroyed_notification() - Handler for peer object deletion + * notification event + * @peer: Pointer to the PEER Object + * @arg_list: Pointer to private argument - NULL + * + * This function gets called from object manager when peer is being destroyed. + * + * Return: QDF_STATUS + */ +static QDF_STATUS nan_peer_obj_destroyed_notification( + struct wlan_objmgr_peer *peer, void *arg_list) +{ + struct nan_peer_priv_obj *nan_peer_obj; + QDF_STATUS status = QDF_STATUS_SUCCESS; + + nan_peer_obj = nan_get_peer_priv_obj(peer); + if (!nan_peer_obj) { + nan_err("nan_peer_obj is NULL"); + return QDF_STATUS_E_FAULT; + } + + status = wlan_objmgr_peer_component_obj_detach(peer, WLAN_UMAC_COMP_NAN, + nan_peer_obj); + if (QDF_IS_STATUS_ERROR(status)) + nan_err("nan_peer_obj detach failed"); + + nan_debug("nan_peer_obj deleted with status %d", status); + qdf_spinlock_destroy(&nan_peer_obj->lock); + qdf_mem_free(nan_peer_obj); + + return status; +} + QDF_STATUS nan_init(void) { QDF_STATUS status; @@ -270,8 +345,7 @@ QDF_STATUS nan_init(void) NULL); if (QDF_IS_STATUS_ERROR(status)) { nan_err("wlan_objmgr_register_psoc_destroy_handler failed"); - nan_deinit(); - return status; + goto err_psoc_destroy_reg; } /* register vdev create handler functions. */ @@ -281,8 +355,7 @@ QDF_STATUS nan_init(void) NULL); if (QDF_IS_STATUS_ERROR(status)) { nan_err("wlan_objmgr_register_psoc_create_handler failed"); - nan_deinit(); - return status; + goto err_vdev_create_reg; } /* register vdev delete handler functions. */ @@ -292,11 +365,50 @@ QDF_STATUS nan_init(void) NULL); if (QDF_IS_STATUS_ERROR(status)) { nan_err("wlan_objmgr_register_psoc_destroy_handler failed"); - nan_deinit(); - return status; + goto err_vdev_destroy_reg; } - return QDF_STATUS_SUCCESS; + /* register peer create handler functions. */ + status = wlan_objmgr_register_peer_create_handler( + WLAN_UMAC_COMP_NAN, + nan_peer_obj_created_notification, + NULL); + if (QDF_IS_STATUS_ERROR(status)) { + nan_err("wlan_objmgr_register_peer_create_handler failed"); + goto err_peer_create_reg; + } + + /* register peer delete handler functions. */ + status = wlan_objmgr_register_peer_destroy_handler( + WLAN_UMAC_COMP_NAN, + nan_peer_obj_destroyed_notification, + NULL); + if (QDF_IS_STATUS_ERROR(status)) + nan_err("wlan_objmgr_register_peer_destroy_handler failed"); + else + return QDF_STATUS_SUCCESS; + + wlan_objmgr_unregister_peer_create_handler(WLAN_UMAC_COMP_NAN, + nan_peer_obj_created_notification, + NULL); +err_peer_create_reg: + wlan_objmgr_unregister_vdev_destroy_handler(WLAN_UMAC_COMP_NAN, + nan_vdev_obj_destroyed_notification, + NULL); +err_vdev_destroy_reg: + wlan_objmgr_unregister_vdev_create_handler(WLAN_UMAC_COMP_NAN, + nan_vdev_obj_created_notification, + NULL); +err_vdev_create_reg: + wlan_objmgr_unregister_psoc_destroy_handler(WLAN_UMAC_COMP_NAN, + nan_psoc_obj_destroyed_notification, + NULL); +err_psoc_destroy_reg: + wlan_objmgr_unregister_psoc_create_handler(WLAN_UMAC_COMP_NAN, + nan_psoc_obj_created_notification, + NULL); + + return status; } QDF_STATUS nan_deinit(void) @@ -343,6 +455,26 @@ QDF_STATUS nan_deinit(void) ret = status; } + /* de-register peer create handler functions. */ + status = wlan_objmgr_unregister_peer_create_handler( + WLAN_UMAC_COMP_NAN, + nan_peer_obj_created_notification, + NULL); + if (QDF_IS_STATUS_ERROR(status)) { + nan_err("wlan_objmgr_unregister_peer_create_handler failed"); + ret = status; + } + + /* de-register peer delete handler functions. */ + status = wlan_objmgr_unregister_peer_destroy_handler( + WLAN_UMAC_COMP_NAN, + nan_peer_obj_destroyed_notification, + NULL); + if (QDF_IS_STATUS_ERROR(status)) { + nan_err("wlan_objmgr_deregister_peer_destroy_handler failed"); + ret = status; + } + return ret; } diff --git a/components/nan/core/src/nan_main.c b/components/nan/core/src/nan_main.c index 5ba0eeaf6a..b657f0504f 100644 --- a/components/nan/core/src/nan_main.c +++ b/components/nan/core/src/nan_main.c @@ -292,6 +292,79 @@ QDF_STATUS nan_scheduled_msg_handler(struct scheduler_msg *msg) return QDF_STATUS_SUCCESS; } +static QDF_STATUS nan_increment_ndp_sessions(struct wlan_objmgr_psoc *psoc, + struct qdf_mac_addr *peer_ndi_mac) +{ + struct wlan_objmgr_peer *peer; + struct nan_peer_priv_obj *peer_nan_obj; + + peer = wlan_objmgr_get_peer_by_mac(psoc, + peer_ndi_mac->bytes, + WLAN_NAN_ID); + + if (!peer) { + nan_err("peer object is null"); + return QDF_STATUS_E_NULL_VALUE; + } + + peer_nan_obj = nan_get_peer_priv_obj(peer); + if (!peer_nan_obj) { + nan_err("peer_nan_obj is null"); + wlan_objmgr_peer_release_ref(peer, WLAN_NAN_ID); + return QDF_STATUS_E_NULL_VALUE; + } + + qdf_spin_lock_bh(&peer_nan_obj->lock); + if (peer_nan_obj->active_ndp_sessions == MAX_NDP_INSTANCES_PER_PEER) { + qdf_spin_unlock_bh(&peer_nan_obj->lock); + nan_err("Already reached Max limit(%d) for NDP's per peer!", + MAX_NDP_INSTANCES_PER_PEER); + wlan_objmgr_peer_release_ref(peer, WLAN_NAN_ID); + return QDF_STATUS_E_FAILURE; + } + peer_nan_obj->active_ndp_sessions++; + qdf_spin_unlock_bh(&peer_nan_obj->lock); + wlan_objmgr_peer_release_ref(peer, WLAN_NAN_ID); + + return QDF_STATUS_SUCCESS; +} + +static QDF_STATUS nan_decrement_ndp_sessions(struct wlan_objmgr_psoc *psoc, + struct qdf_mac_addr *peer_ndi_mac) +{ + struct wlan_objmgr_peer *peer; + struct nan_peer_priv_obj *peer_nan_obj; + + peer = wlan_objmgr_get_peer_by_mac(psoc, + peer_ndi_mac->bytes, + WLAN_NAN_ID); + + if (!peer) { + nan_err("peer object is null"); + return QDF_STATUS_E_NULL_VALUE; + } + + peer_nan_obj = nan_get_peer_priv_obj(peer); + if (!peer_nan_obj) { + nan_err("peer_nan_obj is null"); + wlan_objmgr_peer_release_ref(peer, WLAN_NAN_ID); + return QDF_STATUS_E_NULL_VALUE; + } + + qdf_spin_lock_bh(&peer_nan_obj->lock); + if (!peer_nan_obj->active_ndp_sessions) { + qdf_spin_unlock_bh(&peer_nan_obj->lock); + nan_err("Active NDP sessions already zero!"); + wlan_objmgr_peer_release_ref(peer, WLAN_NAN_ID); + return QDF_STATUS_E_FAILURE; + } + peer_nan_obj->active_ndp_sessions--; + qdf_spin_unlock_bh(&peer_nan_obj->lock); + wlan_objmgr_peer_release_ref(peer, WLAN_NAN_ID); + + return QDF_STATUS_SUCCESS; +} + static QDF_STATUS nan_handle_confirm( struct nan_datapath_confirm_event *confirm) { @@ -324,6 +397,11 @@ static QDF_STATUS nan_handle_confirm( psoc_nan_obj->cb_obj.delete_peers_by_addr(vdev_id, confirm->peer_ndi_mac_addr); } + + /* Increment NDP sessions for the Peer */ + if (confirm->rsp_code == NAN_DATAPATH_RESPONSE_ACCEPT) + nan_increment_ndp_sessions(psoc, &confirm->peer_ndi_mac_addr); + psoc_nan_obj->cb_obj.os_if_ndp_event_handler(psoc, confirm->vdev, NDP_CONFIRM, confirm); @@ -466,6 +544,7 @@ static QDF_STATUS nan_handle_ndp_end_rsp( static QDF_STATUS nan_handle_end_ind( struct nan_datapath_end_indication_event *ind) { + uint32_t i; struct wlan_objmgr_psoc *psoc; struct nan_psoc_priv_obj *psoc_nan_obj; @@ -481,6 +560,11 @@ static QDF_STATUS nan_handle_end_ind( return QDF_STATUS_E_NULL_VALUE; } + /* Decrement NDP sessions for all Peers in the event */ + for (i = 0; i < ind->num_ndp_ids; i++) + nan_decrement_ndp_sessions(psoc, + &ind->ndp_map[i].peer_ndi_mac_addr); + psoc_nan_obj->cb_obj.ndp_delete_peers(ind->ndp_map, ind->num_ndp_ids); psoc_nan_obj->cb_obj.os_if_ndp_event_handler(psoc, ind->vdev, NDP_END_IND, ind); diff --git a/components/nan/core/src/nan_main_i.h b/components/nan/core/src/nan_main_i.h index 2f29d17824..a971aa0d8d 100644 --- a/components/nan/core/src/nan_main_i.h +++ b/components/nan/core/src/nan_main_i.h @@ -58,9 +58,8 @@ struct scheduler_msg; #define nan_nofl_debug(params...) \ QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_NAN, params) -#ifndef MAX_PEERS -#define MAX_PEERS 32 -#endif +/* Maximum number of NDP instances supported on each NAN Peer */ +#define MAX_NDP_INSTANCES_PER_PEER 1 /** * enum nan_disc_state - NAN Discovery states @@ -121,7 +120,6 @@ struct nan_psoc_priv_obj { * struct nan_vdev_priv_obj - nan private vdev obj * @lock: lock to be acquired before reading or writing to object * @state: Current state of NDP - * @active_ndp_sessions: active ndp sessions per adapter * @active_ndp_peers: number of active ndp peers * @ndp_create_transaction_id: transaction id for create req * @ndp_delete_transaction_id: transaction id for delete req @@ -131,8 +129,6 @@ struct nan_psoc_priv_obj { struct nan_vdev_priv_obj { qdf_spinlock_t lock; enum nan_datapath_state state; - /* idx in following array should follow conn_info.peerMacAddress */ - uint32_t active_ndp_sessions[MAX_PEERS]; uint32_t active_ndp_peers; uint16_t ndp_create_transaction_id; uint16_t ndp_delete_transaction_id; @@ -140,6 +136,16 @@ struct nan_vdev_priv_obj { uint32_t ndi_delete_rsp_status; }; +/** + * struct nan_peer_priv_obj - nan private peer obj + * @lock: lock to be acquired before reading or writing to object + * @active_ndp_sessions: number of active ndp sessions for this peer + */ +struct nan_peer_priv_obj { + qdf_spinlock_t lock; + uint32_t active_ndp_sessions; +}; + /** * nan_release_cmd: frees resources for NAN command. * @in_req: pointer to msg buffer to be freed diff --git a/components/nan/dispatcher/inc/nan_ucfg_api.h b/components/nan/dispatcher/inc/nan_ucfg_api.h index fcf6ac80c2..a417b0c886 100644 --- a/components/nan/dispatcher/inc/nan_ucfg_api.h +++ b/components/nan/dispatcher/inc/nan_ucfg_api.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 @@ -63,24 +63,6 @@ QDF_STATUS ucfg_nan_set_active_peers(struct wlan_objmgr_vdev *vdev, */ uint32_t ucfg_nan_get_active_peers(struct wlan_objmgr_vdev *vdev); -/** - * ucfg_nan_set_active_ndp_sessions: set active ndp sessions - * @vdev: pointer to vdev object - * - * Return: status of operation - */ -QDF_STATUS ucfg_nan_set_active_ndp_sessions(struct wlan_objmgr_vdev *vdev, - uint32_t val, uint8_t idx); - -/** - * ucfg_nan_get_active_ndp_sessions: get active ndp sessions from vdev obj - * @vdev: pointer to vdev object - * - * Return: pointer to NAN psoc private object - */ -uint32_t ucfg_nan_get_active_ndp_sessions(struct wlan_objmgr_vdev *vdev, - uint8_t idx); - /** * ucfg_nan_set_ndp_create_transaction_id: set ndp create transaction id * @vdev: pointer to vdev object diff --git a/components/nan/dispatcher/src/nan_ucfg_api.c b/components/nan/dispatcher/src/nan_ucfg_api.c index 9bf04205ad..3f994e6ddd 100644 --- a/components/nan/dispatcher/src/nan_ucfg_api.c +++ b/components/nan/dispatcher/src/nan_ucfg_api.c @@ -100,54 +100,6 @@ inline uint32_t ucfg_nan_get_active_peers(struct wlan_objmgr_vdev *vdev) return val; } - -inline QDF_STATUS ucfg_nan_set_active_ndp_sessions( - struct wlan_objmgr_vdev *vdev, uint32_t val, uint8_t idx) -{ - struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev); - - if (!priv_obj) { - nan_err("priv_obj is null"); - return QDF_STATUS_E_NULL_VALUE; - } - - if (idx >= MAX_PEERS) { - nan_err("peer_idx(%d), MAX(%d)", - idx, MAX_PEERS); - return QDF_STATUS_E_NULL_VALUE; - } - - qdf_spin_lock_bh(&priv_obj->lock); - priv_obj->active_ndp_sessions[idx] = val; - qdf_spin_unlock_bh(&priv_obj->lock); - - return QDF_STATUS_SUCCESS; -} - -inline uint32_t ucfg_nan_get_active_ndp_sessions(struct wlan_objmgr_vdev *vdev, - uint8_t idx) -{ - uint32_t val; - struct nan_vdev_priv_obj *priv_obj = nan_get_vdev_priv_obj(vdev); - - if (!priv_obj) { - nan_err("priv_obj is null"); - return 0; - } - - if (idx >= MAX_PEERS) { - nan_err("peer_idx(%d), MAX(%d)", - idx, MAX_PEERS); - return 0; - } - - qdf_spin_lock_bh(&priv_obj->lock); - val = priv_obj->active_ndp_sessions[idx]; - qdf_spin_unlock_bh(&priv_obj->lock); - - return val; -} - inline QDF_STATUS ucfg_nan_set_ndp_create_transaction_id( struct wlan_objmgr_vdev *vdev, uint16_t val) { @@ -428,7 +380,6 @@ int ucfg_nan_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc, psoc_obj->cb_obj.drv_ndi_delete_rsp_handler = cb_obj->drv_ndi_delete_rsp_handler; - psoc_obj->cb_obj.get_peer_idx = cb_obj->get_peer_idx; psoc_obj->cb_obj.new_peer_ind = cb_obj->new_peer_ind; psoc_obj->cb_obj.peer_departed_ind = cb_obj->peer_departed_ind; psoc_obj->cb_obj.os_if_ndp_event_handler = diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index dc67a3467a..1f1b137bf1 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -2693,7 +2693,6 @@ static void hdd_nan_register_callbacks(struct hdd_context *hdd_ctx) cb_obj.drv_ndi_delete_rsp_handler = hdd_ndi_drv_ndi_delete_rsp_handler; cb_obj.new_peer_ind = hdd_ndp_new_peer_handler; - cb_obj.get_peer_idx = hdd_ndp_get_peer_idx; cb_obj.peer_departed_ind = hdd_ndp_peer_departed_handler; os_if_nan_register_hdd_callbacks(hdd_ctx->psoc, &cb_obj); diff --git a/core/hdd/src/wlan_hdd_nan_datapath.c b/core/hdd/src/wlan_hdd_nan_datapath.c index 3bebb56bda..a7e3ded6dc 100644 --- a/core/hdd/src/wlan_hdd_nan_datapath.c +++ b/core/hdd/src/wlan_hdd_nan_datapath.c @@ -764,15 +764,6 @@ void hdd_ndp_session_end_handler(struct hdd_adapter *adapter) os_if_nan_ndi_session_end(adapter->vdev); } -int hdd_ndp_get_peer_idx(uint8_t vdev_id, struct qdf_mac_addr *addr) -{ - struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); - struct hdd_adapter *adapter = hdd_get_adapter_by_vdev(hdd_ctx, vdev_id); - struct hdd_station_ctx *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter); - - return hdd_get_peer_idx(sta_ctx, addr); -} - /** * hdd_ndp_new_peer_handler() - NDP new peer indication handler * @adapter: pointer to adapter context diff --git a/core/hdd/src/wlan_hdd_nan_datapath.h b/core/hdd/src/wlan_hdd_nan_datapath.h index c1dbe9b103..711c041cee 100644 --- a/core/hdd/src/wlan_hdd_nan_datapath.h +++ b/core/hdd/src/wlan_hdd_nan_datapath.h @@ -92,7 +92,6 @@ void hdd_ndi_close(uint8_t vdev_id); void hdd_ndi_drv_ndi_create_rsp_handler(uint8_t vdev_id, struct nan_datapath_inf_create_rsp *ndi_rsp); void hdd_ndi_drv_ndi_delete_rsp_handler(uint8_t vdev_id); -int hdd_ndp_get_peer_idx(uint8_t vdev_id, struct qdf_mac_addr *addr); int hdd_ndp_new_peer_handler(uint8_t vdev_id, uint16_t sta_id, struct qdf_mac_addr *peer_mac_addr, bool fist_peer); void hdd_ndp_peer_departed_handler(uint8_t vdev_id, uint16_t sta_id, diff --git a/os_if/nan/src/os_if_nan.c b/os_if/nan/src/os_if_nan.c index bd8a404bbe..92830cc80e 100644 --- a/os_if/nan/src/os_if_nan.c +++ b/os_if/nan/src/os_if_nan.c @@ -1450,15 +1450,12 @@ static void os_if_ndp_confirm_ind_handler(struct wlan_objmgr_vdev *vdev, struct nan_datapath_confirm_event *ndp_confirm) { - int idx = 0; uint8_t *ifname; uint32_t data_len; QDF_STATUS status; qdf_size_t ifname_len; - struct nan_callbacks cb_obj; struct sk_buff *vendor_event; struct wlan_objmgr_pdev *pdev = wlan_vdev_get_pdev(vdev); - struct wlan_objmgr_psoc *psoc = wlan_vdev_get_psoc(vdev); struct pdev_osif_priv *os_priv = wlan_pdev_get_ospriv(pdev); if (!ndp_confirm) { @@ -1466,27 +1463,6 @@ os_if_ndp_confirm_ind_handler(struct wlan_objmgr_vdev *vdev, return; } - status = ucfg_nan_get_callbacks(psoc, &cb_obj); - if (QDF_IS_STATUS_ERROR(status)) { - cfg80211_err("couldn't get callbacks"); - return; - } - - /* ndp_confirm is called each time user generated ndp req succeeds */ - idx = cb_obj.get_peer_idx(wlan_vdev_get_id(vdev), - &ndp_confirm->peer_ndi_mac_addr); - - if (idx < 0) - cfg80211_err("can't find addr: %pM in vdev_id: %d, peer table.", - &ndp_confirm->peer_ndi_mac_addr, - wlan_vdev_get_id(vdev)); - else if (ndp_confirm->rsp_code == NAN_DATAPATH_RESPONSE_ACCEPT) { - uint32_t active_sessions = - ucfg_nan_get_active_ndp_sessions(vdev, idx); - ucfg_nan_set_active_ndp_sessions(vdev, active_sessions + 1, - idx); - } - ifname = wlan_util_vdev_get_if_name(vdev); if (!ifname) { cfg80211_err("ifname is null"); @@ -1695,22 +1671,12 @@ static inline uint32_t osif_ndp_get_ndp_end_ind_len( static void os_if_ndp_end_ind_handler(struct wlan_objmgr_vdev *vdev, struct nan_datapath_end_indication_event *end_ind) { - QDF_STATUS status; uint32_t data_len, i; - struct nan_callbacks cb_obj; uint32_t *ndp_instance_array; struct sk_buff *vendor_event; - struct wlan_objmgr_vdev *vdev_itr; - struct wlan_objmgr_psoc *psoc = wlan_vdev_get_psoc(vdev); struct wlan_objmgr_pdev *pdev = wlan_vdev_get_pdev(vdev); struct pdev_osif_priv *os_priv = wlan_pdev_get_ospriv(pdev); - status = ucfg_nan_get_callbacks(psoc, &cb_obj); - if (QDF_IS_STATUS_ERROR(status)) { - cfg80211_err("failed to get callbacks"); - return; - } - if (!end_ind) { cfg80211_err("Invalid ndp end indication"); return; @@ -1722,33 +1688,8 @@ static void os_if_ndp_end_ind_handler(struct wlan_objmgr_vdev *vdev, cfg80211_err("Failed to allocate ndp_instance_array"); return; } - for (i = 0; i < end_ind->num_ndp_ids; i++) { - int idx = 0; - + for (i = 0; i < end_ind->num_ndp_ids; i++) ndp_instance_array[i] = end_ind->ndp_map[i].ndp_instance_id; - vdev_itr = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, - end_ind->ndp_map[i].vdev_id, WLAN_NAN_ID); - - if (vdev_itr == NULL) { - cfg80211_err("vdev not found for vdev_id: %d", - end_ind->ndp_map[i].vdev_id); - continue; - } - - idx = cb_obj.get_peer_idx(wlan_vdev_get_id(vdev_itr), - &end_ind->ndp_map[i].peer_ndi_mac_addr); - if (idx < 0) { - cfg80211_err("can't find addr: %pM in sta_ctx.", - &end_ind->ndp_map[i].peer_ndi_mac_addr); - wlan_objmgr_vdev_release_ref(vdev_itr, WLAN_NAN_ID); - continue; - } - /* save the value of active sessions on each peer */ - ucfg_nan_set_active_ndp_sessions(vdev_itr, - end_ind->ndp_map[i].num_active_ndp_sessions, - idx); - wlan_objmgr_vdev_release_ref(vdev_itr, WLAN_NAN_ID); - } data_len = osif_ndp_get_ndp_end_ind_len(end_ind); vendor_event = cfg80211_vendor_event_alloc(os_priv->wiphy, NULL,