xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8822cs/hal/phydm/phydm_adaptivity.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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