blob: 2307ae40fd10c77a01183bc8ea1c79b4460a2b95 [file] [log] [blame]
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001/*
Prashanth Bhatta9e143052015-12-04 11:56:47 -08002 * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
28#if !defined(WLAN_HDD_MAIN_H)
29#define WLAN_HDD_MAIN_H
30/**===========================================================================
31
32 \file WLAN_HDD_MAIN_H.h
33
34 \brief Linux HDD Adapter Type
35
36 ==========================================================================*/
37
38/*---------------------------------------------------------------------------
39 Include files
40 -------------------------------------------------------------------------*/
41
42#include <linux/netdevice.h>
43#include <linux/skbuff.h>
44#include <net/cfg80211.h>
Anurag Chouhanffb21542016-02-17 14:33:03 +053045#include <qdf_list.h>
Anurag Chouhan6d760662016-02-20 16:05:43 +053046#include <qdf_types.h>
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080047#include "sir_mac_prot_def.h"
48#include "csr_api.h"
49#include <wlan_hdd_assoc.h>
50#include <wlan_hdd_wmm.h>
51#include <wlan_hdd_cfg.h>
52#include <linux/spinlock.h>
53#if defined(WLAN_OPEN_SOURCE) && defined(CONFIG_HAS_WAKELOCK)
54#include <linux/wakelock.h>
55#endif
56#include <wlan_hdd_ftm.h>
57#ifdef FEATURE_WLAN_TDLS
58#include "wlan_hdd_tdls.h"
59#endif
60#include "wlan_hdd_cfg80211.h"
Anurag Chouhan42958bb2016-02-19 15:43:11 +053061#include <qdf_defer.h>
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080062#ifdef WLAN_FEATURE_MBSSID
63#include "sap_api.h"
64#endif
65#include "ol_txrx_osif_api.h"
66#include "ol_txrx_ctrl_api.h"
67#include <wlan_hdd_lro.h>
68
69/*---------------------------------------------------------------------------
70 Preprocessor definitions and constants
71 -------------------------------------------------------------------------*/
72/** Number of Tx Queues */
73#ifdef QCA_LL_TX_FLOW_CONTROL_V2
74#define NUM_TX_QUEUES 5
75#else
76#define NUM_TX_QUEUES 4
77#endif
Mohit Khannaee9e80f2015-11-10 11:32:49 -080078
79/** Length of the TX queue for the netdev */
80#define HDD_NETDEV_TX_QUEUE_LEN (3000)
81
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080082/** Hdd Tx Time out value */
83#ifdef LIBRA_LINUX_PC
84#define HDD_TX_TIMEOUT (8000)
85#else
86#define HDD_TX_TIMEOUT msecs_to_jiffies(5000)
87#endif
88/** Hdd Default MTU */
89#define HDD_DEFAULT_MTU (1500)
90
91#ifdef QCA_CONFIG_SMP
92#define NUM_CPUS NR_CPUS
93#else
94#define NUM_CPUS 1
95#endif
96
97/**event flags registered net device*/
98#define NET_DEVICE_REGISTERED (0)
99#define SME_SESSION_OPENED (1)
100#define INIT_TX_RX_SUCCESS (2)
101#define WMM_INIT_DONE (3)
102#define SOFTAP_BSS_STARTED (4)
103#define DEVICE_IFACE_OPENED (5)
104#define TDLS_INIT_DONE (6)
105#define ACS_PENDING (7)
106
107/* HDD global event flags */
108#define ACS_IN_PROGRESS (0)
109
110/** Maximum time(ms)to wait for disconnect to complete **/
111#ifdef QCA_WIFI_3_0_EMU
112#define WLAN_WAIT_TIME_DISCONNECT 3000
113#else
114#define WLAN_WAIT_TIME_DISCONNECT 2000
115#endif
116#define WLAN_WAIT_TIME_STATS 800
117#define WLAN_WAIT_TIME_POWER 800
118#define WLAN_WAIT_TIME_COUNTRY 1000
119#define WLAN_WAIT_TIME_LINK_STATUS 800
120/* Amount of time to wait for sme close session callback.
121 This value should be larger than the timeout used by WDI to wait for
122 a response from WCNSS */
123#define WLAN_WAIT_TIME_SESSIONOPENCLOSE 15000
124#define WLAN_WAIT_TIME_ABORTSCAN 2000
125
126/** Maximum time(ms) to wait for mc thread suspend **/
127#define WLAN_WAIT_TIME_MCTHREAD_SUSPEND 1200
128
129/** Maximum time(ms) to wait for target to be ready for suspend **/
130#define WLAN_WAIT_TIME_READY_TO_SUSPEND 2000
131
132/** Maximum time(ms) to wait for tdls add sta to complete **/
133#define WAIT_TIME_TDLS_ADD_STA 1500
134
135/** Maximum time(ms) to wait for tdls del sta to complete **/
136#define WAIT_TIME_TDLS_DEL_STA 1500
137
138/** Maximum time(ms) to wait for Link Establish Req to complete **/
139#define WAIT_TIME_TDLS_LINK_ESTABLISH_REQ 1500
140
141/** Maximum time(ms) to wait for tdls mgmt to complete **/
142#define WAIT_TIME_TDLS_MGMT 11000
143
144/* Scan Req Timeout */
145#define WLAN_WAIT_TIME_SCAN_REQ 100
146
147#define MAX_NUMBER_OF_ADAPTERS 4
148
149#define MAX_CFG_STRING_LEN 255
150
151#define MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
152/** Mac Address string **/
153#define MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
154#define MAC_ADDRESS_STR_LEN 18 /* Including null terminator */
155#define MAX_GENIE_LEN 255
156
157#define WLAN_CHIP_VERSION "WCNSS"
158
Jeff Johnson32ad1742015-12-09 13:26:44 -0800159#ifndef HDD_DISALLOW_LEGACY_HDDLOG
Anurag Chouhan6d760662016-02-20 16:05:43 +0530160#define hddLog(level, args ...) CDF_TRACE(QDF_MODULE_ID_HDD, level, ## args)
Jeff Johnson32ad1742015-12-09 13:26:44 -0800161#endif
Anurag Chouhan6d760662016-02-20 16:05:43 +0530162#define hdd_log(level, args...) CDF_TRACE(QDF_MODULE_ID_HDD, level, ## args)
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800163#define hdd_logfl(level, format, args...) hdd_log(level, FL(format), ## args)
164
165#define hdd_alert(format, args...) \
166 hdd_logfl(CDF_TRACE_LEVEL_FATAL, format, ## args)
167#define hdd_err(format, args...) \
168 hdd_logfl(CDF_TRACE_LEVEL_ERROR, format, ## args)
169#define hdd_warn(format, args...) \
170 hdd_logfl(CDF_TRACE_LEVEL_WARN, format, ## args)
171#define hdd_notice(format, args...) \
172 hdd_logfl(CDF_TRACE_LEVEL_INFO, format, ## args)
173#define hdd_info(format, args...) \
174 hdd_logfl(CDF_TRACE_LEVEL_INFO_HIGH, format, ## args)
175#define hdd_debug(format, args...) \
176 hdd_logfl(CDF_TRACE_LEVEL_DEBUG, format, ## args)
177
178#define ENTER() hdd_logfl(CDF_TRACE_LEVEL_INFO_LOW, "enter")
179#define EXIT() hdd_logfl(CDF_TRACE_LEVEL_INFO_LOW, "exit")
180
181#define WLAN_HDD_GET_PRIV_PTR(__dev__) (hdd_adapter_t *)(netdev_priv((__dev__)))
182
183#define MAX_NO_OF_2_4_CHANNELS 14
184
185#define WLAN_HDD_PUBLIC_ACTION_FRAME 4
186#define WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET 24
187#define WLAN_HDD_PUBLIC_ACTION_FRAME_BODY_OFFSET 24
188#define WLAN_HDD_PUBLIC_ACTION_FRAME_TYPE_OFFSET 30
189#define WLAN_HDD_PUBLIC_ACTION_FRAME_CATEGORY_OFFSET 0
190#define WLAN_HDD_PUBLIC_ACTION_FRAME_ACTION_OFFSET 1
191#define WLAN_HDD_PUBLIC_ACTION_FRAME_OUI_OFFSET 2
192#define WLAN_HDD_PUBLIC_ACTION_FRAME_OUI_TYPE_OFFSET 5
193#define WLAN_HDD_VENDOR_SPECIFIC_ACTION 0x09
194#define WLAN_HDD_WFA_OUI 0x506F9A
195#define WLAN_HDD_WFA_P2P_OUI_TYPE 0x09
196#define WLAN_HDD_P2P_SOCIAL_CHANNELS 3
197#define WLAN_HDD_P2P_SINGLE_CHANNEL_SCAN 1
198#define WLAN_HDD_PUBLIC_ACTION_FRAME_SUB_TYPE_OFFSET 6
199
200#define WLAN_HDD_IS_SOCIAL_CHANNEL(center_freq) \
201 (((center_freq) == 2412) || ((center_freq) == 2437) || ((center_freq) == 2462))
202
203#define WLAN_HDD_CHANNEL_IN_UNII_1_BAND(center_freq) \
204 (((center_freq) == 5180) || ((center_freq) == 5200) \
205 || ((center_freq) == 5220) || ((center_freq) == 5240))
206
207#ifdef WLAN_FEATURE_11W
208#define WLAN_HDD_SA_QUERY_ACTION_FRAME 8
209#endif
210
211#define WLAN_HDD_PUBLIC_ACTION_TDLS_DISC_RESP 14
212#define WLAN_HDD_TDLS_ACTION_FRAME 12
213#ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
214#define HDD_WAKE_LOCK_DURATION 50 /* in msecs */
215#endif
216
217#define WLAN_HDD_QOS_ACTION_FRAME 1
218#define WLAN_HDD_QOS_MAP_CONFIGURE 4
219#define HDD_SAP_WAKE_LOCK_DURATION 10000 /* in msecs */
220
221#define HDD_MOD_EXIT_SSR_MAX_RETRIES 75
222
223#ifdef WLAN_FEATURE_GTK_OFFLOAD
224#define GTK_OFFLOAD_ENABLE 0
225#define GTK_OFFLOAD_DISABLE 1
226#endif
227
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800228#define MAX_USER_COMMAND_SIZE 4096
229
230#define HDD_MIN_TX_POWER (-100) /* minimum tx power */
231#define HDD_MAX_TX_POWER (+100) /* maximum tx power */
232
233/* If IPA UC data path is enabled, target should reserve extra tx descriptors
234 * for IPA data path.
235 * Then host data path should allow less TX packet pumping in case
236 * IPA data path enabled
237 */
238#define WLAN_TFC_IPAUC_TX_DESC_RESERVE 100
239
240#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
241#ifdef CONFIG_CNSS
242#define cfg80211_vendor_cmd_reply(skb) cnss_vendor_cmd_reply(skb)
243#endif
244#endif
245
246#define BSS_WAIT_TIMEOUT 10000
247
248/*
249 * Generic asynchronous request/response support
250 *
251 * Many of the APIs supported by HDD require a call to SME to
252 * perform an action or to retrieve some data. In most cases SME
253 * performs the operation asynchronously, and will execute a provided
254 * callback function when the request has completed. In order to
255 * synchronize this the HDD API allocates a context which is then
256 * passed to SME, and which is then, in turn, passed back to the
257 * callback function when the operation completes. The callback
258 * function then sets a completion variable inside the context which
259 * the HDD API is waiting on. In an ideal world the HDD API would
260 * wait forever (or at least for a long time) for the response to be
261 * received and for the completion variable to be set. However in
262 * most cases these HDD APIs are being invoked in the context of a
263 * user space thread which has invoked either a cfg80211 API or a
264 * wireless extensions ioctl and which has taken the kernel rtnl_lock.
265 * Since this lock is used to synchronize many of the kernel tasks, we
266 * do not want to hold it for a long time. In addition we do not want
267 * to block user space threads (such as the wpa supplicant's main
268 * thread) for an extended time. Therefore we only block for a short
269 * time waiting for the response before we timeout. This means that
270 * it is possible for the HDD API to timeout, and for the callback to
271 * be invoked afterwards. In order for the callback function to
272 * determine if the HDD API is still waiting, a magic value is also
273 * stored in the shared context. Only if the context has a valid
274 * magic will the callback routine do any work. In order to further
275 * synchronize these activities a spinlock is used so that if any HDD
276 * API timeout coincides with its callback, the operations of the two
277 * threads will be serialized.
278 */
279
280struct statsContext {
281 struct completion completion;
282 hdd_adapter_t *pAdapter;
283 unsigned int magic;
284};
285
286struct linkspeedContext {
287 struct completion completion;
288 hdd_adapter_t *pAdapter;
289 unsigned int magic;
290};
291
292extern spinlock_t hdd_context_lock;
293
294#define STATS_CONTEXT_MAGIC 0x53544154 /* STAT */
295#define RSSI_CONTEXT_MAGIC 0x52535349 /* RSSI */
296#define POWER_CONTEXT_MAGIC 0x504F5752 /* POWR */
297#define SNR_CONTEXT_MAGIC 0x534E5200 /* SNR */
298#define LINK_CONTEXT_MAGIC 0x4C494E4B /* LINKSPEED */
299#define LINK_STATUS_MAGIC 0x4C4B5354 /* LINKSTATUS(LNST) */
300#define TEMP_CONTEXT_MAGIC 0x74656d70 /* TEMP (temperature) */
301
302/* MAX OS Q block time value in msec
303 * Prevent from permanent stall, resume OS Q if timer expired */
304#define WLAN_HDD_TX_FLOW_CONTROL_OS_Q_BLOCK_TIME 1000
305#define WLAN_SAP_HDD_TX_FLOW_CONTROL_OS_Q_BLOCK_TIME 100
306#define WLAN_HDD_TX_FLOW_CONTROL_MAX_24BAND_CH 14
307
308#define HDD_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_1_1 390
309#define HDD_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_1_1 390
310#define HDD_VHT_RX_HIGHEST_SUPPORTED_DATA_RATE_2_2 780
311#define HDD_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE_2_2 780
312
313
314#define NUM_TX_RX_HISTOGRAM 1024
315#define NUM_TX_RX_HISTOGRAM_MASK (NUM_TX_RX_HISTOGRAM - 1)
316
Mohit Khannae71e2262015-11-10 09:37:24 -0800317/**
318 * struct hdd_tx_rx_histogram - structure to keep track of tx and rx packets
319 * received over 100ms intervals
320 * @interval_rx: # of rx packets received in the last 100ms interval
321 * @interval_tx: # of tx packets received in the last 100ms interval
322 * @total_rx: # of total rx packets received on interface
323 * @total_tx: # of total tx packets received on interface
324 * @next_vote_level: cnss_bus_width_type voting level (high or low)
325 * determined on the basis of total tx and rx packets
326 * received in the last 100ms interval
327 * @next_rx_level: cnss_bus_width_type voting level (high or low)
328 * determined on the basis of rx packets received in the
329 * last 100ms interval
330 * @next_tx_level: cnss_bus_width_type voting level (high or low)
331 * determined on the basis of tx packets received in the
332 * last 100ms interval
333 *
334 * The structure keeps track of throughput requirements of wlan driver in 100ms
335 * intervals for later analysis.
336 */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800337struct hdd_tx_rx_histogram {
338 uint64_t interval_rx;
339 uint64_t interval_tx;
340 uint64_t total_rx;
341 uint64_t total_tx;
342 uint32_t next_vote_level;
343 uint32_t next_rx_level;
Mohit Khannae71e2262015-11-10 09:37:24 -0800344 uint32_t next_tx_level;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800345};
346
347typedef struct hdd_tx_rx_stats_s {
348 /* start_xmit stats */
349 __u32 txXmitCalled;
350 __u32 txXmitDropped;
351 __u32 txXmitClassifiedAC[NUM_TX_QUEUES];
352 __u32 txXmitDroppedAC[NUM_TX_QUEUES];
353 /* complete_cbk_stats */
354 __u32 txCompleted;
355 /* rx stats */
356 __u32 rxPackets[NUM_CPUS];
357 __u32 rxDropped[NUM_CPUS];
358 __u32 rxDelivered[NUM_CPUS];
359 __u32 rxRefused[NUM_CPUS];
360
361 /* txflow stats */
362 bool is_txflow_paused;
363 __u32 txflow_pause_cnt;
364 __u32 txflow_unpause_cnt;
365 __u32 txflow_timer_cnt;
366} hdd_tx_rx_stats_t;
367
368#ifdef WLAN_FEATURE_11W
369typedef struct hdd_pmf_stats_s {
370 uint8_t numUnprotDeauthRx;
371 uint8_t numUnprotDisassocRx;
372} hdd_pmf_stats_t;
373#endif
374
375typedef struct hdd_stats_s {
376 tCsrSummaryStatsInfo summary_stat;
377 tCsrGlobalClassAStatsInfo ClassA_stat;
378 tCsrGlobalClassBStatsInfo ClassB_stat;
379 tCsrGlobalClassCStatsInfo ClassC_stat;
380 tCsrGlobalClassDStatsInfo ClassD_stat;
381 tCsrPerStaStatsInfo perStaStats;
382 hdd_tx_rx_stats_t hddTxRxStats;
383#ifdef WLAN_FEATURE_11W
384 hdd_pmf_stats_t hddPmfStats;
385#endif
386} hdd_stats_t;
387
388typedef enum {
389 HDD_ROAM_STATE_NONE,
390
391 /* Issuing a disconnect due to transition into low power states. */
392 HDD_ROAM_STATE_DISCONNECTING_POWER,
393
394 /* move to this state when HDD sets a key with SME/CSR. Note this is */
395 /* an important state to get right because we will get calls into our SME */
396 /* callback routine for SetKey activity that we did not initiate! */
397 HDD_ROAM_STATE_SETTING_KEY,
398} HDD_ROAM_STATE;
399
400typedef struct roaming_info_s {
401 HDD_ROAM_STATE roamingState;
Anurag Chouhance0dc992016-02-16 18:18:03 +0530402 qdf_event_t roamingEvent;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800403
404 tSirMacAddr bssid;
405 tSirMacAddr peerMac;
406 uint32_t roamId;
407 eRoamCmdStatus roamStatus;
408 bool deferKeyComplete;
409
410} roaming_info_t;
411
412#ifdef FEATURE_WLAN_WAPI
413/* Define WAPI macros for Length, BKID count etc*/
414#define MAX_WPI_KEY_LENGTH 16
415#define MAX_NUM_PN 16
416#define MAC_ADDR_LEN 6
417#define MAX_ADDR_INDEX 12
418#define MAX_NUM_AKM_SUITES 16
419#define MAX_NUM_UNI_SUITES 16
420#define MAX_NUM_BKIDS 16
421
422/** WAPI AUTH mode definition */
423enum _WAPIAuthMode {
424 WAPI_AUTH_MODE_OPEN = 0,
425 WAPI_AUTH_MODE_PSK = 1,
426 WAPI_AUTH_MODE_CERT
427} __packed;
428typedef enum _WAPIAuthMode WAPIAuthMode;
429
430/** WAPI Work mode structure definition */
431#define WZC_ORIGINAL 0
432#define WAPI_EXTENTION 1
433
434struct _WAPI_FUNCTION_MODE {
435 unsigned char wapiMode;
436} __packed;
437
438typedef struct _WAPI_FUNCTION_MODE WAPI_FUNCTION_MODE;
439
440typedef struct _WAPI_BKID {
441 uint8_t bkid[16];
442} WAPI_BKID, *pWAPI_BKID;
443
444/** WAPI Association information structure definition */
445struct _WAPI_AssocInfo {
446 uint8_t elementID;
447 uint8_t length;
448 uint16_t version;
449 uint16_t akmSuiteCount;
450 uint32_t akmSuite[MAX_NUM_AKM_SUITES];
451 uint16_t unicastSuiteCount;
452 uint32_t unicastSuite[MAX_NUM_UNI_SUITES];
453 uint32_t multicastSuite;
454 uint16_t wapiCability;
455 uint16_t bkidCount;
456 WAPI_BKID bkidList[MAX_NUM_BKIDS];
457} __packed;
458
459typedef struct _WAPI_AssocInfo WAPI_AssocInfo;
460typedef struct _WAPI_AssocInfo *pWAPI_IEAssocInfo;
461
462/** WAPI KEY Type definition */
463enum _WAPIKeyType {
464 PAIRWISE_KEY, /* 0 */
465 GROUP_KEY /* 1 */
466} __packed;
467typedef enum _WAPIKeyType WAPIKeyType;
468
469/** WAPI KEY Direction definition */
470enum _KEY_DIRECTION {
471 None,
472 Rx,
473 Tx,
474 Rx_Tx
475} __packed;
476
477typedef enum _KEY_DIRECTION WAPI_KEY_DIRECTION;
478
479/* WAPI KEY structure definition */
480struct WLAN_WAPI_KEY {
481 WAPIKeyType keyType;
482 WAPI_KEY_DIRECTION keyDirection; /*reserved for future use */
483 uint8_t keyId;
484 uint8_t addrIndex[MAX_ADDR_INDEX]; /*reserved for future use */
485 int wpiekLen;
486 uint8_t wpiek[MAX_WPI_KEY_LENGTH];
487 int wpickLen;
488 uint8_t wpick[MAX_WPI_KEY_LENGTH];
489 uint8_t pn[MAX_NUM_PN]; /*reserved for future use */
490} __packed;
491
492typedef struct WLAN_WAPI_KEY WLAN_WAPI_KEY;
493typedef struct WLAN_WAPI_KEY *pWLAN_WAPI_KEY;
494
495#define WPA_GET_LE16(a) ((u16) (((a)[1] << 8) | (a)[0]))
496#define WPA_GET_BE24(a) ((u32) ((a[0] << 16) | (a[1] << 8) | a[2]))
497#define WLAN_EID_WAPI 68
498#define WAPI_PSK_AKM_SUITE 0x02721400
499#define WAPI_CERT_AKM_SUITE 0x01721400
500
501/* WAPI BKID List structure definition */
502struct _WLAN_BKID_LIST {
503 uint32_t length;
504 uint32_t BKIDCount;
505 WAPI_BKID BKID[1];
506} __packed;
507
508typedef struct _WLAN_BKID_LIST WLAN_BKID_LIST;
509typedef struct _WLAN_BKID_LIST *pWLAN_BKID_LIST;
510
511/* WAPI Information structure definition */
512struct hdd_wapi_info_s {
513 uint32_t nWapiMode;
514 bool fIsWapiSta;
Anurag Chouhan6d760662016-02-20 16:05:43 +0530515 struct qdf_mac_addr cachedMacAddr;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800516 uint8_t wapiAuthMode;
517} __packed;
518typedef struct hdd_wapi_info_s hdd_wapi_info_t;
519#endif /* FEATURE_WLAN_WAPI */
520
521typedef struct beacon_data_s {
522 u8 *head;
523 u8 *tail;
524 u8 *proberesp_ies;
525 u8 *assocresp_ies;
526 int head_len;
527 int tail_len;
528 int proberesp_ies_len;
529 int assocresp_ies_len;
530 int dtim_period;
531} beacon_data_t;
532
Peng Xuf5d60c82015-10-02 17:17:03 -0700533/**
Anurag Chouhan6d760662016-02-20 16:05:43 +0530534 * enum device_mode: Maintain one to one correspondence with tQDF_ADAPTER_MODE
Peng Xuf5d60c82015-10-02 17:17:03 -0700535 * @WLAN_HDD_INFRA_STATION: station mode
536 * @WLAN_HDD_SOFTAP: sap mode
537 * @WLAN_HDD_P2P_CLIENT: p2p client mode
538 * @WLAN_HDD_P2P_GO: p2p go mode
539 * @WLAN_HDD_FTM: ftm mode
540 * @WLAN_HDD_IBSS: ibss mode
541 * @WLAN_HDD_P2P_DEVICE: p2p device mode
542 * @WLAN_HDD_OCB: ocb mode
543 */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800544typedef enum device_mode {
545 WLAN_HDD_INFRA_STATION,
546 WLAN_HDD_SOFTAP,
547 WLAN_HDD_P2P_CLIENT,
548 WLAN_HDD_P2P_GO,
Peng Xuf5d60c82015-10-02 17:17:03 -0700549 WLAN_HDD_FTM,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800550 WLAN_HDD_IBSS,
551 WLAN_HDD_P2P_DEVICE,
552 WLAN_HDD_OCB
553} device_mode_t;
554
555typedef enum rem_on_channel_request_type {
556 REMAIN_ON_CHANNEL_REQUEST,
557 OFF_CHANNEL_ACTION_TX,
558} rem_on_channel_request_type_t;
559
560typedef struct action_pkt_buffer {
561 uint8_t *frame_ptr;
562 uint32_t frame_length;
563 uint16_t freq;
564} action_pkt_buffer_t;
565
566typedef struct hdd_remain_on_chan_ctx {
567 struct net_device *dev;
568 struct ieee80211_channel chan;
569 enum nl80211_channel_type chan_type;
570 unsigned int duration;
571 u64 cookie;
572 rem_on_channel_request_type_t rem_on_chan_request;
573 cdf_mc_timer_t hdd_remain_on_chan_timer;
574 action_pkt_buffer_t action_pkt_buff;
575 bool hdd_remain_on_chan_cancel_in_progress;
576 uint32_t scan_id;
577} hdd_remain_on_chan_ctx_t;
578
579/* RoC Request entry */
580typedef struct hdd_roc_req {
Anurag Chouhanffb21542016-02-17 14:33:03 +0530581 qdf_list_node_t node; /* MUST be first element */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800582 hdd_adapter_t *pAdapter;
583 hdd_remain_on_chan_ctx_t *pRemainChanCtx;
584} hdd_roc_req_t;
585
586/**
587 * struct hdd_scan_req - Scan Request entry
588 * @node : List entry element
589 * @adapter: Adapter address
590 * @scan_request: scan request holder
591 * @scan_id: scan identifier used across host layers which is generated at WMI
592 * @cookie: scan request identifier sent to userspace
593 * @source: scan request originator (NL/Vendor scan)
594 * @timestamp: scan request timestamp
595 *
596 * Scan request linked list element
597 */
598struct hdd_scan_req {
Anurag Chouhanffb21542016-02-17 14:33:03 +0530599 qdf_list_node_t node;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800600 hdd_adapter_t *adapter;
601 struct cfg80211_scan_request *scan_request;
602 uint32_t scan_id;
603 uint8_t source;
604 uint32_t timestamp;
605};
606
607typedef enum {
608 HDD_IDLE,
609 HDD_PD_REQ_ACK_PENDING,
610 HDD_GO_NEG_REQ_ACK_PENDING,
611 HDD_INVALID_STATE,
612} eP2PActionFrameState;
613
614typedef enum {
615 WLAN_HDD_GO_NEG_REQ,
616 WLAN_HDD_GO_NEG_RESP,
617 WLAN_HDD_GO_NEG_CNF,
618 WLAN_HDD_INVITATION_REQ,
619 WLAN_HDD_INVITATION_RESP,
620 WLAN_HDD_DEV_DIS_REQ,
621 WLAN_HDD_DEV_DIS_RESP,
622 WLAN_HDD_PROV_DIS_REQ,
623 WLAN_HDD_PROV_DIS_RESP,
624} tActionFrmType;
625
626typedef struct hdd_cfg80211_state_s {
627 uint16_t current_freq;
628 u64 action_cookie;
629 uint8_t *buf;
630 size_t len;
631 hdd_remain_on_chan_ctx_t *remain_on_chan_ctx;
632 struct mutex remain_on_chan_ctx_lock;
633 eP2PActionFrameState actionFrmState;
634} hdd_cfg80211_state_t;
635
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800636struct hdd_station_ctx {
637 /** Handle to the Wireless Extension State */
638 hdd_wext_state_t WextState;
639
640#ifdef FEATURE_WLAN_TDLS
641 tdlsCtx_t *pHddTdlsCtx;
642#endif
643
644 /**Connection information*/
645 connection_info_t conn_info;
646
647 roaming_info_t roam_info;
648
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800649 int ft_carrier_on;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800650
651#ifdef WLAN_FEATURE_GTK_OFFLOAD
652 tSirGtkOffloadParams gtkOffloadReqParams;
653#endif
654 /*Increment whenever ibss New peer joins and departs the network */
655 int ibss_sta_generation;
656
657 /* Indication of wep/wpa-none keys installation */
658 bool ibss_enc_key_installed;
659
660 /*Save the wep/wpa-none keys */
661 tCsrRoamSetKey ibss_enc_key;
662
663 bool hdd_ReassocScenario;
664
665 /* STA ctx debug variables */
666 int staDebugState;
Chandrasekaran, Manishekar34e325a2015-12-18 12:07:22 +0530667
668 uint8_t broadcast_ibss_staid;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800669};
670
671#define BSS_STOP 0
672#define BSS_START 1
673typedef struct hdd_hostapd_state_s {
674 int bssState;
Anurag Chouhance0dc992016-02-16 18:18:03 +0530675 qdf_event_t cdf_event;
676 qdf_event_t cdf_stop_bss_event;
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530677 QDF_STATUS qdf_status;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800678 bool bCommit;
679
680} hdd_hostapd_state_t;
681
682/*
683 * Per station structure kept in HDD for multiple station support for SoftAP
684 */
685typedef struct {
686 /** The station entry is used or not */
687 bool isUsed;
688
689 /** Station ID reported back from HAL (through SAP). Broadcast
690 * uses station ID zero by default in both libra and volans. */
691 uint8_t ucSTAId;
692
693 /** MAC address of the station */
Anurag Chouhan6d760662016-02-20 16:05:43 +0530694 struct qdf_mac_addr macAddrSTA;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800695
696 /** Current Station state so HDD knows how to deal with packet
697 * queue. Most recent states used to change TLSHIM STA state */
698 enum ol_txrx_peer_state tlSTAState;
699
700 /** Track QoS status of station */
701 bool isQosEnabled;
702
703 /** The station entry for which Deauth is in progress */
704 bool isDeauthInProgress;
Kanchanapally, Vidyullathae3062812015-05-22 17:28:57 +0530705
706 /** Number of spatial streams supported */
707 uint8_t nss;
708
709 /** Rate Flags for this connection */
710 uint32_t rate_flags;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800711} hdd_station_info_t;
712
713struct hdd_ap_ctx_s {
714 hdd_hostapd_state_t HostapdState;
715
716 /* Memory differentiation mode is enabled */
717 /* uint16_t uMemoryDiffThreshold; */
718 /* uint8_t uNumActiveAC; */
719 /* uint8_t uActiveACMask; */
720
721 /** Packet Count to update uNumActiveAC and uActiveACMask */
722 /* uint16_t uUpdatePktCount; */
723
724 /** Station ID assigned after BSS starts */
725 uint8_t uBCStaId;
726
727 uint8_t uPrivacy; /* The privacy bits of configuration */
728
729 tSirWPSPBCProbeReq WPSPBCProbeReq;
730
731 tsap_Config_t sapConfig;
732
733 struct semaphore semWpsPBCOverlapInd;
734
735 bool apDisableIntraBssFwd;
736
737 cdf_mc_timer_t hdd_ap_inactivity_timer;
738
739 uint8_t operatingChannel;
740
741 bool uIsAuthenticated;
742
743 eCsrEncryptionType ucEncryptType;
744
745 /* This will point to group key data, if it is received before start bss. */
746 tCsrRoamSetKey groupKey;
747 /* This will have WEP key data, if it is received before start bss */
748 tCsrRoamSetKey wepKey[CSR_MAX_NUM_KEY];
749
750 beacon_data_t *beacon;
751
752 bool bApActive;
753#ifdef WLAN_FEATURE_MBSSID
754 /* SAP Context */
755 void *sapContext;
756#endif
757 bool dfs_cac_block_tx;
758};
759
760typedef struct hdd_scaninfo_s {
761 /* The scan pending */
762 uint32_t mScanPending;
763
764 /* Counter for mScanPending so that the scan pending
765 error log is not printed for more than 5 times */
766 uint32_t mScanPendingCounter;
767
768 /* Additional IE for scan */
769 tSirAddie scanAddIE;
770
771 /* Scan mode */
772 tSirScanType scan_mode;
773
774 /* completion variable for abortscan */
775 struct completion abortscan_event_var;
776
777} hdd_scaninfo_t;
778
779#define WLAN_HDD_MAX_MC_ADDR_LIST 10
780
781#ifdef WLAN_FEATURE_PACKET_FILTERING
782typedef struct multicast_addr_list {
783 uint8_t isFilterApplied;
784 uint8_t mc_cnt;
785 uint8_t addr[WLAN_HDD_MAX_MC_ADDR_LIST][ETH_ALEN];
786} t_multicast_add_list;
787#endif
788
789#define WLAN_HDD_MAX_HISTORY_ENTRY 10
790
791/**
792 * struct hdd_netif_queue_stats - netif queue operation statistics
793 * @pause_count - pause counter
794 * @unpause_count - unpause counter
795 */
796struct hdd_netif_queue_stats {
797 uint16_t pause_count;
798 uint16_t unpause_count;
799};
800
801/**
802 * struct hdd_netif_queue_history - netif queue operation history
803 * @time: timestamp
804 * @netif_action: action type
805 * @netif_reason: reason type
806 * @pause_map: pause map
807 */
808struct hdd_netif_queue_history {
Anurag Chouhan50220ce2016-02-18 20:11:33 +0530809 qdf_time_t time;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800810 uint16_t netif_action;
811 uint16_t netif_reason;
812 uint32_t pause_map;
813};
814
815
816#define WLAN_HDD_ADAPTER_MAGIC 0x574c414e /* ASCII "WLAN" */
817
818
819struct hdd_adapter_s {
Jeff Johnsond399e902015-12-17 15:17:02 -0800820 /* Magic cookie for adapter sanity verification. Note that this
821 * needs to be at the beginning of the private data structure so
822 * that it will exists at the beginning of dev->priv and hence
823 * will always be in mapped memory
824 */
825 uint32_t magic;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800826
Jeff Johnsond399e902015-12-17 15:17:02 -0800827 void *pHddCtx;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800828
829 /** Handle to the network device */
830 struct net_device *dev;
831
Jeff Johnsond399e902015-12-17 15:17:02 -0800832 device_mode_t device_mode;
833
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800834 /** IPv4 notifier callback for handling ARP offload on change in IP */
835 struct work_struct ipv4NotifierWorkQueue;
836#ifdef WLAN_NS_OFFLOAD
837 /** IPv6 notifier callback for handling NS offload on change in IP */
838 struct work_struct ipv6NotifierWorkQueue;
839#endif
840
841 /* TODO Move this to sta Ctx */
842 struct wireless_dev wdev;
843 struct cfg80211_scan_request *request;
844
845 /** ops checks if Opportunistic Power Save is Enable or Not
846 * ctw stores ctWindow value once we receive Opps command from
847 * wpa_supplicant then using ctWindow value we need to Enable
848 * Opportunistic Power Save
849 */
850 uint8_t ops;
851 uint32_t ctw;
852
853 /** Current MAC Address for the adapter */
Anurag Chouhan6d760662016-02-20 16:05:43 +0530854 struct qdf_mac_addr macAddressCurrent;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800855
856 /**Event Flags*/
857 unsigned long event_flags;
858
859 /**Device TX/RX statistics*/
860 struct net_device_stats stats;
861 /** HDD statistics*/
862 hdd_stats_t hdd_stats;
863 /** linkspeed statistics */
864 tSirLinkSpeedInfo ls_stats;
865 /**Mib information*/
866 sHddMib_t hdd_mib;
867
868 uint8_t sessionId;
869
870 /* Completion variable for session close */
871 struct completion session_close_comp_var;
872
873 /* Completion variable for session open */
874 struct completion session_open_comp_var;
875
876 /* TODO: move these to sta ctx. These may not be used in AP */
877 /** completion variable for disconnect callback */
878 struct completion disconnect_comp_var;
879
880 /** Completion of change country code */
881 struct completion change_country_code;
882
883 /* completion variable for Linkup Event */
884 struct completion linkup_event_var;
885
886 /* completion variable for cancel remain on channel Event */
887 struct completion cancel_rem_on_chan_var;
888
889 /* completion variable for off channel remain on channel Event */
890 struct completion offchannel_tx_event;
891 /* Completion variable for action frame */
892 struct completion tx_action_cnf_event;
893 /* Completion variable for remain on channel ready */
894 struct completion rem_on_chan_ready_event;
895
896 struct completion sta_authorized_event;
897#ifdef FEATURE_WLAN_TDLS
898 struct completion tdls_add_station_comp;
899 struct completion tdls_del_station_comp;
900 struct completion tdls_mgmt_comp;
901 struct completion tdls_link_establish_req_comp;
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530902 QDF_STATUS tdlsAddStaStatus;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800903#endif
904
905 /* Track whether the linkup handling is needed */
906 bool isLinkUpSvcNeeded;
907
908 /* Mgmt Frames TX completion status code */
909 uint32_t mgmtTxCompletionStatus;
910
911 /* WMM Status */
912 hdd_wmm_status_t hddWmmStatus;
913/*************************************************************
914 */
915/*************************************************************
916 * TODO - Remove it later
917 */
918 /** Multiple station supports */
919 /** Per-station structure */
920 spinlock_t staInfo_lock; /* To protect access to station Info */
921 hdd_station_info_t aStaInfo[WLAN_MAX_STA_COUNT];
922 /* uint8_t uNumActiveStation; */
923
924/*************************************************************
925 */
926
927#ifdef FEATURE_WLAN_WAPI
928 hdd_wapi_info_t wapi_info;
929#endif
930
931 int8_t rssi;
932#ifdef WLAN_FEATURE_LPSS
933 bool rssi_send;
934#endif
935
936 uint8_t snr;
937
938 struct work_struct monTxWorkQueue;
939 struct sk_buff *skb_to_tx;
940
941 union {
942 hdd_station_ctx_t station;
943 hdd_ap_ctx_t ap;
944 } sessionCtx;
945
946 hdd_cfg80211_state_t cfg80211State;
947
948#ifdef WLAN_FEATURE_PACKET_FILTERING
949 t_multicast_add_list mc_addr_list;
950#endif
951 uint8_t addr_filter_pattern;
952
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800953 bool higherDtimTransition;
954 bool survey_idx;
955
956 hdd_scaninfo_t scan_info;
957#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
958 tAniTrafStrmMetrics tsmStats;
959#endif
960 /* Flag to ensure PSB is configured through framework */
961 uint8_t psbChanged;
962 /* UAPSD psb value configured through framework */
963 uint8_t configuredPsb;
964#ifdef IPA_OFFLOAD
965 void *ipa_context;
966#endif
967 /* Use delayed work for Sec AP ACS as Pri AP Startup need to complete
968 * since CSR (PMAC Struct) Config is same for both AP
969 */
970 struct delayed_work acs_pending_work;
971
972 struct work_struct scan_block_work;
973#ifdef MSM_PLATFORM
974 unsigned long prev_rx_packets;
975 unsigned long prev_tx_packets;
976 int connection;
977#endif
978 bool is_roc_inprogress;
979
980#ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL
981 cdf_mc_timer_t tx_flow_control_timer;
982 bool tx_flow_timer_initialized;
983 unsigned int tx_flow_low_watermark;
984 unsigned int tx_flow_high_watermark_offset;
985#endif /* QCA_LL_LEGACY_TX_FLOW_CONTROL */
986 bool offloads_configured;
987
988 /* DSCP to UP QoS Mapping */
989 sme_QosWmmUpType hddWmmDscpToUpMap[WLAN_HDD_MAX_DSCP + 1];
990
991#ifdef WLAN_FEATURE_LINK_LAYER_STATS
992 bool isLinkLayerStatsSet;
993#endif
994 uint8_t linkStatus;
995
996 /* variable for temperature in Celsius */
997 int temperature;
998
999 /* Time stamp for last completed RoC request */
Anurag Chouhan6d760662016-02-20 16:05:43 +05301000 unsigned long last_roc_ts;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001001
1002 /* Time stamp for start RoC request */
Anurag Chouhan6d760662016-02-20 16:05:43 +05301003 unsigned long start_roc_ts;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001004
1005 /* State for synchronous OCB requests to WMI */
1006 struct sir_ocb_set_config_response ocb_set_config_resp;
1007 struct sir_ocb_get_tsf_timer_response ocb_get_tsf_timer_resp;
1008 struct sir_dcc_get_stats_response *dcc_get_stats_resp;
1009 struct sir_dcc_update_ndl_response dcc_update_ndl_resp;
1010
1011 /* MAC addresses used for OCB interfaces */
Anurag Chouhan6d760662016-02-20 16:05:43 +05301012 struct qdf_mac_addr ocb_mac_address[QDF_MAX_CONCURRENCY_PERSONA];
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001013 int ocb_mac_addr_count;
1014
1015 /* BITMAP indicating pause reason */
1016 uint32_t pause_map;
1017 spinlock_t pause_map_lock;
1018
1019 uint8_t history_index;
1020 struct hdd_netif_queue_history
1021 queue_oper_history[WLAN_HDD_MAX_HISTORY_ENTRY];
1022 struct hdd_netif_queue_stats queue_oper_stats[WLAN_REASON_TYPE_MAX];
1023 struct hdd_lro_s lro_info;
1024};
1025
1026#define WLAN_HDD_GET_STATION_CTX_PTR(pAdapter) (&(pAdapter)->sessionCtx.station)
1027#define WLAN_HDD_GET_AP_CTX_PTR(pAdapter) (&(pAdapter)->sessionCtx.ap)
1028#define WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter) (&(pAdapter)->sessionCtx.station.WextState)
1029#define WLAN_HDD_GET_CTX(pAdapter) ((hdd_context_t *)pAdapter->pHddCtx)
1030#define WLAN_HDD_GET_HAL_CTX(pAdapter) (((hdd_context_t *)(pAdapter->pHddCtx))->hHal)
1031#define WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter) (&(pAdapter)->sessionCtx.ap.HostapdState)
1032#define WLAN_HDD_GET_CFG_STATE_PTR(pAdapter) (&(pAdapter)->cfg80211State)
1033#ifdef WLAN_FEATURE_MBSSID
1034#define WLAN_HDD_GET_SAP_CTX_PTR(pAdapter) (pAdapter->sessionCtx.ap.sapContext)
1035#endif
1036#ifdef FEATURE_WLAN_TDLS
1037#define WLAN_HDD_IS_TDLS_SUPPORTED_ADAPTER(pAdapter) \
1038 (((WLAN_HDD_INFRA_STATION != pAdapter->device_mode) && \
1039 (WLAN_HDD_P2P_CLIENT != pAdapter->device_mode)) ? 0 : 1)
1040#define WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter) \
1041 ((WLAN_HDD_IS_TDLS_SUPPORTED_ADAPTER(pAdapter)) ? \
1042 (tdlsCtx_t *)(pAdapter)->sessionCtx.station.pHddTdlsCtx : NULL)
1043#endif
1044
1045/* Set mac address locally administered bit */
1046#define WLAN_HDD_RESET_LOCALLY_ADMINISTERED_BIT(macaddr) (macaddr[0] &= 0xFD)
1047
1048#define HDD_DEFAULT_MCC_P2P_QUOTA 70
1049#define HDD_RESET_MCC_P2P_QUOTA 50
1050
1051typedef struct hdd_adapter_list_node {
Anurag Chouhanffb21542016-02-17 14:33:03 +05301052 qdf_list_node_t node; /* MUST be first element */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001053 hdd_adapter_t *pAdapter;
1054} hdd_adapter_list_node_t;
1055
1056typedef struct hdd_priv_data_s {
1057 uint8_t *buf;
1058 int used_len;
1059 int total_len;
1060} hdd_priv_data_t;
1061
1062#define MAX_MOD_LOGLEVEL 10
1063typedef struct {
1064 uint8_t enable;
1065 uint8_t dl_type;
1066 uint8_t dl_report;
1067 uint8_t dl_loglevel;
1068 uint8_t index;
1069 uint32_t dl_mod_loglevel[MAX_MOD_LOGLEVEL];
1070
1071} fw_log_info;
1072
1073#ifdef WLAN_FEATURE_OFFLOAD_PACKETS
1074/**
1075 * struct hdd_offloaded_packets - request id to pattern id mapping
1076 * @request_id: request id
1077 * @pattern_id: pattern id
1078 *
1079 */
1080struct hdd_offloaded_packets {
1081 uint32_t request_id;
1082 uint8_t pattern_id;
1083};
1084
1085/**
1086 * struct hdd_offloaded_packets_ctx - offloaded packets context
1087 * @op_table: request id to pattern id table
1088 * @op_lock: mutex lock
1089 */
1090struct hdd_offloaded_packets_ctx {
1091 struct hdd_offloaded_packets op_table[MAXNUM_PERIODIC_TX_PTRNS];
1092 struct mutex op_lock;
1093};
1094#endif
1095
1096/** Adapter structure definition */
1097
1098struct hdd_context_s {
1099 /** Global CDS context */
1100 v_CONTEXT_t pcds_context;
1101
1102 /** HAL handle...*/
1103 tHalHandle hHal;
1104
1105 struct wiphy *wiphy;
1106 /* TODO Remove this from here. */
1107
Anurag Chouhana37b5b72016-02-21 14:53:42 +05301108 qdf_spinlock_t hdd_adapter_lock;
Anurag Chouhanffb21542016-02-17 14:33:03 +05301109 qdf_list_t hddAdapters; /* List of adapters */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001110
1111 /* One per STA: 1 for BCMC_STA_ID, 1 for each SAP_SELF_STA_ID, 1 for WDS_STAID */
1112 hdd_adapter_t *sta_to_adapter[WLAN_MAX_STA_COUNT + CDF_MAX_NO_OF_SAP_MODE + 2]; /* One per sta. For quick reference. */
1113
1114 /** Pointer for firmware image data */
1115 const struct firmware *fw;
1116
1117 /** Pointer for configuration data */
1118 const struct firmware *cfg;
1119
1120 /** Pointer to the parent device */
1121 struct device *parent_dev;
1122
1123 /** Config values read from qcom_cfg.ini file */
1124 struct hdd_config *config;
1125
1126 struct wlan_hdd_ftm_status ftm;
1127
1128 /* Completion variable to indicate Mc Thread Suspended */
1129 struct completion mc_sus_event_var;
1130
1131 struct completion reg_init;
1132
1133 bool isMcThreadSuspended;
1134
1135#ifdef QCA_CONFIG_SMP
1136 bool is_ol_rx_thread_suspended;
1137#endif
1138
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001139 /* Track whether Mcast/Bcast Filter is enabled. */
1140 bool hdd_mcastbcast_filter_set;
1141
1142 bool hdd_wlan_suspended;
1143 bool suspended;
1144
1145 /* Lock to avoid race condition during start/stop bss */
1146 struct mutex sap_lock;
1147
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001148#ifdef FEATURE_OEM_DATA_SUPPORT
1149 /* OEM App registered or not */
1150 bool oem_app_registered;
1151
1152 /* OEM App Process ID */
1153 int32_t oem_pid;
1154#endif
1155
1156 /** Concurrency Parameters*/
1157 uint32_t concurrency_mode;
1158
Anurag Chouhan6d760662016-02-20 16:05:43 +05301159 uint8_t no_of_open_sessions[QDF_MAX_NO_OF_MODE];
1160 uint8_t no_of_active_sessions[QDF_MAX_NO_OF_MODE];
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001161
1162 /** P2P Device MAC Address for the adapter */
Anurag Chouhan6d760662016-02-20 16:05:43 +05301163 struct qdf_mac_addr p2pDeviceAddress;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001164
1165#ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
Anurag Chouhana37b5b72016-02-21 14:53:42 +05301166 qdf_wake_lock_t rx_wake_lock;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001167#endif
1168
Anurag Chouhana37b5b72016-02-21 14:53:42 +05301169 qdf_wake_lock_t sap_wake_lock;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001170
1171#ifdef FEATURE_WLAN_TDLS
1172 eTDLSSupportMode tdls_mode;
1173 eTDLSSupportMode tdls_mode_last;
1174 tdlsConnInfo_t tdlsConnInfo[HDD_MAX_NUM_TDLS_STA];
1175 /* maximum TDLS station number allowed upon runtime condition */
1176 uint16_t max_num_tdls_sta;
1177 /* TDLS peer connected count */
1178 uint16_t connected_peer_count;
1179 tdls_scan_context_t tdls_scan_ctxt;
1180 /* Lock to avoid race condition during TDLS operations */
1181 struct mutex tdls_lock;
1182 uint8_t tdls_off_channel;
1183 uint16_t tdls_channel_offset;
Masti, Narayanraddic4a7ab82015-11-25 15:41:10 +05301184 int32_t tdls_fw_off_chan_mode;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001185#endif
1186
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001187 void *hdd_ipa;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001188
1189 /* MC/BC Filter state variable
1190 * This always contains the value that is currently
1191 * configured
1192 * */
1193 uint8_t configuredMcastBcastFilter;
1194
1195 uint8_t sus_res_mcastbcast_filter;
1196
1197 bool sus_res_mcastbcast_filter_valid;
1198
1199 /* debugfs entry */
1200 struct dentry *debugfs_phy;
1201
1202 /* Use below lock to protect access to isSchedScanUpdatePending
1203 * since it will be accessed in two different contexts.
1204 */
Anurag Chouhana37b5b72016-02-21 14:53:42 +05301205 qdf_spinlock_t sched_scan_lock;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001206
1207 /* Flag keeps track of wiphy suspend/resume */
1208 bool isWiphySuspended;
1209
1210 /* Indicates about pending sched_scan results */
1211 bool isSchedScanUpdatePending;
1212
1213#ifdef MSM_PLATFORM
1214 /* DDR bus bandwidth compute timer
1215 */
1216 cdf_mc_timer_t bus_bw_timer;
1217 int cur_vote_level;
1218 spinlock_t bus_bw_lock;
1219 int cur_rx_level;
1220 uint64_t prev_rx;
Mohit Khannae71e2262015-11-10 09:37:24 -08001221 int cur_tx_level;
1222 uint64_t prev_tx;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001223#endif
1224 /* VHT80 allowed */
1225 bool isVHT80Allowed;
1226
1227 struct completion ready_to_suspend;
1228 /* defining the solution type */
1229 uint32_t target_type;
1230
1231 /* defining the firmware version */
1232 uint32_t target_fw_version;
1233 uint32_t dfs_radar_found;
1234
1235 /* defining the chip/rom version */
1236 uint32_t target_hw_version;
1237 /* defining the chip/rom revision */
1238 uint32_t target_hw_revision;
1239 /* chip/rom name */
1240 const char *target_hw_name;
1241 struct regulatory reg;
1242#ifdef FEATURE_WLAN_CH_AVOID
1243 uint16_t unsafe_channel_count;
1244 uint16_t unsafe_channel_list[NUM_20MHZ_RF_CHANNELS];
1245#endif /* FEATURE_WLAN_CH_AVOID */
1246
1247 uint8_t max_intf_count;
1248 uint8_t current_intf_count;
1249#ifdef WLAN_FEATURE_LPSS
1250 uint8_t lpss_support;
1251#endif
1252 uint8_t ap_arpns_support;
1253 tSirScanType ioctl_scan_mode;
1254
1255#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
Anurag Chouhan42958bb2016-02-19 15:43:11 +05301256 qdf_work_t sta_ap_intf_check_work;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001257#endif
1258
1259 struct work_struct sap_start_work;
1260 bool is_sap_restart_required;
1261 bool is_sta_connection_pending;
1262 spinlock_t sap_update_info_lock;
1263 spinlock_t sta_update_info_lock;
1264
1265 uint8_t dev_dfs_cac_status;
1266
1267 bool btCoexModeSet;
1268#ifdef FEATURE_GREEN_AP
1269 struct hdd_green_ap_ctx *green_ap_ctx;
1270#endif
1271 fw_log_info fw_log_settings;
1272#ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
1273 cdf_mc_timer_t skip_acs_scan_timer;
1274 uint8_t skip_acs_scan_status;
1275#endif
1276
Anurag Chouhana37b5b72016-02-21 14:53:42 +05301277 qdf_wake_lock_t sap_dfs_wakelock;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001278 atomic_t sap_dfs_ref_cnt;
1279
1280#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
1281 bool is_extwow_app_type1_param_set;
1282 bool is_extwow_app_type2_param_set;
1283 bool ext_wow_should_suspend;
1284 struct completion ready_to_extwow;
1285#endif
1286
1287 /* Time since boot up to extscan start (in micro seconds) */
1288 uint64_t ext_scan_start_since_boot;
1289 unsigned long g_event_flags;
1290 /* RoC request queue and work */
1291 struct delayed_work roc_req_work;
Anurag Chouhana37b5b72016-02-21 14:53:42 +05301292 qdf_spinlock_t hdd_roc_req_q_lock;
Anurag Chouhanffb21542016-02-17 14:33:03 +05301293 qdf_list_t hdd_roc_req_q;
Anurag Chouhana37b5b72016-02-21 14:53:42 +05301294 qdf_spinlock_t hdd_scan_req_q_lock;
Anurag Chouhanffb21542016-02-17 14:33:03 +05301295 qdf_list_t hdd_scan_req_q;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001296 uint8_t miracast_value;
1297#ifdef WLAN_NS_OFFLOAD
1298 /* IPv6 notifier callback for handling NS offload on change in IP */
1299 struct notifier_block ipv6_notifier;
1300#endif
1301 /* IPv4 notifier callback for handling ARP offload on change in IP */
1302 struct notifier_block ipv4_notifier;
1303
1304 /* number of rf chains supported by target */
1305 uint32_t num_rf_chains;
1306 /* Is htTxSTBC supported by target */
1307 uint8_t ht_tx_stbc_supported;
1308#ifdef WLAN_FEATURE_OFFLOAD_PACKETS
1309 struct hdd_offloaded_packets_ctx op_ctx;
1310#endif
1311 bool mcc_mode;
1312#ifdef WLAN_FEATURE_MEMDUMP
1313 uint8_t *fw_dump_loc;
1314 uint32_t dump_loc_paddr;
1315 cdf_mc_timer_t memdump_cleanup_timer;
1316 struct mutex memdump_lock;
1317 bool memdump_in_progress;
1318#endif /* WLAN_FEATURE_MEMDUMP */
1319
1320 cdf_mc_timer_t dbs_opportunistic_timer;
1321 bool connection_in_progress;
Anurag Chouhana37b5b72016-02-21 14:53:42 +05301322 qdf_spinlock_t connection_status_lock;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001323
1324 uint16_t hdd_txrx_hist_idx;
1325 struct hdd_tx_rx_histogram hdd_txrx_hist[NUM_TX_RX_HISTOGRAM];
Edhar, Mahesh Kumar695468e2015-10-19 12:06:20 +05301326 /*
1327 * Dfs lock used to syncronize on sap channel switch during
1328 * radar found indication and application triggered channel
1329 * switch.
1330 */
1331 struct mutex dfs_lock;
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001332};
1333
1334/*---------------------------------------------------------------------------
1335 Function declarations and documentation
1336 -------------------------------------------------------------------------*/
Chandrasekaran, Manishekar794a0982016-01-12 19:42:20 +05301337int hdd_validate_channel_and_bandwidth(hdd_adapter_t *adapter,
1338 uint32_t chan_number,
1339 phy_ch_width chan_bw);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001340#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
1341void wlan_hdd_check_sta_ap_concurrent_ch_intf(void *sta_pAdapter);
1342#endif
1343
1344const char *hdd_device_mode_to_string(uint8_t device_mode);
1345
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301346QDF_STATUS hdd_get_front_adapter(hdd_context_t *pHddCtx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001347 hdd_adapter_list_node_t **ppAdapterNode);
1348
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301349QDF_STATUS hdd_get_next_adapter(hdd_context_t *pHddCtx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001350 hdd_adapter_list_node_t *pAdapterNode,
1351 hdd_adapter_list_node_t **pNextAdapterNode);
1352
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301353QDF_STATUS hdd_remove_adapter(hdd_context_t *pHddCtx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001354 hdd_adapter_list_node_t *pAdapterNode);
1355
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301356QDF_STATUS hdd_remove_front_adapter(hdd_context_t *pHddCtx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001357 hdd_adapter_list_node_t **ppAdapterNode);
1358
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301359QDF_STATUS hdd_add_adapter_back(hdd_context_t *pHddCtx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001360 hdd_adapter_list_node_t *pAdapterNode);
1361
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301362QDF_STATUS hdd_add_adapter_front(hdd_context_t *pHddCtx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001363 hdd_adapter_list_node_t *pAdapterNode);
1364
1365hdd_adapter_t *hdd_open_adapter(hdd_context_t *pHddCtx, uint8_t session_type,
1366 const char *name, tSirMacAddr macAddr,
Prashanth Bhatta98f04d22016-01-08 16:46:21 -08001367 bool rtnl_held);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301368QDF_STATUS hdd_close_adapter(hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter,
Prashanth Bhatta98f04d22016-01-08 16:46:21 -08001369 bool rtnl_held);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301370QDF_STATUS hdd_close_all_adapters(hdd_context_t *pHddCtx, bool rtnl_held);
1371QDF_STATUS hdd_stop_all_adapters(hdd_context_t *pHddCtx);
1372QDF_STATUS hdd_reset_all_adapters(hdd_context_t *pHddCtx);
1373QDF_STATUS hdd_start_all_adapters(hdd_context_t *pHddCtx);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001374hdd_adapter_t *hdd_get_adapter_by_vdev(hdd_context_t *pHddCtx,
1375 uint32_t vdev_id);
1376hdd_adapter_t *hdd_get_adapter_by_macaddr(hdd_context_t *pHddCtx,
1377 tSirMacAddr macAddr);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301378QDF_STATUS hdd_init_station_mode(hdd_adapter_t *pAdapter);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001379hdd_adapter_t *hdd_get_adapter(hdd_context_t *pHddCtx, device_mode_t mode);
1380void hdd_deinit_adapter(hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter,
1381 bool rtnl_held);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301382QDF_STATUS hdd_stop_adapter(hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001383 const bool bCloseSession);
1384void hdd_set_station_ops(struct net_device *pWlanDev);
1385uint8_t *wlan_hdd_get_intf_addr(hdd_context_t *pHddCtx);
1386void wlan_hdd_release_intf_addr(hdd_context_t *pHddCtx, uint8_t *releaseAddr);
1387uint8_t hdd_get_operating_channel(hdd_context_t *pHddCtx, device_mode_t mode);
1388
Prashanth Bhatta05aaf012015-12-10 17:34:24 -08001389void hdd_set_conparam(uint32_t con_param);
Anurag Chouhan6d760662016-02-20 16:05:43 +05301390enum tQDF_GLOBAL_CON_MODE hdd_get_conparam(void);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001391
1392void hdd_abort_mac_scan(hdd_context_t *pHddCtx, uint8_t sessionId,
1393 eCsrAbortReason reason);
1394void hdd_cleanup_actionframe(hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter);
1395
1396void crda_regulatory_entry_default(uint8_t *countryCode, int domain_id);
1397void wlan_hdd_reset_prob_rspies(hdd_adapter_t *pHostapdAdapter);
1398void hdd_prevent_suspend(uint32_t reason);
1399void hdd_allow_suspend(uint32_t reason);
1400void hdd_prevent_suspend_timeout(uint32_t timeout, uint32_t reason);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001401
1402void wlan_hdd_cfg80211_update_wiphy_caps(struct wiphy *wiphy);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301403QDF_STATUS hdd_set_ibss_power_save_params(hdd_adapter_t *pAdapter);
1404QDF_STATUS wlan_hdd_restart_driver(hdd_context_t *pHddCtx);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001405void hdd_exchange_version_and_caps(hdd_context_t *pHddCtx);
1406int wlan_hdd_validate_context(hdd_context_t *pHddCtx);
1407bool hdd_is_valid_mac_address(const uint8_t *pMacAddr);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301408QDF_STATUS hdd_issta_p2p_clientconnected(hdd_context_t *pHddCtx);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001409
1410void hdd_checkandupdate_phymode(hdd_context_t *pHddCtx);
1411
1412#ifdef MSM_PLATFORM
1413void hdd_start_bus_bw_compute_timer(hdd_adapter_t *pAdapter);
1414void hdd_stop_bus_bw_compute_timer(hdd_adapter_t *pAdapter);
1415#else
1416static inline void hdd_start_bus_bw_compute_timer(hdd_adapter_t *pAdapter)
1417{
1418 return;
1419}
1420
1421static inline void hdd_stop_bus_bw_computer_timer(hdd_adapter_t *pAdapter)
1422{
1423 return;
1424}
1425#endif
1426
Prashanth Bhatta5da711e2015-11-30 14:28:52 -08001427int hdd_init(void);
1428void hdd_deinit(void);
1429
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001430int hdd_wlan_startup(struct device *dev, void *hif_sc);
1431void __hdd_wlan_exit(void);
1432int hdd_wlan_notify_modem_power_state(int state);
1433#ifdef QCA_HT_2040_COEX
1434int hdd_wlan_set_ht2040_mode(hdd_adapter_t *pAdapter, uint16_t staId,
Anurag Chouhan6d760662016-02-20 16:05:43 +05301435 struct qdf_mac_addr macAddrSTA, int width);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001436#endif
1437
1438#ifdef WLAN_FEATURE_LPSS
1439void wlan_hdd_send_status_pkg(hdd_adapter_t *pAdapter,
1440 hdd_station_ctx_t *pHddStaCtx,
1441 uint8_t is_on, uint8_t is_connected);
1442void wlan_hdd_send_version_pkg(uint32_t fw_version,
1443 uint32_t chip_id, const char *chip_name);
1444void wlan_hdd_send_all_scan_intf_info(hdd_context_t *pHddCtx);
1445#endif
1446void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len);
1447#ifdef FEATURE_WLAN_AUTO_SHUTDOWN
1448void wlan_hdd_auto_shutdown_enable(hdd_context_t *hdd_ctx, bool enable);
1449#endif
1450
1451hdd_adapter_t *hdd_get_con_sap_adapter(hdd_adapter_t *this_sap_adapter,
1452 bool check_start_bss);
1453
1454bool hdd_is_5g_supported(hdd_context_t *pHddCtx);
1455
1456int wlan_hdd_scan_abort(hdd_adapter_t *pAdapter);
1457
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001458void hdd_get_fw_version(hdd_context_t *hdd_ctx,
1459 uint32_t *major_spid, uint32_t *minor_spid,
1460 uint32_t *siid, uint32_t *crmid);
1461
1462#ifdef WLAN_FEATURE_MEMDUMP
1463/**
1464 * hdd_is_memdump_supported() - to check if memdump feature support
1465 *
1466 * This function is used to check if memdump feature is supported in
1467 * the host driver
1468 *
1469 * Return: true if supported and false otherwise
1470 */
1471static inline bool hdd_is_memdump_supported(void)
1472{
1473 return true;
1474}
1475#else
1476static inline bool hdd_is_memdump_supported(void)
1477{
1478 return false;
1479}
1480#endif /* WLAN_FEATURE_MEMDUMP */
1481
1482void hdd_update_macaddr(struct hdd_config *config,
Anurag Chouhan6d760662016-02-20 16:05:43 +05301483 struct qdf_mac_addr hw_macaddr);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001484void wlan_hdd_disable_roaming(hdd_adapter_t *pAdapter);
1485void wlan_hdd_enable_roaming(hdd_adapter_t *pAdapter);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001486
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301487QDF_STATUS hdd_post_cds_enable_config(hdd_context_t *pHddCtx);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001488
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301489QDF_STATUS hdd_abort_mac_scan_all_adapters(hdd_context_t *hdd_ctx);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001490
Anurag Chouhanfb54ab02016-02-18 18:00:46 +05301491QDF_STATUS wlan_hdd_check_custom_con_channel_rules(hdd_adapter_t *sta_adapter,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001492 hdd_adapter_t *ap_adapter,
1493 tCsrRoamProfile *roam_profile,
1494 tScanResultHandle *scan_cache,
1495 bool *concurrent_chnl_same);
1496#ifdef WLAN_FEATURE_MBSSID
1497void wlan_hdd_stop_sap(hdd_adapter_t *ap_adapter);
1498void wlan_hdd_start_sap(hdd_adapter_t *ap_adapter);
1499#else
1500static inline void wlan_hdd_stop_sap(hdd_adapter_t *ap_adapter) {}
1501static inline void wlan_hdd_start_sap(hdd_adapter_t *ap_adapter) {}
1502#endif
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001503
1504#ifdef QCA_CONFIG_SMP
1505int wlan_hdd_get_cpu(void);
1506#else
1507static inline int wlan_hdd_get_cpu(void)
1508{
1509 return 0;
1510}
1511#endif
1512
1513void wlan_hdd_txrx_pause_cb(uint8_t vdev_id,
1514 enum netif_action_type action, enum netif_reason_type reason);
1515
1516void hdd_wlan_dump_stats(hdd_adapter_t *adapter, int value);
1517void wlan_hdd_display_tx_rx_histogram(hdd_context_t *pHddCtx);
1518void wlan_hdd_clear_tx_rx_histogram(hdd_context_t *pHddCtx);
1519void wlan_hdd_display_netif_queue_history(hdd_context_t *hdd_ctx);
1520void wlan_hdd_clear_netif_queue_history(hdd_context_t *hdd_ctx);
1521const char *hdd_get_fwpath(void);
Abhishek Singh7996eb72015-12-30 17:24:02 +05301522void hdd_indicate_mgmt_frame(tSirSmeMgmtFrameInd *frame_ind);
1523hdd_adapter_t *hdd_get_adapter_by_sme_session_id(hdd_context_t *hdd_ctx,
1524 uint32_t sme_session_id);
Chandrasekaran, Manishekara74bb022016-01-12 18:37:43 +05301525phy_ch_width hdd_map_nl_chan_width(enum nl80211_chan_width ch_width);
Masti, Narayanraddic4a7ab82015-11-25 15:41:10 +05301526uint8_t wlan_hdd_find_opclass(tHalHandle hal, uint8_t channel,
1527 uint8_t bw_offset);
Komal Seelamec702b02016-02-24 18:42:16 +05301528void hdd_update_config(hdd_context_t *hdd_ctx);
Dhanashri Atre83d373d2015-07-28 16:45:59 -07001529
1530#ifdef FEATURE_TSO
1531/**
1532 * hdd_set_tso_flags() - enable TSO flags in the network device
1533 * @hdd_ctx: HDD context
1534 * @wlan_dev: network device structure
1535 *
1536 * This function enables the TSO related feature flags in the
1537 * given network device.
1538 *
1539 * Return: none
1540 */
1541static inline void hdd_set_tso_flags(hdd_context_t *hdd_ctx,
1542 struct net_device *wlan_dev)
1543{
1544 if (hdd_ctx->config->tso_enable) {
1545 hdd_info("TSO Enabled");
1546 wlan_dev->features |=
1547 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
1548 NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG;
1549 }
1550}
1551#else
1552static inline void hdd_set_tso_flags(hdd_context_t *hdd_ctx,
1553 struct net_device *wlan_dev){}
1554#endif /* FEATURE_TSO */
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001555#endif /* end #if !defined(WLAN_HDD_MAIN_H) */