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.07" /*@20190321 changed by Kevin, 30*4882a593Smuzhiyun *add 8721D threshold l2h init 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 /*@ [PHYDM-337][Old IC] EDCCA TH = IGI + REG setting*/ 38*4882a593Smuzhiyun #define ODM_IC_PWDB_EDCCA (ODM_RTL8188E | ODM_RTL8723B | ODM_RTL8192E |\ 39*4882a593Smuzhiyun ODM_RTL8881A | ODM_RTL8821 | ODM_RTL8812) 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #if (DM_ODM_SUPPORT_TYPE & (ODM_CE | ODM_AP)) 42*4882a593Smuzhiyun #define ADAPT_DC_BACKOFF 2 43*4882a593Smuzhiyun #elif (DM_ODM_SUPPORT_TYPE & ODM_WIN) 44*4882a593Smuzhiyun #define ADAPT_DC_BACKOFF 4 45*4882a593Smuzhiyun #elif (DM_ODM_SUPPORT_TYPE & ODM_IOT) 46*4882a593Smuzhiyun #define ADAPT_DC_BACKOFF 0 47*4882a593Smuzhiyun #endif 48*4882a593Smuzhiyun #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) 49*4882a593Smuzhiyun enum phydm_regulation_type { 50*4882a593Smuzhiyun REGULATION_FCC = 0, 51*4882a593Smuzhiyun REGULATION_MKK = 1, 52*4882a593Smuzhiyun REGULATION_ETSI = 2, 53*4882a593Smuzhiyun REGULATION_WW = 3, 54*4882a593Smuzhiyun MAX_REGULATION_NUM = 4 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun #endif 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun enum phydm_edcca_mode { 59*4882a593Smuzhiyun PHYDM_EDCCA_NORMAL_MODE = 0, 60*4882a593Smuzhiyun PHYDM_EDCCA_ADAPT_MODE = 1 61*4882a593Smuzhiyun }; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun enum phydm_adapinfo { 64*4882a593Smuzhiyun PHYDM_ADAPINFO_CARRIER_SENSE_ENABLE = 0, 65*4882a593Smuzhiyun PHYDM_ADAPINFO_TH_L2H_INI, 66*4882a593Smuzhiyun PHYDM_ADAPINFO_TH_EDCCA_HL_DIFF, 67*4882a593Smuzhiyun PHYDM_ADAPINFO_AP_NUM_TH, 68*4882a593Smuzhiyun PHYDM_ADAPINFO_DOMAIN_CODE_2G, 69*4882a593Smuzhiyun PHYDM_ADAPINFO_DOMAIN_CODE_5G, 70*4882a593Smuzhiyun PHYDM_ADAPINFO_SWITCH_TH_L2H_INI_IN_BAND 71*4882a593Smuzhiyun }; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun enum phydm_mac_edcca_type { 74*4882a593Smuzhiyun PHYDM_IGNORE_EDCCA = 0, 75*4882a593Smuzhiyun PHYDM_DONT_IGNORE_EDCCA = 1 76*4882a593Smuzhiyun }; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun enum phydm_adaptivity_debug_mode { 79*4882a593Smuzhiyun PHYDM_ADAPT_MSG = 0, 80*4882a593Smuzhiyun PHYDM_ADAPT_DEBUG = 1, 81*4882a593Smuzhiyun PHYDM_ADAPT_RESUME = 2, 82*4882a593Smuzhiyun }; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun struct phydm_adaptivity_struct { 85*4882a593Smuzhiyun boolean mode_cvrt_en; 86*4882a593Smuzhiyun s8 th_l2h_ini_backup; 87*4882a593Smuzhiyun s8 th_edcca_hl_diff_backup; 88*4882a593Smuzhiyun s8 igi_base; 89*4882a593Smuzhiyun s8 h2l_lb; 90*4882a593Smuzhiyun s8 l2h_lb; 91*4882a593Smuzhiyun u8 ap_num_th; 92*4882a593Smuzhiyun u8 l2h_dyn_min; 93*4882a593Smuzhiyun u32 adaptivity_dbg_port; /*N:0x208, AC:0x209*/ 94*4882a593Smuzhiyun u8 debug_mode; 95*4882a593Smuzhiyun u16 igi_up_bound_lmt_cnt; /*@When igi_up_bound_lmt_cnt !=0, limit IGI upper bound to "adapt_igi_up"*/ 96*4882a593Smuzhiyun u16 igi_up_bound_lmt_val; /*@max value of igi_up_bound_lmt_cnt*/ 97*4882a593Smuzhiyun boolean igi_lmt_en; 98*4882a593Smuzhiyun u8 adapt_igi_up; 99*4882a593Smuzhiyun u32 rvrt_val[2]; /*@all rvrt_val for pause API must set to u32*/ 100*4882a593Smuzhiyun s8 th_l2h; 101*4882a593Smuzhiyun s8 th_h2l; 102*4882a593Smuzhiyun u8 regulation_2g; 103*4882a593Smuzhiyun u8 regulation_5g; 104*4882a593Smuzhiyun u8 switch_th_l2h_ini_in_band; 105*4882a593Smuzhiyun }; 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun #ifdef PHYDM_SUPPORT_ADAPTIVITY 108*4882a593Smuzhiyun void phydm_adaptivity_debug(void *dm_void, char input[][16], u32 *_used, 109*4882a593Smuzhiyun char *output, u32 *_out_len); 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun void phydm_set_edcca_val(void *dm_void, u32 *val_buf, u8 val_len); 112*4882a593Smuzhiyun #endif 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun void phydm_set_edcca_threshold_api(void *dm_void); 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun void phydm_adaptivity_info_init(void *dm_void, enum phydm_adapinfo cmn_info, 117*4882a593Smuzhiyun u32 value); 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun void phydm_adaptivity_info_update(void *dm_void, enum phydm_adapinfo cmn_info, 120*4882a593Smuzhiyun u32 value); 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun void phydm_adaptivity_init(void *dm_void); 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun void phydm_adaptivity(void *dm_void); 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun #endif 127