Sfoglia il codice sorgente

qcacld-3.0: Handle new attribute to support flexible TWT

Parse new nudge attribute to support flexible TWT.
This attribute is optional and will override wake
duration attribute if provided.

Change-Id: I16bbd5e4c78e5471cdccad4ebe43049d4f85e829
CRs-Fixed: 3265813
nakul kachhwaha 2 anni fa
parent
commit
080c69ef81
1 ha cambiato i file con 16 aggiunte e 0 eliminazioni
  1. 16 0
      os_if/twt/src/osif_twt_ext_req.c

+ 16 - 0
os_if/twt/src/osif_twt_ext_req.c

@@ -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,
+							&params.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, &params);
 }