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
******************************************************************************/
22
#ifndef __HALHWOUTSRC_H__
23
#define __HALHWOUTSRC_H__
26
/*--------------------------Define -------------------------------------------*/
27
#define CCK_RSSI_INIT_COUNT 5
29
#define RA_RSSI_STATE_INIT 0
30
#define RA_RSSI_STATE_SEND 1
31
#define RA_RSSI_STATE_HOLD 2
33
#define CFO_HW_RPT_2_MHZ(val) ((val<<1) + (val>>1))
34
/* ((X* 3125) / 10)>>7 = (X*10)>>2 = X*2.5 = X<<1 + X>>1 */
36
#define AGC_DIFF_CONFIG_MP(ic, band) (odm_read_and_config_mp_##ic##_agc_tab_diff(p_dm_odm, array_mp_##ic##_agc_tab_diff_##band, \
37
sizeof(array_mp_##ic##_agc_tab_diff_##band)/sizeof(u32)))
38
#define AGC_DIFF_CONFIG_TC(ic, band) (odm_read_and_config_tc_##ic##_agc_tab_diff(p_dm_odm, array_tc_##ic##_agc_tab_diff_##band, \
39
sizeof(array_tc_##ic##_agc_tab_diff_##band)/sizeof(u32)))
41
#define AGC_DIFF_CONFIG(ic, band) do {\
42
if (p_dm_odm->is_mp_chip)\
43
AGC_DIFF_CONFIG_MP(ic, band);\
45
AGC_DIFF_CONFIG_TC(ic, band);\
49
/* ************************************************************
50
* structure and define
51
* ************************************************************ */
53
__PACK struct _phy_rx_agc_info {
54
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
61
__PACK struct _phy_status_rpt_8192cd {
62
struct _phy_rx_agc_info path_agc[2];
64
u8 cck_sig_qual_ofdm_pwdb_all;
65
u8 cck_agc_rpt_ofdm_cfosho_a;
66
u8 cck_rpt_b_ofdm_cfosho_b;
67
u8 rsvd_1;/*ch_corr_msb;*/
68
u8 noise_power_db_msb;
73
u8 noise_power_db_lsb;
76
u8 stream_target_csi[2];
80
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
81
u8 antsel_rx_keep_2: 1; /*ex_intf_flg:1;*/
88
#else /*_BIG_ENDIAN_ */
95
u8 antsel_rx_keep_2: 1;/*ex_intf_flg:1;*/
100
struct _phy_status_rpt_8812 {
102
u8 gain_trsw[2]; /*path-A and path-B {TRSW, gain[6:0] }*/
103
u8 chl_num_LSB; /*channel number[7:0]*/
104
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
105
u8 chl_num_MSB: 2; /*channel number[9:8]*/
106
u8 sub_chnl: 4; /*sub-channel location[3:0]*/
107
u8 r_RFMOD: 2; /*RF mode[1:0]*/
108
#else /*_BIG_ENDIAN_ */
115
u8 pwdb_all; /*CCK signal quality / OFDM pwdb all*/
116
s8 cfosho[2]; /*DW1 byte 1 DW1 byte2 CCK AGC report and CCK_BB_Power / OFDM path-A and path-B short CFO*/
117
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
118
/*this should be checked again because the definition of 8812 and 8814 is different*/
119
/* u8 r_cck_rx_enable_pathc:2; cck rx enable pathc[1:0]*/
120
/* u8 cck_rx_path:4; cck rx path[3:0]*/
122
u8 bt_RF_ch_MSB: 2; /*8812A:2'b0 8814A: bt rf channel keep[7:6]*/
123
#else /*_BIG_ENDIAN_*/
129
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
130
u8 ant_div_sw_a: 1; /*8812A: ant_div_sw_a 8814A: 1'b0*/
131
u8 ant_div_sw_b: 1; /*8812A: ant_div_sw_b 8814A: 1'b0*/
132
u8 bt_RF_ch_LSB: 6; /*8812A: 6'b0 8814A: bt rf channel keep[5:0]*/
133
#else /*_BIG_ENDIAN_ */
138
s8 cfotail[2]; /*DW2 byte 1 DW2 byte 2 path-A and path-B CFO tail*/
139
u8 PCTS_MSK_RPT_0; /*PCTS mask report[7:0]*/
140
u8 PCTS_MSK_RPT_1; /*PCTS mask report[15:8]*/
143
s8 rxevm[2]; /*DW3 byte 1 DW3 byte 2 stream 1 and stream 2 RX EVM*/
144
s8 rxsnr[2]; /*DW3 byte 3 DW4 byte 0 path-A and path-B RX SNR*/
147
u8 PCTS_MSK_RPT_2; /*PCTS mask report[23:16]*/
148
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
149
u8 PCTS_MSK_RPT_3: 6; /*PCTS mask report[29:24]*/
150
u8 pcts_rpt_valid: 1; /*pcts_rpt_valid*/
151
u8 resvd_1: 1; /*1'b0*/
152
#else /*_BIG_ENDIAN_*/
154
u8 pcts_rpt_valid: 1;
155
u8 PCTS_MSK_RPT_3: 6;
157
s8 rxevm_cd[2]; /*DW 4 byte 3 DW5 byte 0 8812A: 16'b0 8814A: stream 3 and stream 4 RX EVM*/
160
u8 csi_current[2]; /*DW5 byte 1 DW5 byte 2 8812A: stream 1 and 2 CSI 8814A: path-C and path-D RX SNR*/
161
u8 gain_trsw_cd[2]; /*DW5 byte 3 DW6 byte 0 path-C and path-D {TRSW, gain[6:0] }*/
164
s8 sigevm; /*signal field EVM*/
165
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
166
u8 antidx_antc: 3; /*8812A: 3'b0 8814A: antidx_antc[2:0]*/
167
u8 antidx_antd: 3; /*8812A: 3'b0 8814A: antidx_antd[2:0]*/
168
u8 dpdt_ctrl_keep: 1; /*8812A: 1'b0 8814A: dpdt_ctrl_keep*/
169
u8 GNT_BT_keep: 1; /*8812A: 1'b0 8814A: GNT_BT_keep*/
170
#else /*_BIG_ENDIAN_*/
172
u8 dpdt_ctrl_keep: 1;
176
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
177
u8 antidx_anta: 3; /*antidx_anta[2:0]*/
178
u8 antidx_antb: 3; /*antidx_antb[2:0]*/
179
u8 hw_antsw_occur: 2; /*1'b0*/
180
#else /*_BIG_ENDIAN_*/
181
u8 hw_antsw_occur: 2;
188
phydm_reset_rssi_for_dm(
189
struct PHY_DM_STRUCT *p_dm_odm,
194
odm_init_rssi_for_dm(
195
struct PHY_DM_STRUCT *p_dm_odm
198
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
200
phydm_normal_driver_rx_sniffer(
201
struct PHY_DM_STRUCT *p_dm_odm,
203
PRT_RFD_STATUS p_rt_rfd_status,
210
odm_phy_status_query(
211
struct PHY_DM_STRUCT *p_dm_odm,
212
struct _odm_phy_status_info_ *p_phy_info,
214
struct _odm_per_pkt_info_ *p_pktinfo
218
odm_mac_status_query(
219
struct PHY_DM_STRUCT *p_dm_odm,
222
boolean is_packet_match_bssid,
223
boolean is_packet_to_self,
224
boolean is_packet_beacon
228
odm_config_rf_with_tx_pwr_track_header_file(
229
struct PHY_DM_STRUCT *p_dm_odm
233
odm_config_rf_with_header_file(
234
struct PHY_DM_STRUCT *p_dm_odm,
235
enum odm_rf_config_type config_type,
236
enum odm_rf_radio_path_e e_rf_path
240
odm_config_bb_with_header_file(
241
struct PHY_DM_STRUCT *p_dm_odm,
242
enum odm_bb_config_type config_type
246
odm_config_mac_with_header_file(
247
struct PHY_DM_STRUCT *p_dm_odm
251
odm_config_fw_with_header_file(
252
struct PHY_DM_STRUCT *p_dm_odm,
253
enum odm_fw_config_type config_type,
259
odm_get_hw_img_version(
260
struct PHY_DM_STRUCT *p_dm_odm
264
odm_signal_scale_mapping(
265
struct PHY_DM_STRUCT *p_dm_odm,
269
#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1)
270
/*For 8822B only!! need to move to FW finally */
271
/*==============================================*/
273
phydm_rx_phy_status_new_type(
274
struct PHY_DM_STRUCT *p_phydm,
276
struct _odm_per_pkt_info_ *p_pktinfo,
277
struct _odm_phy_status_info_ *p_phy_info
281
phydm_query_is_mu_api(
282
struct PHY_DM_STRUCT *p_phydm,
288
struct _phy_status_rpt_jaguar2_type0 {
292
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
305
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
317
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
335
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
360
struct _phy_status_rpt_jaguar2_type1 {
364
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
372
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
392
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
410
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
420
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
435
s8 rxevm[4]; /* s(8,1) */
438
s8 cfo_tail[4]; /* s(8,7) */
441
s8 rxsnr[4]; /* s(8,1) */
444
struct _phy_status_rpt_jaguar2_type2 {
448
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
456
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
475
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
483
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
497
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
534
#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
546
/*==============================================*/
547
#endif /*#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1)*/
550
query_phydm_trx_capability(
551
struct PHY_DM_STRUCT *p_dm_odm
555
query_phydm_stbc_capability(
556
struct PHY_DM_STRUCT *p_dm_odm
560
query_phydm_ldpc_capability(
561
struct PHY_DM_STRUCT *p_dm_odm
565
query_phydm_txbf_parameters(
566
struct PHY_DM_STRUCT *p_dm_odm
570
query_phydm_txbf_capability(
571
struct PHY_DM_STRUCT *p_dm_odm
574
#endif /*#ifndef __HALHWOUTSRC_H__*/