net: wireless: rockchip: add rtl8822be pcie wifi driver
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8822be / hal / btc / halbtc8192e2ant.h
1
2 #if (BT_SUPPORT == 1 && COEX_SUPPORT == 1)
3
4 #if (RTL8192E_SUPPORT == 1)
5 /* *******************************************
6  * The following is for 8192E 2Ant BT Co-exist definition
7  * ******************************************* */
8 #define BT_AUTO_REPORT_ONLY_8192E_2ANT                          0
9
10 #define BT_INFO_8192E_2ANT_B_FTP                                                BIT(7)
11 #define BT_INFO_8192E_2ANT_B_A2DP                                       BIT(6)
12 #define BT_INFO_8192E_2ANT_B_HID                                                BIT(5)
13 #define BT_INFO_8192E_2ANT_B_SCO_BUSY                           BIT(4)
14 #define BT_INFO_8192E_2ANT_B_ACL_BUSY                           BIT(3)
15 #define BT_INFO_8192E_2ANT_B_INQ_PAGE                           BIT(2)
16 #define BT_INFO_8192E_2ANT_B_SCO_ESCO                           BIT(1)
17 #define BT_INFO_8192E_2ANT_B_CONNECTION                         BIT(0)
18
19 #define         BTC_RSSI_COEX_THRESH_TOL_8192E_2ANT             2
20
21 enum bt_info_src_8192e_2ant {
22         BT_INFO_SRC_8192E_2ANT_WIFI_FW                  = 0x0,
23         BT_INFO_SRC_8192E_2ANT_BT_RSP                           = 0x1,
24         BT_INFO_SRC_8192E_2ANT_BT_ACTIVE_SEND           = 0x2,
25         BT_INFO_SRC_8192E_2ANT_MAX
26 };
27
28 enum bt_8192e_2ant_bt_status {
29         BT_8192E_2ANT_BT_STATUS_NON_CONNECTED_IDLE      = 0x0,
30         BT_8192E_2ANT_BT_STATUS_CONNECTED_IDLE          = 0x1,
31         BT_8192E_2ANT_BT_STATUS_INQ_PAGE                                = 0x2,
32         BT_8192E_2ANT_BT_STATUS_ACL_BUSY                                = 0x3,
33         BT_8192E_2ANT_BT_STATUS_SCO_BUSY                                = 0x4,
34         BT_8192E_2ANT_BT_STATUS_ACL_SCO_BUSY                    = 0x5,
35         BT_8192E_2ANT_BT_STATUS_MAX
36 };
37
38 enum bt_8192e_2ant_coex_algo {
39         BT_8192E_2ANT_COEX_ALGO_UNDEFINED               = 0x0,
40         BT_8192E_2ANT_COEX_ALGO_SCO                             = 0x1,
41         BT_8192E_2ANT_COEX_ALGO_SCO_PAN                 = 0x2,
42         BT_8192E_2ANT_COEX_ALGO_HID                             = 0x3,
43         BT_8192E_2ANT_COEX_ALGO_A2DP                    = 0x4,
44         BT_8192E_2ANT_COEX_ALGO_A2DP_PANHS              = 0x5,
45         BT_8192E_2ANT_COEX_ALGO_PANEDR                  = 0x6,
46         BT_8192E_2ANT_COEX_ALGO_PANHS                   = 0x7,
47         BT_8192E_2ANT_COEX_ALGO_PANEDR_A2DP             = 0x8,
48         BT_8192E_2ANT_COEX_ALGO_PANEDR_HID              = 0x9,
49         BT_8192E_2ANT_COEX_ALGO_HID_A2DP_PANEDR = 0xa,
50         BT_8192E_2ANT_COEX_ALGO_HID_A2DP                = 0xb,
51         BT_8192E_2ANT_COEX_ALGO_MAX                             = 0xc
52 };
53
54 struct coex_dm_8192e_2ant {
55         /* fw mechanism */
56         u8              pre_bt_dec_pwr_lvl;
57         u8              cur_bt_dec_pwr_lvl;
58         u8              pre_fw_dac_swing_lvl;
59         u8              cur_fw_dac_swing_lvl;
60         boolean         cur_ignore_wlan_act;
61         boolean         pre_ignore_wlan_act;
62         u8              pre_ps_tdma;
63         u8              cur_ps_tdma;
64         u8              ps_tdma_para[5];
65         u8              ps_tdma_du_adj_type;
66         boolean         reset_tdma_adjust;
67         boolean         auto_tdma_adjust;
68         boolean         pre_ps_tdma_on;
69         boolean         cur_ps_tdma_on;
70         boolean         pre_bt_auto_report;
71         boolean         cur_bt_auto_report;
72
73         /* sw mechanism */
74         boolean         pre_rf_rx_lpf_shrink;
75         boolean         cur_rf_rx_lpf_shrink;
76         u32             bt_rf_0x1e_backup;
77         boolean pre_low_penalty_ra;
78         boolean         cur_low_penalty_ra;
79         boolean         pre_dac_swing_on;
80         u32             pre_dac_swing_lvl;
81         boolean         cur_dac_swing_on;
82         u32             cur_dac_swing_lvl;
83         boolean         pre_adc_back_off;
84         boolean         cur_adc_back_off;
85         boolean pre_agc_table_en;
86         boolean         cur_agc_table_en;
87         u32             pre_val0x6c0;
88         u32             cur_val0x6c0;
89         u32             pre_val0x6c4;
90         u32             cur_val0x6c4;
91         u32             pre_val0x6c8;
92         u32             cur_val0x6c8;
93         u8              pre_val0x6cc;
94         u8              cur_val0x6cc;
95         boolean         limited_dig;
96
97         u32             backup_arfr_cnt1;       /* Auto Rate Fallback Retry cnt */
98         u32             backup_arfr_cnt2;       /* Auto Rate Fallback Retry cnt */
99         u16             backup_retry_limit;
100         u8              backup_ampdu_max_time;
101
102         /* algorithm related */
103         u8              pre_algorithm;
104         u8              cur_algorithm;
105         u8              bt_status;
106         u8              wifi_chnl_info[3];
107
108         u8              pre_ss_type;
109         u8              cur_ss_type;
110
111         u32             pre_ra_mask;
112         u32             cur_ra_mask;
113         u8              cur_ra_mask_type;
114         u8              pre_arfr_type;
115         u8              cur_arfr_type;
116         u8              pre_retry_limit_type;
117         u8              cur_retry_limit_type;
118         u8              pre_ampdu_time_type;
119         u8              cur_ampdu_time_type;
120 };
121
122 struct coex_sta_8192e_2ant {
123         boolean                                 bt_disabled;
124         boolean                                 bt_link_exist;
125         boolean                                 sco_exist;
126         boolean                                 a2dp_exist;
127         boolean                                 hid_exist;
128         boolean                                 pan_exist;
129
130         boolean                                 under_lps;
131         boolean                                 under_ips;
132         u32                                     high_priority_tx;
133         u32                                     high_priority_rx;
134         u32                                     low_priority_tx;
135         u32                                     low_priority_rx;
136         u8                                      bt_rssi;
137         u8                                      pre_bt_rssi_state;
138         u8                                      pre_wifi_rssi_state[4];
139         boolean                                 c2h_bt_info_req_sent;
140         u8                                      bt_info_c2h[BT_INFO_SRC_8192E_2ANT_MAX][10];
141         u32                                     bt_info_c2h_cnt[BT_INFO_SRC_8192E_2ANT_MAX];
142         boolean                                 c2h_bt_inquiry_page;
143         u8                                      bt_retry_cnt;
144         u8                                      bt_info_ext;
145 };
146
147 /* *******************************************
148  * The following is interface which will notify coex module.
149  * ******************************************* */
150 void ex_halbtc8192e2ant_power_on_setting(IN struct btc_coexist *btcoexist);
151 void ex_halbtc8192e2ant_init_hw_config(IN struct btc_coexist *btcoexist,
152                                        IN boolean wifi_only);
153 void ex_halbtc8192e2ant_init_coex_dm(IN struct btc_coexist *btcoexist);
154 void ex_halbtc8192e2ant_ips_notify(IN struct btc_coexist *btcoexist,
155                                    IN u8 type);
156 void ex_halbtc8192e2ant_lps_notify(IN struct btc_coexist *btcoexist,
157                                    IN u8 type);
158 void ex_halbtc8192e2ant_scan_notify(IN struct btc_coexist *btcoexist,
159                                     IN u8 type);
160 void ex_halbtc8192e2ant_connect_notify(IN struct btc_coexist *btcoexist,
161                                        IN u8 type);
162 void ex_halbtc8192e2ant_media_status_notify(IN struct btc_coexist *btcoexist,
163                 IN u8 type);
164 void ex_halbtc8192e2ant_specific_packet_notify(IN struct btc_coexist *btcoexist,
165                 IN u8 type);
166 void ex_halbtc8192e2ant_bt_info_notify(IN struct btc_coexist *btcoexist,
167                                        IN u8 *tmp_buf, IN u8 length);
168 void ex_halbtc8192e2ant_halt_notify(IN struct btc_coexist *btcoexist);
169 void ex_halbtc8192e2ant_periodical(IN struct btc_coexist *btcoexist);
170 void ex_halbtc8192e2ant_display_coex_info(IN struct btc_coexist *btcoexist);
171
172 #else   /*  #if (RTL8192E_SUPPORT == 1) */
173 #define ex_halbtc8192e2ant_power_on_setting(btcoexist)
174 #define ex_halbtc8192e2ant_init_hw_config(btcoexist, wifi_only)
175 #define ex_halbtc8192e2ant_init_coex_dm(btcoexist)
176 #define ex_halbtc8192e2ant_ips_notify(btcoexist, type)
177 #define ex_halbtc8192e2ant_lps_notify(btcoexist, type)
178 #define ex_halbtc8192e2ant_scan_notify(btcoexist, type)
179 #define ex_halbtc8192e2ant_connect_notify(btcoexist, type)
180 #define ex_halbtc8192e2ant_media_status_notify(btcoexist, type)
181 #define ex_halbtc8192e2ant_specific_packet_notify(btcoexist, type)
182 #define ex_halbtc8192e2ant_bt_info_notify(btcoexist, tmp_buf, length)
183 #define ex_halbtc8192e2ant_halt_notify(btcoexist)
184 #define ex_halbtc8192e2ant_periodical(btcoexist)
185 #define ex_halbtc8192e2ant_display_coex_info(btcoexist)
186
187 #endif
188
189 #endif
190