cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

main.h (51908B)


      1/*
      2 * NXP Wireless LAN device driver: major data structures and prototypes
      3 *
      4 * Copyright 2011-2020 NXP
      5 *
      6 * This software file (the "File") is distributed by NXP
      7 * under the terms of the GNU General Public License Version 2, June 1991
      8 * (the "License").  You may use, redistribute and/or modify this File in
      9 * accordance with the terms and conditions of the License, a copy of which
     10 * is available by writing to the Free Software Foundation, Inc.,
     11 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
     12 * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
     13 *
     14 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
     15 * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
     16 * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
     17 * this warranty disclaimer.
     18 */
     19
     20#ifndef _MWIFIEX_MAIN_H_
     21#define _MWIFIEX_MAIN_H_
     22
     23#include <linux/completion.h>
     24#include <linux/kernel.h>
     25#include <linux/module.h>
     26#include <linux/sched.h>
     27#include <linux/semaphore.h>
     28#include <linux/ip.h>
     29#include <linux/skbuff.h>
     30#include <linux/if_arp.h>
     31#include <linux/etherdevice.h>
     32#include <net/sock.h>
     33#include <net/lib80211.h>
     34#include <linux/vmalloc.h>
     35#include <linux/firmware.h>
     36#include <linux/ctype.h>
     37#include <linux/of.h>
     38#include <linux/idr.h>
     39#include <linux/inetdevice.h>
     40#include <linux/devcoredump.h>
     41#include <linux/err.h>
     42#include <linux/gpio.h>
     43#include <linux/gfp.h>
     44#include <linux/interrupt.h>
     45#include <linux/io.h>
     46#include <linux/of_gpio.h>
     47#include <linux/of_platform.h>
     48#include <linux/platform_device.h>
     49#include <linux/pm_runtime.h>
     50#include <linux/slab.h>
     51#include <linux/of_irq.h>
     52
     53#include "decl.h"
     54#include "ioctl.h"
     55#include "util.h"
     56#include "fw.h"
     57#include "pcie.h"
     58#include "usb.h"
     59#include "sdio.h"
     60
     61extern const char driver_version[];
     62extern bool mfg_mode;
     63extern bool aggr_ctrl;
     64
     65struct mwifiex_adapter;
     66struct mwifiex_private;
     67
     68enum {
     69	MWIFIEX_ASYNC_CMD,
     70	MWIFIEX_SYNC_CMD
     71};
     72
     73#define MWIFIEX_DRIVER_MODE_STA			BIT(0)
     74#define MWIFIEX_DRIVER_MODE_UAP			BIT(1)
     75#define MWIFIEX_DRIVER_MODE_P2P			BIT(2)
     76#define MWIFIEX_DRIVER_MODE_BITMASK		(BIT(0) | BIT(1) | BIT(2))
     77
     78#define MWIFIEX_MAX_AP				64
     79
     80#define MWIFIEX_MAX_PKTS_TXQ			16
     81
     82#define MWIFIEX_DEFAULT_WATCHDOG_TIMEOUT	(5 * HZ)
     83
     84#define MWIFIEX_TIMER_10S			10000
     85#define MWIFIEX_TIMER_1S			1000
     86
     87#define MAX_TX_PENDING      400
     88#define LOW_TX_PENDING      380
     89
     90#define HIGH_RX_PENDING     50
     91#define LOW_RX_PENDING      20
     92
     93#define MWIFIEX_UPLD_SIZE               (2312)
     94
     95#define MAX_EVENT_SIZE                  2048
     96
     97#define MWIFIEX_FW_DUMP_SIZE       (2 * 1024 * 1024)
     98
     99#define ARP_FILTER_MAX_BUF_SIZE         68
    100
    101#define MWIFIEX_KEY_BUFFER_SIZE			16
    102#define MWIFIEX_DEFAULT_LISTEN_INTERVAL 10
    103#define MWIFIEX_MAX_REGION_CODE         9
    104
    105#define DEFAULT_BCN_AVG_FACTOR          8
    106#define DEFAULT_DATA_AVG_FACTOR         8
    107
    108#define FIRST_VALID_CHANNEL				0xff
    109#define DEFAULT_AD_HOC_CHANNEL			6
    110#define DEFAULT_AD_HOC_CHANNEL_A		36
    111
    112#define DEFAULT_BCN_MISS_TIMEOUT		5
    113
    114#define MAX_SCAN_BEACON_BUFFER			8000
    115
    116#define SCAN_BEACON_ENTRY_PAD			6
    117
    118#define MWIFIEX_PASSIVE_SCAN_CHAN_TIME	110
    119#define MWIFIEX_ACTIVE_SCAN_CHAN_TIME	40
    120#define MWIFIEX_SPECIFIC_SCAN_CHAN_TIME	40
    121#define MWIFIEX_DEF_SCAN_CHAN_GAP_TIME  50
    122
    123#define SCAN_RSSI(RSSI)					(0x100 - ((u8)(RSSI)))
    124
    125#define MWIFIEX_MAX_TOTAL_SCAN_TIME	(MWIFIEX_TIMER_10S - MWIFIEX_TIMER_1S)
    126
    127#define WPA_GTK_OUI_OFFSET				2
    128#define RSN_GTK_OUI_OFFSET				2
    129
    130#define MWIFIEX_OUI_NOT_PRESENT			0
    131#define MWIFIEX_OUI_PRESENT				1
    132
    133#define PKT_TYPE_MGMT	0xE5
    134
    135/*
    136 * Do not check for data_received for USB, as data_received
    137 * is handled in mwifiex_usb_recv for USB
    138 */
    139#define IS_CARD_RX_RCVD(adapter) (adapter->cmd_resp_received || \
    140				adapter->event_received || \
    141				adapter->data_received)
    142
    143#define MWIFIEX_TYPE_CMD				1
    144#define MWIFIEX_TYPE_DATA				0
    145#define MWIFIEX_TYPE_AGGR_DATA				10
    146#define MWIFIEX_TYPE_EVENT				3
    147
    148#define MAX_BITMAP_RATES_SIZE			18
    149
    150#define MAX_CHANNEL_BAND_BG     14
    151#define MAX_CHANNEL_BAND_A      165
    152
    153#define MAX_FREQUENCY_BAND_BG   2484
    154
    155#define MWIFIEX_EVENT_HEADER_LEN           4
    156#define MWIFIEX_UAP_EVENT_EXTRA_HEADER	   2
    157
    158#define MWIFIEX_TYPE_LEN			4
    159#define MWIFIEX_USB_TYPE_CMD			0xF00DFACE
    160#define MWIFIEX_USB_TYPE_DATA			0xBEADC0DE
    161#define MWIFIEX_USB_TYPE_EVENT			0xBEEFFACE
    162
    163/* Threshold for tx_timeout_cnt before we trigger a card reset */
    164#define TX_TIMEOUT_THRESHOLD	6
    165
    166#define MWIFIEX_DRV_INFO_SIZE_MAX 0x40000
    167
    168/* Address alignment */
    169#define MWIFIEX_ALIGN_ADDR(p, a) (((long)(p) + (a) - 1) & ~((a) - 1))
    170
    171#define MWIFIEX_MAC_LOCAL_ADMIN_BIT		41
    172
    173/**
    174 *enum mwifiex_debug_level  -  marvell wifi debug level
    175 */
    176enum MWIFIEX_DEBUG_LEVEL {
    177	MWIFIEX_DBG_MSG		= 0x00000001,
    178	MWIFIEX_DBG_FATAL	= 0x00000002,
    179	MWIFIEX_DBG_ERROR	= 0x00000004,
    180	MWIFIEX_DBG_DATA	= 0x00000008,
    181	MWIFIEX_DBG_CMD		= 0x00000010,
    182	MWIFIEX_DBG_EVENT	= 0x00000020,
    183	MWIFIEX_DBG_INTR	= 0x00000040,
    184	MWIFIEX_DBG_IOCTL	= 0x00000080,
    185
    186	MWIFIEX_DBG_MPA_D	= 0x00008000,
    187	MWIFIEX_DBG_DAT_D	= 0x00010000,
    188	MWIFIEX_DBG_CMD_D	= 0x00020000,
    189	MWIFIEX_DBG_EVT_D	= 0x00040000,
    190	MWIFIEX_DBG_FW_D	= 0x00080000,
    191	MWIFIEX_DBG_IF_D	= 0x00100000,
    192
    193	MWIFIEX_DBG_ENTRY	= 0x10000000,
    194	MWIFIEX_DBG_WARN	= 0x20000000,
    195	MWIFIEX_DBG_INFO	= 0x40000000,
    196	MWIFIEX_DBG_DUMP	= 0x80000000,
    197
    198	MWIFIEX_DBG_ANY		= 0xffffffff
    199};
    200
    201#define MWIFIEX_DEFAULT_DEBUG_MASK	(MWIFIEX_DBG_MSG | \
    202					MWIFIEX_DBG_FATAL | \
    203					MWIFIEX_DBG_ERROR)
    204
    205__printf(3, 4)
    206void _mwifiex_dbg(const struct mwifiex_adapter *adapter, int mask,
    207		  const char *fmt, ...);
    208#define mwifiex_dbg(adapter, mask, fmt, ...)				\
    209	_mwifiex_dbg(adapter, MWIFIEX_DBG_##mask, fmt, ##__VA_ARGS__)
    210
    211#define DEBUG_DUMP_DATA_MAX_LEN		128
    212#define mwifiex_dbg_dump(adapter, dbg_mask, str, buf, len)	\
    213do {								\
    214	if ((adapter)->debug_mask & MWIFIEX_DBG_##dbg_mask)	\
    215		print_hex_dump(KERN_DEBUG, str,			\
    216			       DUMP_PREFIX_OFFSET, 16, 1,	\
    217			       buf, len, false);		\
    218} while (0)
    219
    220/** Min BGSCAN interval 15 second */
    221#define MWIFIEX_BGSCAN_INTERVAL 15000
    222/** default repeat count */
    223#define MWIFIEX_BGSCAN_REPEAT_COUNT 6
    224
    225struct mwifiex_dbg {
    226	u32 num_cmd_host_to_card_failure;
    227	u32 num_cmd_sleep_cfm_host_to_card_failure;
    228	u32 num_tx_host_to_card_failure;
    229	u32 num_event_deauth;
    230	u32 num_event_disassoc;
    231	u32 num_event_link_lost;
    232	u32 num_cmd_deauth;
    233	u32 num_cmd_assoc_success;
    234	u32 num_cmd_assoc_failure;
    235	u32 num_tx_timeout;
    236	u16 timeout_cmd_id;
    237	u16 timeout_cmd_act;
    238	u16 last_cmd_id[DBG_CMD_NUM];
    239	u16 last_cmd_act[DBG_CMD_NUM];
    240	u16 last_cmd_index;
    241	u16 last_cmd_resp_id[DBG_CMD_NUM];
    242	u16 last_cmd_resp_index;
    243	u16 last_event[DBG_CMD_NUM];
    244	u16 last_event_index;
    245	u32 last_mp_wr_bitmap[MWIFIEX_DBG_SDIO_MP_NUM];
    246	u32 last_mp_wr_ports[MWIFIEX_DBG_SDIO_MP_NUM];
    247	u32 last_mp_wr_len[MWIFIEX_DBG_SDIO_MP_NUM];
    248	u32 last_mp_curr_wr_port[MWIFIEX_DBG_SDIO_MP_NUM];
    249	u8 last_sdio_mp_index;
    250};
    251
    252enum MWIFIEX_HARDWARE_STATUS {
    253	MWIFIEX_HW_STATUS_READY,
    254	MWIFIEX_HW_STATUS_INITIALIZING,
    255	MWIFIEX_HW_STATUS_INIT_DONE,
    256	MWIFIEX_HW_STATUS_RESET,
    257	MWIFIEX_HW_STATUS_NOT_READY
    258};
    259
    260enum MWIFIEX_802_11_POWER_MODE {
    261	MWIFIEX_802_11_POWER_MODE_CAM,
    262	MWIFIEX_802_11_POWER_MODE_PSP
    263};
    264
    265struct mwifiex_tx_param {
    266	u32 next_pkt_len;
    267};
    268
    269enum MWIFIEX_PS_STATE {
    270	PS_STATE_AWAKE,
    271	PS_STATE_PRE_SLEEP,
    272	PS_STATE_SLEEP_CFM,
    273	PS_STATE_SLEEP
    274};
    275
    276enum mwifiex_iface_type {
    277	MWIFIEX_SDIO,
    278	MWIFIEX_PCIE,
    279	MWIFIEX_USB
    280};
    281
    282struct mwifiex_add_ba_param {
    283	u32 tx_win_size;
    284	u32 rx_win_size;
    285	u32 timeout;
    286	u8 tx_amsdu;
    287	u8 rx_amsdu;
    288};
    289
    290struct mwifiex_tx_aggr {
    291	u8 ampdu_user;
    292	u8 ampdu_ap;
    293	u8 amsdu;
    294};
    295
    296enum mwifiex_ba_status {
    297	BA_SETUP_NONE = 0,
    298	BA_SETUP_INPROGRESS,
    299	BA_SETUP_COMPLETE
    300};
    301
    302struct mwifiex_ra_list_tbl {
    303	struct list_head list;
    304	struct sk_buff_head skb_head;
    305	u8 ra[ETH_ALEN];
    306	u32 is_11n_enabled;
    307	u16 max_amsdu;
    308	u16 ba_pkt_count;
    309	u8 ba_packet_thr;
    310	enum mwifiex_ba_status ba_status;
    311	u8 amsdu_in_ampdu;
    312	u16 total_pkt_count;
    313	bool tdls_link;
    314	bool tx_paused;
    315};
    316
    317struct mwifiex_tid_tbl {
    318	struct list_head ra_list;
    319};
    320
    321#define WMM_HIGHEST_PRIORITY		7
    322#define HIGH_PRIO_TID				7
    323#define LOW_PRIO_TID				0
    324#define NO_PKT_PRIO_TID				-1
    325#define MWIFIEX_WMM_DRV_DELAY_MAX 510
    326
    327struct mwifiex_wmm_desc {
    328	struct mwifiex_tid_tbl tid_tbl_ptr[MAX_NUM_TID];
    329	u32 packets_out[MAX_NUM_TID];
    330	u32 pkts_paused[MAX_NUM_TID];
    331	/* spin lock to protect ra_list */
    332	spinlock_t ra_list_spinlock;
    333	struct mwifiex_wmm_ac_status ac_status[IEEE80211_NUM_ACS];
    334	enum mwifiex_wmm_ac_e ac_down_graded_vals[IEEE80211_NUM_ACS];
    335	u32 drv_pkt_delay_max;
    336	u8 queue_priority[IEEE80211_NUM_ACS];
    337	u32 user_pri_pkt_tx_ctrl[WMM_HIGHEST_PRIORITY + 1];	/* UP: 0 to 7 */
    338	/* Number of transmit packets queued */
    339	atomic_t tx_pkts_queued;
    340	/* Tracks highest priority with a packet queued */
    341	atomic_t highest_queued_prio;
    342};
    343
    344struct mwifiex_802_11_security {
    345	u8 wpa_enabled;
    346	u8 wpa2_enabled;
    347	u8 wapi_enabled;
    348	u8 wapi_key_on;
    349	u8 wep_enabled;
    350	u32 authentication_mode;
    351	u8 is_authtype_auto;
    352	u32 encryption_mode;
    353};
    354
    355struct ieee_types_header {
    356	u8 element_id;
    357	u8 len;
    358} __packed;
    359
    360struct ieee_types_vendor_specific {
    361	struct ieee_types_vendor_header vend_hdr;
    362	u8 data[IEEE_MAX_IE_SIZE - sizeof(struct ieee_types_vendor_header)];
    363} __packed;
    364
    365struct ieee_types_generic {
    366	struct ieee_types_header ieee_hdr;
    367	u8 data[IEEE_MAX_IE_SIZE - sizeof(struct ieee_types_header)];
    368} __packed;
    369
    370struct ieee_types_bss_co_2040 {
    371	struct ieee_types_header ieee_hdr;
    372	u8 bss_2040co;
    373} __packed;
    374
    375struct ieee_types_extcap {
    376	struct ieee_types_header ieee_hdr;
    377	u8 ext_capab[8];
    378} __packed;
    379
    380struct ieee_types_vht_cap {
    381	struct ieee_types_header ieee_hdr;
    382	struct ieee80211_vht_cap vhtcap;
    383} __packed;
    384
    385struct ieee_types_vht_oper {
    386	struct ieee_types_header ieee_hdr;
    387	struct ieee80211_vht_operation vhtoper;
    388} __packed;
    389
    390struct ieee_types_aid {
    391	struct ieee_types_header ieee_hdr;
    392	u16 aid;
    393} __packed;
    394
    395struct mwifiex_bssdescriptor {
    396	u8 mac_address[ETH_ALEN];
    397	struct cfg80211_ssid ssid;
    398	u32 privacy;
    399	s32 rssi;
    400	u32 channel;
    401	u32 freq;
    402	u16 beacon_period;
    403	u8 erp_flags;
    404	u32 bss_mode;
    405	u8 supported_rates[MWIFIEX_SUPPORTED_RATES];
    406	u8 data_rates[MWIFIEX_SUPPORTED_RATES];
    407	/* Network band.
    408	 * BAND_B(0x01): 'b' band
    409	 * BAND_G(0x02): 'g' band
    410	 * BAND_A(0X04): 'a' band
    411	 */
    412	u16 bss_band;
    413	u64 fw_tsf;
    414	u64 timestamp;
    415	union ieee_types_phy_param_set phy_param_set;
    416	union ieee_types_ss_param_set ss_param_set;
    417	u16 cap_info_bitmap;
    418	struct ieee_types_wmm_parameter wmm_ie;
    419	u8  disable_11n;
    420	struct ieee80211_ht_cap *bcn_ht_cap;
    421	u16 ht_cap_offset;
    422	struct ieee80211_ht_operation *bcn_ht_oper;
    423	u16 ht_info_offset;
    424	u8 *bcn_bss_co_2040;
    425	u16 bss_co_2040_offset;
    426	u8 *bcn_ext_cap;
    427	u16 ext_cap_offset;
    428	struct ieee80211_vht_cap *bcn_vht_cap;
    429	u16 vht_cap_offset;
    430	struct ieee80211_vht_operation *bcn_vht_oper;
    431	u16 vht_info_offset;
    432	struct ieee_types_oper_mode_ntf *oper_mode;
    433	u16 oper_mode_offset;
    434	u8 disable_11ac;
    435	struct ieee_types_vendor_specific *bcn_wpa_ie;
    436	u16 wpa_offset;
    437	struct ieee_types_generic *bcn_rsn_ie;
    438	u16 rsn_offset;
    439	struct ieee_types_generic *bcn_wapi_ie;
    440	u16 wapi_offset;
    441	u8 *beacon_buf;
    442	u32 beacon_buf_size;
    443	u8 sensed_11h;
    444	u8 local_constraint;
    445	u8 chan_sw_ie_present;
    446};
    447
    448struct mwifiex_current_bss_params {
    449	struct mwifiex_bssdescriptor bss_descriptor;
    450	u8 wmm_enabled;
    451	u8 wmm_uapsd_enabled;
    452	u8 band;
    453	u32 num_of_rates;
    454	u8 data_rates[MWIFIEX_SUPPORTED_RATES];
    455};
    456
    457struct mwifiex_sleep_params {
    458	u16 sp_error;
    459	u16 sp_offset;
    460	u16 sp_stable_time;
    461	u8 sp_cal_control;
    462	u8 sp_ext_sleep_clk;
    463	u16 sp_reserved;
    464};
    465
    466struct mwifiex_sleep_period {
    467	u16 period;
    468	u16 reserved;
    469};
    470
    471struct mwifiex_wep_key {
    472	u32 length;
    473	u32 key_index;
    474	u32 key_length;
    475	u8 key_material[MWIFIEX_KEY_BUFFER_SIZE];
    476};
    477
    478#define MAX_REGION_CHANNEL_NUM  2
    479
    480struct mwifiex_chan_freq_power {
    481	u16 channel;
    482	u32 freq;
    483	u16 max_tx_power;
    484	u8 unsupported;
    485};
    486
    487enum state_11d_t {
    488	DISABLE_11D = 0,
    489	ENABLE_11D = 1,
    490};
    491
    492#define MWIFIEX_MAX_TRIPLET_802_11D		83
    493
    494struct mwifiex_802_11d_domain_reg {
    495	u8 country_code[IEEE80211_COUNTRY_STRING_LEN];
    496	u8 no_of_triplet;
    497	struct ieee80211_country_ie_triplet
    498		triplet[MWIFIEX_MAX_TRIPLET_802_11D];
    499};
    500
    501struct mwifiex_vendor_spec_cfg_ie {
    502	u16 mask;
    503	u16 flag;
    504	u8 ie[MWIFIEX_MAX_VSIE_LEN];
    505};
    506
    507struct wps {
    508	u8 session_enable;
    509};
    510
    511struct mwifiex_roc_cfg {
    512	u64 cookie;
    513	struct ieee80211_channel chan;
    514};
    515
    516enum mwifiex_iface_work_flags {
    517	MWIFIEX_IFACE_WORK_DEVICE_DUMP,
    518	MWIFIEX_IFACE_WORK_CARD_RESET,
    519};
    520
    521enum mwifiex_adapter_work_flags {
    522	MWIFIEX_SURPRISE_REMOVED,
    523	MWIFIEX_IS_CMD_TIMEDOUT,
    524	MWIFIEX_IS_SUSPENDED,
    525	MWIFIEX_IS_HS_CONFIGURED,
    526	MWIFIEX_IS_HS_ENABLING,
    527	MWIFIEX_IS_REQUESTING_FW_VEREXT,
    528};
    529
    530struct mwifiex_band_config {
    531	u8 chan_band:2;
    532	u8 chan_width:2;
    533	u8 chan2_offset:2;
    534	u8 scan_mode:2;
    535} __packed;
    536
    537struct mwifiex_channel_band {
    538	struct mwifiex_band_config band_config;
    539	u8 channel;
    540};
    541
    542struct mwifiex_private {
    543	struct mwifiex_adapter *adapter;
    544	u8 bss_type;
    545	u8 bss_role;
    546	u8 bss_priority;
    547	u8 bss_num;
    548	u8 bss_started;
    549	u8 frame_type;
    550	u8 curr_addr[ETH_ALEN];
    551	u8 media_connected;
    552	u8 port_open;
    553	u8 usb_port;
    554	u32 num_tx_timeout;
    555	/* track consecutive timeout */
    556	u8 tx_timeout_cnt;
    557	struct net_device *netdev;
    558	struct net_device_stats stats;
    559	u32 curr_pkt_filter;
    560	u32 bss_mode;
    561	u32 pkt_tx_ctrl;
    562	u16 tx_power_level;
    563	u8 max_tx_power_level;
    564	u8 min_tx_power_level;
    565	u32 tx_ant;
    566	u32 rx_ant;
    567	u8 tx_rate;
    568	u8 tx_htinfo;
    569	u8 rxpd_htinfo;
    570	u8 rxpd_rate;
    571	u16 rate_bitmap;
    572	u16 bitmap_rates[MAX_BITMAP_RATES_SIZE];
    573	u32 data_rate;
    574	u8 is_data_rate_auto;
    575	u16 bcn_avg_factor;
    576	u16 data_avg_factor;
    577	s16 data_rssi_last;
    578	s16 data_nf_last;
    579	s16 data_rssi_avg;
    580	s16 data_nf_avg;
    581	s16 bcn_rssi_last;
    582	s16 bcn_nf_last;
    583	s16 bcn_rssi_avg;
    584	s16 bcn_nf_avg;
    585	struct mwifiex_bssdescriptor *attempted_bss_desc;
    586	struct cfg80211_ssid prev_ssid;
    587	u8 prev_bssid[ETH_ALEN];
    588	struct mwifiex_current_bss_params curr_bss_params;
    589	u16 beacon_period;
    590	u8 dtim_period;
    591	u16 listen_interval;
    592	u16 atim_window;
    593	u8 adhoc_channel;
    594	u8 adhoc_is_link_sensed;
    595	u8 adhoc_state;
    596	struct mwifiex_802_11_security sec_info;
    597	struct mwifiex_wep_key wep_key[NUM_WEP_KEYS];
    598	u16 wep_key_curr_index;
    599	u8 wpa_ie[256];
    600	u16 wpa_ie_len;
    601	u8 wpa_is_gtk_set;
    602	struct host_cmd_ds_802_11_key_material aes_key;
    603	struct host_cmd_ds_802_11_key_material_v2 aes_key_v2;
    604	u8 wapi_ie[256];
    605	u16 wapi_ie_len;
    606	u8 *wps_ie;
    607	u16 wps_ie_len;
    608	u8 wmm_required;
    609	u8 wmm_enabled;
    610	u8 wmm_qosinfo;
    611	struct mwifiex_wmm_desc wmm;
    612	atomic_t wmm_tx_pending[IEEE80211_NUM_ACS];
    613	struct list_head sta_list;
    614	/* spin lock for associated station/TDLS peers list */
    615	spinlock_t sta_list_spinlock;
    616	struct list_head auto_tdls_list;
    617	/* spin lock for auto TDLS peer list */
    618	spinlock_t auto_tdls_lock;
    619	struct list_head tx_ba_stream_tbl_ptr;
    620	/* spin lock for tx_ba_stream_tbl_ptr queue */
    621	spinlock_t tx_ba_stream_tbl_lock;
    622	struct mwifiex_tx_aggr aggr_prio_tbl[MAX_NUM_TID];
    623	struct mwifiex_add_ba_param add_ba_param;
    624	u16 rx_seq[MAX_NUM_TID];
    625	u8 tos_to_tid_inv[MAX_NUM_TID];
    626	struct list_head rx_reorder_tbl_ptr;
    627	/* spin lock for rx_reorder_tbl_ptr queue */
    628	spinlock_t rx_reorder_tbl_lock;
    629#define MWIFIEX_ASSOC_RSP_BUF_SIZE  500
    630	u8 assoc_rsp_buf[MWIFIEX_ASSOC_RSP_BUF_SIZE];
    631	u32 assoc_rsp_size;
    632
    633#define MWIFIEX_GENIE_BUF_SIZE      256
    634	u8 gen_ie_buf[MWIFIEX_GENIE_BUF_SIZE];
    635	u8 gen_ie_buf_len;
    636
    637	struct mwifiex_vendor_spec_cfg_ie vs_ie[MWIFIEX_MAX_VSIE_NUM];
    638
    639#define MWIFIEX_ASSOC_TLV_BUF_SIZE  256
    640	u8 assoc_tlv_buf[MWIFIEX_ASSOC_TLV_BUF_SIZE];
    641	u8 assoc_tlv_buf_len;
    642
    643	u8 *curr_bcn_buf;
    644	u32 curr_bcn_size;
    645	/* spin lock for beacon buffer */
    646	spinlock_t curr_bcn_buf_lock;
    647	struct wireless_dev wdev;
    648	struct mwifiex_chan_freq_power cfp;
    649	u32 versionstrsel;
    650	char version_str[MWIFIEX_VERSION_STR_LENGTH];
    651#ifdef CONFIG_DEBUG_FS
    652	struct dentry *dfs_dev_dir;
    653#endif
    654	u16 current_key_index;
    655	struct mutex async_mutex;
    656	struct cfg80211_scan_request *scan_request;
    657	u8 cfg_bssid[6];
    658	struct wps wps;
    659	u8 scan_block;
    660	s32 cqm_rssi_thold;
    661	u32 cqm_rssi_hyst;
    662	u8 subsc_evt_rssi_state;
    663	struct mwifiex_ds_misc_subsc_evt async_subsc_evt_storage;
    664	struct mwifiex_ie mgmt_ie[MAX_MGMT_IE_INDEX];
    665	u16 beacon_idx;
    666	u16 proberesp_idx;
    667	u16 assocresp_idx;
    668	u16 gen_idx;
    669	u8 ap_11n_enabled;
    670	u8 ap_11ac_enabled;
    671	u32 mgmt_frame_mask;
    672	struct mwifiex_roc_cfg roc_cfg;
    673	bool scan_aborting;
    674	u8 sched_scanning;
    675	u8 csa_chan;
    676	unsigned long csa_expire_time;
    677	u8 del_list_idx;
    678	bool hs2_enabled;
    679	struct mwifiex_uap_bss_param bss_cfg;
    680	struct cfg80211_chan_def bss_chandef;
    681	struct station_parameters *sta_params;
    682	struct sk_buff_head tdls_txq;
    683	u8 check_tdls_tx;
    684	struct timer_list auto_tdls_timer;
    685	bool auto_tdls_timer_active;
    686	struct idr ack_status_frames;
    687	/* spin lock for ack status */
    688	spinlock_t ack_status_lock;
    689	/** rx histogram data */
    690	struct mwifiex_histogram_data *hist_data;
    691	struct cfg80211_chan_def dfs_chandef;
    692	struct workqueue_struct *dfs_cac_workqueue;
    693	struct delayed_work dfs_cac_work;
    694	struct timer_list dfs_chan_switch_timer;
    695	struct workqueue_struct *dfs_chan_sw_workqueue;
    696	struct delayed_work dfs_chan_sw_work;
    697	struct cfg80211_beacon_data beacon_after;
    698	struct mwifiex_11h_intf_state state_11h;
    699	struct mwifiex_ds_mem_rw mem_rw;
    700	struct sk_buff_head bypass_txq;
    701	struct mwifiex_user_scan_chan hidden_chan[MWIFIEX_USER_SCAN_CHAN_MAX];
    702	u8 assoc_resp_ht_param;
    703	bool ht_param_present;
    704};
    705
    706
    707struct mwifiex_tx_ba_stream_tbl {
    708	struct list_head list;
    709	int tid;
    710	u8 ra[ETH_ALEN];
    711	enum mwifiex_ba_status ba_status;
    712	u8 amsdu;
    713};
    714
    715struct mwifiex_rx_reorder_tbl;
    716
    717struct reorder_tmr_cnxt {
    718	struct timer_list timer;
    719	struct mwifiex_rx_reorder_tbl *ptr;
    720	struct mwifiex_private *priv;
    721	u8 timer_is_set;
    722};
    723
    724struct mwifiex_rx_reorder_tbl {
    725	struct list_head list;
    726	int tid;
    727	u8 ta[ETH_ALEN];
    728	int init_win;
    729	int start_win;
    730	int win_size;
    731	void **rx_reorder_ptr;
    732	struct reorder_tmr_cnxt timer_context;
    733	u8 amsdu;
    734	u8 flags;
    735};
    736
    737struct mwifiex_bss_prio_node {
    738	struct list_head list;
    739	struct mwifiex_private *priv;
    740};
    741
    742struct mwifiex_bss_prio_tbl {
    743	struct list_head bss_prio_head;
    744	/* spin lock for bss priority  */
    745	spinlock_t bss_prio_lock;
    746	struct mwifiex_bss_prio_node *bss_prio_cur;
    747};
    748
    749struct cmd_ctrl_node {
    750	struct list_head list;
    751	struct mwifiex_private *priv;
    752	u32 cmd_no;
    753	u32 cmd_flag;
    754	struct sk_buff *cmd_skb;
    755	struct sk_buff *resp_skb;
    756	void *data_buf;
    757	u32 wait_q_enabled;
    758	struct sk_buff *skb;
    759	u8 *condition;
    760	u8 cmd_wait_q_woken;
    761};
    762
    763struct mwifiex_bss_priv {
    764	u8 band;
    765	u64 fw_tsf;
    766};
    767
    768struct mwifiex_tdls_capab {
    769	__le16 capab;
    770	u8 rates[32];
    771	u8 rates_len;
    772	u8 qos_info;
    773	u8 coex_2040;
    774	u16 aid;
    775	struct ieee80211_ht_cap ht_capb;
    776	struct ieee80211_ht_operation ht_oper;
    777	struct ieee_types_extcap extcap;
    778	struct ieee_types_generic rsn_ie;
    779	struct ieee80211_vht_cap vhtcap;
    780	struct ieee80211_vht_operation vhtoper;
    781};
    782
    783struct mwifiex_station_stats {
    784	u64 last_rx;
    785	s8 rssi;
    786	u64 rx_bytes;
    787	u64 tx_bytes;
    788	u32 rx_packets;
    789	u32 tx_packets;
    790	u32 tx_failed;
    791	u8 last_tx_rate;
    792	u8 last_tx_htinfo;
    793};
    794
    795/* This is AP/TDLS specific structure which stores information
    796 * about associated/peer STA
    797 */
    798struct mwifiex_sta_node {
    799	struct list_head list;
    800	u8 mac_addr[ETH_ALEN];
    801	u8 is_wmm_enabled;
    802	u8 is_11n_enabled;
    803	u8 is_11ac_enabled;
    804	u8 ampdu_sta[MAX_NUM_TID];
    805	u16 rx_seq[MAX_NUM_TID];
    806	u16 max_amsdu;
    807	u8 tdls_status;
    808	struct mwifiex_tdls_capab tdls_cap;
    809	struct mwifiex_station_stats stats;
    810	u8 tx_pause;
    811};
    812
    813struct mwifiex_auto_tdls_peer {
    814	struct list_head list;
    815	u8 mac_addr[ETH_ALEN];
    816	u8 tdls_status;
    817	int rssi;
    818	long rssi_jiffies;
    819	u8 failure_count;
    820	u8 do_discover;
    821	u8 do_setup;
    822};
    823
    824#define MWIFIEX_TYPE_AGGR_DATA_V2 11
    825#define MWIFIEX_BUS_AGGR_MODE_LEN_V2 (2)
    826#define MWIFIEX_BUS_AGGR_MAX_LEN 16000
    827#define MWIFIEX_BUS_AGGR_MAX_NUM 10
    828struct bus_aggr_params {
    829	u16 enable;
    830	u16 mode;
    831	u16 tx_aggr_max_size;
    832	u16 tx_aggr_max_num;
    833	u16 tx_aggr_align;
    834};
    835
    836struct mwifiex_if_ops {
    837	int (*init_if) (struct mwifiex_adapter *);
    838	void (*cleanup_if) (struct mwifiex_adapter *);
    839	int (*check_fw_status) (struct mwifiex_adapter *, u32);
    840	int (*check_winner_status)(struct mwifiex_adapter *);
    841	int (*prog_fw) (struct mwifiex_adapter *, struct mwifiex_fw_image *);
    842	int (*register_dev) (struct mwifiex_adapter *);
    843	void (*unregister_dev) (struct mwifiex_adapter *);
    844	int (*enable_int) (struct mwifiex_adapter *);
    845	void (*disable_int) (struct mwifiex_adapter *);
    846	int (*process_int_status) (struct mwifiex_adapter *);
    847	int (*host_to_card) (struct mwifiex_adapter *, u8, struct sk_buff *,
    848			     struct mwifiex_tx_param *);
    849	int (*wakeup) (struct mwifiex_adapter *);
    850	int (*wakeup_complete) (struct mwifiex_adapter *);
    851
    852	/* Interface specific functions */
    853	void (*update_mp_end_port) (struct mwifiex_adapter *, u16);
    854	void (*cleanup_mpa_buf) (struct mwifiex_adapter *);
    855	int (*cmdrsp_complete) (struct mwifiex_adapter *, struct sk_buff *);
    856	int (*event_complete) (struct mwifiex_adapter *, struct sk_buff *);
    857	int (*init_fw_port) (struct mwifiex_adapter *);
    858	int (*dnld_fw) (struct mwifiex_adapter *, struct mwifiex_fw_image *);
    859	void (*card_reset) (struct mwifiex_adapter *);
    860	int (*reg_dump)(struct mwifiex_adapter *, char *);
    861	void (*device_dump)(struct mwifiex_adapter *);
    862	int (*clean_pcie_ring) (struct mwifiex_adapter *adapter);
    863	void (*iface_work)(struct work_struct *work);
    864	void (*submit_rem_rx_urbs)(struct mwifiex_adapter *adapter);
    865	void (*deaggr_pkt)(struct mwifiex_adapter *, struct sk_buff *);
    866	void (*multi_port_resync)(struct mwifiex_adapter *);
    867	bool (*is_port_ready)(struct mwifiex_private *);
    868	void (*down_dev)(struct mwifiex_adapter *);
    869	void (*up_dev)(struct mwifiex_adapter *);
    870};
    871
    872struct mwifiex_adapter {
    873	u8 iface_type;
    874	unsigned int debug_mask;
    875	struct mwifiex_iface_comb iface_limit;
    876	struct mwifiex_iface_comb curr_iface_comb;
    877	struct mwifiex_private *priv[MWIFIEX_MAX_BSS_NUM];
    878	u8 priv_num;
    879	const struct firmware *firmware;
    880	char fw_name[32];
    881	int winner;
    882	struct device *dev;
    883	struct wiphy *wiphy;
    884	u8 perm_addr[ETH_ALEN];
    885	unsigned long work_flags;
    886	u32 fw_release_number;
    887	u8 intf_hdr_len;
    888	u16 init_wait_q_woken;
    889	wait_queue_head_t init_wait_q;
    890	void *card;
    891	struct mwifiex_if_ops if_ops;
    892	atomic_t bypass_tx_pending;
    893	atomic_t rx_pending;
    894	atomic_t tx_pending;
    895	atomic_t cmd_pending;
    896	atomic_t tx_hw_pending;
    897	struct workqueue_struct *workqueue;
    898	struct work_struct main_work;
    899	struct workqueue_struct *rx_workqueue;
    900	struct work_struct rx_work;
    901	struct workqueue_struct *dfs_workqueue;
    902	struct work_struct dfs_work;
    903	bool rx_work_enabled;
    904	bool rx_processing;
    905	bool delay_main_work;
    906	bool rx_locked;
    907	bool main_locked;
    908	struct mwifiex_bss_prio_tbl bss_prio_tbl[MWIFIEX_MAX_BSS_NUM];
    909	/* spin lock for main process */
    910	spinlock_t main_proc_lock;
    911	u32 mwifiex_processing;
    912	u8 more_task_flag;
    913	u16 tx_buf_size;
    914	u16 curr_tx_buf_size;
    915	/* sdio single port rx aggregation capability */
    916	bool host_disable_sdio_rx_aggr;
    917	bool sdio_rx_aggr_enable;
    918	u16 sdio_rx_block_size;
    919	u32 ioport;
    920	enum MWIFIEX_HARDWARE_STATUS hw_status;
    921	u16 number_of_antenna;
    922	u32 fw_cap_info;
    923	/* spin lock for interrupt handling */
    924	spinlock_t int_lock;
    925	u8 int_status;
    926	u32 event_cause;
    927	struct sk_buff *event_skb;
    928	u8 upld_buf[MWIFIEX_UPLD_SIZE];
    929	u8 data_sent;
    930	u8 cmd_sent;
    931	u8 cmd_resp_received;
    932	u8 event_received;
    933	u8 data_received;
    934	u16 seq_num;
    935	struct cmd_ctrl_node *cmd_pool;
    936	struct cmd_ctrl_node *curr_cmd;
    937	/* spin lock for command */
    938	spinlock_t mwifiex_cmd_lock;
    939	u16 last_init_cmd;
    940	struct timer_list cmd_timer;
    941	struct list_head cmd_free_q;
    942	/* spin lock for cmd_free_q */
    943	spinlock_t cmd_free_q_lock;
    944	struct list_head cmd_pending_q;
    945	/* spin lock for cmd_pending_q */
    946	spinlock_t cmd_pending_q_lock;
    947	struct list_head scan_pending_q;
    948	/* spin lock for scan_pending_q */
    949	spinlock_t scan_pending_q_lock;
    950	/* spin lock for RX processing routine */
    951	spinlock_t rx_proc_lock;
    952	struct sk_buff_head tx_data_q;
    953	atomic_t tx_queued;
    954	u32 scan_processing;
    955	u16 region_code;
    956	struct mwifiex_802_11d_domain_reg domain_reg;
    957	u16 scan_probes;
    958	u32 scan_mode;
    959	u16 specific_scan_time;
    960	u16 active_scan_time;
    961	u16 passive_scan_time;
    962	u16 scan_chan_gap_time;
    963	u8 fw_bands;
    964	u8 adhoc_start_band;
    965	u8 config_bands;
    966	struct mwifiex_chan_scan_param_set *scan_channels;
    967	u8 tx_lock_flag;
    968	struct mwifiex_sleep_params sleep_params;
    969	struct mwifiex_sleep_period sleep_period;
    970	u16 ps_mode;
    971	u32 ps_state;
    972	u8 need_to_wakeup;
    973	u16 multiple_dtim;
    974	u16 local_listen_interval;
    975	u16 null_pkt_interval;
    976	struct sk_buff *sleep_cfm;
    977	u16 bcn_miss_time_out;
    978	u16 adhoc_awake_period;
    979	u8 is_deep_sleep;
    980	u8 delay_null_pkt;
    981	u16 delay_to_ps;
    982	u16 enhanced_ps_mode;
    983	u8 pm_wakeup_card_req;
    984	u16 gen_null_pkt;
    985	u16 pps_uapsd_mode;
    986	u32 pm_wakeup_fw_try;
    987	struct timer_list wakeup_timer;
    988	struct mwifiex_hs_config_param hs_cfg;
    989	u8 hs_activated;
    990	u8 hs_activated_manually;
    991	u16 hs_activate_wait_q_woken;
    992	wait_queue_head_t hs_activate_wait_q;
    993	u8 event_body[MAX_EVENT_SIZE];
    994	u32 hw_dot_11n_dev_cap;
    995	u8 hw_dev_mcs_support;
    996	u8 user_dev_mcs_support;
    997	u8 adhoc_11n_enabled;
    998	u8 sec_chan_offset;
    999	struct mwifiex_dbg dbg;
   1000	u8 arp_filter[ARP_FILTER_MAX_BUF_SIZE];
   1001	u32 arp_filter_size;
   1002	struct mwifiex_wait_queue cmd_wait_q;
   1003	u8 scan_wait_q_woken;
   1004	spinlock_t queue_lock;		/* lock for tx queues */
   1005	u8 country_code[IEEE80211_COUNTRY_STRING_LEN];
   1006	u16 max_mgmt_ie_index;
   1007	const struct firmware *cal_data;
   1008	struct device_node *dt_node;
   1009
   1010	/* 11AC */
   1011	u32 is_hw_11ac_capable;
   1012	u32 hw_dot_11ac_dev_cap;
   1013	u32 hw_dot_11ac_mcs_support;
   1014	u32 usr_dot_11ac_dev_cap_bg;
   1015	u32 usr_dot_11ac_dev_cap_a;
   1016	u32 usr_dot_11ac_mcs_support;
   1017
   1018	atomic_t pending_bridged_pkts;
   1019
   1020	/* For synchronizing FW initialization with device lifecycle. */
   1021	struct completion *fw_done;
   1022	bool is_up;
   1023
   1024	bool ext_scan;
   1025	u8 fw_api_ver;
   1026	u8 key_api_major_ver, key_api_minor_ver;
   1027	u8 max_p2p_conn, max_sta_conn;
   1028	struct memory_type_mapping *mem_type_mapping_tbl;
   1029	u8 num_mem_types;
   1030	bool scan_chan_gap_enabled;
   1031	struct sk_buff_head rx_data_q;
   1032	bool mfg_mode;
   1033	struct mwifiex_chan_stats *chan_stats;
   1034	u32 num_in_chan_stats;
   1035	int survey_idx;
   1036	bool auto_tdls;
   1037	u8 coex_scan;
   1038	u8 coex_min_scan_time;
   1039	u8 coex_max_scan_time;
   1040	u8 coex_win_size;
   1041	u8 coex_tx_win_size;
   1042	u8 coex_rx_win_size;
   1043	bool drcs_enabled;
   1044	u8 active_scan_triggered;
   1045	bool usb_mc_status;
   1046	bool usb_mc_setup;
   1047	struct cfg80211_wowlan_nd_info *nd_info;
   1048	struct ieee80211_regdomain *regd;
   1049
   1050	/* Wake-on-WLAN (WoWLAN) */
   1051	int irq_wakeup;
   1052	bool wake_by_wifi;
   1053	/* Aggregation parameters*/
   1054	struct bus_aggr_params bus_aggr;
   1055	/* Device dump data/length */
   1056	void *devdump_data;
   1057	int devdump_len;
   1058	struct timer_list devdump_timer;
   1059
   1060	bool ignore_btcoex_events;
   1061};
   1062
   1063void mwifiex_process_tx_queue(struct mwifiex_adapter *adapter);
   1064
   1065int mwifiex_init_lock_list(struct mwifiex_adapter *adapter);
   1066
   1067void mwifiex_set_trans_start(struct net_device *dev);
   1068
   1069void mwifiex_stop_net_dev_queue(struct net_device *netdev,
   1070		struct mwifiex_adapter *adapter);
   1071
   1072void mwifiex_wake_up_net_dev_queue(struct net_device *netdev,
   1073		struct mwifiex_adapter *adapter);
   1074
   1075int mwifiex_init_priv(struct mwifiex_private *priv);
   1076void mwifiex_free_priv(struct mwifiex_private *priv);
   1077
   1078int mwifiex_init_fw(struct mwifiex_adapter *adapter);
   1079
   1080int mwifiex_init_fw_complete(struct mwifiex_adapter *adapter);
   1081
   1082void mwifiex_shutdown_drv(struct mwifiex_adapter *adapter);
   1083
   1084int mwifiex_dnld_fw(struct mwifiex_adapter *, struct mwifiex_fw_image *);
   1085
   1086int mwifiex_recv_packet(struct mwifiex_private *priv, struct sk_buff *skb);
   1087int mwifiex_uap_recv_packet(struct mwifiex_private *priv,
   1088			    struct sk_buff *skb);
   1089
   1090int mwifiex_process_mgmt_packet(struct mwifiex_private *priv,
   1091				struct sk_buff *skb);
   1092
   1093int mwifiex_process_event(struct mwifiex_adapter *adapter);
   1094
   1095int mwifiex_complete_cmd(struct mwifiex_adapter *adapter,
   1096			 struct cmd_ctrl_node *cmd_node);
   1097
   1098int mwifiex_send_cmd(struct mwifiex_private *priv, u16 cmd_no,
   1099		     u16 cmd_action, u32 cmd_oid, void *data_buf, bool sync);
   1100
   1101void mwifiex_cmd_timeout_func(struct timer_list *t);
   1102
   1103int mwifiex_get_debug_info(struct mwifiex_private *,
   1104			   struct mwifiex_debug_info *);
   1105
   1106int mwifiex_alloc_cmd_buffer(struct mwifiex_adapter *adapter);
   1107void mwifiex_free_cmd_buffer(struct mwifiex_adapter *adapter);
   1108void mwifiex_free_cmd_buffers(struct mwifiex_adapter *adapter);
   1109void mwifiex_cancel_all_pending_cmd(struct mwifiex_adapter *adapter);
   1110void mwifiex_cancel_pending_scan_cmd(struct mwifiex_adapter *adapter);
   1111void mwifiex_cancel_scan(struct mwifiex_adapter *adapter);
   1112
   1113void mwifiex_recycle_cmd_node(struct mwifiex_adapter *adapter,
   1114			      struct cmd_ctrl_node *cmd_node);
   1115
   1116void mwifiex_insert_cmd_to_pending_q(struct mwifiex_adapter *adapter,
   1117				     struct cmd_ctrl_node *cmd_node);
   1118
   1119int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter);
   1120int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter);
   1121int mwifiex_handle_rx_packet(struct mwifiex_adapter *adapter,
   1122			     struct sk_buff *skb);
   1123int mwifiex_process_tx(struct mwifiex_private *priv, struct sk_buff *skb,
   1124		       struct mwifiex_tx_param *tx_param);
   1125int mwifiex_send_null_packet(struct mwifiex_private *priv, u8 flags);
   1126int mwifiex_write_data_complete(struct mwifiex_adapter *adapter,
   1127				struct sk_buff *skb, int aggr, int status);
   1128void mwifiex_clean_txrx(struct mwifiex_private *priv);
   1129u8 mwifiex_check_last_packet_indication(struct mwifiex_private *priv);
   1130void mwifiex_check_ps_cond(struct mwifiex_adapter *adapter);
   1131void mwifiex_process_sleep_confirm_resp(struct mwifiex_adapter *, u8 *,
   1132					u32);
   1133int mwifiex_cmd_enh_power_mode(struct mwifiex_private *priv,
   1134			       struct host_cmd_ds_command *cmd,
   1135			       u16 cmd_action, uint16_t ps_bitmap,
   1136			       struct mwifiex_ds_auto_ds *auto_ds);
   1137int mwifiex_ret_enh_power_mode(struct mwifiex_private *priv,
   1138			       struct host_cmd_ds_command *resp,
   1139			       struct mwifiex_ds_pm_cfg *pm_cfg);
   1140void mwifiex_process_hs_config(struct mwifiex_adapter *adapter);
   1141void mwifiex_hs_activated_event(struct mwifiex_private *priv,
   1142					u8 activated);
   1143int mwifiex_set_hs_params(struct mwifiex_private *priv, u16 action,
   1144			  int cmd_type, struct mwifiex_ds_hs_cfg *hs_cfg);
   1145int mwifiex_ret_802_11_hs_cfg(struct mwifiex_private *priv,
   1146			      struct host_cmd_ds_command *resp);
   1147int mwifiex_process_rx_packet(struct mwifiex_private *priv,
   1148			      struct sk_buff *skb);
   1149int mwifiex_sta_prepare_cmd(struct mwifiex_private *, uint16_t cmd_no,
   1150			    u16 cmd_action, u32 cmd_oid,
   1151			    void *data_buf, void *cmd_buf);
   1152int mwifiex_uap_prepare_cmd(struct mwifiex_private *priv, uint16_t cmd_no,
   1153			    u16 cmd_action, u32 cmd_oid,
   1154			    void *data_buf, void *cmd_buf);
   1155int mwifiex_process_sta_cmdresp(struct mwifiex_private *, u16 cmdresp_no,
   1156				struct host_cmd_ds_command *resp);
   1157int mwifiex_process_sta_rx_packet(struct mwifiex_private *,
   1158				  struct sk_buff *skb);
   1159int mwifiex_process_uap_rx_packet(struct mwifiex_private *priv,
   1160				  struct sk_buff *skb);
   1161int mwifiex_handle_uap_rx_forward(struct mwifiex_private *priv,
   1162				  struct sk_buff *skb);
   1163int mwifiex_process_sta_event(struct mwifiex_private *);
   1164int mwifiex_process_uap_event(struct mwifiex_private *);
   1165void mwifiex_delete_all_station_list(struct mwifiex_private *priv);
   1166void mwifiex_wmm_del_peer_ra_list(struct mwifiex_private *priv,
   1167				  const u8 *ra_addr);
   1168void *mwifiex_process_sta_txpd(struct mwifiex_private *, struct sk_buff *skb);
   1169void *mwifiex_process_uap_txpd(struct mwifiex_private *, struct sk_buff *skb);
   1170int mwifiex_sta_init_cmd(struct mwifiex_private *, u8 first_sta, bool init);
   1171int mwifiex_cmd_802_11_scan(struct host_cmd_ds_command *cmd,
   1172			    struct mwifiex_scan_cmd_config *scan_cfg);
   1173void mwifiex_queue_scan_cmd(struct mwifiex_private *priv,
   1174			    struct cmd_ctrl_node *cmd_node);
   1175int mwifiex_ret_802_11_scan(struct mwifiex_private *priv,
   1176			    struct host_cmd_ds_command *resp);
   1177s32 mwifiex_ssid_cmp(struct cfg80211_ssid *ssid1, struct cfg80211_ssid *ssid2);
   1178int mwifiex_associate(struct mwifiex_private *priv,
   1179		      struct mwifiex_bssdescriptor *bss_desc);
   1180int mwifiex_cmd_802_11_associate(struct mwifiex_private *priv,
   1181				 struct host_cmd_ds_command *cmd,
   1182				 struct mwifiex_bssdescriptor *bss_desc);
   1183int mwifiex_ret_802_11_associate(struct mwifiex_private *priv,
   1184				 struct host_cmd_ds_command *resp);
   1185void mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason,
   1186				 bool from_ap);
   1187u8 mwifiex_band_to_radio_type(u8 band);
   1188int mwifiex_deauthenticate(struct mwifiex_private *priv, u8 *mac);
   1189void mwifiex_deauthenticate_all(struct mwifiex_adapter *adapter);
   1190int mwifiex_adhoc_start(struct mwifiex_private *priv,
   1191			struct cfg80211_ssid *adhoc_ssid);
   1192int mwifiex_adhoc_join(struct mwifiex_private *priv,
   1193		       struct mwifiex_bssdescriptor *bss_desc);
   1194int mwifiex_cmd_802_11_ad_hoc_start(struct mwifiex_private *priv,
   1195				    struct host_cmd_ds_command *cmd,
   1196				    struct cfg80211_ssid *req_ssid);
   1197int mwifiex_cmd_802_11_ad_hoc_join(struct mwifiex_private *priv,
   1198				   struct host_cmd_ds_command *cmd,
   1199				   struct mwifiex_bssdescriptor *bss_desc);
   1200int mwifiex_ret_802_11_ad_hoc(struct mwifiex_private *priv,
   1201			      struct host_cmd_ds_command *resp);
   1202int mwifiex_cmd_802_11_bg_scan_query(struct host_cmd_ds_command *cmd);
   1203struct mwifiex_chan_freq_power *mwifiex_get_cfp(struct mwifiex_private *priv,
   1204						u8 band, u16 channel, u32 freq);
   1205u32 mwifiex_index_to_data_rate(struct mwifiex_private *priv,
   1206			       u8 index, u8 ht_info);
   1207u32 mwifiex_index_to_acs_data_rate(struct mwifiex_private *priv,
   1208				   u8 index, u8 ht_info);
   1209u32 mwifiex_find_freq_from_band_chan(u8, u8);
   1210int mwifiex_cmd_append_vsie_tlv(struct mwifiex_private *priv, u16 vsie_mask,
   1211				u8 **buffer);
   1212u32 mwifiex_get_active_data_rates(struct mwifiex_private *priv,
   1213				    u8 *rates);
   1214u32 mwifiex_get_supported_rates(struct mwifiex_private *priv, u8 *rates);
   1215u32 mwifiex_get_rates_from_cfg80211(struct mwifiex_private *priv,
   1216				    u8 *rates, u8 radio_type);
   1217u8 mwifiex_is_rate_auto(struct mwifiex_private *priv);
   1218extern u16 region_code_index[MWIFIEX_MAX_REGION_CODE];
   1219void mwifiex_save_curr_bcn(struct mwifiex_private *priv);
   1220void mwifiex_free_curr_bcn(struct mwifiex_private *priv);
   1221int mwifiex_cmd_get_hw_spec(struct mwifiex_private *priv,
   1222			    struct host_cmd_ds_command *cmd);
   1223int mwifiex_ret_get_hw_spec(struct mwifiex_private *priv,
   1224			    struct host_cmd_ds_command *resp);
   1225int is_command_pending(struct mwifiex_adapter *adapter);
   1226void mwifiex_init_priv_params(struct mwifiex_private *priv,
   1227						struct net_device *dev);
   1228int mwifiex_set_secure_params(struct mwifiex_private *priv,
   1229			      struct mwifiex_uap_bss_param *bss_config,
   1230			      struct cfg80211_ap_settings *params);
   1231void mwifiex_set_ht_params(struct mwifiex_private *priv,
   1232			   struct mwifiex_uap_bss_param *bss_cfg,
   1233			   struct cfg80211_ap_settings *params);
   1234void mwifiex_set_vht_params(struct mwifiex_private *priv,
   1235			    struct mwifiex_uap_bss_param *bss_cfg,
   1236			    struct cfg80211_ap_settings *params);
   1237void mwifiex_set_tpc_params(struct mwifiex_private *priv,
   1238			    struct mwifiex_uap_bss_param *bss_cfg,
   1239			    struct cfg80211_ap_settings *params);
   1240void mwifiex_set_uap_rates(struct mwifiex_uap_bss_param *bss_cfg,
   1241			   struct cfg80211_ap_settings *params);
   1242void mwifiex_set_vht_width(struct mwifiex_private *priv,
   1243			   enum nl80211_chan_width width,
   1244			   bool ap_11ac_disable);
   1245void
   1246mwifiex_set_wmm_params(struct mwifiex_private *priv,
   1247		       struct mwifiex_uap_bss_param *bss_cfg,
   1248		       struct cfg80211_ap_settings *params);
   1249void mwifiex_set_ba_params(struct mwifiex_private *priv);
   1250
   1251void mwifiex_update_ampdu_txwinsize(struct mwifiex_adapter *pmadapter);
   1252void mwifiex_bt_coex_wlan_param_update_event(struct mwifiex_private *priv,
   1253					     struct sk_buff *event_skb);
   1254
   1255void mwifiex_set_11ac_ba_params(struct mwifiex_private *priv);
   1256int mwifiex_cmd_802_11_scan_ext(struct mwifiex_private *priv,
   1257				struct host_cmd_ds_command *cmd,
   1258				void *data_buf);
   1259int mwifiex_ret_802_11_scan_ext(struct mwifiex_private *priv,
   1260				struct host_cmd_ds_command *resp);
   1261int mwifiex_handle_event_ext_scan_report(struct mwifiex_private *priv,
   1262					 void *buf);
   1263int mwifiex_cmd_802_11_bg_scan_config(struct mwifiex_private *priv,
   1264				      struct host_cmd_ds_command *cmd,
   1265				      void *data_buf);
   1266int mwifiex_stop_bg_scan(struct mwifiex_private *priv);
   1267
   1268/*
   1269 * This function checks if the queuing is RA based or not.
   1270 */
   1271static inline u8
   1272mwifiex_queuing_ra_based(struct mwifiex_private *priv)
   1273{
   1274	/*
   1275	 * Currently we assume if we are in Infra, then DA=RA. This might not be
   1276	 * true in the future
   1277	 */
   1278	if ((priv->bss_mode == NL80211_IFTYPE_STATION ||
   1279	     priv->bss_mode == NL80211_IFTYPE_P2P_CLIENT) &&
   1280	    (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_STA))
   1281		return false;
   1282
   1283	return true;
   1284}
   1285
   1286/*
   1287 * This function copies rates.
   1288 */
   1289static inline u32
   1290mwifiex_copy_rates(u8 *dest, u32 pos, u8 *src, int len)
   1291{
   1292	int i;
   1293
   1294	for (i = 0; i < len && src[i]; i++, pos++) {
   1295		if (pos >= MWIFIEX_SUPPORTED_RATES)
   1296			break;
   1297		dest[pos] = src[i];
   1298	}
   1299
   1300	return pos;
   1301}
   1302
   1303/*
   1304 * This function returns the correct private structure pointer based
   1305 * upon the BSS type and BSS number.
   1306 */
   1307static inline struct mwifiex_private *
   1308mwifiex_get_priv_by_id(struct mwifiex_adapter *adapter,
   1309		       u8 bss_num, u8 bss_type)
   1310{
   1311	int i;
   1312
   1313	for (i = 0; i < adapter->priv_num; i++) {
   1314		if (adapter->priv[i]) {
   1315			if ((adapter->priv[i]->bss_num == bss_num) &&
   1316			    (adapter->priv[i]->bss_type == bss_type))
   1317				break;
   1318		}
   1319	}
   1320	return ((i < adapter->priv_num) ? adapter->priv[i] : NULL);
   1321}
   1322
   1323/*
   1324 * This function returns the first available private structure pointer
   1325 * based upon the BSS role.
   1326 */
   1327static inline struct mwifiex_private *
   1328mwifiex_get_priv(struct mwifiex_adapter *adapter,
   1329		 enum mwifiex_bss_role bss_role)
   1330{
   1331	int i;
   1332
   1333	for (i = 0; i < adapter->priv_num; i++) {
   1334		if (adapter->priv[i]) {
   1335			if (bss_role == MWIFIEX_BSS_ROLE_ANY ||
   1336			    GET_BSS_ROLE(adapter->priv[i]) == bss_role)
   1337				break;
   1338		}
   1339	}
   1340
   1341	return ((i < adapter->priv_num) ? adapter->priv[i] : NULL);
   1342}
   1343
   1344/*
   1345 * This function checks available bss_num when adding new interface or
   1346 * changing interface type.
   1347 */
   1348static inline u8
   1349mwifiex_get_unused_bss_num(struct mwifiex_adapter *adapter, u8 bss_type)
   1350{
   1351	u8 i, j;
   1352	int index[MWIFIEX_MAX_BSS_NUM];
   1353
   1354	memset(index, 0, sizeof(index));
   1355	for (i = 0; i < adapter->priv_num; i++)
   1356		if (adapter->priv[i]) {
   1357			if (adapter->priv[i]->bss_type == bss_type &&
   1358			    !(adapter->priv[i]->bss_mode ==
   1359			      NL80211_IFTYPE_UNSPECIFIED)) {
   1360				index[adapter->priv[i]->bss_num] = 1;
   1361			}
   1362		}
   1363	for (j = 0; j < MWIFIEX_MAX_BSS_NUM; j++)
   1364		if (!index[j])
   1365			return j;
   1366	return -1;
   1367}
   1368
   1369/*
   1370 * This function returns the first available unused private structure pointer.
   1371 */
   1372static inline struct mwifiex_private *
   1373mwifiex_get_unused_priv_by_bss_type(struct mwifiex_adapter *adapter,
   1374				    u8 bss_type)
   1375{
   1376	u8 i;
   1377
   1378	for (i = 0; i < adapter->priv_num; i++)
   1379		if (adapter->priv[i]->bss_mode ==
   1380		   NL80211_IFTYPE_UNSPECIFIED) {
   1381			adapter->priv[i]->bss_num =
   1382			mwifiex_get_unused_bss_num(adapter, bss_type);
   1383			break;
   1384		}
   1385
   1386	return ((i < adapter->priv_num) ? adapter->priv[i] : NULL);
   1387}
   1388
   1389/*
   1390 * This function returns the driver private structure of a network device.
   1391 */
   1392static inline struct mwifiex_private *
   1393mwifiex_netdev_get_priv(struct net_device *dev)
   1394{
   1395	return (struct mwifiex_private *) (*(unsigned long *) netdev_priv(dev));
   1396}
   1397
   1398/*
   1399 * This function checks if a skb holds a management frame.
   1400 */
   1401static inline bool mwifiex_is_skb_mgmt_frame(struct sk_buff *skb)
   1402{
   1403	return (get_unaligned_le32(skb->data) == PKT_TYPE_MGMT);
   1404}
   1405
   1406/* This function retrieves channel closed for operation by Channel
   1407 * Switch Announcement.
   1408 */
   1409static inline u8
   1410mwifiex_11h_get_csa_closed_channel(struct mwifiex_private *priv)
   1411{
   1412	if (!priv->csa_chan)
   1413		return 0;
   1414
   1415	/* Clear csa channel, if DFS channel move time has passed */
   1416	if (time_after(jiffies, priv->csa_expire_time)) {
   1417		priv->csa_chan = 0;
   1418		priv->csa_expire_time = 0;
   1419	}
   1420
   1421	return priv->csa_chan;
   1422}
   1423
   1424static inline u8 mwifiex_is_any_intf_active(struct mwifiex_private *priv)
   1425{
   1426	struct mwifiex_private *priv_num;
   1427	int i;
   1428
   1429	for (i = 0; i < priv->adapter->priv_num; i++) {
   1430		priv_num = priv->adapter->priv[i];
   1431		if (priv_num) {
   1432			if ((GET_BSS_ROLE(priv_num) == MWIFIEX_BSS_ROLE_UAP &&
   1433			     priv_num->bss_started) ||
   1434			    (GET_BSS_ROLE(priv_num) == MWIFIEX_BSS_ROLE_STA &&
   1435			     priv_num->media_connected))
   1436				return 1;
   1437		}
   1438	}
   1439
   1440	return 0;
   1441}
   1442
   1443static inline u8 mwifiex_is_tdls_link_setup(u8 status)
   1444{
   1445	switch (status) {
   1446	case TDLS_SETUP_COMPLETE:
   1447	case TDLS_CHAN_SWITCHING:
   1448	case TDLS_IN_BASE_CHAN:
   1449	case TDLS_IN_OFF_CHAN:
   1450		return true;
   1451	default:
   1452		break;
   1453	}
   1454
   1455	return false;
   1456}
   1457
   1458/* Disable platform specific wakeup interrupt */
   1459static inline void mwifiex_disable_wake(struct mwifiex_adapter *adapter)
   1460{
   1461	if (adapter->irq_wakeup >= 0) {
   1462		disable_irq_wake(adapter->irq_wakeup);
   1463		disable_irq(adapter->irq_wakeup);
   1464		if (adapter->wake_by_wifi)
   1465			/* Undo our disable, since interrupt handler already
   1466			 * did this.
   1467			 */
   1468			enable_irq(adapter->irq_wakeup);
   1469
   1470	}
   1471}
   1472
   1473/* Enable platform specific wakeup interrupt */
   1474static inline void mwifiex_enable_wake(struct mwifiex_adapter *adapter)
   1475{
   1476	/* Enable platform specific wakeup interrupt */
   1477	if (adapter->irq_wakeup >= 0) {
   1478		adapter->wake_by_wifi = false;
   1479		enable_irq(adapter->irq_wakeup);
   1480		enable_irq_wake(adapter->irq_wakeup);
   1481	}
   1482}
   1483
   1484int mwifiex_init_shutdown_fw(struct mwifiex_private *priv,
   1485			     u32 func_init_shutdown);
   1486
   1487int mwifiex_add_card(void *card, struct completion *fw_done,
   1488		     struct mwifiex_if_ops *if_ops, u8 iface_type,
   1489		     struct device *dev);
   1490int mwifiex_remove_card(struct mwifiex_adapter *adapter);
   1491
   1492void mwifiex_get_version(struct mwifiex_adapter *adapter, char *version,
   1493			 int maxlen);
   1494int mwifiex_request_set_multicast_list(struct mwifiex_private *priv,
   1495			struct mwifiex_multicast_list *mcast_list);
   1496int mwifiex_copy_mcast_addr(struct mwifiex_multicast_list *mlist,
   1497			    struct net_device *dev);
   1498int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter,
   1499				struct cmd_ctrl_node *cmd_queued);
   1500int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss,
   1501		      struct cfg80211_ssid *req_ssid);
   1502int mwifiex_cancel_hs(struct mwifiex_private *priv, int cmd_type);
   1503int mwifiex_enable_hs(struct mwifiex_adapter *adapter);
   1504int mwifiex_disable_auto_ds(struct mwifiex_private *priv);
   1505int mwifiex_drv_get_data_rate(struct mwifiex_private *priv, u32 *rate);
   1506int mwifiex_request_scan(struct mwifiex_private *priv,
   1507			 struct cfg80211_ssid *req_ssid);
   1508int mwifiex_scan_networks(struct mwifiex_private *priv,
   1509			  const struct mwifiex_user_scan_cfg *user_scan_in);
   1510int mwifiex_set_radio(struct mwifiex_private *priv, u8 option);
   1511
   1512int mwifiex_set_encode(struct mwifiex_private *priv, struct key_params *kp,
   1513		       const u8 *key, int key_len, u8 key_index,
   1514		       const u8 *mac_addr, int disable);
   1515
   1516int mwifiex_set_gen_ie(struct mwifiex_private *priv, const u8 *ie, int ie_len);
   1517
   1518int mwifiex_get_ver_ext(struct mwifiex_private *priv, u32 version_str_sel);
   1519
   1520int mwifiex_remain_on_chan_cfg(struct mwifiex_private *priv, u16 action,
   1521			       struct ieee80211_channel *chan,
   1522			       unsigned int duration);
   1523
   1524int mwifiex_get_stats_info(struct mwifiex_private *priv,
   1525			   struct mwifiex_ds_get_stats *log);
   1526
   1527int mwifiex_reg_write(struct mwifiex_private *priv, u32 reg_type,
   1528		      u32 reg_offset, u32 reg_value);
   1529
   1530int mwifiex_reg_read(struct mwifiex_private *priv, u32 reg_type,
   1531		     u32 reg_offset, u32 *value);
   1532
   1533int mwifiex_eeprom_read(struct mwifiex_private *priv, u16 offset, u16 bytes,
   1534			u8 *value);
   1535
   1536int mwifiex_set_11n_httx_cfg(struct mwifiex_private *priv, int data);
   1537
   1538int mwifiex_get_11n_httx_cfg(struct mwifiex_private *priv, int *data);
   1539
   1540int mwifiex_set_tx_rate_cfg(struct mwifiex_private *priv, int tx_rate_index);
   1541
   1542int mwifiex_get_tx_rate_cfg(struct mwifiex_private *priv, int *tx_rate_index);
   1543
   1544int mwifiex_drv_set_power(struct mwifiex_private *priv, u32 *ps_mode);
   1545
   1546int mwifiex_drv_get_driver_version(struct mwifiex_adapter *adapter,
   1547				   char *version, int max_len);
   1548
   1549int mwifiex_set_tx_power(struct mwifiex_private *priv,
   1550			 struct mwifiex_power_cfg *power_cfg);
   1551
   1552int mwifiex_main_process(struct mwifiex_adapter *);
   1553
   1554int mwifiex_queue_tx_pkt(struct mwifiex_private *priv, struct sk_buff *skb);
   1555
   1556int mwifiex_get_bss_info(struct mwifiex_private *,
   1557			 struct mwifiex_bss_info *);
   1558int mwifiex_fill_new_bss_desc(struct mwifiex_private *priv,
   1559			      struct cfg80211_bss *bss,
   1560			      struct mwifiex_bssdescriptor *bss_desc);
   1561int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
   1562				    struct mwifiex_bssdescriptor *bss_entry);
   1563int mwifiex_check_network_compatibility(struct mwifiex_private *priv,
   1564					struct mwifiex_bssdescriptor *bss_desc);
   1565
   1566u8 mwifiex_chan_type_to_sec_chan_offset(enum nl80211_channel_type chan_type);
   1567u8 mwifiex_get_chan_type(struct mwifiex_private *priv);
   1568
   1569struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
   1570					      const char *name,
   1571					      unsigned char name_assign_type,
   1572					      enum nl80211_iftype type,
   1573					      struct vif_params *params);
   1574int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev);
   1575
   1576void mwifiex_set_sys_config_invalid_data(struct mwifiex_uap_bss_param *config);
   1577
   1578int mwifiex_add_wowlan_magic_pkt_filter(struct mwifiex_adapter *adapter);
   1579
   1580int mwifiex_set_mgmt_ies(struct mwifiex_private *priv,
   1581			 struct cfg80211_beacon_data *data);
   1582int mwifiex_del_mgmt_ies(struct mwifiex_private *priv);
   1583u8 *mwifiex_11d_code_2_region(u8 code);
   1584void mwifiex_uap_set_channel(struct mwifiex_private *priv,
   1585			     struct mwifiex_uap_bss_param *bss_cfg,
   1586			     struct cfg80211_chan_def chandef);
   1587int mwifiex_config_start_uap(struct mwifiex_private *priv,
   1588			     struct mwifiex_uap_bss_param *bss_cfg);
   1589void mwifiex_uap_del_sta_data(struct mwifiex_private *priv,
   1590			      struct mwifiex_sta_node *node);
   1591
   1592void mwifiex_config_uap_11d(struct mwifiex_private *priv,
   1593			    struct cfg80211_beacon_data *beacon_data);
   1594
   1595void mwifiex_init_11h_params(struct mwifiex_private *priv);
   1596int mwifiex_is_11h_active(struct mwifiex_private *priv);
   1597int mwifiex_11h_activate(struct mwifiex_private *priv, bool flag);
   1598
   1599void mwifiex_11h_process_join(struct mwifiex_private *priv, u8 **buffer,
   1600			      struct mwifiex_bssdescriptor *bss_desc);
   1601int mwifiex_11h_handle_event_chanswann(struct mwifiex_private *priv);
   1602int mwifiex_dnld_dt_cfgdata(struct mwifiex_private *priv,
   1603			    struct device_node *node, const char *prefix);
   1604void mwifiex_dnld_txpwr_table(struct mwifiex_private *priv);
   1605
   1606extern const struct ethtool_ops mwifiex_ethtool_ops;
   1607
   1608void mwifiex_del_all_sta_list(struct mwifiex_private *priv);
   1609void mwifiex_del_sta_entry(struct mwifiex_private *priv, const u8 *mac);
   1610void
   1611mwifiex_set_sta_ht_cap(struct mwifiex_private *priv, const u8 *ies,
   1612		       int ies_len, struct mwifiex_sta_node *node);
   1613struct mwifiex_sta_node *
   1614mwifiex_add_sta_entry(struct mwifiex_private *priv, const u8 *mac);
   1615struct mwifiex_sta_node *
   1616mwifiex_get_sta_entry(struct mwifiex_private *priv, const u8 *mac);
   1617u8 mwifiex_is_tdls_chan_switching(struct mwifiex_private *priv);
   1618u8 mwifiex_is_tdls_off_chan(struct mwifiex_private *priv);
   1619u8 mwifiex_is_send_cmd_allowed(struct mwifiex_private *priv);
   1620int mwifiex_send_tdls_data_frame(struct mwifiex_private *priv, const u8 *peer,
   1621				 u8 action_code, u8 dialog_token,
   1622				 u16 status_code, const u8 *extra_ies,
   1623				 size_t extra_ies_len);
   1624int mwifiex_send_tdls_action_frame(struct mwifiex_private *priv, const u8 *peer,
   1625				   u8 action_code, u8 dialog_token,
   1626				   u16 status_code, const u8 *extra_ies,
   1627				   size_t extra_ies_len);
   1628void mwifiex_process_tdls_action_frame(struct mwifiex_private *priv,
   1629				       u8 *buf, int len);
   1630int mwifiex_tdls_oper(struct mwifiex_private *priv, const u8 *peer, u8 action);
   1631int mwifiex_get_tdls_link_status(struct mwifiex_private *priv, const u8 *mac);
   1632int mwifiex_get_tdls_list(struct mwifiex_private *priv,
   1633			  struct tdls_peer_info *buf);
   1634void mwifiex_disable_all_tdls_links(struct mwifiex_private *priv);
   1635bool mwifiex_is_bss_in_11ac_mode(struct mwifiex_private *priv);
   1636u8 mwifiex_get_center_freq_index(struct mwifiex_private *priv, u8 band,
   1637				 u32 pri_chan, u8 chan_bw);
   1638int mwifiex_init_channel_scan_gap(struct mwifiex_adapter *adapter);
   1639
   1640int mwifiex_tdls_check_tx(struct mwifiex_private *priv, struct sk_buff *skb);
   1641void mwifiex_flush_auto_tdls_list(struct mwifiex_private *priv);
   1642void mwifiex_auto_tdls_update_peer_status(struct mwifiex_private *priv,
   1643					  const u8 *mac, u8 link_status);
   1644void mwifiex_auto_tdls_update_peer_signal(struct mwifiex_private *priv,
   1645					  u8 *mac, s8 snr, s8 nflr);
   1646void mwifiex_check_auto_tdls(struct timer_list *t);
   1647void mwifiex_add_auto_tdls_peer(struct mwifiex_private *priv, const u8 *mac);
   1648void mwifiex_setup_auto_tdls_timer(struct mwifiex_private *priv);
   1649void mwifiex_clean_auto_tdls(struct mwifiex_private *priv);
   1650int mwifiex_config_tdls_enable(struct mwifiex_private *priv);
   1651int mwifiex_config_tdls_disable(struct mwifiex_private *priv);
   1652int mwifiex_config_tdls_cs_params(struct mwifiex_private *priv);
   1653int mwifiex_stop_tdls_cs(struct mwifiex_private *priv, const u8 *peer_mac);
   1654int mwifiex_start_tdls_cs(struct mwifiex_private *priv, const u8 *peer_mac,
   1655			  u8 primary_chan, u8 second_chan_offset, u8 band);
   1656
   1657int mwifiex_cmd_issue_chan_report_request(struct mwifiex_private *priv,
   1658					  struct host_cmd_ds_command *cmd,
   1659					  void *data_buf);
   1660int mwifiex_11h_handle_chanrpt_ready(struct mwifiex_private *priv,
   1661				     struct sk_buff *skb);
   1662
   1663void mwifiex_parse_tx_status_event(struct mwifiex_private *priv,
   1664				   void *event_body);
   1665
   1666struct sk_buff *
   1667mwifiex_clone_skb_for_tx_status(struct mwifiex_private *priv,
   1668				struct sk_buff *skb, u8 flag, u64 *cookie);
   1669void mwifiex_dfs_cac_work_queue(struct work_struct *work);
   1670void mwifiex_dfs_chan_sw_work_queue(struct work_struct *work);
   1671void mwifiex_abort_cac(struct mwifiex_private *priv);
   1672int mwifiex_stop_radar_detection(struct mwifiex_private *priv,
   1673				 struct cfg80211_chan_def *chandef);
   1674int mwifiex_11h_handle_radar_detected(struct mwifiex_private *priv,
   1675				      struct sk_buff *skb);
   1676
   1677void mwifiex_hist_data_set(struct mwifiex_private *priv, u8 rx_rate, s8 snr,
   1678			   s8 nflr);
   1679void mwifiex_hist_data_reset(struct mwifiex_private *priv);
   1680void mwifiex_hist_data_add(struct mwifiex_private *priv,
   1681			   u8 rx_rate, s8 snr, s8 nflr);
   1682u8 mwifiex_adjust_data_rate(struct mwifiex_private *priv,
   1683			    u8 rx_rate, u8 ht_info);
   1684
   1685void mwifiex_drv_info_dump(struct mwifiex_adapter *adapter);
   1686void mwifiex_prepare_fw_dump_info(struct mwifiex_adapter *adapter);
   1687void mwifiex_upload_device_dump(struct mwifiex_adapter *adapter);
   1688void *mwifiex_alloc_dma_align_buf(int rx_len, gfp_t flags);
   1689void mwifiex_fw_dump_event(struct mwifiex_private *priv);
   1690void mwifiex_queue_main_work(struct mwifiex_adapter *adapter);
   1691int mwifiex_get_wakeup_reason(struct mwifiex_private *priv, u16 action,
   1692			      int cmd_type,
   1693			      struct mwifiex_ds_wakeup_reason *wakeup_reason);
   1694int mwifiex_get_chan_info(struct mwifiex_private *priv,
   1695			  struct mwifiex_channel_band *channel_band);
   1696int mwifiex_ret_wakeup_reason(struct mwifiex_private *priv,
   1697			      struct host_cmd_ds_command *resp,
   1698			      struct host_cmd_ds_wakeup_reason *wakeup_reason);
   1699void mwifiex_coex_ampdu_rxwinsize(struct mwifiex_adapter *adapter);
   1700void mwifiex_11n_delba(struct mwifiex_private *priv, int tid);
   1701int mwifiex_send_domain_info_cmd_fw(struct wiphy *wiphy);
   1702void mwifiex_process_tx_pause_event(struct mwifiex_private *priv,
   1703				    struct sk_buff *event);
   1704void mwifiex_process_multi_chan_event(struct mwifiex_private *priv,
   1705				      struct sk_buff *event_skb);
   1706void mwifiex_multi_chan_resync(struct mwifiex_adapter *adapter);
   1707int mwifiex_set_mac_address(struct mwifiex_private *priv,
   1708			    struct net_device *dev,
   1709			    bool external, u8 *new_mac);
   1710void mwifiex_devdump_tmo_func(unsigned long function_context);
   1711
   1712#ifdef CONFIG_DEBUG_FS
   1713void mwifiex_debugfs_init(void);
   1714void mwifiex_debugfs_remove(void);
   1715
   1716void mwifiex_dev_debugfs_init(struct mwifiex_private *priv);
   1717void mwifiex_dev_debugfs_remove(struct mwifiex_private *priv);
   1718#endif
   1719int mwifiex_reinit_sw(struct mwifiex_adapter *adapter);
   1720int mwifiex_shutdown_sw(struct mwifiex_adapter *adapter);
   1721#endif /* !_MWIFIEX_MAIN_H_ */