summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/HAL/phydm/phydm_pathdiv.h
blob: 020288ea432cbc23faf6451344e1055485dd8638 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
/******************************************************************************
 *
 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
 *                                        
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 *
 *
 ******************************************************************************/
 
#ifndef	__PHYDMPATHDIV_H__
#define    __PHYDMPATHDIV_H__
/*#define PATHDIV_VERSION "2.0" //2014.11.04*/
#define PATHDIV_VERSION	"3.0" /*2015.01.13 Dino*/

#if(defined(CONFIG_PATH_DIVERSITY))
#define USE_PATH_A_AS_DEFAULT_ANT   //for 8814 dynamic TX path selection

#define	NUM_RESET_DTP_PERIOD 5
#define	ANT_DECT_RSSI_TH 3 

#define PATH_A 1
#define PATH_B 2
#define PATH_C 3
#define PATH_D 4

#define PHYDM_AUTO_PATH	0
#define PHYDM_FIX_PATH		1

#define NUM_CHOOSE2_FROM4 6
#define NUM_CHOOSE3_FROM4 4


#define		PHYDM_A		 BIT0
#define		PHYDM_B		 BIT1
#define		PHYDM_C		 BIT2
#define		PHYDM_D		 BIT3
#define		PHYDM_AB	 (BIT0 | BIT1)  // 0
#define		PHYDM_AC	 (BIT0 | BIT2)  // 1
#define		PHYDM_AD	 (BIT0 | BIT3)  // 2
#define		PHYDM_BC	 (BIT1 | BIT2)  // 3
#define		PHYDM_BD	 (BIT1 | BIT3)  // 4
#define		PHYDM_CD	 (BIT2 | BIT3)  // 5

#define		PHYDM_ABC	 (BIT0 | BIT1 | BIT2) /* 0*/
#define		PHYDM_ABD	 (BIT0 | BIT1 | BIT3) /* 1*/
#define		PHYDM_ACD	 (BIT0 | BIT2 | BIT3) /* 2*/
#define		PHYDM_BCD	 (BIT1 | BIT2 | BIT3) /* 3*/

#define		PHYDM_ABCD	 (BIT0 | BIT1 | BIT2 | BIT3)


typedef enum dtp_state
{
	PHYDM_DTP_INIT=1,
	PHYDM_DTP_RUNNING_1

}PHYDM_DTP_STATE;

typedef enum path_div_type
{
	PHYDM_2R_PATH_DIV = 1,
	PHYDM_4R_PATH_DIV = 2
}PHYDM_PATH_DIV_TYPE;

VOID
phydm_process_rssi_for_path_div(	
	IN OUT		PVOID			pDM_VOID,	
	IN			PVOID			p_phy_info_void,
	IN			PVOID			p_pkt_info_void
	);

typedef struct _ODM_PATH_DIVERSITY_
{
	u1Byte	RespTxPath;
	u1Byte	PathSel[ODM_ASSOCIATE_ENTRY_NUM];
	u4Byte	PathA_Sum[ODM_ASSOCIATE_ENTRY_NUM];
	u4Byte	PathB_Sum[ODM_ASSOCIATE_ENTRY_NUM];
	u2Byte	PathA_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
	u2Byte	PathB_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
	u1Byte	path_div_type;
  #if RTL8814A_SUPPORT
	
	u4Byte	path_a_sum_all;
	u4Byte	path_b_sum_all;
	u4Byte	path_c_sum_all;
	u4Byte	path_d_sum_all;

	u4Byte	path_a_cnt_all;
	u4Byte	path_b_cnt_all;
	u4Byte	path_c_cnt_all;
	u4Byte	path_d_cnt_all;
	
	u1Byte	dtp_period;
	BOOLEAN	bBecomeLinked;
	BOOLEAN	is_u3_mode;
	u1Byte	num_tx_path;
	u1Byte	default_path;
	u1Byte	num_candidate;
	u1Byte	ant_candidate_1;
	u1Byte	ant_candidate_2;
	u1Byte	ant_candidate_3;
	u1Byte     dtp_state;
	u1Byte	dtp_check_patha_counter;
	BOOLEAN	fix_path_bfer;
	u1Byte	search_space_2[NUM_CHOOSE2_FROM4];
	u1Byte	search_space_3[NUM_CHOOSE3_FROM4];
	
	u1Byte	pre_tx_path;
	u1Byte	use_path_a_as_default_ant;
	BOOLEAN is_pathA_exist;

  #endif
}PATHDIV_T, *pPATHDIV_T;


#endif //#if(defined(CONFIG_PATH_DIVERSITY))

VOID
phydm_c2h_dtp_handler(
	 IN	PVOID	pDM_VOID,
	 IN 	pu1Byte   CmdBuf,
	 IN 	u1Byte	CmdLen
	);

