/** @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_PCIE_H_ #define _MAC_AX_PCIE_H_ #include "../type.h" #include "../pcie_reg.h" #include "../mac_ax.h" /*--------------------Define -------------------------------------------*/ #define INTF_INTGRA_MINREF_V1 90 #define INTF_INTGRA_HOSTREF_V1 100 #define GET_PCIE_FUNC_STUS(val, mask) (((val) & (mask)) ? \ MAC_AX_PCIE_ENABLE : MAC_AX_PCIE_DISABLE) #define PCIE_POLL_IO_IDLE_CNT 100 #define PCIE_POLL_IO_IDLE_DLY_US 10 #define PCIE_POLL_DMACH_IDLE_CNT 100 #define PCIE_POLL_DMACH_IDLE_DLY_US 10 #define PCIE_POLL_BDRAM_RST_CNT 10000 #define PCIE_POLL_BDRAM_RST_DLY_US 50 #define PCIE_POLL_AUTOK_CNT 1000 #define PCIE_POLL_AUTOK_DLY_US 50 #define DBI_ADDR_MASK 0xFFC #define DBI_ADDR_2LSB_MASK 0x3 #define DBI_WEN_DW 0xF #define DBI_WEN_B 1 #define DBI_DLY_CNT 20 #define DBI_DLY_US 10 #define MDIO_ADDR_PG1 0x20 #define MDIO_DLY_CNT 20 #define MDIO_DLY_US 10 #define BDRAM_SIDX_MSK 0x1f #define BDRAM_MAX_MSK 0x1f00 #define BDRAM_MIN_MSK 0x1f0000 #define MDIO_PG0_G1 0 #define MDIO_PG1_G1 1 #define MDIO_PG0_G2 2 #define MDIO_PG1_G2 3 #define BD_NORM_SIZE 12 #define BD_TRUNC_SIZE 8 #define RXBD_SEP_NORM_SIZE 20 #define RXBD_SEP_TRUNC_OLD_SIZE 12 #define RXBD_SEP_TRUNC_NEW_SIZE 16 #define BD_MAX_NUM 0x3FF #define BD_IDX_INVALID 0xFFFF #define TXBD_BYTE_ALIGN 8 #define RXBD_BYTE_ALIGN 4 #define CMAC_CLK_ALLEN 0xFFFFFFFF #define PC_POWER_UP 1 #define PC_POWER_DOWN 0 #define BIT_WAKE_CTRL BIT5 #define PCIE_DEFAULT_AGG_NUM 0x40 #define PCIE_AUTOK_DIV_2048 0x0 #define PCIE_AUTOK_MGN 0x8 #define PCIE_AUTOK_MGN_2048 64 #define PCIE_AUTOK_UD_CNT 30 #define PCIE_DPHY_DLY_25US 0x1 #define PCIE_AUTOK_4 0x3 /*--------------------Define MACRO--------------------------------------*/ /*--------------------Define Enum---------------------------------------*/ enum pcie_clkdly_hw { PCIE_CLKDLY_HW_0 = 0, PCIE_CLKDLY_HW_30US = 0x1, PCIE_CLKDLY_HW_50US = 0x2, PCIE_CLKDLY_HW_80US = 0x3, PCIE_CLKDLY_HW_100US = 0x4, PCIE_CLKDLY_HW_120US = 0x5, PCIE_CLKDLY_HW_150US = 0x6, PCIE_CLKDLY_HW_180US = 0x7, PCIE_CLKDLY_HW_200US = 0x8, PCIE_CLKDLY_HW_300US = 0x9, PCIE_CLKDLY_HW_400US = 0xA, PCIE_CLKDLY_HW_500US = 0xB, PCIE_CLKDLY_HW_1MS = 0xC, PCIE_CLKDLY_HW_3MS = 0xD, PCIE_CLKDLY_HW_5MS = 0xE, PCIE_CLKDLY_HW_10MS = 0xF }; enum pcie_l1dly_hw { PCIE_L1DLY_HW_16US = 4, PCIE_L1DLY_HW_32US = 5, PCIE_L1DLY_HW_64US = 6, PCIE_L1DLY_HW_INFI = 7 }; enum pcie_l0sdly_hw { PCIE_L0SDLY_HW_1US = 0, PCIE_L0SDLY_HW_2US = 1, PCIE_L0SDLY_HW_3US = 2, PCIE_L0SDLY_HW_4US = 3, PCIE_L0SDLY_HW_5US = 4, PCIE_L0SDLY_HW_6US = 5, PCIE_L0SDLY_HW_7US = 6 }; /*--------------------Define Struct-------------------------------------*/ struct txbd_ram { u8 sidx; u8 max; u8 min; }; /** * @brief reg_read8_pcie * * @param *adapter * @param addr * @return Please Place Description here. * @retval u8 */ u8 reg_read8_pcie(struct mac_ax_adapter *adapter, u32 addr); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup BasicIO * @{ */ /** * @brief reg_write8_pcie * * @param *adapter * @param addr * @param val * @return Please Place Description here. * @retval void */ void reg_write8_pcie(struct mac_ax_adapter *adapter, u32 addr, u8 val); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup BasicIO * @{ */ /** * @brief reg_read16_pcie * * @param *adapter * @param addr * @return Please Place Description here. * @retval u16 */ u16 reg_read16_pcie(struct mac_ax_adapter *adapter, u32 addr); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup BasicIO * @{ */ /** * @brief reg_write16_pcie * * @param *adapter * @param addr * @param val * @return Please Place Description here. * @retval void */ void reg_write16_pcie(struct mac_ax_adapter *adapter, u32 addr, u16 val); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup BasicIO * @{ */ /** * @brief reg_read32_pcie * * @param *adapter * @param addr * @return Please Place Description here. * @retval u32 */ u32 reg_read32_pcie(struct mac_ax_adapter *adapter, u32 addr); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup BasicIO * @{ */ /** * @brief reg_write32_pcie * * @param *adapter * @param addr * @param val * @return Please Place Description here. * @retval void */ void reg_write32_pcie(struct mac_ax_adapter *adapter, u32 addr, u32 val); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief dbi_r8_pcie * * @param *adapter * @param addr * @param *val * @return Please Place Description here. * @retval u32 */ u32 dbi_r8_pcie(struct mac_ax_adapter *adapter, u16 addr, u8 *val); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief dbi_w8_pcie * * @param *adapter * @param addr * @param data * @return Please Place Description here. * @retval u32 */ u32 dbi_w8_pcie(struct mac_ax_adapter *adapter, u16 addr, u8 data); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief dbi_r32_pcie * * @param *adapter * @param addr * @param *val * @return Please Place Description here. * @retval u32 */ u32 dbi_r32_pcie(struct mac_ax_adapter *adapter, u16 addr, u32 *val); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief dbi_w32_pcie * * @param *adapter * @param addr * @param data * @return Please Place Description here. * @retval u32 */ u32 dbi_w32_pcie(struct mac_ax_adapter *adapter, u16 addr, u32 data); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief mdio_r16_pcie * * @param *adapter * @param addr * @param speed * @param *val * @return Please Place Description here. * @retval u32 */ u32 mdio_r16_pcie(struct mac_ax_adapter *adapter, u8 addr, u8 speed, u16 *val); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief mdio_w16_pcie * * @param *adapter * @param addr * @param data * @param speed * @return Please Place Description here. * @retval u32 */ u32 mdio_w16_pcie(struct mac_ax_adapter *adapter, u8 addr, u16 data, u8 speed); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief cfgspc_set_pcie * * @param *adapter * @param *param * @return Please Place Description here. * @retval u32 */ u32 cfgspc_set_pcie(struct mac_ax_adapter *adapter, struct mac_ax_pcie_cfgspc_param *param); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief ltr_set_pcie * * @param *adapter * @param *param * @return Please Place Description here. * @retval u32 */ u32 ltr_set_pcie(struct mac_ax_adapter *adapter, struct mac_ax_pcie_ltr_param *param); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief ltr_sw_trigger * * @param *adapter * @param ctrl * @return Please Place Description here. * @retval u32 */ u32 ltr_sw_trigger(struct mac_ax_adapter *adapter, enum mac_ax_pcie_ltr_sw_ctrl ctrl); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief ctrl_dma_all_pcie * * @param *adapter * @param en * @return Please Place Description here. * @retval void */ void ctrl_dma_all_pcie(struct mac_ax_adapter *adapter, enum mac_ax_func_sw en); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief clr_idx_all_pcie * * @param *adapter * @return Please Place Description here. * @retval u32 */ u32 clr_idx_all_pcie(struct mac_ax_adapter *adapter); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief ctrl_txdma_ch_pcie * * @param *adapter * @param *ch_map * @return Please Place Description here. * @retval u32 */ u32 ctrl_txdma_ch_pcie(struct mac_ax_adapter *adapter, struct mac_ax_txdma_ch_map *ch_map); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief poll_txdma_ch_idle_pcie * * @param *adapter * @param *ch_map * @return Please Place Description here. * @retval u32 */ u32 poll_txdma_ch_idle_pcie(struct mac_ax_adapter *adapter, struct mac_ax_txdma_ch_map *ch_map); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief poll_rxdma_ch_idle_pcie * * @param *adapter * @param *ch_map * @return Please Place Description here. * @retval u32 */ u32 poll_rxdma_ch_idle_pcie(struct mac_ax_adapter *adapter, struct mac_ax_rxdma_ch_map *ch_map); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief poll_dma_all_idle_pcie * * @param *adapter * @return Please Place Description here. * @retval u32 */ u32 poll_dma_all_idle_pcie(struct mac_ax_adapter *adapter); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief ctrl_txhci_pcie * * @param *adapter * @param en * @return Please Place Description here. * @retval u32 */ u32 ctrl_txhci_pcie(struct mac_ax_adapter *adapter, enum mac_ax_func_sw en); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief ctrl_rxhci_pcie * * @param *adapter * @param en * @return Please Place Description here. * @retval u32 */ u32 ctrl_rxhci_pcie(struct mac_ax_adapter *adapter, enum mac_ax_func_sw en); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief ctrl_dma_io_pcie * * @param *adapter * @param en * @return Please Place Description here. * @retval u32 */ u32 ctrl_dma_io_pcie(struct mac_ax_adapter *adapter, enum mac_ax_func_sw en); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief pcie_pre_init * * @param *adapter * @param *param * @return Please Place Description here. * @retval u32 */ u32 pcie_pre_init(struct mac_ax_adapter *adapter, void *param); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief pcie_init * * @param *adapter * @param *param * @return Please Place Description here. * @retval u32 */ u32 pcie_init(struct mac_ax_adapter *adapter, void *param); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief pcie_deinit * * @param *adapter * @param *param * @return Please Place Description here. * @retval u32 */ u32 pcie_deinit(struct mac_ax_adapter *adapter, void *param); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief rst_bdram_pcie * * @param *adapter * @param val * @return Please Place Description here. * @retval u32 */ u32 rst_bdram_pcie(struct mac_ax_adapter *adapter, u8 val); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief lv1rst_stop_dma_pcie * * @param *adapter * @param val * @return Please Place Description here. * @retval u32 */ u32 lv1rst_stop_dma_pcie(struct mac_ax_adapter *adapter, u8 val); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief lv1rst_start_dma_pcie * * @param *adapter * @param val * @return Please Place Description here. * @retval u32 */ u32 lv1rst_start_dma_pcie(struct mac_ax_adapter *adapter, u8 val); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief pcie_pwr_switch * * @param *vadapter * @param pre_switch * @param on * @return Please Place Description here. * @retval u32 */ u32 pcie_pwr_switch(void *vadapter, u8 pre_switch, u8 on); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief set_pcie_wowlan * * @param *adapter * @param w_c * @return Please Place Description here. * @retval u32 */ u32 set_pcie_wowlan(struct mac_ax_adapter *adapter, enum mac_ax_wow_ctrl w_c); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief pcie_trx_mit * * @param *adapter * @param *mit_info * @return Please Place Description here. * @retval u32 */ u32 pcie_trx_mit(struct mac_ax_adapter *adapter, struct mac_ax_pcie_trx_mitigation *mit_info); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief set_pcie_l2_leave * * @param *adapter * @param set * @return Please Place Description here. * @retval u32 */ u32 set_pcie_l2_leave(struct mac_ax_adapter *adapter, u8 set); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief get_io_stat_pcie * * @param *adapter * @param *out_st * @return Please Place Description here. * @retval u32 */ u32 get_io_stat_pcie(struct mac_ax_adapter *adapter, struct mac_ax_io_stat *out_st); /** * @} * @} */ /** * @brief pcie_get_txagg_num * * @param *adapter * @param band * @return Please Place Description here. * @retval u32 */ u32 pcie_get_txagg_num(struct mac_ax_adapter *adapter, u8 band); /** * @} * @} */ /** * @brief pcie_autok_counter_avg * * @param *adapter * @return Please Place Description here. * @retval u32 */ u32 pcie_autok_counter_avg(struct mac_ax_adapter *adapter); /** * @} * @} */ /** * @addtogroup HCI * @{ * @addtogroup PCIE * @{ */ /** * @brief dbcc_hci_ctrl_pcie * * @param *adapter * @param *info * @return Please Place Description here. * @retval u32 */ u32 dbcc_hci_ctrl_pcie(struct mac_ax_adapter *adapter, struct mac_ax_dbcc_hci_ctrl *info); /** * @} * @} */ #endif