/*
 * Copyright (c) 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: Define Common MLME structure and APIs
 */
#ifndef _WLAN_MLME_CMN_H_
#define _WLAN_MLME_CMN_H_

#include <include/wlan_psoc_mlme.h>
#include <include/wlan_pdev_mlme.h>
#include <include/wlan_vdev_mlme.h>

/**
 * struct vdev_mlme_ext_ops - VDEV MLME legacy callbacks structure
 * @mlme_psoc_ext_hdl_create:        callback to invoke creation of legacy
 *                                   psoc object
 * @mlme_psoc_ext_hdl_destroy:       callback to invoke destroy of legacy
 *                                   psoc object
 * @mlme_pdev_ext_hdl_create:        callback to invoke creation of legacy
 *                                   pdev object
 * @mlme_pdev_ext_hdl_destroy:       callback to invoke destroy of legacy
 *                                   pdev object
 * @mlme_vdev_ext_hdl_create:        callback to invoke creation of legacy
 *                                   vdev object
 * @mlme_vdev_ext_hdl_post_create:   callback to invoke post creation actions
 *                                   of legacy vdev object
 * @mlme_vdev_ext_hdl_destroy:       callback to invoke destroy of legacy
 *                                   vdev object
 * @mlme_vdev_start_fw_send:         callback to invoke vdev start command
 * @mlme_vdev_stop_fw_send:          callback to invoke vdev stop command
 * @mlme_vdev_down_fw_send:          callback to invoke vdev down command
 * @mlme_multivdev_restart_fw_send:  callback to invoke multivdev restart
 *                                   command
 * @mlme_vdev_enqueue_exp_cmd:       callback to enqueue exception command
 *                                   required by serialization
 */
struct mlme_ext_ops {
	QDF_STATUS (*mlme_psoc_ext_hdl_create)(
				struct psoc_mlme_obj *psoc_mlme);
	QDF_STATUS (*mlme_psoc_ext_hdl_destroy)(
				struct psoc_mlme_obj *pdev_mlme);
	QDF_STATUS (*mlme_pdev_ext_hdl_create)(
				struct pdev_mlme_obj *pdev_mlme);
	QDF_STATUS (*mlme_pdev_ext_hdl_destroy)(
				struct pdev_mlme_obj *pdev_mlme);
	QDF_STATUS (*mlme_vdev_ext_hdl_create)(
				struct vdev_mlme_obj *vdev_mlme);
	QDF_STATUS (*mlme_vdev_ext_hdl_post_create)(
				struct vdev_mlme_obj *vdev_mlme);
	QDF_STATUS (*mlme_vdev_ext_hdl_destroy)(
				struct vdev_mlme_obj *vdev_mlme);
	QDF_STATUS (*mlme_vdev_start_fw_send)(
				struct wlan_objmgr_vdev *vdev, uint8_t restart);
	QDF_STATUS (*mlme_vdev_stop_fw_send)(struct wlan_objmgr_vdev *vdev);
	QDF_STATUS (*mlme_vdev_down_fw_send)(struct wlan_objmgr_vdev *vdev);
	QDF_STATUS (*mlme_multivdev_restart_fw_send)(
				struct wlan_objmgr_pdev *pdev);
	QDF_STATUS (*mlme_vdev_enqueue_exp_cmd)(
				struct vdev_mlme_obj *vdev_mlme,
				uint8_t cmd_type);
};

/**
 * mlme_psoc_ops_ext_hdl_create() - Alloc PSOC mlme ext handle
 * @psoc_mlme:  PSOC MLME comp object
 *
 * API to allocate PSOC MLME ext handle
 *
 * Return: SUCCESS on successful allocation
 *         Else FAILURE
 */
QDF_STATUS mlme_psoc_ops_ext_hdl_create(struct psoc_mlme_obj *psoc_mlme);

/**
 * mlme_psoc_ops_ext_hdl_destroy() - Destroy PSOC mlme ext handle
 * @psoc_mlme:  PSOC MLME comp object
 *
 * API to free psoc MLME ext handle
 *
 * Return: SUCCESS on successful free
 *         Else FAILURE
 */
QDF_STATUS mlme_psoc_ops_ext_hdl_destroy(struct psoc_mlme_obj *psoc_mlme);

/**
 * mlme_pdev_ops_ext_hdl_create - Alloc PDEV mlme ext handle
 * @pdev_mlme_obj:  PDEV MLME comp object
 *
 * API to allocate PDEV MLME ext handle
 *
 * Return: SUCCESS on successful allocation
 *         Else FAILURE
 */
QDF_STATUS mlme_pdev_ops_ext_hdl_create(struct pdev_mlme_obj *pdev_mlme);

/**
 * mlme_pdev_ops_ext_hdl_destroy - Destroy PDEV mlme ext handle
 * @pdev_mlme_obj:  PDEV MLME comp object
 *
 * API to free pdev MLME ext handle
 *
 * Return: SUCCESS on successful free
 *         Else FAILURE
 */
