qcacld-3.0: Configure TSF auto report to target

As part of uplink delay report feature, send WMI cmd to
enable and disable target automatically sending TSF report
to HOST on a per vdev basis.

Change-Id: I79ef5bff5b91aca311ef16d7207e9dd2fb7ae0f2
CRs-Fixed: 2991975
This commit is contained in:
Jia Ding 2022-04-26 11:27:21 +08:00 • committed by Madan Koyyalamudi
commit 2131be6380
4 changed files with 83 additions and 1 deletions

View file

@ -1,5 +1,6 @@
/*
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 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
@ -50,6 +51,8 @@ typedef void *WMA_HANDLE;
* @GEN_VDEV_PARAM_RX_AMPDU: Set rx ampdu size
* @GEN_VDEV_PARAM_TX_AMSDU: Set tx amsdu size
* @GEN_VDEV_PARAM_RX_AMSDU: Set rx amsdu size
* @GEN_PARAM_TSF_AUTO_REPORT_ENABLE: Enable auto report of clock delta change
* @GEN_PARAM_TSF_AUTO_REPORT_DISABLE: Disable auto report of clock delta change
*/
enum GEN_PARAM {
GEN_VDEV_PARAM_AMPDU = 0x1,
@ -62,6 +65,8 @@ enum GEN_PARAM {
GEN_VDEV_PARAM_RX_AMPDU,
GEN_VDEV_PARAM_TX_AMSDU,
GEN_VDEV_PARAM_RX_AMSDU,
GEN_PARAM_TSF_AUTO_REPORT_ENABLE,
GEN_PARAM_TSF_AUTO_REPORT_DISABLE,
};
/**

View file

@ -1,5 +1,6 @@
/*
* Copyright (c) 2013-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 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
@ -1336,6 +1337,28 @@ int wma_vdev_tsf_handler(void *handle, uint8_t *data, uint32_t data_len);
QDF_STATUS wma_capture_tsf(tp_wma_handle wma_handle, uint32_t vdev_id);
QDF_STATUS wma_reset_tsf_gpio(tp_wma_handle wma_handle, uint32_t vdev_id);
QDF_STATUS wma_set_tsf_gpio_pin(WMA_HANDLE handle, uint32_t pin);
#ifdef WLAN_FEATURE_TSF_UPLINK_DELAY
/**
* wma_set_tsf_auto_report() - Set TSF auto report in firmware
* @wma_handle: wma handle
* @vdev_id: vdev id
* @param_id: enum GEN_PARAM
* @ena: true for enable, and false for disable
*
* Return: QDF_STATUS_SUCCESS for success, otherwise for failure
*/
QDF_STATUS wma_set_tsf_auto_report(WMA_HANDLE handle, uint32_t vdev_id,
uint32_t param_id, bool ena);
#else /* !WLAN_FEATURE_TSF_UPLINK_DELAY */
static inline QDF_STATUS wma_set_tsf_auto_report(WMA_HANDLE handle,
uint32_t vdev_id,
uint32_t param_id, bool ena)
{
return QDF_STATUS_E_FAILURE;
}
#endif /* WLAN_FEATURE_TSF_UPLINK_DELAY */
#else
static inline QDF_STATUS wma_capture_tsf(tp_wma_handle wma_handle,
uint32_t vdev_id)

View file

@ -1,5 +1,6 @@
/*
* Copyright (c) 2013-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 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
@ -476,6 +477,53 @@ QDF_STATUS wma_set_tsf_gpio_pin(WMA_HANDLE handle, uint32_t pin)
}
return QDF_STATUS_SUCCESS;
}
#ifdef WLAN_FEATURE_TSF_UPLINK_DELAY
QDF_STATUS wma_set_tsf_auto_report(WMA_HANDLE handle, uint32_t vdev_id,
uint32_t param_id, bool ena)
{
wmi_vdev_tsf_tstamp_action_cmd_fixed_param *cmd;
tp_wma_handle wma = (tp_wma_handle)handle;
struct wmi_unified *wmi_handle;
int len = sizeof(*cmd);
QDF_STATUS status;
uint8_t *buf_ptr;
wmi_buf_t buf;
if (param_id != GEN_PARAM_TSF_AUTO_REPORT_ENABLE &&
param_id != GEN_PARAM_TSF_AUTO_REPORT_DISABLE)
return QDF_STATUS_E_FAILURE;
wmi_handle = wma->wmi_handle;
if (wmi_validate_handle(wmi_handle))
return QDF_STATUS_E_INVAL;
buf = wmi_buf_alloc(wmi_handle, len);
if (!buf)
return QDF_STATUS_E_NOMEM;
buf_ptr = (uint8_t *)wmi_buf_data(buf);
cmd = (wmi_vdev_tsf_tstamp_action_cmd_fixed_param *)buf_ptr;
cmd->vdev_id = vdev_id;
cmd->tsf_action = ena ? TSF_TSTAMP_AUTO_REPORT_ENABLE :
TSF_TSTAMP_AUTO_REPORT_DISABLE;
wma_debug("vdev_id %u tsf_action %d", cmd->vdev_id, cmd->tsf_action);
WMITLV_SET_HDR(
&cmd->tlv_header,
WMITLV_TAG_STRUC_wmi_vdev_tsf_tstamp_action_cmd_fixed_param,
WMITLV_GET_STRUCT_TLVLEN(
wmi_vdev_tsf_tstamp_action_cmd_fixed_param));
status = wmi_unified_cmd_send(wmi_handle, buf, len,
WMI_VDEV_TSF_TSTAMP_ACTION_CMDID);
if (QDF_IS_STATUS_ERROR(status))
wmi_buf_free(buf);
return status;
}
#endif /* WLAN_FEATURE_TSF_UPLINK_DELAY */
#endif
/**

View file

@ -1014,7 +1014,13 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma,
ret = wma_reset_tsf_gpio(wma, privcmd->param_value);
break;
default:
wma_err("Invalid param id 0x%x", privcmd->param_id);
ret = wma_set_tsf_auto_report(wma,
privcmd->param_vdev_id,
privcmd->param_id,
privcmd->param_value);
if (ret == QDF_STATUS_E_FAILURE)
wma_err("Invalid param id 0x%x",
privcmd->param_id);
break;
}
break;