linux/drivers/net/wireless/realtek/rtw89/coex.c

// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/* Copyright(c) 2019-2020  Realtek Corporation
 */

#include "coex.h"
#include "debug.h"
#include "fw.h"
#include "mac.h"
#include "phy.h"
#include "ps.h"
#include "reg.h"

#define RTW89_COEX_VERSION
#define FCXDEF_STEP
#define BTC_E2G_LIMIT_DEF

enum btc_fbtc_tdma_template {};

enum btc_fbtc_tdma_type {};

enum btc_fbtc_tdma_rx_flow_ctrl {};

enum btc_fbtc_tdma_wlan_tx_pause {};

enum btc_mlme_state {};

struct btc_fbtc_1slot {} __packed;

static const struct rtw89_btc_fbtc_tdma t_def[] =;

#define __DEF_FBTC_SLOT(__dur, __cxtbl, __cxtype)

static const struct rtw89_btc_fbtc_slot s_def[] =;

static const u32 cxtbl[] =;

static const struct rtw89_btc_ver rtw89_btc_ver_defs[] =;

#define RTW89_DEFAULT_BTC_VER_IDX

static const union rtw89_btc_wl_state_map btc_scanning_map =;

static u32 chip_id_to_bt_rom_code_id(u32 id)
{}

struct rtw89_btc_btf_tlv {} __packed;

struct rtw89_btc_btf_tlv_v7 {} __packed;

enum btc_btf_set_report_en {};

struct rtw89_btc_btf_set_report_v1 {} __packed;

struct rtw89_btc_btf_set_report_v8 {} __packed;

rtw89_fbtc_rtp_ctrl;

#define BTF_SET_SLOT_TABLE_VER
struct rtw89_btc_btf_set_slot_table {} __packed;

struct rtw89_btc_btf_set_slot_table_v7 {} __packed;

struct rtw89_btc_btf_set_mon_reg_v1 {} __packed;

struct rtw89_btc_btf_set_mon_reg_v7 {} __packed;

rtw89_fbtc_set_mon_reg __packed;

struct _wl_rinfo_now {};

enum btc_btf_set_cx_policy {};

enum btc_b2w_scoreboard {};

enum btc_phymap {};

enum btc_cx_state_map {};

enum btc_ant_phase {};

enum btc_plt {};

enum btc_cx_poicy_main_type {};

enum btc_cx_poicy_type {};

enum btc_wl_rfk_result {};

enum btc_coex_info_map_en {};

#define BTC_CXP_MASK

enum btc_w2b_scoreboard {};

enum btc_wl_link_mode {};

enum btc_wl_mrole_type {};

enum btc_bt_hid_type {};

enum btc_reset_module {};

enum btc_gnt_state {};

enum btc_ctr_path {};

enum btc_wlact_state {};

enum btc_wl_max_tx_time {};

enum btc_wl_max_tx_retry {};

enum btc_reason_and_action {};

#define BTC_FREERUN_ANTISO_MIN
#define BTC_TDMA_BTHID_MAX
#define BTC_BLINK_NOCONNECT
#define BTC_B1_MAX

static void _run_coex(struct rtw89_dev *rtwdev,
		      enum btc_reason_and_action reason);
static void _write_scbd(struct rtw89_dev *rtwdev, u32 val, bool state);
static void _update_bt_scbd(struct rtw89_dev *rtwdev, bool only_update);

static int _send_fw_cmd(struct rtw89_dev *rtwdev, u8 h2c_class, u8 h2c_func,
			void *param, u16 len)
{}

static void _reset_btc_var(struct rtw89_dev *rtwdev, u8 type)
{}

static u8 _search_reg_index(struct rtw89_dev *rtwdev, u8 mreg_num, u16 reg_type, u32 target)
{}

static void _get_reg_status(struct rtw89_dev *rtwdev, u8 type, u8 *val)
{}

#define BTC_RPT_HDR_SIZE
#define BTC_CHK_WLSLOT_DRIFT_MAX
#define BTC_CHK_BTSLOT_DRIFT_MAX
#define BTC_CHK_HANG_MAX