VOID
odm_PathDiversityInit(
	IN	PVOID	pDM_VOID
	);

VOID
odm_PathDiversity(
	IN	PVOID	pDM_VOID
	);

VOID
odm_pathdiv_debug(
	IN		PVOID		pDM_VOID,
	IN		u4Byte		*const dm_value,
	IN		u4Byte		*_used,
	OUT		char		*output,
	IN		u4Byte		*_out_len
	);



//1 [OLD IC]--------------------------------------------------------------------------------






#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) 

//#define   PATHDIV_ENABLE 	 1
#define dm_PathDiv_RSSI_Check	ODM_PathDivChkPerPktRssi
#define PathDivCheckBeforeLink8192C	ODM_PathDiversityBeforeLink92C




typedef struct _PathDiv_Parameter_define_
{
	u4Byte org_5g_RegE30;
	u4Byte org_5g_RegC14;
	u4Byte org_5g_RegCA0;
	u4Byte swt_5g_RegE30;
	u4Byte swt_5g_RegC14;
	u4Byte swt_5g_RegCA0;
	//for 2G IQK information
	u4Byte org_2g_RegC80;
	u4Byte org_2g_RegC4C;
	u4Byte org_2g_RegC94;
	u4Byte org_2g_RegC14;
	u4Byte org_2g_RegCA0;

	u4Byte swt_2g_RegC80;
	u4Byte swt_2g_RegC4C;
	u4Byte swt_2g_RegC94;
	u4Byte swt_2g_RegC14;
	u4Byte swt_2g_RegCA0;
}PATHDIV_PARA,*pPATHDIV_PARA;

VOID	
odm_PathDiversityInit_92C(
	IN	PADAPTER	Adapter
	);

VOID	
odm_2TPathDiversityInit_92C(
	IN	PADAPTER	Adapter
	);

VOID	
odm_1TPathDiversityInit_92C(	
	IN	PADAPTER	Adapter
	);

BOOLEAN
odm_IsConnected_92C(
	IN	PADAPTER	Adapter
	);

BOOLEAN 
ODM_PathDiversityBeforeLink92C(
	//IN	PADAPTER	Adapter
	IN		PDM_ODM_T		pDM_Odm
	);

VOID	
odm_PathDiversityAfterLink_92C(
	IN	PADAPTER	Adapter
	);

VOID
odm_SetRespPath_92C(	
	IN	PADAPTER	Adapter, 	
	IN	u1Byte	DefaultRespPath
	);

VOID	
odm_OFDMTXPathDiversity_92C(
	IN	PADAPTER	Adapter
	);

VOID	
odm_CCKTXPathDiversity_92C(	
	IN	PADAPTER	Adapter
	);

VOID	
odm_ResetPathDiversity_92C(	
	IN	PADAPTER	Adapter
	);

VOID
odm_CCKTXPathDiversityCallback(
	PRT_TIMER		pTimer
	);

VOID
odm_CCKTXPathDiversityWorkItemCallback(
	IN PVOID            pContext
	);

VOID
odm_PathDivChkAntSwitchCallback(
	PRT_TIMER		pTimer
	);

VOID
odm_PathDivChkAntSwitchWorkitemCallback(
	IN PVOID            pContext
	);


VOID 
odm_PathDivChkAntSwitch(
	PDM_ODM_T    pDM_Odm
	);

VOID
ODM_CCKPathDiversityChkPerPktRssi(
	PADAPTER		Adapter,
	BOOLEAN			bIsDefPort,
	BOOLEAN			bMatchBSSID,
	PRT_WLAN_STA	pEntry,
	PRT_RFD			pRfd,
	pu1Byte			pDesc
	);

VOID 
ODM_PathDivChkPerPktRssi(
	PADAPTER		Adapter,
	BOOLEAN			bIsDefPort,
	BOOLEAN			bMatchBSSID,
	PRT_WLAN_STA	pEntry,
	PRT_RFD			pRfd	
	);

VOID
ODM_PathDivRestAfterLink(
	IN	PDM_ODM_T		pDM_Odm
	);

VOID
ODM_FillTXPathInTXDESC(
		IN	PADAPTER	Adapter,
		IN	PRT_TCB		pTcb,
		IN	pu1Byte		pDesc
	);

VOID
odm_PathDivInit_92D(
	IN	PDM_ODM_T 	pDM_Odm
	);

u1Byte
odm_SwAntDivSelectScanChnl(
	IN	PADAPTER	Adapter
	);

VOID
odm_SwAntDivConstructScanChnl(
	IN	PADAPTER	Adapter,
	IN	u1Byte		ScanChnl
	);
	
 #endif       //#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) 
 
 
 #endif		 //#ifndef  __ODMPATHDIV_H__