linux/drivers/net/wireless/realtek/rtw88/main.h

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

#ifndef __RTK_MAIN_H_
#define __RTK_MAIN_H_

#include <net/mac80211.h>
#include <linux/vmalloc.h>
#include <linux/firmware.h>
#include <linux/average.h>
#include <linux/bitops.h>
#include <linux/bitfield.h>
#include <linux/iopoll.h>
#include <linux/interrupt.h>
#include <linux/workqueue.h>

#include "util.h"

#define RTW_MAX_MAC_ID_NUM
#define RTW_MAX_SEC_CAM_NUM
#define MAX_PG_CAM_BACKUP_NUM

#define RTW_SCAN_MAX_SSIDS

#define RTW_MAX_PATTERN_NUM
#define RTW_MAX_PATTERN_MASK_SIZE
#define RTW_MAX_PATTERN_SIZE

#define RTW_WATCH_DOG_DELAY_TIME

#define RFREG_MASK
#define INV_RF_DATA
#define TX_PAGE_SIZE_SHIFT
#define TX_PAGE_SIZE

#define RTW_CHANNEL_WIDTH_MAX
#define RTW_RF_PATH_MAX
#define HW_FEATURE_LEN

#define RTW_TP_SHIFT

extern bool rtw_bf_support;
extern bool rtw_disable_lps_deep_mode;
extern unsigned int rtw_debug_mask;
extern bool rtw_edcca_enabled;
extern const struct ieee80211_ops rtw_ops;

#define RTW_MAX_CHANNEL_NUM_2G
#define RTW_MAX_CHANNEL_NUM_5G

struct rtw_dev;
struct rtw_debugfs;

enum rtw_hci_type {};

struct rtw_hci {};

#define IS_CH_5G_BAND_1(channel)
#define IS_CH_5G_BAND_2(channel)
#define IS_CH_5G_BAND_3(channel)
#define IS_CH_5G_BAND_4(channel)

#define IS_CH_5G_BAND_MID(channel)

#define IS_CH_2G_BAND(channel)
#define IS_CH_5G_BAND(channel)

enum rtw_supported_band {};

/* now, support up to 80M bw */
#define RTW_MAX_CHANNEL_WIDTH

enum rtw_bandwidth {};

enum rtw_sc_offset {};

enum rtw_net_type {};

enum rtw_rf_type {};

enum rtw_rf_path {};

enum rtw_bb_path {};

enum rtw_rate_section {};

enum rtw_wireless_set {};

#define HT_STBC_EN
#define VHT_STBC_EN
#define HT_LDPC_EN
#define VHT_LDPC_EN

enum rtw_chip_type {};

enum rtw_tx_queue_type {};

enum rtw_rx_queue_type {};

enum rtw_fw_type {};

enum rtw_rate_index {};

enum rtw_trx_desc_rate {};

enum rtw_regulatory_domains {};

enum rtw_txq_flags {};

enum rtw_flags {};

enum rtw_evm {};

enum rtw_snr {};

enum rtw_port {};

enum rtw_wow_flags {};

/* the power index is represented by differences, which cck-1s & ht40-1s are
 * the base values, so for 1s's differences, there are only ht20 & ofdm
 */
struct rtw_2g_1s_pwr_idx_diff {} __packed;

struct rtw_2g_ns_pwr_idx_diff {} __packed;

struct rtw_2g_txpwr_idx {};

struct rtw_5g_ht_1s_pwr_idx_diff {} __packed;

struct rtw_5g_ht_ns_pwr_idx_diff {} __packed;

struct rtw_5g_ofdm_ns_pwr_idx_diff {} __packed;

struct rtw_5g_vht_ns_pwr_idx_diff {} __packed;

struct rtw_5g_txpwr_idx {};

struct rtw_txpwr_idx {};

struct rtw_channel_params {};

struct rtw_hw_reg {};

struct rtw_hw_reg_desc {};

struct rtw_ltecoex_addr {};

struct rtw_reg_domain {};

struct rtw_rf_sipi_addr {};