static void _chk_btc_err(struct rtw89_dev *rtwdev, u8 type, u32 cnt)
{}

static void _update_bt_report(struct rtw89_dev *rtwdev, u8 rpt_type, u8 *pfinfo)
{}

static void rtw89_btc_fw_rpt_evnt_ver(struct rtw89_dev *rtwdev, u8 *index)
{}

#define BTC_LEAK_AP_TH
#define BTC_CYSTA_CHK_PERIOD

struct rtw89_btc_prpt {} __packed;

static u32 _chk_btc_report(struct rtw89_dev *rtwdev,
			   struct rtw89_btc_btf_fwinfo *pfwinfo,
			   u8 *prptbuf, u32 index)
{}

static void _parse_btc_report(struct rtw89_dev *rtwdev,
			      struct rtw89_btc_btf_fwinfo *pfwinfo,
			      u8 *pbuf, u32 buf_len)
{}

#define BTC_TLV_HDR_LEN
#define BTC_TLV_HDR_LEN_V7

static void _append_tdma(struct rtw89_dev *rtwdev)
{}

static void _append_slot_v1(struct rtw89_dev *rtwdev)
{}

static void _append_slot_v7(struct rtw89_dev *rtwdev)
{}

static void _append_slot(struct rtw89_dev *rtwdev)
{}

static u32 rtw89_btc_fw_rpt_ver(struct rtw89_dev *rtwdev, u32 rpt_map)
{}

static void rtw89_btc_fw_set_slots(struct rtw89_dev *rtwdev)
{}

static void rtw89_btc_fw_en_rpt(struct rtw89_dev *rtwdev,
				u32 rpt_map, bool rpt_state)
{}

static void btc_fw_set_monreg(struct rtw89_dev *rtwdev)
{}

static void _update_dm_step(struct rtw89_dev *rtwdev,
			    enum btc_reason_and_action reason_or_action)
{}

static void _fw_set_policy(struct rtw89_dev *rtwdev, u16 policy_type,
			   enum btc_reason_and_action action)
{}

static void _fw_set_drv_info(struct rtw89_dev *rtwdev, u8 type)
{}

static
void btc_fw_event(struct rtw89_dev *rtwdev, u8 evt_id, void *data, u32 len)
{}

static void _set_gnt(struct rtw89_dev *rtwdev, u8 phy_map, u8 wl_state, u8 bt_state)
{}

static void _set_gnt_v1(struct rtw89_dev *rtwdev, u8 phy_map,
			u8 wl_state, u8 bt_state, u8 wlact_state)
{}

#define BTC_TDMA_WLROLE_MAX

static void _set_bt_ignore_wlan_act(struct rtw89_dev *rtwdev, u8 enable)
{}

#define WL_TX_POWER_NO_BTC_CTRL
#define WL_TX_POWER_ALL_TIME
#define WL_TX_POWER_WITH_BT
#define WL_TX_POWER_INT_PART
#define WL_TX_POWER_FRA_PART
#define B_BTC_WL_TX_POWER_SIGN
#define B_TSSI_WL_TX_POWER_SIGN

static void _set_wl_tx_power(struct rtw89_dev *rtwdev, u32 level)
{}

static void _set_wl_rx_gain(struct rtw89_dev *rtwdev, u32 level)
{}

static void _set_bt_tx_power(struct rtw89_dev *rtwdev, u8 level)
{}

#define BTC_BT_RX_NORMAL_LVL

static void _set_bt_rx_gain(struct rtw89_dev *rtwdev, u8 level)
{}

static void _set_rf_trx_para(struct rtw89_dev *rtwdev)
{}

static void _update_btc_state_map(struct rtw89_dev *rtwdev)
{}

static void _set_bt_afh_info(struct rtw89_dev *rtwdev)
{}

static bool _check_freerun(struct rtw89_dev *rtwdev)
{}

