1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2007 - 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 * The full GNU General Public License is included in this distribution in the 15*4882a593Smuzhiyun * file called LICENSE. 16*4882a593Smuzhiyun * 17*4882a593Smuzhiyun * Contact Information: 18*4882a593Smuzhiyun * wlanfae <wlanfae@realtek.com> 19*4882a593Smuzhiyun * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park, 20*4882a593Smuzhiyun * Hsinchu 300, Taiwan. 21*4882a593Smuzhiyun * 22*4882a593Smuzhiyun * Larry Finger <Larry.Finger@lwfinger.net> 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun *****************************************************************************/ 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #ifndef __PHYDMPATHDIV_H__ 27*4882a593Smuzhiyun #define __PHYDMPATHDIV_H__ 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #ifdef CONFIG_PATH_DIVERSITY 30*4882a593Smuzhiyun /* @2019.03.07 open resp tx path h2c only for 1ss status*/ 31*4882a593Smuzhiyun #define PATHDIV_VERSION "4.4" 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #if (RTL8192F_SUPPORT || RTL8822B_SUPPORT || RTL8822C_SUPPORT ||\ 34*4882a593Smuzhiyun RTL8812F_SUPPORT || RTL8197G_SUPPORT) 35*4882a593Smuzhiyun #define PHYDM_CONFIG_PATH_DIV_V2 36*4882a593Smuzhiyun #endif 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #define USE_PATH_A_AS_DEFAULT_ANT /* @for 8814 dynamic TX path selection */ 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #define NUM_RESET_DTP_PERIOD 5 41*4882a593Smuzhiyun #define ANT_DECT_RSSI_TH 3 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #define PATH_A 1 44*4882a593Smuzhiyun #define PATH_B 2 45*4882a593Smuzhiyun #define PATH_C 3 46*4882a593Smuzhiyun #define PATH_D 4 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #define PHYDM_AUTO_PATH 0 49*4882a593Smuzhiyun #define PHYDM_FIX_PATH 1 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun #define NUM_CHOOSE2_FROM4 6 52*4882a593Smuzhiyun #define NUM_CHOOSE3_FROM4 4 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun enum phydm_dtp_state { 55*4882a593Smuzhiyun PHYDM_DTP_INIT = 1, 56*4882a593Smuzhiyun PHYDM_DTP_RUNNING_1 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun enum phydm_path_div_type { 60*4882a593Smuzhiyun PHYDM_2R_PATH_DIV = 1, 61*4882a593Smuzhiyun PHYDM_4R_PATH_DIV = 2 62*4882a593Smuzhiyun }; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun enum phydm_path_ctrl { 65*4882a593Smuzhiyun TX_PATH_BY_REG = 0, 66*4882a593Smuzhiyun TX_PATH_BY_DESC = 1, 67*4882a593Smuzhiyun TX_PATH_CTRL_INIT 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun struct path_txdesc_ctrl { 71*4882a593Smuzhiyun u8 ant_map_a : 2; 72*4882a593Smuzhiyun u8 ant_map_b : 2; 73*4882a593Smuzhiyun u8 ntx_map : 4; 74*4882a593Smuzhiyun }; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun struct _ODM_PATH_DIVERSITY_ { 77*4882a593Smuzhiyun boolean stop_path_div; /*@Limit by enabled path number*/ 78*4882a593Smuzhiyun boolean path_div_in_progress; 79*4882a593Smuzhiyun boolean cck_fix_path_en; /*@ BB Reg for Adv-Ctrl (or debug mode)*/ 80*4882a593Smuzhiyun boolean ofdm_fix_path_en; /*@ BB Reg for Adv-Ctrl (or debug mode)*/ 81*4882a593Smuzhiyun enum bb_path cck_fix_path_sel; /*@ BB Reg for Adv-Ctrl (or debug mode)*/ 82*4882a593Smuzhiyun enum bb_path ofdm_fix_path_sel;/*@ BB Reg for Adv-Ctrl (or debug mode)*/ 83*4882a593Smuzhiyun enum phydm_path_ctrl tx_path_ctrl; 84*4882a593Smuzhiyun enum bb_path default_tx_path; 85*4882a593Smuzhiyun enum bb_path path_sel[ODM_ASSOCIATE_ENTRY_NUM]; 86*4882a593Smuzhiyun u32 path_a_sum[ODM_ASSOCIATE_ENTRY_NUM]; 87*4882a593Smuzhiyun u32 path_b_sum[ODM_ASSOCIATE_ENTRY_NUM]; 88*4882a593Smuzhiyun u16 path_a_cnt[ODM_ASSOCIATE_ENTRY_NUM]; 89*4882a593Smuzhiyun u16 path_b_cnt[ODM_ASSOCIATE_ENTRY_NUM]; 90*4882a593Smuzhiyun u8 phydm_path_div_type; 91*4882a593Smuzhiyun boolean force_update; 92*4882a593Smuzhiyun #if RTL8814A_SUPPORT 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun u32 path_a_sum_all; 95*4882a593Smuzhiyun u32 path_b_sum_all; 96*4882a593Smuzhiyun u32 path_c_sum_all; 97*4882a593Smuzhiyun u32 path_d_sum_all; 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun u32 path_a_cnt_all; 100*4882a593Smuzhiyun u32 path_b_cnt_all; 101*4882a593Smuzhiyun u32 path_c_cnt_all; 102*4882a593Smuzhiyun u32 path_d_cnt_all; 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun u8 dtp_period; 105*4882a593Smuzhiyun boolean is_become_linked; 106*4882a593Smuzhiyun boolean is_u3_mode; 107*4882a593Smuzhiyun u8 num_tx_path; 108*4882a593Smuzhiyun u8 default_path; 109*4882a593Smuzhiyun u8 num_candidate; 110*4882a593Smuzhiyun u8 ant_candidate_1; 111*4882a593Smuzhiyun u8 ant_candidate_2; 112*4882a593Smuzhiyun u8 ant_candidate_3; 113*4882a593Smuzhiyun u8 phydm_dtp_state; 114*4882a593Smuzhiyun u8 dtp_check_patha_counter; 115*4882a593Smuzhiyun boolean fix_path_bfer; 116*4882a593Smuzhiyun u8 search_space_2[NUM_CHOOSE2_FROM4]; 117*4882a593Smuzhiyun u8 search_space_3[NUM_CHOOSE3_FROM4]; 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun u8 pre_tx_path; 120*4882a593Smuzhiyun u8 use_path_a_as_default_ant; 121*4882a593Smuzhiyun boolean is_path_a_exist; 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun #endif 124*4882a593Smuzhiyun }; 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun void phydm_set_tx_path_by_bb_reg(void *dm_void, enum bb_path tx_path_sel_1ss); 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun void phydm_get_tx_path_txdesc_jgr3(void *dm_void, u8 macid, 129*4882a593Smuzhiyun struct path_txdesc_ctrl *desc); 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun void phydm_c2h_dtp_handler(void *dm_void, u8 *cmd_buf, u8 cmd_len); 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun void phydm_tx_path_diversity_init(void *dm_void); 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun void phydm_tx_path_diversity(void *dm_void); 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun void phydm_process_rssi_for_path_div(void *dm_void, void *phy_info_void, 138*4882a593Smuzhiyun void *pkt_info_void); 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun void phydm_pathdiv_debug(void *dm_void, char input[][16], u32 *_used, 141*4882a593Smuzhiyun char *output, u32 *_out_len); 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun #endif /* @#ifdef CONFIG_PATH_DIVERSITY */ 144*4882a593Smuzhiyun #endif /* @#ifndef __PHYDMPATHDIV_H__ */ 145*4882a593Smuzhiyun 146