rtw_mlme.h revision e2601960e9d5119f20fb3f5dca562378502ed7e6
1364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/******************************************************************************
2364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
3364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
5364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * This program is free software; you can redistribute it and/or modify it
6364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * under the terms of version 2 of the GNU General Public License as
7364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * published by the Free Software Foundation.
8364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
9364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * This program is distributed in the hope that it will be useful, but WITHOUT
10364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * more details.
13364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
14364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
15364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger ******************************************************************************/
16364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#ifndef __RTW_MLME_H_
17364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define __RTW_MLME_H_
18364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
19364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#include <osdep_service.h>
20364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#include <mlme_osdep.h>
21364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#include <drv_types.h>
22364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#include <wlan_bssdef.h>
23364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
24364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	MAX_BSS_CNT	128
25364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define   MAX_JOIN_TIMEOUT	6500
26364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
27364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* Increase the scanning timeout because of increasing the SURVEY_TO value. */
28364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
29364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	SCANNING_TIMEOUT	8000
30364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
31364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	SCAN_INTERVAL	(30) /*  unit:2sec, 30*2 = 60sec */
32364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
33364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	SCANQUEUE_LIFETIME 20 /*  unit:sec */
34364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
35364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_NULL_STATE		0x00000000
36364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
37364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_ASOC_STATE		0x00000001 /*  Under Linked state.*/
38364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_REASOC_STATE	0x00000002
39364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_SLEEP_STATE	0x00000004
40364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_STATION_STATE	0x00000008
41364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
42364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_AP_STATE		0x00000010
43364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_ADHOC_STATE	0x00000020
44364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define   WIFI_ADHOC_MASTER_STATE	0x00000040
45364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define   WIFI_UNDER_LINKING	0x00000080
46364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
47364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_UNDER_WPS		0x00000100
48364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_STA_ALIVE_CHK_STATE	0x00000400
49364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* to indicate the station is under site surveying */
50364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_SITE_MONITOR	0x00000800
51364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
52364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_MP_STATE		0x00010000
53364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_MP_CTX_BACKGROUND	0x00020000	/*  in continous tx background */
54364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_MP_CTX_ST		0x00040000	/*  in continous tx with single-tone */
55364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_MP_CTX_BACKGROUND_PENDING	0x00080000	/*  pending in continous tx background due to out of skb */
56364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_MP_CTX_CCK_HW	0x00100000	/*  in continous tx */
57364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	WIFI_MP_CTX_CCK_CS	0x00200000	/*  in continous tx with carrier suppression */
58364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define   WIFI_MP_LPBK_STATE	0x00400000
59364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
60364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define _FW_UNDER_LINKING	WIFI_UNDER_LINKING
61364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define _FW_LINKED		WIFI_ASOC_STATE
62364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define _FW_UNDER_SURVEY	WIFI_SITE_MONITOR
63364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
64364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
65364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerenum dot11AuthAlgrthmNum {
66364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	dot11AuthAlgrthm_Open = 0,
67364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	dot11AuthAlgrthm_Shared,
68364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	dot11AuthAlgrthm_8021X,
69364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	dot11AuthAlgrthm_Auto,
70364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	dot11AuthAlgrthm_MaxNum
71364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
72364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
73364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*  Scan type including active and passive scan. */
74364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerenum rt_scan_type {
75364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	SCAN_PASSIVE,
76364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	SCAN_ACTIVE,
77364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	SCAN_MIX,
78364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
79364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
80364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerenum {
81364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	GHZ24_50 = 0,
82364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	GHZ_50,
83364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	GHZ_24,
84364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
85364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
86364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerenum SCAN_RESULT_TYPE {
87364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	SCAN_RESULT_P2P_ONLY = 0,	/*	Will return all the P2P devices. */
88364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	SCAN_RESULT_ALL = 1,		/*	Will return all the scanned device, include AP. */
89364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	SCAN_RESULT_WFD_TYPE = 2	/*	Will just return the correct WFD device. */
90364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger					/*	If this device is Miracast sink device, it will just return all the Miracast source devices. */
91364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
92364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
93364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*
94364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
95364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerthere are several "locks" in mlme_priv,
96364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingersince mlme_priv is a shared resource between many threads,
97364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerlike ISR/Call-Back functions, the OID handlers, and even timer functions.
98364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
99364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
100364e30ebd2dbaccba430c603da03e68746eb932aLarry FingerEach _queue has its own locks, already.
101364e30ebd2dbaccba430c603da03e68746eb932aLarry FingerOther items are protected by mlme_priv.lock.
102364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
103364e30ebd2dbaccba430c603da03e68746eb932aLarry FingerTo avoid possible dead lock, any thread trying to modifiying mlme_priv
104364e30ebd2dbaccba430c603da03e68746eb932aLarry FingerSHALL not lock up more than one locks at a time!
105364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger*/
106364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
107364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define traffic_threshold	10
108364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define	traffic_scan_period	500
109364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
110364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct sitesurvey_ctrl {
111364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u64	last_tx_pkts;
112364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	uint	last_rx_pkts;
113364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int	traffic_busy;
114364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct timer_list	sitesurvey_ctrl_timer;
115364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
116364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
117364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct rt_link_detect {
118364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u32	NumTxOkInPeriod;
119364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u32	NumRxOkInPeriod;
120364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u32	NumRxUnicastOkInPeriod;
121364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	bool	bBusyTraffic;
122364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	bool	bTxBusyTraffic;
123364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	bool	bRxBusyTraffic;
124364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	bool	bHigherBusyTraffic; /*  For interrupt migration purpose. */
125364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	bool	bHigherBusyRxTraffic; /*  We may disable Tx interrupt according as Rx traffic. */
126364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	bool	bHigherBusyTxTraffic; /*  We may disable Tx interrupt according as Tx traffic. */
127364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
128364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
129364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct profile_info {
130364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	ssidlen;
131364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	ssid[IEEE80211_MAX_SSID_LEN];
132364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	peermac[ETH_ALEN];
133364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
134364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
135364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct tx_invite_req_info {
136364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	token;
137364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	benable;
138364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	go_ssid[IEEE80211_MAX_SSID_LEN];
139364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	ssidlen;
140364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	go_bssid[ETH_ALEN];
141364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	peer_macaddr[ETH_ALEN];
142364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	operating_ch;	/* This information will be set by using the p2p_set op_ch = x */
143364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	peer_ch;	/* The listen channel for peer P2P device */
144364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
145364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
146364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
147364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct tx_invite_resp_info {
148364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	token;	/*	Used to record the dialog token of p2p invitation request frame. */
149364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
150364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
151364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct tx_provdisc_req_info {
152364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u16	wps_config_method_request;	/* Used when sending the provisioning request frame */
153364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u16	peer_channel_num[2];		/* The channel number which the receiver stands. */
154364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct	cfg80211_ssid ssid;
155364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	peerDevAddr[ETH_ALEN];	/* Peer device address */
156364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	peerIFAddr[ETH_ALEN];		/* Peer interface address */
157364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	benable;			/* This provision discovery request frame is trigger to send or not */
158364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
159364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
160364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct rx_provdisc_req_info {	/* When peer device issue prov_disc_req first, we should store the following informations */
161364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	peerDevAddr[ETH_ALEN];		/*	Peer device address */
162364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	strconfig_method_desc_of_prov_disc_req[4];	/*	description for the config method located in the provisioning discovery request frame. */
163364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger																	/*	The UI must know this information to know which config method the remote p2p device is requiring. */
164364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
165364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
166364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct tx_nego_req_info {
167364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u16	peer_channel_num[2];	/* The channel number which the receiver stands. */
168364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	peerDevAddr[ETH_ALEN];/* Peer device address */
169364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	benable;		/* This negoitation request frame is trigger to send or not */
170364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
171364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
172364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct group_id_info {
173364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 go_device_addr[ETH_ALEN]; /*The GO's device address of P2P group */
174364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 ssid[IEEE80211_MAX_SSID_LEN]; /* The SSID of this P2P group */
175364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
176364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
177364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct scan_limit_info {
178364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	scan_op_ch_only;	/* When this flag is set, the driver should just scan the operation channel */
179364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	operation_ch[2];	/* Store the operation channel of invitation request frame */
180364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
181364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
182364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct tdls_ss_record {	/* signal strength record */
183364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	macaddr[ETH_ALEN];
184364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	RxPWDBAll;
185364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	is_tdls_sta;	/*  true: direct link sta, false: else */
186364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
187364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
188364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct tdls_info {
189364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	ap_prohibited;
190364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	uint	setup_state;
191364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	sta_cnt;
192364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* 1:tdls sta == (NUM_STA-1), reach max direct link no; 0: else; */
193364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	sta_maximum;
194364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct tdls_ss_record	ss_record;
195364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	macid_index;	/* macid entry that is ready to write */
196364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* cam entry that is trying to clear, using it in direct link teardown*/
197364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	clear_cam;
198364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	ch_sensing;
199364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	cur_channel;
200364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	candidate_ch;
201364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	collect_pkt_num[MAX_CHANNEL_NUM];
202364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	spinlock_t	cmd_lock;
203364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	spinlock_t	hdl_lock;
204364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	watchdog_count;
205364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	dev_discovered;		/* WFD_TDLS: for sigma test */
206364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	enable;
207364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
208364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
209364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct mlme_priv {
210364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	spinlock_t	lock;
211364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int	fw_state;
212364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 bScanInProcess;
213364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	to_join; /* flag */
214364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 to_roaming; /*  roaming trying times */
215364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
216364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct rtw_adapter *nic_hdl;
217364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
218364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	not_indic_disco;
219364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct rtw_queue	scanned_queue;
220364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
221364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct cfg80211_ssid assoc_ssid;
222364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	assoc_bssid[6];
223364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
224364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct wlan_network	cur_network;
225364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
226364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* uint wireless_mode; no used, remove it */
227364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
228364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u32	scan_interval;
229364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
230364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct timer_list assoc_timer;
231364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
232364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	uint assoc_by_bssid;
233364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	uint assoc_by_rssi;
234364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
235364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct timer_list scan_to_timer;
236364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
237364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct timer_list set_scan_deny_timer;
238364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	atomic_t set_scan_deny; /* 0: allowed, 1: deny */
239364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
240364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct qos_priv qospriv;
241364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
242364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* Number of non-HT AP/stations */
243364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int num_sta_no_ht;
244364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
245364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int num_FortyMHzIntolerant;
246364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
247364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct ht_priv	htpriv;
248364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
249364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct rt_link_detect LinkDetectInfo;
250364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct timer_list dynamic_chk_timer; /* dynamic/periodic check timer */
251364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
252364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	key_mask; /* use for ips to set wep key after ips_leave23a */
253364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	acm_mask; /*  for wmm acm mask */
254364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8	ChannelPlan;
255364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	enum rt_scan_type scan_mode; /*  active: 1, passive: 0 */
256364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
257364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 *wps_probe_req_ie;
258364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u32 wps_probe_req_ie_len;
259c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *assoc_req;
260c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 assoc_req_len;
261c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 assoc_rsp_len;
262c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *assoc_rsp;
263c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 wps_assoc_resp_ie_len;
264c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *wps_assoc_resp_ie;
265c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *wps_probe_resp_ie;
266c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 wps_probe_resp_ie_len;
267c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *wps_beacon_ie;
268c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 wps_beacon_ie_len;
269c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 p2p_go_probe_resp_ie_len; /* for GO */
270c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 p2p_assoc_req_ie_len;
271c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *p2p_beacon_ie;
272c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *p2p_probe_req_ie;
273c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *p2p_probe_resp_ie;
274c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *p2p_go_probe_resp_ie; /* for GO */
275c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *p2p_assoc_req_ie;
276c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 p2p_beacon_ie_len;
277c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 p2p_probe_req_ie_len;
278c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 p2p_probe_resp_ie_len;
279c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u8 *wfd_assoc_req_ie;
280c17416ef707312429aafcdc4597db73906f3572eLarry Finger	u32 wfd_assoc_req_ie_len;
281364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
282364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#ifdef CONFIG_8723AU_AP_MODE
283364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* Number of associated Non-ERP stations (i.e., stations using 802.11b
284364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	 * in 802.11g BSS) */
285364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int num_sta_non_erp;
286364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
287364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* Number of associated stations that do not support Short Slot Time */
288364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int num_sta_no_short_slot_time;
289364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
290364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* Number of associated stations that do not support Short Preamble */
291364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int num_sta_no_short_preamble;
292364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
293364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int olbc; /* Overlapping Legacy BSS Condition */
294364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
295364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* Number of HT associated stations that do not support greenfield */
296364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int num_sta_ht_no_gf;
297364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
298364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* Number of associated non-HT stations */
299364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* int num_sta_no_ht; */
300364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
301364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* Number of HT associated stations 20 MHz */
302364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int num_sta_ht_20mhz;
303364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
304364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* Overlapping BSS information */
305364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	int olbc_ht;
306364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
307364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u16 ht_op_mode;
308364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
309364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	spinlock_t	bcn_update_lock;
310364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8		update_bcn;
311364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
312364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#endif /* ifdef CONFIG_8723AU_AP_MODE */
313364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
314364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 *wfd_beacon_ie;
315364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 *wfd_probe_req_ie;
316364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 *wfd_probe_resp_ie;
317364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u8 *wfd_go_probe_resp_ie; /* for GO */
318364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
319364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u32 wfd_beacon_ie_len;
320364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u32 wfd_probe_req_ie_len;
321364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u32 wfd_probe_resp_ie_len;
322364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	u32 wfd_go_probe_resp_ie_len; /* for GO */
323364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
324364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
325364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#ifdef CONFIG_8723AU_AP_MODE
326364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
327364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct hostapd_priv {
328364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	struct rtw_adapter *padapter;
329364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger};
330364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
331364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint hostapd_mode_init(struct rtw_adapter *padapter);
332364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid hostapd_mode_unload(struct rtw_adapter *padapter);
333364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#endif
334364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
335364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_joinbss_event_prehandle23a(struct rtw_adapter *adapter, u8 *pbuf);
336e2601960e9d5119f20fb3f5dca562378502ed7e6Jes Sorensenvoid rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf);
337e2601960e9d5119f20fb3f5dca562378502ed7e6Jes Sorensenvoid rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf);
338e2601960e9d5119f20fb3f5dca562378502ed7e6Jes Sorensenvoid rtw23a_joinbss_event_cb(struct rtw_adapter *adapter, const u8 *pbuf);
339e2601960e9d5119f20fb3f5dca562378502ed7e6Jes Sorensenvoid rtw_stassoc_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf);
340e2601960e9d5119f20fb3f5dca562378502ed7e6Jes Sorensenvoid rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf);
341e2601960e9d5119f20fb3f5dca562378502ed7e6Jes Sorensenvoid rtw_atimdone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf);
342e2601960e9d5119f20fb3f5dca562378502ed7e6Jes Sorensenvoid rtw_cpwm_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf);
343364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
344364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
345364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint event_thread(void *context);
346364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw23a_join_to_handler(unsigned long);
347364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
348528e5c1dc78b9b4429f06d148014c048538019b5Jes Sorensenvoid rtw_free_network_queue23a(struct rtw_adapter *adapter);
349364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint rtw_init_mlme_priv23a(struct rtw_adapter *adapter);
350364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
351364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv);
352364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
353364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv);
354364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint rtw_set_key23a(struct rtw_adapter *adapter,
355364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		struct security_priv *psecuritypriv, int keyid, u8 set_tx);
356364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint rtw_set_auth23a(struct rtw_adapter *adapter,
357364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		 struct security_priv *psecuritypriv);
358364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
359364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstatic inline u8 *get_bssid(struct mlme_priv *pmlmepriv)
360364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger{	/* if sta_mode:pmlmepriv->cur_network.network.MacAddress => bssid */
361364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/*  if adhoc_mode:pmlmepriv->cur_network.network.MacAddress => ibss mac address */
362364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	return pmlmepriv->cur_network.network.MacAddress;
363364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}
364364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
365364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstatic inline int check_fwstate(struct mlme_priv *pmlmepriv, int state)
366364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger{
367364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	if (pmlmepriv->fw_state & state)
368364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		return true;
369364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
370364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	return false;
371364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}
372364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
373364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstatic inline int get_fwstate(struct mlme_priv *pmlmepriv)
374364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger{
375364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	return pmlmepriv->fw_state;
376364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}
377364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
378364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*
379364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * No Limit on the calling context,
380364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * therefore set it to be the critical section...
381364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger *
382364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * ### NOTE:#### (!!!!)
383364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock
384364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger */
385364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstatic inline void set_fwstate(struct mlme_priv *pmlmepriv, int state)
386364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger{
387364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	pmlmepriv->fw_state |= state;
388364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* FOR HW integration */
389364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	if (_FW_UNDER_SURVEY == state)
390364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		pmlmepriv->bScanInProcess = true;
391364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}
392364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
393364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstatic inline void _clr_fwstate_(struct mlme_priv *pmlmepriv, int state)
394364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger{
395364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	pmlmepriv->fw_state &= ~state;
396364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	/* FOR HW integration */
397364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	if (_FW_UNDER_SURVEY == state)
398364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		pmlmepriv->bScanInProcess = false;
399364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}
400364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
401364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/*
402364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * No Limit on the calling context,
403364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * therefore set it to be the critical section...
404364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger */
405364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstatic inline void clr_fwstate(struct mlme_priv *pmlmepriv, int state)
406364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger{
407364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	spin_lock_bh(&pmlmepriv->lock);
408364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	if (check_fwstate(pmlmepriv, state) == true)
409364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		pmlmepriv->fw_state ^= state;
410364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	spin_unlock_bh(&pmlmepriv->lock);
411364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}
412364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
413364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstatic inline void clr_fwstate_ex(struct mlme_priv *pmlmepriv, int state)
414364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger{
415364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	spin_lock_bh(&pmlmepriv->lock);
416364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	_clr_fwstate_(pmlmepriv, state);
417364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger	spin_unlock_bh(&pmlmepriv->lock);
418364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}
419364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
420364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingeru16 rtw_get_capability23a(struct wlan_bssid_ex *bss);
421364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_update_scanned_network23a(struct rtw_adapter *adapter,
422364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger				struct wlan_bssid_ex *target);
423364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_disconnect_hdl23a_under_linked(struct rtw_adapter *adapter,
424364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger				     struct sta_info *psta, u8 free_assoc);
425364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_generate_random_ibss23a(u8 *pibss);
426364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct wlan_network *rtw_find_network23a(struct rtw_queue *scanned_queue, u8 *addr);
427364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct wlan_network *rtw_get_oldest_wlan_network23a(struct rtw_queue *scanned_queue);
428364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
429364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_free_assoc_resources23a(struct rtw_adapter *adapter,
430364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			      int lock_scanned_queue);
431364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_indicate_disconnect23a(struct rtw_adapter *adapter);
432364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_indicate_connect23a(struct rtw_adapter *adapter);
433364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_scan_abort23a(struct rtw_adapter *adapter);
434364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
435364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint rtw_restruct_sec_ie23a(struct rtw_adapter *adapter, u8 *in_ie, u8 *out_ie,
436364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			uint in_len);
437364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint rtw_restruct_wmm_ie23a(struct rtw_adapter *adapter, u8 *in_ie, u8 *out_ie,
438364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			uint in_len, uint initial_out_len);
439364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_init_registrypriv_dev_network23a(struct rtw_adapter *adapter);
440364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
441364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_update_registrypriv_dev_network23a(struct rtw_adapter *adapter);
442364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
443364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_get_encrypt_decrypt_from_registrypriv23a(struct rtw_adapter *adapter);
444364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
445364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_scan_timeout_handler23a(unsigned long data);
446364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
447364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_dynamic_check_timer_handler(unsigned long data);
448364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerbool rtw_is_scan_deny(struct rtw_adapter *adapter);
449364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_clear_scan_deny(struct rtw_adapter *adapter);
450364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_set_scan_deny_timer_hdl(unsigned long data);
451364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_set_scan_deny(struct rtw_adapter *adapter, u32 ms);
452364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
453364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw23a_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv);
454364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
455364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid _rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv);
456364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
457364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv);
458364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
459364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint rtw_if_up23a(struct rtw_adapter *padapter);
460364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
461364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint rtw_linked_check(struct rtw_adapter *padapter);
462364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
4636a235443be58fbdfebb02f536c6338ba82ab399aJes Sorensen__le16 *rtw_get_capability23a_from_ie(u8 *ie);
464d7cfe7c85579059e55068ecc69c9baf483883246Jes Sorensen__le16 *rtw_get_beacon_interval23a_from_ie(u8 *ie);
465364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
466364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
467364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_joinbss_reset23a(struct rtw_adapter *padapter);
468364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
469364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerunsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie,
470364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger				   u8 *out_ie, uint in_len, uint *pout_len);
471364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_update_ht_cap23a(struct rtw_adapter *padapter,
472364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		       u8 *pie, uint ie_len);
473364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter,
474364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger			    struct xmit_frame *pxmitframe);
475364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
476364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint rtw_is_same_ibss23a(struct rtw_adapter *adapter,
477364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		     struct wlan_network *pnetwork);
478364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerint is_same_network23a(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst);
479364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
480364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw23a_roaming(struct rtw_adapter *adapter,
481364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger		 struct wlan_network *tgt_network);
482364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_set_roaming(struct rtw_adapter *adapter, u8 to_roaming);
483364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger
484364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#endif /* __RTL871X_MLME_H_ */
485