blob: 22ecfcd71f2ddc1891e154582e2c3d98eee5ff74 [file] [log] [blame]
/*
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/**
* DOC: Declares VDEV MLME SM APIs and structures
*/
#ifndef _VDEV_MLME_SM_H_
#define _VDEV_MLME_SM_H_
/**
* mlme_vdev_sm_deliver_event() - Delivers event to VDEV MLME SM
* @vdev_mlme: MLME VDEV comp object
* @event: MLME event
* @event_data_len: data size
* @event_data: event data
*
* API to dispatch event to VDEV MLME SM
*
* Return: SUCCESS: on handling event
* FAILURE: on ignoring the event
*/
QDF_STATUS mlme_vdev_sm_deliver_event(struct vdev_mlme_obj *vdev_mlme,
enum wlan_vdev_sm_evt event,
uint16_t event_data_len,
void *event_data);
/**
* mlme_vdev_sm_print_state_event() - Prints the state/substate, event
* @vdev_mlme: MLME VDEV comp object
* @event: MLME event
*
* API to print current state/substate, events in readable format
*
* Return: void
*/
void mlme_vdev_sm_print_state_event(struct vdev_mlme_obj *vdev_mlme,
enum wlan_vdev_sm_evt event);
/**
* mlme_vdev_sm_print_state() - Prints the state/substate
* @vdev_mlme: MLME VDEV comp object
*
* API to print current state/substate
*
* Return: void
*/
void mlme_vdev_sm_print_state(struct vdev_mlme_obj *vdev_mlme);
#ifdef SM_ENG_HIST_ENABLE
/**
* mlme_vdev_sm_history_print() - Prints SM history
* @vdev_mlme: MLME VDEV comp object
*
* API to print SM history
*
* Return: void
*/
void mlme_vdev_sm_history_print(struct vdev_mlme_obj *vdev_mlme);
#endif
#endif
/**
* mlme_vdev_sm_create - Invoke SME creation for VDEV
* @vdev_mlme_obj: VDEV MLME comp object
*
* API allocates VDEV MLME SM and initializes SM lock
*
* Return: SUCCESS on successful allocation
* FAILURE, if registration fails
*/
QDF_STATUS mlme_vdev_sm_create(struct vdev_mlme_obj *vdev_mlme);
/**
* mlme_vdev_sm_destroy - Invoke SME destroy for VDEV
* @vdev_mlme_obj: VDEV MLME comp object
*
* API frees VDEV MLME SM and destroys the SM lock
*
* Return: SUCCESS on successful destroy
* FAILURE, if registration fails
*/
QDF_STATUS mlme_vdev_sm_destroy(struct vdev_mlme_obj *vdev_mlme);
#ifdef VDEV_SM_LOCK_SUPPORT
/**
* mlme_vdev_sm_spinlock_create - Create VDEV MLME spinlock
* @vdev_mlme_obj: VDEV MLME comp object
*
* Creates VDEV MLME spinlock
*
* Return: void
*/
static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
{
qdf_spinlock_create(&vdev_mlme->sm_lock);
}
/**
* mlme_vdev_sm_spinlock_destroy - Destroy VDEV MLME spinlock
* @vdev_mlme_obj: VDEV MLME comp object
*
* Destroy VDEV MLME spinlock
*
* Return: void
*/
static inline void mlme_vdev_sm_spinlock_destroy(
struct vdev_mlme_obj *vdev_mlme)
{
qdf_spinlock_destroy(&vdev_mlme->sm_lock);
}
/**
* mlme_vdev_sm_spin_lock - acquire spinlock
* @vdev_mlme_obj: vdev mlme comp object
*
* acquire vdev mlme spinlock
*
* return: void
*/
static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
{
qdf_spin_lock_bh(&vdev_mlme->sm_lock);
}
/**
* mlme_vdev_sm_spin_unlock - release spinlock
* @vdev_mlme_obj: vdev mlme comp object
*
* release vdev mlme spinlock
*
* return: void
*/
static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
{
qdf_spin_unlock_bh(&vdev_mlme->sm_lock);
}
/**
* mlme_vdev_cmd_mutex_create - Create VDEV MLME cmd mutex
* @vdev_mlme_obj: VDEV MLME comp object
*
* Creates VDEV MLME cmd mutex
*
* Return: void
*/
static inline void
mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme)
{
qdf_mutex_create(&vdev_mlme->vdev_cmd_lock);
}
/**
* mlme_vdev_cmd_mutex_destroy - Destroy VDEV MLME cmd mutex
* @vdev_mlme_obj: VDEV MLME comp object
*
* Destroy VDEV MLME cmd mutex
*
* Return: void
*/
static inline void
mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme)
{
qdf_mutex_destroy(&vdev_mlme->vdev_cmd_lock);
}
/**
* mlme_vdev_cmd_mutex_acquire - acquire mutex
* @vdev_mlme_obj: vdev mlme comp object
*
* acquire vdev mlme cmd mutex
*
* return: void
*/
static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme)
{
qdf_mutex_acquire(&vdev_mlme->vdev_cmd_lock);
}
/**
* mlme_vdev_cmd_mutex_release - release mutex
* @vdev_mlme_obj: vdev mlme comp object
*
* release vdev mlme cmd mutex
*
* return: void
*/
static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme)
{
qdf_mutex_release(&vdev_mlme->vdev_cmd_lock);
}
#else
static inline void mlme_vdev_sm_spinlock_create(struct vdev_mlme_obj *vdev_mlme)
{
mlme_info("VDEV SM lock is disabled!!!");
}
static inline void mlme_vdev_sm_spinlock_destroy(
struct vdev_mlme_obj *vdev_mlme)
{
mlme_info("VDEV SM lock is disabled!!!");
}
static inline void mlme_vdev_sm_spin_lock(struct vdev_mlme_obj *vdev_mlme)
{
}
static inline void mlme_vdev_sm_spin_unlock(struct vdev_mlme_obj *vdev_mlme)
{
}
static inline void
mlme_vdev_cmd_mutex_create(struct vdev_mlme_obj *vdev_mlme)
{
mlme_info("VDEV CMD lock is disabled!!!");
}
static inline void
mlme_vdev_cmd_mutex_destroy(struct vdev_mlme_obj *vdev_mlme)
{
mlme_info("VDEV CMD lock is disabled!!!");
}
static inline void mlme_vdev_cmd_mutex_acquire(struct vdev_mlme_obj *vdev_mlme)
{
}
static inline void mlme_vdev_cmd_mutex_release(struct vdev_mlme_obj *vdev_mlme)
{
}
#endif