qcacld-3.0: Add chipset stats API to send data to middleware

Add chipset stats API to send data to middleware

Change-Id: I391f0a1ba72f4b00b0aadc0954abda728c843d1b
CRs-Fixed: 3784971
This commit is contained in:
Prasanna JS
2024-04-10 10:36:17 -07:00
committed by Ravindra Konda
부모 8a00cb7777
커밋 3f61d333b0
3개의 변경된 파일114개의 추가작업 그리고 0개의 파일을 삭제

파일 보기

@@ -19572,6 +19572,8 @@ static QDF_STATUS hdd_component_init(void)
if (QDF_IS_STATUS_ERROR(status)) if (QDF_IS_STATUS_ERROR(status))
goto afc_deinit; goto afc_deinit;
hdd_register_cstats_ops();
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
afc_deinit: afc_deinit:

파일 보기

@@ -49,6 +49,15 @@
#include "wlan_hdd_eht.h" #include "wlan_hdd_eht.h"
#include "wlan_dp_ucfg_api.h" #include "wlan_dp_ucfg_api.h"
#include "wlan_cm_roam_ucfg_api.h" #include "wlan_cm_roam_ucfg_api.h"
#include <wlan_cp_stats_chipset_stats.h>
#include <wlan_cp_stats_ucfg_api.h>
#ifdef CNSS_GENL
#ifdef CONFIG_CNSS_OUT_OF_TREE
#include "cnss_nl.h"
#else
#include <net/cnss_nl.h>
#endif
#endif
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)) && !defined(WITH_BACKPORTS) #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)) && !defined(WITH_BACKPORTS)
#define HDD_INFO_SIGNAL STATION_INFO_SIGNAL #define HDD_INFO_SIGNAL STATION_INFO_SIGNAL
@@ -11549,3 +11558,73 @@ QDF_STATUS hdd_tx_latency_register_cb(void *soc)
hdd_tx_latency_stats_cb); hdd_tx_latency_stats_cb);
} }
#endif #endif
#ifdef WLAN_CHIPSET_STATS
#ifdef CNSS_GENL
static int nl_srv_bcast_cstats(struct sk_buff *skb)
{
return nl_srv_bcast(skb, CLD80211_MCGRP_HOST_LOGS, ANI_NL_MSG_LOG);
}
#else
static int nl_srv_bcast_cstats(struct sk_buff *skb)
{
return nl_srv_bcast(skb);
}
#endif
int hdd_cstats_send_data_to_userspace(char *buff, unsigned int len,
enum cstats_types type)
{
struct sk_buff *skb = NULL;
struct nlmsghdr *nlh;
tAniNlHdr *wnl;
static int nlmsg_seq;
int tot_msg_len;
int ret = -1;
if (type == CSTATS_HOST_TYPE) {
*(unsigned short *)(buff) = ANI_NL_MSG_CSTATS_HOST_LOG_TYPE;
*(unsigned short *)(buff + 2) = len - sizeof(tAniHdr);
} else if (type == CSTATS_FW_TYPE) {
*(unsigned short *)(buff) = ANI_NL_MSG_CSTATS_FW_LOG_TYPE;
*(unsigned short *)(buff + 2) = len - sizeof(tAniHdr);
}
skb = dev_alloc_skb(MAX_CSTATS_NODE_LENGTH);
if (!skb) {
qdf_err("dev_alloc_skb() failed");
return -ENOMEM;
}
tot_msg_len = NLMSG_SPACE(len + sizeof(wnl->radio));
nlh = nlmsg_put(skb, 0, nlmsg_seq++,
ANI_NL_MSG_LOG,
len + sizeof(wnl->radio), NLM_F_REQUEST);
if (!nlh) {
qdf_err("nlmsg_put() failed for msg size[%d]", tot_msg_len);
dev_kfree_skb(skb);
return -EINVAL;
}
wnl = (tAniNlHdr *)nlh;
wnl->radio = 0;
memcpy(nlmsg_data(nlh) + sizeof(wnl->radio), buff, len);
ret = nl_srv_bcast_cstats(skb);
if (ret < 0)
qdf_err("Send Failed %d", ret);
return ret;
}
struct cstats_tx_rx_ops cstats_ops = {
.cstats_send_data_to_usr = hdd_cstats_send_data_to_userspace,
};
void hdd_register_cstats_ops(void)
{
ucfg_cp_stats_cstats_register_tx_rx_ops(&cstats_ops);
}
#endif

파일 보기

@@ -31,6 +31,7 @@
#ifdef WLAN_FEATURE_11BE_MLO #ifdef WLAN_FEATURE_11BE_MLO
#include "wlan_mlo_mgr_cmn.h" #include "wlan_mlo_mgr_cmn.h"
#endif #endif
#include <wlan_cp_stats_chipset_stats.h>
#define INVALID_MCS_IDX 255 #define INVALID_MCS_IDX 255
@@ -808,4 +809,36 @@ hdd_tx_latency_record_ingress_ts(struct hdd_adapter *adapter,
#define FEATURE_TX_LATENCY_STATS_COMMANDS #define FEATURE_TX_LATENCY_STATS_COMMANDS
#define FEATURE_TX_LATENCY_STATS_EVENTS #define FEATURE_TX_LATENCY_STATS_EVENTS
#endif #endif
#ifdef WLAN_CHIPSET_STATS
/**
* hdd_cstats_send_data_to_userspace() - Send chipsset stats to userspace
*
* @buff: Buffer to be sent
* @len: length of the buffer
* @type: Chipset stats type
*
* Return: 0 on success -ve value on error
*/
int hdd_cstats_send_data_to_userspace(char *buff, unsigned int len,
enum cstats_types type);
/**
* hdd_register_cstats_ops() - Register chipset stats ops
*
* Return: void
*/
void hdd_register_cstats_ops(void);
#else
static inline void hdd_register_cstats_ops(void)
{
}
static inline int
hdd_cstats_send_data_to_userspace(char *buff, unsigned int len,
enum cstats_types type)
{
return 0;
}
#endif
#endif /* end #if !defined(WLAN_HDD_STATS_H) */ #endif /* end #if !defined(WLAN_HDD_STATS_H) */