qcacld-3.0: Add support for TWT get_status

In TWT component, add support for TWT get_status command
i.e when host wants to query current status of TWT sessions.

Change-Id: Ib43009e5f6a90c589db25f78e1ca43563f2950fe
CRs-Fixed: 3085483
This commit is contained in:
Srinivas Girigowda
2021-12-13 21:21:07 -08:00
committed by Madan Koyyalamudi
parent 8d529074a0
commit 22c05ef081
7 changed files with 613 additions and 3 deletions

View File

@@ -804,7 +804,6 @@ end:
*
* Return: Return true if TWT session exists for given dialog ID.
*/
static
bool wlan_twt_is_setup_done(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac, uint8_t dialog_id)
{
@@ -1602,6 +1601,47 @@ wlan_twt_set_session_state(struct wlan_objmgr_psoc *psoc,
wlan_objmgr_peer_release_ref(peer, WLAN_TWT_ID);
}
enum wlan_twt_session_state
wlan_twt_get_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac, uint8_t dialog_id)
{
struct wlan_objmgr_peer *peer;
struct twt_peer_priv_obj *peer_priv;
uint8_t i;
peer = wlan_objmgr_get_peer_by_mac(psoc, peer_mac->bytes,
WLAN_TWT_ID);
if (!peer) {
twt_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_TWT);
if (!peer_priv) {
wlan_objmgr_peer_release_ref(peer, WLAN_TWT_ID);
twt_err(" peer twt component object is NULL");
return WLAN_TWT_SETUP_STATE_NOT_ESTABLISHED;
}
qdf_mutex_acquire(&peer_priv->twt_peer_lock);
for (i = 0; i < peer_priv->num_twt_sessions; i++) {
if (peer_priv->session_info[i].dialog_id == dialog_id &&
dialog_id != TWT_ALL_SESSIONS_DIALOG_ID) {
qdf_mutex_release(&peer_priv->twt_peer_lock);
wlan_objmgr_peer_release_ref(peer, WLAN_TWT_ID);
return peer_priv->session_info[i].state;
}
}
qdf_mutex_release(&peer_priv->twt_peer_lock);
wlan_objmgr_peer_release_ref(peer, WLAN_TWT_ID);
return WLAN_TWT_SETUP_STATE_NOT_ESTABLISHED;
}
/**
* wlan_twt_process_renego_failure() - Process TWT re-negotiation failure
* @psoc: psoc

View File

@@ -239,3 +239,25 @@ wlan_twt_init_context(struct wlan_objmgr_psoc *psoc,
*/
QDF_STATUS wlan_twt_update_beacon_template(void);
/**
* wlan_twt_is_setup_done() - Check if TWT setup exists for a given dialog id
* @psoc: Pointer to psoc object
* @peer_mac: Pointer to peer mac address
* @dialog_id: Dialog id
*
* Return: true if TWT setup exists, false otherwise
*/
bool wlan_twt_is_setup_done(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac, uint8_t dialog_id);
/**
* wlan_twt_get_session_state() - Get TWT session state
* @psoc: Pointer to psoc object
* @peer_mac: Pointer to peer mac address
* @dialog_id: Dialog id
*
* Return: enum wlan_twt_session_state
*/
enum wlan_twt_session_state
wlan_twt_get_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac, uint8_t dialog_id);

View File

@@ -226,6 +226,32 @@ ucfg_twt_set_osif_cb(osif_twt_get_global_ops_cb osif_twt_ops);
* Return: QDF_STATUS_SUCCESS
*/
QDF_STATUS ucfg_twt_update_beacon_template(void);
/**
* ucfg_twt_is_setup_done() - check if TWT setup is done or not
* for given dialog id
* @psoc: Pointer to global psoc object
* @peer_mac: Global peer mac address
* @dialog_id: Dialog ID
*
* Return: True if Setup is done, false otherwise
*/
bool
ucfg_twt_is_setup_done(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac,
uint8_t dialog_id);
/**
* ucfg_twt_get_session_state() - get TWT session state for a given dialog id
* @psoc: Pointer to global psoc object
* @peer_mac: Global peer mac address
* @dialog_id: Dialog ID
*
* Return: TWT session state
*/
enum wlan_twt_session_state
ucfg_twt_get_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac, uint8_t dialog_id);
#else
static inline
QDF_STATUS ucfg_twt_psoc_open(struct wlan_objmgr_psoc *psoc)
@@ -290,6 +316,20 @@ ucfg_twt_set_osif_cb(osif_twt_get_global_ops_cb osif_twt_ops)
{
return QDF_STATUS_E_NOSUPPORT;
}
#endif
static inline bool
ucfg_twt_is_setup_done(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac,
uint8_t dialog_id)
{
return false;
}
static inline enum wlan_twt_session_state
ucfg_twt_get_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
#endif

View File

@@ -170,3 +170,16 @@ QDF_STATUS ucfg_twt_update_beacon_template(void)
return wlan_twt_update_beacon_template();
}
bool
ucfg_twt_is_setup_done(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac, uint8_t dialog_id)
{
return wlan_twt_is_setup_done(psoc, peer_mac, dialog_id);
}
enum wlan_twt_session_state
ucfg_twt_get_session_state(struct wlan_objmgr_psoc *psoc,
struct qdf_mac_addr *peer_mac, uint8_t dialog_id)
{
return wlan_twt_get_session_state(psoc, peer_mac, dialog_id);
}