#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 { … };
#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 { … };
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 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 …
struct rtw_pwr_track_tbl { … };
enum rtw_wlan_cpu { … };
enum rtw_fw_fifo_sel { … };
enum rtw_fwcd_item { … };
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 { … };
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