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
orinoco
orinoco.h
Go to the documentation of this file.
1
/* orinoco.h
2
*
3
* Common definitions to all pieces of the various orinoco
4
* drivers
5
*/
6
7
#ifndef _ORINOCO_H
8
#define _ORINOCO_H
9
10
#define DRIVER_VERSION "0.15"
11
12
#include <
linux/interrupt.h
>
13
#include <
linux/suspend.h
>
14
#include <linux/netdevice.h>
15
#include <linux/wireless.h>
16
#include <
net/iw_handler.h
>
17
#include <
net/cfg80211.h
>
18
19
#include "
hermes.h
"
20
21
/* To enable debug messages */
22
/*#define ORINOCO_DEBUG 3*/
23
24
#define WIRELESS_SPY
/* enable iwspy support */
25
26
#define MAX_SCAN_LEN 4096
27
28
#define ORINOCO_SEQ_LEN 8
29
#define ORINOCO_MAX_KEY_SIZE 14
30
#define ORINOCO_MAX_KEYS 4
31
32
struct
orinoco_key
{
33
__le16
len
;
/* always stored as little-endian */
34
char
data
[
ORINOCO_MAX_KEY_SIZE
];
35
}
__packed
;
36
37
#define TKIP_KEYLEN 16
38
#define MIC_KEYLEN 8
39
40
struct
orinoco_tkip_key
{
41
u8
tkip
[
TKIP_KEYLEN
];
42
u8
tx_mic
[
MIC_KEYLEN
];
43
u8
rx_mic
[
MIC_KEYLEN
];
44
};
45
46
enum
orinoco_alg
{
47
ORINOCO_ALG_NONE
,
48
ORINOCO_ALG_WEP
,
49
ORINOCO_ALG_TKIP
50
};
51
52
enum
fwtype
{
53
FIRMWARE_TYPE_AGERE
,
54
FIRMWARE_TYPE_INTERSIL
,
55
FIRMWARE_TYPE_SYMBOL
56
};
57
58
struct
firmware
;
59
60
struct
orinoco_private
{
61
void
*
card
;
/* Pointer to card dependent structure */
62
struct
device
*
dev
;
63
int
(*
hard_reset
)(
struct
orinoco_private
*);
64
int
(*
stop_fw
)(
struct
orinoco_private
*,
int
);
65
66
struct
ieee80211_supported_band
band
;
67
struct
ieee80211_channel
channels
[14];
68
u32
cipher_suites
[3];
69
70
/* Synchronisation stuff */
71
spinlock_t
lock
;
72
int
hw_unavailable
;
73
struct
work_struct
reset_work
;
74
75
/* Interrupt tasklets */
76
struct
tasklet_struct
rx_tasklet
;
77
struct
list_head
rx_list
;
78
79
/* driver state */
80
int
open
;
81
u16
last_linkstatus
;
82
struct
work_struct
join_work
;
83
struct
work_struct
wevent_work
;
84
85
/* Net device stuff */
86
struct
net_device
*
ndev
;
87
struct
net_device_stats
stats
;
88
struct
iw_statistics
wstats
;
89
90
/* Hardware control variables */
91
struct
hermes
hw
;
92
u16
txfid
;
93
94
/* Capabilities of the hardware/firmware */
95
enum
fwtype
firmware_type
;
96
int
ibss_port
;
97
int
nicbuf_size
;
98
u16
channel_mask
;
99
100
/* Boolean capabilities */
101
unsigned
int
has_ibss
:1;
102
unsigned
int
has_port3
:1;
103
unsigned
int
has_wep
:1;
104
unsigned
int
has_big_wep
:1;
105
unsigned
int
has_mwo
:1;
106
unsigned
int
has_pm
:1;
107
unsigned
int
has_preamble
:1;
108
unsigned
int
has_sensitivity
:1;
109
unsigned
int
has_hostscan
:1;
110
unsigned
int
has_alt_txcntl
:1;
111
unsigned
int
has_ext_scan
:1;
112
unsigned
int
has_wpa
:1;
113
unsigned
int
do_fw_download
:1;
114
unsigned
int
broken_disableport
:1;
115
unsigned
int
broken_monitor
:1;
116
unsigned
int
prefer_port3
:1;
117
118
/* Configuration paramaters */
119
enum
nl80211_iftype
iw_mode
;
120
enum
orinoco_alg
encode_alg
;
121
u16
wep_restrict
,
tx_key
;
122
struct
key_params
keys
[
ORINOCO_MAX_KEYS
];
123
124
int
bitratemode
;
125
char
nick
[
IW_ESSID_MAX_SIZE
+ 1];
126
char
desired_essid
[
IW_ESSID_MAX_SIZE
+ 1];
127
char
desired_bssid
[
ETH_ALEN
];
128
int
bssid_fixed
;
129
u16
frag_thresh
,
mwo_robust
;
130
u16
channel
;
131
u16
ap_density
,
rts_thresh
;
132
u16
pm_on
,
pm_mcast
,
pm_period
,
pm_timeout
;
133
u16
preamble
;
134
u16
short_retry_limit
,
long_retry_limit
;
135
u16
retry_lifetime
;
136
#ifdef WIRELESS_SPY
137
struct
iw_spy_data
spy_data
;
/* iwspy support */
138
struct
iw_public_data
wireless_data
;
139
#endif
140
141
/* Configuration dependent variables */
142
int
port_type
,
createibss
;
143
int
promiscuous
,
mc_count
;
144
145
/* Scanning support */
146
struct
cfg80211_scan_request
*
scan_request
;
147
struct
work_struct
process_scan
;
148
struct
list_head
scan_list
;
149
spinlock_t
scan_lock
;
/* protects the scan list */
150
151
/* WPA support */
152
u8
*
wpa_ie
;
153
int
wpa_ie_len
;
154
155
struct
crypto_hash
*
rx_tfm_mic
;
156
struct
crypto_hash
*
tx_tfm_mic
;
157
158
unsigned
int
wpa_enabled
:1;
159
unsigned
int
tkip_cm_active
:1;
160
unsigned
int
key_mgmt
:3;
161
162
#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
163
/* Cached in memory firmware to use during ->resume. */
164
const
struct
firmware
*cached_pri_fw;
165
const
struct
firmware
*cached_fw;
166
#endif
167
168
struct
notifier_block
pm_notifier
;
169
};
170
171
#ifdef ORINOCO_DEBUG
172
extern
int
orinoco_debug;
173
#define DEBUG(n, args...) do { \
174
if (orinoco_debug > (n)) \
175
printk(KERN_DEBUG args); \
176
} while (0)
177
#else
178
#define DEBUG(n, args...) do { } while (0)
179
#endif
/* ORINOCO_DEBUG */
180
181
/********************************************************************/
182
/* Exported prototypes */
183
/********************************************************************/
184
185
extern
struct
orinoco_private
*
alloc_orinocodev
(
186
int
sizeof_card,
struct
device
*
device
,
187
int
(*
hard_reset
)(
struct
orinoco_private
*),
188
int
(*
stop_fw
)(
struct
orinoco_private
*,
int
));
189
extern
void
free_orinocodev
(
struct
orinoco_private
*
priv
);
190
extern
int
orinoco_init
(
struct
orinoco_private
*
priv
);
191
extern
int
orinoco_if_add
(
struct
orinoco_private
*
priv
,
192
unsigned
long
base_addr,
193
unsigned
int
irq,
194
const
struct
net_device_ops
*ops);
195
extern
void
orinoco_if_del
(
struct
orinoco_private
*
priv
);
196
extern
int
orinoco_up
(
struct
orinoco_private
*
priv
);
197
extern
void
orinoco_down
(
struct
orinoco_private
*
priv
);
198
extern
irqreturn_t
orinoco_interrupt
(
int
irq,
void
*
dev_id
);
199
200
extern
void
__orinoco_ev_info
(
struct
net_device
*
dev
,
struct
hermes
*
hw
);
201
extern
void
__orinoco_ev_rx
(
struct
net_device
*
dev
,
struct
hermes
*
hw
);
202
203
int
orinoco_process_xmit_skb
(
struct
sk_buff
*
skb
,
204
struct
net_device
*
dev
,
205
struct
orinoco_private
*
priv
,
206
int
*
tx_control
,
207
u8
*
mic
);
208
209
/* Common ndo functions exported for reuse by orinoco_usb */
210
int
orinoco_open
(
struct
net_device
*
dev
);
211
int
orinoco_stop
(
struct
net_device
*
dev
);
212
struct
net_device_stats
*
orinoco_get_stats
(
struct
net_device
*
dev
);
213
void
orinoco_set_multicast_list
(
struct
net_device
*
dev
);
214
int
orinoco_change_mtu
(
struct
net_device
*
dev
,
int
new_mtu);
215
void
orinoco_tx_timeout
(
struct
net_device
*
dev
);
216
217
/********************************************************************/
218
/* Locking and synchronization functions */
219
/********************************************************************/
220
221
static
inline
int
orinoco_lock(
struct
orinoco_private
*
priv
,
222
unsigned
long
*
flags
)
223
{
224
priv->
hw
.ops->lock_irqsave(&priv->
lock
, flags);
225
if
(priv->
hw_unavailable
) {
226
DEBUG
(1,
"orinoco_lock() called with hw_unavailable (dev=%p)\n"
,
227
priv->
ndev
);
228
priv->
hw
.ops->unlock_irqrestore(&priv->
lock
, flags);
229
return
-
EBUSY
;
230
}
231
return
0;
232
}
233
234
static
inline
void
orinoco_unlock(
struct
orinoco_private
*priv,
235
unsigned
long
*flags)
236
{
237
priv->
hw
.ops->unlock_irqrestore(&priv->
lock
, flags);
238
}
239
240
static
inline
void
orinoco_lock_irq(
struct
orinoco_private
*priv)
241
{
242
priv->
hw
.ops->lock_irq(&priv->
lock
);
243
}
244
245
static
inline
void
orinoco_unlock_irq(
struct
orinoco_private
*priv)
246
{
247
priv->
hw
.ops->unlock_irq(&priv->
lock
);
248
}
249
250
/*** Navigate from net_device to orinoco_private ***/
251
static
inline
struct
orinoco_private
*ndev_priv(
struct
net_device
*
dev
)
252
{
253
struct
wireless_dev
*wdev = netdev_priv(dev);
254
return
wdev_priv(wdev);
255
}
256
#endif
/* _ORINOCO_H */
Generated on Thu Jan 10 2013 14:12:22 for Linux Kernel by
1.8.2