struct rtw_hw_reg_offset {};

struct rtw_backup_info {};

enum rtw_vif_port_set {};

struct rtw_vif_port {};

struct rtw_tx_pkt_info {};

struct rtw_rx_pkt_stat {};

DECLARE_EWMA(tp, 10, 2);

struct rtw_traffic_stats {};

enum rtw_lps_mode {};

enum rtw_lps_deep_mode {};

enum rtw_pwr_state {};

struct rtw_lps_conf {};

enum rtw_hw_key_type {};

struct rtw_cam_entry {};

struct rtw_sec_desc {};

struct rtw_tx_report {};

struct rtw_ra_report {};

struct rtw_txq {};

DECLARE_EWMA(rssi, 10, 16);

struct rtw_sta_info {};

enum rtw_bfee_role {};

struct rtw_bfee {};

struct rtw_bf_info {};

struct rtw_vif {};

struct rtw_regulatory {};

enum rtw_regd_state {};

struct rtw_regd {};

struct rtw_chip_ops {};

#define RTW_PWR_POLLING_CNT

#define RTW_PWR_CMD_READ
#define RTW_PWR_CMD_WRITE
#define RTW_PWR_CMD_POLLING
#define RTW_PWR_CMD_DELAY
#define RTW_PWR_CMD_END

/* define the base address of each block */
#define RTW_PWR_ADDR_MAC
#define RTW_PWR_ADDR_USB
#define RTW_PWR_ADDR_PCIE
#define RTW_PWR_ADDR_SDIO

#define RTW_PWR_INTF_SDIO_MSK
#define RTW_PWR_INTF_USB_MSK
#define RTW_PWR_INTF_PCI_MSK
#define RTW_PWR_INTF_ALL_MSK

#define RTW_PWR_CUT_TEST_MSK
#define RTW_PWR_CUT_A_MSK
#define RTW_PWR_CUT_B_MSK
#define RTW_PWR_CUT_C_MSK
#define RTW_PWR_CUT_D_MSK
#define RTW_PWR_CUT_E_MSK
#define RTW_PWR_CUT_F_MSK
#define RTW_PWR_CUT_G_MSK
#define RTW_PWR_CUT_ALL_MSK

enum rtw_pwr_seq_cmd_delay_unit {};

struct rtw_pwr_seq_cmd {};

enum rtw_chip_ver {};

#define RTW_INTF_PHY_PLATFORM_ALL

enum rtw_intf_phy_cut {};

enum rtw_ip_sel {};

enum rtw_pq_map_id {};

enum rtw_dma_mapping {};

struct rtw_rqpn {};

struct rtw_prioq_addr {};

struct rtw_prioq_addrs {};

struct rtw_page_table {};

struct rtw_intf_phy_para {};

struct rtw_wow_pattern {};

struct rtw_pno_request {};

struct rtw_wow_param {};

struct rtw_intf_phy_para_table {};

struct rtw_table {};

static inline void rtw_load_table(struct rtw_dev *rtwdev,
				  const struct rtw_table *tbl)
{}

enum rtw_rfe_fem {};

struct rtw_rfe_def {};

#define RTW_DEF_RFE(chip, bb_pg, pwrlmt)

#define RTW_DEF_RFE_EXT(chip, bb_pg, pwrlmt, btg)

#define RTW_PWR_TRK_5G_1
#define RTW_PWR_TRK_5G_2
#define RTW_PWR_TRK_5G_3
#define RTW_PWR_TRK_5G_NUM

#define RTW_PWR_TRK_TBL_SZ

/* This table stores the values of TX power that will be adjusted by power
 * tracking.
 *
 * For 5G bands, there are 3 different settings.
 * For 2G there are cck rate and ofdm rate with different settings.
 */
struct rtw_pwr_track_tbl {};

enum rtw_wlan_cpu {};

enum rtw_fw_fifo_sel {};

enum rtw_fwcd_item {};

/* hardware configuration for each IC */
struct rtw_chip_info {};

enum rtw_coex_bt_state_cnt {};

