qcacld-3.0: Add chipset stats for NAN operations

Add chipset stats for NAN operations

Change-Id: Iced9198240eed0bcddead32977b160cd8aeeedf8
CRs-Fixed: 3783059
This commit is contained in:
Prasanna JS
2024-04-03 11:42:18 -07:00
gecommit door Ravindra Konda
bovenliggende 7643b9b9f7
commit 019b2fff7f
8 gewijzigde bestanden met toevoegingen van 766 en 8 verwijderingen

Bestand weergeven

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2024 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
@@ -27,6 +27,8 @@
#include "wlan_objmgr_peer_obj.h"
#include "wlan_policy_mgr_public_struct.h"
#include "qdf_status.h"
#include <nan_public_structs.h>
#include <wlan_cp_stats_chipset_stats.h>
#ifdef WLAN_FEATURE_NAN
@@ -317,4 +319,40 @@ wlan_is_mlo_sta_nan_ndi_allowed(struct wlan_objmgr_psoc *psoc)
return false;
}
#endif
#if defined(WLAN_FEATURE_NAN) && defined(WLAN_CHIPSET_STATS)
/**
* nan_cstats_log_nan_enable_resp_evt() - Chipset stats NAN enable
* response event
*
* @nan_event: pointer to nan_event_params object
*
* Return: void
*/
void nan_cstats_log_nan_enable_resp_evt(struct nan_event_params *nan_event);
/**
* nan_cstats_log_nan_disable_resp_evt() - Chipset stats NAN disable
* response event
*
* @vdev_id: vdev ID
* @psoc: pointer to psoc object
*
* Return: void
*/
void
nan_cstats_log_nan_disable_resp_evt(uint8_t vdev_id,
struct wlan_objmgr_psoc *psoc);
#else
static inline void
nan_cstats_log_nan_enable_resp_evt(struct nan_event_params *nan_event)
{
}
static inline void
nan_cstats_log_nan_disable_resp_evt(uint8_t vdev_id,
struct wlan_objmgr_psoc *psoc)
{
}
#endif /* WLAN_FEATURE_NAN && WLAN_CHIPSET_STATS */
#endif /* _WLAN_NAN_API_H_ */

Bestand weergeven

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2024 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
@@ -487,3 +487,57 @@ bool wlan_is_mlo_sta_nan_ndi_allowed(struct wlan_objmgr_psoc *psoc)
return psoc_nan_obj->nan_caps.mlo_sta_nan_ndi_allowed;
}
#endif
#if defined(WLAN_FEATURE_NAN) && defined(WLAN_CHIPSET_STATS)
void nan_cstats_log_nan_enable_resp_evt(struct nan_event_params *nan_event)
{
struct cstats_nan_disc_enable_resp stat = {0};
struct wlan_objmgr_vdev *vdev;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(nan_event->psoc,
nan_event->vdev_id,
WLAN_NAN_ID);
if (!vdev) {
nan_err("Invalid vdev!");
return;
}
stat.cmn.hdr.evt_id =
WLAN_CHIPSET_STATS_NAN_DISCOVERY_ENABLE_RESP_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_disc_enable_resp) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.is_enable_success = nan_event->is_nan_enable_success;
stat.mac_id = nan_event->mac_id;
stat.disc_state = nan_get_discovery_state(nan_event->psoc);
wlan_objmgr_vdev_release_ref(vdev, WLAN_NAN_ID);
wlan_cstats_host_stats(sizeof(struct cstats_nan_disc_enable_resp),
&stat);
}
void nan_cstats_log_nan_disable_resp_evt(uint8_t vdev_id,
struct wlan_objmgr_psoc *psoc)
{
struct cstats_nan_disc_disable_resp stat = {0};
stat.cmn.hdr.evt_id =
WLAN_CHIPSET_STATS_NAN_DISCOVERY_DISABLE_RESP_EVENT_ID;
stat.cmn.hdr.length =
sizeof(struct cstats_nan_disc_disable_resp) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = QDF_NAN_DISC_MODE;
stat.cmn.vdev_id = vdev_id;
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.disc_state = nan_get_discovery_state(psoc);
wlan_cstats_host_stats(sizeof(struct cstats_nan_disc_disable_resp),
&stat);
}
#endif /* WLAN_CHIPSET_STATS */

