blob: ee1483aaf60b8e620fbe69eb5b5f295fa7aa4dd0 [file] [log] [blame]
/*SH1
*******************************************************************************
** **
** Copyright (c) 2010 Quantenna Communications Inc **
** All Rights Reserved **
** **
** Author : Quantenna Communications Inc **
** File : shared_params.h **
** Description : **
** **
*******************************************************************************
** **
** Redistribution and use in source and binary forms, with or without **
** modification, are permitted provided that the following conditions **
** are met: **
** 1. Redistributions of source code must retain the above copyright **
** notice, this list of conditions and the following disclaimer. **
** 2. Redistributions in binary form must reproduce the above copyright **
** notice, this list of conditions and the following disclaimer in the **
** documentation and/or other materials provided with the distribution. **
** 3. The name of the author may not be used to endorse or promote products **
** derived from this software without specific prior written permission. **
** **
** Alternatively, this software may be distributed under the terms of the **
** GNU General Public License ("GPL") version 2, or (at your option) any **
** later version as published by the Free Software Foundation. **
** **
** In the case this software is distributed under the GPL license, **
** you should have received a copy of the GNU General Public License **
** along with this software; if not, write to the Free Software **
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA **
** **
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR **
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES**
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. **
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, **
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT **
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,**
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY **
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT **
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF **
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. **
** **
*******************************************************************************
EH1*/
#ifndef _SHARED_DEFS_H_
#define _SHARED_DEFS_H_
#include "shared_defs_common.h"
#define QTN_SWITCH_CHANNEL_TIME_AVG 3750 /* microseconds */
#define IEEE80211_MAX_NAV 32767
/* SCS (ACI/CCI Detection and Mitigation) APIs */
enum qtn_vap_scs_cmds {
IEEE80211_SCS_SET_ENABLE = 1,
IEEE80211_SCS_SET_DEBUG_ENABLE,
IEEE80211_SCS_SET_SAMPLE_ENABLE,
IEEE80211_SCS_SET_SAMPLE_DWELL_TIME,
IEEE80211_SCS_SET_SAMPLE_INTERVAL,
IEEE80211_SCS_SET_THRSHLD_SMPL_PKTNUM,
IEEE80211_SCS_SET_THRSHLD_PRI_CCA,
IEEE80211_SCS_SET_THRSHLD_SEC_CCA,
IEEE80211_SCS_SET_THRSHLD_SMPL_AIRTIME,
IEEE80211_SCS_SET_WF_CCA,
IEEE80211_SCS_SET_WF_RSSI,
IEEE80211_SCS_SET_WF_CRC_ERR,
IEEE80211_SCS_SET_WF_LPRE,
IEEE80211_SCS_SET_WF_SPRE,
IEEE80211_SCS_SET_WF_RETRIES,
IEEE80211_SCS_SET_WF_DFS,
IEEE80211_SCS_SET_WF_MAX_TX_PWR,
IEEE80211_SCS_SET_REPORT_ONLY,
IEEE80211_SCS_SET_CCA_INTF_RATIO,
IEEE80211_SCS_SET_CCA_IDLE_THRSHLD,
IEEE80211_SCS_SET_CCA_INTF_LO_THR,
IEEE80211_SCS_SET_CCA_INTF_HI_THR,
IEEE80211_SCS_SET_CCA_SMPL_DUR,
IEEE80211_SCS_GET_REPORT,
IEEE80211_SCS_GET_INTERNAL_STATS,
IEEE80211_SCS_SET_CCA_INTF_SMTH_FCTR,
IEEE80211_SCS_RESET_RANKING_TABLE,
IEEE80211_SCS_SET_CHAN_MTRC_MRGN,
IEEE80211_SCS_SET_RSSI_SMTH_FCTR,
IEEE80211_SCS_SET_ATTEN_ADJUST,
IEEE80211_SCS_SET_ATTEN_SWITCH_ENABLE,
IEEE80211_SCS_SET_THRSHLD_ATTEN_INC,
IEEE80211_SCS_SET_THRSHLD_DFS_REENTRY,
IEEE80211_SCS_SET_THRSHLD_DFS_REENTRY_MINRATE,
IEEE80211_SCS_SET_PMBL_ERR_SMTH_FCTR,
IEEE80211_SCS_SET_PMBL_ERR_RANGE,
IEEE80211_SCS_SET_PMBL_ERR_MAPPED_INTF_RANGE,
IEEE80211_SCS_SET_THRSHLD_LOAD,
IEEE80211_SCS_SET_PMBL_ERR_WF,
IEEE80211_SCS_SET_THRSHLD_AGING_NOR,
IEEE80211_SCS_SET_THRSHLD_AGING_DFSREENT,
IEEE80211_SCS_SET_THRSHLD_DFS_REENTRY_INTF,
IEEE80211_SCS_SET_PMP_RPT_CCA_SMTH_FCTR,
IEEE80211_SCS_SET_PMP_RX_TIME_SMTH_FCTR,
IEEE80211_SCS_SET_PMP_TX_TIME_SMTH_FCTR,
IEEE80211_SCS_SET_PMP_STATS_STABLE_PERCENT,
IEEE80211_SCS_SET_PMP_STATS_STABLE_RANGE,
IEEE80211_SCS_SET_PMP_STATS_CLEAR_INTERVAL,
IEEE80211_SCS_SET_PMP_TXTIME_COMPENSATION,
IEEE80211_SCS_SET_PMP_RXTIME_COMPENSATION,
IEEE80211_SCS_SET_PMP_TDLSTIME_COMPENSATION,
IEEE80211_SCS_SET_SWITCH_CHANNEL_MANUALLY,
IEEE80211_SCS_SET_AS_RX_TIME_SMTH_FCTR,
IEEE80211_SCS_SET_AS_TX_TIME_SMTH_FCTR,
IEEE80211_SCS_SET_STATS_START,
IEEE80211_SCS_SET_CCA_IDLE_SMTH_FCTR,
IEEE80211_SCS_SET_PMBL_ERR_THRSHLD,
IEEE80211_SCS_SET_CCA_INTF_DFS_MARGIN,
IEEE80211_SCS_SET_LEAVE_DFS_CHAN_MTRC_MRGN,
IEEE80211_SCS_SET_MAX
};
#define IEEE80211_SCS_STATE_INIT 0
#define IEEE80211_SCS_STATE_RESET 1
#define IEEE80211_SCS_STATE_CHANNEL_SWITCHING 2
#define IEEE80211_SCS_STATE_MEASUREMENT_CHANGE_CLEAN 3 /* param change */
#define IEEE80211_SCS_STATE_PERIOD_CLEAN 4
#define IEEE80211_SCS_COMPARE_INIT_TIMER 5
#define IEEE80211_SCS_COMPARE_TIMER_INTVAL 2
#define IEEE80211_CCA_SAMPLE_DUR IEEE80211_SCS_COMPARE_TIMER_INTVAL /* seconds */
#define IEEE80211_SCS_CHAN_CURRENT 0
#define IEEE80211_SCS_CHAN_ALL 0xFF
#define IEEE80211_SCS_THRSHLD_MAX 100 /* metric */
#define IEEE80211_SCS_THRSHLD_MIN 1 /* metric */
#define IEEE80211_SCS_SMPL_DWELL_TIME_MAX 24 /* milliseconds, limited by max NAV reservation */
#define IEEE80211_SCS_SMPL_DWELL_TIME_MIN 5 /* milliseconds */
#define IEEE80211_SCS_SMPL_DWELL_TIME_DEFAULT 10 /* milliseconds */
#define IEEE80211_SCS_SMPL_INTV_MAX 3600 /* seconds */
#define IEEE80211_SCS_SMPL_INTV_MIN 1 /* seconds */
#define IEEE80211_SCS_SMPL_INTV_DEFAULT 5 /* seconds */
#define IEEE80211_SCS_THRSHLD_SMPL_PKTNUM_DEFAULT 16 /* packet number */
#define IEEE80211_SCS_THRSHLD_SMPL_PKTNUM_MAX 1000 /* packet number */
#define IEEE80211_SCS_THRSHLD_SMPL_PKTNUM_MIN 1 /* packet number */
#define IEEE80211_SCS_THRSHLD_SMPL_AIRTIME_DEFAULT 200 /* ms */
#define IEEE80211_SCS_THRSHLD_SMPL_AIRTIME_MAX 1000 /* ms */
#define IEEE80211_SCS_THRSHLD_SMPL_AIRTIME_MIN 1 /* ms */
#define IEEE80211_SCS_THRSHLD_PMBL_ERR_MAX 10000 /* count */
#define IEEE80211_SCS_THRSHLD_PMBL_ERR_MIN 1 /* count */
/*
* Packet rate threshold is determined by how many packets we can hold in buffer without drop
* during off-channel period. It is limited by:
* - sw queue length of each node/tid
* - global resource shared by all node/tid, such as tqew descriptors and msdu headers.
* Current value doesn't apply to the scenario when tqew descriptors are already used up by large
* number of stations.
*/
#define IEEE80211_SCS_THRSHLD_SMPL_TX_PKTRATE (1024 - 128) /* margin = 128 + hw ring size */
#define IEEE80211_SCS_THRSHLD_SMPL_RX_PKTRATE IEEE80211_SCS_THRSHLD_SMPL_TX_PKTRATE /* assume qtn peer */
#define IEEE80211_SCS_THRSHLD_ATTEN_INC_DFT 5 /* db */
#define IEEE80211_SCS_THRSHLD_ATTEN_INC_MIN 0 /* db */
#define IEEE80211_SCS_THRSHLD_ATTEN_INC_MAX 20 /* db */
#define IEEE80211_SCS_THRSHLD_DFS_REENTRY_DFT 60 /* seconds */
#define IEEE80211_SCS_THRSHLD_DFS_REENTRY_MIN 0 /* seconds */
#define IEEE80211_SCS_THRSHLD_DFS_REENTRY_MAX 0xffff /* seconds */
#define IEEE80211_SCS_THRSHLD_DFS_REENTRY_INTF_MIN 0
#define IEEE80211_SCS_THRSHLD_DFS_REENTRY_INTF_MAX 100
#define IEEE80211_SCS_THRSHLD_DFS_REENTRY_INTF_DFT 40
#define IEEE80211_SCS_THRSHLD_DFS_REENTRY_MINRATE_UNIT 100 /* kbps */
#define IEEE80211_SCS_THRSHLD_DFS_REENTRY_MINRATE_DFT 5 /* unit: 100kbps */
#define IEEE80211_SCS_THRSHLD_DFS_REENTRY_MINRATE_MIN 0 /* unit: 100kbps */
#define IEEE80211_SCS_THRSHLD_DFS_REENTRY_MINRATE_MAX 0xffff /* unit: 100kbps */
#define IEEE80211_SCS_THRSHLD_AGING_MIN 0
#define IEEE80211_SCS_THRSHLD_AGING_MAX 0xFFFF
#define IEEE80211_SCS_THRSHLD_AGING_NOR_DFT (60 * 6)
#define IEEE80211_SCS_THRSHLD_AGING_DFSREENT_DFT 5
#define IEEE80211_SCS_CCA_DUR_MAX 10 /* seconds */
#define IEEE80211_SCS_CCA_DUR_MIN 2 /* seconds */
#define IEEE80211_SCS_CCA_INTF_SCALE 1000 /* milliseconds */
#define IEEE80211_SCS_SENDING_QOSNULL_TIME_AVG 1000 /* microseconds */
#define IEEE80211_SCS_SMPL_TIME_MARGIN 2000 /* microseconds */
#define IEEE80211_SCS_SMPL_TIME_OFFSET_SEND_QOSNULL 5000 /* microseconds */
#define IEEE80211_SCS_SMPL_TIME_SENDING_ALL_BEACONS 25000 /* microseconds, the time duration for transmitting all beacons */
#define IEEE80211_CCA_INTF_SMTH_FCTR_NOXP_DFT 75
#define IEEE80211_CCA_INTF_SMTH_FCTR_XPED_DFT 90
#define IEEE80211_CCA_INTF_SMTH_FCTR_MIN 0
#define IEEE80211_CCA_INTF_SMTH_FCTR_MAX 100
#define IEEE80211_SCS_CHAN_MTRC_MRGN_MAX 100
#define IEEE80211_SCS_CHAN_MTRC_MRGN_DFT 15
#define IEEE80211_SCS_LEAVE_DFS_CHAN_MTRC_MRGN_DFT 25
#define IEEE80211_SCS_RSSI_SMTH_FCTR_UP_DFT 75
#define IEEE80211_SCS_RSSI_SMTH_FCTR_DOWN_DFT 25
#define IEEE80211_SCS_RSSI_SMTH_FCTR_MAX 100
#define IEEE80211_SCS_ATTEN_ADJUST_MIN -20
#define IEEE80211_SCS_ATTEN_ADJUST_MAX 20
#define IEEE80211_SCS_ATTEN_ADJUST_DFT 5
#define IEEE80211_SCS_BRCM_RXGLITCH_THRSHLD_SCALE_DFT 40
#define IEEE80211_SCS_PMBL_ERR_SMTH_FCTR_MIN 0
#define IEEE80211_SCS_PMBL_ERR_SMTH_FCTR_MAX 100
#define IEEE80211_SCS_PMBL_ERR_SMTH_FCTR_DFT 66
#define IEEE80211_SCS_CCA_IDLE_SMTH_FCTR_MIN 0
#define IEEE80211_SCS_CCA_IDLE_SMTH_FCTR_MAX 100
#define IEEE80211_SCS_CCA_IDLE_SMTH_FCTR_DFT 50
#define IEEE80211_SCS_PMP_RPT_CCA_SMTH_FCTR_MAX 100
#define IEEE80211_SCS_PMP_RPT_CCA_SMTH_FCTR_DFT 66
#define IEEE80211_SCS_PMP_RX_TIME_SMTH_FCTR_MAX 100
#define IEEE80211_SCS_PMP_RX_TIME_SMTH_FCTR_DFT 66
#define IEEE80211_SCS_PMP_TX_TIME_SMTH_FCTR_MAX 100
#define IEEE80211_SCS_PMP_TX_TIME_SMTH_FCTR_DFT 66
#define IEEE80211_SCS_PMP_STATS_STABLE_PERCENT_MAX 100
#define IEEE80211_SCS_PMP_STATS_STABLE_PERCENT_DFT 30
#define IEEE80211_SCS_PMP_STATS_STABLE_RANGE_MAX 1000
#define IEEE80211_SCS_PMP_STATS_STABLE_RANGE_DFT 50
#define IEEE80211_SCS_PMP_STATS_CLEAR_INTERVAL_MAX 3600 /* seconds */
#define IEEE80211_SCS_PMP_STATS_CLEAR_INTERVAL_DFT 60 /* seconds */
#define IEEE80211_SCS_AS_RX_TIME_SMTH_FCTR_MAX 100
#define IEEE80211_SCS_AS_RX_TIME_SMTH_FCTR_DFT 50
#define IEEE80211_SCS_AS_TX_TIME_SMTH_FCTR_MAX 100
#define IEEE80211_SCS_AS_TX_TIME_SMTH_FCTR_DFT 50
#define IEEE80211_SCS_SMTH_RBS_TIME 80
#define IEEE80211_SCS_PMBL_ERR_RANGE_MIN 1000
#define IEEE80211_SCS_PMBL_ERR_RANGE_MAX 0xFFFF
#define IEEE80211_SCS_PMBL_ERR_RANGE_DFT 5000
#define IEEE80211_SCS_PMBL_ERR_MAPPED_INTF_RANGE_MIN 0
#define IEEE80211_SCS_PMBL_ERR_MAPPED_INTF_RANGE_MAX 100
#define IEEE80211_SCS_PMBL_ERR_MAPPED_INTF_RANGE_DFT 40
#define IEEE80211_SCS_PMBL_ERR_WF_MIN 0
#define IEEE80211_SCS_PMBL_ERR_WF_MAX 100
#define IEEE80211_SCS_PMBL_SHORT_WF_DFT 0
#define IEEE80211_SCS_PMBL_LONG_WF_DFT 100
#define IEEE80211_SCS_THRSHLD_LOADED_MIN 0
#define IEEE80211_SCS_THRSHLD_LOADED_MAX 1000
#define IEEE80211_SCS_THRSHLD_LOADED_DFT 20
#define IEEE80211_SCS_CHAN_POWER_CUTPOINT 15
#define IEEE80211_SCS_NORMALIZE(_v, _duration) (((_v) < (0xFFFFFFFF / IEEE80211_SCS_CCA_INTF_SCALE)) ? \
((_v) * IEEE80211_SCS_CCA_INTF_SCALE / (_duration)) : \
((_v) / (_duration) * IEEE80211_SCS_CCA_INTF_SCALE))
#define IEEE80211_SCS_SMOOTH(_old, _new, _fctr) (((_old) * (_fctr) + (_new) * (100 - (_fctr))) / 100)
#define IEEE80211_SCS_OFFCHAN_WHOLE_DUR(_dwell_us) ((_dwell_us) + \
(2 * QTN_SWITCH_CHANNEL_TIME_AVG) + \
IEEE80211_SCS_SENDING_QOSNULL_TIME_AVG + \
IEEE80211_SCS_SMPL_TIME_MARGIN)
#define IEEE80211_SCS_VALUE_S 0
#define IEEE80211_SCS_VALUE_M 0xffff
#define IEEE80211_SCS_WF_VALUE_M 0xff
#define IEEE80211_SCS_COMMAND_S 16
#define IEEE80211_SCS_COMMAND_M 0xffff
#define IEEE80211_SCS_NA_CC 0x0
#define IEEE80211_SCS_STA_CCA_REQ_CC 0x1
#define IEEE80211_SCS_SELF_CCA_CC 0x2
#define IEEE80211_SCS_ATTEN_INC_CC 0x4
#define IEEE80211_SCS_BRCM_STA_TRIGGER_CC 0x8
#define IEEE80211_SCS_CCA_INTF_CC (IEEE80211_SCS_STA_CCA_REQ_CC | IEEE80211_SCS_SELF_CCA_CC)
#define IEEE80211_SCS_INTF_CC (IEEE80211_SCS_CCA_INTF_CC | IEEE80211_SCS_BRCM_STA_TRIGGER_CC)
#define IEEE80211_REMAIN_CHAN_MIN_RSV_PERD 2
enum ieee80211_scs_update_mode {
IEEE80211_SCS_OFFCHAN, /* off-channel, use smoothing and omit current channel */
IEEE80211_SCS_COCHAN, /* co-channel mode */
IEEE80211_SCS_INIT_SCAN, /* like off-channel but include current channel */
};
#define SCSLOG_CRIT 0
#define SCSLOG_NOTICE 1
#define SCSLOG_INFO 2
#define SCSLOG_VERBOSE 3
#define SCSLOG_LEVEL_MAX 3
#if !defined(MUC_BUILD) && !defined(DSP_BUILD) && !defined(AUC_BUILD)
#define SCSDBG(_level, _fmt, ...) do { \
if (ic->ic_scs.scs_debug_enable >= (_level)) { \
DBGFN("SCS: " _fmt, ##__VA_ARGS__); \
} \
} while (0)
#endif
/* OCAC (Off-channel CAC) APIs */
enum qtn_ocac_cmds {
IEEE80211_OCAC_SET_ENABLE = 1,
IEEE80211_OCAC_SET_DISABLE,
IEEE80211_OCAC_SET_DEBUG_LEVEL,
IEEE80211_OCAC_SET_DWELL_TIME,
IEEE80211_OCAC_SET_DURATION,
IEEE80211_OCAC_SET_THRESHOLD_FAT,
IEEE80211_OCAC_SET_DUMP_COUNTS,
IEEE80211_OCAC_SET_CAC_TIME,
IEEE80211_OCAC_SET_THRESHOLD_TRAFFIC,
IEEE80211_OCAC_SET_TIMER_INTERVAL,
IEEE80211_OCAC_SET_DUMP_TSFLOG,
IEEE80211_OCAC_SET_DUMP_CFG,
IEEE80211_OCAC_SET_TRAFFIC_CONTROL,
IEEE80211_OCAC_SET_THRESHOLD_CCA_INTF,
IEEE80211_OCAC_SET_REPORT_ONLY,
IEEE80211_OCAC_SET_DUMP_CCA_COUNTS,
IEEE80211_OCAC_SET_OFFSET_TXHALT,
IEEE80211_OCAC_SET_OFFSET_OFFCHAN,
IEEE80211_OCAC_SET_THRESHOLD_FAT_DEC,
IEEE80211_OCAC_SET_TIMER_EXPIRE_INIT,
IEEE80211_OCAC_SET_SECURE_DWELL_TIME,
IEEE80211_OCAC_SET_BEACON_INTERVAL,
IEEE80211_OCAC_SET_WEATHER_DURATION,
IEEE80211_OCAC_SET_WEATHER_CAC_TIME,
IEEE80211_OCAC_SET_WEATHER_DWELL_TIME,
IEEE80211_OCAC_SET_MAX
};
enum qtn_ocac_get_cmds {
IEEE80211_OCAC_GET_STATUS = 1,
IEEE80211_OCAC_GET_AVAILABILITY,
};
#define IEEE80211_OCAC_CLEAN_STATS_STOP 0
#define IEEE80211_OCAC_CLEAN_STATS_START 1
#define IEEE80211_OCAC_CLEAN_STATS_RESET 2
#define IEEE80211_OCAC_DWELL_TIME_MIN 5 /* milliseconds */
#define IEEE80211_OCAC_DWELL_TIME_MAX 200 /* milliseconds */
#define IEEE80211_OCAC_DWELL_TIME_DEFAULT 40 /* milliseconds */
#define IEEE80211_OCAC_WEA_DWELL_TIME_DEFAULT 20 /* milliseconds */
#define IEEE80211_OCAC_SECURE_DWELL_TIME_MIN 5 /* milliseconds */
#define IEEE80211_OCAC_SECURE_DWELL_TIME_MAX 23 /* milliseconds */
#define IEEE80211_OCAC_SECURE_DWELL_TIME_DEFAULT 23 /* milliseconds */
#define IEEE80211_OCAC_DURATION_MIN 1 /* seconds */
#define IEEE80211_OCAC_DURATION_MAX 64800 /* seconds */
#define IEEE80211_OCAC_DURATION_DEFAULT 720 /* seconds */
#define IEEE80211_OCAC_CAC_TIME_MIN 1 /* seconds */
#define IEEE80211_OCAC_CAC_TIME_MAX 64800 /* seconds */
#define IEEE80211_OCAC_CAC_TIME_DEFAULT 240 /* seconds */
#define IEEE80211_OCAC_WEA_DURATION_MIN 60 /* seconds */
#define IEEE80211_OCAC_WEA_DURATION_MAX 86400 /* seconds */
#define IEEE80211_OCAC_WEA_DURATION_DEFAULT 11520 /* seconds */
#define IEEE80211_OCAC_WEA_CAC_TIME_MIN 1 /* seconds */
#define IEEE80211_OCAC_WEA_CAC_TIME_MAX 86400 /* seconds */
#define IEEE80211_OCAC_WEA_CAC_TIME_DEFAULT 1920 /* seconds */
#define IEEE80211_OCAC_THRESHOLD_FAT_MIN 1 /* percent */
#define IEEE80211_OCAC_THRESHOLD_FAT_MAX 100 /* percent */
#define IEEE80211_OCAC_THRESHOLD_FAT_DEFAULT 90 /* percent */
#define IEEE80211_OCAC_THRESHOLD_TRAFFIC_MIN 1 /* percent */
#define IEEE80211_OCAC_THRESHOLD_TRAFFIC_MAX 100 /* percent */
#define IEEE80211_OCAC_THRESHOLD_TRAFFIC_DEFAULT 30 /* percent */
#define IEEE80211_OCAC_OFFSET_TXHALT_MIN 2 /* milliseconds */
#define IEEE80211_OCAC_OFFSET_TXHALT_MAX 80 /* milliseconds */
#define IEEE80211_OCAC_OFFSET_TXHALT_DEFAULT 10 /* milliseconds */
#define IEEE80211_OCAC_OFFSET_OFFCHAN_MIN 2 /* milliseconds */
#define IEEE80211_OCAC_OFFSET_OFFCHAN_MAX 80 /* milliseconds */
#define IEEE80211_OCAC_OFFSET_OFFCHAN_DEFAULT 5 /* milliseconds */
#define IEEE80211_OCAC_TRAFFIC_CTRL_DEFAULT 1 /* on */
#define IEEE80211_OCAC_THRESHOLD_CCA_INTF_MIN 1 /* percent */
#define IEEE80211_OCAC_THRESHOLD_CCA_INTF_MAX 100 /* percent */
#define IEEE80211_OCAC_THRESHOLD_CCA_INTF_DEFAULT 20 /* percent */
#define IEEE80211_OCAC_THRESHOLD_FAT_DEC_MIN 1 /* percent */
#define IEEE80211_OCAC_THRESHOLD_FAT_DEC_MAX 100 /* percent */
#define IEEE80211_OCAC_THRESHOLD_FAT_DEC_DEFAULT 10 /* percent */
#define IEEE80211_OCAC_TIMER_INTERVAL_MIN 1 /* seconds */
#define IEEE80211_OCAC_TIMER_INTERVAL_MAX 100 /* seconds */
#define IEEE80211_OCAC_TIMER_INTERVAL_DEFAULT 2 /* seconds */
#define IEEE80211_OCAC_BEACON_INTERVAL_MIN 100 /* TUs */
#define IEEE80211_OCAC_BEACON_INTERVAL_MAX 1000 /* TUs */
#define IEEE80211_OCAC_BEACON_INTERVAL_DEFAULT 100 /* TUs */
#define IEEE80211_OCAC_TIMER_EXPIRE_INIT_MIN 1 /* seconds */
#define IEEE80211_OCAC_TIMER_EXPIRE_INIT_MAX 65000 /* seconds */
#define IEEE80211_OCAC_TIMER_EXPIRE_INIT_DEFAULT 2 /* seconds */
#define IEEE80211_OBSS_PASSIVE_DWELL_DEFAULT 20
#define IEEE80211_OBSS_ACTIVE_DWELL_DEFAULT 10
#define IEEE80211_OBSS_TRIGGER_INTERVAL_DEFAULT 200
#define IEEE80211_OBSS_PASSIVE_TOTAL_DEFAULT 200
#define IEEE80211_OBSS_ACTIVE_TOTAL_DEFAULT 20
#define IEEE80211_OBSS_CHANNEL_WIDTH_DELAY_DEFAULT 5
#define IEEE80211_OBSS_ACTIVITY_THRESHOLD_DEFAULT 25
#define IEEE80211_OCAC_VALUE_S 0
#define IEEE80211_OCAC_VALUE_M 0xffff
#define IEEE80211_OCAC_COMMAND_S 16
#define IEEE80211_OCAC_COMMAND_M 0xffff
#define IEEE80211_OCAC_COMPRESS_VALUE_F 0x8000
#define IEEE80211_OCAC_COMPRESS_VALUE_M 0x7fff
#define IEEE80211_OCAC_TIME_MARGIN 2000 /* microseconds */
#define OCACLOG_CRIT 0
#define OCACLOG_WARNING 1
#define OCACLOG_NOTICE 2
#define OCACLOG_INFO 3
#define OCACLOG_VERBOSE 4
#define OCACLOG_LEVEL_MAX 4
#if !defined(MUC_BUILD) && !defined(DSP_BUILD) && !defined(AUC_BUILD)
#define OCACDBG(_level, _fmt, ...) do { \
if (ic->ic_ocac.ocac_cfg.ocac_debug_level >= (_level)) { \
DBGFN("DFS_s_radio: " _fmt, ##__VA_ARGS__); \
} \
} while (0)
#endif
#define QTN_M2A_EVENT_TYPE_DTIM 1
#define QTN_M2A_PS_EVENT_PM_ENABLE 2 /* enable power management */
#define QTN_M2A_PS_EVENT_PM_DISABLE 3 /* disable power management */
#define QTN_M2A_PS_EVENT_PS_POLL 4 /* ps poll */
#define QTN_M2A_EVENT_TYPE_UAPSD_SP 5 /* U-APSD SP */
#define QTN_M2A_EVENT_PTID_FLAG_SET 6 /* Set per-TID flag(muc) */
#define QTN_M2A_EVENT_TYPE_TXBA_DISABLE 7 /* per VAP TX BA est control */
/* Common definitions for flags used to indicate ieee80211_node's states */
#define IEEE80211_NODE_AUTH 0x0001 /* authorized for data */
#define IEEE80211_NODE_QOS 0x0002 /* QoS enabled */
#define IEEE80211_NODE_ERP 0x0004 /* ERP enabled */
#define IEEE80211_NODE_HT 0x0008 /* HT enabled */
/* NB: this must have the same value as IEEE80211_FC1_PWR_MGT */
#define IEEE80211_NODE_PWR_MGT 0x0010 /* power save mode enabled */
#define IEEE80211_NODE_PS_DELIVERING 0x0040 /* STA out of PS, getting delivery */
#define IEEE80211_NODE_PS_POLL 0x0080 /* power save ps poll mode */
#define IEEE80211_NODE_AREF 0x0020 /* authentication ref held */
#define IEEE80211_NODE_2_TX_CHAINS 0x0400 /* this node needs to use 2 TX chain only, for IOT purpose */
#define IEEE80211_NODE_UAPSD 0x1000
#define IEEE80211_NODE_WDS_PEER 0x2000 /* this node is the wds peer in a wds vap */
#define IEEE80211_NODE_VHT 0x4000 /* VHT enabled */
#define IEEE80211_NODE_TPC 0x8000 /* indicate tpc capability */
/* Common definitions for ext_flags */
#define IEEE80211_NODE_TDLS_PTI_REQ 0x0001 /* Should sending PTI request to peer */
#define IEEE80211_NODE_TDLS_PTI_PENDING 0x0002 /* PTI request xmit to peer but not responsed */
#define IEEE80211_NODE_UAPSD_SP_IN_PROGRESS 0x0004 /* U-APSD SP in progress */
#define IEEE80211_NODE_TDLS_PTI_RESP 0x0008 /* PTI response frame received */
#define IEEE80211_NODE_TDLS_MASK 0x000B /* Mask for TDLS bits */
#define QTN_VAP_PRIORITY_RESERVED 2 /* reserve the low values for internal use */
#define QTN_VAP_PRIORITY_NUM 4
#define QTN_VAP_PRIORITY_MGMT (QTN_VAP_PRIORITY_RESERVED + QTN_VAP_PRIORITY_NUM)
#define QTN_TACMAP_HW_PRI_NUM 8 /* hw limitation for 128 node mode */
#define QTN_TACMAP_PRI_PER_VAP 8 /* for maximum 8 TIDs */
#define QTN_TACMAP_SW_PRI_BASE 64 /* values below this are used for "bad apple" nodes */
/* Quantenna specific flags (ni_qtn_flags), do not modify in Auc */
#define QTN_IS_BCM_NODE 0x0000001
#define QTN_IS_INTEL_5100_NODE 0x0000002
#define QTN_IS_INTEL_5300_NODE 0x0000004
#define QTN_IS_GALAXY_NOTE_4_NODE 0x0000008
#define QTN_IS_NOT_4ADDR_CAPABLE_NODE 0x0000010
#define QTN_AC_BE_INHERITANCE_UPTO_VO 0x0000020
#define QTN_AC_BE_INHERITANCE_UPTO_VI 0x0000040
#define QTN_IS_INTEL_NODE 0x0000080
#define QTN_IS_REALTEK_NODE 0x0000100
#define QTN_NODE_TX_RESTRICTED 0x0000200 /* restricted tx enabled */
#define QTN_NODE_TX_RESTRICT_RTS 0x0000400 /* use RTS to confirm node is lost */
#define QTN_IS_NO_RXAMSDU_NO_BF_NODE 0x0000800
#define QTN_NODE_RXAMSDU_SUPPORT 0x0001000 /* node support TX amsdu */
#define QTN_NODE_11N_TXAMSDU_OFF 0x0002000
#define QTN_NODE_TXOP_RESTRICTED 0x0004000
/*
* Bits that can be updated again by Lhost after association creation. Explicit definition helps
* avoid overwriting bits maintained by MuC itself.
*/
#define QTN_FLAGS_UPDATABLE_BITS (QTN_IS_INTEL_NODE)
/* QTN bandwidth definition - make sure this is up-to-date with regards
* to txbf_common.h
*/
#define QTN_BW_20M 0
#define QTN_BW_40M 1
#define QTN_BW_80M 2
#define QTN_BW_MAX QTN_BW_80M
#define QTN_MAILBOX_INVALID 0xffffffff /* Invalid value to indicate mailbox is disabled */
enum ni_tdls_status {
IEEE80211_TDLS_NODE_STATUS_NONE = 0,
IEEE80211_TDLS_NODE_STATUS_INACTIVE = 1,
IEEE80211_TDLS_NODE_STATUS_STARTING = 2,
IEEE80211_TDLS_NODE_STATUS_ACTIVE = 3,
IEEE80211_TDLS_NODE_STATUS_IDLE = 4
};
/* WoWLAN APIs */
enum qtn_vap_wowlan_cmds {
IEEE80211_WOWLAN_HOST_POWER_SAVE = 1,
IEEE80211_WOWLAN_MATCH_TYPE,
IEEE80211_WOWLAN_L2_ETHER_TYPE,
IEEE80211_WOWLAN_L3_UDP_PORT,
IEEE80211_WOWLAN_MAGIC_PATTERN,
IEEE80211_WOWLAN_MAGIC_PATTERN_GET,
IEEE80211_WOWLAN_SET_MAX
};
/*
* Definitions relating to individual fields from phy_stats,
* shared between the Q driver and the APIs.
*/
/*
* Error Sum needs to be reported together with the corresponding Number of
* Symbols; getting them in separate operations would introduce a race condition
* where the Error Sum and the Number of Symbols came from different
* PHY stat blocks.
*/
#define QTN_PHY_AVG_ERROR_SUM_NSYM_NAME "avg_error_sum_nsym"
#define QTN_PHY_EVM_MANTISSA_SHIFT 5
#define QTN_PHY_EVM_EXPONENT_MASK 0x1f
enum qtn_phy_stat_field {
QTN_PHY_NOSUCH_FIELD = -1,
QTN_PHY_AVG_ERROR_SUM_NSYM_FIELD,
};
#define QTN_M2A_TX_SCALE_BITS 4
#define QTN_M2A_TX_SCALE_MASK ((1 << QTN_M2A_TX_SCALE_BITS) - 1)
/* only for little endian */
#if defined(AUC_BUILD)
#define U64_LOW32(_v) ((uint32_t)(_v))
#define U64_HIGH32(_v) ((uint32_t)((_v) >> 32))
#else
#define U64_LOW32(_v) (((uint32_t*)&(_v))[0])
#define U64_HIGH32(_v) (((uint32_t*)&(_v))[1])
#endif
#define U64_COMPARE_GE(_a, _b) ((U64_HIGH32(_a) > U64_HIGH32(_b)) || \
((U64_HIGH32(_a) == U64_HIGH32(_b)) && (U64_LOW32(_a) >= U64_LOW32(_b))))
#define U64_COMPARE_GT(_a, _b) ((U64_HIGH32(_a) > U64_HIGH32(_b)) || \
((U64_HIGH32(_a) == U64_HIGH32(_b)) && (U64_LOW32(_a) > U64_LOW32(_b))))
#define U64_COMPARE_LE(_a, _b) ((U64_HIGH32(_a) < U64_HIGH32(_b)) || \
((U64_HIGH32(_a) == U64_HIGH32(_b)) && (U64_LOW32(_a) <= U64_LOW32(_b))))
#define U64_COMPARE_LT(_a, _b) ((U64_HIGH32(_a) < U64_HIGH32(_b)) || \
((U64_HIGH32(_a) == U64_HIGH32(_b)) && (U64_LOW32(_a) < U64_LOW32(_b))))
#ifndef MAC2STR
#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X"
#define MACSTRL "%02x:%02x:%02x:%02x:%02x:%02x" /* for MuC and Auc which don't support "X" */
#endif
/*
* VSP/QTM
* Macro TOPAZ_QTM is used to help identify changes between original VSP and QTM.
* In Lhost kernel driver, it must be used within CONFIG_QVSP(in kernel .config).
* CONFIG_QVSP TOPAZ_QTM ruby topaz
* Y 1 invalid *QTM works
* Y 0 *VSP works VSP alive but doesn't work for HDP
* N 1 invalid *no VSP/QTM
* N 0 *no VSP no VSP/QTM, and no QTM changes in MuC and AuC
* So generally, sololy changing CONFIG_QVSP works for both ruby and topaz as indicated by *.
* But to throughly clean QTM code in AuC and MuC, disable TOPAZ_QTM in topaz below.
*/
#define TOPAZ_QTM 1
#define COMPILE_TIME_ASSERT(constant_expr) \
do { \
switch(0) { \
case 0: \
case constant_expr: \
; \
} \
} while(0)
/**@addtogroup DFSAPIs
*@{*/
/**
* Reason for channel change
*/
enum ieee80211_csw_reason {
/**
* Reason is unknown
*/
IEEE80211_CSW_REASON_UNKNOWN,
/**
* Smart channel selection
*/
IEEE80211_CSW_REASON_SCS,
/**
* Radar detection
*/
IEEE80211_CSW_REASON_DFS,
/**
* Channel set by user
*/
IEEE80211_CSW_REASON_MANUAL,
/**
* Configuration change
*/
IEEE80211_CSW_REASON_CONFIG,
/**
* Scan initiated by user
*/
IEEE80211_CSW_REASON_SCAN,
/**
* Off-channel CAC
*/
IEEE80211_CSW_REASON_OCAC,
/**
* Channel switch announcement
*/
IEEE80211_CSW_REASON_CSA,
/**
* TDLS Channel switch announcement
*/
IEEE80211_CSW_REASON_TDLS_CS,
/**
* Number of values
*/
IEEE80211_CSW_REASON_MAX
};
/**@}*/
/*
* Reasons for channel switches that are not recorded and therefore
* should not be listed in QCSAPI documentation
*/
enum ieee80211_csw_reason_private {
IEEE80211_CSW_REASON_SAMPLING = IEEE80211_CSW_REASON_MAX,
IEEE80211_CSW_REASON_OCAC_RUN,
IEEE80211_CSW_REASON_BGSCAN,
};
/* Keep this in sync with swfeat_desc */
enum swfeat {
SWFEAT_ID_MODE_AP,
SWFEAT_ID_MODE_STA,
SWFEAT_ID_MODE_REPEATER,
SWFEAT_ID_PCIE_RC,
SWFEAT_ID_VHT,
SWFEAT_ID_2X2,
SWFEAT_ID_2X4,
SWFEAT_ID_3X3,
SWFEAT_ID_4X4,
SWFEAT_ID_HS20,
SWFEAT_ID_WPA2_ENT,
SWFEAT_ID_MESH,
SWFEAT_ID_TDLS,
SWFEAT_ID_OCAC,
SWFEAT_ID_QHOP,
SWFEAT_ID_QSV,
SWFEAT_ID_QSV_NEIGH,
SWFEAT_ID_MU_MIMO,
SWFEAT_ID_DUAL_CHAN_VIRT,
SWFEAT_ID_DUAL_CHAN,
SWFEAT_ID_DUAL_BAND_VIRT,
SWFEAT_ID_DUAL_BAND,
SWFEAT_ID_QTM_PRIO,
SWFEAT_ID_QTM,
SWFEAT_ID_SPEC_ANALYZER,
SWFEAT_ID_MAX
};
#define SWFEAT_MAP_SIZE (SWFEAT_ID_MAX / 8 + 1)
/* Used to scale temperature measurements */
#define QDRV_TEMPSENS_COEFF 100000
#define QDRV_TEMPSENS_COEFF10 (10 * QDRV_TEMPSENS_COEFF)
/* Aligns the supplied size to the specified power_of_two */
#define QTN_ALIGN_TO(size_to_align, power_of_two) \
(((size_to_align) + (power_of_two) - 1) & ~((power_of_two) - 1))
#define FIELD_ARRAY_SIZE(t, a) (sizeof((((t*)0)->a))/sizeof(((((t*)0)->a))[0]))
#endif /* _SHARED_DEFS_H_ */