xref: /freebsd/sys/contrib/dev/iwlwifi/fw/api/coex.h (revision a4128aad8503277614f2d214011ef60a19447b83)
1bfcc09ddSBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2bfcc09ddSBjoern A. Zeeb /*
3*a4128aadSBjoern A. Zeeb  * Copyright (C) 2023-2024 Intel Corporation
4bfcc09ddSBjoern A. Zeeb  * Copyright (C) 2013-2014, 2018-2019 Intel Corporation
5bfcc09ddSBjoern A. Zeeb  * Copyright (C) 2013-2014 Intel Mobile Communications GmbH
6bfcc09ddSBjoern A. Zeeb  * Copyright (C) 2017 Intel Deutschland GmbH
7bfcc09ddSBjoern A. Zeeb  */
8bfcc09ddSBjoern A. Zeeb #ifndef __iwl_fw_api_coex_h__
9bfcc09ddSBjoern A. Zeeb #define __iwl_fw_api_coex_h__
10bfcc09ddSBjoern A. Zeeb 
11bfcc09ddSBjoern A. Zeeb #include <linux/types.h>
12bfcc09ddSBjoern A. Zeeb #include <linux/bitops.h>
13bfcc09ddSBjoern A. Zeeb 
14bfcc09ddSBjoern A. Zeeb #define BITS(nb) (BIT(nb) - 1)
15bfcc09ddSBjoern A. Zeeb 
16bfcc09ddSBjoern A. Zeeb enum iwl_bt_coex_lut_type {
17bfcc09ddSBjoern A. Zeeb 	BT_COEX_TIGHT_LUT = 0,
18bfcc09ddSBjoern A. Zeeb 	BT_COEX_LOOSE_LUT,
19bfcc09ddSBjoern A. Zeeb 	BT_COEX_TX_DIS_LUT,
20bfcc09ddSBjoern A. Zeeb 
21bfcc09ddSBjoern A. Zeeb 	BT_COEX_MAX_LUT,
22bfcc09ddSBjoern A. Zeeb 	BT_COEX_INVALID_LUT = 0xff,
23bfcc09ddSBjoern A. Zeeb }; /* BT_COEX_DECISION_LUT_INDEX_API_E_VER_1 */
24bfcc09ddSBjoern A. Zeeb 
25bfcc09ddSBjoern A. Zeeb #define BT_REDUCED_TX_POWER_BIT BIT(7)
26bfcc09ddSBjoern A. Zeeb 
27bfcc09ddSBjoern A. Zeeb enum iwl_bt_coex_mode {
28bfcc09ddSBjoern A. Zeeb 	BT_COEX_DISABLE			= 0x0,
29bfcc09ddSBjoern A. Zeeb 	BT_COEX_NW			= 0x1,
30bfcc09ddSBjoern A. Zeeb 	BT_COEX_BT			= 0x2,
31bfcc09ddSBjoern A. Zeeb 	BT_COEX_WIFI			= 0x3,
32bfcc09ddSBjoern A. Zeeb }; /* BT_COEX_MODES_E */
33bfcc09ddSBjoern A. Zeeb 
34bfcc09ddSBjoern A. Zeeb enum iwl_bt_coex_enabled_modules {
35bfcc09ddSBjoern A. Zeeb 	BT_COEX_MPLUT_ENABLED		= BIT(0),
36bfcc09ddSBjoern A. Zeeb 	BT_COEX_MPLUT_BOOST_ENABLED	= BIT(1),
37bfcc09ddSBjoern A. Zeeb 	BT_COEX_SYNC2SCO_ENABLED	= BIT(2),
38bfcc09ddSBjoern A. Zeeb 	BT_COEX_CORUN_ENABLED		= BIT(3),
39bfcc09ddSBjoern A. Zeeb 	BT_COEX_HIGH_BAND_RET		= BIT(4),
40bfcc09ddSBjoern A. Zeeb }; /* BT_COEX_MODULES_ENABLE_E_VER_1 */
41bfcc09ddSBjoern A. Zeeb 
42bfcc09ddSBjoern A. Zeeb /**
43bfcc09ddSBjoern A. Zeeb  * struct iwl_bt_coex_cmd - bt coex configuration command
44bfcc09ddSBjoern A. Zeeb  * @mode: &enum iwl_bt_coex_mode
45bfcc09ddSBjoern A. Zeeb  * @enabled_modules: &enum iwl_bt_coex_enabled_modules
46bfcc09ddSBjoern A. Zeeb  *
47bfcc09ddSBjoern A. Zeeb  * The structure is used for the BT_COEX command.
48bfcc09ddSBjoern A. Zeeb  */
49bfcc09ddSBjoern A. Zeeb struct iwl_bt_coex_cmd {
50bfcc09ddSBjoern A. Zeeb 	__le32 mode;
51bfcc09ddSBjoern A. Zeeb 	__le32 enabled_modules;
52bfcc09ddSBjoern A. Zeeb } __packed; /* BT_COEX_CMD_API_S_VER_6 */
53bfcc09ddSBjoern A. Zeeb 
54bfcc09ddSBjoern A. Zeeb /**
55bfcc09ddSBjoern A. Zeeb  * struct iwl_bt_coex_reduced_txp_update_cmd
56bfcc09ddSBjoern A. Zeeb  * @reduced_txp: bit BT_REDUCED_TX_POWER_BIT to enable / disable, rest of the
57bfcc09ddSBjoern A. Zeeb  *	bits are the sta_id (value)
58bfcc09ddSBjoern A. Zeeb  */
59bfcc09ddSBjoern A. Zeeb struct iwl_bt_coex_reduced_txp_update_cmd {
60bfcc09ddSBjoern A. Zeeb 	__le32 reduced_txp;
61bfcc09ddSBjoern A. Zeeb } __packed; /* BT_COEX_UPDATE_REDUCED_TX_POWER_API_S_VER_1 */
62bfcc09ddSBjoern A. Zeeb 
63bfcc09ddSBjoern A. Zeeb /**
64bfcc09ddSBjoern A. Zeeb  * struct iwl_bt_coex_ci_cmd - bt coex channel inhibition command
65bfcc09ddSBjoern A. Zeeb  * @bt_primary_ci: primary channel inhibition bitmap
66bfcc09ddSBjoern A. Zeeb  * @primary_ch_phy_id: primary channel PHY ID
67bfcc09ddSBjoern A. Zeeb  * @bt_secondary_ci: secondary channel inhibition bitmap
68bfcc09ddSBjoern A. Zeeb  * @secondary_ch_phy_id: secondary channel PHY ID
69bfcc09ddSBjoern A. Zeeb  *
70bfcc09ddSBjoern A. Zeeb  * Used for BT_COEX_CI command
71bfcc09ddSBjoern A. Zeeb  */
72bfcc09ddSBjoern A. Zeeb struct iwl_bt_coex_ci_cmd {
73bfcc09ddSBjoern A. Zeeb 	__le64 bt_primary_ci;
74bfcc09ddSBjoern A. Zeeb 	__le32 primary_ch_phy_id;
75bfcc09ddSBjoern A. Zeeb 
76bfcc09ddSBjoern A. Zeeb 	__le64 bt_secondary_ci;
77bfcc09ddSBjoern A. Zeeb 	__le32 secondary_ch_phy_id;
78bfcc09ddSBjoern A. Zeeb } __packed; /* BT_CI_MSG_API_S_VER_2 */
79bfcc09ddSBjoern A. Zeeb 
80bfcc09ddSBjoern A. Zeeb enum iwl_bt_activity_grading {
81bfcc09ddSBjoern A. Zeeb 	BT_OFF			= 0,
82bfcc09ddSBjoern A. Zeeb 	BT_ON_NO_CONNECTION	= 1,
83bfcc09ddSBjoern A. Zeeb 	BT_LOW_TRAFFIC		= 2,
84bfcc09ddSBjoern A. Zeeb 	BT_HIGH_TRAFFIC		= 3,
85bfcc09ddSBjoern A. Zeeb 	BT_VERY_HIGH_TRAFFIC	= 4,
86bfcc09ddSBjoern A. Zeeb 
87bfcc09ddSBjoern A. Zeeb 	BT_MAX_AG,
88bfcc09ddSBjoern A. Zeeb }; /* BT_COEX_BT_ACTIVITY_GRADING_API_E_VER_1 */
89bfcc09ddSBjoern A. Zeeb 
90bfcc09ddSBjoern A. Zeeb enum iwl_bt_ci_compliance {
91bfcc09ddSBjoern A. Zeeb 	BT_CI_COMPLIANCE_NONE		= 0,
92bfcc09ddSBjoern A. Zeeb 	BT_CI_COMPLIANCE_PRIMARY	= 1,
93bfcc09ddSBjoern A. Zeeb 	BT_CI_COMPLIANCE_SECONDARY	= 2,
94bfcc09ddSBjoern A. Zeeb 	BT_CI_COMPLIANCE_BOTH		= 3,
95bfcc09ddSBjoern A. Zeeb }; /* BT_COEX_CI_COMPLIENCE_E_VER_1 */
96bfcc09ddSBjoern A. Zeeb 
97bfcc09ddSBjoern A. Zeeb /**
98bfcc09ddSBjoern A. Zeeb  * struct iwl_bt_coex_profile_notif - notification about BT coex
99bfcc09ddSBjoern A. Zeeb  * @mbox_msg: message from BT to WiFi
100bfcc09ddSBjoern A. Zeeb  * @msg_idx: the index of the message
101bfcc09ddSBjoern A. Zeeb  * @bt_ci_compliance: enum %iwl_bt_ci_compliance
102bfcc09ddSBjoern A. Zeeb  * @primary_ch_lut: LUT used for primary channel &enum iwl_bt_coex_lut_type
103bfcc09ddSBjoern A. Zeeb  * @secondary_ch_lut: LUT used for secondary channel &enum iwl_bt_coex_lut_type
104bfcc09ddSBjoern A. Zeeb  * @bt_activity_grading: the activity of BT &enum iwl_bt_activity_grading
105bfcc09ddSBjoern A. Zeeb  * @ttc_status: is TTC enabled - one bit per PHY
106bfcc09ddSBjoern A. Zeeb  * @rrc_status: is RRC enabled - one bit per PHY
107*a4128aadSBjoern A. Zeeb  * The following fields are only for version 5, and are reserved in version 4:
108*a4128aadSBjoern A. Zeeb  * @wifi_loss_low_rssi: The predicted lost WiFi rate (% of air time that BT is
109*a4128aadSBjoern A. Zeeb  *	utilizing) when the RSSI is low (<= -65 dBm)
110*a4128aadSBjoern A. Zeeb  * @wifi_loss_mid_high_rssi: The predicted lost WiFi rate (% of air time that
111*a4128aadSBjoern A. Zeeb  *	BT is utilizing) when the RSSI is mid/high (>= -65 dBm)
112bfcc09ddSBjoern A. Zeeb  */
113bfcc09ddSBjoern A. Zeeb struct iwl_bt_coex_profile_notif {
114bfcc09ddSBjoern A. Zeeb 	__le32 mbox_msg[4];
115bfcc09ddSBjoern A. Zeeb 	__le32 msg_idx;
116bfcc09ddSBjoern A. Zeeb 	__le32 bt_ci_compliance;
117bfcc09ddSBjoern A. Zeeb 
118bfcc09ddSBjoern A. Zeeb 	__le32 primary_ch_lut;
119bfcc09ddSBjoern A. Zeeb 	__le32 secondary_ch_lut;
120bfcc09ddSBjoern A. Zeeb 	__le32 bt_activity_grading;
121bfcc09ddSBjoern A. Zeeb 	u8 ttc_status;
122bfcc09ddSBjoern A. Zeeb 	u8 rrc_status;
123*a4128aadSBjoern A. Zeeb 	u8 wifi_loss_low_rssi;
124*a4128aadSBjoern A. Zeeb 	u8 wifi_loss_mid_high_rssi;
125*a4128aadSBjoern A. Zeeb } __packed; /* BT_COEX_PROFILE_NTFY_API_S_VER_4
126*a4128aadSBjoern A. Zeeb 	     * BT_COEX_PROFILE_NTFY_API_S_VER_5
127*a4128aadSBjoern A. Zeeb 	     */
128bfcc09ddSBjoern A. Zeeb 
129bfcc09ddSBjoern A. Zeeb #endif /* __iwl_fw_api_coex_h__ */
130