1 // SPDX-License-Identifier: GPL-2.0
2 /******************************************************************************
4 * Copyright(c) 2007 - 2016 Realtek Corporation.
7 * wlanfae <wlanfae@realtek.com>
8 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
11 * Larry Finger <Larry.Finger@lwfinger.net>
13 *****************************************************************************/
14 #include "mp_precomp.h"
15 #include "phydm_precomp.h"
17 /*Set NHM period, threshold, disable ignore cca or not,
18 *disable ignore txon or not
20 void phydm_nhm_setting(void *dm_void, u8 nhm_setting)
22 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
23 struct ccx_info *ccx_info = &dm->dm_ccx_info;
25 if (dm->support_ic_type & ODM_IC_11AC_SERIES) {
26 if (nhm_setting == SET_NHM_SETTING) {
27 /*Set inexclude_cca, inexclude_txon*/
28 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, BIT(9),
29 ccx_info->nhm_inexclude_cca);
30 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, BIT(10),
31 ccx_info->nhm_inexclude_txon);
34 odm_set_bb_reg(dm, ODM_REG_CCX_PERIOD_11AC, MASKHWORD,
35 ccx_info->NHM_period);
38 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11AC,
39 MASKBYTE0, ccx_info->NHM_th[0]);
40 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11AC,
41 MASKBYTE1, ccx_info->NHM_th[1]);
42 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11AC,
43 MASKBYTE2, ccx_info->NHM_th[2]);
44 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11AC,
45 MASKBYTE3, ccx_info->NHM_th[3]);
46 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11AC,
47 MASKBYTE0, ccx_info->NHM_th[4]);
48 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11AC,
49 MASKBYTE1, ccx_info->NHM_th[5]);
50 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11AC,
51 MASKBYTE2, ccx_info->NHM_th[6]);
52 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11AC,
53 MASKBYTE3, ccx_info->NHM_th[7]);
54 odm_set_bb_reg(dm, ODM_REG_NHM_TH8_11AC, MASKBYTE0,
56 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, MASKBYTE2,
58 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, MASKBYTE3,
59 ccx_info->NHM_th[10]);
62 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, BIT(8),
64 } else if (nhm_setting == STORE_NHM_SETTING) {
65 /*Store prev. disable_ignore_cca, disable_ignore_txon*/
66 ccx_info->NHM_inexclude_cca_restore =
67 (enum nhm_inexclude_cca)odm_get_bb_reg(
68 dm, ODM_REG_NHM_TH9_TH10_11AC, BIT(9));
69 ccx_info->NHM_inexclude_txon_restore =
70 (enum nhm_inexclude_txon)odm_get_bb_reg(
71 dm, ODM_REG_NHM_TH9_TH10_11AC, BIT(10));
73 /*Store pervious NHM period*/
74 ccx_info->NHM_period_restore = (u16)odm_get_bb_reg(
75 dm, ODM_REG_CCX_PERIOD_11AC, MASKHWORD);
77 /*Store NHM threshold*/
78 ccx_info->NHM_th_restore[0] = (u8)odm_get_bb_reg(
79 dm, ODM_REG_NHM_TH3_TO_TH0_11AC, MASKBYTE0);
80 ccx_info->NHM_th_restore[1] = (u8)odm_get_bb_reg(
81 dm, ODM_REG_NHM_TH3_TO_TH0_11AC, MASKBYTE1);
82 ccx_info->NHM_th_restore[2] = (u8)odm_get_bb_reg(
83 dm, ODM_REG_NHM_TH3_TO_TH0_11AC, MASKBYTE2);
84 ccx_info->NHM_th_restore[3] = (u8)odm_get_bb_reg(
85 dm, ODM_REG_NHM_TH3_TO_TH0_11AC, MASKBYTE3);
86 ccx_info->NHM_th_restore[4] = (u8)odm_get_bb_reg(
87 dm, ODM_REG_NHM_TH7_TO_TH4_11AC, MASKBYTE0);
88 ccx_info->NHM_th_restore[5] = (u8)odm_get_bb_reg(
89 dm, ODM_REG_NHM_TH7_TO_TH4_11AC, MASKBYTE1);
90 ccx_info->NHM_th_restore[6] = (u8)odm_get_bb_reg(
91 dm, ODM_REG_NHM_TH7_TO_TH4_11AC, MASKBYTE2);
92 ccx_info->NHM_th_restore[7] = (u8)odm_get_bb_reg(
93 dm, ODM_REG_NHM_TH7_TO_TH4_11AC, MASKBYTE3);
94 ccx_info->NHM_th_restore[8] = (u8)odm_get_bb_reg(
95 dm, ODM_REG_NHM_TH8_11AC, MASKBYTE0);
96 ccx_info->NHM_th_restore[9] = (u8)odm_get_bb_reg(
97 dm, ODM_REG_NHM_TH9_TH10_11AC, MASKBYTE2);
98 ccx_info->NHM_th_restore[10] = (u8)odm_get_bb_reg(
99 dm, ODM_REG_NHM_TH9_TH10_11AC, MASKBYTE3);
100 } else if (nhm_setting == RESTORE_NHM_SETTING) {
101 /*Set disable_ignore_cca, disable_ignore_txon*/
102 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, BIT(9),
103 ccx_info->NHM_inexclude_cca_restore);
104 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, BIT(10),
105 ccx_info->NHM_inexclude_txon_restore);
108 odm_set_bb_reg(dm, ODM_REG_CCX_PERIOD_11AC, MASKHWORD,
109 ccx_info->NHM_period);
111 /*Set NHM threshold*/
112 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11AC,
113 MASKBYTE0, ccx_info->NHM_th_restore[0]);
114 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11AC,
115 MASKBYTE1, ccx_info->NHM_th_restore[1]);
116 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11AC,
117 MASKBYTE2, ccx_info->NHM_th_restore[2]);
118 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11AC,
119 MASKBYTE3, ccx_info->NHM_th_restore[3]);
120 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11AC,
121 MASKBYTE0, ccx_info->NHM_th_restore[4]);
122 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11AC,
123 MASKBYTE1, ccx_info->NHM_th_restore[5]);
124 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11AC,
125 MASKBYTE2, ccx_info->NHM_th_restore[6]);
126 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11AC,
127 MASKBYTE3, ccx_info->NHM_th_restore[7]);
128 odm_set_bb_reg(dm, ODM_REG_NHM_TH8_11AC, MASKBYTE0,
129 ccx_info->NHM_th_restore[8]);
130 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, MASKBYTE2,
131 ccx_info->NHM_th_restore[9]);
132 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, MASKBYTE3,
133 ccx_info->NHM_th_restore[10]);
139 else if (dm->support_ic_type & ODM_IC_11N_SERIES) {
140 if (nhm_setting == SET_NHM_SETTING) {
141 /*Set disable_ignore_cca, disable_ignore_txon*/
142 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, BIT(9),
143 ccx_info->nhm_inexclude_cca);
144 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, BIT(10),
145 ccx_info->nhm_inexclude_txon);
148 odm_set_bb_reg(dm, ODM_REG_CCX_PERIOD_11N, MASKHWORD,
149 ccx_info->NHM_period);
151 /*Set NHM threshold*/
152 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11N,
153 MASKBYTE0, ccx_info->NHM_th[0]);
154 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11N,
155 MASKBYTE1, ccx_info->NHM_th[1]);
156 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11N,
157 MASKBYTE2, ccx_info->NHM_th[2]);
158 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11N,
159 MASKBYTE3, ccx_info->NHM_th[3]);
160 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11N,
161 MASKBYTE0, ccx_info->NHM_th[4]);
162 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11N,
163 MASKBYTE1, ccx_info->NHM_th[5]);
164 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11N,
165 MASKBYTE2, ccx_info->NHM_th[6]);
166 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11N,
167 MASKBYTE3, ccx_info->NHM_th[7]);
168 odm_set_bb_reg(dm, ODM_REG_NHM_TH8_11N, MASKBYTE0,
169 ccx_info->NHM_th[8]);
170 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, MASKBYTE2,
171 ccx_info->NHM_th[9]);
172 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, MASKBYTE3,
173 ccx_info->NHM_th[10]);
176 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, BIT(8),
178 } else if (nhm_setting == STORE_NHM_SETTING) {
179 /*Store prev. disable_ignore_cca, disable_ignore_txon*/
180 ccx_info->NHM_inexclude_cca_restore =
181 (enum nhm_inexclude_cca)odm_get_bb_reg(
182 dm, ODM_REG_NHM_TH9_TH10_11N, BIT(9));
183 ccx_info->NHM_inexclude_txon_restore =
184 (enum nhm_inexclude_txon)odm_get_bb_reg(
185 dm, ODM_REG_NHM_TH9_TH10_11N, BIT(10));
187 /*Store pervious NHM period*/
188 ccx_info->NHM_period_restore = (u16)odm_get_bb_reg(
189 dm, ODM_REG_CCX_PERIOD_11N, MASKHWORD);
191 /*Store NHM threshold*/
192 ccx_info->NHM_th_restore[0] = (u8)odm_get_bb_reg(
193 dm, ODM_REG_NHM_TH3_TO_TH0_11N, MASKBYTE0);
194 ccx_info->NHM_th_restore[1] = (u8)odm_get_bb_reg(
195 dm, ODM_REG_NHM_TH3_TO_TH0_11N, MASKBYTE1);
196 ccx_info->NHM_th_restore[2] = (u8)odm_get_bb_reg(
197 dm, ODM_REG_NHM_TH3_TO_TH0_11N, MASKBYTE2);
198 ccx_info->NHM_th_restore[3] = (u8)odm_get_bb_reg(
199 dm, ODM_REG_NHM_TH3_TO_TH0_11N, MASKBYTE3);
200 ccx_info->NHM_th_restore[4] = (u8)odm_get_bb_reg(
201 dm, ODM_REG_NHM_TH7_TO_TH4_11N, MASKBYTE0);
202 ccx_info->NHM_th_restore[5] = (u8)odm_get_bb_reg(
203 dm, ODM_REG_NHM_TH7_TO_TH4_11N, MASKBYTE1);
204 ccx_info->NHM_th_restore[6] = (u8)odm_get_bb_reg(
205 dm, ODM_REG_NHM_TH7_TO_TH4_11N, MASKBYTE2);
206 ccx_info->NHM_th_restore[7] = (u8)odm_get_bb_reg(
207 dm, ODM_REG_NHM_TH7_TO_TH4_11N, MASKBYTE3);
208 ccx_info->NHM_th_restore[8] = (u8)odm_get_bb_reg(
209 dm, ODM_REG_NHM_TH8_11N, MASKBYTE0);
210 ccx_info->NHM_th_restore[9] = (u8)odm_get_bb_reg(
211 dm, ODM_REG_NHM_TH9_TH10_11N, MASKBYTE2);
212 ccx_info->NHM_th_restore[10] = (u8)odm_get_bb_reg(
213 dm, ODM_REG_NHM_TH9_TH10_11N, MASKBYTE3);
214 } else if (nhm_setting == RESTORE_NHM_SETTING) {
215 /*Set disable_ignore_cca, disable_ignore_txon*/
216 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, BIT(9),
217 ccx_info->NHM_inexclude_cca_restore);
218 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, BIT(10),
219 ccx_info->NHM_inexclude_txon_restore);
222 odm_set_bb_reg(dm, ODM_REG_CCX_PERIOD_11N, MASKHWORD,
223 ccx_info->NHM_period_restore);
225 /*Set NHM threshold*/
226 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11N,
227 MASKBYTE0, ccx_info->NHM_th_restore[0]);
228 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11N,
229 MASKBYTE1, ccx_info->NHM_th_restore[1]);
230 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11N,
231 MASKBYTE2, ccx_info->NHM_th_restore[2]);
232 odm_set_bb_reg(dm, ODM_REG_NHM_TH3_TO_TH0_11N,
233 MASKBYTE3, ccx_info->NHM_th_restore[3]);
234 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11N,
235 MASKBYTE0, ccx_info->NHM_th_restore[4]);
236 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11N,
237 MASKBYTE1, ccx_info->NHM_th_restore[5]);
238 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11N,
239 MASKBYTE2, ccx_info->NHM_th_restore[6]);
240 odm_set_bb_reg(dm, ODM_REG_NHM_TH7_TO_TH4_11N,
241 MASKBYTE3, ccx_info->NHM_th_restore[7]);
242 odm_set_bb_reg(dm, ODM_REG_NHM_TH8_11N, MASKBYTE0,
243 ccx_info->NHM_th_restore[8]);
244 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, MASKBYTE2,
245 ccx_info->NHM_th_restore[9]);
246 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, MASKBYTE3,
247 ccx_info->NHM_th_restore[10]);
254 void phydm_nhm_trigger(void *dm_void)
256 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
258 if (dm->support_ic_type & ODM_IC_11AC_SERIES) {
260 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, BIT(1), 0);
261 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11AC, BIT(1), 1);
262 } else if (dm->support_ic_type & ODM_IC_11N_SERIES) {
264 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, BIT(1), 0);
265 odm_set_bb_reg(dm, ODM_REG_NHM_TH9_TH10_11N, BIT(1), 1);
269 void phydm_get_nhm_result(void *dm_void)
271 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
273 struct ccx_info *ccx_info = &dm->dm_ccx_info;
275 if (dm->support_ic_type & ODM_IC_11AC_SERIES) {
276 value32 = odm_read_4byte(dm, ODM_REG_NHM_CNT_11AC);
277 ccx_info->NHM_result[0] = (u8)(value32 & MASKBYTE0);
278 ccx_info->NHM_result[1] = (u8)((value32 & MASKBYTE1) >> 8);
279 ccx_info->NHM_result[2] = (u8)((value32 & MASKBYTE2) >> 16);
280 ccx_info->NHM_result[3] = (u8)((value32 & MASKBYTE3) >> 24);
282 value32 = odm_read_4byte(dm, ODM_REG_NHM_CNT7_TO_CNT4_11AC);
283 ccx_info->NHM_result[4] = (u8)(value32 & MASKBYTE0);
284 ccx_info->NHM_result[5] = (u8)((value32 & MASKBYTE1) >> 8);
285 ccx_info->NHM_result[6] = (u8)((value32 & MASKBYTE2) >> 16);
286 ccx_info->NHM_result[7] = (u8)((value32 & MASKBYTE3) >> 24);
288 value32 = odm_read_4byte(dm, ODM_REG_NHM_CNT11_TO_CNT8_11AC);
289 ccx_info->NHM_result[8] = (u8)(value32 & MASKBYTE0);
290 ccx_info->NHM_result[9] = (u8)((value32 & MASKBYTE1) >> 8);
291 ccx_info->NHM_result[10] = (u8)((value32 & MASKBYTE2) >> 16);
292 ccx_info->NHM_result[11] = (u8)((value32 & MASKBYTE3) >> 24);
295 value32 = odm_read_4byte(dm, ODM_REG_NHM_DUR_READY_11AC);
296 ccx_info->NHM_duration = (u16)(value32 & MASKLWORD);
299 else if (dm->support_ic_type & ODM_IC_11N_SERIES) {
300 value32 = odm_read_4byte(dm, ODM_REG_NHM_CNT_11N);
301 ccx_info->NHM_result[0] = (u8)(value32 & MASKBYTE0);
302 ccx_info->NHM_result[1] = (u8)((value32 & MASKBYTE1) >> 8);
303 ccx_info->NHM_result[2] = (u8)((value32 & MASKBYTE2) >> 16);
304 ccx_info->NHM_result[3] = (u8)((value32 & MASKBYTE3) >> 24);
306 value32 = odm_read_4byte(dm, ODM_REG_NHM_CNT7_TO_CNT4_11N);
307 ccx_info->NHM_result[4] = (u8)(value32 & MASKBYTE0);
308 ccx_info->NHM_result[5] = (u8)((value32 & MASKBYTE1) >> 8);
309 ccx_info->NHM_result[6] = (u8)((value32 & MASKBYTE2) >> 16);
310 ccx_info->NHM_result[7] = (u8)((value32 & MASKBYTE3) >> 24);
312 value32 = odm_read_4byte(dm, ODM_REG_NHM_CNT9_TO_CNT8_11N);
313 ccx_info->NHM_result[8] = (u8)((value32 & MASKBYTE2) >> 16);
314 ccx_info->NHM_result[9] = (u8)((value32 & MASKBYTE3) >> 24);
316 value32 = odm_read_4byte(dm, ODM_REG_NHM_CNT10_TO_CNT11_11N);
317 ccx_info->NHM_result[10] = (u8)((value32 & MASKBYTE2) >> 16);
318 ccx_info->NHM_result[11] = (u8)((value32 & MASKBYTE3) >> 24);
321 value32 = odm_read_4byte(dm, ODM_REG_NHM_CNT10_TO_CNT11_11N);
322 ccx_info->NHM_duration = (u16)(value32 & MASKLWORD);
326 bool phydm_check_nhm_ready(void *dm_void)
328 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
333 if (dm->support_ic_type & ODM_IC_11AC_SERIES) {
335 odm_get_bb_reg(dm, ODM_REG_CLM_RESULT_11AC, MASKDWORD);
337 for (i = 0; i < 200; i++) {
339 if (odm_get_bb_reg(dm, ODM_REG_NHM_DUR_READY_11AC,
347 else if (dm->support_ic_type & ODM_IC_11N_SERIES) {
348 value32 = odm_get_bb_reg(dm, ODM_REG_CLM_READY_11N, MASKDWORD);
350 for (i = 0; i < 200; i++) {
352 if (odm_get_bb_reg(dm, ODM_REG_NHM_DUR_READY_11AC,
362 void phydm_clm_setting(void *dm_void)
364 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
365 struct ccx_info *ccx_info = &dm->dm_ccx_info;
367 if (dm->support_ic_type & ODM_IC_11AC_SERIES) {
368 odm_set_bb_reg(dm, ODM_REG_CCX_PERIOD_11AC, MASKLWORD,
369 ccx_info->CLM_period); /*4us sample 1 time*/
370 odm_set_bb_reg(dm, ODM_REG_CLM_11AC, BIT(8),
371 0x1); /*Enable CCX for CLM*/
373 } else if (dm->support_ic_type & ODM_IC_11N_SERIES) {
374 odm_set_bb_reg(dm, ODM_REG_CCX_PERIOD_11N, MASKLWORD,
375 ccx_info->CLM_period); /*4us sample 1 time*/
376 odm_set_bb_reg(dm, ODM_REG_CLM_11N, BIT(8),
377 0x1); /*Enable CCX for CLM*/
380 ODM_RT_TRACE(dm, ODM_COMP_CCX, "[%s] : CLM period = %dus\n", __func__,
381 ccx_info->CLM_period * 4);
384 void phydm_clm_trigger(void *dm_void)
386 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
388 if (dm->support_ic_type & ODM_IC_11AC_SERIES) {
389 odm_set_bb_reg(dm, ODM_REG_CLM_11AC, BIT(0),
390 0x0); /*Trigger CLM*/
391 odm_set_bb_reg(dm, ODM_REG_CLM_11AC, BIT(0), 0x1);
392 } else if (dm->support_ic_type & ODM_IC_11N_SERIES) {
393 odm_set_bb_reg(dm, ODM_REG_CLM_11N, BIT(0),
394 0x0); /*Trigger CLM*/
395 odm_set_bb_reg(dm, ODM_REG_CLM_11N, BIT(0), 0x1);
399 bool phydm_check_cl_mready(void *dm_void)
401 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
405 if (dm->support_ic_type & ODM_IC_11AC_SERIES)
406 value32 = odm_get_bb_reg(
407 dm, ODM_REG_CLM_RESULT_11AC,
408 MASKDWORD); /*make sure CLM calc is ready*/
409 else if (dm->support_ic_type & ODM_IC_11N_SERIES)
410 value32 = odm_get_bb_reg(
411 dm, ODM_REG_CLM_READY_11N,
412 MASKDWORD); /*make sure CLM calc is ready*/
414 if ((dm->support_ic_type & ODM_IC_11AC_SERIES) && (value32 & BIT(16)))
416 else if ((dm->support_ic_type & ODM_IC_11N_SERIES) &&
422 ODM_RT_TRACE(dm, ODM_COMP_CCX, "[%s] : CLM ready = %d\n", __func__,
428 void phydm_get_cl_mresult(void *dm_void)
430 struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
431 struct ccx_info *ccx_info = &dm->dm_ccx_info;
435 if (dm->support_ic_type & ODM_IC_11AC_SERIES)
436 value32 = odm_get_bb_reg(dm, ODM_REG_CLM_RESULT_11AC,
437 MASKDWORD); /*read CLM calc result*/
438 else if (dm->support_ic_type & ODM_IC_11N_SERIES)
439 value32 = odm_get_bb_reg(dm, ODM_REG_CLM_RESULT_11N,
440 MASKDWORD); /*read CLM calc result*/
442 ccx_info->CLM_result = (u16)(value32 & MASKLWORD);
444 ODM_RT_TRACE(dm, ODM_COMP_CCX, "[%s] : CLM result = %dus\n", __func__,
445 ccx_info->CLM_result * 4);