1 /******************************************************************************
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
19 ******************************************************************************/
21 #ifndef __PHYDMPATHDIV_H__
22 #define __PHYDMPATHDIV_H__
23 /*#define PATHDIV_VERSION "2.0" //2014.11.04*/
24 #define PATHDIV_VERSION "3.1" /*2015.07.29 by YuChen*/
26 #if (defined(CONFIG_PATH_DIVERSITY))
27 #define USE_PATH_A_AS_DEFAULT_ANT /* for 8814 dynamic TX path selection */
29 #define NUM_RESET_DTP_PERIOD 5
30 #define ANT_DECT_RSSI_TH 3
37 #define PHYDM_AUTO_PATH 0
38 #define PHYDM_FIX_PATH 1
40 #define NUM_CHOOSE2_FROM4 6
41 #define NUM_CHOOSE3_FROM4 4
44 #define PHYDM_A BIT(0)
45 #define PHYDM_B BIT(1)
46 #define PHYDM_C BIT(2)
47 #define PHYDM_D BIT(3)
48 #define PHYDM_AB (BIT(0) | BIT1) /* 0 */
49 #define PHYDM_AC (BIT(0) | BIT2) /* 1 */
50 #define PHYDM_AD (BIT(0) | BIT3) /* 2 */
51 #define PHYDM_BC (BIT(1) | BIT2) /* 3 */
52 #define PHYDM_BD (BIT(1) | BIT3) /* 4 */
53 #define PHYDM_CD (BIT(2) | BIT3) /* 5 */
55 #define PHYDM_ABC (BIT(0) | BIT1 | BIT2) /* 0*/
56 #define PHYDM_ABD (BIT(0) | BIT1 | BIT3) /* 1*/
57 #define PHYDM_ACD (BIT(0) | BIT2 | BIT3) /* 2*/
58 #define PHYDM_BCD (BIT(1) | BIT2 | BIT3) /* 3*/
60 #define PHYDM_ABCD (BIT(0) | BIT(1) | BIT(2) | BIT(3))
63 enum phydm_dtp_state {
69 enum phydm_path_div_type {
70 PHYDM_2R_PATH_DIV = 1,
75 phydm_process_rssi_for_path_div(
77 void *p_phy_info_void,
81 struct _ODM_PATH_DIVERSITY_ {
83 u8 path_sel[ODM_ASSOCIATE_ENTRY_NUM];
84 u32 path_a_sum[ODM_ASSOCIATE_ENTRY_NUM];
85 u32 path_b_sum[ODM_ASSOCIATE_ENTRY_NUM];
86 u16 path_a_cnt[ODM_ASSOCIATE_ENTRY_NUM];
87 u16 path_b_cnt[ODM_ASSOCIATE_ENTRY_NUM];
88 u8 phydm_path_div_type;
102 boolean is_become_linked;
111 u8 dtp_check_patha_counter;
112 boolean fix_path_bfer;
113 u8 search_space_2[NUM_CHOOSE2_FROM4];
114 u8 search_space_3[NUM_CHOOSE3_FROM4];
117 u8 use_path_a_as_default_ant;
118 boolean is_path_a_exist;
124 #endif /* #if(defined(CONFIG_PATH_DIVERSITY)) */
127 phydm_c2h_dtp_handler(
134 odm_path_diversity_init(
154 /* 1 [OLD IC]-------------------------------------------------------------------------------- */
161 #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN))
163 /* #define PATHDIV_ENABLE 1 */
164 #define dm_path_div_rssi_check odm_path_div_chk_per_pkt_rssi
165 #define path_div_check_before_link8192c odm_path_diversity_before_link92c
170 struct _path_div_parameter_define_ {
177 /* for 2G IQK information */
192 odm_path_diversity_init_92c(
193 struct _ADAPTER *adapter
197 odm_2t_path_diversity_init_92c(
198 struct _ADAPTER *adapter
202 odm_1t_path_diversity_init_92c(
203 struct _ADAPTER *adapter
207 odm_is_connected_92c(
208 struct _ADAPTER *adapter
212 odm_path_diversity_before_link92c(
213 /* struct _ADAPTER* adapter */
214 struct PHY_DM_STRUCT *p_dm_odm
218 odm_path_diversity_after_link_92c(
219 struct _ADAPTER *adapter
223 odm_set_resp_path_92c(
224 struct _ADAPTER *adapter,
229 odm_ofdm_tx_path_diversity_92c(
230 struct _ADAPTER *adapter
234 odm_cck_tx_path_diversity_92c(
235 struct _ADAPTER *adapter
239 odm_reset_path_diversity_92c(
240 struct _ADAPTER *adapter
244 odm_cck_tx_path_diversity_callback(
245 struct timer_list *p_timer
249 odm_cck_tx_path_diversity_work_item_callback(
254 odm_path_div_chk_ant_switch_callback(
255 struct timer_list *p_timer
259 odm_path_div_chk_ant_switch_workitem_callback(
265 odm_path_div_chk_ant_switch(
266 struct PHY_DM_STRUCT *p_dm_odm
270 odm_cck_path_diversity_chk_per_pkt_rssi(
271 struct _ADAPTER *adapter,
273 boolean is_match_bssid,
274 struct _WLAN_STA *p_entry,
280 odm_path_div_chk_per_pkt_rssi(
281 struct _ADAPTER *adapter,
283 boolean is_match_bssid,
284 struct _WLAN_STA *p_entry,
289 odm_path_div_rest_after_link(
290 struct PHY_DM_STRUCT *p_dm_odm
294 odm_fill_tx_path_in_txdesc(
295 struct _ADAPTER *adapter,
301 odm_path_div_init_92d(
302 struct PHY_DM_STRUCT *p_dm_odm
306 odm_sw_ant_div_select_scan_chnl(
307 struct _ADAPTER *adapter
311 odm_sw_ant_div_construct_scan_chnl(
312 struct _ADAPTER *adapter,
316 #endif /* #if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) */
319 #endif /* #ifndef __ODMPATHDIV_H__ */