|
@@ -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)) {
|