Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0288d237 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville
Browse files

iwlwifi: add 6000g2b BT coexist API



The new 6000g2b hardware requires a different
bluetooth coexist implementation on the host,
this adds the command/notification definitions
for it.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 767d055d
Loading
Loading
Loading
Loading
+75 −1
Original line number Diff line number Diff line
@@ -173,6 +173,12 @@ enum {
	REPLY_RX_MPDU_CMD = 0xc1,
	REPLY_RX = 0xc3,
	REPLY_COMPRESSED_BA = 0xc5,

	/* BT Coex */
	REPLY_BT_COEX_PRIO_TABLE = 0xcc,
	REPLY_BT_COEX_PROT_ENV = 0xcd,
	REPLY_BT_COEX_PROFILE_NOTIF = 0xce,

	REPLY_MAX = 0xff
};

@@ -2896,6 +2902,12 @@ struct iwl_scanstart_notification {
#define  SCAN_OWNER_STATUS 0x1;
#define  MEASURE_OWNER_STATUS 0x2;

#define IWL_PROBE_STATUS_OK		0
#define IWL_PROBE_STATUS_TX_FAILED	BIT(0)
/* error statuses combined with TX_FAILED */
#define IWL_PROBE_STATUS_FAIL_TTL	BIT(1)
#define IWL_PROBE_STATUS_FAIL_BT	BIT(2)

#define NUMBER_OF_STATISTICS 1	/* first __le32 is good CRC */
/*
 * SCAN_RESULTS_NOTIFICATION = 0x83 (notification only, not a command)
@@ -2903,7 +2915,8 @@ struct iwl_scanstart_notification {
struct iwl_scanresults_notification {
	u8 channel;
	u8 band;
	u8 reserved[2];
	u8 probe_status;
	u8 num_probe_not_sent; /* not enough time to send */
	__le32 tsf_low;
	__le32 tsf_high;
	__le32 statistics[NUMBER_OF_STATISTICS];
@@ -3968,6 +3981,66 @@ struct iwl_coex_event_resp {
} __packed;


/******************************************************************************
 * Bluetooth Coexistence commands
 *
 *****************************************************************************/

/*
 * BT Status notification
 * REPLY_BT_COEX_PROFILE_NOTIF = 0xcb
 */
enum iwl_bt_coex_profile_traffic_load {
	IWL_BT_COEX_TRAFFIC_LOAD_NONE = 	0,
	IWL_BT_COEX_TRAFFIC_LOAD_LOW =		1,
	IWL_BT_COEX_TRAFFIC_LOAD_HIGH = 	2,
	IWL_BT_COEX_TRAFFIC_LOAD_CONTINUOUS =	3,
/*
 * There are no more even though below is a u8, the
 * indication from the BT device only has two bits.
 */
};

struct iwl_bt_coex_profile_notif {
	u8 uart_msg[8];
	u8 bt_status; /* 0 - off, 1 - on */
	u8 bt_traffic_load; /* 0 .. 3? */
	u8 bt_ci_compliance; /* 0 - not complied, 1 - complied */
	u8 reserved;
} __attribute__((packed));

#define IWL_BT_COEX_PRIO_SHARED_ANTENNA		0x1
#define IWL_BT_COEX_PRIO_PRIO_MASK		0xe
#define IWL_BT_COEX_PRIO_PRIO_SHIFT		1

/*
 * BT Coexistence Priority table
 * REPLY_BT_COEX_PRIO_TABLE = 0xcc
 */
struct iwl_bt_coex_prio_table_cmd {
	u8 init_calib_protection_cfg1,
	   init_calib_protection_cfg2,
	   init_calib_protection_lowprio_cfg1,
	   init_calib_protection_lowprio_cfg2,
	   init_calib_protection_highprio_cfg1,
	   init_calib_protection_highprio_cfg2,
	   dtim_protection_prio_cfg,
	   scan_52_protection_cfg,
	   scan_24_protection_cfg,
	   bc_mc_protection_cfg;
	u8 reserved[6];
} __attribute__((packed));

/*
 * BT Protection Envelope
 * REPLY_BT_COEX_PROT_ENV = 0xcd
 */
struct iwl_bt_coex_prot_env_cmd {
	u8 open; /* 0 = closed, 1 = open */
	u8 type; /* 0 .. 15 */
	u8 reserved[2];
} __attribute__((packed));

/******************************************************************************
 * (13)
 * Union of all expected notifications/responses:
@@ -4007,6 +4080,7 @@ struct iwl_rx_packet {
		struct iwl_missed_beacon_notif missed_beacon;
		struct iwl_coex_medium_notification coex_medium_notif;
		struct iwl_coex_event_resp coex_event;
		struct iwl_bt_coex_profile_notif bt_coex_profile_notif;
		__le32 status;
		u8 raw[0];
	} u;
+3 −0
Original line number Diff line number Diff line
@@ -97,6 +97,9 @@ const char *get_cmd_string(u8 cmd)
		IWL_CMD(REPLY_TX_POWER_DBM_CMD);
		IWL_CMD(TEMPERATURE_NOTIFICATION);
		IWL_CMD(TX_ANT_CONFIGURATION_CMD);
		IWL_CMD(REPLY_BT_COEX_PROFILE_NOTIF);
		IWL_CMD(REPLY_BT_COEX_PRIO_TABLE);
		IWL_CMD(REPLY_BT_COEX_PROT_ENV);
	default:
		return "UNKNOWN";