1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2016 - 2017 Realtek Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as 7*4882a593Smuzhiyun * published by the Free Software Foundation. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT 10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*4882a593Smuzhiyun * more details. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun *****************************************************************************/ 15*4882a593Smuzhiyun #ifndef _RTL8821C_H_ 16*4882a593Smuzhiyun #define _RTL8821C_H_ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #include <drv_types.h> /* PADAPTER */ 19*4882a593Smuzhiyun #include <rtw_rf.h> /* CHANNEL_WIDTH */ 20*4882a593Smuzhiyun #include <rtw_xmit.h> /* struct pkt_attrib, struct xmit_frame */ 21*4882a593Smuzhiyun #include <rtw_recv.h> /* struct recv_frame */ 22*4882a593Smuzhiyun #include <hal_intf.h> /* HAL_DEF_VARIABLE */ 23*4882a593Smuzhiyun #include <rtl8821c_dm.h> 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define DRIVER_EARLY_INT_TIME_8821C 0x05 26*4882a593Smuzhiyun #define BCN_DMA_ATIME_INT_TIME_8821C 0x02 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* rtl8821c_halinit.c */ 29*4882a593Smuzhiyun u32 rtl8821c_power_on(PADAPTER); 30*4882a593Smuzhiyun void rtl8821c_power_off(PADAPTER); 31*4882a593Smuzhiyun u8 rtl8821c_mac_init(PADAPTER); 32*4882a593Smuzhiyun u8 rtl8821c_mac_verify(PADAPTER); 33*4882a593Smuzhiyun void rtl8821c_hal_init_misc(PADAPTER padapter); 34*4882a593Smuzhiyun u32 rtl8821c_hal_init(PADAPTER); 35*4882a593Smuzhiyun u32 rtl8821c_hal_deinit(PADAPTER); 36*4882a593Smuzhiyun void rtl8821c_init_default_value(PADAPTER); 37*4882a593Smuzhiyun u8 rtl8821c_phy_init(PADAPTER adapter); 38*4882a593Smuzhiyun u8 rtl8821c_init_phy_parameter_mac(PADAPTER adapter); 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* rtl8821c_mac.c */ 41*4882a593Smuzhiyun #ifdef CONFIG_XMIT_ACK 42*4882a593Smuzhiyun u8 rtl8821c_set_mgnt_xmit_ack(_adapter *adapter); 43*4882a593Smuzhiyun #endif 44*4882a593Smuzhiyun u8 rtl8821c_rx_ba_ssn_appended(PADAPTER); 45*4882a593Smuzhiyun u8 rtl8821c_rx_fcs_append_switch(PADAPTER, u8 enable); 46*4882a593Smuzhiyun u8 rtl8821c_rx_fcs_appended(PADAPTER); 47*4882a593Smuzhiyun u8 rtl8821c_rx_tsf_addr_filter_config(_adapter *adapter, u8 config); 48*4882a593Smuzhiyun s32 rtl8821c_fw_dl(PADAPTER, u8 wowlan); 49*4882a593Smuzhiyun s32 rtl8821c_fw_mem_dl(PADAPTER adapter, enum fw_mem mem); 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun #define BIT_PRETXERR_HANDLE_IMR BIT(31) 52*4882a593Smuzhiyun #define BIT_PRETXERR_HANDLE_ISR BIT(31) 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #ifdef CONFIG_AMPDU_PRETX_CD 55*4882a593Smuzhiyun #define BIT_PRETXERR BIT(7) 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun void rtl8821c_pretx_cd_config(_adapter *adapter); 58*4882a593Smuzhiyun #endif 59*4882a593Smuzhiyun /* rtl8821c_ops.c */ 60*4882a593Smuzhiyun u8 rtl8821c_read_efuse(PADAPTER); 61*4882a593Smuzhiyun void rtl8821c_run_thread(PADAPTER); 62*4882a593Smuzhiyun void rtl8821c_cancel_thread(PADAPTER); 63*4882a593Smuzhiyun u8 rtl8821c_sethwreg(PADAPTER, u8 variable, u8 *pval); 64*4882a593Smuzhiyun void rtl8821c_gethwreg(PADAPTER, u8 variable, u8 *pval); 65*4882a593Smuzhiyun u8 rtl8821c_sethaldefvar(PADAPTER, HAL_DEF_VARIABLE, void *pval); 66*4882a593Smuzhiyun u8 rtl8821c_gethaldefvar(PADAPTER, HAL_DEF_VARIABLE, void *pval); 67*4882a593Smuzhiyun void rtl8821c_set_hal_ops(PADAPTER); 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* tx */ 70*4882a593Smuzhiyun void rtl8821c_init_xmit_priv(_adapter *adapter); 71*4882a593Smuzhiyun void rtl8821c_fill_txdesc_sectype(struct pkt_attrib *, u8 *ptxdesc); 72*4882a593Smuzhiyun void rtl8821c_fill_txdesc_vcs(PADAPTER, struct pkt_attrib *, u8 *ptxdesc); 73*4882a593Smuzhiyun void rtl8821c_fill_txdesc_phy(PADAPTER, struct pkt_attrib *, u8 *ptxdesc); 74*4882a593Smuzhiyun u8 rtl8821c_bw_mapping(PADAPTER, struct pkt_attrib *); 75*4882a593Smuzhiyun u8 rtl8821c_sc_mapping(PADAPTER, struct pkt_attrib *); 76*4882a593Smuzhiyun void rtl8821c_cal_txdesc_chksum(PADAPTER, u8 *ptxdesc); 77*4882a593Smuzhiyun void rtl8821c_update_txdesc(struct xmit_frame *, u8 *pbuf); 78*4882a593Smuzhiyun void rtl8821c_dbg_dump_tx_desc(PADAPTER, int frame_tag, u8 *ptxdesc); 79*4882a593Smuzhiyun void fill_txdesc_force_bmc_camid(struct pkt_attrib *pattrib, u8 *ptxdesc); 80*4882a593Smuzhiyun void fill_txdesc_bmc_tx_rate(struct pkt_attrib *pattrib, u8 *ptxdesc); 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun /* rx */ 83*4882a593Smuzhiyun void rtl8821c_rxdesc2attribute(struct rx_pkt_attrib *a, u8 *desc); 84*4882a593Smuzhiyun void rtl8821c_query_rx_desc(union recv_frame *, u8 *pdesc); 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun /* rtl8821c_cmd.c */ 87*4882a593Smuzhiyun s32 rtl8821c_fillh2ccmd(PADAPTER, u8 id, u32 buf_len, u8 *pbuf); 88*4882a593Smuzhiyun void _rtl8821c_set_FwPwrMode_cmd(PADAPTER adapter, u8 psmode, u8 rfon_ctrl); 89*4882a593Smuzhiyun void rtl8821c_set_FwPwrMode_cmd(PADAPTER adapter, u8 psmode); 90*4882a593Smuzhiyun void rtl8821c_set_FwPwrMode_rfon_ctrl_cmd(PADAPTER adapter, u8 rfon_ctrl); 91*4882a593Smuzhiyun void rtl8821c_set_FwPwrModeInIPS_cmd(PADAPTER adapter, u8 cmd_param); 92*4882a593Smuzhiyun #ifdef CONFIG_WOWLAN 93*4882a593Smuzhiyun void rtl8821c_set_fw_pwrmode_inips_cmd_wowlan(PADAPTER padapter, u8 ps_mode); 94*4882a593Smuzhiyun #endif /* CONFIG_WOWLAN */ 95*4882a593Smuzhiyun void c2h_handler_rtl8821c(_adapter *adapter, u8 *pbuf, u16 length); 96*4882a593Smuzhiyun void c2h_pre_handler_rtl8821c(_adapter *adapter, u8 *pbuf, s32 length); 97*4882a593Smuzhiyun #ifdef CONFIG_BT_COEXIST 98*4882a593Smuzhiyun void rtl8821c_download_BTCoex_AP_mode_rsvd_page(PADAPTER); 99*4882a593Smuzhiyun #endif /* CONFIG_BT_COEXIST */ 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun /* rtl8821c_phy.c */ 102*4882a593Smuzhiyun u32 rtl8821c_read_bb_reg(PADAPTER, u32 addr, u32 mask); 103*4882a593Smuzhiyun void rtl8821c_write_bb_reg(PADAPTER, u32 addr, u32 mask, u32 val); 104*4882a593Smuzhiyun u32 rtl8821c_read_rf_reg(PADAPTER adapter, enum rf_path path, u32 addr, u32 mask); 105*4882a593Smuzhiyun void rtl8821c_write_rf_reg(PADAPTER adapter, enum rf_path path, u32 addr, u32 mask, u32 val); 106*4882a593Smuzhiyun void rtl8821c_set_channel_bw(PADAPTER adapter, u8 center_ch, enum channel_width, u8 offset40, u8 offset80); 107*4882a593Smuzhiyun void rtl8821c_set_tx_power_level(PADAPTER, u8 channel); 108*4882a593Smuzhiyun void rtl8821c_set_tx_power_index(PADAPTER adapter, u32 powerindex, enum rf_path rfpath, u8 rate); 109*4882a593Smuzhiyun void rtl8821c_notch_filter_switch(PADAPTER, bool enable); 110*4882a593Smuzhiyun #ifdef CONFIG_BEAMFORMING 111*4882a593Smuzhiyun void rtl8821c_phy_bf_init(PADAPTER); 112*4882a593Smuzhiyun void rtl8821c_phy_bf_enter(PADAPTER, struct sta_info*); 113*4882a593Smuzhiyun void rtl8821c_phy_bf_leave(PADAPTER, u8 *addr); 114*4882a593Smuzhiyun void rtl8821c_phy_bf_set_gid_table(PADAPTER, struct beamformer_entry*); 115*4882a593Smuzhiyun #endif /* CONFIG_BEAMFORMING */ 116*4882a593Smuzhiyun #endif /* _RTL8821C_H_ */ 117