qcacld-3.0: Add support for TWT session state in status query

Add support to include the session state in TWT status query
response. Session state is set to active once setup is
complete and when resume response event is received from
firmware. Session state is suspend when suspend response
event is received from firmware.

Change-Id: I1f47947c05f80bd85199fd81b951dc54deacdc09
CRs-Fixed: 2854500
This commit is contained in:
Pragaspathi Thilagaraj
2021-01-04 02:01:18 +05:30
committed by snandini
parent f3b6093c65
commit ef10a16a2a
6 changed files with 194 additions and 39 deletions

View File

@@ -85,23 +85,28 @@ bool mlme_is_twt_setup_done(struct wlan_objmgr_psoc *psoc,
* mlme_set_twt_session_state() - Set the TWT session state for the given dialog
* id in TWT context
* @peer: Pointer to peer object
* @peer_mac: Pointer to peer mac address
* @dialog_id: Dialog id
* @state: TWT session state
*
* Return: None
*/
void mlme_set_twt_session_state(struct wlan_objmgr_peer *peer,
void mlme_set_twt_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac,
uint8_t dialog_id,
enum wlan_twt_session_state state);
/**
* mlme_get_twt_session_state() - Get TWT session state for given dialog id
* @peer: Pointer to peer object
* @psoc: Pointer to psoc object
* @peer_mac: Pointer to peer mac address
* @dialog_id: Dialog id
*
* Return: TWT session state.
*/
enum wlan_twt_session_state
mlme_get_twt_session_state(struct wlan_objmgr_peer *peer, uint8_t dialog_id);
mlme_get_twt_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac, uint8_t dialog_id);
/**
* mlme_get_twt_peer_capabilities - Get TWT peer capabilities

View File

@@ -269,16 +269,26 @@ bool mlme_twt_is_notify_done(struct wlan_objmgr_psoc *psoc,
return notify_done;
}
void mlme_set_twt_session_state(struct wlan_objmgr_peer *peer,
void mlme_set_twt_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac,
uint8_t dialog_id,
enum wlan_twt_session_state state)
{
struct wlan_objmgr_peer *peer;
struct peer_mlme_priv_obj *peer_priv;
uint8_t i;
peer = wlan_objmgr_get_peer_by_mac(psoc, peer_mac->bytes,
WLAN_MLME_NB_ID);
if (!peer) {
mlme_legacy_err("Peer object not found");
return;
}
peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
WLAN_UMAC_COMP_MLME);
if (!peer_priv) {
wlan_objmgr_peer_release_ref(peer, WLAN_MLME_NB_ID);
mlme_err(" peer mlme component object is NULL");
return;
}
@@ -290,27 +300,43 @@ void mlme_set_twt_session_state(struct wlan_objmgr_peer *peer,
break;
}
}
wlan_objmgr_peer_release_ref(peer, WLAN_MLME_NB_ID);
}
enum wlan_twt_session_state
mlme_get_twt_session_state(struct wlan_objmgr_peer *peer,
uint8_t dialog_id)
mlme_get_twt_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac, uint8_t dialog_id)
{
struct wlan_objmgr_peer *peer;
struct peer_mlme_priv_obj *peer_priv;
uint8_t i;
peer = wlan_objmgr_get_peer_by_mac(psoc, peer_mac->bytes,
WLAN_MLME_NB_ID);
if (!peer) {
mlme_legacy_err("Peer object not found");
return WLAN_TWT_SETUP_STATE_NOT_ESTABLISHED;
}
peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
WLAN_UMAC_COMP_MLME);
if (!peer_priv) {
wlan_objmgr_peer_release_ref(peer, WLAN_MLME_NB_ID);
mlme_legacy_err(" peer mlme object is NULL");
return WLAN_TWT_SETUP_STATE_NOT_ESTABLISHED;
}
for (i = 0; i < peer_priv->twt_ctx.num_twt_sessions; i++) {
if (peer_priv->twt_ctx.session_info[i].dialog_id == dialog_id)
if (peer_priv->twt_ctx.session_info[i].dialog_id == dialog_id &&
dialog_id != WLAN_ALL_SESSIONS_DIALOG_ID) {
wlan_objmgr_peer_release_ref(peer, WLAN_MLME_NB_ID);
return peer_priv->twt_ctx.session_info[i].state;
}
}
wlan_objmgr_peer_release_ref(peer, WLAN_MLME_NB_ID);
return WLAN_TWT_SETUP_STATE_NOT_ESTABLISHED;
}

View File

@@ -376,6 +376,40 @@ ucfg_mlme_set_twt_statistics_tgt_cap(struct wlan_objmgr_psoc *psoc, bool val);
*/
QDF_STATUS
ucfg_mlme_get_twt_statistics_tgt_cap(struct wlan_objmgr_psoc *psoc, bool *val);
/**
* ucfg_mlme_set_twt_session_state() - Set TWT session state
* @psoc: Pointer to global psoc object
* @peer_mac: Pointer to peer mac address
* @dialog_id: TWT session dialog id
* @state: TWT state
*
* Return: None
*/
static inline
void ucfg_mlme_set_twt_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac,
uint8_t dialog_id,
enum wlan_twt_session_state state)
{
mlme_set_twt_session_state(psoc, peer_mac, dialog_id, state);
}
/**
* ucfg_mlme_get_twt_session_state() - Get TWT session state
* @psoc: Pointer to global psoc object
* @peer_mac: Pointer to peer mac address
* @dialog_id: TWT session dialog id
*
* Return: enum wlan_twt_session_state
*/
static inline enum wlan_twt_session_state
ucfg_mlme_get_twt_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac,
uint8_t dialog_id)
{
return mlme_get_twt_session_state(psoc, peer_mac, dialog_id);
}
#else
static inline QDF_STATUS
ucfg_mlme_get_twt_requestor(struct wlan_objmgr_psoc *psoc,
@@ -580,5 +614,20 @@ ucfg_mlme_set_twt_statistics_tgt_cap(struct wlan_objmgr_psoc *psoc, bool val)
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline
void ucfg_mlme_set_twt_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac,
uint8_t dialog_id,
enum wlan_twt_session_state state)
{}
static inline enum wlan_twt_session_state
ucfg_mlme_get_twt_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac,
uint8_t dialog_id)
{
return WLAN_TWT_SETUP_STATE_NOT_ESTABLISHED;
}
#endif /* defined(WLAN_SUPPORT_TWT) && defined(WLAN_FEATURE_11AX) */
#endif /* _WLAN_MLME_TWT_UCFG_API_H_ */