#define _tdma_set_flctrl(btc, flc)
#define _tdma_set_flctrl_role(btc, role)
#define _tdma_set_tog(btc, wtg)
#define _tdma_set_lek(btc, lek)

struct btc_btinfo_lb2 {};

struct btc_btinfo_lb3 {};

struct btc_btinfo_hb0 {};

struct btc_btinfo_hb1 {};

struct btc_btinfo_hb2 {};

struct btc_btinfo_hb3 {};

btc_btinfo;

static void _set_policy(struct rtw89_dev *rtwdev, u16 policy_type,
			enum btc_reason_and_action action)
{}

#define BTC_B1_MAX
void rtw89_btc_set_policy(struct rtw89_dev *rtwdev, u16 policy_type)
{}
EXPORT_SYMBOL();

void rtw89_btc_set_policy_v1(struct rtw89_dev *rtwdev, u16 policy_type)
{}
EXPORT_SYMBOL();

static void _set_bt_plut(struct rtw89_dev *rtwdev, u8 phy_map,
			 u8 tx_val, u8 rx_val)
{}

static void _set_ant_v0(struct rtw89_dev *rtwdev, bool force_exec,
			u8 phy_map, u8 type)
{}

static void _set_ant_v1(struct rtw89_dev *rtwdev, bool force_exec,
			u8 phy_map, u8 type)
{}

static void _set_ant(struct rtw89_dev *rtwdev, bool force_exec,
		     u8 phy_map, u8 type)
{}

static void _action_wl_only(struct rtw89_dev *rtwdev)
{}

static void _action_wl_init(struct rtw89_dev *rtwdev)
{}

static void _action_wl_off(struct rtw89_dev *rtwdev, u8 mode)
{}

static void _action_freerun(struct rtw89_dev *rtwdev)
{}

static void _action_bt_whql(struct rtw89_dev *rtwdev)
{}

static void _action_bt_off(struct rtw89_dev *rtwdev)
{}

static void _action_bt_idle(struct rtw89_dev *rtwdev)
{}

static void _action_bt_hfp(struct rtw89_dev *rtwdev)
{}

static void _action_bt_hid(struct rtw89_dev *rtwdev)
{}

static void _action_bt_a2dp(struct rtw89_dev *rtwdev)
{}

static void _action_bt_a2dpsink(struct rtw89_dev *rtwdev)
{}

static void _action_bt_pan(struct rtw89_dev *rtwdev)
{}

static void _action_bt_a2dp_hid(struct rtw89_dev *rtwdev)
{}

static void _action_bt_a2dp_pan(struct rtw89_dev *rtwdev)
{}

static void _action_bt_pan_hid(struct rtw89_dev *rtwdev)
{}

static void _action_bt_a2dp_pan_hid(struct rtw89_dev *rtwdev)
{}

static void _action_wl_5g(struct rtw89_dev *rtwdev)
{}

static void _action_wl_other(struct rtw89_dev *rtwdev)
{}

static void _action_wl_nc(struct rtw89_dev *rtwdev)
{}

static void _action_wl_rfk(struct rtw89_dev *rtwdev)
{}

static void _set_btg_ctrl(struct rtw89_dev *rtwdev)
{}

static void _set_wl_preagc_ctrl(struct rtw89_dev *rtwdev)
{}

struct rtw89_txtime_data {};

static void rtw89_tx_time_iter(void *data, struct ieee80211_sta *sta)
{}

static void _set_wl_tx_limit(struct rtw89_dev *rtwdev)
{}

static void _set_bt_rx_agc(struct rtw89_dev *rtwdev)
{}

static void _set_bt_rx_scan_pri(struct rtw89_dev *rtwdev)
{}

static void _action_common(struct rtw89_dev *rtwdev)
{}

static void _action_by_bt(struct rtw89_dev *rtwdev)
{}

static void _action_wl_2g_sta(struct rtw89_dev *rtwdev)
{}

static void _action_wl_25g_mcc(struct rtw89_dev *rtwdev)
{}

static void _action_wl_scan(struct rtw89_dev *rtwdev)
{}

