• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
26 #ifndef __PHYDM_PHYSTATUS_H__
27 #define __PHYDM_PHYSTATUS_H__
28 
29 /* 2020.07.03 fix cck report bug due to 8723F coding error*/
30 #define PHYSTS_VERSION "1.2"
31 
32 /*@--------------------------Define ------------------------------------------*/
33 #define CCK_RSSI_INIT_COUNT 5
34 
35 #define RA_RSSI_STATE_INIT 0
36 #define RA_RSSI_STATE_SEND 1
37 #define RA_RSSI_STATE_HOLD 2
38 
39 #if defined(DM_ODM_CE_MAC80211)
40 #define CFO_HW_RPT_2_KHZ(val) ({		\
41 	s32 cfo_hw_rpt_2_khz_tmp = (val);	\
42 	(cfo_hw_rpt_2_khz_tmp << 1) + (cfo_hw_rpt_2_khz_tmp >> 1);	\
43 	})
44 #else
45 #define CFO_HW_RPT_2_KHZ(val) ((val << 1) + (val >> 1))
46 #endif
47 
48 /* @(X* 312.5 Khz)>>7 ~=  X*2.5 Khz= (X<<1 + X>>1)Khz  */
49 
50 #define IGI_2_RSSI(igi) (igi - 10)
51 
52 #define PHY_STATUS_JRGUAR2_DW_LEN 7 /* @7*4 = 28 Byte */
53 #define PHY_STATUS_JRGUAR3_DW_LEN 7 /* @7*4 = 28 Byte */
54 #define SHOW_PHY_STATUS_UNLIMITED 0
55 #define RSSI_MA 4 /*moving average factor for RSSI: 2^4=16 */
56 
57 #define PHYSTS_PATH_NUM 4
58 
59 /*@************************************************************
60  * structure and define
61  ************************************************************/
62 
63 __PACK struct phy_rx_agc_info {
64 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
65 	u8 gain : 7, trsw : 1;
66 #else
67 	u8 trsw : 1, gain : 7;
68 #endif
69 };
70 
71 __PACK struct phy_status_rpt_8192cd {
72 	struct phy_rx_agc_info path_agc[2];
73 	u8	ch_corr[2];
74 	u8	cck_sig_qual_ofdm_pwdb_all;
75 	u8	cck_agc_rpt_ofdm_cfosho_a;
76 	u8	cck_rpt_b_ofdm_cfosho_b;
77 	u8	rsvd_1;/*@ch_corr_msb;*/
78 	u8	noise_power_db_msb;
79 	s8	path_cfotail[2];
80 	u8	pcts_mask[2];
81 	s8	stream_rxevm[2];
82 	u8	path_rxsnr[2];
83 	u8	noise_power_db_lsb;
84 	u8	rsvd_2[3];
85 	u8	stream_csi[2];
86 	u8	stream_target_csi[2];
87 	s8	sig_evm;
88 	u8	rsvd_3;
89 
90 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
91 	u8	antsel_rx_keep_2: 1;	/*@ex_intf_flg:1;*/
92 	u8	sgi_en: 1;
93 	u8	rxsc: 2;
94 	u8	idle_long: 1;
95 	u8	r_ant_train_en: 1;
96 	u8	ant_sel_b: 1;
97 	u8	ant_sel: 1;
98 #else	/*@_BIG_ENDIAN_	*/
99 	u8	ant_sel: 1;
100 	u8	ant_sel_b: 1;
101 	u8	r_ant_train_en: 1;
102 	u8	idle_long: 1;
103 	u8	rxsc: 2;
104 	u8	sgi_en: 1;
105 	u8	antsel_rx_keep_2: 1;/*@ex_intf_flg:1;*/
106 #endif
107 };
108 
109 struct phy_status_rpt_8812 {
110 	/*	@DWORD 0*/
111 	u8 gain_trsw[2]; /*path-A and path-B {TRSW, gain[6:0] }*/
112 	u8 chl_num_LSB; /*@channel number[7:0]*/
113 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
114 	u8 chl_num_MSB : 2; /*@channel number[9:8]*/
115 	u8 sub_chnl : 4; /*sub-channel location[3:0]*/
116 	u8 r_RFMOD : 2; /*RF mode[1:0]*/
117 #else /*@_BIG_ENDIAN_	*/
118 	u8 r_RFMOD : 2;
119 	u8 sub_chnl : 4;
120 	u8 chl_num_MSB : 2;
121 #endif
122 
123 	/*	@DWORD 1*/
124 	u8 pwdb_all; /*@CCK signal quality / OFDM pwdb all*/
125 	s8 cfosho[2]; /*@CCK AGC report and CCK_BB_Power*/
126 		      /*OFDM path-A and path-B short CFO*/
127 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
128 	u8 resvd_0 : 6;
129 	u8 bt_RF_ch_MSB : 2; /*@8812A:2'b0  8814A: bt rf channel keep[7:6]*/
130 #else /*@_BIG_ENDIAN_*/
131 	u8 bt_RF_ch_MSB : 2;
132 	u8 resvd_0 : 6;
133 #endif
134 
135 /*	@DWORD 2*/
136 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
137 	u8 ant_div_sw_a : 1; /*@8812A: ant_div_sw_a    8814A: 1'b0*/
138 	u8 ant_div_sw_b : 1; /*@8812A: ant_div_sw_b    8814A: 1'b0*/
139 	u8 bt_RF_ch_LSB : 6; /*@8812A: 6'b0     8814A: bt rf channel keep[5:0]*/
140 #else /*@_BIG_ENDIAN_	*/
141 	u8 bt_RF_ch_LSB : 6;
142 	u8 ant_div_sw_b : 1;
143 	u8 ant_div_sw_a : 1;
144 #endif
145 	s8 cfotail[2]; /*@DW2 byte 1 DW2 byte 2	path-A and path-B CFO tail*/
146 	u8 PCTS_MSK_RPT_0; /*PCTS mask report[7:0]*/
147 	u8 PCTS_MSK_RPT_1; /*PCTS mask report[15:8]*/
148 
149 	/*	@DWORD 3*/
150 	s8 rxevm[2]; /*@DW3 byte 1 DW3 byte 2	stream 1 and stream 2 RX EVM*/
151 	s8 rxsnr[2]; /*@DW3 byte 3 DW4 byte 0	path-A and path-B RX SNR*/
152 
153 	/*	@DWORD 4*/
154 	u8 PCTS_MSK_RPT_2; /*PCTS mask report[23:16]*/
155 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
156 	u8 PCTS_MSK_RPT_3 : 6; /*PCTS mask report[29:24]*/
157 	u8 pcts_rpt_valid : 1; /*pcts_rpt_valid*/
158 	u8 resvd_1 : 1; /*@1'b0*/
159 #else /*@_BIG_ENDIAN_*/
160 	u8 resvd_1 : 1;
161 	u8 pcts_rpt_valid : 1;
162 	u8 PCTS_MSK_RPT_3 : 6;
163 #endif
164 	s8 rxevm_cd[2]; /*@8812A: 16'b0*/
165 			/*@8814A: stream 3 and stream 4 RX EVM*/
166 	/*	@DWORD 5*/
167 	u8 csi_current[2]; /*@8812A: stream 1 and 2 CSI*/
168 			   /*@8814A:  path-C and path-D RX SNR*/
169 	u8 gain_trsw_cd[2]; /*path-C and path-D {TRSW, gain[6:0] }*/
170 
171 	/*	@DWORD 6*/
172 	s8 sigevm; /*signal field EVM*/
173 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
174 	u8 antidx_antc : 3;	/*@8812A: 3'b0	8814A: antidx_antc[2:0]*/
175 	u8 antidx_antd : 3;	/*@8812A: 3'b0	8814A: antidx_antd[2:0]*/
176 	u8 dpdt_ctrl_keep : 1;	/*@8812A: 1'b0	8814A: dpdt_ctrl_keep*/
177 	u8 GNT_BT_keep : 1;	/*@8812A: 1'b0	8814A: GNT_BT_keep*/
178 #else /*@_BIG_ENDIAN_*/
179 	u8 GNT_BT_keep : 1;
180 	u8 dpdt_ctrl_keep : 1;
181 	u8 antidx_antd : 3;
182 	u8 antidx_antc : 3;
183 #endif
184 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
185 	u8 antidx_anta : 3; /*@antidx_anta[2:0]*/
186 	u8 antidx_antb : 3; /*@antidx_antb[2:0]*/
187 	u8 hw_antsw_occur : 2; /*@1'b0*/
188 #else /*@_BIG_ENDIAN_*/
189 	u8 hw_antsw_occur : 2;
190 	u8 antidx_antb : 3;
191 	u8 antidx_anta : 3;
192 #endif
193 };
194 
195 #if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1)
196 
197 __PACK struct phy_sts_rpt_jgr2_type0 {
198 	/* @DW0 */
199 	u8 page_num;
200 	u8 pwdb;
201 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
202 	u8 gain : 6;
203 	u8 rsvd_0 : 1;
204 	u8 trsw : 1;
205 #else
206 	u8 trsw : 1;
207 	u8 rsvd_0 : 1;
208 	u8 gain : 6;
209 #endif
210 	u8 rsvd_1;
211 
212 	/* @DW1 */
213 	u8 rsvd_2;
214 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
215 	u8 rxsc : 4;
216 	u8 agc_table : 4;
217 #else
218 	u8 agc_table : 4;
219 	u8 rxsc : 4;
220 #endif
221 	u8 channel;
222 	u8 band;
223 
224 	/* @DW2 */
225 	u16 length;
226 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
227 	u8 antidx_a : 3;
228 	u8 antidx_b : 3;
229 	u8 rsvd_3 : 2;
230 	u8 antidx_c : 3;
231 	u8 antidx_d : 3;
232 	u8 rsvd_4 : 2;
233 #else
234 	u8 rsvd_3 : 2;
235 	u8 antidx_b : 3;
236 	u8 antidx_a : 3;
237 	u8 rsvd_4 : 2;
238 	u8 antidx_d : 3;
239 	u8 antidx_c : 3;
240 #endif
241 
242 	/* @DW3 */
243 	u8 signal_quality;
244 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
245 	u8 vga : 5;
246 	u8 lna_l : 3;
247 	u8 bb_power : 6;
248 	u8 rsvd_9 : 1;
249 	u8 lna_h : 1;
250 #else
251 	u8 lna_l : 3;
252 	u8 vga : 5;
253 	u8 lna_h : 1;
254 	u8 rsvd_9 : 1;
255 	u8 bb_power : 6;
256 #endif
257 	u8 rsvd_5;
258 
259 	/* @DW4 */
260 	u32 rsvd_6;
261 
262 	/* @DW5 */
263 	u32 rsvd_7;
264 
265 	/* @DW6 */
266 	u32 rsvd_8;
267 };
268 
269 __PACK struct phy_sts_rpt_jgr2_type1 {
270 	/* @DW0 and DW1 */
271 	u8 page_num;
272 	u8 pwdb[4];
273 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
274 	u8 l_rxsc : 4;
275 	u8 ht_rxsc : 4;
276 #else
277 	u8 ht_rxsc : 4;
278 	u8 l_rxsc : 4;
279 #endif
280 	u8 channel;
281 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
282 	u8 band : 2;
283 	u8 rsvd_0 : 1;
284 	u8 hw_antsw_occu : 1;
285 	u8 gnt_bt : 1;
286 	u8 ldpc : 1;
287 	u8 stbc : 1;
288 	u8 beamformed : 1;
289 #else
290 	u8 beamformed : 1;
291 	u8 stbc : 1;
292 	u8 ldpc : 1;
293 	u8 gnt_bt : 1;
294 	u8 hw_antsw_occu : 1;
295 	u8 rsvd_0 : 1;
296 	u8 band : 2;
297 #endif
298 
299 	/* @DW2 */
300 	u16 lsig_length;
301 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
302 	u8 antidx_a : 3;
303 	u8 antidx_b : 3;
304 	u8 rsvd_1 : 2;
305 	u8 antidx_c : 3;
306 	u8 antidx_d : 3;
307 	u8 rsvd_2 : 2;
308 #else
309 	u8 rsvd_1 : 2;
310 	u8 antidx_b : 3;
311 	u8 antidx_a : 3;
312 	u8 rsvd_2 : 2;
313 	u8 antidx_d : 3;
314 	u8 antidx_c : 3;
315 #endif
316 
317 	/* @DW3 */
318 	u8 paid;
319 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
320 	u8 paid_msb : 1;
321 	u8 gid : 6;
322 	u8 rsvd_3 : 1;
323 #else
324 	u8 rsvd_3 : 1;
325 	u8 gid : 6;
326 	u8 paid_msb : 1;
327 #endif
328 	u8 intf_pos;
329 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
330 	u8 intf_pos_msb : 1;
331 	u8 rsvd_4 : 2;
332 	u8 nb_intf_flag : 1;
333 	u8 rf_mode : 2;
334 	u8 rsvd_5 : 2;
335 #else
336 	u8 rsvd_5 : 2;
337 	u8 rf_mode : 2;
338 	u8 nb_intf_flag : 1;
339 	u8 rsvd_4 : 2;
340 	u8 intf_pos_msb : 1;
341 #endif
342 
343 	/* @DW4 */
344 	s8 rxevm[4]; /* s(8,1) */
345 
346 	/* @DW5 */
347 	s8 cfo_tail[4]; /* s(8,7) */
348 
349 	/* @DW6 */
350 	s8 rxsnr[4]; /* s(8,1) */
351 };
352 
353 __PACK struct phy_sts_rpt_jgr2_type2 {
354 	/* @DW0 ane DW1 */
355 	u8 page_num;
356 	u8 pwdb[4];
357 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
358 	u8 l_rxsc : 4;
359 	u8 ht_rxsc : 4;
360 #else
361 	u8 ht_rxsc : 4;
362 	u8 l_rxsc : 4;
363 #endif
364 	u8 channel;
365 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
366 	u8 band : 2;
367 	u8 rsvd_0 : 1;
368 	u8 hw_antsw_occu : 1;
369 	u8 gnt_bt : 1;
370 	u8 ldpc : 1;
371 	u8 stbc : 1;
372 	u8 beamformed : 1;
373 #else
374 	u8 beamformed : 1;
375 	u8 stbc : 1;
376 	u8 ldpc : 1;
377 	u8 gnt_bt : 1;
378 	u8 hw_antsw_occu : 1;
379 	u8 rsvd_0 : 1;
380 	u8 band : 2;
381 #endif
382 
383 /* @DW2 */
384 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
385 	u8 shift_l_map : 6;
386 	u8 rsvd_1 : 2;
387 #else
388 	u8 rsvd_1 : 2;
389 	u8 shift_l_map : 6;
390 #endif
391 	u8 cnt_pw2cca;
392 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
393 	u8 agc_table_a : 4;
394 	u8 agc_table_b : 4;
395 	u8 agc_table_c : 4;
396 	u8 agc_table_d : 4;
397 #else
398 	u8 agc_table_b : 4;
399 	u8 agc_table_a : 4;
400 	u8 agc_table_d : 4;
401 	u8 agc_table_c : 4;
402 #endif
403 
404 	/* @DW3 ~ DW6*/
405 	u8 cnt_cca2agc_rdy;
406 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
407 	u8 gain_a : 6;
408 	u8 rsvd_2 : 1;
409 	u8 trsw_a : 1;
410 	u8 gain_b : 6;
411 	u8 rsvd_3 : 1;
412 	u8 trsw_b : 1;
413 	u8 gain_c : 6;
414 	u8 rsvd_4 : 1;
415 	u8 trsw_c : 1;
416 	u8 gain_d : 6;
417 	u8 rsvd_5 : 1;
418 	u8 trsw_d : 1;
419 	u8 aagc_step_a : 2;
420 	u8 aagc_step_b : 2;
421 	u8 aagc_step_c : 2;
422 	u8 aagc_step_d : 2;
423 #else
424 	u8 trsw_a : 1;
425 	u8 rsvd_2 : 1;
426 	u8 gain_a : 6;
427 	u8 trsw_b : 1;
428 	u8 rsvd_3 : 1;
429 	u8 gain_b : 6;
430 	u8 trsw_c : 1;
431 	u8 rsvd_4 : 1;
432 	u8 gain_c : 6;
433 	u8 trsw_d : 1;
434 	u8 rsvd_5 : 1;
435 	u8 gain_d : 6;
436 	u8 aagc_step_d : 2;
437 	u8 aagc_step_c : 2;
438 	u8 aagc_step_b : 2;
439 	u8 aagc_step_a : 2;
440 #endif
441 	u8 ht_aagc_gain[4];
442 	u8 dagc_gain[4];
443 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
444 	u8 counter : 6;
445 	u8 rsvd_6 : 2;
446 	u8 syn_count : 5;
447 	u8 rsvd_7 : 3;
448 #else
449 	u8 rsvd_6 : 2;
450 	u8 counter : 6;
451 	u8 rsvd_7 : 3;
452 	u8 syn_count : 5;
453 #endif
454 };
455 #endif
456 
457 /*@==============================================*/
458 #ifdef PHYSTS_3RD_TYPE_SUPPORT
459 __PACK struct phy_sts_rpt_jgr3_type0 {
460 /* @DW0 : Offset 0 */
461 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
462 	u8 page_num : 4;
463 	u8 pkt_cnt : 2;
464 	u8 channel_msb : 2;
465 #else
466 	u8 channel_msb : 2;
467 	u8 pkt_cnt : 2;
468 	u8 page_num : 4;
469 #endif
470 	u8 pwdb_a;
471 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
472 	u8 gain_a : 6;
473 	u8 rsvd_0 : 1;
474 	u8 trsw : 1;
475 #else
476 	u8 trsw : 1;
477 	u8 rsvd_0 : 1;
478 	u8 gain_a : 6;
479 #endif
480 
481 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
482 	u8 agc_table_b : 4;
483 	u8 agc_table_c : 4;
484 #else
485 	u8 agc_table_c : 4;
486 	u8 agc_table_b : 4;
487 #endif
488 
489 /* @DW1 : Offset 4 */
490 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
491 	u8 rsvd_1 : 4;
492 	u8 agc_table_d : 4;
493 #else
494 	u8 agc_table_d : 4;
495 	u8 rsvd_1 : 4;
496 #endif
497 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
498 	u8 l_rxsc : 4;
499 	u8 agc_table_a : 4;
500 #else
501 	u8 agc_table_a : 4;
502 	u8 l_rxsc : 4;
503 #endif
504 	u8 channel;
505 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
506 	u8 band : 2;
507 	u8 rsvd_2_1 : 1;
508 	u8 hw_antsw_occur_keep_cck : 1;
509 	u8 gnt_bt_keep_cck : 1;
510 	u8 rsvd_2_2 : 1;
511 	u8 path_sel_o : 2;
512 #else
513 	u8 path_sel_o : 2;
514 	u8 rsvd_2_2 : 1;
515 	u8 gnt_bt_keep_cck : 1;
516 	u8 hw_antsw_occur_keep_cck : 1;
517 	u8 rsvd_2_1 : 1;
518 	u8 band : 2;
519 #endif
520 
521 	/* @DW2 : Offset 8 */
522 	u16 length;
523 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
524 	u8 antidx_a : 4;
525 	u8 antidx_b : 4;
526 #else
527 	u8 antidx_b : 4;
528 	u8 antidx_a : 4;
529 #endif
530 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
531 	u8 antidx_c : 4;
532 	u8 antidx_d : 4;
533 #else
534 	u8 antidx_d : 4;
535 	u8 antidx_c : 4;
536 #endif
537 
538 	/* @DW3 : Offset 12 */
539 	u8 signal_quality;
540 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
541 	u8 vga_a : 5;
542 	u8 lna_l_a : 3;
543 #else
544 	u8 lna_l_a : 3;
545 	u8 vga_a : 5;
546 #endif
547 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
548 	u8 bb_power_a : 6;
549 	u8 rsvd_3_1 : 1;
550 	u8 lna_h_a : 1;
551 #else
552 
553 	u8 lna_h_a : 1;
554 	u8 rsvd_3_1 : 1;
555 	u8 bb_power_a : 6;
556 #endif
557 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
558 	u8 rxrate : 2;
559 	u8 raterr : 1;
560 	u8 lockbit : 1;
561 	u8 sqloss : 1;
562 	u8 mf_off : 1;
563 	u8 rsvd_3_2 : 2;
564 #else
565 	u8 rsvd_3_2 : 2;
566 	u8 mf_off : 1;
567 	u8 sqloss : 1;
568 	u8 lockbit : 1;
569 	u8 raterr : 1;
570 	u8 rxrate : 2;
571 #endif
572 
573 	/* @DW4 : Offset 16 */
574 	u8 pwdb_b;
575 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
576 	u8 vga_b : 5;
577 	u8 lna_l_b : 3;
578 #else
579 	u8 lna_l_b : 3;
580 	u8 vga_b : 5;
581 #endif
582 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
583 	u8 bb_power_b : 6;
584 	u8 rsvd_4_1 : 1;
585 	u8 lna_h_b : 1;
586 #else
587 	u8 lna_h_b : 1;
588 	u8 rsvd_4_1 : 1;
589 	u8 bb_power_b : 6;
590 #endif
591 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
592 	u8 gain_b : 6;
593 	u8 rsvd_4_2 : 2;
594 #else
595 	u8 rsvd_4_2 : 2;
596 	u8 gain_b : 6;
597 #endif
598 
599 	/* @DW5 : Offset 20 */
600 	u8 pwdb_c;
601 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
602 	u8 vga_c : 5;
603 	u8 lna_l_c : 3;
604 #else
605 	u8 lna_l_c : 3;
606 	u8 vga_c : 5;
607 #endif
608 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
609 	u8 bb_power_c : 6;
610 	u8 rsvd_5_1 : 1;
611 	u8 lna_h_c : 1;
612 #else
613 	u8 lna_h_c : 1;
614 	u8 rsvd_5_1 : 1;
615 	u8 bb_power_c : 6;
616 #endif
617 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
618 	u8 gain_c : 6;
619 	u8 rsvd_5_2 : 2;
620 #else
621 	u8 rsvd_5_2 : 2;
622 	u8 gain_c : 6;
623 #endif
624 
625 	/* @DW6 : Offset 24 */
626 	u8 pwdb_d;
627 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
628 	u8 vga_d : 5;
629 	u8 lna_l_d : 3;
630 #else
631 	u8 lna_l_d : 3;
632 	u8 vga_d : 5;
633 #endif
634 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
635 	u8 bb_power_d : 6;
636 	u8 rsvd_6_1 : 1;
637 	u8 lna_h_d : 1;
638 #else
639 	u8 lna_h_d : 1;
640 	u8 rsvd_6_1 : 1;
641 	u8 bb_power_d : 6;
642 #endif
643 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
644 	u8 gain_d : 6;
645 	u8 rsvd_6_2 : 2;
646 #else
647 	u8 rsvd_6_2 : 2;
648 	u8 gain_d : 6;
649 #endif
650 };
651 #if(RTL8723F_SUPPORT)
652 __PACK struct phy_sts_rpt_jgr3_type6 {
653 	/* judy_add_8723F_0512 */
654 /* @DW0 : Offset 0 */
655 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
656 	u8 pop_idx : 4;
657 	u8 pkt_cnt : 2;
658 	u8 channel_msb : 2;
659 #else
660 	u8 channel_msb : 2;
661 	u8 pkt_cnt : 2;
662 	u8 pop_idx : 4;
663 #endif
664 
665 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
666 	u8 agc_table_a : 4;
667 	u8 rsvd_0 : 4;
668 #else
669 	u8 rsvd_0 : 4;
670 	u8 agc_table_a : 4;
671 #endif
672 	u8 rsvd_1 : 8;
673 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
674 	u8 trsw : 1;
675 	u8 hw_antsw_occur_keep_cck : 1;
676 	u8 gnt_bt_keep_cck : 1;
677 	u8 rssi_msb : 3;
678 	u8 rsvd_2 : 2;
679 #else
680 	u8 rsvd_2 : 2;
681 	u8 rssi_msb : 3;
682 	u8 gnt_bt_keep_cck : 1;
683 	u8 hw_antsw_occur_keep_cck : 1;
684 	u8 trsw : 1;
685 #endif
686 
687 /* @DW1 : Offset 4 */
688 	u8 channel;
689 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
690 	u8 antidx_a : 4;
691 	u8 rsvd_2_1 : 4;
692 #else
693 	u8 rsvd_2_1 : 4;
694 	u8 antidx_a : 4;
695 #endif
696 	u8 rsvd_2_2;
697 	u8 mp_gain_idx_a;
698 
699 /* @DW2 : Offset 8 */
700 	u16 rsvd_3_1;
701 	u8 rsvd_4_1;
702 	u8 rssi;
703 
704 /* @DW3 : Offset 12 */
705 	u16 rsvd_4_2;
706 	u8 rsvd_5_1;
707 	u8 avg_cfo;
708 /* @DW4 : Offset 16 */
709 	u8 coarse_cfo;
710 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
711 	u8 coarse_cfo_msb : 4;
712 	u8 avg_cfo_msb : 4;
713 #else
714 	u8 avg_cfo_msb : 4;
715 	u8 coarse_cfo_msb : 4;
716 #endif
717 	u8 evm_hdr;
718 	u8 evm_pld;
719 /* @DW5 : Offset 20 */
720 	u32 rsvd_6_1;
721 	u32 rsvd_7_1;
722 };
723 #endif
724 __PACK struct phy_sts_rpt_jgr3_type1 {
725 /* @DW0 : Offset 0 */
726 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
727 	u8 page_num : 4;
728 	u8 pkt_cnt : 2;
729 	u8 channel_pri_msb : 2;
730 #else
731 	u8 channel_pri_msb : 2;
732 	u8 pkt_cnt : 2;
733 	u8 page_num : 4;
734 #endif
735 	u8 pwdb_a;
736 	u8 pwdb_b;
737 	u8 pwdb_c;
738 
739 	/* @DW1 : Offset 4 */
740 	u8 pwdb_d;
741 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
742 	u8 l_rxsc : 4;
743 	u8 ht_rxsc : 4;
744 #else
745 	u8 ht_rxsc : 4;
746 	u8 l_rxsc : 4;
747 #endif
748 	u8 channel_pri_lsb;
749 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
750 	u8 band : 2;
751 	u8 rsvd_0 : 2;
752 	u8 gnt_bt : 1;
753 	u8 ldpc : 1;
754 	u8 stbc : 1;
755 	u8 beamformed : 1;
756 #else
757 	u8 beamformed : 1;
758 	u8 stbc : 1;
759 	u8 ldpc : 1;
760 	u8 gnt_bt : 1;
761 	u8 rsvd_0 : 2;
762 	u8 band : 2;
763 #endif
764 
765 	/* @DW2 : Offset 8 */
766 	u8 channel_sec_lsb;
767 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
768 	u8 channel_sec_msb : 2;
769 	u8 rsvd_1 : 2;
770 	u8 hw_antsw_occur_a : 1;
771 	u8 hw_antsw_occur_b : 1;
772 	u8 hw_antsw_occur_c : 1;
773 	u8 hw_antsw_occur_d : 1;
774 #else
775 	u8 hw_antsw_occur_d : 1;
776 	u8 hw_antsw_occur_c : 1;
777 	u8 hw_antsw_occur_b : 1;
778 	u8 hw_antsw_occur_a : 1;
779 	u8 rsvd_1 : 2;
780 	u8 channel_sec_msb : 2;
781 
782 #endif
783 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
784 	u8 antidx_a : 4;
785 	u8 antidx_b : 4;
786 #else
787 	u8 antidx_b : 4;
788 	u8 antidx_a : 4;
789 #endif
790 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
791 	u8 antidx_c : 4;
792 	u8 antidx_d : 4;
793 #else
794 	u8 antidx_d : 4;
795 	u8 antidx_c : 4;
796 #endif
797 
798 	/* @DW3 : Offset 12 */
799 	u8 paid;
800 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
801 	u8 paid_msb : 1;
802 	u8 gid : 6;
803 	u8 rsvd_3 : 1;
804 #else
805 	u8 rsvd_3 : 1;
806 	u8 gid : 6;
807 	u8 paid_msb : 1;
808 #endif
809 	u16 rsvd_4;
810 #if 0
811 	/*@
812 	u8		rsvd_4;
813 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
814 	u8		rsvd_5: 6;
815 	u8		rf_mode: 2;
816 #else
817 	u8		rf_mode: 2;
818 	u8		rsvd_5: 6;
819 #endif
820 */
821 #endif
822 	/* @DW4 : Offset 16 */
823 	s8 rxevm[4]; /* s(8,1) */
824 
825 	/* @DW5 : Offset 20 */
826 	s8 cfo_tail[4]; /* s(8,7) */
827 
828 	/* @DW6 : Offset 24 */
829 	s8 rxsnr[4]; /* s(8,1) */
830 };
831 
832 __PACK struct phy_sts_rpt_jgr3_type2_3 {
833 /* Type2 is primary channel & type3 is secondary channel */
834 /* @DW0 and DW1: Offest 0 and Offset 4 */
835 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
836 	u8 page_num : 4;
837 	u8 pkt_cnt : 2;
838 	u8 channel_msb : 2;
839 #else
840 	u8 channel_msb : 2;
841 	u8 pkt_cnt : 2;
842 	u8 page_num : 4;
843 #endif
844 	u8 pwdb[4];
845 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
846 	u8 l_rxsc : 4;
847 	u8 ht_rxsc : 4;
848 #else
849 	u8 ht_rxsc : 4;
850 	u8 l_rxsc : 4;
851 #endif
852 	u8 channel_lsb;
853 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
854 	u8 band : 2;
855 	u8 rsvd_0 : 2;
856 	u8 gnt_bt : 1;
857 	u8 ldpc : 1;
858 	u8 stbc : 1;
859 	u8 beamformed : 1;
860 #else
861 	u8 beamformed : 1;
862 	u8 stbc : 1;
863 	u8 ldpc : 1;
864 	u8 gnt_bt : 1;
865 	u8 rsvd_0 : 2;
866 	u8 band : 2;
867 #endif
868 
869 /* @DW2 : Offset 8 */
870 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
871 	u8 shift_l_map : 6;
872 	u8 rsvd_1 : 2;
873 #else
874 	u8 rsvd_1 : 2;
875 	u8 shift_l_map : 6;
876 #endif
877 	s8 pwed_th; /* @dynamic energy threshold S(8,2) */
878 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
879 	u8 agc_table_a : 4;
880 	u8 agc_table_b : 4;
881 #else
882 	u8 agc_table_b : 4;
883 	u8 agc_table_a : 4;
884 #endif
885 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
886 	u8 agc_table_c : 4;
887 	u8 agc_table_d : 4;
888 #else
889 	u8 agc_table_d : 4;
890 	u8 agc_table_c : 4;
891 #endif
892 
893 	/* @DW3 : Offset 12 */
894 	u8 cnt_cca2agc_rdy; /* Time(ns) = cnt_cca2agc_ready*25 */
895 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
896 	u8 mp_gain_a : 6;
897 	u8 mp_gain_b_lsb : 2;
898 #else
899 	u8 mp_gain_b_lsb : 2;
900 	u8 mp_gain_a : 6;
901 #endif
902 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
903 	u8 mp_gain_b_msb : 4;
904 	u8 mp_gain_c_lsb : 4;
905 #else
906 	u8 mp_gain_c_lsb : 4;
907 	u8 mp_gain_b_msb : 4;
908 #endif
909 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
910 	u8 mp_gain_c_msb : 2;
911 	u8 avg_noise_pwr_lsb : 4;
912 	u8 rsvd_3 : 2;
913 	/* u8		r_rfmod:2; */
914 #else
915 	/* u8		r_rfmod:2; */
916 	u8 rsvd_3 : 2;
917 	u8 avg_noise_pwr_lsb : 4;
918 	u8 mp_gain_c_msb : 2;
919 #endif
920 	/* @DW4 ~ 5: offset 16 ~20 */
921 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
922 	u8 mp_gain_d : 6;
923 	u8 is_freq_select_fading : 1;
924 	u8 rsvd_2 : 1;
925 #else
926 	u8 rsvd_2 : 1;
927 	u8 is_freq_select_fading : 1;
928 	u8 mp_gain_d : 6;
929 #endif
930 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
931 	u8 aagc_step_a : 2;
932 	u8 aagc_step_b : 2;
933 	u8 aagc_step_c : 2;
934 	u8 aagc_step_d : 2;
935 #else
936 	u8 aagc_step_d : 2;
937 	u8 aagc_step_c : 2;
938 	u8 aagc_step_b : 2;
939 	u8 aagc_step_a : 2;
940 #endif
941 	u8 ht_aagc_gain[4];
942 	u8 dagc_gain[4];
943 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
944 	u8 counter : 6;
945 	u8 syn_count_lsb : 2;
946 #else
947 	u8 syn_count_lsb : 2;
948 	u8 counter : 6;
949 #endif
950 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
951 	u8 syn_count_msb : 3;
952 	u8 avg_noise_pwr_msb : 5;
953 #else
954 	u8 avg_noise_pwr_msb : 5;
955 	u8 syn_count_msb : 3;
956 #endif
957 };
958 
959 __PACK struct phy_sts_rpt_jgr3_type4 {
960 /* smart antenna */
961 /* @DW0 and DW1 : offset 0 and 4  */
962 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
963 	u8 page_num : 4;
964 	u8 pkt_cnt : 2;
965 	u8 channel_msb : 2;
966 #else
967 	u8 channel_msb : 2;
968 	u8 pkt_cnt : 2;
969 	u8 page_num : 4;
970 #endif
971 	u8 pwdb[4];
972 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
973 	u8 l_rxsc : 4;
974 	u8 ht_rxsc : 4;
975 #else
976 	u8 ht_rxsc : 4;
977 	u8 l_rxsc : 4;
978 #endif
979 	u8 channel_lsb;
980 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
981 	u8 band : 2;
982 	u8 rsvd_0 : 2;
983 	u8 gnt_bt : 1;
984 	u8 ldpc : 1;
985 	u8 stbc : 1;
986 	u8 beamformed : 1;
987 #else
988 	u8 beamformed : 1;
989 	u8 stbc : 1;
990 	u8 ldpc : 1;
991 	u8 gnt_bt : 1;
992 	u8 rsvd_0 : 1;
993 	u8 band : 2;
994 #endif
995 
996 /* @DW2 : offset 8 */
997 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
998 	u8 bad_tone_cnt_min_eign_0 : 4;
999 	u8 bad_tone_cnt_cn_excess_0 : 4;
1000 #else
1001 	u8 bad_tone_cnt_cn_excess_0 : 4;
1002 	u8 bad_tone_cnt_min_eign_0 : 4;
1003 #endif
1004 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1005 	u8 training_done_a : 1;
1006 	u8 training_done_b : 1;
1007 	u8 training_done_c : 1;
1008 	u8 training_done_d : 1;
1009 	u8 hw_antsw_occur_a : 1;
1010 	u8 hw_antsw_occur_b : 1;
1011 	u8 hw_antsw_occur_c : 1;
1012 	u8 hw_antsw_occur_d : 1;
1013 #else
1014 	u8 hw_antsw_occur_d : 1;
1015 	u8 hw_antsw_occur_c : 1;
1016 	u8 hw_antsw_occur_b : 1;
1017 	u8 hw_antsw_occur_a : 1;
1018 	u8 training_done_d : 1;
1019 	u8 training_done_c : 1;
1020 	u8 training_done_b : 1;
1021 	u8 training_done_a : 1;
1022 #endif
1023 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1024 	u8 antidx_a : 4;
1025 	u8 antidx_b : 4;
1026 #else
1027 	u8 antidx_b : 4;
1028 	u8 antidx_a : 4;
1029 #endif
1030 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1031 	u8 antidx_c : 4;
1032 	u8 antidx_d : 4;
1033 #else
1034 	u8 antidx_d : 4;
1035 	u8 antidx_c : 4;
1036 #endif
1037 /* @DW3 : offset 12 */
1038 	u8 tx_pkt_cnt;
1039 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1040 	u8 bad_tone_cnt_min_eign_1 : 4;
1041 	u8 bad_tone_cnt_cn_excess_1 : 4;
1042 #else
1043 	u8 bad_tone_cnt_cn_excess_1 : 4;
1044 	u8 bad_tone_cnt_min_eign_1 : 4;
1045 #endif
1046 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1047 	u8 avg_cond_num_0 : 7;
1048 	u8 avg_cond_num_1_lsb : 1;
1049 #else
1050 	u8 avg_cond_num_1_lsb : 1;
1051 	u8 avg_cond_num_0 : 7;
1052 #endif
1053 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1054 	u8 avg_cond_num_1_msb : 6;
1055 	u8 rsvd_1 : 2;
1056 #else
1057 	u8 rsvd_1 : 2;
1058 	u8 avg_cond_num_1_msb : 6;
1059 #endif
1060 
1061 	/* @DW4 : offset 16 */
1062 	s8 rxevm[4]; /* s(8,1) */
1063 
1064 	/* @DW5 : offset 20 */
1065 	u8 eigenvalue[4]; /* @eigenvalue or eigenvalue of seg0 (in dB) */
1066 
1067 	/* @DW6 : ofset 24 */
1068 	s8 rxsnr[4]; /* s(8,1) */
1069 };
1070 
1071 __PACK struct phy_sts_rpt_jgr3_type5 {
1072 /* @Debug */
1073 /* @DW0 ane DW1 : offset 0 and 4 */
1074 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1075 	u8 page_num : 4;
1076 	u8 pkt_cnt : 2;
1077 	u8 channel_msb : 2;
1078 #else
1079 	u8 channel_msb : 2;
1080 	u8 pkt_cnt : 2;
1081 	u8 page_num : 4;
1082 #endif
1083 	u8 pwdb[4];
1084 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1085 	u8 l_rxsc : 4;
1086 	u8 ht_rxsc : 4;
1087 #else
1088 	u8 ht_rxsc : 4;
1089 	u8 l_rxsc : 4;
1090 #endif
1091 	u8 channel_lsb;
1092 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1093 	u8 band : 2;
1094 	u8 rsvd_0 : 2;
1095 	u8 gnt_bt : 1;
1096 	u8 ldpc : 1;
1097 	u8 stbc : 1;
1098 	u8 beamformed : 1;
1099 #else
1100 	u8 beamformed : 1;
1101 	u8 stbc : 1;
1102 	u8 ldpc : 1;
1103 	u8 gnt_bt : 1;
1104 	u8 rsvd_0 : 2;
1105 	u8 band : 2;
1106 #endif
1107 	/* @DW2 : offset 8 */
1108 	u8 rsvd_1;
1109 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1110 	u8 rsvd_2 : 4;
1111 	u8 hw_antsw_occur_a : 1;
1112 	u8 hw_antsw_occur_b : 1;
1113 	u8 hw_antsw_occur_c : 1;
1114 	u8 hw_antsw_occur_d : 1;
1115 #else
1116 	u8 hw_antsw_occur_d : 1;
1117 	u8 hw_antsw_occur_c : 1;
1118 	u8 hw_antsw_occur_b : 1;
1119 	u8 hw_antsw_occur_a : 1;
1120 	u8 rsvd_2 : 4;
1121 #endif
1122 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1123 	u8 antidx_a : 4;
1124 	u8 antidx_b : 4;
1125 #else
1126 	u8 antidx_b : 4;
1127 	u8 antidx_a : 4;
1128 #endif
1129 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1130 	u8 antidx_c : 4;
1131 	u8 antidx_d : 4;
1132 #else
1133 	u8 antidx_d : 4;
1134 	u8 antidx_c : 4;
1135 #endif
1136 	/* @DW3 : offset 12 */
1137 	u8 tx_pkt_cnt;
1138 #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1139 	u8 inf_pos_0_A_flg : 1;
1140 	u8 inf_pos_1_A_flg : 1;
1141 	u8 inf_pos_0_B_flg : 1;
1142 	u8 inf_pos_1_B_flg : 1;
1143 	u8 inf_pos_0_C_flg : 1;
1144 	u8 inf_pos_1_C_flg : 1;
1145 	u8 inf_pos_0_D_flg : 1;
1146 	u8 inf_pos_1_D_flg : 1;
1147 #else
1148 	u8 inf_pos_1_D_flg : 1;
1149 	u8 inf_pos_0_D_flg : 1;
1150 	u8 inf_pos_1_C_flg : 1;
1151 	u8 inf_pos_0_C_flg : 1;
1152 	u8 inf_pos_1_B_flg : 1;
1153 	u8 inf_pos_0_B_flg : 1;
1154 	u8 inf_pos_1_A_flg : 1;
1155 	u8 inf_pos_0_A_flg : 1;
1156 #endif
1157 	u8 rsvd_3;
1158 	u8 rsvd_4;
1159 	/* @DW4 : offset 16 */
1160 	u8 inf_pos_0_a;
1161 	u8 inf_pos_1_a;
1162 	u8 inf_pos_0_b;
1163 	u8 inf_pos_1_b;
1164 	/* @DW5 : offset 20 */
1165 	u8 inf_pos_0_c;
1166 	u8 inf_pos_1_c;
1167 	u8 inf_pos_0_d;
1168 	u8 inf_pos_1_d;
1169 };
1170 
1171 __PACK struct phy_sts_rpt_jgr3_ofdm_cmn {
1172 	#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1173 	u8 page_num : 4;
1174 	u8 pkt_cnt : 2;
1175 	u8 channel_msb : 2;
1176 	#else
1177 	u8 channel_msb : 2;
1178 	u8 pkt_cnt : 2;
1179 	u8 page_num : 4;
1180 	#endif
1181 	u8 pwdb[4];
1182 	#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1183 	u8 l_rxsc : 4;
1184 	u8 ht_rxsc : 4;
1185 	#else
1186 	u8 ht_rxsc : 4;
1187 	u8 l_rxsc : 4;
1188 	#endif
1189 	u8 channel_lsb;
1190 	#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
1191 	u8 band : 2;
1192 	u8 rsvd_0 : 2;
1193 	u8 gnt_bt : 1;
1194 	u8 ldpc : 1;
1195 	u8 stbc : 1;
1196 	u8 beamformed : 1;
1197 	#else
1198 	u8 beamformed : 1;
1199 	u8 stbc : 1;
1200 	u8 ldpc : 1;
1201 	u8 gnt_bt : 1;
1202 	u8 rsvd_0 : 1;
1203 	u8 band : 2;
1204 	#endif
1205 };
1206 #endif /*@#ifdef PHYSTS_3RD_TYPE_SUPPORT*/
1207 
1208 #ifdef PHYDM_PHYSTAUS_AUTO_SWITCH
1209 void phydm_physts_auto_switch_jgr3_set(void *dm_void, boolean enable,
1210 				       u8 bitmap_en);
1211 #endif
1212 
1213 #if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1)
1214 boolean
1215 phydm_query_is_mu_api(struct dm_struct *phydm, u8 ppdu_idx, u8 *p_data_rate,
1216 		      u8 *p_gid);
1217 #endif
1218 
1219 void phydm_reset_phystatus_avg(struct dm_struct *dm);
1220 
1221 void phydm_reset_phystatus_statistic(struct dm_struct *dm);
1222 
1223 void phydm_reset_rssi_for_dm(struct dm_struct *dm, u8 station_id);
1224 
1225 void phydm_get_cck_rssi_table_from_reg(struct dm_struct *dm);
1226 
1227 #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
1228 void phydm_normal_driver_rx_sniffer(
1229 	struct dm_struct *dm,
1230 	u8 *desc,
1231 	PRT_RFD_STATUS rt_rfd_status,
1232 	u8 *drv_info,
1233 	u8 phy_status);
1234 #endif
1235 
1236 #if (DM_ODM_SUPPORT_TYPE == ODM_CE)
1237 s32 phydm_signal_scale_mapping(struct dm_struct *dm, s32 curr_sig);
1238 #endif
1239 
1240 boolean odm_phy_status_query(struct dm_struct *dm,
1241 			     struct phydm_phyinfo_struct *phy_info,
1242 			     u8 *phy_sts,
1243 			     struct phydm_perpkt_info_struct *pktinfo);
1244 
1245 void phydm_rx_phy_status_init(void *dm_void);
1246 
1247 void phydm_physts_dbg(void *dm_void, char input[][16], u32 *_used,
1248 		      char *output, u32 *_out_len);
1249 
1250 #endif /*@#ifndef	__HALHWOUTSRC_H__*/
1251