Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
net
wireless
zd1211rw
zd_mac.h
Go to the documentation of this file.
1
/* ZD1211 USB-WLAN driver for Linux
2
*
3
* Copyright (C) 2005-2007 Ulrich Kunitz <
[email protected]
>
4
* Copyright (C) 2006-2007 Daniel Drake <
[email protected]
>
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
*/
20
21
#ifndef _ZD_MAC_H
22
#define _ZD_MAC_H
23
24
#include <linux/kernel.h>
25
#include <
net/mac80211.h
>
26
27
#include "
zd_chip.h
"
28
29
struct
zd_ctrlset
{
30
u8
modulation
;
31
__le16
tx_length
;
32
u8
control
;
33
/* stores only the difference to tx_length on ZD1211B */
34
__le16
packet_length
;
35
__le16
current_length
;
36
u8
service
;
37
__le16
next_frame_length
;
38
}
__packed
;
39
40
#define ZD_CS_RESERVED_SIZE 25
41
42
/* The field modulation of struct zd_ctrlset controls the bit rate, the use
43
* of short or long preambles in 802.11b (CCK mode) or the use of 802.11a or
44
* 802.11g in OFDM mode.
45
*
46
* The term zd-rate is used for the combination of the modulation type flag
47
* and the "pure" rate value.
48
*/
49
#define ZD_PURE_RATE_MASK 0x0f
50
#define ZD_MODULATION_TYPE_MASK 0x10
51
#define ZD_RATE_MASK (ZD_PURE_RATE_MASK|ZD_MODULATION_TYPE_MASK)
52
#define ZD_PURE_RATE(modulation) ((modulation) & ZD_PURE_RATE_MASK)
53
#define ZD_MODULATION_TYPE(modulation) ((modulation) & ZD_MODULATION_TYPE_MASK)
54
#define ZD_RATE(modulation) ((modulation) & ZD_RATE_MASK)
55
56
/* The two possible modulation types. Notify that 802.11b doesn't use the CCK
57
* codeing for the 1 and 2 MBit/s rate. We stay with the term here to remain
58
* consistent with uses the term at other places.
59
*/
60
#define ZD_CCK 0x00
61
#define ZD_OFDM 0x10
62
63
/* The ZD1211 firmware uses proprietary encodings of the 802.11b (CCK) rates.
64
* For OFDM the PLCP rate encodings are used. We combine these "pure" rates
65
* with the modulation type flag and call the resulting values zd-rates.
66
*/
67
#define ZD_CCK_RATE_1M (ZD_CCK|0x00)
68
#define ZD_CCK_RATE_2M (ZD_CCK|0x01)
69
#define ZD_CCK_RATE_5_5M (ZD_CCK|0x02)
70
#define ZD_CCK_RATE_11M (ZD_CCK|0x03)
71
#define ZD_OFDM_RATE_6M (ZD_OFDM|ZD_OFDM_PLCP_RATE_6M)
72
#define ZD_OFDM_RATE_9M (ZD_OFDM|ZD_OFDM_PLCP_RATE_9M)
73
#define ZD_OFDM_RATE_12M (ZD_OFDM|ZD_OFDM_PLCP_RATE_12M)
74
#define ZD_OFDM_RATE_18M (ZD_OFDM|ZD_OFDM_PLCP_RATE_18M)
75
#define ZD_OFDM_RATE_24M (ZD_OFDM|ZD_OFDM_PLCP_RATE_24M)
76
#define ZD_OFDM_RATE_36M (ZD_OFDM|ZD_OFDM_PLCP_RATE_36M)
77
#define ZD_OFDM_RATE_48M (ZD_OFDM|ZD_OFDM_PLCP_RATE_48M)
78
#define ZD_OFDM_RATE_54M (ZD_OFDM|ZD_OFDM_PLCP_RATE_54M)
79
80
/* The bit 5 of the zd_ctrlset modulation field controls the preamble in CCK
81
* mode or the 802.11a/802.11g selection in OFDM mode.
82
*/
83
#define ZD_CCK_PREA_LONG 0x00
84
#define ZD_CCK_PREA_SHORT 0x20
85
#define ZD_OFDM_MODE_11G 0x00
86
#define ZD_OFDM_MODE_11A 0x20
87
88
/* zd_ctrlset control field */
89
#define ZD_CS_NEED_RANDOM_BACKOFF 0x01
90
#define ZD_CS_NO_ACK 0x02
91
92
#define ZD_CS_FRAME_TYPE_MASK 0x0c
93
#define ZD_CS_DATA_FRAME 0x00
94
#define ZD_CS_PS_POLL_FRAME 0x04
95
#define ZD_CS_MANAGEMENT_FRAME 0x08
96
#define ZD_CS_NO_SEQUENCE_CTL_FRAME 0x0c
97
98
#define ZD_CS_WAKE_DESTINATION 0x10
99
#define ZD_CS_RTS 0x20
100
#define ZD_CS_ENCRYPT 0x40
101
#define ZD_CS_SELF_CTS 0x80
102
103
/* Incoming frames are prepended by a PLCP header */
104
#define ZD_PLCP_HEADER_SIZE 5
105
106
struct
rx_length_info
{
107
__le16
length
[3];
108
__le16
tag
;
109
}
__packed
;
110
111
#define RX_LENGTH_INFO_TAG 0x697e
112
113
struct
rx_status
{
114
u8
signal_quality_cck
;
115
/* rssi */
116
u8
signal_strength
;
117
u8
signal_quality_ofdm
;
118
u8
decryption_type
;
119
u8
frame_status
;
120
}
__packed
;
121
122
/* rx_status field decryption_type */
123
#define ZD_RX_NO_WEP 0
124
#define ZD_RX_WEP64 1
125
#define ZD_RX_TKIP 2
126
#define ZD_RX_AES 4
127
#define ZD_RX_WEP128 5
128
#define ZD_RX_WEP256 6
129
130
/* rx_status field frame_status */
131
#define ZD_RX_FRAME_MODULATION_MASK 0x01
132
#define ZD_RX_CCK 0x00
133
#define ZD_RX_OFDM 0x01
134
135
#define ZD_RX_TIMEOUT_ERROR 0x02
136
#define ZD_RX_FIFO_OVERRUN_ERROR 0x04
137
#define ZD_RX_DECRYPTION_ERROR 0x08
138
#define ZD_RX_CRC32_ERROR 0x10
139
#define ZD_RX_NO_ADDR1_MATCH_ERROR 0x20
140
#define ZD_RX_CRC16_ERROR 0x40
141
#define ZD_RX_ERROR 0x80
142
143
struct
tx_retry_rate
{
144
int
count
;
/* number of valid element in rate[] array */
145
int
rate
[10];
/* retry rates, described by an index in zd_rates[] */
146
};
147
148
struct
tx_status
{
149
u8
type
;
/* must always be 0x01 : USB_INT_TYPE */
150
u8
id
;
/* must always be 0xa0 : USB_INT_ID_RETRY_FAILED */
151
u8
rate
;
152
u8
pad
;
153
u8
mac
[
ETH_ALEN
];
154
u8
retry
;
155
u8
failure
;
156
}
__packed
;
157
158
enum
mac_flags
{
159
MAC_FIXED_CHANNEL
= 0x01,
160
};
161
162
struct
housekeeping
{
163
struct
delayed_work
link_led_work
;
164
};
165
166
struct
beacon
{
167
struct
delayed_work
watchdog_work
;
168
struct
sk_buff
*
cur_beacon
;
169
unsigned
long
last_update
;
170
u16
interval
;
171
u8
period
;
172
};
173
174
enum
zd_device_flags
{
175
ZD_DEVICE_RUNNING
,
176
};
177
178
#define ZD_MAC_STATS_BUFFER_SIZE 16
179
180
#define ZD_MAC_MAX_ACK_WAITERS 50
181
182
struct
zd_mac
{
183
struct
zd_chip
chip
;
184
spinlock_t
lock
;
185
spinlock_t
intr_lock
;
186
struct
ieee80211_hw
*
hw
;
187
struct
ieee80211_vif
*
vif
;
188
struct
housekeeping
housekeeping
;
189
struct
beacon
beacon
;
190
struct
work_struct
set_rts_cts_work
;
191
struct
work_struct
process_intr
;
192
struct
zd_mc_hash
multicast_hash
;
193
u8
intr_buffer
[
USB_MAX_EP_INT_BUFFER
];
194
u8
regdomain
;
195
u8
default_regdomain
;
196
u8
channel
;
197
int
type
;
198
int
associated
;
199
unsigned
long
flags
;
200
struct
sk_buff_head
ack_wait_queue
;
201
struct
ieee80211_channel
channels
[14];
202
struct
ieee80211_rate
rates
[12];
203
struct
ieee80211_supported_band
band
;
204
205
/* Short preamble (used for RTS/CTS) */
206
unsigned
int
short_preamble
:1;
207
208
/* whether to pass frames with CRC errors to stack */
209
unsigned
int
pass_failed_fcs
:1;
210
211
/* whether to pass control frames to stack */
212
unsigned
int
pass_ctrl
:1;
213
214
/* whether we have received a 802.11 ACK that is pending */
215
unsigned
int
ack_pending
:1;
216
217
/* signal strength of the last 802.11 ACK received */
218
int
ack_signal
;
219
};
220
221
#define ZD_REGDOMAIN_FCC 0x10
222
#define ZD_REGDOMAIN_IC 0x20
223
#define ZD_REGDOMAIN_ETSI 0x30
224
#define ZD_REGDOMAIN_SPAIN 0x31
225
#define ZD_REGDOMAIN_FRANCE 0x32
226
#define ZD_REGDOMAIN_JAPAN_2 0x40
227
#define ZD_REGDOMAIN_JAPAN 0x41
228
#define ZD_REGDOMAIN_JAPAN_3 0x49
229
230
enum
{
231
MIN_CHANNEL24
= 1,
232
MAX_CHANNEL24
= 14,
233
};
234
235
#define ZD_PLCP_SERVICE_LENGTH_EXTENSION 0x80
236
237
struct
ofdm_plcp_header
{
238
u8
prefix
[3];
239
__le16
service
;
240
}
__packed
;
241
242
static
inline
u8
zd_ofdm_plcp_header_rate(
const
struct
ofdm_plcp_header
*
header
)
243
{
244
return
header->
prefix
[0] & 0xf;
245
}
246
247
/* The following defines give the encoding of the 4-bit rate field in the
248
* OFDM (802.11a/802.11g) PLCP header. Notify that these values are used to
249
* define the zd-rate values for OFDM.
250
*
251
* See the struct zd_ctrlset definition in zd_mac.h.
252
*/
253
#define ZD_OFDM_PLCP_RATE_6M 0xb
254
#define ZD_OFDM_PLCP_RATE_9M 0xf
255
#define ZD_OFDM_PLCP_RATE_12M 0xa
256
#define ZD_OFDM_PLCP_RATE_18M 0xe
257
#define ZD_OFDM_PLCP_RATE_24M 0x9
258
#define ZD_OFDM_PLCP_RATE_36M 0xd
259
#define ZD_OFDM_PLCP_RATE_48M 0x8
260
#define ZD_OFDM_PLCP_RATE_54M 0xc
261
262
struct
cck_plcp_header
{
263
u8
signal
;
264
u8
service
;
265
__le16
length
;
266
__le16
crc16
;
267
}
__packed
;
268
269
static
inline
u8
zd_cck_plcp_header_signal(
const
struct
cck_plcp_header
*
header
)
270
{
271
return
header->
signal
;
272
}
273
274
/* These defines give the encodings of the signal field in the 802.11b PLCP
275
* header. The signal field gives the bit rate of the following packet. Even
276
* if technically wrong we use CCK here also for the 1 MBit/s and 2 MBit/s
277
* rate to stay consistent with Zydas and our use of the term.
278
*
279
* Notify that these values are *not* used in the zd-rates.
280
*/
281
#define ZD_CCK_PLCP_SIGNAL_1M 0x0a
282
#define ZD_CCK_PLCP_SIGNAL_2M 0x14
283
#define ZD_CCK_PLCP_SIGNAL_5M5 0x37
284
#define ZD_CCK_PLCP_SIGNAL_11M 0x6e
285
286
static
inline
struct
zd_mac
*zd_hw_mac(
struct
ieee80211_hw
*
hw
)
287
{
288
return
hw->
priv
;
289
}
290
291
static
inline
struct
zd_mac
*zd_chip_to_mac(
struct
zd_chip
*
chip
)
292
{
293
return
container_of
(chip,
struct
zd_mac
, chip);
294
}
295
296
static
inline
struct
zd_mac
*zd_usb_to_mac(
struct
zd_usb
*
usb
)
297
{
298
return
zd_chip_to_mac(zd_usb_to_chip(usb));
299
}
300
301
static
inline
u8
*zd_mac_get_perm_addr(
struct
zd_mac
*
mac
)
302
{
303
return
mac->
hw
->wiphy->perm_addr;
304
}
305
306
#define zd_mac_dev(mac) (zd_chip_dev(&(mac)->chip))
307
308
struct
ieee80211_hw
*
zd_mac_alloc_hw
(
struct
usb_interface
*
intf
);
309
void
zd_mac_clear
(
struct
zd_mac
*
mac
);
310
311
int
zd_mac_preinit_hw
(
struct
ieee80211_hw
*
hw
);
312
int
zd_mac_init_hw
(
struct
ieee80211_hw
*
hw
);
313
314
int
zd_mac_rx
(
struct
ieee80211_hw
*
hw
,
const
u8
*
buffer
,
unsigned
int
length
);
315
void
zd_mac_tx_failed
(
struct
urb
*
urb
);
316
void
zd_mac_tx_to_dev
(
struct
sk_buff
*
skb
,
int
error
);
317
318
int
zd_op_start
(
struct
ieee80211_hw
*
hw
);
319
void
zd_op_stop
(
struct
ieee80211_hw
*
hw
);
320
int
zd_restore_settings
(
struct
zd_mac
*
mac
);
321
322
#ifdef DEBUG
323
void
zd_dump_rx_status
(
const
struct
rx_status
*
status
);
324
#else
325
#define zd_dump_rx_status(status)
326
#endif
/* DEBUG */
327
328
#endif
/* _ZD_MAC_H */
Generated on Thu Jan 10 2013 14:13:22 for Linux Kernel by
1.8.2