qcacld-3.0: Receive twt_setup wake_mantisa in microsecond

Currently, host receive the mantissa in TU from upper
layer.
Add support for below TWT setup additional parameters:
Mantissa in Microsecond
Add changes to receive mantissa value of wake interval
in microsecond.

Change-Id: I00ac5006002a6b4d521a005080a1f5a787f54ba7
CRs-Fixed: 2888361
This commit is contained in:
Deeksha Gupta 2021-03-16 10:49:36 +05:30 • committed by snandini
commit afc154583d

View file

@ -66,6 +66,7 @@ qca_wlan_vendor_twt_add_dialog_policy[QCA_WLAN_VENDOR_ATTR_TWT_SETUP_MAX + 1] =
[QCA_WLAN_VENDOR_ATTR_TWT_SETUP_MAX_WAKE_DURATION] = {.type = NLA_U32 },
[QCA_WLAN_VENDOR_ATTR_TWT_SETUP_MIN_WAKE_INTVL] = {.type = NLA_U32 },
[QCA_WLAN_VENDOR_ATTR_TWT_SETUP_MAX_WAKE_INTVL] = {.type = NLA_U32 },
[QCA_WLAN_VENDOR_ATTR_TWT_SETUP_WAKE_INTVL2_MANTISSA] = {.type = NLA_U32 },
};
static const struct nla_policy
@ -231,6 +232,16 @@ int hdd_twt_get_add_dialog_values(struct nlattr **tb,
return -EINVAL;
}
params->wake_intvl_mantis = nla_get_u32(tb[cmd_id]);
/*
* If mantissa in microsecond is present then take precedence over
* mantissa in TU. And send mantissa in microsecond to firmware.
*/
cmd_id = QCA_WLAN_VENDOR_ATTR_TWT_SETUP_WAKE_INTVL2_MANTISSA;
if (tb[cmd_id]) {
params->wake_intvl_mantis = nla_get_u32(tb[cmd_id]);
}
if (params->wake_intvl_mantis >
TWT_SETUP_WAKE_INTVL_MANTISSA_MAX) {
hdd_err_rl("Invalid wake_intvl_mantis %u",
@ -497,7 +508,7 @@ hdd_twt_pack_get_params_resp_nlmsg(struct wlan_objmgr_psoc *psoc,
enum qca_wlan_twt_setup_state converted_state;
uint64_t tsf_val;
uint32_t wake_duration;
uint32_t wake_intvl_mantis_tu;
uint32_t wake_intvl_mantis_us, wake_intvl_mantis_tu;
int i, attr;
config_attr = nla_nest_start(reply_skb,
@ -581,6 +592,12 @@ hdd_twt_pack_get_params_resp_nlmsg(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_E_INVAL;
}
wake_intvl_mantis_us = params[i].wake_intvl_us;
attr = QCA_WLAN_VENDOR_ATTR_TWT_SETUP_WAKE_INTVL2_MANTISSA;
if (nla_put_u32(reply_skb, attr, wake_intvl_mantis_us)) {
hdd_err("TWT: get_params failed to put Wake Interval in us");
return QDF_STATUS_E_INVAL;
}
wake_intvl_mantis_tu = params[i].wake_intvl_us /
TWT_WAKE_INTVL_MULTIPLICATION_FACTOR;
attr = QCA_WLAN_VENDOR_ATTR_TWT_SETUP_WAKE_INTVL_MANTISSA;
@ -589,6 +606,9 @@ hdd_twt_pack_get_params_resp_nlmsg(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_E_INVAL;
}
hdd_debug("TWT: Send mantissa_us:%d, mantissa_tu:%d to userspace",
wake_intvl_mantis_us, wake_intvl_mantis_tu);
attr = QCA_WLAN_VENDOR_ATTR_TWT_SETUP_WAKE_INTVL_EXP;
if (nla_put_u8(reply_skb, attr, 0)) {
hdd_err("TWT: get_params put Wake Interval Exp failed");
@ -1063,7 +1083,7 @@ hdd_twt_setup_pack_resp_nlmsg(struct sk_buff *reply_skb,
enum qca_wlan_vendor_twt_status vendor_status;
int response_type;
uint32_t wake_duration;
uint32_t wake_intvl_mantissa_tu;
uint32_t wake_intvl_mantis_us, wake_intvl_mantis_tu;
hdd_enter();
@ -1128,15 +1148,24 @@ hdd_twt_setup_pack_resp_nlmsg(struct sk_buff *reply_skb,
return QDF_STATUS_E_FAILURE;
}
wake_intvl_mantissa_tu = (event->additional_params.wake_intvl_us /
wake_intvl_mantis_us = event->additional_params.wake_intvl_us;
if (nla_put_u32(reply_skb,
QCA_WLAN_VENDOR_ATTR_TWT_SETUP_WAKE_INTVL2_MANTISSA,
wake_intvl_mantis_us)) {
hdd_err("TWT: Failed to put wake interval mantissa in us");
return QDF_STATUS_E_FAILURE;
}
wake_intvl_mantis_tu = (event->additional_params.wake_intvl_us /
TWT_WAKE_INTVL_MULTIPLICATION_FACTOR);
if (nla_put_u32(reply_skb,
QCA_WLAN_VENDOR_ATTR_TWT_SETUP_WAKE_INTVL_MANTISSA,
wake_intvl_mantissa_tu)) {
hdd_err("TWT: Failed to put wake interval us");
wake_intvl_mantis_tu)) {
hdd_err("TWT: Failed to put wake interval mantissa in tu");
return QDF_STATUS_E_FAILURE;
}
hdd_debug("wake_intvl_mantissa in TU %d", wake_intvl_mantissa_tu);
hdd_debug("TWT: Send mantissa_us:%d, mantissa_tu:%d to userspace",
wake_intvl_mantis_us, wake_intvl_mantis_tu);
if (nla_put_u8(reply_skb, QCA_WLAN_VENDOR_ATTR_TWT_SETUP_WAKE_INTVL_EXP,
0)) {