/* * 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_ #ifdef CMN_VDEV_MLME_CMPT_ENABLE #include #include /** * struct vdev_mlme_ext_ops - VDEV MLME legacy callbacks structure * @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_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_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); #else static inline QDF_STATUS wlan_cmn_mlme_init(void) { return QDF_STATUS_SUCCESS; } static inline QDF_STATUS wlan_cmn_mlme_deinit(void) { return QDF_STATUS_SUCCESS; } #endif #endif