static void _action_wl_2g_mcc(struct rtw89_dev *rtwdev)
{}

static void _action_wl_2g_scc(struct rtw89_dev *rtwdev)
{}

static void _action_wl_2g_scc_v1(struct rtw89_dev *rtwdev)
{}

static void _action_wl_2g_scc_v2(struct rtw89_dev *rtwdev)
{}

static void _action_wl_2g_scc_v8(struct rtw89_dev *rtwdev)
{}

static void _action_wl_2g_ap(struct rtw89_dev *rtwdev)
{}

static void _action_wl_2g_go(struct rtw89_dev *rtwdev)
{}

static void _action_wl_2g_gc(struct rtw89_dev *rtwdev)
{}

static void _action_wl_2g_nan(struct rtw89_dev *rtwdev)
{}

static u32 _read_scbd(struct rtw89_dev *rtwdev)
{}

static void _write_scbd(struct rtw89_dev *rtwdev, u32 val, bool state)
{}

static u8
_update_rssi_state(struct rtw89_dev *rtwdev, u8 pre_state, u8 rssi, u8 thresh)
{}

static void _wl_req_mac(struct rtw89_dev *rtwdev, u8 mac)
{}

static
void _update_dbcc_band(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
{}

static void _update_wl_info(struct rtw89_dev *rtwdev)
{}

static void _update_wl_info_v1(struct rtw89_dev *rtwdev)
{}

static void _update_wl_info_v2(struct rtw89_dev *rtwdev)
{}

#define BTC_CHK_HANG_MAX
#define BTC_SCB_INV_VALUE

static u8 _get_role_link_mode(u8 role)
{}

static bool _chk_role_ch_group(const struct rtw89_btc_chdef *r1,
			       const struct rtw89_btc_chdef *r2)
{}

static u8 _chk_dbcc(struct rtw89_dev *rtwdev, struct rtw89_btc_chdef *ch,
		    u8 *phy, u8 *role, u8 *dbcc_2g_phy)
{}

static void _update_role_link_mode(struct rtw89_dev *rtwdev,
				   bool client_joined, u32 noa)
{}

static void _update_wl_info_v7(struct rtw89_dev *rtwdev, u8 rid)
{}

static void _update_wl_info_v8(struct rtw89_dev *rtwdev, u8 role_id, u8 rlink_id,
			       enum btc_role_state state)
{}

void rtw89_coex_act1_work(struct work_struct *work)
{}

void rtw89_coex_bt_devinfo_work(struct work_struct *work)
{}

void rtw89_coex_rfk_chk_work(struct work_struct *work)
{}

static void _update_bt_scbd(struct rtw89_dev *rtwdev, bool only_update)
{}

static bool _chk_wl_rfk_request(struct rtw89_dev *rtwdev)
{}

static
void _run_coex(struct rtw89_dev *rtwdev, enum btc_reason_and_action reason)
{}

void rtw89_btc_ntfy_poweron(struct rtw89_dev *rtwdev)
{}

void rtw89_btc_ntfy_poweroff(struct rtw89_dev *rtwdev)
{}

static void _set_init_info(struct rtw89_dev *rtwdev)
{}

void rtw89_btc_ntfy_init(struct rtw89_dev *rtwdev, u8 mode)
{}

void rtw89_btc_ntfy_scan_start(struct rtw89_dev *rtwdev, u8 phy_idx, u8 band)
{}

void rtw89_btc_ntfy_scan_finish(struct rtw89_dev *rtwdev, u8 phy_idx)
{}

void rtw89_btc_ntfy_switch_band(struct rtw89_dev *rtwdev, u8 phy_idx, u8 band)
{}

void rtw89_btc_ntfy_specific_packet(struct rtw89_dev *rtwdev,
				    enum btc_pkt_type pkt_type)
{}

void rtw89_btc_ntfy_eapol_packet_work(struct work_struct *work)
{}

void rtw89_btc_ntfy_arp_packet_work(struct work_struct *work)
{}

void rtw89_btc_ntfy_dhcp_packet_work(struct work_struct *work)
{}

void rtw89_btc_ntfy_icmp_packet_work(struct work_struct *work)
{}

static u8 _update_bt_rssi_level(struct rtw89_dev *rtwdev, u8 rssi)
{}

static void _update_zb_coex_tbl(struct rtw89_dev *rtwdev)
{}

#define BT_PROFILE_PROTOCOL_MASK

static void _update_bt_info(struct rtw89_dev *rtwdev, u8 *buf, u32 len)
{}

void rtw89_btc_ntfy_role_info(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
			      struct rtw89_sta *rtwsta, enum btc_role_state state)
{}

void rtw89_btc_ntfy_radio_state(struct rtw89_dev *rtwdev, enum btc_rfctrl rf_state)
{}

static bool _ntfy_wl_rfk(struct rtw89_dev *rtwdev, u8 phy_path,
			 enum btc_wl_rfk_type type,
			 enum btc_wl_rfk_state state)
{}

void rtw89_btc_ntfy_wl_rfk(struct rtw89_dev *rtwdev, u8 phy_map,
			   enum btc_wl_rfk_type type,
			   enum btc_wl_rfk_state state)
{}
EXPORT_SYMBOL();

struct rtw89_btc_wl_sta_iter_data {};

static void rtw89_btc_ntfy_wl_sta_iter(void *data, struct ieee80211_sta *sta)
{}

#define BTC_NHM_CHK_INTVL

void rtw89_btc_ntfy_wl_sta(struct rtw89_dev *rtwdev)
{}

void rtw89_btc_c2h_handle(struct rtw89_dev *rtwdev, struct sk_buff *skb,
			  u32 len, u8 class, u8 func)
{}

#define BTC_CX_FW_OFFLOAD

static void _show_cx_info(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_wl_role_info(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_wl_info(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

enum btc_bt_a2dp_type {};

static void _show_bt_profile_info(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_bt_info(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

#define CASE_BTC_RSN_STR(e)
#define CASE_BTC_ACT_STR(e)
#define CASE_BTC_POLICY_STR(e)
#define CASE_BTC_SLOT_STR(e)
#define CASE_BTC_EVT_STR(e)
#define CASE_BTC_INIT(e)
#define CASE_BTC_ANTPATH_STR(e)
#define CASE_BTC_POLUT_STR(e)
#define CASE_BTC_REGTYPE_STR(e)
#define CASE_BTC_GDBG_STR(e)

static const char *id_to_polut(u32 id)
{}

static const char *id_to_regtype(u32 id)
{}

static const char *id_to_gdbg(u32 id)
{}

static const char *steps_to_str(u16 step)
{}

static const char *id_to_slot(u32 id)
{}

static const char *id_to_evt(u32 id)
{}

static const char *id_to_mode(u8 id)
{}

static const char *id_to_ant(u32 id)
{}

static
void seq_print_segment(struct seq_file *m, const char *prefix, u16 *data,
		       u8 len, u8 seg_len, u8 start_idx, u8 ring_len)
{}

static void _show_dm_step(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_dm_info(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_error(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fbtc_tdma(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fbtc_slots(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fbtc_cysta_v2(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fbtc_cysta_v3(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fbtc_cysta_v4(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fbtc_cysta_v5(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fbtc_cysta_v7(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fbtc_nullsta(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fbtc_step_v2(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fbtc_step_v3(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_fw_dm_msg(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _get_gnt(struct rtw89_dev *rtwdev, struct rtw89_mac_ax_coex_gnt *gnt_cfg)
{}

static void _show_gpio_dbg(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_mreg_v1(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_mreg_v2(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_mreg_v7(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_summary_v1(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_summary_v4(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_summary_v5(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_summary_v105(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_summary_v7(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

static void _show_summary_v8(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

void rtw89_btc_dump_info(struct rtw89_dev *rtwdev, struct seq_file *m)
{}

void rtw89_coex_recognize_ver(struct rtw89_dev *rtwdev)
{}