0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _MWIFIEX_DECL_H_
0009 #define _MWIFIEX_DECL_H_
0010
0011 #undef pr_fmt
0012 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0013
0014 #include <linux/wait.h>
0015 #include <linux/timer.h>
0016 #include <linux/ieee80211.h>
0017 #include <uapi/linux/if_arp.h>
0018 #include <net/cfg80211.h>
0019
0020 #define MWIFIEX_BSS_COEX_COUNT 2
0021 #define MWIFIEX_MAX_BSS_NUM (3)
0022
0023 #define MWIFIEX_DMA_ALIGN_SZ 64
0024 #define MWIFIEX_RX_HEADROOM 64
0025 #define MAX_TXPD_SZ 32
0026 #define INTF_HDR_ALIGN 4
0027
0028 #define MWIFIEX_MIN_DATA_HEADER_LEN (MWIFIEX_DMA_ALIGN_SZ + INTF_HDR_ALIGN + \
0029 MAX_TXPD_SZ)
0030 #define MWIFIEX_MGMT_FRAME_HEADER_SIZE 8
0031
0032
0033
0034 #define MWIFIEX_MAX_TX_BASTREAM_SUPPORTED 2
0035 #define MWIFIEX_MAX_RX_BASTREAM_SUPPORTED 16
0036 #define MWIFIEX_MAX_TDLS_PEER_SUPPORTED 8
0037
0038 #define MWIFIEX_STA_AMPDU_DEF_TXWINSIZE 64
0039 #define MWIFIEX_STA_AMPDU_DEF_RXWINSIZE 64
0040 #define MWIFIEX_STA_COEX_AMPDU_DEF_RXWINSIZE 16
0041
0042 #define MWIFIEX_UAP_AMPDU_DEF_TXWINSIZE 32
0043
0044 #define MWIFIEX_UAP_COEX_AMPDU_DEF_RXWINSIZE 16
0045
0046 #define MWIFIEX_UAP_AMPDU_DEF_RXWINSIZE 16
0047 #define MWIFIEX_11AC_STA_AMPDU_DEF_TXWINSIZE 64
0048 #define MWIFIEX_11AC_STA_AMPDU_DEF_RXWINSIZE 64
0049 #define MWIFIEX_11AC_UAP_AMPDU_DEF_TXWINSIZE 64
0050 #define MWIFIEX_11AC_UAP_AMPDU_DEF_RXWINSIZE 64
0051
0052 #define MWIFIEX_DEFAULT_BLOCK_ACK_TIMEOUT 0xffff
0053
0054 #define MWIFIEX_RATE_BITMAP_MCS0 32
0055
0056 #define MWIFIEX_RX_DATA_BUF_SIZE (4 * 1024)
0057 #define MWIFIEX_RX_CMD_BUF_SIZE (2 * 1024)
0058
0059 #define MAX_BEACON_PERIOD (4000)
0060 #define MIN_BEACON_PERIOD (50)
0061 #define MAX_DTIM_PERIOD (100)
0062 #define MIN_DTIM_PERIOD (1)
0063
0064 #define MWIFIEX_RTS_MIN_VALUE (0)
0065 #define MWIFIEX_RTS_MAX_VALUE (2347)
0066 #define MWIFIEX_FRAG_MIN_VALUE (256)
0067 #define MWIFIEX_FRAG_MAX_VALUE (2346)
0068 #define MWIFIEX_WMM_VERSION 0x01
0069 #define MWIFIEX_WMM_SUBTYPE 0x01
0070
0071 #define MWIFIEX_RETRY_LIMIT 14
0072 #define MWIFIEX_SDIO_BLOCK_SIZE 256
0073
0074 #define MWIFIEX_BUF_FLAG_REQUEUED_PKT BIT(0)
0075 #define MWIFIEX_BUF_FLAG_BRIDGED_PKT BIT(1)
0076 #define MWIFIEX_BUF_FLAG_TDLS_PKT BIT(2)
0077 #define MWIFIEX_BUF_FLAG_EAPOL_TX_STATUS BIT(3)
0078 #define MWIFIEX_BUF_FLAG_ACTION_TX_STATUS BIT(4)
0079 #define MWIFIEX_BUF_FLAG_AGGR_PKT BIT(5)
0080
0081 #define MWIFIEX_BRIDGED_PKTS_THR_HIGH 1024
0082 #define MWIFIEX_BRIDGED_PKTS_THR_LOW 128
0083
0084 #define MWIFIEX_TDLS_DISABLE_LINK 0x00
0085 #define MWIFIEX_TDLS_ENABLE_LINK 0x01
0086 #define MWIFIEX_TDLS_CREATE_LINK 0x02
0087 #define MWIFIEX_TDLS_CONFIG_LINK 0x03
0088
0089 #define MWIFIEX_TDLS_RSSI_HIGH 50
0090 #define MWIFIEX_TDLS_RSSI_LOW 55
0091 #define MWIFIEX_TDLS_MAX_FAIL_COUNT 4
0092 #define MWIFIEX_AUTO_TDLS_IDLE_TIME 10
0093
0094
0095 #define MWIFIEX_RATE_INDEX_MCS0 12
0096
0097 #define MWIFIEX_BW20_MCS_NUM 15
0098
0099
0100 #define MWIFIEX_RATE_INDEX_OFDM0 4
0101
0102 #define MWIFIEX_MAX_STA_NUM 3
0103 #define MWIFIEX_MAX_UAP_NUM 3
0104 #define MWIFIEX_MAX_P2P_NUM 3
0105
0106 #define MWIFIEX_A_BAND_START_FREQ 5000
0107
0108
0109 #define SDIO_MAX_AGGR_BUF_SIZE (256 * 255)
0110 #define BLOCK_NUMBER_OFFSET 15
0111 #define SDIO_HEADER_OFFSET 28
0112
0113 #define MWIFIEX_SIZE_4K 0x4000
0114
0115 enum mwifiex_bss_type {
0116 MWIFIEX_BSS_TYPE_STA = 0,
0117 MWIFIEX_BSS_TYPE_UAP = 1,
0118 MWIFIEX_BSS_TYPE_P2P = 2,
0119 MWIFIEX_BSS_TYPE_ANY = 0xff,
0120 };
0121
0122 enum mwifiex_bss_role {
0123 MWIFIEX_BSS_ROLE_STA = 0,
0124 MWIFIEX_BSS_ROLE_UAP = 1,
0125 MWIFIEX_BSS_ROLE_ANY = 0xff,
0126 };
0127
0128 enum mwifiex_tdls_status {
0129 TDLS_NOT_SETUP = 0,
0130 TDLS_SETUP_INPROGRESS,
0131 TDLS_SETUP_COMPLETE,
0132 TDLS_SETUP_FAILURE,
0133 TDLS_LINK_TEARDOWN,
0134 TDLS_CHAN_SWITCHING,
0135 TDLS_IN_BASE_CHAN,
0136 TDLS_IN_OFF_CHAN,
0137 };
0138
0139 enum mwifiex_tdls_error_code {
0140 TDLS_ERR_NO_ERROR = 0,
0141 TDLS_ERR_INTERNAL_ERROR,
0142 TDLS_ERR_MAX_LINKS_EST,
0143 TDLS_ERR_LINK_EXISTS,
0144 TDLS_ERR_LINK_NONEXISTENT,
0145 TDLS_ERR_PEER_STA_UNREACHABLE = 25,
0146 };
0147
0148 #define BSS_ROLE_BIT_MASK BIT(0)
0149
0150 #define GET_BSS_ROLE(priv) ((priv)->bss_role & BSS_ROLE_BIT_MASK)
0151
0152 enum mwifiex_data_frame_type {
0153 MWIFIEX_DATA_FRAME_TYPE_ETH_II = 0,
0154 MWIFIEX_DATA_FRAME_TYPE_802_11,
0155 };
0156
0157 struct mwifiex_fw_image {
0158 u8 *helper_buf;
0159 u32 helper_len;
0160 u8 *fw_buf;
0161 u32 fw_len;
0162 };
0163
0164 struct mwifiex_802_11_ssid {
0165 u32 ssid_len;
0166 u8 ssid[IEEE80211_MAX_SSID_LEN];
0167 };
0168
0169 struct mwifiex_wait_queue {
0170 wait_queue_head_t wait;
0171 int status;
0172 };
0173
0174 struct mwifiex_rxinfo {
0175 struct sk_buff *parent;
0176 u8 bss_num;
0177 u8 bss_type;
0178 u8 use_count;
0179 u8 buf_type;
0180 };
0181
0182 struct mwifiex_txinfo {
0183 u32 status_code;
0184 u8 flags;
0185 u8 bss_num;
0186 u8 bss_type;
0187 u8 aggr_num;
0188 u32 pkt_len;
0189 u8 ack_frame_id;
0190 u64 cookie;
0191 };
0192
0193 enum mwifiex_wmm_ac_e {
0194 WMM_AC_BK,
0195 WMM_AC_BE,
0196 WMM_AC_VI,
0197 WMM_AC_VO
0198 } __packed;
0199
0200 struct ieee_types_wmm_ac_parameters {
0201 u8 aci_aifsn_bitmap;
0202 u8 ecw_bitmap;
0203 __le16 tx_op_limit;
0204 } __packed;
0205
0206 struct mwifiex_types_wmm_info {
0207 u8 oui[4];
0208 u8 subtype;
0209 u8 version;
0210 u8 qos_info;
0211 u8 reserved;
0212 struct ieee_types_wmm_ac_parameters ac_params[IEEE80211_NUM_ACS];
0213 } __packed;
0214
0215 struct mwifiex_arp_eth_header {
0216 struct arphdr hdr;
0217 u8 ar_sha[ETH_ALEN];
0218 u8 ar_sip[4];
0219 u8 ar_tha[ETH_ALEN];
0220 u8 ar_tip[4];
0221 } __packed;
0222
0223 struct mwifiex_chan_stats {
0224 u8 chan_num;
0225 u8 bandcfg;
0226 u8 flags;
0227 s8 noise;
0228 u16 total_bss;
0229 u16 cca_scan_dur;
0230 u16 cca_busy_dur;
0231 } __packed;
0232
0233 #define MWIFIEX_HIST_MAX_SAMPLES 1048576
0234 #define MWIFIEX_MAX_RX_RATES 44
0235 #define MWIFIEX_MAX_AC_RX_RATES 74
0236 #define MWIFIEX_MAX_SNR 256
0237 #define MWIFIEX_MAX_NOISE_FLR 256
0238 #define MWIFIEX_MAX_SIG_STRENGTH 256
0239
0240 struct mwifiex_histogram_data {
0241 atomic_t rx_rate[MWIFIEX_MAX_AC_RX_RATES];
0242 atomic_t snr[MWIFIEX_MAX_SNR];
0243 atomic_t noise_flr[MWIFIEX_MAX_NOISE_FLR];
0244 atomic_t sig_str[MWIFIEX_MAX_SIG_STRENGTH];
0245 atomic_t num_samples;
0246 };
0247
0248 struct mwifiex_iface_comb {
0249 u8 sta_intf;
0250 u8 uap_intf;
0251 u8 p2p_intf;
0252 };
0253
0254 struct mwifiex_radar_params {
0255 struct cfg80211_chan_def *chandef;
0256 u32 cac_time_ms;
0257 } __packed;
0258
0259 struct mwifiex_11h_intf_state {
0260 bool is_11h_enabled;
0261 bool is_11h_active;
0262 } __packed;
0263
0264 #define MWIFIEX_FW_DUMP_IDX 0xff
0265 #define MWIFIEX_FW_DUMP_MAX_MEMSIZE 0x160000
0266 #define MWIFIEX_DRV_INFO_IDX 20
0267 #define FW_DUMP_MAX_NAME_LEN 8
0268 #define FW_DUMP_HOST_READY 0xEE
0269 #define FW_DUMP_DONE 0xFF
0270 #define FW_DUMP_READ_DONE 0xFE
0271
0272 struct memory_type_mapping {
0273 u8 mem_name[FW_DUMP_MAX_NAME_LEN];
0274 u8 *mem_ptr;
0275 u32 mem_size;
0276 u8 done_flag;
0277 };
0278
0279 enum rdwr_status {
0280 RDWR_STATUS_SUCCESS = 0,
0281 RDWR_STATUS_FAILURE = 1,
0282 RDWR_STATUS_DONE = 2
0283 };
0284
0285 enum mwifiex_chan_width {
0286 CHAN_BW_20MHZ = 0,
0287 CHAN_BW_10MHZ,
0288 CHAN_BW_40MHZ,
0289 CHAN_BW_80MHZ,
0290 CHAN_BW_8080MHZ,
0291 CHAN_BW_160MHZ,
0292 CHAN_BW_5MHZ,
0293 };
0294
0295 enum mwifiex_chan_offset {
0296 SEC_CHAN_NONE = 0,
0297 SEC_CHAN_ABOVE = 1,
0298 SEC_CHAN_5MHZ = 2,
0299 SEC_CHAN_BELOW = 3
0300 };
0301
0302 #endif