QDF_STATUS mlme_pdev_ops_ext_hdl_destroy(struct pdev_mlme_obj *pdev_mlme);

/**
 * mlme_vdev_ops_ext_hdl_create - Alloc VDEV mlme ext handle
 * @vdev_mlme_obj:  VDEV MLME comp object
 *
 * API to allocate VDEV MLME ext handle
 *
 * Return: SUCCESS on successful allocation
 *         Else FAILURE
 */
QDF_STATUS mlme_vdev_ops_ext_hdl_create(struct vdev_mlme_obj *vdev_mlme);

/**
 * mlme_vdev_ops_ext_hdl_post_create - Perform post VDEV mlme ext handle alloc
 *                                     operations
 * @vdev_mlme_obj:  VDEV MLME comp object
 *
 * API to perform post vdev MLME ext handle allocation operations
 *
 * Return: SUCCESS on initialization successful
 *         Else FAILURE
 */
QDF_STATUS mlme_vdev_ops_ext_hdl_post_create(struct vdev_mlme_obj *vdev_mlme);

/**
 * mlme_vdev_ops_ext_hdl_destroy - Destroy VDEV mlme ext handle
 * @vdev_mlme_obj:  VDEV MLME comp object
 *
 * API to free vdev MLME ext handle
 *
 * Return: SUCCESS on successful free
 *         Else FAILURE
 */
QDF_STATUS mlme_vdev_ops_ext_hdl_destroy(struct vdev_mlme_obj *vdev_mlme);

/**
 * mlme_vdev_enqueue_exp_ser_cmd - Enqueue exception serialization cmd
 * @vdev_mlme_obj:  VDEV MLME comp object
 * @cmd_type: Serialization command type
 *
 * API to enqueue the exception serialization command, used by
 * mlme-serialization wrapper layer
 *
 * Return: SUCCESS on successful enqueuing the command
 *         Else FAILURE
 */
QDF_STATUS mlme_vdev_enqueue_exp_ser_cmd(struct vdev_mlme_obj *vdev_mlme,
					 uint8_t cmd_type);

/**
 * mlme_vdev_ops_start_fw_send - Send WMI START/RESTART commmand to FW
 * @vdev:  VDEV object
 *
 * API to send WMI start/restart command to FW
 *
 * Return: SUCCESS on successful sending the command
 *         Else FAILURE
 */
QDF_STATUS mlme_vdev_ops_start_fw_send(struct wlan_objmgr_vdev *vdev,
				       uint8_t restart);

/**
 * mlme_vdev_ops_multivdev_restart_fw_cmd_send - Send WMI Multivdev restart
 *                                              commmand to FW
 * @pdev:  PDEV object
 *
 * API to send WMI multivdev restart command to FW
 *
 * Return: SUCCESS on successful sending the command
 *         Else FAILURE
 */
QDF_STATUS mlme_vdev_ops_multivdev_restart_fw_cmd_send(
						struct wlan_objmgr_pdev *pdev);

/**
 * mlme_vdev_ops_stop_fw_send - Send WMI STOP commmand to FW
 * @vdev:  VDEV object
 *
 * API to send WMI stop command to FW
 *
 * Return: SUCCESS on successful sending the command
 *         Else FAILURE
 */
QDF_STATUS mlme_vdev_ops_stop_fw_send(struct wlan_objmgr_vdev *vdev);

/**
 * mlme_vdev_ops_down_fw_send - Send WMI Down commmand to FW
 * @vdev:  VDEV object
 *
 * API to send WMI down command to FW
 *
 * Return: SUCCESS on successful sending the command
 *         Else FAILURE
 */
QDF_STATUS mlme_vdev_ops_down_fw_send(struct wlan_objmgr_vdev *vdev);

/**
 * mlme_set_ops_register_cb - Sets ops registration callback
 * @ops_cb:  Function pointer
 *
 * API to set ops registration call back
 *
 * Return: void
 */
typedef struct mlme_ext_ops *(*mlme_get_global_ops_cb)(void);
void mlme_set_ops_register_cb(mlme_get_global_ops_cb ops_cb);

/**
 * wlan_cmn_mlme_init - Initializes MLME component
 *
 * Registers callbacks with object manager for create/destroy
 *
 * Return: SUCCESS on successful registration
 *         FAILURE, if registration fails
 */
QDF_STATUS wlan_cmn_mlme_init(void);

/**
 * wlan_cmn_mlme_deinit - Uninitializes MLME component
 *
 * Unregisters callbacks with object manager for create/destroy
 *
 * Return: SUCCESS on successful registration
 *         FAILURE, if registration fails
 */
QDF_STATUS wlan_cmn_mlme_deinit(void);
#endif