Bestand weergeven

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2024 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
@@ -899,6 +899,8 @@ static QDF_STATUS nan_handle_enable_rsp(struct nan_event_params *nan_event)
/* NAN Enable has failed, restore changes */
goto fail;
}
nan_cstats_log_nan_enable_resp_evt(nan_event);
fail:
psoc_nan_obj->nan_social_ch_2g_freq = 0;
psoc_nan_obj->nan_social_ch_5g_freq = 0;
@@ -957,6 +959,7 @@ QDF_STATUS nan_disable_cleanup(struct wlan_objmgr_psoc *psoc)
nan_handle_emlsr_concurrency(psoc, false);
policy_mgr_nan_sap_post_disable_conc_check(psoc);
nan_cstats_log_nan_disable_resp_evt(vdev_id, psoc);
} else {
/* Should not happen, NAN state can always be disabled */
nan_err("Cannot set NAN state to disabled!");

Bestand weergeven

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2024 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
@@ -46,6 +46,7 @@
#include "wlan_fwol_ucfg_api.h"
#include "wlan_dp_ucfg_api.h"
#include "wlan_hdd_sysfs.h"
#include "wlan_hdd_stats.h"
/**
* hdd_nan_datapath_target_config() - Configure NAN datapath features
@@ -848,6 +849,8 @@ int hdd_ndi_start(const char *iface_name, uint16_t transaction_id)
ret = -EINVAL;
goto err_handler;
}
hdd_cstats_log_ndi_create_req_evt(vdev, transaction_id);
/*
* Create transaction id is required to be saved since the firmware
* does not honor the transaction id for create request
@@ -938,7 +941,9 @@ int hdd_ndi_delete(uint8_t vdev_id, const char *iface_name,
os_if_nan_set_ndp_delete_transaction_id(vdev, transaction_id);
os_if_nan_set_ndi_state(vdev, NAN_DATA_NDI_DELETING_STATE);
hdd_cstats_log_ndi_delete_req_evt(vdev, transaction_id);
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_NAN_ID);
/* Delete the interface */
adapter->is_virtual_iface = true;
ret = hdd_delete_ndi_intf(hdd_ctx->wiphy, &adapter->wdev);
@@ -1039,6 +1044,8 @@ hdd_ndi_drv_ndi_create_rsp_handler(uint8_t vdev_id,
ndi_rsp->reason /* create_reason */);
}
hdd_cstats_log_ndi_create_resp_evt(link_info, ndi_rsp);
hdd_save_peer(sta_ctx, &bc_mac_addr);
qdf_copy_macaddr(&roam_info->bssid, &bc_mac_addr);
hdd_roam_register_sta(link_info,

Bestand weergeven

@@ -58,6 +58,7 @@
#include <net/cnss_nl.h>
#endif
#endif
#include "wlan_nan_api.h"
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)) && !defined(WITH_BACKPORTS)
#define HDD_INFO_SIGNAL STATION_INFO_SIGNAL
@@ -11627,4 +11628,77 @@ void hdd_register_cstats_ops(void)
{
ucfg_cp_stats_cstats_register_tx_rx_ops(&cstats_ops);
}
#endif
void
hdd_cstats_log_ndi_delete_req_evt(struct wlan_objmgr_vdev *vdev,
uint16_t transaction_id)
{
struct cstats_nan_ndi_delete_req stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDI_DELETE_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndi_delete_req) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.transaction_id = transaction_id;
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndi_delete_req), &stat);
}
void
hdd_cstats_log_ndi_create_resp_evt(struct wlan_hdd_link_info *li,
struct nan_datapath_inf_create_rsp *ndi_rsp)
{
struct cstats_nan_ndi_create_resp stat = {0};
struct wlan_objmgr_vdev *vdev;
struct nan_vdev_priv_obj *priv_obj;
vdev = hdd_objmgr_get_vdev_by_user(li, WLAN_OSIF_NAN_ID);
if (!vdev) {
hdd_err("vdev is NULL");
return;
}
priv_obj = nan_get_vdev_priv_obj(vdev);
if (!priv_obj) {
hdd_err("priv_obj is null")
return;
}
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDI_CREATE_RESP_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndi_create_resp) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.status = ndi_rsp->status;
stat.reason = ndi_rsp->reason;
qdf_spin_lock_bh(&priv_obj->lock);
stat.transaction_id = priv_obj->ndp_create_transaction_id;
qdf_spin_unlock_bh(&priv_obj->lock);
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_NAN_ID);
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndi_create_resp),
&stat);
}
void hdd_cstats_log_ndi_create_req_evt(struct wlan_objmgr_vdev *vdev,
uint16_t transaction_id)
{
struct cstats_nan_ndi_create_req stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDI_CREATE_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndi_create_req) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.transaction_id = transaction_id;
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndi_create_req), &stat);
}
#endif /* WLAN_CHIPSET_STATS */

