From b1faf3e88d03fd987ada48fe0a5c58dc9926389c Mon Sep 17 00:00:00 2001 From: Deeksha Gupta Date: Thu, 25 Mar 2021 16:46:11 +0530 Subject: [PATCH] qcacmn: Add new reason codes for TWT session The firmware sends new reason codes due to roaming in progress and channel switch. Add new reason code for TWT session. Change-Id: I3820ac74910e382f5a029de85f8e0915220bb996 CRs-Fixed: 2908384 --- wmi/inc/wmi_unified_twt_param.h | 110 ++++++++++++++++++-------------- wmi/src/wmi_unified_twt_tlv.c | 70 +++++++++++++++++++- 2 files changed, 129 insertions(+), 51 deletions(-) diff --git a/wmi/inc/wmi_unified_twt_param.h b/wmi/inc/wmi_unified_twt_param.h index 31209dcadb..018c839932 100644 --- a/wmi/inc/wmi_unified_twt_param.h +++ b/wmi/inc/wmi_unified_twt_param.h @@ -291,22 +291,24 @@ struct wmi_twt_add_dialog_param { }; /* enum - status code of adding TWT dialog - * WMI_HOST_ADD_TWT_STATUS_OK: adding TWT dialog successfully completed - * WMI_HOST_ADD_TWT_STATUS_TWT_NOT_ENABLED: TWT not enabled - * WMI_HOST_ADD_TWT_STATUS_USED_DIALOG_ID: TWT dialog ID is already used - * WMI_HOST_ADD_TWT_STATUS_INVALID_PARAM: invalid parameters - * WMI_HOST_ADD_TWT_STATUS_NOT_READY: FW not ready - * WMI_HOST_ADD_TWT_STATUS_NO_RESOURCE: FW resource exhausted - * WMI_HOST_ADD_TWT_STATUS_NO_ACK: peer AP/STA did not ACK the - * request/response frame - * WMI_HOST_ADD_TWT_STATUS_NO_RESPONSE: peer AP did not send the response frame - * WMI_HOST_ADD_TWT_STATUS_DENIED: AP did not accept the request - * WMI_HOST_ADD_TWT_STATUS_UNKNOWN_ERROR: adding TWT dialog failed with - * an unknown reason - * WMI_HOST_ADD_TWT_STATUS_AP_PARAMS_NOT_IN_RANGE: peer AP wake interval, - * duration not in range - * WMI_HOST_ADD_TWT_STATUS_AP_IE_VALIDATION_FAILED: - * peer AP IE Validation Failed + * @WMI_HOST_ADD_TWT_STATUS_OK: adding TWT dialog successfully completed + * @WMI_HOST_ADD_TWT_STATUS_TWT_NOT_ENABLED: TWT not enabled + * @WMI_HOST_ADD_TWT_STATUS_USED_DIALOG_ID: TWT dialog ID is already used + * @WMI_HOST_ADD_TWT_STATUS_INVALID_PARAM: invalid parameters + * @WMI_HOST_ADD_TWT_STATUS_NOT_READY: FW not ready + * @WMI_HOST_ADD_TWT_STATUS_NO_RESOURCE: FW resource exhausted + * @WMI_HOST_ADD_TWT_STATUS_NO_ACK: peer AP/STA did not ACK the + * request/response frame + * @WMI_HOST_ADD_TWT_STATUS_NO_RESPONSE: peer AP did not send the response frame + * @WMI_HOST_ADD_TWT_STATUS_DENIED: AP did not accept the request + * @WMI_HOST_ADD_TWT_STATUS_UNKNOWN_ERROR: adding TWT dialog failed with + * an unknown reason + * @WMI_HOST_ADD_TWT_STATUS_AP_PARAMS_NOT_IN_RANGE: peer AP wake interval, + * duration not in range + * @WMI_HOST_ADD_TWT_STATUS_AP_IE_VALIDATION_FAILED: peer AP IE Validation + * Failed + * @WMI_HOST_ADD_TWT_STATUS_ROAM_IN_PROGRESS: Roaming in progress + * @WMI_HOST_ADD_TWT_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress */ enum WMI_HOST_ADD_TWT_STATUS { WMI_HOST_ADD_TWT_STATUS_OK, @@ -320,7 +322,9 @@ enum WMI_HOST_ADD_TWT_STATUS { WMI_HOST_ADD_TWT_STATUS_DENIED, WMI_HOST_ADD_TWT_STATUS_UNKNOWN_ERROR, WMI_HOST_ADD_TWT_STATUS_AP_PARAMS_NOT_IN_RANGE, - WMI_HOST_ADD_TWT_STATUS_AP_IE_VALIDATION_FAILED + WMI_HOST_ADD_TWT_STATUS_AP_IE_VALIDATION_FAILED, + WMI_HOST_ADD_TWT_STATUS_ROAM_IN_PROGRESS, + WMI_HOST_ADD_TWT_STATUS_CHAN_SW_IN_PROGRESS, }; /** @@ -407,6 +411,7 @@ struct wmi_twt_del_dialog_param { * @WMI_HOST_DEL_TWT_STATUS_ROAMING: TWT teardown due to roaming. * @WMI_HOST_DEL_TWT_STATUS_CONCURRENCY: TWT session teardown due to * concurrent session comming up. + * @WMI_HOST_DEL_TWT_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress */ enum WMI_HOST_DEL_TWT_STATUS { WMI_HOST_DEL_TWT_STATUS_OK, @@ -419,6 +424,7 @@ enum WMI_HOST_DEL_TWT_STATUS { WMI_HOST_DEL_TWT_STATUS_PEER_INIT_TEARDOWN, WMI_HOST_DEL_TWT_STATUS_ROAMING, WMI_HOST_DEL_TWT_STATUS_CONCURRENCY, + WMI_HOST_DEL_TWT_STATUS_CHAN_SW_IN_PROGRESS, }; /** @@ -468,17 +474,18 @@ struct wmi_twt_nudge_dialog_cmd_param { }; /* 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 - * WMI_HOST_PAUSE_TWT_STATUS_INVALID_PARAM: invalid parameters - * WMI_HOST_PAUSE_TWT_STATUS_DIALOG_ID_BUSY: FW is in the process of handling - * this dialog - * WMI_HOST_PAUSE_TWT_STATUS_NO_RESOURCE: FW resource exhausted - * WMI_HOST_PAUSE_TWT_STATUS_NO_ACK: peer AP/STA did not ACK the - * request/response frame - * WMI_HOST_PAUSE_TWT_STATUS_UNKNOWN_ERROR: pausing TWT dialog failed with an - * unknown reason - * WMI_HOST_PAUSE_TWT_STATUS_ALREADY_PAUSED: TWT dialog already in paused state + * @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 + * @WMI_HOST_PAUSE_TWT_STATUS_INVALID_PARAM: invalid parameters + * @WMI_HOST_PAUSE_TWT_STATUS_DIALOG_ID_BUSY: FW is in the process of handling + * this dialog + * @WMI_HOST_PAUSE_TWT_STATUS_NO_RESOURCE: FW resource exhausted + * @WMI_HOST_PAUSE_TWT_STATUS_NO_ACK: peer AP/STA did not ACK the + * request/response frame + * @WMI_HOST_PAUSE_TWT_STATUS_UNKNOWN_ERROR: pausing TWT dialog failed with an + * unknown reason + * @WMI_HOST_PAUSE_TWT_STATUS_ALREADY_PAUSED: TWT dialog already in paused state + * @WMI_HOST_PAUSE_TWT_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress */ enum WMI_HOST_PAUSE_TWT_STATUS { WMI_HOST_PAUSE_TWT_STATUS_OK, @@ -489,6 +496,7 @@ enum WMI_HOST_PAUSE_TWT_STATUS { WMI_HOST_PAUSE_TWT_STATUS_NO_ACK, WMI_HOST_PAUSE_TWT_STATUS_UNKNOWN_ERROR, WMI_HOST_PAUSE_TWT_STATUS_ALREADY_PAUSED, + WMI_HOST_PAUSE_TWT_STATUS_CHAN_SW_IN_PROGRESS, }; /** @@ -506,16 +514,17 @@ struct wmi_twt_pause_dialog_complete_event_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 + * @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 + * @WMI_HOST_NUDGE_TWT_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress */ enum WMI_HOST_NUDGE_TWT_STATUS { WMI_HOST_NUDGE_TWT_STATUS_OK, @@ -525,6 +534,7 @@ enum WMI_HOST_NUDGE_TWT_STATUS { WMI_HOST_NUDGE_TWT_STATUS_NO_RESOURCE, WMI_HOST_NUDGE_TWT_STATUS_NO_ACK, WMI_HOST_NUDGE_TWT_STATUS_UNKNOWN_ERROR, + WMI_HOST_NUDGE_TWT_STATUS_CHAN_SW_IN_PROGRESS, }; /** @@ -563,17 +573,18 @@ struct wmi_twt_resume_dialog_cmd_param { }; /* enum WMI_HOST_RESUME_TWT_STATUS - status code of resuming TWT dialog - * WMI_HOST_RESUME_TWT_STATUS_OK: resuming TWT dialog successfully completed - * WMI_HOST_RESUME_TWT_STATUS_DIALOG_ID_NOT_EXIST: TWT dialog ID not exists - * WMI_HOST_RESUME_TWT_STATUS_INVALID_PARAM: invalid parameters - * WMI_HOST_RESUME_TWT_STATUS_DIALOG_ID_BUSY: FW is in the process of handling - * this dialog - * WMI_HOST_RESUME_TWT_STATUS_NOT_PAUSED: dialog not paused currently - * WMI_HOST_RESUME_TWT_STATUS_NO_RESOURCE: FW resource exhausted - * WMI_HOST_RESUME_TWT_STATUS_NO_ACK: peer AP/STA did not ACK the - * request/response frame - * WMI_HOST_RESUME_TWT_STATUS_UNKNOWN_ERROR: resuming TWT dialog failed with an - * unknown reason + * @WMI_HOST_RESUME_TWT_STATUS_OK: resuming TWT dialog successfully completed + * @WMI_HOST_RESUME_TWT_STATUS_DIALOG_ID_NOT_EXIST: TWT dialog ID not exists + * @WMI_HOST_RESUME_TWT_STATUS_INVALID_PARAM: invalid parameters + * @WMI_HOST_RESUME_TWT_STATUS_DIALOG_ID_BUSY: FW is in the process of handling + * this dialog + * @WMI_HOST_RESUME_TWT_STATUS_NOT_PAUSED: dialog not paused currently + * @WMI_HOST_RESUME_TWT_STATUS_NO_RESOURCE: FW resource exhausted + * @WMI_HOST_RESUME_TWT_STATUS_NO_ACK: peer AP/STA did not ACK the + * request/response frame + * @WMI_HOST_RESUME_TWT_STATUS_UNKNOWN_ERROR: resuming TWT dialog failed with an + * unknown reason + * @WMI_HOST_RESUME_TWT_STATUS_CHAN_SW_IN_PROGRESS: Channel switch in progress */ enum WMI_HOST_RESUME_TWT_STATUS { WMI_HOST_RESUME_TWT_STATUS_OK, @@ -584,6 +595,7 @@ enum WMI_HOST_RESUME_TWT_STATUS { WMI_HOST_RESUME_TWT_STATUS_NO_RESOURCE, WMI_HOST_RESUME_TWT_STATUS_NO_ACK, WMI_HOST_RESUME_TWT_STATUS_UNKNOWN_ERROR, + WMI_HOST_RESUME_TWT_STATUS_CHAN_SW_IN_PROGRESS, }; /** diff --git a/wmi/src/wmi_unified_twt_tlv.c b/wmi/src/wmi_unified_twt_tlv.c index a189f7eae5..6f17e4802d 100644 --- a/wmi/src/wmi_unified_twt_tlv.c +++ b/wmi/src/wmi_unified_twt_tlv.c @@ -469,6 +469,41 @@ static QDF_STATUS extract_twt_disable_comp_event_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +static enum WMI_HOST_ADD_TWT_STATUS +wmi_get_converted_twt_add_dialog_status(WMI_ADD_TWT_STATUS_T tgt_status) +{ + switch (tgt_status) { + case WMI_ADD_TWT_STATUS_OK: + return WMI_HOST_ADD_TWT_STATUS_OK; + case WMI_ADD_TWT_STATUS_TWT_NOT_ENABLED: + return WMI_HOST_ADD_TWT_STATUS_TWT_NOT_ENABLED; + case WMI_ADD_TWT_STATUS_USED_DIALOG_ID: + return WMI_HOST_ADD_TWT_STATUS_USED_DIALOG_ID; + case WMI_ADD_TWT_STATUS_INVALID_PARAM: + return WMI_HOST_ADD_TWT_STATUS_INVALID_PARAM; + case WMI_ADD_TWT_STATUS_NOT_READY: + return WMI_HOST_ADD_TWT_STATUS_NOT_READY; + case WMI_ADD_TWT_STATUS_NO_RESOURCE: + return WMI_HOST_ADD_TWT_STATUS_NO_RESOURCE; + case WMI_ADD_TWT_STATUS_NO_ACK: + return WMI_HOST_ADD_TWT_STATUS_NO_ACK; + case WMI_ADD_TWT_STATUS_NO_RESPONSE: + return WMI_HOST_ADD_TWT_STATUS_NO_RESPONSE; + case WMI_ADD_TWT_STATUS_DENIED: + return WMI_HOST_ADD_TWT_STATUS_DENIED; + case WMI_ADD_TWT_STATUS_AP_PARAMS_NOT_IN_RANGE: + return WMI_HOST_ADD_TWT_STATUS_AP_PARAMS_NOT_IN_RANGE; + case WMI_ADD_TWT_STATUS_AP_IE_VALIDATION_FAILED: + return WMI_HOST_ADD_TWT_STATUS_AP_IE_VALIDATION_FAILED; + case WMI_ADD_TWT_STATUS_ROAM_IN_PROGRESS: + return WMI_HOST_ADD_TWT_STATUS_ROAM_IN_PROGRESS; + case WMI_ADD_TWT_STATUS_CHAN_SW_IN_PROGRESS: + return WMI_HOST_ADD_TWT_STATUS_CHAN_SW_IN_PROGRESS; + default: + return WMI_HOST_ADD_TWT_STATUS_UNKNOWN_ERROR; + } +} + /** * extract_twt_add_dialog_comp_event_tlv - Extacts twt add dialog complete wmi * event from firmware @@ -496,7 +531,7 @@ static QDF_STATUS extract_twt_add_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_get_converted_twt_add_dialog_status(ev->status); params->dialog_id = ev->dialog_id; params->num_additional_twt_params = param_buf->num_twt_params; @@ -601,6 +636,8 @@ wmi_get_converted_twt_del_dialog_status(WMI_DEL_TWT_STATUS_T tgt_status) return WMI_HOST_DEL_TWT_STATUS_ROAMING; case WMI_DEL_TWT_STATUS_CONCURRENCY: return WMI_HOST_DEL_TWT_STATUS_CONCURRENCY; + case WMI_DEL_TWT_STATUS_CHAN_SW_IN_PROGRESS: + return WMI_HOST_DEL_TWT_STATUS_CHAN_SW_IN_PROGRESS; default: return WMI_HOST_DEL_TWT_STATUS_UNKNOWN_ERROR; } @@ -652,6 +689,8 @@ wmi_twt_pause_status_to_host_twt_status(WMI_PAUSE_TWT_STATUS_T status) return WMI_HOST_PAUSE_TWT_STATUS_UNKNOWN_ERROR; case WMI_PAUSE_TWT_STATUS_ALREADY_PAUSED: return WMI_HOST_PAUSE_TWT_STATUS_ALREADY_PAUSED; + case WMI_PAUSE_TWT_STATUS_CHAN_SW_IN_PROGRESS: + return WMI_HOST_PAUSE_TWT_STATUS_CHAN_SW_IN_PROGRESS; default: return WMI_HOST_PAUSE_TWT_STATUS_UNKNOWN_ERROR; } @@ -699,6 +738,8 @@ wmi_twt_nudge_status_to_host_twt_status(WMI_TWT_NUDGE_STATUS_T status) return WMI_HOST_NUDGE_TWT_STATUS_NO_ACK; case WMI_NUDGE_TWT_STATUS_UNKNOWN_ERROR: return WMI_HOST_NUDGE_TWT_STATUS_UNKNOWN_ERROR; + case WMI_NUDGE_TWT_STATUS_CHAN_SW_IN_PROGRESS: + return WMI_HOST_NUDGE_TWT_STATUS_CHAN_SW_IN_PROGRESS; default: return WMI_HOST_NUDGE_TWT_STATUS_UNKNOWN_ERROR; } @@ -734,6 +775,31 @@ static QDF_STATUS extract_twt_nudge_dialog_comp_event_tlv( return QDF_STATUS_SUCCESS; } +static enum WMI_HOST_RESUME_TWT_STATUS +wmi_get_converted_twt_resume_dialog_status(WMI_RESUME_TWT_STATUS_T tgt_status) +{ + switch (tgt_status) { + case WMI_RESUME_TWT_STATUS_OK: + return WMI_HOST_RESUME_TWT_STATUS_OK; + case WMI_RESUME_TWT_STATUS_DIALOG_ID_NOT_EXIST: + return WMI_HOST_RESUME_TWT_STATUS_DIALOG_ID_NOT_EXIST; + case WMI_RESUME_TWT_STATUS_INVALID_PARAM: + return WMI_HOST_RESUME_TWT_STATUS_INVALID_PARAM; + case WMI_RESUME_TWT_STATUS_DIALOG_ID_BUSY: + return WMI_HOST_RESUME_TWT_STATUS_DIALOG_ID_BUSY; + case WMI_RESUME_TWT_STATUS_NOT_PAUSED: + return WMI_HOST_RESUME_TWT_STATUS_NOT_PAUSED; + case WMI_RESUME_TWT_STATUS_NO_RESOURCE: + return WMI_HOST_RESUME_TWT_STATUS_NO_RESOURCE; + case WMI_RESUME_TWT_STATUS_NO_ACK: + return WMI_HOST_RESUME_TWT_STATUS_NO_ACK; + case WMI_RESUME_TWT_STATUS_CHAN_SW_IN_PROGRESS: + return WMI_HOST_RESUME_TWT_STATUS_CHAN_SW_IN_PROGRESS; + default: + return WMI_HOST_RESUME_TWT_STATUS_UNKNOWN_ERROR; + } +} + static QDF_STATUS extract_twt_resume_dialog_comp_event_tlv( wmi_unified_t wmi_handle, uint8_t *evt_buf, @@ -753,7 +819,7 @@ static QDF_STATUS extract_twt_resume_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_get_converted_twt_resume_dialog_status(ev->status); params->dialog_id = ev->dialog_id; return QDF_STATUS_SUCCESS;