blob: c1f5aba3c5b0caca25595952a5a4764ac0726094 [file] [log] [blame]
/*
* Copyright (c) 2011-2012 Quantenna Communications, Inc.
* All rights reserved.
*/
#ifndef _QTN_GLOBAL_H
#define _QTN_GLOBAL_H
#define QTN_DEFAULT_LEGACY_RETRY_COUNT 4
#define QTN_GLOBAL_INIT_SELECT_GI_ENABLE 2
#define QTN_GLOBAL_INIT_SELECT_PPPC_ENABLE 1
#define QTN_GLOBAL_PSEL_MATRIX_ENABLE 1
#define QTN_GLOBAL_INIT_DEF_MATRIX 1
#define QTN_AC_BE_INHERIT_VO_NO_STA 4
#define QTN_AC_BE_INHERIT_VI_NO_STA 3
#define QTN_AC_BE_INHERIT_VO 2
#define QTN_AC_BE_INHERIT_VI 1
#define QTN_AC_BE_INHERIT_DISABLE 0
#define QTN_AC_BE_INHERIT_Q2Q_ENABLE 1
#define QTN_AC_BE_INHERIT_Q2Q_DISABLE 0
#define QTN_TXBF_IOT_DISABLE 0
#define QTN_TXBF_IOT_ENABLE 1
#define QTN_GLOBAL_MU_ENABLE 1
#define QTN_GLOBAL_MU_DISABLE 0
#define QTN_GLOBAL_MU_INITIAL_STATE QTN_GLOBAL_MU_DISABLE
#define QTN_AUTO_CS_ENABLE 1
#define QTN_AUTO_CS_DISABLE 0
/*
* The MuC TX Queuing algorithm is selected by setting
* g_tx_queuing_alg. Values are:
* 0 = Round robin
* 1 = Equal airtime
* 2 = Greedy best
* 3 = Round robin (filling to make a power of 4)
* x >= 4: algorithm chosen by (val % 4), with airtime
* debugs enabled, printed every (val) seconds.
*/
#define QTN_TX_QUEUING_ALG_ROUND_ROBIN 0
#define QTN_TX_QUEUING_ALG_EQUAL_AIRTIME 1
#define QTN_TX_QUEUING_ALG_GREEDY_BEST 2
#define QTN_TX_QUEUING_ALGS 4
#if QTN_TX_QUEUING_ALGS & (QTN_TX_QUEUING_ALGS - 1)
#error QTN_TX_QUEUING_ALGS should be a power of 2
#endif
#define QTN_GLOBAL_INIT_TX_QUEUING_ALG QTN_TX_QUEUING_ALG_ROUND_ROBIN
#define QTN_TX_AIRTIME_XMIT_BUMP_USECS 100
#define QTN_TX_BUF_RETURN_MIN 100
/* must be greater than the above to prevent stalling */
#define QDRV_TX_LOW_RATE_TOKENS_MAX QTN_TX_BUF_RETURN_MIN + 28
#define QTN_GLOBAL_RATE_NSS_MAX 4
#define QTN_2X2_GLOBAL_RATE_NSS_MAX 2
#define QTN_3X3_GLOBAL_RATE_NSS_MAX 3
#define QTN_RX_REORDER_BUF_TIMEOUT_US 800000
#define QTN_PROBE_RES_MAX_RETRY_COUNT 4
#define QTN_TX_SWRETRY_AGG_MAX 8 /* high value for zero PER */
#define QTN_TX_SWRETRY_NOAGG_MAX 1 /* add tx restrict check if this is increased */
#define QTN_TX_SWRETRY_SUSPEND_XMIT 4 /* sw retry when the sending frames are suspended */
#define QTN_TX_MSDU_EXPIRY 0 /* allow MSDUs to time out? */
#define QTN_TX_AGGREGATION 1 /* allow aggregation? */
#define QTN_CALSTATE_CALIB 1
#define QTN_CALSTATE_PROD 3
#define QTN_CALSTATE_DEFAULT QTN_CALSTATE_PROD
#define QTN_CALSTATE_IS_PROD() (likely(g_qtn_params.g_calstate == QTN_CALSTATE_PROD))
#define QTN_CALSTATE_VPD_LOG 0
#define QTN_CALSTATE_VPD_LINEAR 1
#define QTN_CALSTATE_MIN_TX_POWER 7
#define QTN_CALSTATE_MAX_TX_POWER 23
#define QTN_EMI_POWER_SWITCH_ENABLE 1
#define QTN_TX_AMSDU_DISABLED 0
#define QTN_TX_AMSDU_ADAPTIVE 1
#define QTN_TX_AMSDU_FIXED 0xff
#define QTN_SEL_PPPC_STEP_DEF 1
#define QTN_SEL_PPPC_MAX_STEPS 4
#define QTN_TX_AUC_DEFAULT 1
#define QTN_INST_1SS_DEF_MAT_THRESH_DEFAULT 2 /* dbm */
#define QTN_FLAG_ACT_FRAME_RTS_CTS 0x00000001
#define QTN_FLAG_ACT_FRAME_NO_LDPC 0x00000002
#define QTN_FLAG_MCS_UEQM_DISABLE 0x00000004
#define QTN_FLAG_AUC_TX 0x00000008
#define QTN_FLAG_RA_BW_SWITCHING_ENABLE_11N 0x00000010
#define QTN_FLAG_RA_BW_SWITCHING_ENABLE_11AC 0x00000020
#define QTN_GLOBAL_MUC_FLAGS_DEFAULT QTN_FLAG_RA_BW_SWITCHING_ENABLE_11N | \
QTN_FLAG_RA_BW_SWITCHING_ENABLE_11AC
#define QTN_NDPA_IN_HT_VHT_FORMAT 0
#define QTN_NDPA_IN_LEGACY_FORMAT 1
#define QTN_DBG_MODE_SEND_PWR_MGT 0x00000001
#define QTN_DBG_MODE_ACCEPT_PWR_MGT 0x00000002
#define QTN_DBG_MODE_TX_PKT_LOSS 0x00000004
#define QTN_DBG_MODE_DELBA_ON_TX_PKT_LOSS 0x00000008
#define QTN_DBG_MODE_CCA_FORCE 0x00000010
#define QTN_DBG_MODE_INJECT_INV_NDP 0x00000020
#define QTN_DBG_FD_CHECK_PERIODIC 0x00000001
#define QTN_DBG_FD_DUMP_OLD 0x00000002
#define QTN_DBG_FD_CHECK_ONESHOT 0x00000004
#define QTN_DBG_FD_DUMP_BCN_FAIL 0x00000008
#define QTN_DBG_FD_DUMP_VERBOSE 0x00000010 /* + top byte is the FD to dump */
#define QTN_DBG_DUMP_SC 0x00000020
#define QTN_DBG_DUMP_AGEQ 0x00000040
#define QTN_DBG_FD_FLAG_MASK 0x0000FFFF
#define QTN_HW_UPDATE_NDPA_DUR 0x0
#define QTN_TXBF_TX_CNT_DEF_THRSHLD 2
#if (defined(MUC_BUILD) || defined(SYSTEM_BUILD))
#define QTN_RX_GAIN_MIN_THRESHOLD 16
#define QTN_RX_GAIN_MAX_THRESHOLD 44
#define QTN_RX_GAIN_TIMER_INTV 1000 /* msecs */
/* counter for delay in RFIC6 500Mhz */
#define QTN_RFIC6_DELAY_MICRO_S 500
#define QTN_RFIC6_DELAY_MILI_S QTN_RFIC6_DELAY_MICRO_S * 1000
#define SIZE_D1(x) (sizeof(x)/sizeof(x[0]))
#define SIZE_D2(x) (sizeof(x[0])/sizeof(x[0][0]))
struct qtn_gain_settings {
uint8_t gain_flags;
/* Enable SW workaround for short range association */
#define QTN_AUTO_PWR_ADJUST_EN 0x1
/* Hardware supports automatic RX gain */
#define QTN_SHORTRANGE_SCANCNT_HW 0x2
uint32_t gain_cumulative; /* Cumulative gain for all rx pkts */
uint32_t gain_num_pkts; /* Number of pkts for which cumulative gain was considered */
uint32_t gain_timer;
uint32_t gain_min_thresh;
uint32_t gain_max_thresh;
uint32_t gain_timer_intv;
uint32_t gain_low_txpow;
int ext_lna_gain;
int ext_lna_bypass_gain;
};
#define QTN_SCS_MAX_OC_STATS 32
/* off channel params */
struct qtn_scs_oc_stats {
uint32_t oc_pri_chan;
uint32_t oc_bw_sel;
uint32_t oc_crc_cnt;
uint32_t oc_lp_cnt;
uint32_t oc_sp_cnt;
uint32_t oc_cca_pri;
uint32_t oc_cca_sec;
uint32_t oc_cca_sec40;
uint32_t oc_cca_busy;
uint32_t oc_cca_smpl;
uint32_t oc_cca_try;
uint32_t oc_bcn_recvd;
};
struct qtn_cca_counts {
uint32_t cca_pri_cnt;
uint32_t cca_sec_cnt;
uint32_t cca_sec40_cnt;
uint32_t cca_busy_cnt;
uint32_t cca_sample_cnt;
uint32_t cca_try_cnt;
uint32_t cca_csw_cnt;
uint32_t cca_off_pri_cnt;
uint32_t cca_off_sec_cnt;
uint32_t cca_off_sec40_cnt;
uint32_t cca_off_busy_cnt;
uint32_t cca_off_sample_cnt;
uint32_t cca_off_res_cnt;
uint32_t cca_off_try_cnt;
uint32_t cca_meas_cnt;
};
struct qtn_cca_stats {
uint32_t cca_sample_period;
uint32_t cca_pri_cnt;
uint32_t cca_sec_cnt;
uint32_t cca_sec40_cnt;
uint32_t cca_sample_cnt;
uint32_t cca_try_cnt;
uint32_t cca_csw_cnt;
uint32_t cca_off_try_cnt;
uint32_t cca_meas_cnt;
uint32_t cca_busy_cnt;
uint32_t cca_idle_cnt;
uint32_t cca_tx_cnt;
uint32_t rx_time_cnt;
uint32_t tx_time_cnt;
uint32_t cca_pri;
uint32_t cca_sec;
uint32_t cca_sec40;
uint32_t cca_busy;
uint32_t cca_fat;
uint32_t cca_intf;
uint32_t cca_trfc;
};
struct qtn_scs_params {
uint32_t cca_pri_cnt;
uint32_t cca_sec_cnt;
uint32_t cca_sec40_cnt;
uint32_t cca_busy_cnt;
uint32_t cca_sample_cnt;
uint32_t cca_try_cnt;
uint32_t cca_csw_cnt;
uint32_t cca_off_res_cnt;
uint32_t cca_off_try_cnt;
uint32_t cca_meas_cnt;
uint32_t tx_usecs;
uint32_t rx_usecs;
uint32_t bcn_recvd;
uint32_t oc_stats_index;
struct qtn_scs_oc_stats oc_stats[QTN_SCS_MAX_OC_STATS];
};
struct qtn_vsp_params {
uint32_t vsp_flags;
#define QTN_VSP_VSP_EN 0x01
#define QTN_VSP_FAT_DEBUG 0x02
#define QTN_VSP_NDCST_DEBUG 0x04
#define QTN_VSP_INTF_DEBUG 0x08
#define QTN_VSP_RTS_CTS_IN_USE 0x10
uint32_t timer_intv;
uint32_t check_secs;
uint32_t check_scale;
uint32_t fat_last;
uint32_t intf_ms;
uint32_t cca_pri_cnt;
uint32_t cca_sec_cnt;
uint32_t cca_sec40_cnt;
uint32_t cca_busy_cnt;
uint32_t cca_sample_cnt;
uint32_t cca_try_cnt;
uint32_t cca_csw_cnt;
uint32_t cca_off_res_cnt;
uint32_t cca_off_try_cnt;
uint32_t cca_meas_cnt;
uint32_t tot_tx_ms;
};
#define QTN_AUTO_CCA_SHORT_PREAMBLE_THRESHOLD 15000 /* If higher than this value, increase the CCA threshold */
#define QTN_AUTO_CCA_INTF_THRESHOLD 250 /* If higher than this value, increase the CCA threshold */
#define QTN_AUTO_CCA_THRESHOLD_MAX 0x10000 /* The max cca threshold we can set */
struct qtn_auto_cca_params {
#define QTN_AUTO_CCA_FLAGS_DISABLE 0x0
#define QTN_AUTO_CCA_FLAGS_ENABLE 0x1
#define QTN_AUTO_CCA_FLAGS_DEBUG 0x2
#define QTN_AUTO_CCA_FLAGS_SAMPLE_ONLY 0x4
uint32_t flags;
uint32_t spre_threshold;
uint32_t cca_intf_threshold;
uint32_t cca_threshold_max;
};
struct qtn_wowlan_params {
uint16_t host_state;
uint16_t wowlan_match;
uint16_t l2_ether_type;
uint16_t l3_udp_port;
};
#define QTN_AUTO_CCA_PARARMS_DEFAULT \
{ QTN_AUTO_CCA_FLAGS_ENABLE, QTN_AUTO_CCA_SHORT_PREAMBLE_THRESHOLD, \
QTN_AUTO_CCA_INTF_THRESHOLD, QTN_AUTO_CCA_THRESHOLD_MAX}
struct qtn_global_param {
uint32_t g_legacy_retry_count;
uint32_t g_dbg_check_flags;
uint32_t g_dbg_stop_flags;
uint32_t g_dbg_mode_flags;
uint8_t g_select_gi_enable;
uint8_t g_select_pppc_enable;
uint8_t g_rate_ht_nss_max;
uint8_t g_rate_vht_nss_max;
uint32_t g_rx_agg_timeout;
uint32_t g_muc_flags;
uint32_t g_probe_res_retries;
struct qtn_scs_params scs_params;
struct qtn_vsp_params vsp_params;
uint8_t g_slow_eth_war;
uint8_t g_tx_swretry_agg_max;
uint8_t g_tx_swretry_noagg_max;
uint8_t g_tx_swretry_suspend_xmit;
uint8_t g_tx_msdu_expiry;
uint8_t g_tx_aggregation;
uint32_t g_iot_tweaks;
uint8_t g_calstate;
uint8_t g_psel_mat_enable;
uint32_t g_ack_policy;
uint32_t g_dbg_fd_flags;
uint32_t g_qtn_disassoc_fd_threshold;
uint32_t g_qtn_qn_fd_threshold;
int32_t g_2_tx_chains_mimo_mode;
uint8_t g_calstate_tx_power;
uint8_t g_min_tx_power;
uint8_t g_max_tx_power;
uint8_t g_emi_power_switch_enable;
uint8_t g_dyn_agg_timeout;
int32_t g_sifs_mode;
uint8_t g_tx_amsdu;
uint32_t g_ralg_dbg_aid;
uint8_t g_select_pppc_step_option;
uint8_t g_11g_erp;
uint8_t g_single_agg_queuing;
uint8_t g_def_matrix;
uint32_t g_tx_restrict;
uint32_t g_tx_restrict_fd_limit;
uint32_t g_tx_restrict_rate; /* Max packets per second in Tx restrict mode */
uint32_t g_tx_restrict_attempts;
uint32_t g_rts_threshold; /* RTS threshold */
uint8_t g_tx_queuing_alg;
uint8_t g_1bit_enable; /* enable/disable 1bit */
uint32_t g_carrier_id; /* Get/Set carrier ID */
uint8_t g_rx_accelerate;
uint8_t g_rx_accel_lu_sa;
uint8_t g_tx_auc;
uint16_t g_tx_maxmpdu;
uint8_t g_tx_ac_inheritance; /* promote AC_BE traffic to vo/vi */
uint8_t g_txbf_iot; /* turn on/off TxBF IOT with non QTN node */
uint8_t g_tx_ac_q2q_inheritance;/* promote AC_BE traffic to vo/vi */
uint8_t g_tx_1ss_amsdu_supp; /* enable-disable 1ss AMSDU support - Non-qtn clients */
uint32_t g_vht_ndpa_dur; /* manual update VHT NDPA duration, if it is 0, then HW auto update */
uint32_t g_txbf_pkt_cnt; /* Tx operation count threshold to a TxBF station */
struct qtn_auto_cca_params g_auto_cca_params;
struct qtn_wowlan_params wowlan_params;
uint8_t g_rx_optim;
uint8_t g_airfair;
uint8_t g_cca_fixed;
uint8_t g_ndpa_legacy_format; /* Configure HT-VHT / Legacy frame format for NDP announcements */
uint8_t g_inst_1ss_def_mat_en; /* enable default 1ss matrix feature */
uint8_t g_inst_1ss_def_mat_thresh; /* the threshold to install defalut 1ss matrix */
uint32_t g_mu_enable; /* enable/disable MU Tx */
uint8_t g_l2_ext_filter; /* L2 external filter */
uint8_t g_l2_ext_filter_port; /* L2 external filter port */
uint8_t g_rate_train_dbg;
uint8_t g_rx_optim_pkt_stats;
uint8_t g_mrc_enable;
uint32_t g_auto_cs_enable; /* enable/disable auto cs threshold */
uint8_t g_beaconing_scheme;
uint32_t g_muc_sys_dbg;
char *g_last_field; /* Add all new fields before this one */
};
/* Please keep this structure in sync with qtn_global_param */
#define G_PARAMS_INIT { \
QTN_DEFAULT_LEGACY_RETRY_COUNT, \
0, \
0, \
0, \
QTN_GLOBAL_INIT_SELECT_GI_ENABLE, \
QTN_GLOBAL_INIT_SELECT_PPPC_ENABLE, \
QTN_GLOBAL_RATE_NSS_MAX, \
QTN_GLOBAL_RATE_NSS_MAX, \
QTN_RX_REORDER_BUF_TIMEOUT_US, \
QTN_GLOBAL_MUC_FLAGS_DEFAULT, \
QTN_PROBE_RES_MAX_RETRY_COUNT, \
{0,}, \
{0,}, \
0, \
QTN_TX_SWRETRY_AGG_MAX, \
QTN_TX_SWRETRY_NOAGG_MAX, \
QTN_TX_SWRETRY_SUSPEND_XMIT, \
QTN_TX_MSDU_EXPIRY, \
QTN_TX_AGGREGATION, \
QTN_IOT_DEFAULT_TWEAK, \
QTN_CALSTATE_DEFAULT, \
QTN_GLOBAL_PSEL_MATRIX_ENABLE, \
1, \
0, \
50, \
64, \
1, \
QTN_CALSTATE_VPD_LOG, \
QTN_CALSTATE_MIN_TX_POWER, \
QTN_CALSTATE_MAX_TX_POWER, \
QTN_EMI_POWER_SWITCH_ENABLE, \
0, \
2, \
QTN_TX_AMSDU_ADAPTIVE, \
0, \
QTN_SEL_PPPC_STEP_DEF, \
0, \
0, \
QTN_GLOBAL_INIT_DEF_MATRIX, \
1, \
IEEE80211_NODE_TX_RESTRICT_LIMIT, \
IEEE80211_TX_RESTRICT_RATE, \
IEEE80211_NODE_TX_RESTRICT_RETRY, \
IEEE80211_RTS_THRESH_OFF, \
QTN_GLOBAL_INIT_TX_QUEUING_ALG, \
1, \
0, \
1, \
1, \
QTN_TX_AUC_DEFAULT, \
IEEE80211_VHTCAP_MAX_MPDU_11454, \
QTN_AC_BE_INHERIT_VO, \
QTN_TXBF_IOT_ENABLE, \
QTN_AC_BE_INHERIT_Q2Q_ENABLE, \
QTN_TX_AMSDU_DISABLED, \
QTN_HW_UPDATE_NDPA_DUR, \
QTN_TXBF_TX_CNT_DEF_THRSHLD, \
QTN_AUTO_CCA_PARARMS_DEFAULT, \
{0, 0, 0x0842, 0xffff}, \
0, \
QTN_AUC_AIRFAIR_DFT, \
0, \
QTN_NDPA_IN_LEGACY_FORMAT, \
1, \
QTN_INST_1SS_DEF_MAT_THRESH_DEFAULT, \
QTN_GLOBAL_MU_INITIAL_STATE, \
0, \
TOPAZ_TQE_EMAC_0_PORT, \
0, \
0, \
1, \
QTN_AUTO_CS_ENABLE, \
0, \
0, \
"end" \
}
extern struct qtn_global_param g_qtn_params;
extern volatile __uncached__ struct qtn_gain_settings g_gain;
extern struct qtn_cca_counts g_cca_counts;
extern struct qtn_cca_stats g_qtn_cca_stats;
extern uint32_t g_qtn_rxtime_usecs;
extern uint32_t g_qtn_txtime_usecs;
extern uint32_t g_rf_xmit_status;
extern int vlan_enabled_bus;
#endif /* defined(MUC_BUILD) */
/*
* SKBs on the power save queue are tagged with an age and timed out. We reuse the
* hardware checksum field in the mbuf packet header to store this data.
*/
#define skb_age csum_offset
#define M_AGE_SET(skb,v) (skb->skb_age = v)
#define M_AGE_GET(skb) (skb->skb_age)
#define M_AGE_SUB(skb,adj) (skb->skb_age -= adj)
#define QTN_2G_FIRST_OPERATING_CHAN 1
#define QTN_2G_LAST_OPERATING_CHAN 14
#define QTN_5G_FIRST_OPERATING_CHAN 36
#define QTN_5G_LAST_UNII1_OPERATING_CHAN 48
#define QTN_5G_LAST_UNII2_OPERATING_CHAN 140
#define QTN_5G_LAST_OPERATING_CHAN 169
/* RFIC chip ID */
#define RFIC5_EAGLE_PROJ_ID (2)
#define RFIC6_PROJ_ID (3)
/* MU-MIMO WMAC index */
enum {
WMAC_ID_0 = 0,
WMAC_ID_1 = 1,
WMAC_ID_MAX
};
#endif /* _QTN_GLOBAL_MUC_H */