Bestand weergeven

@@ -829,6 +829,41 @@ int hdd_cstats_send_data_to_userspace(char *buff, unsigned int len,
* Return: void
*/
void hdd_register_cstats_ops(void);
/**
* hdd_cstats_log_ndi_delete_req_evt() - Chipset stats for ndi delete
*
* @vdev: pointer to vdev object
* @transaction_id: transaction ID
*
* Return : void
*/
void hdd_cstats_log_ndi_delete_req_evt(struct wlan_objmgr_vdev *vdev,
uint16_t transaction_id);
/**
* hdd_cstats_log_ndi_create_resp_evt() - Chipset stats for ndi create
* response
* @li: pointer link_info object
* @ndi_rsp: pointer to nan_datapath_inf_create_rsp object
*
* Return : void
*/
void
hdd_cstats_log_ndi_create_resp_evt(struct wlan_hdd_link_info *li,
struct nan_datapath_inf_create_rsp *ndi_rsp);
/**
* hdd_cstats_log_ndi_create_req_evt() - Chipset stats for ndi create
* request
*
* @vdev: pointer vdve object
* @transaction_id : Transaction ID
*
* Return : void
*/
void hdd_cstats_log_ndi_create_req_evt(struct wlan_objmgr_vdev *vdev,
uint16_t transaction_id);
#else
static inline void hdd_register_cstats_ops(void)
{
@@ -840,5 +875,23 @@ hdd_cstats_send_data_to_userspace(char *buff, unsigned int len,
{
return 0;
}
#endif
static inline void
hdd_cstats_log_ndi_delete_req_evt(struct wlan_objmgr_vdev *vdev,
uint16_t transaction_id)
{
}
static inline void
hdd_cstats_log_ndi_create_resp_evt(struct wlan_hdd_link_info *li,
struct nan_datapath_inf_create_rsp *ndi_rsp)
{
}
static inline void
hdd_cstats_log_ndi_create_req_evt(struct wlan_objmgr_vdev *vdev,
uint16_t transaction_id)
{
}
#endif /* WLAN_CHIPSET_STATS */
#endif /* end #if !defined(WLAN_HDD_STATS_H) */

Bestand weergeven

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022,2024 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
@@ -29,6 +29,7 @@
#include "nan_public_structs.h"
#include "nan_ucfg_api.h"
#include "qca_vendor.h"
#include <wlan_cp_stats_chipset_stats.h>
/* QCA_NL80211_VENDOR_SUBCMD_NAN_EXT policy */
extern const struct nla_policy nan_attr_policy[
@@ -184,4 +185,224 @@ static inline void os_if_nan_post_ndi_delete_rsp(struct wlan_objmgr_psoc *psoc,
#endif /* WLAN_FEATURE_NAN */
#if defined(WLAN_FEATURE_NAN) && defined(WLAN_CHIPSET_STATS)
/**
* os_if_cstats_log_ndp_initiator_req_evt() - Chipset stats for ndp
* initiator request
*
* @req : pointer to nan_datapath_initiator_req
*
* Return : void
*/
void
os_if_cstats_log_ndp_initiator_req_evt(struct nan_datapath_initiator_req *req);
/**
* os_if_cstats_log_ndp_responder_req_evt() - Chipset stats for ndp
* responder request
*
* @vdev : pointer to vdev object
* @req : pointer to nan_datapath_responder_req
*
* Return : void
*/
void
os_if_cstats_log_ndp_responder_req_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_responder_req *req);
/**
* os_if_cstats_log_ndp_end_req_evt() - Chipset stats for ndp end
* request event
*
* @vdev : pointer to vdev object
* @rq : pointer to nan_datapath_end_req
*
* Return : void
*/
void os_if_cstats_log_ndp_end_req_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_end_req *rq);
/**
* os_if_cstats_log_ndp_initiator_resp_evt() - Chipset stats for ndp
* initiator request event
*
* @vdev : pointer to vdev object
* @rsp : pointer to nan_datapath_end_req
*
* Return : void
*/
void
os_if_cstats_log_ndp_initiator_resp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_initiator_rsp *rsp);
/**
* os_if_cstats_log_ndp_responder_resp_evt() - Chipset stats for ndp
* responder response event
*
* @vdev : pointer to vdev object
* @rsp : pointer to nan_datapath_responder_rsp
*
* Return : void
*/
void
os_if_cstats_log_ndp_responder_resp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_responder_rsp *rsp);
/**
* os_if_cstats_log_ndp_indication_evt() - Chipset stats for ndp
* indication event
*
* @vdev : pointer to vdev object
* @evt : pointer to nan_datapath_indication_event object
*
* Return : void
*/
void
os_if_cstats_log_ndp_indication_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_indication_event *evt);
/**
* os_if_cstats_log_ndp_confirm_evt() - Chipset stats for ndp
* confirm event
*
* @vdev : pointer to vdev object
* @nc : pointer to nan_datapath_confirm_event
*
* Return : void
*/
void os_if_cstats_log_ndp_confirm_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_confirm_event *nc);
/**
* os_if_cstats_log_ndp_end_rsp_evt() - Chipset stats for ndp
* end response event
*
* @vdev : pointer to vdev object
* @rsp : pointer to nan_datapath_end_rsp_event object
*
* Return : void
*/
void os_if_cstats_log_ndp_end_rsp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_end_rsp_event *rsp);
/**
* os_if_cstats_log_ndp_new_peer_evt() - Chipset stats for ndp
* new peer event
*
* @vdev : pointer to vdev object
* @peer_ind : pointer to nan_datapath_peer_ind object
*
* Return : void
*/
void os_if_cstats_log_ndp_new_peer_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_peer_ind *peer_ind);
/**
* os_if_cstats_log_ndi_delete_resp_evt() - Chipset stats for ndi
* delete response event
*
* @vdev : pointer to vdev object
* @rsp : pointer to nan_datapath_inf_delete_rsp object
*
* Return : void
*/
void
os_if_cstats_log_ndi_delete_resp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_inf_delete_rsp *rsp);
/**
* os_if_cstats_log_nan_disc_enable_req_evt() - Chipset stats for nan
* discovery enable request
*
* @vdev_id : pointer to vdev object
* @nan_req : pointer to nan_enable_req object
*
* Return : void
*/
void os_if_cstats_log_nan_disc_enable_req_evt(uint8_t vdev_id,
struct nan_enable_req *nan_req);
/**
* os_if_cstats_log_disable_nan_disc_evt() - Chipset stats for nan
* discovery disable event
*
* @pdev : pointer to pdev object
* @vdev_id : vdev ID
*
* Return : void
*/
void os_if_cstats_log_disable_nan_disc_evt(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
#else
static inline void
os_if_cstats_log_ndp_initiator_req_evt(struct nan_datapath_initiator_req *req)
{
}
static inline void
os_if_cstats_log_ndp_responder_req_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_responder_req *req)
{
}
static inline void
os_if_cstats_log_ndp_end_req_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_end_req *rq)
{
}
static inline void
os_if_cstats_log_ndp_initiator_resp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_initiator_rsp *rsp)
{
}
static inline void
os_if_cstats_log_ndp_responder_resp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_responder_rsp *rsp)
{
}
static inline void
os_if_cstats_log_ndp_indication_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_indication_event *event)
{
}
static inline void
os_if_cstats_log_ndp_confirm_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_confirm_event *nc)
{
}
static inline void
os_if_cstats_log_ndp_end_rsp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_end_rsp_event *rsp)
{
}
static inline void
os_if_cstats_log_ndp_new_peer_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_peer_ind *peer_ind)
{
}
static inline void
os_if_cstats_log_ndi_delete_resp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_inf_delete_rsp *rsp)
{
}
static inline void
os_if_cstats_log_nan_disc_enable_req_evt(uint8_t vdev_id,
struct nan_enable_req *nan_req)
{
}
static inline void
os_if_cstats_log_disable_nan_disc_evt(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id)
{
}
#endif /* WLAN_CHIPSET_STATS */
#endif

