phydm_antdiv.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2017 Realtek Corporation.
  4. *
  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.
  8. *
  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
  12. * more details.
  13. *
  14. * The full GNU General Public License is included in this distribution in the
  15. * file called LICENSE.
  16. *
  17. * Contact Information:
  18. * wlanfae <wlanfae@realtek.com>
  19. * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
  20. * Hsinchu 300, Taiwan.
  21. *
  22. * Larry Finger <Larry.Finger@lwfinger.net>
  23. *
  24. *****************************************************************************/
  25. #ifndef __PHYDMANTDIV_H__
  26. #define __PHYDMANTDIV_H__
  27. /*@#define ANTDIV_VERSION "2.0" //2014.11.04*/
  28. /*@#define ANTDIV_VERSION "2.1" //2015.01.13 Dino*/
  29. /*@#define ANTDIV_VERSION "2.2" 2015.01.16 Dino*/
  30. /*@#define ANTDIV_VERSION "3.1" 2015.07.29 YuChen, remove 92c 92d 8723a*/
  31. /*@#define ANTDIV_VERSION "3.2" 2015.08.11 Stanley, disable antenna diversity when BT is enable for 8723B*/
  32. /*@#define ANTDIV_VERSION "3.3" 2015.08.12 Stanley. 8723B does not need to check the antenna is control by BT, because antenna diversity only works when BT is disable or radio off*/
  33. /*@#define ANTDIV_VERSION "3.4" 2015.08.28 Dino 1.Add 8821A Smart Antenna 2. Add 8188F SW S0S1 Antenna Diversity*/
  34. /*@#define ANTDIV_VERSION "3.5" 2015.10.07 Stanley Always check antenna detection result from BT-coex. for 8723B, not from PHYDM*/
  35. /*@#define ANTDIV_VERSION "3.6"*/ /*@2015.11.16 Stanley */
  36. /*@#define ANTDIV_VERSION "3.7"*/ /*@2015.11.20 Dino Add SmartAnt FAT Patch */
  37. /*@#define ANTDIV_VERSION "3.8" 2015.12.21 Dino, Add SmartAnt dynamic training packet num */
  38. /*@#define ANTDIV_VERSION "3.9" 2016.01.05 Dino, Add SmartAnt cmd for converting single & two smtant, and add cmd for adjust truth table */
  39. #define ANTDIV_VERSION "4.0" /*@2017.05.25 Mark, Add SW antenna diversity for 8821c because HW transient issue */
  40. /* @1 ============================================================
  41. * 1 Definition
  42. * 1 ============================================================
  43. */
  44. #define ANTDIV_INIT 0xff
  45. #define MAIN_ANT 1 /*@ant A or ant Main or S1*/
  46. #define AUX_ANT 2 /*@AntB or ant Aux or S0*/
  47. #define MAX_ANT 3 /* @3 for AP using*/
  48. #define ANT1_2G 0 /* @= ANT2_5G for 8723D BTG S1 RX S0S1 diversity for 8723D, TX fixed at S1 */
  49. #define ANT2_2G 1 /* @= ANT1_5G for 8723D BTG S0 RX S0S1 diversity for 8723D, TX fixed at S1 */
  50. /*smart antenna*/
  51. #define SUPPORT_RF_PATH_NUM 4
  52. #define SUPPORT_BEAM_PATTERN_NUM 4
  53. #define NUM_ANTENNA_8821A 2
  54. #define SUPPORT_BEAM_SET_PATTERN_NUM 16
  55. #define NO_FIX_TX_ANT 0
  56. #define FIX_TX_AT_MAIN 1
  57. #define FIX_AUX_AT_MAIN 2
  58. /* @Antenna Diversty Control type */
  59. #define ODM_AUTO_ANT 0
  60. #define ODM_FIX_MAIN_ANT 1
  61. #define ODM_FIX_AUX_ANT 2
  62. #define ODM_N_ANTDIV_SUPPORT (ODM_RTL8188E | ODM_RTL8192E | ODM_RTL8723B | ODM_RTL8188F | ODM_RTL8723D | ODM_RTL8195A | ODM_RTL8197F)
  63. #define ODM_AC_ANTDIV_SUPPORT (ODM_RTL8821 | ODM_RTL8881A | ODM_RTL8812 | ODM_RTL8821C | ODM_RTL8822B | ODM_RTL8814B)
  64. #define ODM_ANTDIV_SUPPORT (ODM_N_ANTDIV_SUPPORT | ODM_AC_ANTDIV_SUPPORT)
  65. #define ODM_SMART_ANT_SUPPORT (ODM_RTL8188E | ODM_RTL8192E)
  66. #define ODM_HL_SMART_ANT_TYPE1_SUPPORT (ODM_RTL8821 | ODM_RTL8822B)
  67. #define ODM_ANTDIV_2G_SUPPORT_IC (ODM_RTL8188E | ODM_RTL8192E | ODM_RTL8723B | ODM_RTL8881A | ODM_RTL8188F | ODM_RTL8723D | ODM_RTL8197F)
  68. #define ODM_ANTDIV_5G_SUPPORT_IC (ODM_RTL8821 | ODM_RTL8881A | ODM_RTL8812 | ODM_RTL8821C | ODM_RTL8822B)
  69. #define ODM_EVM_ENHANCE_ANTDIV_SUPPORT_IC (ODM_RTL8192E | ODM_RTL8197F | ODM_RTL8822B)
  70. #define ODM_ANTDIV_2G BIT(0)
  71. #define ODM_ANTDIV_5G BIT(1)
  72. #define ANTDIV_ON 1
  73. #define ANTDIV_OFF 0
  74. #define ANT_PATH_A 0
  75. #define ANT_PATH_B 1
  76. #define ANT_PATH_AB 2
  77. #define FAT_ON 1
  78. #define FAT_OFF 0
  79. #define TX_BY_DESC 1
  80. #define TX_BY_REG 0
  81. #define RSSI_METHOD 0
  82. #define EVM_METHOD 1
  83. #define CRC32_METHOD 2
  84. #define TP_METHOD 3
  85. #define INIT_ANTDIV_TIMMER 0
  86. #define CANCEL_ANTDIV_TIMMER 1
  87. #define RELEASE_ANTDIV_TIMMER 2
  88. #define CRC32_FAIL 1
  89. #define CRC32_OK 0
  90. #define evm_rssi_th_high 25
  91. #define evm_rssi_th_low 20
  92. #define NORMAL_STATE_MIAN 1
  93. #define NORMAL_STATE_AUX 2
  94. #define TRAINING_STATE 3
  95. #define FORCE_RSSI_DIFF 10
  96. #define CSI_ON 1
  97. #define CSI_OFF 0
  98. #define DIVON_CSIOFF 1
  99. #define DIVOFF_CSION 2
  100. #define BDC_DIV_TRAIN_STATE 0
  101. #define bdc_bfer_train_state 1
  102. #define BDC_DECISION_STATE 2
  103. #define BDC_BF_HOLD_STATE 3
  104. #define BDC_DIV_HOLD_STATE 4
  105. #define BDC_MODE_1 1
  106. #define BDC_MODE_2 2
  107. #define BDC_MODE_3 3
  108. #define BDC_MODE_4 4
  109. #define BDC_MODE_NULL 0xff
  110. /*SW S0S1 antenna diversity*/
  111. #define SWAW_STEP_INIT 0xff
  112. #define SWAW_STEP_PEEK 0
  113. #define SWAW_STEP_DETERMINE 1
  114. #define RSSI_CHECK_RESET_PERIOD 10
  115. #define RSSI_CHECK_THRESHOLD 50
  116. /*@Hong Lin Smart antenna*/
  117. #define HL_SMTANT_2WIRE_DATA_LEN 24
  118. #if (RTL8723D_SUPPORT == 1)
  119. #ifndef CONFIG_ANTENNA_DIVERSITY_PERIOD
  120. #define CONFIG_ANTENNA_DIVERSITY_PERIOD 1
  121. #endif
  122. #endif
  123. /* @1 ============================================================
  124. * 1 structure
  125. * 1 ============================================================
  126. */
  127. struct sw_antenna_switch {
  128. u8 double_chk_flag; /*@If current antenna RSSI > "RSSI_CHECK_THRESHOLD", than check this antenna again*/
  129. u8 try_flag;
  130. s32 pre_rssi;
  131. u8 cur_antenna;
  132. u8 pre_antenna;
  133. u8 rssi_trying;
  134. u8 reset_idx;
  135. u8 train_time;
  136. u8 train_time_flag; /*@base on RSSI difference between two antennas*/
  137. struct phydm_timer_list phydm_sw_antenna_switch_timer;
  138. u32 pkt_cnt_sw_ant_div_by_ctrl_frame;
  139. boolean is_sw_ant_div_by_ctrl_frame;
  140. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  141. #if USE_WORKITEM
  142. RT_WORK_ITEM phydm_sw_antenna_switch_workitem;
  143. #endif
  144. #endif
  145. /* @AntDect (Before link Antenna Switch check) need to be moved*/
  146. u16 single_ant_counter;
  147. u16 dual_ant_counter;
  148. u16 aux_fail_detec_counter;
  149. u16 retry_counter;
  150. u8 swas_no_link_state;
  151. u32 swas_no_link_bk_reg948;
  152. boolean ANTA_ON; /*To indicate ant A is or not*/
  153. boolean ANTB_ON; /*@To indicate ant B is on or not*/
  154. boolean pre_aux_fail_detec;
  155. boolean rssi_ant_dect_result;
  156. u8 ant_5g;
  157. u8 ant_2g;
  158. };
  159. #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
  160. #if (defined(CONFIG_PHYDM_ANTENNA_DIVERSITY))
  161. struct _BF_DIV_COEX_ {
  162. boolean w_bfer_client[ODM_ASSOCIATE_ENTRY_NUM];
  163. boolean w_bfee_client[ODM_ASSOCIATE_ENTRY_NUM];
  164. u32 MA_rx_TP[ODM_ASSOCIATE_ENTRY_NUM];
  165. u32 MA_rx_TP_DIV[ODM_ASSOCIATE_ENTRY_NUM];
  166. u8 bd_ccoex_type_wbfer;
  167. u8 num_txbfee_client;
  168. u8 num_txbfer_client;
  169. u8 bdc_try_counter;
  170. u8 bdc_hold_counter;
  171. u8 bdc_mode;
  172. u8 bdc_active_mode;
  173. u8 BDC_state;
  174. u8 bdc_rx_idle_update_counter;
  175. u8 num_client;
  176. u8 pre_num_client;
  177. u8 num_bf_tar;
  178. u8 num_div_tar;
  179. boolean is_all_div_sta_idle;
  180. boolean is_all_bf_sta_idle;
  181. boolean bdc_try_flag;
  182. boolean BF_pass;
  183. boolean DIV_pass;
  184. };
  185. #endif
  186. #endif
  187. struct phydm_fat_struct {
  188. u8 bssid[6];
  189. u8 antsel_rx_keep_0;
  190. u8 antsel_rx_keep_1;
  191. u8 antsel_rx_keep_2;
  192. u8 antsel_rx_keep_3;
  193. u32 ant_sum_rssi[7];
  194. u32 ant_rssi_cnt[7];
  195. u32 ant_ave_rssi[7];
  196. u8 fat_state;
  197. u8 fat_state_cnt;
  198. u32 train_idx;
  199. u8 antsel_a[ODM_ASSOCIATE_ENTRY_NUM];
  200. u8 antsel_b[ODM_ASSOCIATE_ENTRY_NUM];
  201. u8 antsel_c[ODM_ASSOCIATE_ENTRY_NUM];
  202. u16 main_ant_sum[ODM_ASSOCIATE_ENTRY_NUM];
  203. u16 aux_ant_sum[ODM_ASSOCIATE_ENTRY_NUM];
  204. u16 main_ant_cnt[ODM_ASSOCIATE_ENTRY_NUM];
  205. u16 aux_ant_cnt[ODM_ASSOCIATE_ENTRY_NUM];
  206. u16 main_ant_sum_cck[ODM_ASSOCIATE_ENTRY_NUM];
  207. u16 aux_ant_sum_cck[ODM_ASSOCIATE_ENTRY_NUM];
  208. u16 main_ant_cnt_cck[ODM_ASSOCIATE_ENTRY_NUM];
  209. u16 aux_ant_cnt_cck[ODM_ASSOCIATE_ENTRY_NUM];
  210. u8 rx_idle_ant;
  211. u8 rx_idle_ant2;
  212. u8 rvrt_val;
  213. u8 ant_div_on_off;
  214. u8 div_path_type;
  215. boolean is_become_linked;
  216. u32 min_max_rssi;
  217. u8 idx_ant_div_counter_2g;
  218. u8 idx_ant_div_counter_5g;
  219. u8 ant_div_2g_5g;
  220. #ifdef ODM_EVM_ENHANCE_ANTDIV
  221. /*@For 1SS RX phy rate*/
  222. u32 main_ant_evm_sum[ODM_ASSOCIATE_ENTRY_NUM];
  223. u32 aux_ant_evm_sum[ODM_ASSOCIATE_ENTRY_NUM];
  224. u32 main_ant_evm_cnt[ODM_ASSOCIATE_ENTRY_NUM];
  225. u32 aux_ant_evm_cnt[ODM_ASSOCIATE_ENTRY_NUM];
  226. /*@For 2SS RX phy rate*/
  227. u32 main_ant_evm_2ss_sum[ODM_ASSOCIATE_ENTRY_NUM][2]; /*@2SS with A1+B*/
  228. u32 aux_ant_evm_2ss_sum[ODM_ASSOCIATE_ENTRY_NUM][2]; /*@2SS with A2+B*/
  229. u32 main_ant_evm_2ss_cnt[ODM_ASSOCIATE_ENTRY_NUM];
  230. u32 aux_ant_evm_2ss_cnt[ODM_ASSOCIATE_ENTRY_NUM];
  231. boolean evm_method_enable;
  232. u8 target_ant_evm;
  233. u8 target_ant_crc32;
  234. u8 target_ant_tp;
  235. u8 target_ant_enhance;
  236. u8 pre_target_ant_enhance;
  237. u16 main_mpdu_ok_cnt;
  238. u16 aux_mpdu_ok_cnt;
  239. u32 crc32_ok_cnt;
  240. u32 crc32_fail_cnt;
  241. u32 main_crc32_ok_cnt;
  242. u32 aux_crc32_ok_cnt;
  243. u32 main_crc32_fail_cnt;
  244. u32 aux_crc32_fail_cnt;
  245. u32 antdiv_tp_main;
  246. u32 antdiv_tp_aux;
  247. u32 antdiv_tp_main_cnt;
  248. u32 antdiv_tp_aux_cnt;
  249. u8 pre_antdiv_rssi;
  250. u8 pre_antdiv_tp;
  251. #endif
  252. #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
  253. u32 cck_ctrl_frame_cnt_main;
  254. u32 cck_ctrl_frame_cnt_aux;
  255. u32 ofdm_ctrl_frame_cnt_main;
  256. u32 ofdm_ctrl_frame_cnt_aux;
  257. u32 main_ant_ctrl_frame_sum;
  258. u32 aux_ant_ctrl_frame_sum;
  259. u32 main_ant_ctrl_frame_cnt;
  260. u32 aux_ant_ctrl_frame_cnt;
  261. #endif
  262. u8 b_fix_tx_ant;
  263. boolean fix_ant_bfee;
  264. boolean enable_ctrl_frame_antdiv;
  265. boolean use_ctrl_frame_antdiv;
  266. boolean *is_no_csi_feedback;
  267. boolean force_antdiv_type;
  268. u8 antdiv_type_dbg;
  269. u8 hw_antsw_occur;
  270. u8 *p_force_tx_ant_by_desc;
  271. u8 force_tx_ant_by_desc; /*@A temp value, will hook to driver team's outer parameter later*/
  272. u8 *p_default_s0_s1;
  273. u8 default_s0_s1;
  274. };
  275. /* @1 ============================================================
  276. * 1 enumeration
  277. * 1 ============================================================
  278. */
  279. enum fat_state /*@Fast antenna training*/
  280. {
  281. FAT_BEFORE_LINK_STATE = 0,
  282. FAT_PREPARE_STATE = 1,
  283. FAT_TRAINING_STATE = 2,
  284. FAT_DECISION_STATE = 3
  285. };
  286. enum ant_div_type {
  287. NO_ANTDIV = 0xFF,
  288. CG_TRX_HW_ANTDIV = 0x01,
  289. CGCS_RX_HW_ANTDIV = 0x02,
  290. FIXED_HW_ANTDIV = 0x03,
  291. CG_TRX_SMART_ANTDIV = 0x04,
  292. CGCS_RX_SW_ANTDIV = 0x05,
  293. S0S1_SW_ANTDIV = 0x06, /*@8723B intrnal switch S0 S1*/
  294. S0S1_TRX_HW_ANTDIV = 0x07, /*TRX S0S1 diversity for 8723D*/
  295. HL_SW_SMART_ANT_TYPE1 = 0x10, /*@Hong-Lin Smart antenna use for 8821AE which is a 2 ant. entitys, and each ant. is equipped with 4 antenna patterns*/
  296. HL_SW_SMART_ANT_TYPE2 = 0x11 /*@Hong-Bo Smart antenna use for 8822B which is a 2 ant. entitys*/
  297. };
  298. /* @1 ============================================================
  299. * 1 function prototype
  300. * 1 ============================================================
  301. */
  302. void odm_stop_antenna_switch_dm(void *dm_void);
  303. void phydm_enable_antenna_diversity(void *dm_void);
  304. void odm_set_ant_config(void *dm_void, u8 ant_setting /* @0=A, 1=B, 2=C, .... */
  305. );
  306. #define sw_ant_div_rest_after_link odm_sw_ant_div_rest_after_link
  307. void odm_sw_ant_div_rest_after_link(void *dm_void);
  308. void odm_ant_div_on_off(void *dm_void, u8 swch, u8 path);
  309. void odm_tx_by_tx_desc_or_reg(void *dm_void, u8 swch);
  310. #if (defined(CONFIG_PHYDM_ANTENNA_DIVERSITY))
  311. void phydm_antdiv_reset_statistic(
  312. void *dm_void,
  313. u32 macid);
  314. void odm_update_rx_idle_ant(
  315. void *dm_void,
  316. u8 ant);
  317. void phydm_update_rx_idle_ant_pathb(void *dm_void, u8 ant);
  318. void phydm_set_antdiv_val(
  319. void *dm_void,
  320. u32 *val_buf,
  321. u8 val_len);
  322. #if (RTL8723B_SUPPORT == 1)
  323. void odm_update_rx_idle_ant_8723b(
  324. void *dm_void,
  325. u8 ant,
  326. u32 default_ant,
  327. u32 optional_ant);
  328. #endif
  329. #if (RTL8188F_SUPPORT == 1)
  330. void phydm_update_rx_idle_antenna_8188F(
  331. void *dm_void,
  332. u32 default_ant);
  333. #endif
  334. #if (RTL8723D_SUPPORT == 1)
  335. void phydm_set_tx_ant_pwr_8723d(
  336. void *dm_void,
  337. u8 ant);
  338. void odm_update_rx_idle_ant_8723d(
  339. void *dm_void,
  340. u8 ant,
  341. u32 default_ant,
  342. u32 optional_ant);
  343. #endif
  344. #ifdef CONFIG_S0S1_SW_ANTENNA_DIVERSITY
  345. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  346. void odm_sw_antdiv_callback(
  347. struct phydm_timer_list *timer);
  348. void odm_sw_antdiv_workitem_callback(
  349. void *context);
  350. #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
  351. void odm_sw_antdiv_workitem_callback(
  352. void *context);
  353. void odm_sw_antdiv_callback(
  354. void *function_context);
  355. #endif
  356. void odm_s0s1_sw_ant_div_by_ctrl_frame(
  357. void *dm_void,
  358. u8 step);
  359. void odm_antsel_statistics_of_ctrl_frame(
  360. void *dm_void,
  361. u8 antsel_tr_mux,
  362. u32 rx_pwdb_all);
  363. void odm_s0s1_sw_ant_div_by_ctrl_frame_process_rssi(
  364. void *dm_void,
  365. void *phy_info_void,
  366. void *pkt_info_void);
  367. #endif
  368. #ifdef ODM_EVM_ENHANCE_ANTDIV
  369. void phydm_evm_sw_antdiv_init(
  370. void *dm_void);
  371. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  372. void phydm_evm_antdiv_callback(
  373. struct phydm_timer_list *timer);
  374. void phydm_evm_antdiv_workitem_callback(
  375. void *context);
  376. #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
  377. void phydm_evm_antdiv_callback(
  378. void *dm_void);
  379. void phydm_evm_antdiv_workitem_callback(
  380. void *context);
  381. #else
  382. void phydm_evm_antdiv_callback(
  383. void *dm_void);
  384. #endif
  385. #endif
  386. void odm_hw_ant_div(
  387. void *dm_void);
  388. #if (defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY)) || (defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY))
  389. void odm_fast_ant_training(
  390. void *dm_void);
  391. void odm_fast_ant_training_callback(
  392. void *dm_void);
  393. void odm_fast_ant_training_work_item_callback(
  394. void *dm_void);
  395. #endif
  396. void odm_ant_div_init(
  397. void *dm_void);
  398. void odm_ant_div(
  399. void *dm_void);
  400. void odm_antsel_statistics(
  401. void *dm_void,
  402. void *phy_info_void,
  403. u8 antsel_tr_mux,
  404. u32 mac_id,
  405. u32 utility,
  406. u8 method,
  407. u8 is_cck_rate);
  408. void odm_process_rssi_for_ant_div(
  409. void *dm_void,
  410. void *phy_info_void,
  411. void *pkt_info_void);
  412. #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
  413. void odm_set_tx_ant_by_tx_info(
  414. void *dm_void,
  415. u8 *desc,
  416. u8 mac_id);
  417. #elif (DM_ODM_SUPPORT_TYPE == ODM_AP)
  418. struct tx_desc; /*@declared tx_desc here or compile error happened when enabled 8822B*/
  419. void odm_set_tx_ant_by_tx_info(
  420. struct rtl8192cd_priv *priv,
  421. struct tx_desc *pdesc,
  422. unsigned short aid);
  423. #if 1 /*@def def CONFIG_WLAN_HAL*/
  424. void odm_set_tx_ant_by_tx_info_hal(
  425. struct rtl8192cd_priv *priv,
  426. void *pdesc_data,
  427. u16 aid);
  428. #endif /*@#ifdef CONFIG_WLAN_HAL*/
  429. #endif
  430. void odm_ant_div_config(
  431. void *dm_void);
  432. void odm_ant_div_timers(
  433. void *dm_void,
  434. u8 state);
  435. void phydm_antdiv_debug(void *dm_void, char input[][16], u32 *_used,
  436. char *output, u32 *_out_len);
  437. void odm_ant_div_reset(void *dm_void);
  438. void odm_antenna_diversity_init(void *dm_void);
  439. void odm_antenna_diversity(void *dm_void);
  440. #endif /*@#ifdef CONFIG_PHYDM_ANTENNA_DIVERSITY*/
  441. #endif /*@#ifndef __ODMANTDIV_H__*/