qcacld-3.0: add build flag for network package timestamping

Network package timestamping is optional for TSF feature,
to make it configurable, add a new build flag
WLAN_FEATURE_TSF_PLUS_SOCK_TS.
This flag will be set only when CONFIG_WLAN_SYNC_TSF_PLUS
is enabled and CONFIG_WLAN_SYNC_TSF_PLUS_DISABLE_SOCK_TS
is not.

Change-Id: I413e85fadf93264cd41c2739b6d870aa08d60efb
CRs-Fixed: 3027378
此提交包含在:
Yu Wang
2021-09-01 16:17:59 +08:00
提交者 Madan Koyyalamudi
父節點 cfeefec851
當前提交 a4791d8279
共有 10 個檔案被更改,包括 140 行新增128 行删除

11
Kbuild
查看文件

@@ -3484,7 +3484,16 @@ cppflags-$(CONFIG_LINUX_QCMBR) += -DLINUX_QCMBR
# Enable feature sync tsf between multi devices
cppflags-$(CONFIG_WLAN_SYNC_TSF) += -DWLAN_FEATURE_TSF
cppflags-$(CONFIG_WLAN_SYNC_TSF_PLUS) += -DWLAN_FEATURE_TSF_PLUS
ifeq ($(CONFIG_WLAN_SYNC_TSF_PLUS), y)
cppflags-y += -DWLAN_FEATURE_TSF_PLUS
ifneq ($(CONFIG_WLAN_SYNC_TSF_PLUS_DISABLE_SOCK_TS), y)
cppflags-y += -DWLAN_FEATURE_TSF_PLUS_SOCK_TS
endif
endif
# Enable feature sync tsf for chips based on Adrastea arch
cppflags-$(CONFIG_WLAN_SYNC_TSF_PLUS_NOIRQ) += -DWLAN_FEATURE_TSF_PLUS_NOIRQ

查看文件

