From 7a269292f587d98fd934b75da2438f689c8a0b68 Mon Sep 17 00:00:00 2001 From: Paul Zhang Date: Tue, 15 Dec 2020 10:58:26 +0800 Subject: [PATCH] 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 --- wmi/inc/wmi_unified_param.h | 1 + wmi/inc/wmi_unified_priv.h | 7 ++ wmi/inc/wmi_unified_twt_api.h | 25 +++++++ wmi/inc/wmi_unified_twt_param.h | 101 +++++++++++++++++++++++----- wmi/src/wmi_unified_tlv.c | 2 + wmi/src/wmi_unified_twt_api.c | 23 +++++++ wmi/src/wmi_unified_twt_tlv.c | 114 +++++++++++++++++++++++++++++++- 7 files changed, 255 insertions(+), 18 deletions(-) diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index e3c3801fb82d..9ed67a758357 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -4778,6 +4778,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, wmi_twt_notify_event_id, #endif diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index b05fea32db15..3a2a0543b6dd 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -2228,6 +2228,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); @@ -2266,6 +2269,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); diff --git a/wmi/inc/wmi_unified_twt_api.h b/wmi/inc/wmi_unified_twt_api.h index 0da4fa3899b3..7a2ab5307aa1 100644 --- a/wmi/inc/wmi_unified_twt_api.h +++ b/wmi/inc/wmi_unified_twt_api.h @@ -80,6 +80,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 @@ -202,6 +213,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 diff --git a/wmi/inc/wmi_unified_twt_param.h b/wmi/inc/wmi_unified_twt_param.h index f4f180ff250a..88731bf20686 100644 --- a/wmi/inc/wmi_unified_twt_param.h +++ b/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) @@ -349,7 +353,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 @@ -364,7 +369,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 @@ -406,7 +412,8 @@ enum WMI_HOST_DEL_TWT_STATUS { WMI_HOST_DEL_TWT_STATUS_ROAMING, }; -/** 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 @@ -423,7 +430,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 @@ -434,6 +442,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 @@ -458,7 +482,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 @@ -468,10 +493,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; }; -/** struct wmi_twt_resume_dialog_cmd_param - +/* 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 - * @vdev_id: VDEV identifier * @peer_macaddr: Peer mac address * @dialog_id: TWT dialog ID @@ -511,7 +573,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 @@ -533,7 +596,8 @@ struct wmi_twt_notify_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 @@ -569,7 +633,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 @@ -582,7 +647,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 @@ -618,7 +684,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 diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 93aa89e5d5ed..04175ce09ef2 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -15073,6 +15073,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; event_ids[wmi_twt_notify_event_id] = diff --git a/wmi/src/wmi_unified_twt_api.c b/wmi/src/wmi_unified_twt_api.c index 6899769d4ecb..fb53feca9765 100644 --- a/wmi/src/wmi_unified_twt_api.c +++ b/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, diff --git a/wmi/src/wmi_unified_twt_tlv.c b/wmi/src/wmi_unified_twt_tlv.c index 3f756ea74859..1deb1247e1e1 100644 --- a/wmi/src/wmi_unified_twt_tlv.c +++ b/wmi/src/wmi_unified_twt_tlv.c @@ -280,6 +280,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) { @@ -603,6 +640,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, @@ -621,7 +683,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; @@ -848,6 +957,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 = @@ -860,6 +970,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 =