|
@@ -86,6 +86,7 @@ qca_wlan_vendor_twt_nudge_dialog_policy[QCA_WLAN_VENDOR_ATTR_TWT_NUDGE_MAX + 1]
|
|
|
[QCA_WLAN_VENDOR_ATTR_TWT_NUDGE_WAKE_TIME] = {.type = NLA_U32 },
|
|
|
[QCA_WLAN_VENDOR_ATTR_TWT_NUDGE_NEXT_TWT_SIZE] = {.type = NLA_U32 },
|
|
|
[QCA_WLAN_VENDOR_ATTR_TWT_NUDGE_MAC_ADDR] = VENDOR_NLA_POLICY_MAC_ADDR,
|
|
|
+ [QCA_WLAN_VENDOR_ATTR_TWT_NUDGE_SP_START_OFFSET] = {.type = NLA_S32},
|
|
|
};
|
|
|
|
|
|
static const struct nla_policy
|
|
@@ -1574,6 +1575,7 @@ int osif_twt_nudge_req(struct wlan_objmgr_vdev *vdev,
|
|
|
int ret = 0, id;
|
|
|
uint32_t vdev_id;
|
|
|
struct twt_nudge_dialog_cmd_param params = {0};
|
|
|
+ QDF_STATUS status;
|
|
|
|
|
|
psoc = wlan_vdev_get_psoc(vdev);
|
|
|
if (!psoc) {
|
|
@@ -1625,12 +1627,26 @@ int osif_twt_nudge_req(struct wlan_objmgr_vdev *vdev,
|
|
|
}
|
|
|
params.next_twt_size = nla_get_u32(tb[id]);
|
|
|
|
|
|
+ id = QCA_WLAN_VENDOR_ATTR_TWT_NUDGE_SP_START_OFFSET;
|
|
|
+ if (tb[id]) {
|
|
|
+ uint8_t peer_cap = 0;
|
|
|
+
|
|
|
+ status = ucfg_twt_get_peer_capabilities(psoc,
|
|
|
+ ¶ms.peer_macaddr,
|
|
|
+ &peer_cap);
|
|
|
+ if (QDF_IS_STATUS_SUCCESS(status) &&
|
|
|
+ (peer_cap & WLAN_TWT_CAPA_FLEXIBLE)) {
|
|
|
+ params.sp_start_offset = nla_get_s32(tb[id]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
osif_debug("twt_nudge: vdev_id %d dialog_id %d ", params.vdev_id,
|
|
|
params.dialog_id);
|
|
|
osif_debug("twt_nudge: suspend_duration %d next_twt_size %d",
|
|
|
params.suspend_duration, params.next_twt_size);
|
|
|
osif_debug("peer mac_addr " QDF_MAC_ADDR_FMT,
|
|
|
QDF_MAC_ADDR_REF(params.peer_macaddr.bytes));
|
|
|
+ osif_debug("twt_nudge: sp_start_offset %d", params.sp_start_offset);
|
|
|
|
|
|
return osif_send_twt_nudge_req(vdev, psoc, ¶ms);
|
|
|
}
|