/** @file */
/******************************************************************************
 *
 * Copyright(c) 2019 Realtek Corporation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 ******************************************************************************/

#ifndef _MAC_AX_INIT_H_
#define _MAC_AX_INIT_H_

#include "../type.h"
#if MAC_AX_8852A_SUPPORT
#include "mac_8852a/init_8852a.h"
#endif
#if MAC_AX_8852B_SUPPORT
#include "mac_8852b/init_8852b.h"
#endif
#if MAC_AX_8852C_SUPPORT
#include "mac_8852c/init_8852c.h"
#endif
#if MAC_AX_8192XB_SUPPORT
#include "mac_8192xb/init_8192xb.h"
#endif

#include "role.h"
#include "fwdl.h"
#include "mport.h"
#if MAC_AX_PCIE_SUPPORT
#include "_pcie.h"
#endif
/*--------------------Define -------------------------------------------*/
/*--------------------Define Enum---------------------------------------*/
/*--------------------Define Struct-------------------------------------*/

#ifdef CONFIG_NEW_HALMAC_INTERFACE

/**
 * @addtogroup Common
 * @{
 * @addtogroup System
 * @{
 */

/**
 * @brief get_mac_ax_adapter
 *
 * @param intf
 * @param chip_id
 * @param cv
 * @param *phl_adapter
 * @param *drv_adapter
 * @param *pltfm_cb
 * @return Please Place Description here.
 * @retval  mac_ax_adapter
 */
struct mac_ax_adapter *get_mac_ax_adapter(enum mac_ax_intf intf,
					  u8 chip_id, u8 cv,
					  void *phl_adapter, void *drv_adapter,
					  struct mac_ax_pltfm_cb *pltfm_cb);
/**
 * @}
 * @}
 */

/**
 * @addtogroup Common
 * @{
 * @addtogroup System
 * @{
 */

/**
 * @brief get_mac_ax_adapter
 *
 * @param intf
 * @param chip_id
 * @param cv
 * @param *drv_adapter
 * @param *pltfm_cb
 * @return Please Place Description here.
 * @retval  mac_ax_adapter
 */
#else
struct mac_ax_adapter *get_mac_ax_adapter(enum mac_ax_intf intf,
					  u8 chip_id, u8 cv,
					  void *drv_adapter,
					  struct mac_ax_pltfm_cb *pltfm_cb);
/**
 * @}
 * @}
 */

/**
 * @addtogroup Common
 * @{
 * @addtogroup System
 * @{
 */

/**
 * @brief cmac_func_en
 *
 * @param *adapter
 * @param band
 * @param en
 * @return Please Place Description here.
 * @retval u32
 */
#endif
u32 cmac_func_en(struct mac_ax_adapter *adapter, u8 band, u8 en);
/**
 * @}
 * @}
 */

/**
 * @addtogroup Common
 * @{
 * @addtogroup System
 * @{
 */

/**
 * @brief mac_sys_init
 *
 * @param *adapter
 * @return Please Place Description here.
 * @retval u32
 */
u32 mac_sys_init(struct mac_ax_adapter *adapter);
/**
 * @}
 * @}
 */

/**
 * @addtogroup Common
 * @{
 * @addtogroup System
 * @{
 */

/**
 * @brief mac_hal_init
 *
 * @param *adapter
 * @param *trx_info
 * @param *fwdl_info
 * @param *intf_info
 * @return Please Place Description here.
 * @retval u32
 */
u32 mac_hal_init(struct mac_ax_adapter *adapter,
		 struct mac_ax_trx_info *trx_info,
		 struct mac_ax_fwdl_info *fwdl_info,
		 struct mac_ax_intf_info *intf_info);
/**
 * @}
 * @}
 */

/**
 * @addtogroup Common
 * @{
 * @addtogroup System
 * @{
 */

/**
 * @brief mac_hal_fast_init
 *
 * @param *adapter
 * @param *trx_info
 * @param *fwdl_info
 * @param *intf_info
 * @return Please Place Description here.
 * @retval u32
 */
u32 mac_hal_fast_init(struct mac_ax_adapter *adapter,
		      struct mac_ax_trx_info *trx_info,
		      struct mac_ax_fwdl_info *fwdl_info,
		      struct mac_ax_intf_info *intf_info);
/**
 * @}
 * @}
 */

/**
 * @addtogroup Common
 * @{
 * @addtogroup System
 * @{
 */

/**
 * @brief mac_hal_fast_deinit
 *
 * @param *adapter
 * @return Please Place Description here.
 * @retval u32
 */
u32 mac_hal_fast_deinit(struct mac_ax_adapter *adapter);
/**
 * @}
 * @}
 */

/**
 * @addtogroup Common
 * @{
 * @addtogroup System
 * @{
 */

/**
 * @brief mac_hal_deinit
 *
 * @param *adapter
 * @return Please Place Description here.
 * @retval u32
 */
u32 mac_hal_deinit(struct mac_ax_adapter *adapter);
/**
 * @}
 * @}
 */

/**
 * @addtogroup Common
 * @{
 * @addtogroup System
 * @{
 */

/**
 * @brief mac_ax_init_state
 *
 * @param *adapter
 * @return Please Place Description here.
 * @retval u32
 */
u32 mac_ax_init_state(struct mac_ax_adapter *adapter);
/**
 * @}
 * @}
 */

u32 mix_info_init(struct mac_ax_adapter *adapter);
u32 mix_info_exit(struct mac_ax_adapter *adapter);

#endif
