aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/rt2870/aironet.h
blob: 1e07b19b8cdc945f8eee7f1ebad729db27ab3c02 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
/*
 *************************************************************************
 * Ralink Tech Inc.
 * 5F., No.36, Taiyuan St., Jhubei City,
 * Hsinchu County 302,
 * Taiwan, R.O.C.
 *
 * (c) Copyright 2002-2007, Ralink Technology, Inc.
 *
 * This program is free software; you can redistribute it and/or modify  *
 * it under the terms of the GNU General Public License as published by  *
 * the Free Software Foundation; either version 2 of the License, or     *
 * (at your option) any later version.                                   *
 *                                                                       *
 * This program is distributed in the hope that it will be useful,       *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 * GNU General Public License for more details.                          *
 *                                                                       *
 * You should have received a copy of the GNU General Public License     *
 * along with this program; if not, write to the                         *
 * Free Software Foundation, Inc.,                                       *
 * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 *                                                                       *
 *************************************************************************

	Module Name:
	aironet.h

	Abstract:

	Revision History:
	Who			When			What
	--------	----------		----------------------------------------------
	Name		Date			Modification logs
	Paul Lin	04-06-15		Initial
*/

#ifndef	__AIRONET_H__
#define	__AIRONET_H__

// Measurement Type definition
#define	MSRN_TYPE_UNUSED				0
#define	MSRN_TYPE_CHANNEL_LOAD_REQ		1
#define	MSRN_TYPE_NOISE_HIST_REQ		2
#define	MSRN_TYPE_BEACON_REQ			3
#define	MSRN_TYPE_FRAME_REQ				4

// Scan Mode in Beacon Request
#define	MSRN_SCAN_MODE_PASSIVE			0
#define	MSRN_SCAN_MODE_ACTIVE			1
#define	MSRN_SCAN_MODE_BEACON_TABLE		2

// PHY type definition for Aironet beacon report, CCX 2 table 36-9
#define	PHY_FH							1
#define	PHY_DSS							2
#define	PHY_UNUSED						3
#define	PHY_OFDM						4
#define	PHY_HR_DSS						5
#define	PHY_ERP							6

// RPI table in dBm
#define	RPI_0			0			//	Power <= -87
#define	RPI_1			1			//	-87 < Power <= -82
#define	RPI_2			2			//	-82 < Power <= -77
#define	RPI_3			3			//	-77 < Power <= -72
#define	RPI_4			4			//	-72 < Power <= -67
#define	RPI_5			5			//	-67 < Power <= -62
#define	RPI_6			6			//	-62 < Power <= -57
#define	RPI_7			7			//	-57 < Power

// Cisco Aironet IAPP definetions
#define	AIRONET_IAPP_TYPE					0x32
#define	AIRONET_IAPP_SUBTYPE_REQUEST		0x01
#define	AIRONET_IAPP_SUBTYPE_REPORT			0x81

// Measurement Request detail format
typedef	struct	_MEASUREMENT_REQUEST	{
	UCHAR	Channel;
	UCHAR	ScanMode;			// Use only in beacon request, other requests did not use this field
	USHORT	Duration;
}	MEASUREMENT_REQUEST, *PMEASUREMENT_REQUEST;

// Beacon Measurement Report
// All these field might change to UCHAR, because we didn't do anything to these report.
// We copy all these beacons and report to CCX 2 AP.
typedef	struct	_BEACON_REPORT	{
	UCHAR	Channel;
	UCHAR	Spare;
	USHORT	Duration;
	UCHAR	PhyType;			// Definiation is listed above table 36-9
	UCHAR	RxPower;
	UCHAR	BSSID[6];
	UCHAR	ParentTSF[4];
	UCHAR	TargetTSF[8];
	USHORT	BeaconInterval;
	USHORT	CapabilityInfo;
}	BEACON_REPORT, *PBEACON_REPORT;

// Frame Measurement Report (Optional)
typedef	struct	_FRAME_REPORT	{
	UCHAR	Channel;
	UCHAR	Spare;
	USHORT	Duration;
	UCHAR	TA;
	UCHAR	BSSID[6];
	UCHAR	RSSI;
	UCHAR	Count;
}	FRAME_REPORT, *PFRAME_REPORT;

#pragma pack(1)
// Channel Load Report
typedef	struct	_CHANNEL_LOAD_REPORT	{
	UCHAR	Channel;
	UCHAR	Spare;
	USHORT	Duration;
	UCHAR	CCABusy;
}	CHANNEL_LOAD_REPORT, *PCHANNEL_LOAD_REPORT;
#pragma pack()

