qcacld-3.0: Add support for TWT ack event

In case if TWT command (i.e setup, terminate, pause, resume,
nudge) comes from userspace and if the firmware is in below mode
1. scan in progress
2. roam in progress
3. CSA is in progress
4. any other error
then the command needs to be rejected in userspace context

Synchronize the TWT commands so that whenever command goes from
driver to firmware, then driver will receive ack event first
followed by respective event (i.e add dialog, delete dialog,
pause, resume, nudge) with below condition
1. If driver receives the ack event as successful then driver
   waits for this ack event, respective event with status of the
   TWT action frame over the air is expected.
2. If driver receives the ack event as failure then it will
   reject the TWT command request in userspace context.

Change-Id: Ib68b89b74b5e44f28106884efd7412cee49f5bd8
CRs-Fixed: 2987978
Цей коміт міститься в:
Jyoti Kumari
2021-06-21 21:14:33 +05:30
зафіксовано Madan Koyyalamudi
джерело 3ca620bc89
коміт f93a29459a
8 змінених файлів з 407 додано та 72 видалено

Переглянути файл

@@ -219,6 +219,21 @@ QDF_STATUS ucfg_mlme_set_twt_requestor_flag(struct wlan_objmgr_psoc *psoc,
QDF_STATUS ucfg_mlme_set_twt_responder_flag(struct wlan_objmgr_psoc *psoc,
bool val);
/**
* ucfg_mlme_reset_twt_init_context() - Reset twt init if ack fail
* This is to handle back to back command. If ack failed for previous
* command and again new commad comes then init context should reset to
* allow new command.
* @psoc: pointer to psoc object
* @peer_mac: peer mac address
* @dialog_id: dialog id
*
* Return: QDF Status
*/
QDF_STATUS ucfg_mlme_reset_twt_init_context(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac,
uint8_t dialog_id);
/**
* ucfg_mlme_is_twt_setup_in_progress() - Get TWT setup in progress for
* given dialog id
@@ -624,6 +639,14 @@ ucfg_mlme_set_twt_responder_flag(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_E_NOSUPPORT;
}
static inline QDF_STATUS
ucfg_mlme_reset_twt_init_context(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac,
uint8_t dialog_id)
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline
bool ucfg_mlme_is_flexible_twt_enabled(struct wlan_objmgr_psoc *psoc)
{

Переглянути файл

@@ -117,6 +117,18 @@ ucfg_mlme_set_twt_responder_flag(struct wlan_objmgr_psoc *psoc, bool val)
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
ucfg_mlme_reset_twt_init_context(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_macaddr,
uint8_t dialog_id)
{
mlme_set_twt_command_in_progress(psoc, peer_macaddr, dialog_id,
WLAN_TWT_NONE);
mlme_init_twt_context(psoc, peer_macaddr, dialog_id);
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
ucfg_mlme_get_twt_congestion_timeout(struct wlan_objmgr_psoc *psoc,
uint32_t *val)