Path: blob/master/drivers/net/wireless/realtek/rtw88/main.h
25924 views
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */1/* Copyright(c) 2018-2019 Realtek Corporation2*/34#ifndef __RTK_MAIN_H_5#define __RTK_MAIN_H_67#include <net/mac80211.h>8#include <linux/vmalloc.h>9#include <linux/firmware.h>10#include <linux/average.h>11#include <linux/bitops.h>12#include <linux/bitfield.h>13#include <linux/iopoll.h>14#include <linux/interrupt.h>15#include <linux/workqueue.h>1617#include "util.h"1819#define RTW_MAX_MAC_ID_NUM 3220#define RTW_MAX_SEC_CAM_NUM 3221#define MAX_PG_CAM_BACKUP_NUM 82223#define RTW_SCAN_MAX_SSIDS 42425#define RTW_MAX_PATTERN_NUM 1226#define RTW_MAX_PATTERN_MASK_SIZE 1627#define RTW_MAX_PATTERN_SIZE 1282829#define RTW_WATCH_DOG_DELAY_TIME round_jiffies_relative(HZ * 2)3031#define RFREG_MASK 0xfffff32#define INV_RF_DATA 0xffffffff33#define TX_PAGE_SIZE_SHIFT 734#define TX_PAGE_SIZE (1 << TX_PAGE_SIZE_SHIFT)3536#define RTW_CHANNEL_WIDTH_MAX 337#define RTW_RF_PATH_MAX 438#define HW_FEATURE_LEN 133940#define RTW_TP_SHIFT 18 /* bytes/2s --> Mbps */4142extern bool rtw_bf_support;43extern bool rtw_disable_lps_deep_mode;44extern unsigned int rtw_debug_mask;45extern bool rtw_edcca_enabled;46extern const struct ieee80211_ops rtw_ops;4748#define RTW_MAX_CHANNEL_NUM_2G 1449#define RTW_MAX_CHANNEL_NUM_5G 495051struct rtw_dev;52struct rtw_debugfs;5354enum rtw_hci_type {55RTW_HCI_TYPE_PCIE,56RTW_HCI_TYPE_USB,57RTW_HCI_TYPE_SDIO,5859RTW_HCI_TYPE_UNDEFINE,60};6162struct rtw_hci {63const struct rtw_hci_ops *ops;64enum rtw_hci_type type;6566u32 rpwm_addr;67u32 cpwm_addr;6869u8 bulkout_num;70};7172#define IS_CH_5G_BAND_1(channel) ((channel) >= 36 && (channel <= 48))73#define IS_CH_5G_BAND_2(channel) ((channel) >= 52 && (channel <= 64))74#define IS_CH_5G_BAND_3(channel) ((channel) >= 100 && (channel <= 144))75#define IS_CH_5G_BAND_4(channel) ((channel) >= 149 && (channel <= 177))7677#define IS_CH_5G_BAND_MID(channel) \78(IS_CH_5G_BAND_2(channel) || IS_CH_5G_BAND_3(channel))7980#define IS_CH_2G_BAND(channel) ((channel) <= 14)81#define IS_CH_5G_BAND(channel) \82(IS_CH_5G_BAND_1(channel) || IS_CH_5G_BAND_2(channel) || \83IS_CH_5G_BAND_3(channel) || IS_CH_5G_BAND_4(channel))8485enum rtw_supported_band {86RTW_BAND_2G = BIT(NL80211_BAND_2GHZ),87RTW_BAND_5G = BIT(NL80211_BAND_5GHZ),88RTW_BAND_60G = BIT(NL80211_BAND_60GHZ),89};9091/* now, support up to 80M bw */92#define RTW_MAX_CHANNEL_WIDTH RTW_CHANNEL_WIDTH_809394enum rtw_bandwidth {95RTW_CHANNEL_WIDTH_20 = 0,96RTW_CHANNEL_WIDTH_40 = 1,97RTW_CHANNEL_WIDTH_80 = 2,98RTW_CHANNEL_WIDTH_160 = 3,99RTW_CHANNEL_WIDTH_80_80 = 4,100RTW_CHANNEL_WIDTH_5 = 5,101RTW_CHANNEL_WIDTH_10 = 6,102};103104enum rtw_sc_offset {105RTW_SC_DONT_CARE = 0,106RTW_SC_20_UPPER = 1,107RTW_SC_20_LOWER = 2,108RTW_SC_20_UPMOST = 3,109RTW_SC_20_LOWEST = 4,110RTW_SC_40_UPPER = 9,111RTW_SC_40_LOWER = 10,112};113114enum rtw_net_type {115RTW_NET_NO_LINK = 0,116RTW_NET_AD_HOC = 1,117RTW_NET_MGD_LINKED = 2,118RTW_NET_AP_MODE = 3,119};120121enum rtw_rf_type {122RF_1T1R = 0,123RF_1T2R = 1,124RF_2T2R = 2,125RF_2T3R = 3,126RF_2T4R = 4,127RF_3T3R = 5,128RF_3T4R = 6,129RF_4T4R = 7,130RF_TYPE_MAX,131};132133enum rtw_rf_path {134RF_PATH_A = 0,135RF_PATH_B = 1,136RF_PATH_C = 2,137RF_PATH_D = 3,138};139140enum rtw_bb_path {141BB_PATH_A = BIT(0),142BB_PATH_B = BIT(1),143BB_PATH_C = BIT(2),144BB_PATH_D = BIT(3),145146BB_PATH_AB = (BB_PATH_A | BB_PATH_B),147BB_PATH_AC = (BB_PATH_A | BB_PATH_C),148BB_PATH_AD = (BB_PATH_A | BB_PATH_D),149BB_PATH_BC = (BB_PATH_B | BB_PATH_C),150BB_PATH_BD = (BB_PATH_B | BB_PATH_D),151BB_PATH_CD = (BB_PATH_C | BB_PATH_D),152153BB_PATH_ABC = (BB_PATH_A | BB_PATH_B | BB_PATH_C),154BB_PATH_ABD = (BB_PATH_A | BB_PATH_B | BB_PATH_D),155BB_PATH_ACD = (BB_PATH_A | BB_PATH_C | BB_PATH_D),156BB_PATH_BCD = (BB_PATH_B | BB_PATH_C | BB_PATH_D),157158BB_PATH_ABCD = (BB_PATH_A | BB_PATH_B | BB_PATH_C | BB_PATH_D),159};160161enum rtw_rate_section {162RTW_RATE_SECTION_CCK = 0,163RTW_RATE_SECTION_OFDM,164RTW_RATE_SECTION_HT_1S,165RTW_RATE_SECTION_HT_2S,166RTW_RATE_SECTION_VHT_1S,167RTW_RATE_SECTION_VHT_2S,168__RTW_RATE_SECTION_2SS_MAX = RTW_RATE_SECTION_VHT_2S,169RTW_RATE_SECTION_HT_3S,170RTW_RATE_SECTION_HT_4S,171RTW_RATE_SECTION_VHT_3S,172RTW_RATE_SECTION_VHT_4S,173174/* keep last */175RTW_RATE_SECTION_NUM,176};177178enum rtw_wireless_set {179WIRELESS_CCK = 0x00000001,180WIRELESS_OFDM = 0x00000002,181WIRELESS_HT = 0x00000004,182WIRELESS_VHT = 0x00000008,183};184185#define HT_STBC_EN BIT(0)186#define VHT_STBC_EN BIT(1)187#define HT_LDPC_EN BIT(0)188#define VHT_LDPC_EN BIT(1)189190enum rtw_chip_type {191RTW_CHIP_TYPE_8822B,192RTW_CHIP_TYPE_8822C,193RTW_CHIP_TYPE_8723D,194RTW_CHIP_TYPE_8821C,195RTW_CHIP_TYPE_8703B,196RTW_CHIP_TYPE_8821A,197RTW_CHIP_TYPE_8812A,198RTW_CHIP_TYPE_8814A,199};200201enum rtw_tx_queue_type {202/* the order of AC queues matters */203RTW_TX_QUEUE_BK = 0x0,204RTW_TX_QUEUE_BE = 0x1,205RTW_TX_QUEUE_VI = 0x2,206RTW_TX_QUEUE_VO = 0x3,207208RTW_TX_QUEUE_BCN = 0x4,209RTW_TX_QUEUE_MGMT = 0x5,210RTW_TX_QUEUE_HI0 = 0x6,211RTW_TX_QUEUE_H2C = 0x7,212/* keep it last */213RTK_MAX_TX_QUEUE_NUM214};215216enum rtw_rx_queue_type {217RTW_RX_QUEUE_MPDU = 0x0,218RTW_RX_QUEUE_C2H = 0x1,219/* keep it last */220RTK_MAX_RX_QUEUE_NUM221};222223enum rtw_fw_type {224RTW_NORMAL_FW = 0x0,225RTW_WOWLAN_FW = 0x1,226};227228enum rtw_rate_index {229RTW_RATEID_BGN_40M_2SS = 0,230RTW_RATEID_BGN_40M_1SS = 1,231RTW_RATEID_BGN_20M_2SS = 2,232RTW_RATEID_BGN_20M_1SS = 3,233RTW_RATEID_GN_N2SS = 4,234RTW_RATEID_GN_N1SS = 5,235RTW_RATEID_BG = 6,236RTW_RATEID_G = 7,237RTW_RATEID_B_20M = 8,238RTW_RATEID_ARFR0_AC_2SS = 9,239RTW_RATEID_ARFR1_AC_1SS = 10,240RTW_RATEID_ARFR2_AC_2G_1SS = 11,241RTW_RATEID_ARFR3_AC_2G_2SS = 12,242RTW_RATEID_ARFR4_AC_3SS = 13,243RTW_RATEID_ARFR5_N_3SS = 14,244RTW_RATEID_ARFR7_N_4SS = 15,245RTW_RATEID_ARFR6_AC_4SS = 16246};247248enum rtw_trx_desc_rate {249DESC_RATE1M = 0x00,250DESC_RATE2M = 0x01,251DESC_RATE5_5M = 0x02,252DESC_RATE11M = 0x03,253254DESC_RATE6M = 0x04,255DESC_RATE9M = 0x05,256DESC_RATE12M = 0x06,257DESC_RATE18M = 0x07,258DESC_RATE24M = 0x08,259DESC_RATE36M = 0x09,260DESC_RATE48M = 0x0a,261DESC_RATE54M = 0x0b,262263DESC_RATEMCS0 = 0x0c,264DESC_RATEMCS1 = 0x0d,265DESC_RATEMCS2 = 0x0e,266DESC_RATEMCS3 = 0x0f,267DESC_RATEMCS4 = 0x10,268DESC_RATEMCS5 = 0x11,269DESC_RATEMCS6 = 0x12,270DESC_RATEMCS7 = 0x13,271DESC_RATEMCS8 = 0x14,272DESC_RATEMCS9 = 0x15,273DESC_RATEMCS10 = 0x16,274DESC_RATEMCS11 = 0x17,275DESC_RATEMCS12 = 0x18,276DESC_RATEMCS13 = 0x19,277DESC_RATEMCS14 = 0x1a,278DESC_RATEMCS15 = 0x1b,279DESC_RATEMCS16 = 0x1c,280DESC_RATEMCS17 = 0x1d,281DESC_RATEMCS18 = 0x1e,282DESC_RATEMCS19 = 0x1f,283DESC_RATEMCS20 = 0x20,284DESC_RATEMCS21 = 0x21,285DESC_RATEMCS22 = 0x22,286DESC_RATEMCS23 = 0x23,287DESC_RATEMCS24 = 0x24,288DESC_RATEMCS25 = 0x25,289DESC_RATEMCS26 = 0x26,290DESC_RATEMCS27 = 0x27,291DESC_RATEMCS28 = 0x28,292DESC_RATEMCS29 = 0x29,293DESC_RATEMCS30 = 0x2a,294DESC_RATEMCS31 = 0x2b,295296DESC_RATEVHT1SS_MCS0 = 0x2c,297DESC_RATEVHT1SS_MCS1 = 0x2d,298DESC_RATEVHT1SS_MCS2 = 0x2e,299DESC_RATEVHT1SS_MCS3 = 0x2f,300DESC_RATEVHT1SS_MCS4 = 0x30,301DESC_RATEVHT1SS_MCS5 = 0x31,302DESC_RATEVHT1SS_MCS6 = 0x32,303DESC_RATEVHT1SS_MCS7 = 0x33,304DESC_RATEVHT1SS_MCS8 = 0x34,305DESC_RATEVHT1SS_MCS9 = 0x35,306307DESC_RATEVHT2SS_MCS0 = 0x36,308DESC_RATEVHT2SS_MCS1 = 0x37,309DESC_RATEVHT2SS_MCS2 = 0x38,310DESC_RATEVHT2SS_MCS3 = 0x39,311DESC_RATEVHT2SS_MCS4 = 0x3a,312DESC_RATEVHT2SS_MCS5 = 0x3b,313DESC_RATEVHT2SS_MCS6 = 0x3c,314DESC_RATEVHT2SS_MCS7 = 0x3d,315DESC_RATEVHT2SS_MCS8 = 0x3e,316DESC_RATEVHT2SS_MCS9 = 0x3f,317318DESC_RATEVHT3SS_MCS0 = 0x40,319DESC_RATEVHT3SS_MCS1 = 0x41,320DESC_RATEVHT3SS_MCS2 = 0x42,321DESC_RATEVHT3SS_MCS3 = 0x43,322DESC_RATEVHT3SS_MCS4 = 0x44,323DESC_RATEVHT3SS_MCS5 = 0x45,324DESC_RATEVHT3SS_MCS6 = 0x46,325DESC_RATEVHT3SS_MCS7 = 0x47,326DESC_RATEVHT3SS_MCS8 = 0x48,327DESC_RATEVHT3SS_MCS9 = 0x49,328329DESC_RATEVHT4SS_MCS0 = 0x4a,330DESC_RATEVHT4SS_MCS1 = 0x4b,331DESC_RATEVHT4SS_MCS2 = 0x4c,332DESC_RATEVHT4SS_MCS3 = 0x4d,333DESC_RATEVHT4SS_MCS4 = 0x4e,334DESC_RATEVHT4SS_MCS5 = 0x4f,335DESC_RATEVHT4SS_MCS6 = 0x50,336DESC_RATEVHT4SS_MCS7 = 0x51,337DESC_RATEVHT4SS_MCS8 = 0x52,338DESC_RATEVHT4SS_MCS9 = 0x53,339340DESC_RATE_MAX,341};342343enum rtw_regulatory_domains {344RTW_REGD_FCC = 0,345RTW_REGD_MKK = 1,346RTW_REGD_ETSI = 2,347RTW_REGD_IC = 3,348RTW_REGD_KCC = 4,349RTW_REGD_ACMA = 5,350RTW_REGD_CHILE = 6,351RTW_REGD_UKRAINE = 7,352RTW_REGD_MEXICO = 8,353RTW_REGD_CN = 9,354RTW_REGD_QATAR = 10,355RTW_REGD_UK = 11,356357RTW_REGD_WW,358RTW_REGD_MAX359};360361enum rtw_txq_flags {362RTW_TXQ_AMPDU,363RTW_TXQ_BLOCK_BA,364};365366enum rtw_flags {367RTW_FLAG_RUNNING,368RTW_FLAG_FW_RUNNING,369RTW_FLAG_SCANNING,370RTW_FLAG_POWERON,371RTW_FLAG_LEISURE_PS,372RTW_FLAG_LEISURE_PS_DEEP,373RTW_FLAG_DIG_DISABLE,374RTW_FLAG_BUSY_TRAFFIC,375RTW_FLAG_WOWLAN,376RTW_FLAG_RESTARTING,377RTW_FLAG_RESTART_TRIGGERING,378RTW_FLAG_FORCE_LOWEST_RATE,379380NUM_OF_RTW_FLAGS,381};382383enum rtw_evm {384RTW_EVM_OFDM = 0,385RTW_EVM_1SS,386RTW_EVM_2SS_A,387RTW_EVM_2SS_B,388RTW_EVM_3SS_A,389RTW_EVM_3SS_B,390RTW_EVM_3SS_C,391/* keep it last */392RTW_EVM_NUM393};394395enum rtw_snr {396RTW_SNR_OFDM_A = 0,397RTW_SNR_OFDM_B,398RTW_SNR_OFDM_C,399RTW_SNR_OFDM_D,400RTW_SNR_1SS_A,401RTW_SNR_1SS_B,402RTW_SNR_1SS_C,403RTW_SNR_1SS_D,404RTW_SNR_2SS_A,405RTW_SNR_2SS_B,406RTW_SNR_2SS_C,407RTW_SNR_2SS_D,408RTW_SNR_3SS_A,409RTW_SNR_3SS_B,410RTW_SNR_3SS_C,411RTW_SNR_3SS_D,412/* keep it last */413RTW_SNR_NUM414};415416enum rtw_port {417RTW_PORT_0 = 0,418RTW_PORT_1 = 1,419RTW_PORT_2 = 2,420RTW_PORT_3 = 3,421RTW_PORT_4 = 4,422RTW_PORT_NUM423};424425enum rtw_wow_flags {426RTW_WOW_FLAG_EN_MAGIC_PKT,427RTW_WOW_FLAG_EN_REKEY_PKT,428RTW_WOW_FLAG_EN_DISCONNECT,429430/* keep it last */431RTW_WOW_FLAG_MAX,432};433434/* the power index is represented by differences, which cck-1s & ht40-1s are435* the base values, so for 1s's differences, there are only ht20 & ofdm436*/437struct rtw_2g_1s_pwr_idx_diff {438#ifdef __LITTLE_ENDIAN439s8 ofdm:4;440s8 bw20:4;441#else442s8 bw20:4;443s8 ofdm:4;444#endif445} __packed;446447struct rtw_2g_ns_pwr_idx_diff {448#ifdef __LITTLE_ENDIAN449s8 bw20:4;450s8 bw40:4;451s8 cck:4;452s8 ofdm:4;453#else454s8 ofdm:4;455s8 cck:4;456s8 bw40:4;457s8 bw20:4;458#endif459} __packed;460461struct rtw_2g_txpwr_idx {462u8 cck_base[6];463u8 bw40_base[5];464struct rtw_2g_1s_pwr_idx_diff ht_1s_diff;465struct rtw_2g_ns_pwr_idx_diff ht_2s_diff;466struct rtw_2g_ns_pwr_idx_diff ht_3s_diff;467struct rtw_2g_ns_pwr_idx_diff ht_4s_diff;468};469470struct rtw_5g_ht_1s_pwr_idx_diff {471#ifdef __LITTLE_ENDIAN472s8 ofdm:4;473s8 bw20:4;474#else475s8 bw20:4;476s8 ofdm:4;477#endif478} __packed;479480struct rtw_5g_ht_ns_pwr_idx_diff {481#ifdef __LITTLE_ENDIAN482s8 bw20:4;483s8 bw40:4;484#else485s8 bw40:4;486s8 bw20:4;487#endif488} __packed;489490struct rtw_5g_ofdm_ns_pwr_idx_diff {491#ifdef __LITTLE_ENDIAN492s8 ofdm_3s:4;493s8 ofdm_2s:4;494s8 ofdm_4s:4;495s8 res:4;496#else497s8 res:4;498s8 ofdm_4s:4;499s8 ofdm_2s:4;500s8 ofdm_3s:4;501#endif502} __packed;503504struct rtw_5g_vht_ns_pwr_idx_diff {505#ifdef __LITTLE_ENDIAN506s8 bw160:4;507s8 bw80:4;508#else509s8 bw80:4;510s8 bw160:4;511#endif512} __packed;513514struct rtw_5g_txpwr_idx {515u8 bw40_base[14];516struct rtw_5g_ht_1s_pwr_idx_diff ht_1s_diff;517struct rtw_5g_ht_ns_pwr_idx_diff ht_2s_diff;518struct rtw_5g_ht_ns_pwr_idx_diff ht_3s_diff;519struct rtw_5g_ht_ns_pwr_idx_diff ht_4s_diff;520struct rtw_5g_ofdm_ns_pwr_idx_diff ofdm_diff;521struct rtw_5g_vht_ns_pwr_idx_diff vht_1s_diff;522struct rtw_5g_vht_ns_pwr_idx_diff vht_2s_diff;523struct rtw_5g_vht_ns_pwr_idx_diff vht_3s_diff;524struct rtw_5g_vht_ns_pwr_idx_diff vht_4s_diff;525} __packed;526527struct rtw_txpwr_idx {528struct rtw_2g_txpwr_idx pwr_idx_2g;529struct rtw_5g_txpwr_idx pwr_idx_5g;530} __packed;531532struct rtw_channel_params {533u8 center_chan;534u8 primary_chan;535u8 bandwidth;536};537538struct rtw_hw_reg {539u32 addr;540u32 mask;541};542543struct rtw_hw_reg_desc {544u32 addr;545u32 mask;546const char *desc;547};548549struct rtw_ltecoex_addr {550u32 ctrl;551u32 wdata;552u32 rdata;553};554555struct rtw_reg_domain {556u32 addr;557u32 mask;558#define RTW_REG_DOMAIN_MAC32 0559#define RTW_REG_DOMAIN_MAC16 1560#define RTW_REG_DOMAIN_MAC8 2561#define RTW_REG_DOMAIN_RF_A 3562#define RTW_REG_DOMAIN_RF_B 4563#define RTW_REG_DOMAIN_NL 0xFF564u8 domain;565};566567struct rtw_rf_sipi_addr {568u32 hssi_1;569u32 hssi_2;570u32 lssi_read;571u32 lssi_read_pi;572};573574struct rtw_hw_reg_offset {575struct rtw_hw_reg hw_reg;576u8 offset;577};578579struct rtw_backup_info {580u8 len;581u32 reg;582u32 val;583};584585enum rtw_vif_port_set {586PORT_SET_MAC_ADDR = BIT(0),587PORT_SET_BSSID = BIT(1),588PORT_SET_NET_TYPE = BIT(2),589PORT_SET_AID = BIT(3),590PORT_SET_BCN_CTRL = BIT(4),591};592593struct rtw_vif_port {594struct rtw_hw_reg mac_addr;595struct rtw_hw_reg bssid;596struct rtw_hw_reg net_type;597struct rtw_hw_reg aid;598struct rtw_hw_reg bcn_ctrl;599};600601struct rtw_tx_pkt_info {602u32 tx_pkt_size;603u8 offset;604u8 pkt_offset;605u8 tim_offset;606u8 mac_id;607u8 rate_id;608u8 rate;609u8 qsel;610u8 bw;611u8 sec_type;612u8 sn;613bool ampdu_en;614u8 ampdu_factor;615u8 ampdu_density;616u16 seq;617bool stbc;618bool ldpc;619bool dis_rate_fallback;620bool bmc;621bool use_rate;622bool ls;623bool fs;624bool short_gi;625bool report;626bool rts;627bool dis_qselseq;628bool en_hwseq;629u8 hw_ssn_sel;630bool nav_use_hdr;631bool bt_null;632};633634struct rtw_rx_pkt_stat {635bool phy_status;636bool icv_err;637bool crc_err;638bool decrypted;639bool is_c2h;640bool channel_invalid;641642s32 signal_power;643u16 pkt_len;644u8 bw;645u8 drv_info_sz;646u8 shift;647u8 rate;648u8 mac_id;649u8 cam_id;650u8 ppdu_cnt;651u32 tsf_low;652s8 rx_power[RTW_RF_PATH_MAX];653u8 rssi;654u8 rxsc;655s8 rx_snr[RTW_RF_PATH_MAX];656u8 rx_evm[RTW_RF_PATH_MAX];657s8 cfo_tail[RTW_RF_PATH_MAX];658u16 freq;659u8 band;660661struct rtw_sta_info *si;662struct ieee80211_vif *vif;663struct ieee80211_hdr *hdr;664};665666DECLARE_EWMA(tp, 10, 2);667668struct rtw_traffic_stats {669/* units in bytes */670u64 tx_unicast;671u64 rx_unicast;672673/* count for packets */674u64 tx_cnt;675u64 rx_cnt;676677/* units in Mbps */678u32 tx_throughput;679u32 rx_throughput;680struct ewma_tp tx_ewma_tp;681struct ewma_tp rx_ewma_tp;682};683684enum rtw_lps_mode {685RTW_MODE_ACTIVE = 0,686RTW_MODE_LPS = 1,687RTW_MODE_WMM_PS = 2,688};689690enum rtw_lps_deep_mode {691LPS_DEEP_MODE_NONE = 0,692LPS_DEEP_MODE_LCLK = 1,693LPS_DEEP_MODE_PG = 2,694};695696enum rtw_pwr_state {697RTW_RF_OFF = 0x0,698RTW_RF_ON = 0x4,699RTW_ALL_ON = 0xc,700};701702struct rtw_lps_conf {703enum rtw_lps_mode mode;704enum rtw_lps_deep_mode deep_mode;705enum rtw_lps_deep_mode wow_deep_mode;706enum rtw_pwr_state state;707u8 awake_interval;708u8 rlbm;709u8 smart_ps;710u8 port_id;711bool sec_cam_backup;712bool pattern_cam_backup;713};714715enum rtw_hw_key_type {716RTW_CAM_NONE = 0,717RTW_CAM_WEP40 = 1,718RTW_CAM_TKIP = 2,719RTW_CAM_AES = 4,720RTW_CAM_WEP104 = 5,721};722723struct rtw_cam_entry {724bool valid;725bool group;726u8 addr[ETH_ALEN];727u8 hw_key_type;728struct ieee80211_key_conf *key;729};730731struct rtw_sec_desc {732/* search strategy */733bool default_key_search;734735u32 total_cam_num;736struct rtw_cam_entry cam_table[RTW_MAX_SEC_CAM_NUM];737DECLARE_BITMAP(cam_map, RTW_MAX_SEC_CAM_NUM);738};739740struct rtw_tx_report {741/* protect the tx report queue */742spinlock_t q_lock;743struct sk_buff_head queue;744atomic_t sn;745struct timer_list purge_timer;746};747748struct rtw_ra_report {749struct rate_info txrate;750u32 bit_rate;751u8 desc_rate;752};753754struct rtw_txq {755struct list_head list;756unsigned long flags;757};758759DECLARE_EWMA(rssi, 10, 16);760761struct rtw_sta_info {762struct rtw_dev *rtwdev;763struct ieee80211_sta *sta;764struct ieee80211_vif *vif;765766struct ewma_rssi avg_rssi;767u8 rssi_level;768769u8 mac_id;770u8 rate_id;771enum rtw_bandwidth bw_mode;772u8 stbc_en:2;773u8 ldpc_en:2;774bool sgi_enable;775bool vht_enable;776u8 init_ra_lv;777u64 ra_mask;778779DECLARE_BITMAP(tid_ba, IEEE80211_NUM_TIDS);780781struct rtw_ra_report ra_report;782783bool use_cfg_mask;784struct cfg80211_bitrate_mask *mask;785786struct work_struct rc_work;787};788789enum rtw_bfee_role {790RTW_BFEE_NONE,791RTW_BFEE_SU,792RTW_BFEE_MU793};794795struct rtw_bfee {796enum rtw_bfee_role role;797798u16 p_aid;799u8 g_id;800u8 mac_addr[ETH_ALEN];801u8 sound_dim;802803/* SU-MIMO */804u8 su_reg_index;805806/* MU-MIMO */807u16 aid;808};809810struct rtw_bf_info {811u8 bfer_mu_cnt;812u8 bfer_su_cnt;813DECLARE_BITMAP(bfer_su_reg_maping, 2);814u8 cur_csi_rpt_rate;815};816817struct rtw_vif {818enum rtw_net_type net_type;819u16 aid;820u8 mac_id;821u8 mac_addr[ETH_ALEN];822u8 bssid[ETH_ALEN];823u8 port;824u8 bcn_ctrl;825struct list_head rsvd_page_list;826struct ieee80211_tx_queue_params tx_params[IEEE80211_NUM_ACS];827const struct rtw_vif_port *conf;828struct cfg80211_scan_request *scan_req;829struct ieee80211_scan_ies *scan_ies;830831struct rtw_traffic_stats stats;832833struct rtw_bfee bfee;834};835836struct rtw_regulatory {837char alpha2[2] __nonstring;838u8 txpwr_regd_2g;839u8 txpwr_regd_5g;840};841842enum rtw_regd_state {843RTW_REGD_STATE_WORLDWIDE,844RTW_REGD_STATE_PROGRAMMED,845RTW_REGD_STATE_SETTING,846847RTW_REGD_STATE_NR,848};849850struct rtw_regd {851enum rtw_regd_state state;852const struct rtw_regulatory *regulatory;853enum nl80211_dfs_regions dfs_region;854};855856struct rtw_chip_ops {857int (*power_on)(struct rtw_dev *rtwdev);858void (*power_off)(struct rtw_dev *rtwdev);859int (*mac_init)(struct rtw_dev *rtwdev);860int (*mac_postinit)(struct rtw_dev *rtwdev);861int (*dump_fw_crash)(struct rtw_dev *rtwdev);862void (*shutdown)(struct rtw_dev *rtwdev);863int (*read_efuse)(struct rtw_dev *rtwdev, u8 *map);864void (*phy_set_param)(struct rtw_dev *rtwdev);865void (*set_channel)(struct rtw_dev *rtwdev, u8 channel,866u8 bandwidth, u8 primary_chan_idx);867void (*query_phy_status)(struct rtw_dev *rtwdev, u8 *phy_status,868struct rtw_rx_pkt_stat *pkt_stat);869u32 (*read_rf)(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,870u32 addr, u32 mask);871bool (*write_rf)(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,872u32 addr, u32 mask, u32 data);873void (*set_tx_power_index)(struct rtw_dev *rtwdev);874int (*rsvd_page_dump)(struct rtw_dev *rtwdev, u8 *buf, u32 offset,875u32 size);876int (*set_antenna)(struct rtw_dev *rtwdev, int radio_idx,877u32 antenna_tx,878u32 antenna_rx);879void (*cfg_ldo25)(struct rtw_dev *rtwdev, bool enable);880void (*efuse_grant)(struct rtw_dev *rtwdev, bool enable);881void (*set_ampdu_factor)(struct rtw_dev *rtwdev, u8 factor);882void (*false_alarm_statistics)(struct rtw_dev *rtwdev);883void (*phy_calibration)(struct rtw_dev *rtwdev);884void (*dpk_track)(struct rtw_dev *rtwdev);885void (*cck_pd_set)(struct rtw_dev *rtwdev, u8 level);886void (*pwr_track)(struct rtw_dev *rtwdev);887void (*config_bfee)(struct rtw_dev *rtwdev, struct rtw_vif *vif,888struct rtw_bfee *bfee, bool enable);889void (*set_gid_table)(struct rtw_dev *rtwdev,890struct ieee80211_vif *vif,891struct ieee80211_bss_conf *conf);892void (*cfg_csi_rate)(struct rtw_dev *rtwdev, u8 rssi, u8 cur_rate,893u8 fixrate_en, u8 *new_rate);894void (*adaptivity_init)(struct rtw_dev *rtwdev);895void (*adaptivity)(struct rtw_dev *rtwdev);896void (*cfo_init)(struct rtw_dev *rtwdev);897void (*cfo_track)(struct rtw_dev *rtwdev);898void (*config_tx_path)(struct rtw_dev *rtwdev, u8 tx_path,899enum rtw_bb_path tx_path_1ss,900enum rtw_bb_path tx_path_cck,901bool is_tx2_path);902void (*config_txrx_mode)(struct rtw_dev *rtwdev, u8 tx_path,903u8 rx_path, bool is_tx2_path);904void (*led_set)(struct led_classdev *led, enum led_brightness brightness);905/* for USB/SDIO only */906void (*fill_txdesc_checksum)(struct rtw_dev *rtwdev,907struct rtw_tx_pkt_info *pkt_info,908u8 *txdesc);909910/* for coex */911void (*coex_set_init)(struct rtw_dev *rtwdev);912void (*coex_set_ant_switch)(struct rtw_dev *rtwdev,913u8 ctrl_type, u8 pos_type);914void (*coex_set_gnt_fix)(struct rtw_dev *rtwdev);915void (*coex_set_gnt_debug)(struct rtw_dev *rtwdev);916void (*coex_set_rfe_type)(struct rtw_dev *rtwdev);917void (*coex_set_wl_tx_power)(struct rtw_dev *rtwdev, u8 wl_pwr);918void (*coex_set_wl_rx_gain)(struct rtw_dev *rtwdev, bool low_gain);919};920921#define RTW_PWR_POLLING_CNT 20000922923#define RTW_PWR_CMD_READ 0x00924#define RTW_PWR_CMD_WRITE 0x01925#define RTW_PWR_CMD_POLLING 0x02926#define RTW_PWR_CMD_DELAY 0x03927#define RTW_PWR_CMD_END 0x04928929/* define the base address of each block */930#define RTW_PWR_ADDR_MAC 0x00931#define RTW_PWR_ADDR_USB 0x01932#define RTW_PWR_ADDR_PCIE 0x02933#define RTW_PWR_ADDR_SDIO 0x03934935#define RTW_PWR_INTF_SDIO_MSK BIT(0)936#define RTW_PWR_INTF_USB_MSK BIT(1)937#define RTW_PWR_INTF_PCI_MSK BIT(2)938#define RTW_PWR_INTF_ALL_MSK (BIT(0) | BIT(1) | BIT(2) | BIT(3))939940#define RTW_PWR_CUT_TEST_MSK BIT(0)941#define RTW_PWR_CUT_A_MSK BIT(1)942#define RTW_PWR_CUT_B_MSK BIT(2)943#define RTW_PWR_CUT_C_MSK BIT(3)944#define RTW_PWR_CUT_D_MSK BIT(4)945#define RTW_PWR_CUT_E_MSK BIT(5)946#define RTW_PWR_CUT_F_MSK BIT(6)947#define RTW_PWR_CUT_G_MSK BIT(7)948#define RTW_PWR_CUT_ALL_MSK 0xFF949950enum rtw_pwr_seq_cmd_delay_unit {951RTW_PWR_DELAY_US,952RTW_PWR_DELAY_MS,953};954955struct rtw_pwr_seq_cmd {956u16 offset;957u8 cut_mask;958u8 intf_mask;959u8 base:4;960u8 cmd:4;961u8 mask;962u8 value;963};964965enum rtw_chip_ver {966RTW_CHIP_VER_CUT_A = 0x00,967RTW_CHIP_VER_CUT_B = 0x01,968RTW_CHIP_VER_CUT_C = 0x02,969RTW_CHIP_VER_CUT_D = 0x03,970RTW_CHIP_VER_CUT_E = 0x04,971RTW_CHIP_VER_CUT_F = 0x05,972RTW_CHIP_VER_CUT_G = 0x06,973};974975#define RTW_INTF_PHY_PLATFORM_ALL 0976977enum rtw_intf_phy_cut {978RTW_INTF_PHY_CUT_A = BIT(0),979RTW_INTF_PHY_CUT_B = BIT(1),980RTW_INTF_PHY_CUT_C = BIT(2),981RTW_INTF_PHY_CUT_D = BIT(3),982RTW_INTF_PHY_CUT_E = BIT(4),983RTW_INTF_PHY_CUT_F = BIT(5),984RTW_INTF_PHY_CUT_G = BIT(6),985RTW_INTF_PHY_CUT_ALL = 0xFFFF,986};987988enum rtw_ip_sel {989RTW_IP_SEL_PHY = 0,990RTW_IP_SEL_MAC = 1,991RTW_IP_SEL_DBI = 2,992993RTW_IP_SEL_UNDEF = 0xFFFF994};995996enum rtw_pq_map_id {997RTW_PQ_MAP_VO = 0x0,998RTW_PQ_MAP_VI = 0x1,999RTW_PQ_MAP_BE = 0x2,1000RTW_PQ_MAP_BK = 0x3,1001RTW_PQ_MAP_MG = 0x4,1002RTW_PQ_MAP_HI = 0x5,1003RTW_PQ_MAP_NUM = 0x6,10041005RTW_PQ_MAP_UNDEF,1006};10071008enum rtw_dma_mapping {1009RTW_DMA_MAPPING_EXTRA = 0,1010RTW_DMA_MAPPING_LOW = 1,1011RTW_DMA_MAPPING_NORMAL = 2,1012RTW_DMA_MAPPING_HIGH = 3,10131014RTW_DMA_MAPPING_MAX,1015RTW_DMA_MAPPING_UNDEF,1016};10171018struct rtw_rqpn {1019enum rtw_dma_mapping dma_map_vo;1020enum rtw_dma_mapping dma_map_vi;1021enum rtw_dma_mapping dma_map_be;1022enum rtw_dma_mapping dma_map_bk;1023enum rtw_dma_mapping dma_map_mg;1024enum rtw_dma_mapping dma_map_hi;1025};10261027struct rtw_prioq_addr {1028u32 rsvd;1029u32 avail;1030};10311032struct rtw_prioq_addrs {1033struct rtw_prioq_addr prio[RTW_DMA_MAPPING_MAX];1034bool wsize;1035};10361037struct rtw_page_table {1038u16 hq_num;1039u16 nq_num;1040u16 lq_num;1041u16 exq_num;1042u16 gapq_num;1043};10441045struct rtw_intf_phy_para {1046u16 offset;1047u16 value;1048u16 ip_sel;1049u16 cut_mask;1050u16 platform;1051};10521053struct rtw_wow_pattern {1054u16 crc;1055u8 type;1056u8 valid;1057u8 mask[RTW_MAX_PATTERN_MASK_SIZE];1058};10591060struct rtw_pno_request {1061bool inited;1062u32 match_set_cnt;1063struct cfg80211_match_set *match_sets;1064u8 channel_cnt;1065struct ieee80211_channel *channels;1066struct cfg80211_sched_scan_plan scan_plan;1067};10681069struct rtw_wow_param {1070struct ieee80211_vif *wow_vif;1071DECLARE_BITMAP(flags, RTW_WOW_FLAG_MAX);1072u8 txpause;1073u8 pattern_cnt;1074struct rtw_wow_pattern patterns[RTW_MAX_PATTERN_NUM];10751076bool ips_enabled;1077struct rtw_pno_request pno_req;1078};10791080struct rtw_intf_phy_para_table {1081const struct rtw_intf_phy_para *usb2_para;1082const struct rtw_intf_phy_para *usb3_para;1083const struct rtw_intf_phy_para *gen1_para;1084const struct rtw_intf_phy_para *gen2_para;1085u8 n_usb2_para;1086u8 n_usb3_para;1087u8 n_gen1_para;1088u8 n_gen2_para;1089};10901091struct rtw_table {1092const void *data;1093const u32 size;1094void (*parse)(struct rtw_dev *rtwdev, const struct rtw_table *tbl);1095void (*do_cfg)(struct rtw_dev *rtwdev, const struct rtw_table *tbl,1096u32 addr, u32 data);1097enum rtw_rf_path rf_path;1098};10991100static inline void rtw_load_table(struct rtw_dev *rtwdev,1101const struct rtw_table *tbl)1102{1103(*tbl->parse)(rtwdev, tbl);1104}11051106enum rtw_rfe_fem {1107RTW_RFE_IFEM,1108RTW_RFE_EFEM,1109RTW_RFE_IFEM2G_EFEM5G,1110RTW_RFE_NUM,1111};11121113struct rtw_rfe_def {1114const struct rtw_table *phy_pg_tbl;1115const struct rtw_table *txpwr_lmt_tbl;1116const struct rtw_pwr_track_tbl *pwr_track_tbl;1117const struct rtw_table *agc_btg_tbl;1118};11191120#define RTW_DEF_RFE(chip, bb_pg, pwrlmt, track) { \1121.phy_pg_tbl = &rtw ## chip ## _bb_pg_type ## bb_pg ## _tbl, \1122.txpwr_lmt_tbl = &rtw ## chip ## _txpwr_lmt_type ## pwrlmt ## _tbl, \1123.pwr_track_tbl = &rtw ## chip ## _pwr_track_type ## track ## _tbl, \1124}11251126#define RTW_DEF_RFE_EXT(chip, bb_pg, pwrlmt, track, btg) { \1127.phy_pg_tbl = &rtw ## chip ## _bb_pg_type ## bb_pg ## _tbl, \1128.txpwr_lmt_tbl = &rtw ## chip ## _txpwr_lmt_type ## pwrlmt ## _tbl, \1129.pwr_track_tbl = &rtw ## chip ## _pwr_track_type ## track ## _tbl, \1130.agc_btg_tbl = &rtw ## chip ## _agc_btg_type ## btg ## _tbl, \1131}11321133#define RTW_PWR_TRK_5G_1 01134#define RTW_PWR_TRK_5G_2 11135#define RTW_PWR_TRK_5G_3 21136#define RTW_PWR_TRK_5G_NUM 311371138#define RTW_PWR_TRK_TBL_SZ 3011391140/* This table stores the values of TX power that will be adjusted by power1141* tracking.1142*1143* For 5G bands, there are 3 different settings.1144* For 2G there are cck rate and ofdm rate with different settings.1145*/1146struct rtw_pwr_track_tbl {1147const u8 *pwrtrk_5gd_n[RTW_PWR_TRK_5G_NUM];1148const u8 *pwrtrk_5gd_p[RTW_PWR_TRK_5G_NUM];1149const u8 *pwrtrk_5gc_n[RTW_PWR_TRK_5G_NUM];1150const u8 *pwrtrk_5gc_p[RTW_PWR_TRK_5G_NUM];1151const u8 *pwrtrk_5gb_n[RTW_PWR_TRK_5G_NUM];1152const u8 *pwrtrk_5gb_p[RTW_PWR_TRK_5G_NUM];1153const u8 *pwrtrk_5ga_n[RTW_PWR_TRK_5G_NUM];1154const u8 *pwrtrk_5ga_p[RTW_PWR_TRK_5G_NUM];1155const u8 *pwrtrk_2gd_n;1156const u8 *pwrtrk_2gd_p;1157const u8 *pwrtrk_2gc_n;1158const u8 *pwrtrk_2gc_p;1159const u8 *pwrtrk_2gb_n;1160const u8 *pwrtrk_2gb_p;1161const u8 *pwrtrk_2ga_n;1162const u8 *pwrtrk_2ga_p;1163const u8 *pwrtrk_2g_cckd_n;1164const u8 *pwrtrk_2g_cckd_p;1165const u8 *pwrtrk_2g_cckc_n;1166const u8 *pwrtrk_2g_cckc_p;1167const u8 *pwrtrk_2g_cckb_n;1168const u8 *pwrtrk_2g_cckb_p;1169const u8 *pwrtrk_2g_ccka_n;1170const u8 *pwrtrk_2g_ccka_p;1171const s8 *pwrtrk_xtal_n;1172const s8 *pwrtrk_xtal_p;1173};11741175enum rtw_wlan_cpu {1176RTW_WCPU_3081,1177RTW_WCPU_8051,1178};11791180enum rtw_fw_fifo_sel {1181RTW_FW_FIFO_SEL_TX,1182RTW_FW_FIFO_SEL_RX,1183RTW_FW_FIFO_SEL_RSVD_PAGE,1184RTW_FW_FIFO_SEL_REPORT,1185RTW_FW_FIFO_SEL_LLT,1186RTW_FW_FIFO_SEL_RXBUF_FW,11871188RTW_FW_FIFO_MAX,1189};11901191enum rtw_fwcd_item {1192RTW_FWCD_TLV,1193RTW_FWCD_REG,1194RTW_FWCD_ROM,1195RTW_FWCD_IMEM,1196RTW_FWCD_DMEM,1197RTW_FWCD_EMEM,1198};11991200/* hardware configuration for each IC */1201struct rtw_chip_info {1202const struct rtw_chip_ops *ops;1203u8 id;12041205const char *fw_name;1206enum rtw_wlan_cpu wlan_cpu;1207u8 tx_pkt_desc_sz;1208u8 tx_buf_desc_sz;1209u8 rx_pkt_desc_sz;1210u8 rx_buf_desc_sz;1211u32 phy_efuse_size;1212u32 log_efuse_size;1213u32 ptct_efuse_size;1214u32 txff_size;1215u32 rxff_size;1216u32 fw_rxff_size;1217u16 rsvd_drv_pg_num;1218u8 band;1219u16 page_size;1220u8 csi_buf_pg_num;1221u8 dig_max;1222u8 dig_min;1223u8 txgi_factor;1224bool is_pwr_by_rate_dec;1225bool rx_ldpc;1226bool tx_stbc;1227u8 max_power_index;1228u8 ampdu_density;12291230u16 fw_fifo_addr[RTW_FW_FIFO_MAX];1231const struct rtw_fwcd_segs *fwcd_segs;12321233bool amsdu_in_ampdu;1234u8 usb_tx_agg_desc_num;1235bool hw_feature_report;1236u8 c2h_ra_report_size;1237bool old_datarate_fb_limit;12381239u8 default_1ss_tx_path;12401241bool path_div_supported;1242bool ht_supported;1243bool vht_supported;1244u8 lps_deep_mode_supported;12451246/* init values */1247u8 sys_func_en;1248const struct rtw_pwr_seq_cmd * const *pwr_on_seq;1249const struct rtw_pwr_seq_cmd * const *pwr_off_seq;1250const struct rtw_rqpn *rqpn_table;1251const struct rtw_prioq_addrs *prioq_addrs;1252const struct rtw_page_table *page_table;1253const struct rtw_intf_phy_para_table *intf_table;12541255const struct rtw_hw_reg *dig;1256const struct rtw_hw_reg *dig_cck;1257u32 rf_base_addr[RTW_RF_PATH_MAX];1258u32 rf_sipi_addr[RTW_RF_PATH_MAX];1259const struct rtw_rf_sipi_addr *rf_sipi_read_addr;1260u8 fix_rf_phy_num;1261const struct rtw_ltecoex_addr *ltecoex_addr;12621263const struct rtw_table *mac_tbl;1264const struct rtw_table *agc_tbl;1265const struct rtw_table *bb_tbl;1266const struct rtw_table *rf_tbl[RTW_RF_PATH_MAX];1267const struct rtw_table *rfk_init_tbl;12681269const struct rtw_rfe_def *rfe_defs;1270u32 rfe_defs_size;12711272bool en_dis_dpd;1273u16 dpd_ratemask;1274u8 iqk_threshold;1275u8 lck_threshold;12761277u8 bfer_su_max_num;1278u8 bfer_mu_max_num;12791280const struct rtw_hw_reg_offset *edcca_th;1281s8 l2h_th_ini_cs;1282s8 l2h_th_ini_ad;12831284const char *wow_fw_name;1285const struct wiphy_wowlan_support *wowlan_stub;1286const u8 max_sched_scan_ssids;1287const u16 max_scan_ie_len;12881289/* coex paras */1290u32 coex_para_ver;1291u8 bt_desired_ver;1292bool scbd_support;1293bool new_scbd10_def; /* true: fix 2M(8822c) */1294bool ble_hid_profile_support;1295bool wl_mimo_ps_support;1296u8 pstdma_type; /* 0: LPSoff, 1:LPSon */1297u8 bt_rssi_type;1298u8 ant_isolation;1299u8 rssi_tolerance;1300u8 table_sant_num;1301u8 table_nsant_num;1302u8 tdma_sant_num;1303u8 tdma_nsant_num;1304u8 bt_afh_span_bw20;1305u8 bt_afh_span_bw40;1306u8 afh_5g_num;1307u8 wl_rf_para_num;1308u8 coex_info_hw_regs_num;1309const u8 *bt_rssi_step;1310const u8 *wl_rssi_step;1311const struct coex_table_para *table_nsant;1312const struct coex_table_para *table_sant;1313const struct coex_tdma_para *tdma_sant;1314const struct coex_tdma_para *tdma_nsant;1315const struct coex_rf_para *wl_rf_para_tx;1316const struct coex_rf_para *wl_rf_para_rx;1317const struct coex_5g_afh_map *afh_5g;1318const struct rtw_hw_reg *btg_reg;1319const struct rtw_reg_domain *coex_info_hw_regs;1320u32 wl_fw_desired_ver;1321};13221323enum rtw_coex_bt_state_cnt {1324COEX_CNT_BT_RETRY,1325COEX_CNT_BT_REINIT,1326COEX_CNT_BT_REENABLE,1327COEX_CNT_BT_POPEVENT,1328COEX_CNT_BT_SETUPLINK,1329COEX_CNT_BT_IGNWLANACT,1330COEX_CNT_BT_INQ,1331COEX_CNT_BT_PAGE,1332COEX_CNT_BT_ROLESWITCH,1333COEX_CNT_BT_AFHUPDATE,1334COEX_CNT_BT_INFOUPDATE,1335COEX_CNT_BT_IQK,1336COEX_CNT_BT_IQKFAIL,13371338COEX_CNT_BT_MAX1339};13401341enum rtw_coex_wl_state_cnt {1342COEX_CNT_WL_SCANAP,1343COEX_CNT_WL_CONNPKT,1344COEX_CNT_WL_COEXRUN,1345COEX_CNT_WL_NOISY0,1346COEX_CNT_WL_NOISY1,1347COEX_CNT_WL_NOISY2,1348COEX_CNT_WL_5MS_NOEXTEND,1349COEX_CNT_WL_FW_NOTIFY,13501351COEX_CNT_WL_MAX1352};13531354struct rtw_coex_rfe {1355bool ant_switch_exist;1356bool ant_switch_diversity;1357bool ant_switch_with_bt;1358u8 rfe_module_type;1359u8 ant_switch_polarity;13601361/* true if WLG at BTG, else at WLAG */1362bool wlg_at_btg;1363};13641365#define COEX_WL_TDMA_PARA_LENGTH 513661367struct rtw_coex_dm {1368bool cur_ps_tdma_on;1369bool cur_wl_rx_low_gain_en;1370bool ignore_wl_act;13711372u8 reason;1373u8 bt_rssi_state[4];1374u8 wl_rssi_state[4];1375u8 wl_ch_info[3];1376u8 cur_ps_tdma;1377u8 cur_table;1378u8 ps_tdma_para[5];1379u8 cur_bt_pwr_lvl;1380u8 cur_bt_lna_lvl;1381u8 cur_wl_pwr_lvl;1382u8 bt_status;1383u32 cur_ant_pos_type;1384u32 cur_switch_status;1385u32 setting_tdma;1386u8 fw_tdma_para[COEX_WL_TDMA_PARA_LENGTH];1387};13881389#define COEX_BTINFO_SRC_WL_FW 0x01390#define COEX_BTINFO_SRC_BT_RSP 0x11391#define COEX_BTINFO_SRC_BT_ACT 0x21392#define COEX_BTINFO_SRC_BT_IQK 0x31393#define COEX_BTINFO_SRC_BT_SCBD 0x41394#define COEX_BTINFO_SRC_H2C60 0x51395#define COEX_BTINFO_SRC_MAX 0x613961397#define COEX_INFO_FTP BIT(7)1398#define COEX_INFO_A2DP BIT(6)1399#define COEX_INFO_HID BIT(5)1400#define COEX_INFO_SCO_BUSY BIT(4)1401#define COEX_INFO_ACL_BUSY BIT(3)1402#define COEX_INFO_INQ_PAGE BIT(2)1403#define COEX_INFO_SCO_ESCO BIT(1)1404#define COEX_INFO_CONNECTION BIT(0)1405#define COEX_BTINFO_LENGTH_MAX 101406#define COEX_BTINFO_LENGTH 714071408#define COEX_BT_HIDINFO_LIST 0x01409#define COEX_BT_HIDINFO_A 0x11410#define COEX_BT_HIDINFO_NAME 314111412#define COEX_BT_HIDINFO_LENGTH 61413#define COEX_BT_HIDINFO_HANDLE_NUM 41414#define COEX_BT_HIDINFO_C2H_HANDLE 01415#define COEX_BT_HIDINFO_C2H_VENDOR 11416#define COEX_BT_BLE_HANDLE_THRS 0x101417#define COEX_BT_HIDINFO_NOTCON 0xff14181419struct rtw_coex_hid {1420u8 hid_handle;1421u8 hid_vendor;1422u8 hid_name[COEX_BT_HIDINFO_NAME];1423bool hid_info_completed;1424bool is_game_hid;1425};14261427struct rtw_coex_hid_handle_list {1428u8 cmd_id;1429u8 len;1430u8 subid;1431u8 handle_cnt;1432u8 handle[COEX_BT_HIDINFO_HANDLE_NUM];1433} __packed;14341435struct rtw_coex_hid_info_a {1436u8 cmd_id;1437u8 len;1438u8 subid;1439u8 handle;1440u8 vendor;1441u8 name[COEX_BT_HIDINFO_NAME];1442} __packed;14431444struct rtw_coex_stat {1445bool bt_disabled;1446bool bt_disabled_pre;1447bool bt_link_exist;1448bool bt_whck_test;1449bool bt_inq_page;1450bool bt_inq_remain;1451bool bt_inq;1452bool bt_page;1453bool bt_ble_voice;1454bool bt_ble_exist;1455bool bt_hfp_exist;1456bool bt_a2dp_exist;1457bool bt_hid_exist;1458bool bt_pan_exist; /* PAN or OPP */1459bool bt_opp_exist; /* OPP only */1460bool bt_acl_busy;1461bool bt_fix_2M;1462bool bt_setup_link;1463bool bt_multi_link;1464bool bt_multi_link_pre;1465bool bt_multi_link_remain;1466bool bt_a2dp_sink;1467bool bt_a2dp_active;1468bool bt_reenable;1469bool bt_ble_scan_en;1470bool bt_init_scan;1471bool bt_slave;1472bool bt_418_hid_exist;1473bool bt_ble_hid_exist;1474bool bt_game_hid_exist;1475bool bt_hid_handle_cnt;1476bool bt_mailbox_reply;14771478bool wl_under_lps;1479bool wl_under_ips;1480bool wl_hi_pri_task1;1481bool wl_hi_pri_task2;1482bool wl_force_lps_ctrl;1483bool wl_gl_busy;1484bool wl_linkscan_proc;1485bool wl_ps_state_fail;1486bool wl_tx_limit_en;1487bool wl_ampdu_limit_en;1488bool wl_connected;1489bool wl_slot_extend;1490bool wl_cck_lock;1491bool wl_cck_lock_pre;1492bool wl_cck_lock_ever;1493bool wl_connecting;1494bool wl_slot_toggle;1495bool wl_slot_toggle_change; /* if toggle to no-toggle */1496bool wl_mimo_ps;14971498u32 bt_supported_version;1499u32 bt_supported_feature;1500u32 hi_pri_tx;1501u32 hi_pri_rx;1502u32 lo_pri_tx;1503u32 lo_pri_rx;1504u32 patch_ver;1505u16 bt_reg_vendor_ae;1506u16 bt_reg_vendor_ac;1507s8 bt_rssi;1508u8 kt_ver;1509u8 gnt_workaround_state;1510u8 tdma_timer_base;1511u8 bt_profile_num;1512u8 bt_info_c2h[COEX_BTINFO_SRC_MAX][COEX_BTINFO_LENGTH_MAX];1513u8 bt_info_lb2;1514u8 bt_info_lb3;1515u8 bt_info_hb0;1516u8 bt_info_hb1;1517u8 bt_info_hb2;1518u8 bt_info_hb3;1519u8 bt_ble_scan_type;1520u8 bt_hid_pair_num;1521u8 bt_hid_slot;1522u8 bt_a2dp_bitpool;1523u8 bt_iqk_state;1524u8 bt_disable_cnt;15251526u16 wl_beacon_interval;1527u8 wl_noisy_level;1528u8 wl_fw_dbg_info[10];1529u8 wl_fw_dbg_info_pre[10];1530u8 wl_rx_rate;1531u8 wl_tx_rate;1532u8 wl_rts_rx_rate;1533u8 wl_coex_mode;1534u8 wl_iot_peer;1535u8 ampdu_max_time;1536u8 wl_tput_dir;15371538u8 wl_toggle_para[6];1539u8 wl_toggle_interval;15401541u16 score_board;1542u16 retry_limit;15431544/* counters to record bt states */1545u32 cnt_bt[COEX_CNT_BT_MAX];15461547/* counters to record wifi states */1548u32 cnt_wl[COEX_CNT_WL_MAX];15491550/* counters to record bt c2h data */1551u32 cnt_bt_info_c2h[COEX_BTINFO_SRC_MAX];15521553u32 darfrc;1554u32 darfrch;15551556struct rtw_coex_hid hid_info[COEX_BT_HIDINFO_HANDLE_NUM];1557struct rtw_coex_hid_handle_list hid_handle_list;1558};15591560struct rtw_coex {1561struct sk_buff_head queue;1562wait_queue_head_t wait;15631564bool under_5g;1565bool stop_dm;1566bool freeze;1567bool freerun;1568bool wl_rf_off;1569bool manual_control;15701571struct rtw_coex_stat stat;1572struct rtw_coex_dm dm;1573struct rtw_coex_rfe rfe;15741575struct delayed_work bt_relink_work;1576struct delayed_work bt_reenable_work;1577struct delayed_work defreeze_work;1578struct delayed_work wl_remain_work;1579struct delayed_work bt_remain_work;1580struct delayed_work wl_connecting_work;1581struct delayed_work bt_multi_link_remain_work;1582struct delayed_work wl_ccklock_work;15831584};15851586#define DPK_RF_REG_NUM 71587#define DPK_RF_PATH_NUM 21588#define DPK_BB_REG_NUM 181589#define DPK_CHANNEL_WIDTH_80 115901591DECLARE_EWMA(thermal, 10, 4);15921593struct rtw_dpk_info {1594bool is_dpk_pwr_on;1595bool is_reload;15961597DECLARE_BITMAP(dpk_path_ok, DPK_RF_PATH_NUM);15981599u8 thermal_dpk[DPK_RF_PATH_NUM];1600struct ewma_thermal avg_thermal[DPK_RF_PATH_NUM];16011602u32 gnt_control;1603u32 gnt_value;16041605u8 result[RTW_RF_PATH_MAX];1606u8 dpk_txagc[RTW_RF_PATH_MAX];1607u32 coef[RTW_RF_PATH_MAX][20];1608u16 dpk_gs[RTW_RF_PATH_MAX];1609u8 thermal_dpk_delta[RTW_RF_PATH_MAX];1610u8 pre_pwsf[RTW_RF_PATH_MAX];16111612u8 dpk_band;1613u8 dpk_ch;1614u8 dpk_bw;1615};16161617struct rtw_phy_cck_pd_reg {1618u32 reg_pd;1619u32 mask_pd;1620u32 reg_cs;1621u32 mask_cs;1622};16231624#define DACK_MSBK_BACKUP_NUM 0xf1625#define DACK_DCK_BACKUP_NUM 0x216261627struct rtw_swing_table {1628const u8 *p[RTW_RF_PATH_MAX];1629const u8 *n[RTW_RF_PATH_MAX];1630};16311632struct rtw_pkt_count {1633u16 num_bcn_pkt;1634u16 num_qry_pkt[DESC_RATE_MAX];1635};16361637DECLARE_EWMA(evm, 10, 4);1638DECLARE_EWMA(snr, 10, 4);16391640struct rtw_iqk_info {1641bool done;1642struct {1643u32 s1_x;1644u32 s1_y;1645u32 s0_x;1646u32 s0_y;1647} result;1648};16491650enum rtw_rf_band {1651RF_BAND_2G_CCK,1652RF_BAND_2G_OFDM,1653RF_BAND_5G_L,1654RF_BAND_5G_M,1655RF_BAND_5G_H,1656RF_BAND_MAX1657};16581659#define RF_GAIN_NUM 111660#define RF_HW_OFFSET_NUM 1016611662struct rtw_gapk_info {1663u32 rf3f_bp[RF_BAND_MAX][RF_GAIN_NUM][RTW_RF_PATH_MAX];1664u32 rf3f_fs[RTW_RF_PATH_MAX][RF_GAIN_NUM];1665bool txgapk_bp_done;1666s8 offset[RF_GAIN_NUM][RTW_RF_PATH_MAX];1667s8 fianl_offset[RF_GAIN_NUM][RTW_RF_PATH_MAX];1668u8 read_txgain;1669u8 channel;1670};16711672#define EDCCA_TH_L2H_IDX 01673#define EDCCA_TH_H2L_IDX 11674#define EDCCA_TH_L2H_LB 481675#define EDCCA_ADC_BACKOFF 121676#define EDCCA_IGI_BASE 501677#define EDCCA_IGI_L2H_DIFF 81678#define EDCCA_L2H_H2L_DIFF 71679#define EDCCA_L2H_H2L_DIFF_NORMAL 816801681enum rtw_edcca_mode {1682RTW_EDCCA_NORMAL = 0,1683RTW_EDCCA_ADAPTIVITY = 1,1684};16851686struct rtw_cfo_track {1687bool is_adjust;1688u8 crystal_cap;1689s32 cfo_tail[RTW_RF_PATH_MAX];1690s32 cfo_cnt[RTW_RF_PATH_MAX];1691u32 packet_count;1692u32 packet_count_pre;1693};16941695#define RRSR_INIT_2G 0x15f1696#define RRSR_INIT_5G 0x15016971698enum rtw_dm_cap {1699RTW_DM_CAP_NA,1700RTW_DM_CAP_TXGAPK,1701RTW_DM_CAP_NUM1702};17031704struct rtw_dm_info {1705u32 cck_fa_cnt;1706u32 ofdm_fa_cnt;1707u32 total_fa_cnt;1708u32 cck_cca_cnt;1709u32 ofdm_cca_cnt;1710u32 total_cca_cnt;17111712u32 cck_ok_cnt;1713u32 cck_err_cnt;1714u32 ofdm_ok_cnt;1715u32 ofdm_err_cnt;1716u32 ht_ok_cnt;1717u32 ht_err_cnt;1718u32 vht_ok_cnt;1719u32 vht_err_cnt;17201721u8 min_rssi;1722u8 pre_min_rssi;1723u16 fa_history[4];1724u8 igi_history[4];1725u8 igi_bitmap;1726bool damping;1727u8 damping_cnt;1728u8 damping_rssi;17291730u8 cck_gi_u_bnd;1731u8 cck_gi_l_bnd;17321733u8 fix_rate;1734u8 tx_rate;1735u32 rrsr_val_init;1736u32 rrsr_mask_min;1737u8 thermal_avg[RTW_RF_PATH_MAX];1738u8 thermal_meter_k;1739u8 thermal_meter_lck;1740s8 delta_power_index[RTW_RF_PATH_MAX];1741s8 delta_power_index_last[RTW_RF_PATH_MAX];1742u8 default_ofdm_index;1743u8 default_cck_index;1744bool pwr_trk_triggered;1745bool pwr_trk_init_trigger;1746struct ewma_thermal avg_thermal[RTW_RF_PATH_MAX];1747s8 txagc_remnant_cck;1748s8 txagc_remnant_ofdm[RTW_RF_PATH_MAX];1749u8 rx_cck_agc_report_type;17501751/* backup dack results for each path and I/Q */1752u32 dack_adck[RTW_RF_PATH_MAX];1753u16 dack_msbk[RTW_RF_PATH_MAX][2][DACK_MSBK_BACKUP_NUM];1754u8 dack_dck[RTW_RF_PATH_MAX][2][DACK_DCK_BACKUP_NUM];17551756struct rtw_dpk_info dpk_info;1757struct rtw_cfo_track cfo_track;17581759/* [bandwidth 0:20M/1:40M][number of path] */1760u8 cck_pd_lv[2][RTW_RF_PATH_MAX];1761u32 cck_fa_avg;1762u8 cck_pd_default;17631764/* save the last rx phy status for debug */1765s8 rx_snr[RTW_RF_PATH_MAX];1766u8 rx_evm_dbm[RTW_RF_PATH_MAX];1767s16 cfo_tail[RTW_RF_PATH_MAX];1768u8 rssi[RTW_RF_PATH_MAX];1769u8 curr_rx_rate;1770struct rtw_pkt_count cur_pkt_count;1771struct rtw_pkt_count last_pkt_count;1772struct ewma_evm ewma_evm[RTW_EVM_NUM];1773struct ewma_snr ewma_snr[RTW_SNR_NUM];17741775u32 dm_flags; /* enum rtw_dm_cap */1776struct rtw_iqk_info iqk;1777struct rtw_gapk_info gapk;1778bool is_bt_iqk_timeout;17791780s8 l2h_th_ini;1781enum rtw_edcca_mode edcca_mode;1782u8 scan_density;1783};17841785struct rtw_efuse {1786u32 size;1787u32 physical_size;1788u32 logical_size;1789u32 protect_size;17901791u8 addr[ETH_ALEN];1792u8 channel_plan;1793u8 country_code[2];1794u8 rf_board_option;1795u8 rfe_option;1796u8 power_track_type;1797u8 thermal_meter[RTW_RF_PATH_MAX];1798u8 thermal_meter_k;1799u8 crystal_cap;1800u8 ant_div_cfg;1801u8 ant_div_type;1802u8 regd;1803u8 afe;18041805u8 lna_type_2g;1806u8 lna_type_5g;1807u8 glna_type;1808u8 alna_type;1809bool ext_lna_2g;1810bool ext_lna_5g;1811u8 pa_type_2g;1812u8 pa_type_5g;1813u8 gpa_type;1814u8 apa_type;1815bool ext_pa_2g;1816bool ext_pa_5g;1817u8 tx_bb_swing_setting_2g;1818u8 tx_bb_swing_setting_5g;18191820bool btcoex;1821/* bt share antenna with wifi */1822bool share_ant;1823u8 bt_setting;18241825u8 usb_mode_switch;18261827struct {1828u8 hci;1829u8 bw;1830u8 ptcl;1831u8 nss;1832u8 ant_num;1833} hw_cap;18341835struct rtw_txpwr_idx txpwr_idx_table[4];1836};18371838struct rtw_phy_cond {1839#ifdef __LITTLE_ENDIAN1840u32 rfe:8;1841u32 intf:4;1842u32 pkg:4;1843u32 plat:4;1844u32 intf_rsvd:4;1845u32 cut:4;1846u32 branch:2;1847u32 neg:1;1848u32 pos:1;1849#else1850u32 pos:1;1851u32 neg:1;1852u32 branch:2;1853u32 cut:4;1854u32 intf_rsvd:4;1855u32 plat:4;1856u32 pkg:4;1857u32 intf:4;1858u32 rfe:8;1859#endif1860/* for intf:4 */1861#define INTF_PCIE BIT(0)1862#define INTF_USB BIT(1)1863#define INTF_SDIO BIT(2)1864/* for branch:2 */1865#define BRANCH_IF 01866#define BRANCH_ELIF 11867#define BRANCH_ELSE 21868#define BRANCH_ENDIF 31869};18701871struct rtw_phy_cond2 {1872#ifdef __LITTLE_ENDIAN1873u8 type_glna;1874u8 type_gpa;1875u8 type_alna;1876u8 type_apa;1877#else1878u8 type_apa;1879u8 type_alna;1880u8 type_gpa;1881u8 type_glna;1882#endif1883};18841885struct rtw_fifo_conf {1886/* tx fifo information */1887u16 rsvd_boundary;1888u16 rsvd_pg_num;1889u16 rsvd_drv_pg_num;1890u16 txff_pg_num;1891u16 acq_pg_num;1892u16 rsvd_drv_addr;1893u16 rsvd_h2c_info_addr;1894u16 rsvd_h2c_sta_info_addr;1895u16 rsvd_h2cq_addr;1896u16 rsvd_cpu_instr_addr;1897u16 rsvd_fw_txbuf_addr;1898u16 rsvd_csibuf_addr;1899const struct rtw_rqpn *rqpn;1900};19011902struct rtw_fwcd_desc {1903u32 size;1904u8 *next;1905u8 *data;1906};19071908struct rtw_fwcd_segs {1909const u32 *segs;1910u8 num;1911};19121913#define FW_CD_TYPE 0xffff1914#define FW_CD_LEN 41915#define FW_CD_VAL 0xaabbccdd1916struct rtw_fw_state {1917const struct firmware *firmware;1918struct rtw_dev *rtwdev;1919struct completion completion;1920struct rtw_fwcd_desc fwcd_desc;1921u16 version;1922u8 sub_version;1923u8 sub_index;1924u16 h2c_version;1925u32 feature;1926u32 feature_ext;1927enum rtw_fw_type type;1928};19291930enum rtw_sar_sources {1931RTW_SAR_SOURCE_NONE,1932RTW_SAR_SOURCE_COMMON,1933};19341935enum rtw_sar_bands {1936RTW_SAR_BAND_0,1937RTW_SAR_BAND_1,1938/* RTW_SAR_BAND_2, not used now */1939RTW_SAR_BAND_3,1940RTW_SAR_BAND_4,19411942RTW_SAR_BAND_NR,1943};19441945/* the union is reserved for other kinds of SAR sources1946* which might not re-use same format with array common.1947*/1948union rtw_sar_cfg {1949s8 common[RTW_SAR_BAND_NR];1950};19511952struct rtw_sar {1953enum rtw_sar_sources src;1954union rtw_sar_cfg cfg[RTW_RF_PATH_MAX][RTW_RATE_SECTION_NUM];1955};19561957struct rtw_hal {1958u32 rcr;19591960u32 chip_version;1961u8 cut_version;1962u8 mp_chip;1963u8 oem_id;1964u8 pkg_type;1965struct rtw_phy_cond phy_cond;1966struct rtw_phy_cond2 phy_cond2;1967bool rfe_btg;19681969u8 ps_mode;1970u8 current_channel;1971u8 current_primary_channel_index;1972u8 current_band_width;1973u8 current_band_type;1974u8 primary_channel;19751976/* center channel for different available bandwidth,1977* val of (bw > current_band_width) is invalid1978*/1979u8 cch_by_bw[RTW_MAX_CHANNEL_WIDTH + 1];19801981u8 sec_ch_offset;1982u8 rf_type;1983u8 rf_path_num;1984u8 rf_phy_num;1985u32 antenna_tx;1986u32 antenna_rx;1987u8 bfee_sts_cap;1988bool txrx_1ss;1989bool cck_high_power;19901991/* protect tx power section */1992struct mutex tx_power_mutex;1993s8 tx_pwr_by_rate_offset_2g[RTW_RF_PATH_MAX]1994[DESC_RATE_MAX];1995s8 tx_pwr_by_rate_offset_5g[RTW_RF_PATH_MAX]1996[DESC_RATE_MAX];1997s8 tx_pwr_by_rate_base_2g[RTW_RF_PATH_MAX]1998[RTW_RATE_SECTION_NUM];1999s8 tx_pwr_by_rate_base_5g[RTW_RF_PATH_MAX]2000[RTW_RATE_SECTION_NUM];2001s8 tx_pwr_limit_2g[RTW_REGD_MAX]2002[RTW_CHANNEL_WIDTH_MAX]2003[RTW_RATE_SECTION_NUM]2004[RTW_MAX_CHANNEL_NUM_2G];2005s8 tx_pwr_limit_5g[RTW_REGD_MAX]2006[RTW_CHANNEL_WIDTH_MAX]2007[RTW_RATE_SECTION_NUM]2008[RTW_MAX_CHANNEL_NUM_5G];2009s8 tx_pwr_tbl[RTW_RF_PATH_MAX]2010[DESC_RATE_MAX];20112012enum rtw_sar_bands sar_band;2013struct rtw_sar sar;20142015/* for 8821c set channel */2016u32 ch_param[3];2017};20182019struct rtw_path_div {2020enum rtw_bb_path current_tx_path;2021u32 path_a_sum;2022u32 path_b_sum;2023u16 path_a_cnt;2024u16 path_b_cnt;2025};20262027struct rtw_chan_info {2028int pri_ch_idx;2029int action_id;2030int bw;2031u8 extra_info;2032u8 channel;2033u16 timeout;2034};20352036struct rtw_chan_list {2037u32 buf_size;2038u32 ch_num;2039u32 size;2040u16 addr;2041};20422043struct rtw_hw_scan_info {2044struct ieee80211_vif *scanning_vif;2045u8 probe_pg_size;2046u8 op_pri_ch_idx;2047u8 op_pri_ch;2048u8 op_chan;2049u8 op_bw;2050};20512052struct rtw_dev {2053struct ieee80211_hw *hw;2054struct device *dev;20552056struct rtw_hci hci;20572058struct rtw_hw_scan_info scan_info;2059const struct rtw_chip_info *chip;2060struct rtw_hal hal;2061struct rtw_fifo_conf fifo;2062struct rtw_fw_state fw;2063struct rtw_efuse efuse;2064struct rtw_sec_desc sec;2065struct rtw_traffic_stats stats;2066struct rtw_regd regd;2067struct rtw_bf_info bf_info;20682069struct rtw_dm_info dm_info;2070struct rtw_coex coex;20712072/* ensures exclusive access from mac80211 callbacks */2073struct mutex mutex;20742075/* watch dog every 2 sec */2076struct delayed_work watch_dog_work;2077u32 watch_dog_cnt;20782079struct list_head rsvd_page_list;20802081/* c2h cmd queue & handler work */2082struct sk_buff_head c2h_queue;2083struct work_struct c2h_work;2084struct work_struct ips_work;2085struct work_struct fw_recovery_work;2086struct work_struct update_beacon_work;20872088/* used to protect txqs list */2089spinlock_t txq_lock;2090struct list_head txqs;2091struct workqueue_struct *tx_wq;2092struct work_struct tx_work;2093struct work_struct ba_work;20942095struct rtw_tx_report tx_report;20962097struct {2098/* indicate the mail box to use with fw */2099u8 last_box_num;2100u32 seq;2101} h2c;21022103/* lps power state & handler work */2104struct rtw_lps_conf lps_conf;2105bool ps_enabled;2106bool beacon_loss;2107struct completion lps_leave_check;21082109struct rtw_debugfs *debugfs;21102111u8 sta_cnt;2112u32 rts_threshold;21132114DECLARE_BITMAP(hw_port, RTW_PORT_NUM);2115DECLARE_BITMAP(mac_id_map, RTW_MAX_MAC_ID_NUM);2116DECLARE_BITMAP(flags, NUM_OF_RTW_FLAGS);21172118u8 mp_mode;2119struct rtw_path_div dm_path_div;21202121struct rtw_fw_state wow_fw;2122struct rtw_wow_param wow;21232124bool need_rfk;2125struct completion fw_scan_density;2126bool ap_active;21272128bool led_registered;2129char led_name[32];2130struct led_classdev led_cdev;21312132/* hci related data, must be last */2133u8 priv[] __aligned(sizeof(void *));2134};21352136#include "hci.h"21372138static inline bool rtw_is_assoc(struct rtw_dev *rtwdev)2139{2140return !!rtwdev->sta_cnt;2141}21422143static inline struct ieee80211_txq *rtwtxq_to_txq(struct rtw_txq *rtwtxq)2144{2145void *p = rtwtxq;21462147return container_of(p, struct ieee80211_txq, drv_priv);2148}21492150static inline struct ieee80211_vif *rtwvif_to_vif(struct rtw_vif *rtwvif)2151{2152void *p = rtwvif;21532154return container_of(p, struct ieee80211_vif, drv_priv);2155}21562157static inline void rtw_chip_efuse_grant_on(struct rtw_dev *rtwdev)2158{2159if (rtwdev->chip->ops->efuse_grant)2160rtwdev->chip->ops->efuse_grant(rtwdev, true);2161}21622163static inline void rtw_chip_efuse_grant_off(struct rtw_dev *rtwdev)2164{2165if (rtwdev->chip->ops->efuse_grant)2166rtwdev->chip->ops->efuse_grant(rtwdev, false);2167}21682169static inline bool rtw_chip_wcpu_8051(struct rtw_dev *rtwdev)2170{2171return rtwdev->chip->wlan_cpu == RTW_WCPU_8051;2172}21732174static inline bool rtw_chip_wcpu_3081(struct rtw_dev *rtwdev)2175{2176return rtwdev->chip->wlan_cpu == RTW_WCPU_3081;2177}21782179static inline bool rtw_chip_has_rx_ldpc(struct rtw_dev *rtwdev)2180{2181return rtwdev->chip->rx_ldpc;2182}21832184static inline bool rtw_chip_has_tx_stbc(struct rtw_dev *rtwdev)2185{2186return rtwdev->chip->tx_stbc;2187}21882189static inline u8 rtw_acquire_macid(struct rtw_dev *rtwdev)2190{2191unsigned long mac_id;21922193mac_id = find_first_zero_bit(rtwdev->mac_id_map, RTW_MAX_MAC_ID_NUM);2194if (mac_id < RTW_MAX_MAC_ID_NUM)2195set_bit(mac_id, rtwdev->mac_id_map);21962197return mac_id;2198}21992200static inline void rtw_release_macid(struct rtw_dev *rtwdev, u8 mac_id)2201{2202clear_bit(mac_id, rtwdev->mac_id_map);2203}22042205static inline int rtw_chip_dump_fw_crash(struct rtw_dev *rtwdev)2206{2207if (rtwdev->chip->ops->dump_fw_crash)2208return rtwdev->chip->ops->dump_fw_crash(rtwdev);22092210return 0;2211}22122213static inline2214enum nl80211_band rtw_hw_to_nl80211_band(enum rtw_supported_band hw_band)2215{2216switch (hw_band) {2217default:2218case RTW_BAND_2G:2219return NL80211_BAND_2GHZ;2220case RTW_BAND_5G:2221return NL80211_BAND_5GHZ;2222case RTW_BAND_60G:2223return NL80211_BAND_60GHZ;2224}2225}22262227void rtw_set_rx_freq_band(struct rtw_rx_pkt_stat *pkt_stat, u8 channel);2228void rtw_set_dtim_period(struct rtw_dev *rtwdev, int dtim_period);2229void rtw_get_channel_params(struct cfg80211_chan_def *chandef,2230struct rtw_channel_params *ch_param);2231bool check_hw_ready(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 target);2232bool ltecoex_read_reg(struct rtw_dev *rtwdev, u16 offset, u32 *val);2233bool ltecoex_reg_write(struct rtw_dev *rtwdev, u16 offset, u32 value);2234void rtw_restore_reg(struct rtw_dev *rtwdev,2235struct rtw_backup_info *bckp, u32 num);2236void rtw_desc_to_mcsrate(u16 rate, u8 *mcs, u8 *nss);2237void rtw_set_channel(struct rtw_dev *rtwdev);2238void rtw_chip_prepare_tx(struct rtw_dev *rtwdev);2239void rtw_vif_port_config(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif,2240u32 config);2241void rtw_tx_report_purge_timer(struct timer_list *t);2242void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,2243bool reset_ra_mask);2244void rtw_core_scan_start(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif,2245const u8 *mac_addr, bool hw_scan);2246void rtw_core_scan_complete(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,2247bool hw_scan);2248int rtw_core_start(struct rtw_dev *rtwdev);2249void rtw_power_off(struct rtw_dev *rtwdev);2250void rtw_core_stop(struct rtw_dev *rtwdev);2251int rtw_chip_info_setup(struct rtw_dev *rtwdev);2252int rtw_core_init(struct rtw_dev *rtwdev);2253void rtw_core_deinit(struct rtw_dev *rtwdev);2254int rtw_register_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw);2255void rtw_unregister_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw);2256u16 rtw_desc_to_bitrate(u8 desc_rate);2257void rtw_vif_assoc_changed(struct rtw_vif *rtwvif,2258struct ieee80211_bss_conf *conf);2259int rtw_sta_add(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,2260struct ieee80211_vif *vif);2261void rtw_sta_remove(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,2262bool fw_exist);2263void rtw_fw_recovery(struct rtw_dev *rtwdev);2264int rtw_wait_firmware_completion(struct rtw_dev *rtwdev);2265int rtw_power_on(struct rtw_dev *rtwdev);2266void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start);2267int rtw_dump_fw(struct rtw_dev *rtwdev, const u32 ocp_src, u32 size,2268u32 fwcd_item);2269int rtw_dump_reg(struct rtw_dev *rtwdev, const u32 addr, const u32 size);2270void rtw_set_txrx_1ss(struct rtw_dev *rtwdev, bool config_1ss);2271void rtw_update_channel(struct rtw_dev *rtwdev, u8 center_channel,2272u8 primary_channel, enum rtw_supported_band band,2273enum rtw_bandwidth bandwidth);2274void rtw_core_port_switch(struct rtw_dev *rtwdev, struct ieee80211_vif *vif);2275bool rtw_core_check_sta_active(struct rtw_dev *rtwdev);2276void rtw_core_enable_beacon(struct rtw_dev *rtwdev, bool enable);2277void rtw_set_ampdu_factor(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,2278struct ieee80211_bss_conf *bss_conf);2279#endif228022812282