// Nosie Histogram Report
typedef	struct	_NOISE_HIST_REPORT	{
	UCHAR	Channel;
	UCHAR	Spare;
	USHORT	Duration;
	UCHAR	Density[8];
}	NOISE_HIST_REPORT, *PNOISE_HIST_REPORT;

// Radio Management Capability element
typedef	struct	_RADIO_MANAGEMENT_CAPABILITY	{
	UCHAR	Eid;				// TODO: Why the Eid is 1 byte, not normal 2 bytes???
	UCHAR	Length;
	UCHAR	AironetOui[3];		// AIronet OUI (00 40 96)
	UCHAR	Type;				// Type / Version
	USHORT	Status;				// swap16 required
}	RADIO_MANAGEMENT_CAPABILITY, *PRADIO_MANAGEMENT_CAPABILITY;

// Measurement Mode Bit definition
typedef	struct	_MEASUREMENT_MODE	{
	UCHAR	Rsvd:4;
	UCHAR	Report:1;
	UCHAR	NotUsed:1;
	UCHAR	Enable:1;
	UCHAR	Parallel:1;
}	MEASUREMENT_MODE, *PMEASUREMENT_MODE;

// Measurement Request element, This is little endian mode
typedef	struct	_MEASUREMENT_REQUEST_ELEMENT	{
	USHORT				Eid;
	USHORT				Length;				// swap16 required
	USHORT				Token;				// non-zero unique token
	UCHAR				Mode;				// Measurement Mode
	UCHAR				Type;				// Measurement type
}	MEASUREMENT_REQUEST_ELEMENT, *PMEASUREMENT_REQUEST_ELEMENT;

// Measurement Report element, This is little endian mode
typedef	struct	_MEASUREMENT_REPORT_ELEMENT	{
	USHORT				Eid;
	USHORT				Length;				// swap16 required
	USHORT				Token;				// non-zero unique token
	UCHAR				Mode;				// Measurement Mode
	UCHAR				Type;				// Measurement type
}	MEASUREMENT_REPORT_ELEMENT, *PMEASUREMENT_REPORT_ELEMENT;

// Cisco Aironet IAPP Frame Header, Network byte order used
typedef	struct	_AIRONET_IAPP_HEADER {
	UCHAR	CiscoSnapHeader[8];	// 8 bytes Cisco snap header
	USHORT	Length;				// IAPP ID & length, remember to swap16 in LE system
	UCHAR	Type;				// IAPP type
	UCHAR	SubType;			// IAPP subtype
	UCHAR	DA[6];				// Destination MAC address
	UCHAR	SA[6];				// Source MAC address
	USHORT	Token;				// Dialog token, no need to swap16 since it is for yoken usage only
}	AIRONET_IAPP_HEADER, *PAIRONET_IAPP_HEADER;

// Radio Measurement Request frame
typedef	struct	_AIRONET_RM_REQUEST_FRAME	{
    AIRONET_IAPP_HEADER	IAPP;			// Common header
	UCHAR				Delay;			// Activation Delay
	UCHAR				Offset;			// Measurement offset
}	AIRONET_RM_REQUEST_FRAME, *PAIRONET_RM_REQUEST_FRAME;

// Radio Measurement Report frame
typedef	struct	_AIRONET_RM_REPORT_FRAME	{
    AIRONET_IAPP_HEADER	IAPP;			// Common header
}	AIRONET_RM_REPORT_FRAME, *PAIRONET_RM_REPORT_FRAME;

// Saved element request actions which will saved in StaCfg.
typedef	struct	_RM_REQUEST_ACTION	{
	MEASUREMENT_REQUEST_ELEMENT	ReqElem;		// Saved request element
	MEASUREMENT_REQUEST			Measurement;	// Saved measurement within the request element
}	RM_REQUEST_ACTION, *PRM_REQUEST_ACTION;

// CCX administration control
typedef	union	_CCX_CONTROL	{
	struct	{
		UINT32		Enable:1;			// Enable CCX2
		UINT32		LeapEnable:1;		// Enable LEAP at CCX2
		UINT32		RMEnable:1;			// Radio Measurement Enable
		UINT32		DCRMEnable:1;		// Non serving channel Radio Measurement enable
		UINT32		QOSEnable:1;		// Enable QOS for CCX 2.0 support
		UINT32		FastRoamEnable:1;	// Enable fast roaming
		UINT32		Rsvd:2;				// Not used
		UINT32		dBmToRoam:8;		// the condition to roam when receiving Rssi less than this value. It's negative value.
		UINT32		TuLimit:16;			// Limit for different channel scan
	}	field;
	UINT32			word;
}	CCX_CONTROL, *PCCX_CONTROL;

#endif	// __AIRONET_H__