enum rtw_coex_wl_state_cnt {};

struct rtw_coex_rfe {};

#define COEX_WL_TDMA_PARA_LENGTH

struct rtw_coex_dm {};

#define COEX_BTINFO_SRC_WL_FW
#define COEX_BTINFO_SRC_BT_RSP
#define COEX_BTINFO_SRC_BT_ACT
#define COEX_BTINFO_SRC_BT_IQK
#define COEX_BTINFO_SRC_BT_SCBD
#define COEX_BTINFO_SRC_H2C60
#define COEX_BTINFO_SRC_MAX

#define COEX_INFO_FTP
#define COEX_INFO_A2DP
#define COEX_INFO_HID
#define COEX_INFO_SCO_BUSY
#define COEX_INFO_ACL_BUSY
#define COEX_INFO_INQ_PAGE
#define COEX_INFO_SCO_ESCO
#define COEX_INFO_CONNECTION
#define COEX_BTINFO_LENGTH_MAX
#define COEX_BTINFO_LENGTH

#define COEX_BT_HIDINFO_LIST
#define COEX_BT_HIDINFO_A
#define COEX_BT_HIDINFO_NAME

#define COEX_BT_HIDINFO_LENGTH
#define COEX_BT_HIDINFO_HANDLE_NUM
#define COEX_BT_HIDINFO_C2H_HANDLE
#define COEX_BT_HIDINFO_C2H_VENDOR
#define COEX_BT_BLE_HANDLE_THRS
#define COEX_BT_HIDINFO_NOTCON

struct rtw_coex_hid {};

struct rtw_coex_hid_handle_list {} __packed;

struct rtw_coex_hid_info_a {} __packed;

struct rtw_coex_stat {};

struct rtw_coex {};

#define DPK_RF_REG_NUM
#define DPK_RF_PATH_NUM
#define DPK_BB_REG_NUM
#define DPK_CHANNEL_WIDTH_80

DECLARE_EWMA(thermal, 10, 4);

struct rtw_dpk_info {};

struct rtw_phy_cck_pd_reg {};

#define DACK_MSBK_BACKUP_NUM
#define DACK_DCK_BACKUP_NUM

struct rtw_swing_table {};

struct rtw_pkt_count {};

DECLARE_EWMA(evm, 10, 4);
DECLARE_EWMA(snr, 10, 4);

struct rtw_iqk_info {};

enum rtw_rf_band {};

#define RF_GAIN_NUM
#define RF_HW_OFFSET_NUM

struct rtw_gapk_info {};

#define EDCCA_TH_L2H_IDX
#define EDCCA_TH_H2L_IDX
#define EDCCA_TH_L2H_LB
#define EDCCA_ADC_BACKOFF
#define EDCCA_IGI_BASE
#define EDCCA_IGI_L2H_DIFF
#define EDCCA_L2H_H2L_DIFF
#define EDCCA_L2H_H2L_DIFF_NORMAL

enum rtw_edcca_mode {};

struct rtw_cfo_track {};

#define RRSR_INIT_2G
#define RRSR_INIT_5G

enum rtw_dm_cap {};

struct rtw_dm_info {};

struct rtw_efuse {};

struct rtw_phy_cond {};

struct rtw_fifo_conf {};

struct rtw_fwcd_desc {};

struct rtw_fwcd_segs {};

#define FW_CD_TYPE
#define FW_CD_LEN
#define FW_CD_VAL
struct rtw_fw_state {};

enum rtw_sar_sources {};

enum rtw_sar_bands {};

/* the union is reserved for other kinds of SAR sources
 * which might not re-use same format with array common.
 */
rtw_sar_cfg;

struct rtw_sar {};

struct rtw_hal {};

struct rtw_path_div {};

struct rtw_chan_info {};

struct rtw_chan_list {};

struct rtw_hw_scan_info {};

struct rtw_dev {};

#include "hci.h"

static inline bool rtw_is_assoc(struct rtw_dev *rtwdev)
{}

static inline struct ieee80211_txq *rtwtxq_to_txq(struct rtw_txq *rtwtxq)
{}

