diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/fw-api-bt-coex.h')
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw-api-bt-coex.h | 149 |
1 files changed, 95 insertions, 54 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-bt-coex.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-bt-coex.h index 05c61d6f384e..4ea5e24ca92d 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw-api-bt-coex.h +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-bt-coex.h | |||
@@ -82,6 +82,8 @@ | |||
82 | * @BT_USE_DEFAULTS: | 82 | * @BT_USE_DEFAULTS: |
83 | * @BT_SYNC_2_BT_DISABLE: | 83 | * @BT_SYNC_2_BT_DISABLE: |
84 | * @BT_COEX_CORUNNING_TBL_EN: | 84 | * @BT_COEX_CORUNNING_TBL_EN: |
85 | * | ||
86 | * The COEX_MODE must be set for each command. Even if it is not changed. | ||
85 | */ | 87 | */ |
86 | enum iwl_bt_coex_flags { | 88 | enum iwl_bt_coex_flags { |
87 | BT_CH_PRIMARY_EN = BIT(0), | 89 | BT_CH_PRIMARY_EN = BIT(0), |
@@ -95,14 +97,16 @@ enum iwl_bt_coex_flags { | |||
95 | BT_COEX_NW = 0x3 << BT_COEX_MODE_POS, | 97 | BT_COEX_NW = 0x3 << BT_COEX_MODE_POS, |
96 | BT_USE_DEFAULTS = BIT(6), | 98 | BT_USE_DEFAULTS = BIT(6), |
97 | BT_SYNC_2_BT_DISABLE = BIT(7), | 99 | BT_SYNC_2_BT_DISABLE = BIT(7), |
98 | /* | 100 | BT_COEX_CORUNNING_TBL_EN = BIT(8), |
99 | * For future use - when the flags will be enlarged | 101 | BT_COEX_MPLUT_TBL_EN = BIT(9), |
100 | * BT_COEX_CORUNNING_TBL_EN = BIT(8), | 102 | /* Bit 10 is reserved */ |
101 | */ | 103 | BT_COEX_WF_PRIO_BOOST_CHECK_EN = BIT(11), |
102 | }; | 104 | }; |
103 | 105 | ||
104 | /* | 106 | /* |
105 | * indicates what has changed in the BT_COEX command. | 107 | * indicates what has changed in the BT_COEX command. |
108 | * BT_VALID_ENABLE must be set for each command. Commands without this bit will | ||
109 | * discarded by the firmware | ||
106 | */ | 110 | */ |
107 | enum iwl_bt_coex_valid_bit_msk { | 111 | enum iwl_bt_coex_valid_bit_msk { |
108 | BT_VALID_ENABLE = BIT(0), | 112 | BT_VALID_ENABLE = BIT(0), |
@@ -121,11 +125,8 @@ enum iwl_bt_coex_valid_bit_msk { | |||
121 | BT_VALID_CORUN_LUT_40 = BIT(13), | 125 | BT_VALID_CORUN_LUT_40 = BIT(13), |
122 | BT_VALID_ANT_ISOLATION = BIT(14), | 126 | BT_VALID_ANT_ISOLATION = BIT(14), |
123 | BT_VALID_ANT_ISOLATION_THRS = BIT(15), | 127 | BT_VALID_ANT_ISOLATION_THRS = BIT(15), |
124 | /* | 128 | BT_VALID_TXTX_DELTA_FREQ_THRS = BIT(16), |
125 | * For future use - when the valid flags will be enlarged | 129 | BT_VALID_TXRX_MAX_FREQ_0 = BIT(17), |
126 | * BT_VALID_TXTX_DELTA_FREQ_THRS = BIT(16), | ||
127 | * BT_VALID_TXRX_MAX_FREQ_0 = BIT(17), | ||
128 | */ | ||
129 | }; | 130 | }; |
130 | 131 | ||
131 | /** | 132 | /** |
@@ -142,48 +143,88 @@ enum iwl_bt_reduced_tx_power { | |||
142 | BT_REDUCED_TX_POWER_DATA = BIT(1), | 143 | BT_REDUCED_TX_POWER_DATA = BIT(1), |
143 | }; | 144 | }; |
144 | 145 | ||
146 | enum iwl_bt_coex_lut_type { | ||
147 | BT_COEX_TIGHT_LUT = 0, | ||
148 | BT_COEX_LOOSE_LUT, | ||
149 | BT_COEX_TX_DIS_LUT, | ||
150 | |||
151 | BT_COEX_MAX_LUT, | ||
152 | }; | ||
153 | |||
145 | #define BT_COEX_LUT_SIZE (12) | 154 | #define BT_COEX_LUT_SIZE (12) |
155 | #define BT_COEX_CORUN_LUT_SIZE (32) | ||
156 | #define BT_COEX_MULTI_PRIO_LUT_SIZE (2) | ||
157 | #define BT_COEX_BOOST_SIZE (4) | ||
158 | #define BT_REDUCED_TX_POWER_BIT BIT(7) | ||
146 | 159 | ||
147 | /** | 160 | /** |
148 | * struct iwl_bt_coex_cmd - bt coex configuration command | 161 | * struct iwl_bt_coex_cmd - bt coex configuration command |
149 | * @flags:&enum iwl_bt_coex_flags | 162 | * @flags:&enum iwl_bt_coex_flags |
150 | * @lead_time: | ||
151 | * @max_kill: | 163 | * @max_kill: |
152 | * @bt3_time_t7_value: | ||
153 | * @kill_ack_msk: | ||
154 | * @kill_cts_msk: | ||
155 | * @bt3_prio_sample_time: | ||
156 | * @bt3_timer_t2_value: | ||
157 | * @bt4_reaction_time: | ||
158 | * @decision_lut[12]: | ||
159 | * @bt_reduced_tx_power: enum %iwl_bt_reduced_tx_power | 164 | * @bt_reduced_tx_power: enum %iwl_bt_reduced_tx_power |
160 | * @valid_bit_msk: enum %iwl_bt_coex_valid_bit_msk | 165 | * @bt4_antenna_isolation: |
161 | * @bt_prio_boost: values for PTA boost register | 166 | * @bt4_antenna_isolation_thr: |
167 | * @bt4_tx_tx_delta_freq_thr: | ||
168 | * @bt4_tx_rx_max_freq0: | ||
169 | * @bt_prio_boost: | ||
162 | * @wifi_tx_prio_boost: SW boost of wifi tx priority | 170 | * @wifi_tx_prio_boost: SW boost of wifi tx priority |
163 | * @wifi_rx_prio_boost: SW boost of wifi rx priority | 171 | * @wifi_rx_prio_boost: SW boost of wifi rx priority |
172 | * @kill_ack_msk: | ||
173 | * @kill_cts_msk: | ||
174 | * @decision_lut: | ||
175 | * @bt4_multiprio_lut: | ||
176 | * @bt4_corun_lut20: | ||
177 | * @bt4_corun_lut40: | ||
178 | * @valid_bit_msk: enum %iwl_bt_coex_valid_bit_msk | ||
164 | * | 179 | * |
165 | * The structure is used for the BT_COEX command. | 180 | * The structure is used for the BT_COEX command. |
166 | */ | 181 | */ |
167 | struct iwl_bt_coex_cmd { | 182 | struct iwl_bt_coex_cmd { |
168 | u8 flags; | 183 | __le32 flags; |
169 | u8 lead_time; | ||
170 | u8 max_kill; | 184 | u8 max_kill; |
171 | u8 bt3_time_t7_value; | 185 | u8 bt_reduced_tx_power; |
186 | u8 reserved[2]; | ||
187 | |||
188 | u8 bt4_antenna_isolation; | ||
189 | u8 bt4_antenna_isolation_thr; | ||
190 | u8 bt4_tx_tx_delta_freq_thr; | ||
191 | u8 bt4_tx_rx_max_freq0; | ||
192 | |||
193 | __le32 bt_prio_boost[BT_COEX_BOOST_SIZE]; | ||
194 | __le32 wifi_tx_prio_boost; | ||
195 | __le32 wifi_rx_prio_boost; | ||
172 | __le32 kill_ack_msk; | 196 | __le32 kill_ack_msk; |
173 | __le32 kill_cts_msk; | 197 | __le32 kill_cts_msk; |
174 | u8 bt3_prio_sample_time; | 198 | |
175 | u8 bt3_timer_t2_value; | 199 | __le32 decision_lut[BT_COEX_MAX_LUT][BT_COEX_LUT_SIZE]; |
176 | __le16 bt4_reaction_time; | 200 | __le32 bt4_multiprio_lut[BT_COEX_MULTI_PRIO_LUT_SIZE]; |
177 | __le32 decision_lut[BT_COEX_LUT_SIZE]; | 201 | __le32 bt4_corun_lut20[BT_COEX_CORUN_LUT_SIZE]; |
178 | u8 bt_reduced_tx_power; | 202 | __le32 bt4_corun_lut40[BT_COEX_CORUN_LUT_SIZE]; |
179 | u8 reserved; | 203 | |
180 | __le16 valid_bit_msk; | 204 | __le32 valid_bit_msk; |
181 | __le32 bt_prio_boost; | ||
182 | u8 reserved2; | ||
183 | u8 wifi_tx_prio_boost; | ||
184 | __le16 wifi_rx_prio_boost; | ||
185 | } __packed; /* BT_COEX_CMD_API_S_VER_3 */ | 205 | } __packed; /* BT_COEX_CMD_API_S_VER_3 */ |
186 | 206 | ||
207 | /** | ||
208 | * struct iwl_bt_coex_ci_cmd - bt coex channel inhibition command | ||
209 | * @bt_primary_ci: | ||
210 | * @bt_secondary_ci: | ||
211 | * @co_run_bw_primary: | ||
212 | * @co_run_bw_secondary: | ||
213 | * @primary_ch_phy_id: | ||
214 | * @secondary_ch_phy_id: | ||
215 | * | ||
216 | * Used for BT_COEX_CI command | ||
217 | */ | ||
218 | struct iwl_bt_coex_ci_cmd { | ||
219 | __le64 bt_primary_ci; | ||
220 | __le64 bt_secondary_ci; | ||
221 | |||
222 | u8 co_run_bw_primary; | ||
223 | u8 co_run_bw_secondary; | ||
224 | u8 primary_ch_phy_id; | ||
225 | u8 secondary_ch_phy_id; | ||
226 | } __packed; /* BT_CI_MSG_API_S_VER_1 */ | ||
227 | |||
187 | #define BT_MBOX(n_dw, _msg, _pos, _nbits) \ | 228 | #define BT_MBOX(n_dw, _msg, _pos, _nbits) \ |
188 | BT_MBOX##n_dw##_##_msg##_POS = (_pos), \ | 229 | BT_MBOX##n_dw##_##_msg##_POS = (_pos), \ |
189 | BT_MBOX##n_dw##_##_msg = BITS(_nbits) << BT_MBOX##n_dw##_##_msg##_POS | 230 | BT_MBOX##n_dw##_##_msg = BITS(_nbits) << BT_MBOX##n_dw##_##_msg##_POS |
@@ -244,23 +285,39 @@ enum iwl_bt_mxbox_dw3 { | |||
244 | ((le32_to_cpu((_notif)->mbox_msg[(_num)]) & BT_MBOX##_num##_##_field)\ | 285 | ((le32_to_cpu((_notif)->mbox_msg[(_num)]) & BT_MBOX##_num##_##_field)\ |
245 | >> BT_MBOX##_num##_##_field##_POS) | 286 | >> BT_MBOX##_num##_##_field##_POS) |
246 | 287 | ||
288 | enum iwl_bt_activity_grading { | ||
289 | BT_OFF = 0, | ||
290 | BT_ON_NO_CONNECTION = 1, | ||
291 | BT_LOW_TRAFFIC = 2, | ||
292 | BT_HIGH_TRAFFIC = 3, | ||
293 | }; | ||
294 | |||
247 | /** | 295 | /** |
248 | * struct iwl_bt_coex_profile_notif - notification about BT coex | 296 | * struct iwl_bt_coex_profile_notif - notification about BT coex |
249 | * @mbox_msg: message from BT to WiFi | 297 | * @mbox_msg: message from BT to WiFi |
250 | * @:bt_status: 0 - off, 1 - on | 298 | * @msg_idx: the index of the message |
251 | * @:bt_open_conn: number of BT connections open | 299 | * @bt_status: 0 - off, 1 - on |
252 | * @:bt_traffic_load: load of BT traffic | 300 | * @bt_open_conn: number of BT connections open |
253 | * @:bt_agg_traffic_load: aggregated load of BT traffic | 301 | * @bt_traffic_load: load of BT traffic |
254 | * @:bt_ci_compliance: 0 - no CI compliance, 1 - CI compliant | 302 | * @bt_agg_traffic_load: aggregated load of BT traffic |
303 | * @bt_ci_compliance: 0 - no CI compliance, 1 - CI compliant | ||
304 | * @primary_ch_lut: LUT used for primary channel | ||
305 | * @secondary_ch_lut: LUT used for secondary channel | ||
306 | * @bt_activity_grading: the activity of BT enum %iwl_bt_activity_grading | ||
255 | */ | 307 | */ |
256 | struct iwl_bt_coex_profile_notif { | 308 | struct iwl_bt_coex_profile_notif { |
257 | __le32 mbox_msg[4]; | 309 | __le32 mbox_msg[4]; |
310 | __le32 msg_idx; | ||
258 | u8 bt_status; | 311 | u8 bt_status; |
259 | u8 bt_open_conn; | 312 | u8 bt_open_conn; |
260 | u8 bt_traffic_load; | 313 | u8 bt_traffic_load; |
261 | u8 bt_agg_traffic_load; | 314 | u8 bt_agg_traffic_load; |
262 | u8 bt_ci_compliance; | 315 | u8 bt_ci_compliance; |
263 | u8 reserved[3]; | 316 | u8 reserved[3]; |
317 | |||
318 | __le32 primary_ch_lut; | ||
319 | __le32 secondary_ch_lut; | ||
320 | __le32 bt_activity_grading; | ||
264 | } __packed; /* BT_COEX_PROFILE_NTFY_API_S_VER_2 */ | 321 | } __packed; /* BT_COEX_PROFILE_NTFY_API_S_VER_2 */ |
265 | 322 | ||
266 | enum iwl_bt_coex_prio_table_event { | 323 | enum iwl_bt_coex_prio_table_event { |
@@ -300,20 +357,4 @@ struct iwl_bt_coex_prio_tbl_cmd { | |||
300 | u8 prio_tbl[BT_COEX_PRIO_TBL_EVT_MAX]; | 357 | u8 prio_tbl[BT_COEX_PRIO_TBL_EVT_MAX]; |
301 | } __packed; | 358 | } __packed; |
302 | 359 | ||
303 | enum iwl_bt_coex_env_action { | ||
304 | BT_COEX_ENV_CLOSE = 0, | ||
305 | BT_COEX_ENV_OPEN = 1, | ||
306 | }; /* BT_COEX_PROT_ENV_ACTION_API_E_VER_1 */ | ||
307 | |||
308 | /** | ||
309 | * struct iwl_bt_coex_prot_env_cmd - BT Protection Envelope | ||
310 | * @action: enum %iwl_bt_coex_env_action | ||
311 | * @type: enum %iwl_bt_coex_prio_table_event | ||
312 | */ | ||
313 | struct iwl_bt_coex_prot_env_cmd { | ||
314 | u8 action; /* 0 = closed, 1 = open */ | ||
315 | u8 type; /* 0 .. 15 */ | ||
316 | u8 reserved[2]; | ||
317 | } __packed; | ||
318 | |||
319 | #endif /* __fw_api_bt_coex_h__ */ | 360 | #endif /* __fw_api_bt_coex_h__ */ |