Pārlūkot izejas kodu

qcacmn: Add support for WMI_TWT_NUDGE_DIALOG_CMDID

Add support for WMI_TWT_NUDGE_DIALOG_CMDID and
WMI_TWT_NUDGE_DIALOG_COMPLETE_EVENTID.

Change-Id: I9d4bf1061f6f08479967619ce50d2756c062f55f
CRs-Fixed: 2825138
Paul Zhang 4 gadi atpakaļ
vecāks
revīzija
59ef5a49a8

+ 1 - 0
wmi/inc/wmi_unified_param.h

@@ -4725,6 +4725,7 @@ typedef enum {
 	wmi_twt_del_dialog_complete_event_id,
 	wmi_twt_pause_dialog_complete_event_id,
 	wmi_twt_resume_dialog_complete_event_id,
+	wmi_twt_nudge_dialog_complete_event_id,
 	wmi_twt_session_stats_event_id,
 #endif
 	wmi_apf_get_vdev_work_memory_resp_event_id,

+ 7 - 0
wmi/inc/wmi_unified_priv.h

@@ -2205,6 +2205,9 @@ QDF_STATUS (*send_twt_del_dialog_cmd)(wmi_unified_t wmi_handle,
 QDF_STATUS (*send_twt_pause_dialog_cmd)(wmi_unified_t wmi_handle,
 			struct wmi_twt_pause_dialog_cmd_param *params);
 
+QDF_STATUS (*send_twt_nudge_dialog_cmd)(wmi_unified_t wmi_handle,
+			struct wmi_twt_nudge_dialog_cmd_param *params);
+
 QDF_STATUS (*send_twt_resume_dialog_cmd)(wmi_unified_t wmi_handle,
 			struct wmi_twt_resume_dialog_cmd_param *params);
 
@@ -2243,6 +2246,10 @@ QDF_STATUS (*extract_twt_pause_dialog_comp_event)(wmi_unified_t wmi_handle,
 		uint8_t *evt_buf,
 		struct wmi_twt_pause_dialog_complete_event_param *params);
 
+QDF_STATUS (*extract_twt_nudge_dialog_comp_event)(wmi_unified_t wmi_handle,
+		uint8_t *evt_buf,
+		struct wmi_twt_nudge_dialog_complete_event_param *params);
+
 QDF_STATUS (*extract_twt_resume_dialog_comp_event)(wmi_unified_t wmi_handle,
 		uint8_t *evt_buf,
 		struct wmi_twt_resume_dialog_complete_event_param *params);

+ 25 - 0
wmi/inc/wmi_unified_twt_api.h

@@ -81,6 +81,17 @@ QDF_STATUS
 wmi_unified_twt_pause_dialog_cmd(wmi_unified_t wmi_handle,
 				 struct wmi_twt_pause_dialog_cmd_param *params);
 
+/**
+ * wmi_unified_twt_nudge_dialog_cmd() - Send WMI command to nudge TWT dialog
+ * @wmi_handle: wmi handle
+ * @params: Parameters to be configured
+ *
+ * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
+ */
+QDF_STATUS
+wmi_unified_twt_nudge_dialog_cmd(wmi_unified_t wmi_handle,
+				 struct wmi_twt_nudge_dialog_cmd_param *params);
+
 /**
  * wmi_unified_twt_resume_dialog_cmd() - Send WMI command to resume TWT dialog
  * @wmi_handle: wmi handle
@@ -203,6 +214,20 @@ QDF_STATUS wmi_extract_twt_pause_dialog_comp_event(
 		uint8_t *evt_buf,
 		struct wmi_twt_pause_dialog_complete_event_param *params);
 
+/**
+ * wmi_extract_twt_nudge_dialog_comp_event() - Extract WMI event params for TWT
+ *                               nudge dialog completion event
+ * @wmi_handle: wmi handle
+ * @evt_buf: Pointer event buffer
+ * @params: Parameters to extract
+ *
+ * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
+ */
+QDF_STATUS wmi_extract_twt_nudge_dialog_comp_event(
+		wmi_unified_t wmi_handle,
+		uint8_t *evt_buf,
+		struct wmi_twt_nudge_dialog_complete_event_param *params);
+
 /**
  * wmi_extract_twt_resume_dialog_comp_event() - Extract WMI event params for TWT
  *                               resume dialog completion event

+ 84 - 17
wmi/inc/wmi_unified_twt_param.h

@@ -129,7 +129,8 @@ enum WMI_HOST_ENABLE_TWT_STATUS {
 	WMI_HOST_ENABLE_TWT_STATUS_UNKNOWN_ERROR,
 };
 
-/** struct wmi_twt_enable_complete_event_param:
+/**
+ * struct wmi_twt_enable_complete_event_param:
  * @pdev_is: pdev_id for identifying the MAC.
  * @status: From enum WMI_HOST_ENABLE_TWT_STATUS
  */
@@ -139,7 +140,7 @@ struct wmi_twt_enable_complete_event_param {
 };
 
 /**
- *struct wmi_twt_disable_param:
+ * struct wmi_twt_disable_param:
  * @pdev_id: pdev_id for identifying the MAC.
  * @ext_conf_present: If requestor/responder extend config is present.
  * @twt_role: values from enum WMI_TWT_ROLE.
@@ -152,7 +153,8 @@ struct wmi_twt_disable_param {
 	enum WMI_TWT_OPERATION twt_oper;
 };
 
-/** struct wmi_twt_disable_complete_event:
+/**
+ * struct wmi_twt_disable_complete_event:
  * @pdev_id: pdev_id for identifying the MAC.
  */
 struct wmi_twt_disable_complete_event {
@@ -204,7 +206,8 @@ struct wmi_host_twt_session_stats_info {
 	uint32_t sp_tsf_us_hi;
 };
 
-/** struct wmi_twt_session_stats_event:
+/**
+ * struct wmi_twt_session_stats_event:
  * @pdev_id: pdev_id for identifying the MAC.
  * @num_sessions: number of TWT sessions
  * @twt_sessions: received TWT sessions
@@ -226,7 +229,8 @@ enum WMI_HOST_TWT_COMMAND {
 	WMI_HOST_TWT_COMMAND_REJECT_TWT     = 7,
 };
 
-/** struct wmi_twt_add_dialog_param -
+/**
+ * struct wmi_twt_add_dialog_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: peer MAC address when vdev is AP VDEV
  * @dialog_id: diaglog_id (TWT dialog ID)
@@ -341,7 +345,8 @@ struct wmi_twt_add_dialog_additional_params {
 	uint32_t sp_tsf_us_hi;
 };
 
-/** struct wmi_twt_add_dialog_complete_param -
+/**
+ * struct wmi_twt_add_dialog_complete_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: TWT dialog ID
@@ -356,7 +361,8 @@ struct wmi_twt_add_dialog_complete_event_param {
 	uint32_t num_additional_twt_params;
 };
 
-/** struct wmi_twt_del_dialog_param -
+/**
+ * struct wmi_twt_del_dialog_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: TWT dialog ID
@@ -393,7 +399,8 @@ enum WMI_HOST_DEL_TWT_STATUS {
 	WMI_HOST_DEL_TWT_STATUS_UNKNOWN_ERROR,
 };
 
-/** struct wmi_twt_del_dialog_complete_event_param -
+/**
+ * struct wmi_twt_del_dialog_complete_event_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: TWT dialog ID
@@ -410,7 +417,8 @@ struct wmi_twt_del_dialog_complete_event_param {
 	uint32_t status;
 };
 
-/** struct wmi_twt_pause_dialog_cmd_param -
+/**
+ * struct wmi_twt_pause_dialog_cmd_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: TWT dialog ID
@@ -421,6 +429,22 @@ struct wmi_twt_pause_dialog_cmd_param {
 	uint32_t dialog_id;
 };
 
+/**
+ * struct wmi_twt_nudge_dialog_cmd_param -
+ * @vdev_id: VDEV identifier
+ * @peer_macaddr: Peer mac address
+ * @dialog_id: TWT dialog ID
+ * @suspend_duration: TWT suspend duration in microseconds
+ * @next_twt_size: next TWT size
+ */
+struct wmi_twt_nudge_dialog_cmd_param {
+	uint32_t vdev_id;
+	uint8_t  peer_macaddr[QDF_MAC_ADDR_SIZE];
+	uint32_t dialog_id;
+	uint32_t suspend_duration;
+	uint32_t next_twt_size;
+};
+
 /* enum WMI_HOST_PAUSE_TWT_STATUS - status code of pausing TWT dialog
  * WMI_HOST_PAUSE_TWT_STATUS_OK: pausing TWT dialog successfully completed
  * WMI_HOST_PAUSE_TWT_STATUS_DIALOG_ID_NOT_EXIST: TWT dialog ID not exists
@@ -445,7 +469,8 @@ enum WMI_HOST_PAUSE_TWT_STATUS {
 	WMI_HOST_PAUSE_TWT_STATUS_ALREADY_PAUSED,
 };
 
-/** struct wmi_twt_pause_dialog_complete_event_param -
+/**
+ * struct wmi_twt_pause_dialog_complete_event_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: TWT dialog ID
@@ -455,10 +480,47 @@ struct wmi_twt_pause_dialog_complete_event_param {
 	uint32_t vdev_id;
 	uint8_t  peer_macaddr[QDF_MAC_ADDR_SIZE];
 	uint32_t dialog_id;
-	uint32_t status;
+	enum WMI_HOST_PAUSE_TWT_STATUS status;
+};
+
+/* enum WMI_HOST_NUDGE_TWT_STATUS - status code of nudge TWT dialog
+ * WMI_HOST_NUDGE_TWT_STATUS_OK: nudge TWT dialog successfully completed
+ * WMI_HOST_NUDGE_TWT_STATUS_DIALOG_ID_NOT_EXIST: TWT dialog ID not exists
+ * WMI_HOST_NUDGE_TWT_STATUS_INVALID_PARAM: invalid parameters
+ * WMI_HOST_NUDGE_TWT_STATUS_DIALOG_ID_BUSY: FW is in the process of handling
+ *                          this dialog
+ * WMI_HOST_NUDGE_TWT_STATUS_NO_RESOURCE: FW resource exhausted
+ * WMI_HOST_NUDGE_TWT_STATUS_NO_ACK: peer AP/STA did not ACK the
+ *                          request/response frame
+ * WMI_HOST_NUDGE_TWT_STATUS_UNKNOWN_ERROR: nudge TWT dialog failed with an
+ *                          unknown reason
+ */
+enum WMI_HOST_NUDGE_TWT_STATUS {
+	WMI_HOST_NUDGE_TWT_STATUS_OK,
+	WMI_HOST_NUDGE_TWT_STATUS_DIALOG_ID_NOT_EXIST,
+	WMI_HOST_NUDGE_TWT_STATUS_INVALID_PARAM,
+	WMI_HOST_NUDGE_TWT_STATUS_DIALOG_ID_BUSY,
+	WMI_HOST_NUDGE_TWT_STATUS_NO_RESOURCE,
+	WMI_HOST_NUDGE_TWT_STATUS_NO_ACK,
+	WMI_HOST_NUDGE_TWT_STATUS_UNKNOWN_ERROR,
+};
+
+/**
+ * struct wmi_twt_nudge_dialog_complete_event_param -
+ * @vdev_id: VDEV identifier
+ * @peer_macaddr: Peer mac address
+ * @dialog_id: TWT dialog ID
+ * @status: refer to WMI_HOST_PAUSE_TWT_STATUS
+ */
+struct wmi_twt_nudge_dialog_complete_event_param {
+	uint32_t vdev_id;
+	uint8_t  peer_macaddr[QDF_MAC_ADDR_SIZE];
+	uint32_t dialog_id;
+	enum WMI_HOST_NUDGE_TWT_STATUS status;
 };
 
-/** struct wmi_twt_resume_dialog_cmd_param -
+/**
+ * struct wmi_twt_resume_dialog_cmd_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: TWT dialog ID
@@ -498,7 +560,8 @@ enum WMI_HOST_RESUME_TWT_STATUS {
 	WMI_HOST_RESUME_TWT_STATUS_UNKNOWN_ERROR,
 };
 
-/** struct wmi_twt_resume_dialog_complete_event_param -
+/**
+ * struct wmi_twt_resume_dialog_complete_event_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: TWT dialog ID
@@ -512,7 +575,8 @@ struct wmi_twt_resume_dialog_complete_event_param {
 };
 
 #ifdef WLAN_SUPPORT_BCAST_TWT
-/** struct wmi_twt_btwt_invite_sta_cmd_param -
+/**
+ * struct wmi_twt_btwt_invite_sta_cmd_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: TWT dialog ID
@@ -548,7 +612,8 @@ enum WMI_HOST_INVITATION_TWT_BTWT_STATUS {
 	WMI_HOST_INVITATION_TWT_BTWT_STATUS_UNKNOWN_ERROR,
 };
 
-/** struct wmi_twt_btwt_invite_sta_complete_event_param -
+/**
+ * struct wmi_twt_btwt_invite_sta_complete_event_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: BTWT dialog ID
@@ -561,7 +626,8 @@ struct wmi_twt_btwt_invite_sta_complete_event_param {
 		uint32_t status;
 };
 
-/** struct wmi_twt_btwt_remove_sta_cmd_param -
+/**
+ * struct wmi_twt_btwt_remove_sta_cmd_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: BTWT dialog ID
@@ -597,7 +663,8 @@ enum WMI_HOST_KICKOFF_TWT_BTWT_STATUS {
 	WMI_HOST_KICKOFF_TWT_BTWT_STATUS_UNKNOWN_ERROR,
 };
 
-/** struct wmi_twt_btwt_remove_sta_complete_event_param -
+/**
+ * struct wmi_twt_btwt_remove_sta_complete_event_param -
  * @vdev_id: VDEV identifier
  * @peer_macaddr: Peer mac address
  * @dialog_id: BTWT dialog ID

+ 2 - 0
wmi/src/wmi_unified_tlv.c

@@ -14829,6 +14829,8 @@ static void populate_tlv_events_id(uint32_t *event_ids)
 		WMI_TWT_PAUSE_DIALOG_COMPLETE_EVENTID;
 	event_ids[wmi_twt_resume_dialog_complete_event_id] =
 		WMI_TWT_RESUME_DIALOG_COMPLETE_EVENTID;
+	event_ids[wmi_twt_nudge_dialog_complete_event_id] =
+		WMI_TWT_NUDGE_DIALOG_COMPLETE_EVENTID;
 	event_ids[wmi_twt_session_stats_event_id] =
 		WMI_TWT_SESSION_STATS_EVENTID;
 #endif

+ 23 - 0
wmi/src/wmi_unified_twt_api.c

@@ -78,6 +78,17 @@ wmi_unified_twt_pause_dialog_cmd(wmi_unified_t wmi_handle,
 	return QDF_STATUS_E_FAILURE;
 }
 
+QDF_STATUS
+wmi_unified_twt_nudge_dialog_cmd(wmi_unified_t wmi_handle,
+				 struct wmi_twt_nudge_dialog_cmd_param *params)
+{
+	if (wmi_handle->ops->send_twt_nudge_dialog_cmd)
+		return wmi_handle->ops->send_twt_nudge_dialog_cmd(
+				wmi_handle, params);
+
+	return QDF_STATUS_E_FAILURE;
+}
+
 QDF_STATUS wmi_unified_twt_resume_dialog_cmd(
 			wmi_unified_t wmi_handle,
 			struct wmi_twt_resume_dialog_cmd_param *params)
@@ -187,6 +198,18 @@ QDF_STATUS wmi_extract_twt_pause_dialog_comp_event(
 	return QDF_STATUS_E_FAILURE;
 }
 
+QDF_STATUS wmi_extract_twt_nudge_dialog_comp_event(
+		wmi_unified_t wmi_handle,
+		uint8_t *evt_buf,
+		struct wmi_twt_nudge_dialog_complete_event_param *params)
+{
+	if (wmi_handle->ops->extract_twt_nudge_dialog_comp_event)
+		return wmi_handle->ops->extract_twt_nudge_dialog_comp_event(
+				wmi_handle, evt_buf, params);
+
+	return QDF_STATUS_E_FAILURE;
+}
+
 QDF_STATUS wmi_extract_twt_resume_dialog_comp_event(
 		wmi_unified_t wmi_handle,
 		uint8_t *evt_buf,

+ 113 - 1
wmi/src/wmi_unified_twt_tlv.c

@@ -276,6 +276,43 @@ send_twt_pause_dialog_cmd_tlv(wmi_unified_t wmi_handle,
 	return status;
 }
 
+static QDF_STATUS
+send_twt_nudge_dialog_cmd_tlv(wmi_unified_t wmi_handle,
+			      struct wmi_twt_nudge_dialog_cmd_param *params)
+{
+	wmi_twt_nudge_dialog_cmd_fixed_param *cmd;
+	wmi_buf_t buf;
+	QDF_STATUS status;
+
+	buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd));
+	if (!buf)
+		return QDF_STATUS_E_FAILURE;
+
+	cmd = (wmi_twt_nudge_dialog_cmd_fixed_param *) wmi_buf_data(buf);
+	WMITLV_SET_HDR(&cmd->tlv_header,
+		       WMITLV_TAG_STRUC_wmi_twt_nudge_dialog_cmd_fixed_param,
+		       WMITLV_GET_STRUCT_TLVLEN
+		       (wmi_twt_nudge_dialog_cmd_fixed_param));
+
+	cmd->vdev_id = params->vdev_id;
+	WMI_CHAR_ARRAY_TO_MAC_ADDR(params->peer_macaddr, &cmd->peer_macaddr);
+	cmd->dialog_id = params->dialog_id;
+	cmd->suspend_duration_ms = params->suspend_duration / 1000;
+	cmd->next_twt_size = params->next_twt_size;
+
+	wmi_debug("vdev_id: %d dialog_id: %d duration(in ms): %u next_twt_size: %d "
+		  "peer_macaddr: "QDF_MAC_ADDR_FMT, cmd->vdev_id,
+		  cmd->dialog_id, cmd->suspend_duration_ms, cmd->next_twt_size,
+		  QDF_MAC_ADDR_REF(params->peer_macaddr));
+
+	status = wmi_unified_cmd_send(wmi_handle, buf, sizeof(*cmd),
+				      WMI_TWT_NUDGE_DIALOG_CMDID);
+	if (QDF_IS_STATUS_ERROR(status))
+		wmi_buf_free(buf);
+
+	return status;
+}
+
 static QDF_STATUS send_twt_resume_dialog_cmd_tlv(wmi_unified_t wmi_handle,
 			struct wmi_twt_resume_dialog_cmd_param *params)
 {
@@ -570,6 +607,31 @@ static QDF_STATUS extract_twt_del_dialog_comp_event_tlv(
 	return QDF_STATUS_SUCCESS;
 }
 
+static enum WMI_HOST_PAUSE_TWT_STATUS
+wmi_twt_pause_status_to_host_twt_status(WMI_PAUSE_TWT_STATUS_T status)
+{
+	switch (status) {
+	case WMI_PAUSE_TWT_STATUS_OK:
+		return WMI_HOST_PAUSE_TWT_STATUS_OK;
+	case WMI_PAUSE_TWT_STATUS_DIALOG_ID_NOT_EXIST:
+		return WMI_HOST_PAUSE_TWT_STATUS_DIALOG_ID_NOT_EXIST;
+	case WMI_PAUSE_TWT_STATUS_INVALID_PARAM:
+		return WMI_HOST_PAUSE_TWT_STATUS_INVALID_PARAM;
+	case WMI_PAUSE_TWT_STATUS_DIALOG_ID_BUSY:
+		return WMI_HOST_PAUSE_TWT_STATUS_DIALOG_ID_BUSY;
+	case WMI_PAUSE_TWT_STATUS_NO_RESOURCE:
+		return WMI_HOST_PAUSE_TWT_STATUS_NO_RESOURCE;
+	case WMI_PAUSE_TWT_STATUS_NO_ACK:
+		return WMI_HOST_PAUSE_TWT_STATUS_NO_ACK;
+	case WMI_PAUSE_TWT_STATUS_UNKNOWN_ERROR:
+		return WMI_HOST_PAUSE_TWT_STATUS_UNKNOWN_ERROR;
+	case WMI_PAUSE_TWT_STATUS_ALREADY_PAUSED:
+		return WMI_HOST_PAUSE_TWT_STATUS_ALREADY_PAUSED;
+	default:
+		return WMI_HOST_PAUSE_TWT_STATUS_UNKNOWN_ERROR;
+	}
+}
+
 static QDF_STATUS extract_twt_pause_dialog_comp_event_tlv(
 		wmi_unified_t wmi_handle,
 		uint8_t *evt_buf,
@@ -588,7 +650,54 @@ static QDF_STATUS extract_twt_pause_dialog_comp_event_tlv(
 
 	params->vdev_id = ev->vdev_id;
 	WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->peer_macaddr, params->peer_macaddr);
-	params->status = ev->status;
+	params->status = wmi_twt_pause_status_to_host_twt_status(ev->status);
+	params->dialog_id = ev->dialog_id;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+static enum WMI_HOST_NUDGE_TWT_STATUS
+wmi_twt_nudge_status_to_host_twt_status(WMI_TWT_NUDGE_STATUS_T status)
+{
+	switch (status) {
+	case WMI_NUDGE_TWT_STATUS_OK:
+		return WMI_HOST_NUDGE_TWT_STATUS_OK;
+	case WMI_NUDGE_TWT_STATUS_DIALOG_ID_NOT_EXIST:
+		return WMI_HOST_NUDGE_TWT_STATUS_DIALOG_ID_NOT_EXIST;
+	case WMI_NUDGE_TWT_STATUS_INVALID_PARAM:
+		return WMI_HOST_NUDGE_TWT_STATUS_INVALID_PARAM;
+	case WMI_NUDGE_TWT_STATUS_DIALOG_ID_BUSY:
+		return WMI_HOST_NUDGE_TWT_STATUS_DIALOG_ID_BUSY;
+	case WMI_NUDGE_TWT_STATUS_NO_RESOURCE:
+		return WMI_HOST_NUDGE_TWT_STATUS_NO_RESOURCE;
+	case WMI_NUDGE_TWT_STATUS_NO_ACK:
+		return WMI_HOST_NUDGE_TWT_STATUS_NO_ACK;
+	case WMI_NUDGE_TWT_STATUS_UNKNOWN_ERROR:
+		return WMI_HOST_NUDGE_TWT_STATUS_UNKNOWN_ERROR;
+	default:
+		return WMI_HOST_NUDGE_TWT_STATUS_UNKNOWN_ERROR;
+	}
+}
+
+static QDF_STATUS extract_twt_nudge_dialog_comp_event_tlv(
+		wmi_unified_t wmi_handle,
+		uint8_t *evt_buf,
+		struct wmi_twt_nudge_dialog_complete_event_param *params)
+{
+	WMI_TWT_NUDGE_DIALOG_COMPLETE_EVENTID_param_tlvs *param_buf;
+	wmi_twt_nudge_dialog_complete_event_fixed_param *ev;
+
+	param_buf = (WMI_TWT_NUDGE_DIALOG_COMPLETE_EVENTID_param_tlvs *)evt_buf;
+	if (!param_buf) {
+		wmi_err("evt_buf is NULL");
+		return QDF_STATUS_E_INVAL;
+	}
+
+	ev = param_buf->fixed_param;
+
+	params->vdev_id = ev->vdev_id;
+	WMI_MAC_ADDR_TO_CHAR_ARRAY(&ev->peer_macaddr, params->peer_macaddr);
+	params->status = wmi_twt_nudge_status_to_host_twt_status(ev->status);
 	params->dialog_id = ev->dialog_id;
 
 	return QDF_STATUS_SUCCESS;
@@ -793,6 +902,7 @@ void wmi_twt_attach_tlv(wmi_unified_t wmi_handle)
 	ops->send_twt_add_dialog_cmd = send_twt_add_dialog_cmd_tlv;
 	ops->send_twt_del_dialog_cmd = send_twt_del_dialog_cmd_tlv;
 	ops->send_twt_pause_dialog_cmd = send_twt_pause_dialog_cmd_tlv;
+	ops->send_twt_nudge_dialog_cmd = send_twt_nudge_dialog_cmd_tlv;
 	ops->send_twt_resume_dialog_cmd = send_twt_resume_dialog_cmd_tlv;
 	ops->extract_twt_enable_comp_event = extract_twt_enable_comp_event_tlv;
 	ops->extract_twt_disable_comp_event =
@@ -805,6 +915,8 @@ void wmi_twt_attach_tlv(wmi_unified_t wmi_handle)
 				extract_twt_del_dialog_comp_event_tlv;
 	ops->extract_twt_pause_dialog_comp_event =
 				extract_twt_pause_dialog_comp_event_tlv;
+	ops->extract_twt_nudge_dialog_comp_event =
+				extract_twt_nudge_dialog_comp_event_tlv;
 	ops->extract_twt_resume_dialog_comp_event =
 				extract_twt_resume_dialog_comp_event_tlv;
 	ops->extract_twt_session_stats_event =