@@ -456,7 +456,7 @@ void cds_get_and_reset_log_completion(uint32_t *is_fatal,
bool cds_is_log_report_in_progress(void);
bool cds_is_fatal_event_enabled(void);
#ifdef WLAN_FEATURE_TSF_PLUS
#ifdef WLAN_FEATURE_TSF_PLUS_SOCK_TS
bool cds_is_ptp_rx_opt_enabled(void);
bool cds_is_ptp_tx_opt_enabled(void);
#else

查看文件

@@ -2355,7 +2355,7 @@ bool cds_is_fatal_event_enabled(void)
return p_cds_context->enable_fatal_event;
}
#ifdef WLAN_FEATURE_TSF_PLUS
#ifdef WLAN_FEATURE_TSF_PLUS_SOCK_TS
bool cds_is_ptp_rx_opt_enabled(void)
{
struct hdd_context *hdd_ctx;

查看文件

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011-2014,2016-2017,2019 The Linux Foundation. All rights reserved.
* Copyright (c) 2011-2014,2016-2017,2019,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
@@ -51,7 +51,7 @@ enum ol_sec_type {
ol_sec_type_types
};
#ifdef WLAN_FEATURE_TSF_PLUS
#ifdef WLAN_FEATURE_TSF_PLUS_SOCK_TS
typedef int (*tp_ol_timestamp_cb)(qdf_nbuf_t netbuf, uint64_t target_time);
/**

查看文件

@@ -750,7 +750,7 @@ ol_tx_pkt_capture_tx_completion_process(
}
#endif /* WLAN_FEATURE_PKT_CAPTURE */
#ifdef WLAN_FEATURE_TSF_PLUS
#ifdef WLAN_FEATURE_TSF_PLUS_SOCK_TS
static inline struct htt_tx_compl_ind_append_tx_tstamp *ol_tx_get_txtstamps(
u_int32_t *msg_word_header, u_int32_t **msg_word_payload,
int num_msdus)
@@ -1792,7 +1792,7 @@ ol_tx_delay_compute(struct ol_txrx_pdev_t *pdev,
#endif /* QCA_COMPUTE_TX_DELAY */
#ifdef WLAN_FEATURE_TSF_PLUS
#ifdef WLAN_FEATURE_TSF_PLUS_SOCK_TS
void ol_register_timestamp_callback(tp_ol_timestamp_cb ol_tx_timestamp_cb)
{
struct ol_txrx_soc_t *soc = cds_get_context(QDF_MODULE_ID_SOC);

查看文件

@@ -785,7 +785,7 @@ struct ol_txrx_pdev_t {
ol_txrx_pktdump_cb ol_tx_packetdump_cb;
ol_txrx_pktdump_cb ol_rx_packetdump_cb;
#ifdef WLAN_FEATURE_TSF_PLUS
#ifdef WLAN_FEATURE_TSF_PLUS_SOCK_TS
tp_ol_timestamp_cb ol_tx_timestamp_cb;
#endif

查看文件

@@ -232,31 +232,6 @@ int hdd_start_tsf_sync(struct hdd_adapter *adapter);
*/
int hdd_stop_tsf_sync(struct hdd_adapter *adapter);
/**
* hdd_tx_timestamp() - time stamp TX netbuf
*
* @netbuf: pointer to a TX netbuf
* @target_time: TX time for the netbuf
*
* This function get corresponding host time from target time,
* and time stamp the TX netbuf with this time
*
* Return: Describe the execute result of this routine
*/
int hdd_tx_timestamp(qdf_nbuf_t netbuf, uint64_t target_time);
/**
* hdd_rx_timestamp() - time stamp RX netbuf
*
* @netbuf: pointer to a RX netbuf
* @target_time: RX time for the netbuf
*
* This function get corresponding host time from target time,
* and time stamp the RX netbuf with this time
*
* Return: Describe the execute result of this routine
*/
int hdd_rx_timestamp(qdf_nbuf_t netbuf, uint64_t target_time);
/**
* hdd_capture_req_timer_expired_handler() - capture req timer handler
* @arg: pointer to a adapter
@@ -277,6 +252,21 @@ void hdd_capture_req_timer_expired_handler(void *arg);
* Return: true on enable, false on disable
*/
bool hdd_tsf_is_tsf64_tx_set(struct hdd_context *hdd);
#ifdef WLAN_FEATURE_TSF_PLUS_SOCK_TS
/**
* hdd_rx_timestamp() - time stamp RX netbuf
*
* @netbuf: pointer to a RX netbuf
* @target_time: RX time for the netbuf
*
* This function get corresponding host time from target time,
* and time stamp the RX netbuf with this time
*
* Return: Describe the execute result of this routine
*/
int hdd_rx_timestamp(qdf_nbuf_t netbuf, uint64_t target_time);
#endif
#else
static inline int hdd_start_tsf_sync(struct hdd_adapter *adapter)
{
@@ -288,18 +278,6 @@ static inline int hdd_stop_tsf_sync(struct hdd_adapter *adapter)
return -ENOTSUPP;
}
static inline
int hdd_tx_timestamp(qdf_nbuf_t netbuf, uint64_t target_time)
{
return -ENOTSUPP;
}
static inline
int hdd_rx_timestamp(qdf_nbuf_t netbuf, uint64_t target_time)
{
return -ENOTSUPP;
}
static inline
void hdd_capture_req_timer_expired_handler(void *arg)
{

查看文件

@@ -1050,7 +1050,7 @@ QDF_STATUS hdd_softap_init_tx_rx_sta(struct hdd_adapter *adapter,
*
* Return: None
*/
#ifdef WLAN_FEATURE_TSF_PLUS
#ifdef WLAN_FEATURE_TSF_PLUS_SOCK_TS
static inline void hdd_softap_tsf_timestamp_rx(struct hdd_context *hdd_ctx,
qdf_nbuf_t netbuf)
{

查看文件

@@ -1520,6 +1520,77 @@ static enum hdd_tsf_op_result hdd_tsf_sync_deinit(struct hdd_adapter *adapter)
return HDD_TSF_OP_SUCC;
}
int hdd_start_tsf_sync(struct hdd_adapter *adapter)
{
enum hdd_tsf_op_result ret;
if (!adapter)
return -EINVAL;
ret = hdd_tsf_sync_init(adapter);
if (ret != HDD_TSF_OP_SUCC) {
hdd_err("Failed to init tsf sync, ret: %d", ret);
return -EINVAL;
}
return (__hdd_start_tsf_sync(adapter) ==
HDD_TSF_OP_SUCC) ? 0 : -EINVAL;
}
int hdd_stop_tsf_sync(struct hdd_adapter *adapter)
{
enum hdd_tsf_op_result ret;
if (!adapter)
return -EINVAL;
ret = __hdd_stop_tsf_sync(adapter);
if (ret != HDD_TSF_OP_SUCC)
return -EINVAL;
ret = hdd_tsf_sync_deinit(adapter);
if (ret != HDD_TSF_OP_SUCC) {
hdd_err("Failed to deinit tsf sync, ret: %d", ret);
return -EINVAL;
}
return 0;
}
static inline int __hdd_capture_tsf(struct hdd_adapter *adapter,
uint32_t *buf, int len)
{
if (!adapter || !buf) {
hdd_err("invalid pointer");
return -EINVAL;
}
if (len != 1)
return -EINVAL;
buf[0] = TSF_DISABLED_BY_TSFPLUS;
return 0;
}
static inline int __hdd_indicate_tsf(struct hdd_adapter *adapter,
uint32_t *buf, int len)
{
if (!adapter || !buf) {
hdd_err("invalid pointer");
return -EINVAL;
}
if (len != 3)
return -EINVAL;
buf[0] = TSF_DISABLED_BY_TSFPLUS;
buf[1] = 0;
buf[2] = 0;
return 0;
}
#ifdef WLAN_FEATURE_TSF_PLUS_SOCK_TS
#ifdef CONFIG_HL_SUPPORT
static inline
enum hdd_tsf_op_result hdd_netbuf_timestamp(qdf_nbuf_t netbuf,
@@ -1577,43 +1648,18 @@ enum hdd_tsf_op_result hdd_netbuf_timestamp(qdf_nbuf_t netbuf,
}
#endif
int hdd_start_tsf_sync(struct hdd_adapter *adapter)
{
enum hdd_tsf_op_result ret;
if (!adapter)
return -EINVAL;
ret = hdd_tsf_sync_init(adapter);
if (ret != HDD_TSF_OP_SUCC) {
hdd_err("Failed to init tsf sync, ret: %d", ret);
return -EINVAL;
}
return (__hdd_start_tsf_sync(adapter) ==
HDD_TSF_OP_SUCC) ? 0 : -EINVAL;
}
int hdd_stop_tsf_sync(struct hdd_adapter *adapter)
{
enum hdd_tsf_op_result ret;
if (!adapter)
return -EINVAL;
ret = __hdd_stop_tsf_sync(adapter);
if (ret != HDD_TSF_OP_SUCC)
return -EINVAL;
ret = hdd_tsf_sync_deinit(adapter);
if (ret != HDD_TSF_OP_SUCC) {
hdd_err("Failed to deinit tsf sync, ret: %d", ret);
return -EINVAL;
}
return 0;
}
int hdd_tx_timestamp(qdf_nbuf_t netbuf, uint64_t target_time)
/**
* hdd_tx_timestamp() - time stamp TX netbuf
*
* @netbuf: pointer to a TX netbuf
* @target_time: TX time for the netbuf
*
* This function get corresponding host time from target time,
* and time stamp the TX netbuf with this time
*
* Return: Describe the execute result of this routine
*/
static int hdd_tx_timestamp(qdf_nbuf_t netbuf, uint64_t target_time)
{
struct sock *sk = netbuf->sk;
@@ -1661,47 +1707,33 @@ int hdd_rx_timestamp(qdf_nbuf_t netbuf, uint64_t target_time)
return -EINVAL;
}
static inline int __hdd_capture_tsf(struct hdd_adapter *adapter,
uint32_t *buf, int len)
static inline void wlan_hdd_tsf_plus_sock_ts_init(struct hdd_context *hdd_ctx)
{
if (!adapter || !buf) {
hdd_err("invalid pointer");
return -EINVAL;
}
if (len != 1)
return -EINVAL;
buf[0] = TSF_DISABLED_BY_TSFPLUS;
return 0;
if (hdd_tsf_is_tx_set(hdd_ctx))
ol_register_timestamp_callback(hdd_tx_timestamp);
}
static inline int __hdd_indicate_tsf(struct hdd_adapter *adapter,
uint32_t *buf, int len)
static inline void wlan_hdd_tsf_plus_sock_ts_deinit(struct hdd_context *hdd_ctx)
{
if (!adapter || !buf) {
hdd_err("invalid pointer");
return -EINVAL;
}
if (len != 3)
return -EINVAL;
buf[0] = TSF_DISABLED_BY_TSFPLUS;
buf[1] = 0;
buf[2] = 0;
return 0;
if (hdd_tsf_is_tx_set(hdd_ctx))
ol_deregister_timestamp_callback();
}
#else
static inline void wlan_hdd_tsf_plus_sock_ts_init(struct hdd_context *hdd_ctx)
{
}
static inline void wlan_hdd_tsf_plus_sock_ts_deinit(struct hdd_context *hdd_ctx)
{
}
#endif /* WLAN_FEATURE_TSF_PLUS_SOCK_TS */
#if defined(WLAN_FEATURE_TSF_PLUS_NOIRQ)
static inline
enum hdd_tsf_op_result wlan_hdd_tsf_plus_init(struct hdd_context *hdd_ctx)
{
if (hdd_tsf_is_tx_set(hdd_ctx))
ol_register_timestamp_callback(hdd_tx_timestamp);
wlan_hdd_tsf_plus_sock_ts_init(hdd_ctx);
return HDD_TSF_OP_SUCC;
}
@@ -1713,8 +1745,7 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_deinit(struct hdd_context *hdd_ctx)
qdf_mc_timer_t *cap_timer;
struct hdd_adapter *adapter, *adapternode_ptr, *next_ptr;
if (hdd_tsf_is_tx_set(hdd_ctx))
ol_deregister_timestamp_callback();
wlan_hdd_tsf_plus_sock_ts_deinit(hdd_ctx);
status = hdd_get_front_adapter(hdd_ctx, &adapternode_ptr);
@@ -1773,8 +1804,7 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_init(struct hdd_context *hdd_ctx)
goto fail_free_gpio;
}
if (hdd_tsf_is_tx_set(hdd_ctx))
ol_register_timestamp_callback(hdd_tx_timestamp);
wlan_hdd_tsf_plus_sock_ts_init(hdd_ctx);
return HDD_TSF_OP_SUCC;
@@ -1798,8 +1828,7 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_deinit(struct hdd_context *hdd_ctx)
if (tsf_sync_gpio_pin == TSF_GPIO_PIN_INVALID)
return QDF_STATUS_E_INVAL;
if (hdd_tsf_is_tx_set(hdd_ctx))
ol_deregister_timestamp_callback();
wlan_hdd_tsf_plus_sock_ts_deinit(hdd_ctx);
gpio_free(tsf_sync_gpio_pin);
return HDD_TSF_OP_SUCC;
@@ -1852,8 +1881,7 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_init(struct hdd_context *hdd_ctx)
goto fail_free_gpio;
}
if (hdd_tsf_is_tx_set(hdd_ctx))
ol_register_timestamp_callback(hdd_tx_timestamp);
wlan_hdd_tsf_plus_sock_ts_init(hdd_ctx);
return HDD_TSF_OP_SUCC;
@@ -1878,8 +1906,7 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_deinit(struct hdd_context *hdd_ctx)
if (tsf_irq_gpio_pin == TSF_GPIO_PIN_INVALID)
return QDF_STATUS_E_INVAL;
if (hdd_tsf_is_tx_set(hdd_ctx))
ol_deregister_timestamp_callback();
wlan_hdd_tsf_plus_sock_ts_deinit(hdd_ctx);
if (tsf_gpio_irq_num >= 0) {
free_irq(tsf_gpio_irq_num, hdd_ctx);
@@ -1944,8 +1971,7 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_init(struct hdd_context *hdd_ctx)
return HDD_TSF_OP_FAIL;
}
if (hdd_tsf_is_tx_set(hdd_ctx))
ol_register_timestamp_callback(hdd_tx_timestamp);
wlan_hdd_tsf_plus_sock_ts_init(hdd_ctx);
return HDD_TSF_OP_SUCC;
}
@@ -1954,8 +1980,7 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_deinit(struct hdd_context *hdd_ctx)
{
int ret;
if (hdd_tsf_is_tx_set(hdd_ctx))
ol_deregister_timestamp_callback();
wlan_hdd_tsf_plus_sock_ts_deinit(hdd_ctx);
ret = cnss_common_unregister_tsf_captured_handler(
hdd_ctx->parent_dev,

查看文件

@@ -2079,7 +2079,7 @@ void hdd_disable_rx_ol_for_low_tput(struct hdd_context *hdd_ctx, bool disable)
}
#endif /* RECEIVE_OFFLOAD */
#ifdef WLAN_FEATURE_TSF_PLUS
#ifdef WLAN_FEATURE_TSF_PLUS_SOCK_TS
static inline void hdd_tsf_timestamp_rx(struct hdd_context *hdd_ctx,
qdf_nbuf_t netbuf,
uint64_t target_time)