Bestand weergeven

@@ -1,6 +1,6 @@
/*
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2024 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
@@ -833,6 +833,9 @@ static int __os_if_nan_process_ndp_initiator_req(struct wlan_objmgr_psoc *psoc,
}
req.vdev = nan_vdev;
os_if_cstats_log_ndp_initiator_req_evt(&req);
status = ucfg_nan_req_processor(nan_vdev, &req, NDP_INITIATOR_REQ);
ret = qdf_status_to_os_return(status);
initiator_req_failed:
@@ -1023,6 +1026,8 @@ static int __os_if_nan_process_ndp_responder_req(struct wlan_objmgr_psoc *psoc,
goto responder_req_failed;
}
os_if_cstats_log_ndp_responder_req_evt(nan_vdev, &req);
osif_debug("vdev_id: %d, transaction_id: %d, ndp_rsp %d, ndp_instance_id: %d, ndp_app_info_len: %d, csid: %d",
wlan_vdev_get_id(nan_vdev), req.transaction_id, req.ndp_rsp,
req.ndp_instance_id, req.ndp_info.ndp_app_info_len,
@@ -1110,6 +1115,9 @@ static int __os_if_nan_process_ndp_end_req(struct wlan_objmgr_psoc *psoc,
}
req.vdev = nan_vdev;
os_if_cstats_log_ndp_end_req_evt(nan_vdev, &req);
status = ucfg_nan_req_processor(nan_vdev, &req, NDP_END_REQ);
ret = qdf_status_to_os_return(status);
if (ret)
@@ -1309,6 +1317,8 @@ static void os_if_ndp_initiator_rsp_handler(struct wlan_objmgr_vdev *vdev,
rsp->reason))
goto ndp_initiator_rsp_nla_failed;
os_if_cstats_log_ndp_initiator_resp_evt(vdev, rsp);
osif_debug("NDP Initiator rsp sent, tid:%d, instance id:%d, status:%d, reason: %d",
rsp->transaction_id, rsp->ndp_instance_id, rsp->status,
rsp->reason);
@@ -1391,6 +1401,8 @@ static void os_if_ndp_responder_rsp_handler(struct wlan_objmgr_vdev *vdev,
rsp->reason))
goto ndp_responder_rsp_nla_failed;
os_if_cstats_log_ndp_responder_resp_evt(vdev, rsp);
wlan_cfg80211_vendor_event(vendor_event, GFP_ATOMIC);
return;
ndp_responder_rsp_nla_failed:
@@ -1599,6 +1611,8 @@ static void os_if_ndp_indication_handler(struct wlan_objmgr_vdev *vdev,
goto ndp_indication_nla_failed;
}
os_if_cstats_log_ndp_indication_evt(vdev, event);
wlan_cfg80211_vendor_event(vendor_event, GFP_ATOMIC);
return;
ndp_indication_nla_failed:
@@ -1807,6 +1821,9 @@ os_if_ndp_confirm_ind_handler(struct wlan_objmgr_vdev *vdev,
goto ndp_confirm_nla_failed;
wlan_cfg80211_vendor_event(vendor_event, GFP_ATOMIC);
os_if_cstats_log_ndp_confirm_evt(vdev, ndp_confirm);
osif_debug("NDP confim sent, ndp instance id: %d, peer addr: "QDF_MAC_ADDR_FMT" rsp_code: %d, reason_code: %d",
ndp_confirm->ndp_instance_id,
QDF_MAC_ADDR_REF(ndp_confirm->peer_ndi_mac_addr.bytes),
@@ -1889,6 +1906,8 @@ static void os_if_ndp_end_rsp_handler(struct wlan_objmgr_vdev *vdev,
rsp->transaction_id))
goto ndp_end_rsp_nla_failed;
os_if_cstats_log_ndp_end_rsp_evt(vdev, rsp);
osif_debug("NDP End rsp sent, transaction id: %u, status: %u, reason: %u",
rsp->transaction_id, rsp->status, rsp->reason);
wlan_cfg80211_vendor_event(vendor_event, GFP_ATOMIC);
@@ -2006,6 +2025,8 @@ static void os_if_new_peer_ind_handler(struct wlan_objmgr_vdev *vdev,
return;
}
os_if_cstats_log_ndp_new_peer_evt(vdev, peer_ind);
osif_debug("vdev_id: %d, peer_mac: "QDF_MAC_ADDR_FMT,
vdev_id, QDF_MAC_ADDR_REF(peer_ind->peer_mac_addr.bytes));
ret = cb_obj.new_peer_ind(vdev_id, peer_ind->sta_id,
@@ -2254,6 +2275,8 @@ static void os_if_ndp_iface_delete_rsp_handler(struct wlan_objmgr_psoc *psoc,
osif_debug("NDI BSS stop failed with reason %d",
ndi_rsp->reason);
os_if_cstats_log_ndi_delete_resp_evt(vdev, ndi_rsp);
ucfg_nan_set_ndi_delete_rsp_reason(vdev, ndi_rsp->reason);
ucfg_nan_set_ndi_delete_rsp_status(vdev, ndi_rsp->status);
cb_obj.drv_ndi_delete_rsp_handler(vdev_id);
@@ -2896,9 +2919,294 @@ int os_if_process_nan_req(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
case QCA_WLAN_NAN_EXT_SUBCMD_TYPE_ENABLE_REQ:
return os_if_process_nan_enable_req(pdev, tb, vdev_id);
case QCA_WLAN_NAN_EXT_SUBCMD_TYPE_DISABLE_REQ:
os_if_cstats_log_disable_nan_disc_evt(pdev, vdev_id);
return os_if_process_nan_disable_req(psoc, tb);
default:
osif_err("Unrecognized NAN subcmd type(%d)", nan_subcmd);
return -EINVAL;
}
}
#ifdef WLAN_CHIPSET_STATS
void
os_if_cstats_log_ndp_initiator_req_evt(struct nan_datapath_initiator_req *req)
{
struct cstats_nan_ndp_initiator_req stat = {0};
struct wlan_objmgr_vdev *vdev;
vdev = req->vdev;
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDP_INITIATOR_REQ_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndp_initiator_req) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.transaction_id = req->transaction_id;
stat.channel = req->channel;
stat.channel_cfg = req->channel_cfg;
stat.service_instance_id = req->service_instance_id;
CSTATS_MAC_COPY(stat.self_ndi_mac_addr, req->self_ndi_mac_addr.bytes);
CSTATS_MAC_COPY(stat.peer_discovery_mac_addr,
req->peer_discovery_mac_addr.bytes);
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndp_initiator_req),
&stat);
}
void
os_if_cstats_log_ndp_responder_req_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_responder_req *req)
{
struct cstats_nan_ndp_responder_req stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDP_RESPONDER_REQ_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndp_responder_req) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.transaction_id = req->transaction_id;
stat.ndp_instance_id = req->ndp_instance_id;
stat.ndp_rsp = req->ndp_rsp;
stat.ncs_sk_type = req->ncs_sk_type;
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndp_responder_req),
&stat);
}
void os_if_cstats_log_ndp_end_req_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_end_req *rq)
{
struct cstats_nan_ndp_end_req stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDP_END_REQ_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndp_end_req) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.transaction_id = rq->transaction_id;
stat.num_ndp_instances = rq->num_ndp_instances;
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndp_end_req), &stat);
}
void
os_if_cstats_log_ndp_initiator_resp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_initiator_rsp *rsp)
{
struct cstats_nan_ndp_initiator_resp stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDP_INITIATOR_RSP_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndp_initiator_resp) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.status = rsp->status;
stat.reason = rsp->reason;
stat.transaction_id = rsp->transaction_id;
stat.service_instance_id = rsp->ndp_instance_id;
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndp_initiator_resp),
&stat);
}
void
os_if_cstats_log_ndp_responder_resp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_responder_rsp *rsp)
{
struct cstats_nan_ndp_responder_resp stat = {0};
stat.cmn.hdr.evt_id =
WLAN_CHIPSET_STATS_NAN_NDP_RESPONDER_RESP_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_tdls_disc_req) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.status = rsp->status;
stat.reason = rsp->reason;
stat.transaction_id = rsp->transaction_id;
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndp_responder_resp),
&stat);
}
void
os_if_cstats_log_ndp_indication_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_indication_event *evt)
{
struct cstats_nan_ndp_ind stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDP_INDICATION_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndp_ind) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.ndp_instance_id = evt->ndp_instance_id;
stat.service_instance_id = evt->service_instance_id;
CSTATS_MAC_COPY(stat.peer_mac, evt->peer_mac_addr.bytes);
CSTATS_MAC_COPY(stat.peer_discovery_mac_addr,
evt->peer_discovery_mac_addr.bytes);
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndp_ind), &stat);
}
void
os_if_cstats_log_ndp_confirm_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_confirm_event *nc)
{
struct cstats_nan_ndp_confirm_ind stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDP_CONFIRM_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndp_confirm_ind) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.instance_id = nc->ndp_instance_id;
stat.rsp_code = nc->rsp_code;
stat.reason_code = nc->reason_code;
CSTATS_MAC_COPY(stat.peer_addr, nc->peer_ndi_mac_addr.bytes);
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndp_confirm_ind),
&stat);
}
void
os_if_cstats_log_ndp_end_rsp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_end_rsp_event *rsp)
{
struct cstats_nan_ndp_end_resp stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDP_END_RESP_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndp_end_resp) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.status = rsp->status;
stat.reason = rsp->reason;
stat.transaction_id = rsp->transaction_id;
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndp_end_resp), &stat);
}
void
os_if_cstats_log_ndp_new_peer_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_peer_ind *peer_ind)
{
struct cstats_nan_ndp_new_peer_ind stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDP_NEW_PEER_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndp_new_peer_ind) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.sta_id = peer_ind->sta_id;
CSTATS_MAC_COPY(stat.peer_mac, peer_ind->peer_mac_addr.bytes);
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndp_new_peer_ind),
&stat);
}
void
os_if_cstats_log_ndi_delete_resp_evt(struct wlan_objmgr_vdev *vdev,
struct nan_datapath_inf_delete_rsp *rsp)
{
struct cstats_nan_ndi_delete_resp stat = {0};
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_NAN_NDI_DELETE_RESP_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_ndi_delete_resp) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.status = rsp->status;
stat.reason = rsp->reason;
stat.transaction_id = ucfg_nan_get_ndp_delete_transaction_id(vdev);
wlan_cstats_host_stats(sizeof(struct cstats_nan_ndi_delete_resp),
&stat);
}
void os_if_cstats_log_nan_disc_enable_req_evt(uint8_t vdev_id,
struct nan_enable_req *nan_req)
{
struct cstats_nan_disc_enable stat = {0};
struct wlan_objmgr_vdev *vdev;
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(nan_req->pdev,
vdev_id, WLAN_NAN_ID);
if (!vdev) {
osif_err("vdev is null");
return;
}
stat.cmn.hdr.evt_id =
WLAN_CHIPSET_STATS_NAN_DISCOVERY_ENABLE_REQ_EVENT_ID;
stat.cmn.hdr.length =
sizeof(struct cstats_nan_disc_enable) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.social_chan_2g_freq = nan_req->social_chan_2g_freq;
stat.social_chan_5g_freq = nan_req->social_chan_5g_freq;
stat.rtt_cap = nan_req->params.rtt_cap;
stat.disable_6g_nan = nan_req->params.disable_6g_nan;
wlan_objmgr_vdev_release_ref(vdev, WLAN_NAN_ID);
wlan_cstats_host_stats(sizeof(struct cstats_nan_disc_enable), &stat);
}
void
os_if_cstats_log_disable_nan_disc_evt(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id)
{
struct cstats_nan_disc_disable_req stat = {0};
struct wlan_objmgr_vdev *vdev = NULL;
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id, WLAN_NAN_ID);
if (!vdev) {
osif_err("vdev is null");
return;
}
stat.cmn.hdr.evt_id =
WLAN_CHIPSET_STATS_NAN_DISCOVERY_DISABLE_REQ_EVENT_ID;
stat.cmn.hdr.length = sizeof(struct cstats_nan_disc_disable_req) -
sizeof(struct cstats_hdr);
stat.cmn.opmode = wlan_vdev_mlme_get_opmode(vdev);
stat.cmn.vdev_id = wlan_vdev_get_id(vdev);
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
stat.cmn.time_tick = qdf_get_log_timestamp();
stat.disable_2g_discovery = 1;
stat.disable_5g_discovery = 1;
wlan_objmgr_vdev_release_ref(vdev, WLAN_NAN_ID);
wlan_cstats_host_stats(sizeof(struct cstats_nan_disc_disable_req),
&stat);
}
#endif /* WLAN_CHIPSET_STATS */