phydm_soml.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  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 __PHYDMSOML_H__
  26. #define __PHYDMSOML_H__
  27. /*@#define ADAPTIVE_SOML_VERSION "1.0" Byte counter version*/
  28. #define ADAPTIVE_SOML_VERSION "2.0" /*@add avg. phy rate decision 20180126*/
  29. #define ODM_ADAPTIVE_SOML_SUPPORT_IC (ODM_RTL8822B | ODM_RTL8197F | ODM_RTL8192F)/*@jj add 20170822*/
  30. #define INIT_SOML_TIMMER 0
  31. #define CANCEL_SOML_TIMMER 1
  32. #define RELEASE_SOML_TIMMER 2
  33. #define SOML_RSSI_TH_HIGH 25
  34. #define SOML_RSSI_TH_LOW 20
  35. #define HT_RATE_IDX 32
  36. #define VHT_RATE_IDX 40
  37. #define HT_ORDER_TYPE 3
  38. #define VHT_ORDER_TYPE 4
  39. #if 0
  40. #define CFO_QPSK_TH 20
  41. #define CFO_QAM16_TH 20
  42. #define CFO_QAM64_TH 20
  43. #define CFO_QAM256_TH 20
  44. #define BPSK_QPSK_DIST 20
  45. #define QAM16_DIST 30
  46. #define QAM64_DIST 30
  47. #define QAM256_DIST 20
  48. #endif
  49. #define HT_TYPE 1
  50. #define VHT_TYPE 2
  51. #define SOML_ON 1
  52. #define SOML_OFF 0
  53. #ifdef CONFIG_ADAPTIVE_SOML
  54. struct adaptive_soml {
  55. u8 rvrt_val;
  56. boolean is_soml_method_enable;
  57. u8 soml_on_off;
  58. u8 soml_state_cnt;
  59. u8 soml_delay_time;
  60. u8 soml_intvl;
  61. u8 soml_train_num;
  62. u8 soml_counter;
  63. u8 soml_period;
  64. u8 soml_select;
  65. u8 soml_last_state;
  66. u8 cfo_qpsk_th;
  67. u8 cfo_qam16_th;
  68. u8 cfo_qam64_th;
  69. u8 cfo_qam256_th;
  70. u8 bpsk_qpsk_dist_th;
  71. u8 qam16_dist_th;
  72. u8 qam64_dist_th;
  73. u8 qam256_dist_th;
  74. u8 cfo_counter;
  75. s32 cfo_diff_a;
  76. s32 cfo_diff_b;
  77. s32 cfo_diff_sum_a;
  78. s32 cfo_diff_sum_b;
  79. s32 cfo_diff_avg_a;
  80. s32 cfo_diff_avg_b;
  81. u32 num_ht_cnt[HT_RATE_IDX];
  82. u32 pre_num_ht_cnt[HT_RATE_IDX];
  83. u32 num_ht_cnt_on[HT_RATE_IDX];
  84. u32 num_ht_cnt_off[HT_RATE_IDX];
  85. u32 num_vht_cnt[VHT_RATE_IDX];
  86. u32 pre_num_vht_cnt[VHT_RATE_IDX];
  87. u32 num_vht_cnt_on[VHT_RATE_IDX];
  88. u32 num_vht_cnt_off[VHT_RATE_IDX];
  89. u32 num_ht_qam[HT_ORDER_TYPE];
  90. u32 num_ht_bytes[HT_RATE_IDX];
  91. u32 pre_num_ht_bytes[HT_RATE_IDX];
  92. u32 num_ht_bytes_on[HT_RATE_IDX];
  93. u32 num_ht_bytes_off[HT_RATE_IDX];
  94. u32 num_vht_qam[VHT_ORDER_TYPE];
  95. u32 num_qry_mu_vht_pkt[VHT_RATE_IDX];
  96. u32 num_vht_bytes[VHT_RATE_IDX];
  97. u32 pre_num_vht_bytes[VHT_RATE_IDX];
  98. u32 num_vht_bytes_on[VHT_RATE_IDX];
  99. u32 num_vht_bytes_off[VHT_RATE_IDX];
  100. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  101. #if USE_WORKITEM
  102. RT_WORK_ITEM phydm_adaptive_soml_workitem;
  103. #endif
  104. #endif
  105. struct phydm_timer_list phydm_adaptive_soml_timer;
  106. };
  107. enum qam_order {
  108. BPSK_QPSK = 0,
  109. QAM16 = 1,
  110. QAM64 = 2,
  111. QAM256 = 3
  112. };
  113. void phydm_dynamicsoftmletting(void *dm_void);
  114. void phydm_soml_on_off(
  115. void *dm_void,
  116. u8 swch);
  117. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  118. void phydm_adaptive_soml_callback(
  119. struct phydm_timer_list *timer);
  120. void phydm_adaptive_soml_workitem_callback(
  121. void *context);
  122. #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
  123. void phydm_adaptive_soml_callback(
  124. void *dm_void);
  125. void phydm_adaptive_soml_workitem_callback(
  126. void *context);
  127. #else
  128. void phydm_adaptive_soml_callback(
  129. void *dm_void);
  130. #endif
  131. void phydm_rx_rate_for_soml(
  132. void *dm_void,
  133. void *pkt_info_void);
  134. void phydm_rx_qam_for_soml(
  135. void *dm_void,
  136. void *pkt_info_void);
  137. void phydm_soml_reset_rx_rate(
  138. void *dm_void);
  139. void phydm_soml_reset_qam(
  140. void *dm_void);
  141. void phydm_soml_cfo_process(
  142. void *dm_void,
  143. s32 *diff_a,
  144. s32 *diff_b);
  145. void phydm_soml_debug(void *dm_void, char input[][16], u32 *_used,
  146. char *output, u32 *_out_len);
  147. void phydm_soml_statistics(
  148. void *dm_void,
  149. u8 on_off_state
  150. );
  151. void phydm_adsl(
  152. void *dm_void);
  153. void phydm_adaptive_soml_reset(
  154. void *dm_void);
  155. void phydm_set_adsl_val(
  156. void *dm_void,
  157. u32 *val_buf,
  158. u8 val_len);
  159. void phydm_soml_bytes_acq(void *dm_void, u8 rate_id, u32 length);
  160. void phydm_adaptive_soml_timers(void *dm_void, u8 state);
  161. void phydm_adaptive_soml_init(void *dm_void);
  162. void phydm_adaptive_soml(void *dm_void);
  163. void phydm_enable_adaptive_soml(void *dm_void);
  164. void phydm_stop_adaptive_soml(void *dm_void);
  165. void phydm_adaptive_soml_para_set(void *dm_void, u8 train_num, u8 intvl,
  166. u8 period, u8 delay_time);
  167. #endif
  168. void phydm_init_soft_ml_setting(void *dm_void);
  169. #endif /*@#ifndef __PHYDMSOML_H__*/