blob: a4cb046b3efd3b01850dbb685152d322ecd3ddbf [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Jeff Johnson32d95a32012-09-10 13:15:23 -07002 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -07003 *
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#if !defined( WLAN_HDD_MAIN_H )
23#define WLAN_HDD_MAIN_H
24/**===========================================================================
25
26 \file WLAN_HDD_MAIN_H.h
27
28 \brief Linux HDD Adapter Type
29 Copyright 2008 (c) Qualcomm, Incorporated.
30 All Rights Reserved.
31 Qualcomm Confidential and Proprietary.
32
33 ==========================================================================*/
34
35/*---------------------------------------------------------------------------
36 Include files
37 -------------------------------------------------------------------------*/
38
39#include <linux/netdevice.h>
40#include <linux/skbuff.h>
41#ifdef CONFIG_CFG80211
42#include <net/cfg80211.h>
43#endif
44#include <vos_list.h>
45#include <vos_types.h>
46#include "sirMacProtDef.h"
47#include "csrApi.h"
48#include <wlan_hdd_assoc.h>
49#include <wlan_hdd_dp_utils.h>
50#include <wlan_hdd_wmm.h>
51#include <wlan_hdd_cfg.h>
52#include <linux/spinlock.h>
Jeff Johnsone7245742012-09-05 17:12:55 -070053#ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
54#include <linux/wakelock.h>
55#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070056#ifdef ANI_MANF_DIAG
57#include <wlan_hdd_ftm.h>
58#endif
59/*---------------------------------------------------------------------------
60 Preprocessor definitions and constants
61 -------------------------------------------------------------------------*/
62/** Number of attempts to detect/remove card */
63#define LIBRA_CARD_INSERT_DETECT_MAX_COUNT 5
64#define LIBRA_CARD_REMOVE_DETECT_MAX_COUNT 5
65/** Number of Tx Queues */
66#define NUM_TX_QUEUES 4
67/** Queue length specified to OS in the net_device */
68#define NET_DEV_TX_QUEUE_LEN 100
69/** HDD's internal Tx Queue Length. Needs to be a power of 2 */
70#define HDD_TX_QUEUE_MAX_LEN 128
71/** HDD internal Tx Queue Low Watermark. Net Device TX queue is disabled
72 * when HDD queue becomes full. This Low watermark is used to enable
73 * the Net Device queue again */
74#define HDD_TX_QUEUE_LOW_WATER_MARK (HDD_TX_QUEUE_MAX_LEN*3/4)
75/** Bytes to reserve in the headroom */
76#define LIBRA_HW_NEEDED_HEADROOM 128
77/** Hdd Tx Time out value */
78#ifdef LIBRA_LINUX_PC
79#define HDD_TX_TIMEOUT (8000)
80#else
81#define HDD_TX_TIMEOUT msecs_to_jiffies(5000)
82#endif
83/** Hdd Default MTU */
84#define HDD_DEFAULT_MTU (1500)
85/**event flags registered net device*/
86#define NET_DEVICE_REGISTERED 1<<0
87#define SME_SESSION_OPENED 1<<1
88#define INIT_TX_RX_SUCCESS 1<<2
89#define WMM_INIT_DONE 1<<3
90#define SOFTAP_BSS_STARTED 1<<4
91#define DEVICE_IFACE_OPENED 1<<5
92
93/** Maximum time(ms)to wait for disconnect to complete **/
94#define WLAN_WAIT_TIME_DISCONNECT 500
95#define WLAN_WAIT_TIME_STATS 800
96#define WLAN_WAIT_TIME_POWER 800
Jeff Johnson04dd8a82012-06-29 20:41:40 -070097/* Amount of time to wait for sme close session callback.
98 This value should be larger than the timeout used by WDI to wait for
99 a response from WCNSS */
100#define WLAN_WAIT_TIME_SESSIONOPENCLOSE 15000
Jeff Johnson295189b2012-06-20 16:38:30 -0700101#define WLAN_WAIT_TIME_ABORTSCAN 2000
102
103/* Scan Req Timeout */
104#define WLAN_WAIT_TIME_SCAN_REQ 100
105
106#define MAX_NUMBER_OF_ADAPTERS 4
107
108#define MAX_CFG_STRING_LEN 255
109
110#define MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
111/** Mac Address string **/
112#define MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
113#define MAX_GENIE_LEN 255
114
115#if defined(QC_WLAN_CHIPSET_PRIMA)
116#define WLAN_CHIP_VERSION "WCNSS"
117#elif defined(ANI_CHIPSET_LIBRA)
118#define WLAN_CHIP_VERSION "WCN1312"
119#elif defined(ANI_CHIPSET_VOLANS)
120#define WLAN_CHIP_VERSION "WCN1314"
121#else
122#define WLAN_CHIP_VERSION "UNKNOWN"
123#endif
124
125#define hddLog(level, args...) VOS_TRACE( VOS_MODULE_ID_HDD, level, ## args)
126#define ENTER() VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "Enter:%s", __FUNCTION__)
127#define EXIT() VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "Exit:%s", __FUNCTION__)
128
129#define WLAN_HDD_GET_PRIV_PTR(__dev__) (hdd_adapter_t*)(netdev_priv((__dev__)))
130
131#define MAX_EXIT_ATTEMPTS_DURING_LOGP 20
132
133#define MAX_NO_OF_2_4_CHANNELS 14
134
Jeff Johnsone7245742012-09-05 17:12:55 -0700135#define WLAN_HDD_PUBLIC_ACTION_FRAME 4
136#define WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET 24
137#define WLAN_HDD_PUBLIC_ACTION_FRAME_TYPE_OFFSET 30
138#define WLAN_HDD_P2P_SOCIAL_CHANNELS 3
139
140#ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
141#define HDD_WAKE_LOCK_DURATION 50
142#endif
143
Jeff Johnson295189b2012-06-20 16:38:30 -0700144typedef struct hdd_tx_rx_stats_s
145{
146 // start_xmit stats
147 __u32 txXmitCalled;
148 __u32 txXmitDropped;
149 __u32 txXmitBackPressured;
150 __u32 txXmitQueued;
151 __u32 txXmitClassifiedAC[NUM_TX_QUEUES];
152 __u32 txXmitDroppedAC[NUM_TX_QUEUES];
153 __u32 txXmitBackPressuredAC[NUM_TX_QUEUES];
154 __u32 txXmitQueuedAC[NUM_TX_QUEUES];
155 // fetch_cbk stats
156 __u32 txFetched;
157 __u32 txFetchedAC[NUM_TX_QUEUES];
158 __u32 txFetchEmpty;
159 __u32 txFetchLowResources;
160 __u32 txFetchDequeueError;
161 __u32 txFetchDequeued;
162 __u32 txFetchDequeuedAC[NUM_TX_QUEUES];
163 __u32 txFetchDePressured;
164 __u32 txFetchDePressuredAC[NUM_TX_QUEUES];
165 // complete_cbk_stats
166 __u32 txCompleted;
167 // flush stats
168 __u32 txFlushed;
169 __u32 txFlushedAC[NUM_TX_QUEUES];
170 // rx stats
171 __u32 rxChains;
172 __u32 rxPackets;
173 __u32 rxDropped;
174 __u32 rxDelivered;
175 __u32 rxRefused;
176} hdd_tx_rx_stats_t;
177
178typedef struct hdd_chip_reset_stats_s
179{
180 __u32 totalLogpResets;
181 __u32 totalCMD53Failures;
182 __u32 totalMutexReadFailures;
183 __u32 totalMIFErrorFailures;
184 __u32 totalFWHearbeatFailures;
185 __u32 totalUnknownExceptions;
186} hdd_chip_reset_stats_t;
187
188typedef struct hdd_stats_s
189{
190 tCsrSummaryStatsInfo summary_stat;
191 tCsrGlobalClassAStatsInfo ClassA_stat;
192 tCsrGlobalClassBStatsInfo ClassB_stat;
193 tCsrGlobalClassCStatsInfo ClassC_stat;
194 tCsrGlobalClassDStatsInfo ClassD_stat;
195 tCsrPerStaStatsInfo perStaStats;
196 hdd_tx_rx_stats_t hddTxRxStats;
197 hdd_chip_reset_stats_t hddChipResetStats;
198} hdd_stats_t;
199
200typedef enum
201{
202 HDD_ROAM_STATE_NONE,
203
204 // Issuing a disconnect due to transition into low power states.
205 HDD_ROAM_STATE_DISCONNECTING_POWER,
206
207 // move to this state when HDD sets a key with SME/CSR. Note this is
208 // an important state to get right because we will get calls into our SME
209 // callback routine for SetKey activity that we did not initiate!
210 HDD_ROAM_STATE_SETTING_KEY,
211} HDD_ROAM_STATE;
212
213typedef enum
214{
215 eHDD_SUSPEND_NONE = 0,
216 eHDD_SUSPEND_DEEP_SLEEP,
217 eHDD_SUSPEND_STANDBY,
218} hdd_ps_state_t;
219
220typedef struct roaming_info_s
221{
222 HDD_ROAM_STATE roamingState;
223 vos_event_t roamingEvent;
224
225} roaming_info_t;
226
227#ifdef FEATURE_WLAN_WAPI
228/* Define WAPI macros for Length, BKID count etc*/
229#define MAX_WPI_KEY_LENGTH 16
230#define MAX_NUM_PN 16
231#define MAC_ADDR_LEN 6
232#define MAX_ADDR_INDEX 12
233#define MAX_NUM_AKM_SUITES 16
234#define MAX_NUM_UNI_SUITES 16
235#define MAX_NUM_BKIDS 16
236#define HDD_PAIRWISE_WAPI_KEY 0
237#define HDD_GROUP_WAPI_KEY 1
238
239/** WAPI AUTH mode definition */
240enum _WAPIAuthMode
241{
242 WAPI_AUTH_MODE_OPEN = 0,
243 WAPI_AUTH_MODE_PSK = 1,
244 WAPI_AUTH_MODE_CERT
245} __attribute__((packed));
246typedef enum _WAPIAuthMode WAPIAuthMode;
247
248/** WAPI Work mode structure definition */
249#define WZC_ORIGINAL 0
250#define WAPI_EXTENTION 1
251
252struct _WAPI_FUNCTION_MODE
253{
254 unsigned char wapiMode;
255}__attribute__((packed));
256
257typedef struct _WAPI_FUNCTION_MODE WAPI_FUNCTION_MODE;
258
259typedef struct _WAPI_BKID
260{
261 v_U8_t bkid[16];
262}WAPI_BKID, *pWAPI_BKID;
263
264/** WAPI Association information structure definition */
265struct _WAPI_AssocInfo
266{
267 v_U8_t elementID;
268 v_U8_t length;
269 v_U16_t version;
270 v_U16_t akmSuiteCount;
271 v_U32_t akmSuite[MAX_NUM_AKM_SUITES];
272 v_U16_t unicastSuiteCount;
273 v_U32_t unicastSuite[MAX_NUM_UNI_SUITES];
274 v_U32_t multicastSuite;
275 v_U16_t wapiCability;
276 v_U16_t bkidCount;
277 WAPI_BKID bkidList[MAX_NUM_BKIDS];
278} __attribute__((packed));
279
280typedef struct _WAPI_AssocInfo WAPI_AssocInfo;
281typedef struct _WAPI_AssocInfo *pWAPI_IEAssocInfo;
282
283/** WAPI KEY Type definition */
284enum _WAPIKeyType
285{
286 PAIRWISE_KEY, //0
287 GROUP_KEY //1
288}__attribute__((packed));
289typedef enum _WAPIKeyType WAPIKeyType;
290
291/** WAPI KEY Direction definition */
292enum _KEY_DIRECTION
293{
294 None,
295 Rx,
296 Tx,
297 Rx_Tx
298}__attribute__((packed));
299
300typedef enum _KEY_DIRECTION WAPI_KEY_DIRECTION;
301
302/** WAPI KEY stucture definition */
303struct WLAN_WAPI_KEY
304{
305 WAPIKeyType keyType;
306 WAPI_KEY_DIRECTION keyDirection; /*reserved for future use*/
307 v_U8_t keyId;
308 v_U8_t addrIndex[MAX_ADDR_INDEX]; /*reserved for future use*/
309 int wpiekLen;
310 v_U8_t wpiek[MAX_WPI_KEY_LENGTH];
311 int wpickLen;
312 v_U8_t wpick[MAX_WPI_KEY_LENGTH];
313 v_U8_t pn[MAX_NUM_PN]; /*reserved for future use*/
314}__attribute__((packed));
315
316typedef struct WLAN_WAPI_KEY WLAN_WAPI_KEY;
317typedef struct WLAN_WAPI_KEY *pWLAN_WAPI_KEY;
318
319#define WPA_GET_LE16(a) ((u16) (((a)[1] << 8) | (a)[0]))
320#define WLAN_EID_WAPI 68
321#define WAPI_PSK_AKM_SUITE 0x02721400
322#define WAPI_CERT_AKM_SUITE 0x01721400
323
324/** WAPI BKID List stucture definition */
325struct _WLAN_BKID_LIST
326{
327 v_U32_t length;
328 v_U32_t BKIDCount;
329 WAPI_BKID BKID[1];
330}__attribute__((packed));
331
332typedef struct _WLAN_BKID_LIST WLAN_BKID_LIST;
333typedef struct _WLAN_BKID_LIST *pWLAN_BKID_LIST;
334
335
336/** WAPI Information stucture definition */
337struct hdd_wapi_info_s
338{
339 v_U32_t nWapiMode;
340 v_BOOL_t fIsWapiSta;
341 v_MACADDR_t cachedMacAddr;
342 v_UCHAR_t wapiAuthMode;
343}__attribute__((packed));
344typedef struct hdd_wapi_info_s hdd_wapi_info_t;
345#endif /* FEATURE_WLAN_WAPI */
346
347#ifdef CONFIG_CFG80211
348typedef struct beacon_data_s {
349 u8 *head, *tail;
350 int head_len, tail_len;
351 int dtim_period;
352} beacon_data_t;
353#endif
354
355typedef enum device_mode
356{ /* MAINTAIN 1 - 1 CORRESPONDENCE WITH tVOS_CON_MODE*/
357 WLAN_HDD_INFRA_STATION,
358 WLAN_HDD_SOFTAP,
359 WLAN_HDD_P2P_CLIENT,
360 WLAN_HDD_P2P_GO,
361 WLAN_HDD_MONITOR
362#ifdef ANI_MANF_DIAG
363 ,WLAN_HDD_FTM,
364#endif
Jeff Johnsone7245742012-09-05 17:12:55 -0700365 WLAN_HDD_P2P_DEVICE
Jeff Johnson295189b2012-06-20 16:38:30 -0700366}device_mode_t;
367
368typedef enum rem_on_channel_request_type
369{
370 REMAIN_ON_CHANNEL_REQUEST,
371 OFF_CHANNEL_ACTION_TX,
372}rem_on_channel_request_type_t;
373
374/* Thermal mitigation Level Enum Type */
375typedef enum
376{
377 WLAN_HDD_TM_LEVEL_0,
378 WLAN_HDD_TM_LEVEL_1,
379 WLAN_HDD_TM_LEVEL_2,
380 WLAN_HDD_TM_LEVEL_3,
381 WLAN_HDD_TM_LEVEL_4,
382 WLAN_HDD_TM_LEVEL_MAX
383} WLAN_TmLevelEnumType;
384
385/* Driver Action based on thermal mitigation level structure */
386typedef struct
387{
388 v_BOOL_t ampduEnable;
389 v_BOOL_t enterImps;
390 v_U32_t txSleepDuration;
391 v_U32_t txOperationDuration;
392 v_U32_t txBlockFrameCountThreshold;
393} hdd_tmLevelAction_t;
394
395/* Thermal Mitigation control context structure */
396typedef struct
397{
398 WLAN_TmLevelEnumType currentTmLevel;
399 hdd_tmLevelAction_t tmAction;
400 vos_timer_t txSleepTimer;
401 struct mutex tmOperationLock;
402 vos_event_t setTmDoneEvent;
403 v_U32_t txFrameCount;
404 v_TIME_t lastblockTs;
405 v_TIME_t lastOpenTs;
406 struct netdev_queue *blockedQueue;
407} hdd_thermal_mitigation_info_t;
408
409#if defined CONFIG_CFG80211
410typedef struct hdd_remain_on_chan_ctx
411{
412 struct net_device *dev;
413 struct ieee80211_channel chan;
414 enum nl80211_channel_type chan_type;
415 unsigned int duration;
416 u64 cookie;
417 rem_on_channel_request_type_t rem_on_chan_request;
418}hdd_remain_on_chan_ctx_t;
419
Jeff Johnsone7245742012-09-05 17:12:55 -0700420typedef enum{
421 HDD_IDLE,
422 HDD_PD_REQ_ACK_PENDING,
423 HDD_GO_NEG_REQ_ACK_PENDING,
424 HDD_INVALID_STATE,
425}eP2PActionFrameState;
426
427typedef enum {
428 WLAN_HDD_GO_NEG_REQ,
429 WLAN_HDD_GO_NEG_RESP,
430 WLAN_HDD_GO_NEG_CNF,
431 WLAN_HDD_INVITATION_REQ,
432 WLAN_HDD_INVITATION_RESP,
433 WLAN_HDD_DEV_DIS_REQ,
434 WLAN_HDD_DEV_DIS_RESP,
435 WLAN_HDD_PROV_DIS_REQ,
436 WLAN_HDD_PROV_DIS_RESP,
437}tActionFrmType;
438
Jeff Johnson295189b2012-06-20 16:38:30 -0700439typedef struct hdd_cfg80211_state_s
440{
441 tANI_U16 current_freq;
442 u64 action_cookie;
443 tANI_U8 *buf;
444 size_t len;
445 struct sk_buff *skb;
446 hdd_remain_on_chan_ctx_t* remain_on_chan_ctx;
Jeff Johnsone7245742012-09-05 17:12:55 -0700447 eP2PActionFrameState actionFrmState;
Jeff Johnson295189b2012-06-20 16:38:30 -0700448}hdd_cfg80211_state_t;
449
450#endif
451struct hdd_station_ctx
452{
453 /** Handle to the Wireless Extension State */
454 hdd_wext_state_t WextState;
455
456 /**Connection information*/
457 connection_info_t conn_info;
458
459 roaming_info_t roam_info;
460
461 v_BOOL_t bSendDisconnect;
462
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700463#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 int ft_carrier_on;
465#endif
466};
467
468#define BSS_STOP 0
469#define BSS_START 1
470typedef struct hdd_hostapd_state_s
471{
472 int bssState;
473 vos_event_t vosEvent;
474 VOS_STATUS vosStatus;
475 v_BOOL_t bCommit;
476
477} hdd_hostapd_state_t;
478
479
480/*
481 * Per station structure kept in HDD for multiple station support for SoftAP
482*/
483typedef struct {
484 /** The station entry is used or not */
485 v_BOOL_t isUsed;
486
487 /** Station ID reported back from HAL (through SAP). Broadcast
488 * uses station ID zero by default in both libra and volans. */
489 v_U8_t ucSTAId;
490
491 /** MAC address of the station */
492 v_MACADDR_t macAddrSTA;
493
494 /** Current Station state so HDD knows how to deal with packet
495 * queue. Most recent states used to change TL STA state. */
496 WLANTL_STAStateType tlSTAState;
497
498 /** Transmit queues for each AC (VO,VI,BE etc). */
499 hdd_list_t wmm_tx_queue[NUM_TX_QUEUES];
500
501 /** Might need to differentiate queue depth in contention case */
502 v_U16_t aTxQueueDepth[NUM_TX_QUEUES];
503
504 /**Track whether OS TX queue has been disabled.*/
505 v_BOOL_t txSuspended[NUM_TX_QUEUES];
506
507 /** Track QoS status of station */
508 v_BOOL_t isQosEnabled;
509
510} hdd_station_info_t;
511
512struct hdd_ap_ctx_s
513{
514 hdd_hostapd_state_t HostapdState;
515
516 // Memory differentiation mode is enabled
517 //v_U16_t uMemoryDiffThreshold;
518 //v_U8_t uNumActiveAC;
519 //v_U8_t uActiveACMask;
520 //v_U8_t aTxQueueLimit[NUM_TX_QUEUES];
521
522 /** Packet Count to update uNumActiveAC and uActiveACMask */
523 //v_U16_t uUpdatePktCount;
524
525 /** Station ID assigned after BSS starts */
526 v_U8_t uBCStaId;
527
528 v_U8_t uPrivacy; // The privacy bits of configuration
529
530#ifdef WLAN_SOFTAP_FEATURE
531 tSirWPSPBCProbeReq WPSPBCProbeReq;
532
533 tsap_Config_t sapConfig;
534#endif
535
536 struct semaphore semWpsPBCOverlapInd;
537
538 v_BOOL_t apDisableIntraBssFwd;
539
540 vos_timer_t hdd_ap_inactivity_timer;
541
542 v_U8_t operatingChannel;
543
544 v_BOOL_t uIsAuthenticated;
545
546 eCsrEncryptionType ucEncryptType;
547
548#ifdef CONFIG_CFG80211
549 //This will point to group key data, if it is received before start bss.
550 tCsrRoamSetKey groupKey;
551 // This will have WEP key data, if it is received before start bss
552 tCsrRoamSetKey wepKey[CSR_MAX_NUM_KEY];
553
554 beacon_data_t *beacon;
555#endif
556};
557
558#ifdef CONFIG_CFG80211
559struct hdd_mon_ctx_s
560{
561 hdd_adapter_t *pAdapterForTx;
562};
563#endif
564
565typedef struct hdd_scaninfo_s
566{
567 /* The scan id */
568 v_U32_t scanId;
569
570 /* The scan pending */
571 v_U32_t mScanPending;
572
573 /* Client Wait Scan Result */
574 v_U32_t waitScanResult;
575
576#ifdef WLAN_FEATURE_P2P
Jeff Johnsone7245742012-09-05 17:12:55 -0700577 v_BOOL_t flushP2pScanResults;
Jeff Johnson295189b2012-06-20 16:38:30 -0700578#endif
579
580 /* Additional IE for scan */
581 tSirAddie scanAddIE;
582
583 /* Scan mode*/
584 tSirScanType scan_mode;
585
586 /* Scan Completion Event */
587 struct completion scan_req_completion_event;
588
589 vos_event_t scan_finished_event;
590
591 hdd_scan_pending_option_e scan_pending_option;
592
593}hdd_scaninfo_t;
594
595#define WLAN_HDD_ADAPTER_MAGIC 0x574c414e //ASCII "WLAN"
596struct hdd_adapter_s
597{
598 void *pHddCtx;
599
600 device_mode_t device_mode;
601
602 /** Handle to the network device */
603 struct net_device *dev;
604
605 //TODO Move this to sta Ctx
606#ifdef CONFIG_CFG80211
607 struct wireless_dev wdev ;
608 struct cfg80211_scan_request *request ;
609#endif
610
611#ifdef WLAN_FEATURE_P2P
612 /** ops checks if Opportunistic Power Save is Enable or Not
613 * ctw stores ctWindow value once we receive Opps command from
614 * wpa_supplicant then using ctWindow value we need to Enable
615 * Opportunistic Power Save
616 */
617 tANI_U8 ops;
618 tANI_U32 ctw;
619#endif
620
621 /** Current MAC Address for the adapter */
622 v_MACADDR_t macAddressCurrent;
623
624 /**Event Flags*/
625 unsigned long event_flags;
626
627 /**Device TX/RX statistics*/
628 struct net_device_stats stats;
629 /** HDD statistics*/
630 hdd_stats_t hdd_stats;
631 /**Mib information*/
632 sHddMib_t hdd_mib;
633
634 tANI_U8 sessionId;
Jeff Johnson295189b2012-06-20 16:38:30 -0700635
636 /* Completion variable for session close */
637 struct completion session_close_comp_var;
638
639 /* Completion variable for session open */
640 struct completion session_open_comp_var;
641
642 //TODO: move these to sta ctx. These may not be used in AP
643 /** completion variable for disconnect callback */
644 struct completion disconnect_comp_var;
645
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700646 /** Completion of change country code */
647 struct completion change_country_code;
648
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 /* completion variable for Linkup Event */
650 struct completion linkup_event_var;
651
652
653 /* completion variable for abortscan */
654 struct completion abortscan_event_var;
655#ifdef CONFIG_CFG80211
656 /* completion variable for cancel remain on channel Event */
657 struct completion cancel_rem_on_chan_var;
658
659#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
660 /* completion variable for off channel remain on channel Event */
661 struct completion offchannel_tx_event;
662#endif
663 /* Completion variable for action frame */
664 struct completion tx_action_cnf_event;
665 /* Completion variable for remain on channel ready */
666 struct completion rem_on_chan_ready_event;
667#endif
668
669 /* Track whether the linkup handling is needed */
670 v_BOOL_t isLinkUpSvcNeeded;
671
672/*************************************************************
673 * Tx Queues
674 */
675 /** Transmit queues for each AC (VO,VI,BE etc) */
676 hdd_list_t wmm_tx_queue[NUM_TX_QUEUES];
677 /**Track whether VOS is in a low resource state*/
678 v_BOOL_t isVosOutOfResource;
679
680 /**Track whether OS TX queue has been disabled.*/
681 v_BOOL_t isTxSuspended[NUM_TX_QUEUES];
682
683 /** WMM Status */
684 hdd_wmm_status_t hddWmmStatus;
685/*************************************************************
686 */
687/*************************************************************
688 * TODO - Remove it later
689 */
690 /** Multiple station supports */
691 /** Per-station structure */
692 spinlock_t staInfo_lock; //To protect access to station Info
693 hdd_station_info_t aStaInfo[WLAN_MAX_STA_COUNT];
694 //v_U8_t uNumActiveStation;
695
696 v_U16_t aTxQueueLimit[NUM_TX_QUEUES];
697/*************************************************************
698 */
699
700#ifdef FEATURE_WLAN_WAPI
701 hdd_wapi_info_t wapi_info;
702#endif
703
704 v_S7_t rssi;
705#ifdef CONFIG_CFG80211
706 struct work_struct monTxWorkQueue;
707 struct sk_buff *skb_to_tx;
708#endif
709
710 union {
711 hdd_station_ctx_t station;
712 hdd_ap_ctx_t ap;
713#ifdef CONFIG_CFG80211
714 hdd_mon_ctx_t monitor;
715#endif
716 }sessionCtx;
717
718 hdd_scaninfo_t scan_info;
719#ifdef CONFIG_CFG80211
720 hdd_cfg80211_state_t cfg80211State;
721#endif
722
723 //Magic cookie for adapter sanity verification
724 v_U32_t magic;
725 v_BOOL_t higherDtimTransition;
726};
727
728typedef struct hdd_dynamic_mcbcfilter_s
729{
730 v_BOOL_t enableCfg;
731 v_U8_t mcastBcastFilterSetting;
732 v_BOOL_t enableSuspend;
733 v_U8_t mcBcFilterSuspend;
734}hdd_dynamic_mcbcfilter_t;
735
736#define WLAN_HDD_GET_STATION_CTX_PTR(pAdapter) &(pAdapter)->sessionCtx.station
737#define WLAN_HDD_GET_AP_CTX_PTR(pAdapter) &(pAdapter)->sessionCtx.ap
738#define WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter) &(pAdapter)->sessionCtx.station.WextState
739#define WLAN_HDD_GET_CTX(pAdapter) (hdd_context_t*)pAdapter->pHddCtx
740#define WLAN_HDD_GET_HAL_CTX(pAdapter) ((hdd_context_t*)(pAdapter->pHddCtx))->hHal
741#define WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter) &(pAdapter)->sessionCtx.ap.HostapdState
742#define WLAN_HDD_GET_CFG_STATE_PTR(pAdapter) &(pAdapter)->cfg80211State
743#define WLAN_HDD_MAX_MC_ADDR_LIST 10
744
745typedef struct hdd_adapter_list_node
746{
747 hdd_list_node_t node; // MUST be first element
748 hdd_adapter_t *pAdapter;
749}hdd_adapter_list_node_t;
750
751typedef struct hdd_priv_data_s
752{
753 tANI_U8 *buf;
754 int used_len;
755 int total_len;
756}hdd_priv_data_t;
757
758#ifdef WLAN_FEATURE_PACKET_FILTERING
759typedef struct multicast_addr_list
760{
761 v_U8_t isFilterApplied;
762 v_U8_t mc_cnt;
763 v_U8_t addr[WLAN_HDD_MAX_MC_ADDR_LIST][ETH_ALEN];
764} t_multicast_add_list;
765#endif
766
767/** Adapter stucture definition */
768
769struct hdd_context_s
770{
771 /** Global VOS context */
772 v_CONTEXT_t pvosContext;
773
774 /** HAL handle...*/
775 tHalHandle hHal;
776
777#ifdef CONFIG_CFG80211
778 struct wiphy *wiphy ;
779#endif
780 //TODO Remove this from here.
781
782 hdd_list_t hddAdapters; //List of adapters
783 /* One per STA: 1 for RX_BCMC_STA_ID and 1 for SAP_SELF_STA_ID*/
784 hdd_adapter_t *sta_to_adapter[WLAN_MAX_STA_COUNT + 3]; //One per sta. For quick reference.
785
786 /** Pointer for firmware image data */
787 const struct firmware *fw;
788
789 /** Pointer for configuration data */
790 const struct firmware *cfg;
791
792 /** Pointer for nv data */
793 const struct firmware *nv;
794
795 /** Pointer to the parent device */
796 struct device *parent_dev;
797
798 pid_t pid_sdio_claimed;
799 atomic_t sdio_claim_count;
800
801 /** Config values read from qcom_cfg.ini file */
802 hdd_config_t *cfg_ini;
803 #ifdef ANI_MANF_DIAG
804 wlan_hdd_ftm_status_t ftm;
805 #endif
806 /** completion variable for full power callback */
807 struct completion full_pwr_comp_var;
808 /** completion variable for Request BMPS callback */
809 struct completion req_bmps_comp_var;
810
811 /** completion variable for standby callback */
812 struct completion standby_comp_var;
813
814#ifdef FEATURE_WLAN_INTEGRATED_SOC
815 /* Completion variable to indicate Rx Thread Suspended */
816 struct completion rx_sus_event_var;
817#endif // FEATURE_WLAN_INTEGRATED_SOC
818
819 /* Completion variable to indicate Tx Thread Suspended */
820 struct completion tx_sus_event_var;
821
822 /* Completion variable to indicate Mc Thread Suspended */
823 struct completion mc_sus_event_var;
824
825
826 v_BOOL_t isWlanSuspended;
827
828 v_BOOL_t isTxThreadSuspended;
829
830 v_BOOL_t isMcThreadSuspended;
831
832#ifdef FEATURE_WLAN_INTEGRATED_SOC
833 v_BOOL_t isRxThreadSuspended;
834#endif
835
836 volatile v_BOOL_t isLogpInProgress;
837
838 v_BOOL_t isLoadUnloadInProgress;
839
840 /**Track whether driver has been suspended.*/
841 hdd_ps_state_t hdd_ps_state;
842
843 /* Track whether Mcast/Bcast Filter is enabled.*/
844 v_BOOL_t hdd_mcastbcast_filter_set;
845
846 /* Track whether ignore DTIM is enabled*/
847 v_BOOL_t hdd_ignore_dtim_enabled;
848 v_U32_t hdd_actual_ignore_DTIM_value;
849 v_U32_t hdd_actual_LI_value;
850
851
852 v_BOOL_t hdd_wlan_suspended;
853
854 spinlock_t filter_lock;
855
856 /* Lock to avoid race condtion during start/stop bss*/
857 struct mutex sap_lock;
858
859 /** ptt Process ID*/
860 v_SINT_t ptt_pid;
861
862 v_U8_t change_iface;
863
864 /** Concurrency Parameters*/
865 tVOS_CONCURRENCY_MODE concurrency_mode;
866
867 v_U16_t no_of_sessions[VOS_MAX_NO_OF_MODE];
868
869 hdd_chip_reset_stats_t hddChipResetStats;
870 /* Number of times riva restarted */
871 v_U32_t hddRivaResetStats;
872
873 hdd_dynamic_mcbcfilter_t dynamic_mcbc_filter;
874
875 /* Can we allow AMP connection right now*/
876 v_BOOL_t isAmpAllowed;
877
878#ifdef WLAN_FEATURE_P2P
879 /** P2P Device MAC Address for the adapter */
880 v_MACADDR_t p2pDeviceAddress;
881#endif
882
883 /* Thermal mitigation information */
884 hdd_thermal_mitigation_info_t tmInfo;
885#ifdef WLAN_FEATURE_PACKET_FILTERING
886 t_multicast_add_list mc_addr_list;
887#endif
Jeff Johnsone7245742012-09-05 17:12:55 -0700888
889#ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
890 struct wake_lock rx_wake_lock;
891#endif
892
893 /*
894 * Framework initiated driver restarting
895 * hdd_reload_timer : Restart retry timer
896 * isRestartInProgress: Restart in progress
897 * hdd_restart_retries: Restart retries
898 *
899 */
900 vos_timer_t hdd_restart_timer;
901 atomic_t isRestartInProgress;
902 u_int8_t hdd_restart_retries;
903
Jeff Johnson295189b2012-06-20 16:38:30 -0700904};
905
906
907
908/*---------------------------------------------------------------------------
909 Function declarations and documenation
910 -------------------------------------------------------------------------*/
911VOS_STATUS hdd_get_front_adapter( hdd_context_t *pHddCtx,
912 hdd_adapter_list_node_t** ppAdapterNode);
913
914VOS_STATUS hdd_get_next_adapter( hdd_context_t *pHddCtx,
915 hdd_adapter_list_node_t* pAdapterNode,
916 hdd_adapter_list_node_t** pNextAdapterNode);
917
918VOS_STATUS hdd_remove_adapter( hdd_context_t *pHddCtx,
919 hdd_adapter_list_node_t* pAdapterNode);
920
921VOS_STATUS hdd_remove_front_adapter( hdd_context_t *pHddCtx,
922 hdd_adapter_list_node_t** ppAdapterNode);
923
924VOS_STATUS hdd_add_adapter_back( hdd_context_t *pHddCtx,
925 hdd_adapter_list_node_t* pAdapterNode);
926
927VOS_STATUS hdd_add_adapter_front( hdd_context_t *pHddCtx,
928 hdd_adapter_list_node_t* pAdapterNode);
929
930hdd_adapter_t* hdd_open_adapter( hdd_context_t *pHddCtx, tANI_U8 session_type,
931 char* name, tSirMacAddr macAddr, tANI_U8 rtnl_held );
932VOS_STATUS hdd_close_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter, tANI_U8 rtnl_held );
933VOS_STATUS hdd_close_all_adapters( hdd_context_t *pHddCtx );
934VOS_STATUS hdd_stop_all_adapters( hdd_context_t *pHddCtx );
935VOS_STATUS hdd_reset_all_adapters( hdd_context_t *pHddCtx );
936VOS_STATUS hdd_start_all_adapters( hdd_context_t *pHddCtx );
937VOS_STATUS hdd_reconnect_all_adapters( hdd_context_t *pHddCtx );
938hdd_adapter_t * hdd_get_adapter_by_name( hdd_context_t *pHddCtx, tANI_U8 *name );
939hdd_adapter_t * hdd_get_adapter_by_macaddr( hdd_context_t *pHddCtx, tSirMacAddr macAddr );
940hdd_adapter_t * hdd_get_mon_adapter( hdd_context_t *pHddCtx );
941VOS_STATUS hdd_init_station_mode( hdd_adapter_t *pAdapter );
942hdd_adapter_t * hdd_get_adapter( hdd_context_t *pHddCtx, device_mode_t mode );
943void hdd_deinit_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter );
944VOS_STATUS hdd_stop_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter );
945void hdd_set_station_ops( struct net_device *pWlanDev );
946tANI_U8* wlan_hdd_get_intf_addr(hdd_context_t* pHddCtx);
947void wlan_hdd_release_intf_addr(hdd_context_t* pHddCtx, tANI_U8* releaseAddr);
948v_U8_t hdd_get_operating_channel( hdd_context_t *pHddCtx, device_mode_t mode );
949
950
951#if defined(WLAN_SOFTAP_FEATURE) || defined(ANI_MANF_DIAG)
952void hdd_set_conparam ( v_UINT_t newParam );
953tVOS_CON_MODE hdd_get_conparam( void );
954#endif
955
956void wlan_hdd_enable_deepsleep(v_VOID_t * pVosContext);
957v_BOOL_t hdd_is_apps_power_collapse_allowed(hdd_context_t* pHddCtx);
958void hdd_abort_mac_scan(hdd_context_t *pHddCtx);
959#ifdef CONFIG_CFG80211
960void wlan_hdd_set_monitor_tx_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter );
961void hdd_cleanup_actionframe( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter );
962#endif
963void wlan_hdd_set_concurrency_mode(hdd_context_t *pHddCtx, tVOS_CON_MODE mode);
964void wlan_hdd_clear_concurrency_mode(hdd_context_t *pHddCtx, tVOS_CON_MODE mode);
965void wlan_hdd_reset_prob_rspies(hdd_adapter_t* pHostapdAdapter);
966void hdd_prevent_suspend(void);
967void hdd_allow_suspend(void);
968v_U8_t hdd_is_ssr_required(void);
969void hdd_set_ssr_required(v_U8_t value);
970
971VOS_STATUS hdd_enable_bmps_imps(hdd_context_t *pHddCtx);
972VOS_STATUS hdd_disable_bmps_imps(hdd_context_t *pHddCtx, tANI_U8 session_type);
973
974eHalStatus hdd_smeCloseSessionCallback(void *pContext);
Jeff Johnsone7245742012-09-05 17:12:55 -0700975VOS_STATUS wlan_hdd_restart_driver(hdd_context_t *pHddCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -0700976#endif // end #if !defined( WLAN_HDD_MAIN_H )