static inline struct ieee80211_vif *rtwvif_to_vif(struct rtw_vif *rtwvif)
{}

static inline void rtw_chip_efuse_grant_on(struct rtw_dev *rtwdev)
{}

static inline void rtw_chip_efuse_grant_off(struct rtw_dev *rtwdev)
{}

static inline bool rtw_chip_wcpu_11n(struct rtw_dev *rtwdev)
{}

static inline bool rtw_chip_wcpu_11ac(struct rtw_dev *rtwdev)
{}

static inline bool rtw_chip_has_rx_ldpc(struct rtw_dev *rtwdev)
{}

static inline bool rtw_chip_has_tx_stbc(struct rtw_dev *rtwdev)
{}

static inline u8 rtw_acquire_macid(struct rtw_dev *rtwdev)
{}

static inline void rtw_release_macid(struct rtw_dev *rtwdev, u8 mac_id)
{}

static inline int rtw_chip_dump_fw_crash(struct rtw_dev *rtwdev)
{}

static inline
enum nl80211_band rtw_hw_to_nl80211_band(enum rtw_supported_band hw_band)
{}

void rtw_set_rx_freq_band(struct rtw_rx_pkt_stat *pkt_stat, u8 channel);
void rtw_set_dtim_period(struct rtw_dev *rtwdev, int dtim_period);
void rtw_get_channel_params(struct cfg80211_chan_def *chandef,
			    struct rtw_channel_params *ch_param);
bool check_hw_ready(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 target);
bool ltecoex_read_reg(struct rtw_dev *rtwdev, u16 offset, u32 *val);
bool ltecoex_reg_write(struct rtw_dev *rtwdev, u16 offset, u32 value);
void rtw_restore_reg(struct rtw_dev *rtwdev,
		     struct rtw_backup_info *bckp, u32 num);
void rtw_desc_to_mcsrate(u16 rate, u8 *mcs, u8 *nss);
void rtw_set_channel(struct rtw_dev *rtwdev);
void rtw_chip_prepare_tx(struct rtw_dev *rtwdev);
void rtw_vif_port_config(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif,
			 u32 config);
void rtw_tx_report_purge_timer(struct timer_list *t);
void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
			 bool reset_ra_mask);
void rtw_core_scan_start(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif,
			 const u8 *mac_addr, bool hw_scan);
void rtw_core_scan_complete(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
			    bool hw_scan);
int rtw_core_start(struct rtw_dev *rtwdev);
void rtw_core_stop(struct rtw_dev *rtwdev);
int rtw_chip_info_setup(struct rtw_dev *rtwdev);
int rtw_core_init(struct rtw_dev *rtwdev);
void rtw_core_deinit(struct rtw_dev *rtwdev);
int rtw_register_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw);
void rtw_unregister_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw);
u16 rtw_desc_to_bitrate(u8 desc_rate);
void rtw_vif_assoc_changed(struct rtw_vif *rtwvif,
			   struct ieee80211_bss_conf *conf);
int rtw_sta_add(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,
		struct ieee80211_vif *vif);
void rtw_sta_remove(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,
		    bool fw_exist);
void rtw_fw_recovery(struct rtw_dev *rtwdev);
void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start);
int rtw_dump_fw(struct rtw_dev *rtwdev, const u32 ocp_src, u32 size,
		u32 fwcd_item);
int rtw_dump_reg(struct rtw_dev *rtwdev, const u32 addr, const u32 size);
void rtw_set_txrx_1ss(struct rtw_dev *rtwdev, bool config_1ss);
void rtw_update_channel(struct rtw_dev *rtwdev, u8 center_channel,
			u8 primary_channel, enum rtw_supported_band band,
			enum rtw_bandwidth bandwidth);
void rtw_core_port_switch(struct rtw_dev *rtwdev, struct ieee80211_vif *vif);
bool rtw_core_check_sta_active(struct rtw_dev *rtwdev);
void rtw_core_enable_beacon(struct rtw_dev *rtwdev, bool enable);
#endif