1 /****************************************************************************** 2 * 3 * Copyright(c) 2015 - 2018 Realtek Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 *****************************************************************************/ 15 #ifndef _RTL8822B_H_ 16 #define _RTL8822B_H_ 17 18 #include <drv_types.h> /* PADAPTER */ 19 #include <rtw_rf.h> /* CHANNEL_WIDTH */ 20 #include <rtw_xmit.h> /* struct pkt_attrib, struct xmit_frame */ 21 #include <rtw_recv.h> /* struct recv_frame */ 22 #include <hal_intf.h> /* HAL_DEF_VARIABLE */ 23 #include "hal8822b_fw.h" /* FW array */ 24 25 #define DRIVER_EARLY_INT_TIME_8822B 0x05 26 #define BCN_DMA_ATIME_INT_TIME_8822B 0x02 27 28 /* rtl8822b_ops.c */ 29 struct hw_port_reg { 30 u32 net_type; /*reg_offset*/ 31 u8 net_type_shift; 32 u32 macaddr; /*reg_offset*/ 33 u32 bssid; /*reg_offset*/ 34 u32 bcn_ctl; /*reg_offset*/ 35 u32 tsf_rst; /*reg_offset*/ 36 u8 tsf_rst_bit; 37 u32 bcn_space; /*reg_offset*/ 38 u8 bcn_space_shift; 39 u16 bcn_space_mask; 40 u32 ps_aid; /*reg_offset*/ 41 u32 ta; /*reg_offset*/ 42 }; 43 44 45 /* rtl8822b_halinit.c */ 46 void rtl8822b_init_hal_spec(PADAPTER); 47 u32 rtl8822b_power_on(PADAPTER); 48 void rtl8822b_power_off(PADAPTER); 49 u8 rtl8822b_hal_init(PADAPTER); 50 u8 rtl8822b_mac_verify(PADAPTER); 51 void rtl8822b_init_misc(PADAPTER padapter); 52 u32 rtl8822b_init(PADAPTER); 53 u32 rtl8822b_deinit(PADAPTER); 54 void rtl8822b_init_default_value(PADAPTER); 55 56 /* rtl8822b_mac.c */ 57 /* RXERR_RPT */ 58 enum rx_rpt_type { 59 OFDM_MPDU_OK = 0, /* 0 */ 60 OFDM_MPDU_FAIL, 61 OFDM_FALSE_ALARM, 62 CCK_MPDU_OK, 63 CCK_MPDU_FAIL, 64 CCK_FALSE_ALARM, 65 HT_MPDU_OK, 66 HT_MPDU_FAIL, 67 HT_PPDU, 68 HT_FALSE_ALARM, 69 RX_FULL_DROP, /* 10 */ 70 FWFF_FULL_DROP, 71 VHT_SU_MPDU_OK = 16, /* 16 */ 72 VHT_SU_MPDU_FAIL, 73 VHT_SU_PPDU, 74 VHT_FALSE_ALARM, 75 VHT_MU_MPDU_OK, /* 20 */ 76 VHT_MU_MPDU_FAIL, 77 VHT_MU_PPDU /* 22 */ 78 }; 79 80 u8 rtl8822b_rcr_config(PADAPTER, u32 rcr); 81 u8 rtl8822b_rx_ba_ssn_appended(PADAPTER); 82 u8 rtl8822b_rx_fcs_append_switch(PADAPTER, u8 enable); 83 u8 rtl8822b_rx_fcs_appended(PADAPTER); 84 u8 rtl8822b_rx_tsf_addr_filter_config(PADAPTER, u8 config); 85 s32 rtl8822b_fw_dl(PADAPTER, u8 wowlan); 86 u8 rtl8822b_get_rx_drv_info_size(struct _ADAPTER *a); 87 u32 rtl8822b_get_tx_desc_size(struct _ADAPTER *a); 88 u32 rtl8822b_get_rx_desc_size(struct _ADAPTER *a); 89 u16 rtl8822b_rx_report_get(struct _ADAPTER *a, enum rx_rpt_type type); 90 void rtl8822b_rx_report_reset(struct _ADAPTER *a, enum rx_rpt_type type); 91 92 /* rtl8822b_ops.c */ 93 u8 rtl8822b_read_efuse(PADAPTER); 94 void rtl8822b_run_thread(PADAPTER); 95 void rtl8822b_cancel_thread(PADAPTER); 96 u8 rtl8822b_sethwreg(PADAPTER, u8 variable, u8 *pval); 97 void rtl8822b_gethwreg(PADAPTER, u8 variable, u8 *pval); 98 u8 rtl8822b_sethaldefvar(PADAPTER, HAL_DEF_VARIABLE, void *pval); 99 u8 rtl8822b_gethaldefvar(PADAPTER, HAL_DEF_VARIABLE, void *pval); 100 void rtl8822b_set_hal_ops(PADAPTER); 101 102 /* tx */ 103 void rtl8822b_init_xmit_priv(_adapter *adapter); 104 void rtl8822b_fill_txdesc_sectype(struct pkt_attrib *, u8 *ptxdesc); 105 void rtl8822b_fill_txdesc_vcs(PADAPTER, struct pkt_attrib *, u8 *ptxdesc); 106 void rtl8822b_fill_txdesc_phy(PADAPTER, struct pkt_attrib *, u8 *ptxdesc); 107 void rtl8822b_fill_txdesc_force_bmc_camid(struct pkt_attrib *, u8 *ptxdesc); 108 void rtl8822b_fill_txdesc_bmc_tx_rate(struct pkt_attrib *pattrib, u8 *ptxdesc); 109 u8 rtl8822b_bw_mapping(PADAPTER, struct pkt_attrib *); 110 u8 rtl8822b_sc_mapping(PADAPTER, struct pkt_attrib *); 111 void rtl8822b_fill_txdesc_bf(struct xmit_frame *, u8 *desc); 112 void rtl8822b_fill_txdesc_mgnt_bf(struct xmit_frame *, u8 *desc); 113 void rtl8822b_cal_txdesc_chksum(PADAPTER, u8 *ptxdesc); 114 void rtl8822b_update_txdesc(struct xmit_frame *, u8 *pbuf); 115 void rtl8822b_dbg_dump_tx_desc(PADAPTER, int frame_tag, u8 *ptxdesc); 116 117 /* rx */ 118 void rtl8822b_rxdesc2attribute(struct rx_pkt_attrib *a, u8 *desc); 119 void rtl8822b_query_rx_desc(union recv_frame *, u8 *pdesc); 120 121 /* rtl8822b_cmd.c */ 122 s32 rtl8822b_fillh2ccmd(PADAPTER, u8 id, u32 buf_len, u8 *pbuf); 123 void rtl8822b_set_FwPwrMode_cmd(PADAPTER, u8 psmode); 124 125 #ifdef CONFIG_TDLS 126 #ifdef CONFIG_TDLS_CH_SW 127 void rtl8822b_set_BcnEarly_C2H_Rpt_cmd(PADAPTER padapter, u8 enable); 128 #endif 129 #endif 130 131 void rtl8822b_set_FwPwrModeInIPS_cmd(PADAPTER adapter, u8 cmd_param); 132 #ifdef CONFIG_WOWLAN 133 void rtl8822b_set_fw_pwrmode_inips_cmd_wowlan(PADAPTER padapter, u8 ps_mode); 134 #endif /* CONFIG_WOWLAN */ 135 void rtl8822b_req_txrpt_cmd(PADAPTER, u8 macid); 136 void rtl8822b_c2h_handler(PADAPTER, u8 *pbuf, u16 length); 137 void rtl8822b_c2h_handler_no_io(PADAPTER, u8 *pbuf, u16 length); 138 139 #ifdef CONFIG_LPS_PWR_TRACKING 140 void rtl8822b_set_fw_thermal_rpt_cmd(_adapter *adapter, u8 enable, u8 thermal_value); 141 void rtw_lps_pwr_tracking(_adapter *adapter, u8 thermal_value); 142 #endif 143 144 #ifdef CONFIG_BT_COEXIST 145 void rtl8822b_download_BTCoex_AP_mode_rsvd_page(PADAPTER); 146 #endif /* CONFIG_BT_COEXIST */ 147 148 /* rtl8822b_phy.c */ 149 u8 rtl8822b_phy_init_mac_register(PADAPTER); 150 u8 rtl8822b_phy_init(PADAPTER); 151 void rtl8822b_phy_init_dm_priv(PADAPTER); 152 void rtl8822b_phy_deinit_dm_priv(PADAPTER); 153 void rtl8822b_phy_init_haldm(PADAPTER); 154 void rtl8822b_phy_haldm_watchdog(PADAPTER); 155 u32 rtl8822b_read_bb_reg(PADAPTER, u32 addr, u32 mask); 156 void rtl8822b_write_bb_reg(PADAPTER, u32 addr, u32 mask, u32 val); 157 u32 rtl8822b_read_rf_reg(PADAPTER adapter, enum rf_path path, u32 addr, u32 mask); 158 void rtl8822b_write_rf_reg(PADAPTER adapter, enum rf_path path, u32 addr, u32 mask, u32 val); 159 void rtl8822b_set_channel_bw(PADAPTER adapter, u8 center_ch, enum channel_width, u8 offset40, u8 offset80); 160 void rtl8822b_set_tx_power_level(PADAPTER, u8 channel); 161 void rtl8822b_set_tx_power_index(PADAPTER adapter, u32 powerindex, enum rf_path rfpath, u8 rate); 162 void rtl8822b_notch_filter_switch(PADAPTER, bool enable); 163 #ifdef CONFIG_BEAMFORMING 164 void rtl8822b_phy_bf_init(PADAPTER); 165 void rtl8822b_phy_bf_enter(PADAPTER, struct sta_info*); 166 void rtl8822b_phy_bf_leave(PADAPTER, u8 *addr); 167 void rtl8822b_phy_bf_set_gid_table(PADAPTER, struct beamformer_entry*); 168 void rtl8822b_phy_bf_set_csi_report(PADAPTER, struct _RT_CSI_INFO*); 169 void rtl8822b_phy_bf_sounding_status(PADAPTER, u8 status); 170 #endif /* CONFIG_BEAMFORMING */ 171 172 #endif /* _RTL8822B_H_ */ 173