qcacmn: Add support for T2LM timer handling

Adds api's to handle t2lm timer functionality.
Api's added are timer initialize, start, stop, expiry handler.

Change-Id: If52453135921067d04f8349ece64c33cd524af00
CRs-Fixed: 3342822
This commit is contained in:
Amruta Kulkarni
2022-12-06 21:46:34 +05:30
committed by Madan Koyyalamudi
parent 93e8977721
commit 8759cf1c1e
6 changed files with 628 additions and 9 deletions

View File

@@ -45,6 +45,86 @@
#define WLAN_T2LM_MAX_NUM_LINKS 16
#ifdef WLAN_MLO_USE_SPINLOCK
/**
* t2lm_dev_lock_create - Create T2LM device mutex/spinlock
* @t2lm_ctx: T2LM context
*
* Creates mutex/spinlock
*
* Return: void
*/
static inline void
t2lm_dev_lock_create(struct wlan_t2lm_context *t2lm_ctx)
{
qdf_spinlock_create(&t2lm_ctx->t2lm_dev_lock);
}
/**
* t2lm_dev_lock_destroy - Destroy T2LM mutex/spinlock
* @t2lm_ctx: T2LM context
*
* Destroy mutex/spinlock
*
* Return: void
*/
static inline void
t2lm_dev_lock_destroy(struct wlan_t2lm_context *t2lm_ctx)
{
qdf_spinlock_destroy(&t2lm_ctx->t2lm_dev_lock);
}
/**
* t2lm_dev_lock_acquire - acquire T2LM mutex/spinlock
* @t2lm_ctx: T2LM context
*
* acquire mutex/spinlock
*
* return: void
*/
static inline
void t2lm_dev_lock_acquire(struct wlan_t2lm_context *t2lm_ctx)
{
qdf_spin_lock_bh(&t2lm_ctx->t2lm_dev_lock);
}
/**
* t2lm_dev_lock_release - release T2LM dev mutex/spinlock
* @t2lm_ctx: T2LM context
*
* release mutex/spinlock
*
* return: void
*/
static inline
void t2lm_dev_lock_release(struct wlan_t2lm_context *t2lm_ctx)
{
qdf_spin_unlock_bh(&t2lm_ctx->t2lm_dev_lock);
}
#else /* WLAN_MLO_USE_SPINLOCK */
static inline
void t2lm_dev_lock_create(struct wlan_t2lm_context *t2lm_ctx)
{
qdf_mutex_create(&t2lm_ctx->t2lm_dev_lock);
}
static inline
void t2lm_dev_lock_destroy(struct wlan_t2lm_context *t2lm_ctx)
{
qdf_mutex_destroy(&t2lm_ctx->t2lm_dev_lock);
}
static inline void t2lm_dev_lock_acquire(struct wlan_t2lm_context *t2lm_ctx)
{
qdf_mutex_acquire(&t2lm_ctx->t2lm_dev_lock);
}
static inline void t2lm_dev_lock_release(struct wlan_t2lm_context *t2lm_ctx)
{
qdf_mutex_release(&t2lm_ctx->t2lm_dev_lock);
}
#endif
/**
* wlan_mlo_parse_t2lm_ie() - API to parse the T2LM IE
* @t2lm: Pointer to T2LM structure
@@ -122,6 +202,69 @@ QDF_STATUS wlan_mlo_parse_bcn_prbresp_t2lm_ie(
* Return: Updated frame pointer
*/
uint8_t *wlan_mlo_add_t2lm_info_ie(uint8_t *frm, struct wlan_t2lm_info *t2lm);
/**
* wlan_mlo_t2lm_timer_init() - API to add TID-to-link mapping IE
* @vdev: Pointer to vdev
*
* Return: qdf status
*/
QDF_STATUS
wlan_mlo_t2lm_timer_init(struct wlan_objmgr_vdev *vdev);
/**
* wlan_mlo_t2lm_timer_start() - API to start T2LM timer
* @vdev: Pointer to vdev
* @interval: T2LM timer interval
* @t2lm_ie_index: T2LM IE index
*
* Return: qdf status
*/
QDF_STATUS
wlan_mlo_t2lm_timer_start(struct wlan_objmgr_vdev *vdev,
uint32_t interval, uint8_t t2lm_ie_index);
/**
* wlan_mlo_t2lm_timer_stop() - API to stop TID-to-link mapping timer
* @vdev: Pointer to vdev
*
* Return: qdf status
*/
QDF_STATUS
wlan_mlo_t2lm_timer_stop(struct wlan_objmgr_vdev *vdev);
/**
* wlan_mlo_t2lm_timer_expiry_handler() - API to handle t2lm timer expiry
* @vdev: Pointer to vdev structure
*
* Return: none
*/
void
wlan_mlo_t2lm_timer_expiry_handler(void *vdev);
/**
* wlan_handle_t2lm_timer() - API to handle TID-to-link mapping timer
* @vdev: Pointer to vdev
* @ie_idx: ie index value
*
* Return: qdf status
*/
QDF_STATUS
wlan_handle_t2lm_timer(struct wlan_objmgr_vdev *vdev, uint8_t ie_idx);
/**
* wlan_process_bcn_prbrsp_t2lm_ie() - API to process the received T2LM IE from
* beacon/probe response.
* @vdev: Pointer to vdev
* @rx_t2lm_ie: Received T2LM IE
* @tsf: Local TSF value
*
* Return QDF_STATUS
*/
QDF_STATUS wlan_process_bcn_prbrsp_t2lm_ie(struct wlan_objmgr_vdev *vdev,
struct wlan_t2lm_context *rx_t2lm_ie,
uint64_t tsf);
#else
static inline QDF_STATUS wlan_mlo_parse_t2lm_ie(
struct wlan_t2lm_onging_negotiation_info *t2lm, uint8_t *ie)
@@ -165,5 +308,42 @@ uint8_t *wlan_mlo_add_t2lm_info_ie(uint8_t *frm, struct wlan_t2lm_info *t2lm)
{
return frm;
}
static inline QDF_STATUS
wlan_mlo_t2lm_timer_init(struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline QDF_STATUS
wlan_mlo_t2lm_timer_start(struct wlan_objmgr_vdev *vdev,
uint32_t interval, uint8_t t2lm_ie_index)
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline QDF_STATUS
wlan_mlo_t2lm_timer_stop(struct wlan_objmgr_vdev *vdev)
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline void
wlan_mlo_t2lm_timer_expiry_handler(void *vdev)
{}
static inline QDF_STATUS
wlan_handle_t2lm_timer(struct wlan_objmgr_vdev *vdev, uint8_t ie_idx)
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline QDF_STATUS
wlan_process_bcn_prbrsp_t2lm_ie(struct wlan_objmgr_vdev *vdev,
struct wlan_t2lm_context *rx_t2lm_ie,
uint64_t tsf)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_FEATURE_11BE */
#endif /* _WLAN_MLO_T2LM_H_ */