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