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 __PHYDMADAPTIVITY_H__ 27*4882a593Smuzhiyun #define __PHYDMADAPTIVITY_H__ 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define ADAPTIVITY_VERSION "9.7.08" /*@20210121 changed by Archer, 30*4882a593Smuzhiyun *add dynamic th_l2h_ini 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun #define ADC_BACKOFF 12 33*4882a593Smuzhiyun #define EDCCA_TH_L2H_LB 48 34*4882a593Smuzhiyun #define TH_L2H_DIFF_IGI 8 35*4882a593Smuzhiyun #define EDCCA_HL_DIFF_NORMAL 8 36*4882a593Smuzhiyun #define IGI_2_DBM(igi) (igi - 110) 37*4882a593Smuzhiyun #define L2H_INI_RECORD_NUM 4 38*4882a593Smuzhiyun #define L2H_INI_LIMIT_PERIOD 60 /*60 sec*/ 39*4882a593Smuzhiyun /*@ [PHYDM-337][Old IC] EDCCA TH = IGI + REG setting*/ 40*4882a593Smuzhiyun #define ODM_IC_PWDB_EDCCA (ODM_RTL8188E | ODM_RTL8723B | ODM_RTL8192E |\ 41*4882a593Smuzhiyun ODM_RTL8881A | ODM_RTL8821 | ODM_RTL8812) 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #if (DM_ODM_SUPPORT_TYPE & (ODM_CE | ODM_AP)) 44*4882a593Smuzhiyun #define ADAPT_DC_BACKOFF 2 45*4882a593Smuzhiyun #elif (DM_ODM_SUPPORT_TYPE & ODM_WIN) 46*4882a593Smuzhiyun #define ADAPT_DC_BACKOFF 4 47*4882a593Smuzhiyun #elif (DM_ODM_SUPPORT_TYPE & ODM_IOT) 48*4882a593Smuzhiyun #define ADAPT_DC_BACKOFF 0 49*4882a593Smuzhiyun #endif 50*4882a593Smuzhiyun #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) 51*4882a593Smuzhiyun enum phydm_regulation_type { 52*4882a593Smuzhiyun REGULATION_FCC = 0, 53*4882a593Smuzhiyun REGULATION_MKK = 1, 54*4882a593Smuzhiyun REGULATION_ETSI = 2, 55*4882a593Smuzhiyun REGULATION_WW = 3, 56*4882a593Smuzhiyun MAX_REGULATION_NUM = 4 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun #endif 59*4882a593Smuzhiyun struct phydm_l2h_ini_recorder_strcut { 60*4882a593Smuzhiyun u8 l2h_ini_bitmap; /*@Don't add any new parameter before this*/ 61*4882a593Smuzhiyun s8 l2h_ini_hist[L2H_INI_RECORD_NUM]; 62*4882a593Smuzhiyun u32 low_rate_tx_fail_hist[L2H_INI_RECORD_NUM]; 63*4882a593Smuzhiyun u8 damping_limit_en; 64*4882a593Smuzhiyun s8 damping_limit_val; /*@Limit l2h_ini_dyn_max*/ 65*4882a593Smuzhiyun u32 limit_time; 66*4882a593Smuzhiyun u32 limit_low_rate_tx_fail; 67*4882a593Smuzhiyun }; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun enum phydm_edcca_mode { 70*4882a593Smuzhiyun PHYDM_EDCCA_NORMAL_MODE = 0, 71*4882a593Smuzhiyun PHYDM_EDCCA_ADAPT_MODE = 1 72*4882a593Smuzhiyun }; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun enum phydm_adapinfo { 75*4882a593Smuzhiyun PHYDM_ADAPINFO_CARRIER_SENSE_ENABLE = 0, 76*4882a593Smuzhiyun PHYDM_ADAPINFO_TH_L2H_INI, 77*4882a593Smuzhiyun PHYDM_ADAPINFO_TH_EDCCA_HL_DIFF, 78*4882a593Smuzhiyun PHYDM_ADAPINFO_AP_NUM_TH, 79*4882a593Smuzhiyun PHYDM_ADAPINFO_DOMAIN_CODE_2G, 80*4882a593Smuzhiyun PHYDM_ADAPINFO_DOMAIN_CODE_5G, 81*4882a593Smuzhiyun PHYDM_ADAPINFO_SWITCH_TH_L2H_INI_IN_BAND 82*4882a593Smuzhiyun }; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun enum phydm_mac_edcca_type { 85*4882a593Smuzhiyun PHYDM_IGNORE_EDCCA = 0, 86*4882a593Smuzhiyun PHYDM_DONT_IGNORE_EDCCA = 1 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun enum phydm_adaptivity_debug_mode { 90*4882a593Smuzhiyun PHYDM_ADAPT_MSG = 0, 91*4882a593Smuzhiyun PHYDM_ADAPT_DEBUG = 1, 92*4882a593Smuzhiyun PHYDM_ADAPT_RESUME = 2, 93*4882a593Smuzhiyun PHYDM_L2H_INI_DEBUG = 3 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun struct phydm_adaptivity_struct { 97*4882a593Smuzhiyun struct phydm_l2h_ini_recorder_strcut l2h_ini_recorder_t; 98*4882a593Smuzhiyun u32 low_rate_tx_fail_th[3]; 99*4882a593Smuzhiyun u32 rts_drop_limit_time; 100*4882a593Smuzhiyun s8 l2h_ini_range_max; /*@l2h_ini_dynamic_max*/ 101*4882a593Smuzhiyun s8 l2h_ini_range_min; /*@l2h_ini_dynamic_min*/ 102*4882a593Smuzhiyun boolean rts_drop_en; 103*4882a593Smuzhiyun boolean is_dbg_low_rate_tx_fail_th; 104*4882a593Smuzhiyun boolean is_adapt_by_dig; 105*4882a593Smuzhiyun boolean mode_cvrt_en; 106*4882a593Smuzhiyun s8 th_l2h_ini_backup; 107*4882a593Smuzhiyun s8 th_edcca_hl_diff_backup; 108*4882a593Smuzhiyun s8 igi_base; 109*4882a593Smuzhiyun s8 h2l_lb; 110*4882a593Smuzhiyun s8 l2h_lb; 111*4882a593Smuzhiyun u8 ap_num_th; 112*4882a593Smuzhiyun u8 l2h_dyn_min; 113*4882a593Smuzhiyun u32 adaptivity_dbg_port; /*N:0x208, AC:0x209*/ 114*4882a593Smuzhiyun u8 debug_mode; 115*4882a593Smuzhiyun u16 igi_up_bound_lmt_cnt; /*@When igi_up_bound_lmt_cnt !=0, limit IGI upper bound to "adapt_igi_up"*/ 116*4882a593Smuzhiyun u16 igi_up_bound_lmt_val; /*@max value of igi_up_bound_lmt_cnt*/ 117*4882a593Smuzhiyun boolean igi_lmt_en; 118*4882a593Smuzhiyun u8 adapt_igi_up; 119*4882a593Smuzhiyun u32 rvrt_val[2]; /*@all rvrt_val for pause API must set to u32*/ 120*4882a593Smuzhiyun s8 th_l2h; 121*4882a593Smuzhiyun s8 th_h2l; 122*4882a593Smuzhiyun u8 regulation_2g; 123*4882a593Smuzhiyun u8 regulation_5g; 124*4882a593Smuzhiyun u8 switch_th_l2h_ini_in_band; 125*4882a593Smuzhiyun }; 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun #ifdef PHYDM_SUPPORT_ADAPTIVITY 128*4882a593Smuzhiyun void phydm_adaptivity_debug(void *dm_void, char input[][16], u32 *_used, 129*4882a593Smuzhiyun char *output, u32 *_out_len); 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun void phydm_set_edcca_val(void *dm_void, u32 *val_buf, u8 val_len); 132*4882a593Smuzhiyun #endif 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun void phydm_set_edcca_threshold_api(void *dm_void); 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun void phydm_adaptivity_info_init(void *dm_void, enum phydm_adapinfo cmn_info, 137*4882a593Smuzhiyun u32 value); 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun void phydm_adaptivity_info_update(void *dm_void, enum phydm_adapinfo cmn_info, 140*4882a593Smuzhiyun u32 value); 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun void phydm_adaptivity_init(void *dm_void); 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun void phydm_adaptivity(void *dm_void); 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun #endif 147