Root/drivers/staging/wlan-ng/p80211netdev.h

1/* p80211netdev.h
2*
3* WLAN net device structure and functions
4*
5* Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
6* --------------------------------------------------------------------
7*
8* linux-wlan
9*
10* The contents of this file are subject to the Mozilla Public
11* License Version 1.1 (the "License"); you may not use this file
12* except in compliance with the License. You may obtain a copy of
13* the License at http://www.mozilla.org/MPL/
14*
15* Software distributed under the License is distributed on an "AS
16* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
17* implied. See the License for the specific language governing
18* rights and limitations under the License.
19*
20* Alternatively, the contents of this file may be used under the
21* terms of the GNU Public License version 2 (the "GPL"), in which
22* case the provisions of the GPL are applicable instead of the
23* above. If you wish to allow the use of your version of this file
24* only under the terms of the GPL and not to allow others to use
25* your version of this file under the MPL, indicate your decision
26* by deleting the provisions above and replace them with the notice
27* and other provisions required by the GPL. If you do not delete
28* the provisions above, a recipient may use your version of this
29* file under either the MPL or the GPL.
30*
31* --------------------------------------------------------------------
32*
33* Inquiries regarding the linux-wlan Open Source project can be
34* made directly to:
35*
36* AbsoluteValue Systems Inc.
37* info@linux-wlan.com
38* http://www.linux-wlan.com
39*
40* --------------------------------------------------------------------
41*
42* Portions of the development of this software were funded by
43* Intersil Corporation as part of PRISM(R) chipset product development.
44*
45* --------------------------------------------------------------------
46*
47* This file declares the structure type that represents each wlan
48* interface.
49*
50* --------------------------------------------------------------------
51*/
52
53#ifndef _LINUX_P80211NETDEV_H
54#define _LINUX_P80211NETDEV_H
55
56#include <linux/interrupt.h>
57#include <linux/wireless.h>
58#include <linux/netdevice.h>
59
60#undef netdevice_t
61typedef struct net_device netdevice_t;
62
63#define WLAN_RELEASE "0.3.0-staging"
64
65#define WLAN_DEVICE_CLOSED 0
66#define WLAN_DEVICE_OPEN 1
67
68#define WLAN_MACMODE_NONE 0
69#define WLAN_MACMODE_IBSS_STA 1
70#define WLAN_MACMODE_ESS_STA 2
71#define WLAN_MACMODE_ESS_AP 3
72
73/* MSD States */
74#define WLAN_MSD_HWPRESENT_PENDING 1
75#define WLAN_MSD_HWFAIL 2
76#define WLAN_MSD_HWPRESENT 3
77#define WLAN_MSD_FWLOAD_PENDING 4
78#define WLAN_MSD_FWLOAD 5
79#define WLAN_MSD_RUNNING_PENDING 6
80#define WLAN_MSD_RUNNING 7
81
82#ifndef ETH_P_ECONET
83#define ETH_P_ECONET 0x0018 /* needed for 2.2.x kernels */
84#endif
85
86#define ETH_P_80211_RAW (ETH_P_ECONET + 1)
87
88#ifndef ARPHRD_IEEE80211
89#define ARPHRD_IEEE80211 801 /* kernel 2.4.6 */
90#endif
91
92#ifndef ARPHRD_IEEE80211_PRISM /* kernel 2.4.18 */
93#define ARPHRD_IEEE80211_PRISM 802
94#endif
95
96/*--- NSD Capabilities Flags ------------------------------*/
97#define P80211_NSDCAP_HARDWAREWEP 0x01 /* hardware wep engine */
98#define P80211_NSDCAP_SHORT_PREAMBLE 0x10 /* hardware supports */
99#define P80211_NSDCAP_HWFRAGMENT 0x80 /* nsd handles frag/defrag */
100#define P80211_NSDCAP_AUTOJOIN 0x100 /* nsd does autojoin */
101#define P80211_NSDCAP_NOSCAN 0x200 /* nsd can scan */
102
103/* Received frame statistics */
104typedef struct p80211_frmrx_t {
105    u32 mgmt;
106    u32 assocreq;
107    u32 assocresp;
108    u32 reassocreq;
109    u32 reassocresp;
110    u32 probereq;
111    u32 proberesp;
112    u32 beacon;
113    u32 atim;
114    u32 disassoc;
115    u32 authen;
116    u32 deauthen;
117    u32 mgmt_unknown;
118    u32 ctl;
119    u32 pspoll;
120    u32 rts;
121    u32 cts;
122    u32 ack;
123    u32 cfend;
124    u32 cfendcfack;
125    u32 ctl_unknown;
126    u32 data;
127    u32 dataonly;
128    u32 data_cfack;
129    u32 data_cfpoll;
130    u32 data__cfack_cfpoll;
131    u32 null;
132    u32 cfack;
133    u32 cfpoll;
134    u32 cfack_cfpoll;
135    u32 data_unknown;
136    u32 decrypt;
137    u32 decrypt_err;
138} p80211_frmrx_t;
139
140/* called by /proc/net/wireless */
141struct iw_statistics *p80211wext_get_wireless_stats(netdevice_t * dev);
142/* wireless extensions' ioctls */
143extern struct iw_handler_def p80211wext_handler_def;
144int p80211wext_event_associated(struct wlandevice *wlandev, int assoc);
145
146/* WEP stuff */
147#define NUM_WEPKEYS 4
148#define MAX_KEYLEN 32
149
150#define HOSTWEP_DEFAULTKEY_MASK (BIT(1)|BIT(0))
151#define HOSTWEP_SHAREDKEY BIT(3)
152#define HOSTWEP_DECRYPT BIT(4)
153#define HOSTWEP_ENCRYPT BIT(5)
154#define HOSTWEP_PRIVACYINVOKED BIT(6)
155#define HOSTWEP_EXCLUDEUNENCRYPTED BIT(7)
156
157extern int wlan_watchdog;
158extern int wlan_wext_write;
159
160/* WLAN device type */
161typedef struct wlandevice {
162    struct wlandevice *next; /* link for list of devices */
163    void *priv; /* private data for MSD */
164
165    /* Subsystem State */
166    char name[WLAN_DEVNAMELEN_MAX]; /* Dev name, from register_wlandev() */
167    char *nsdname;
168
169    u32 state; /* Device I/F state (open/closed) */
170    u32 msdstate; /* state of underlying driver */
171    u32 hwremoved; /* Has the hw been yanked out? */
172
173    /* Hardware config */
174    unsigned int irq;
175    unsigned int iobase;
176    unsigned int membase;
177    u32 nsdcaps; /* NSD Capabilities flags */
178
179    /* Config vars */
180    unsigned int ethconv;
181
182    /* device methods (init by MSD, used by p80211 */
183    int (*open) (struct wlandevice *wlandev);
184    int (*close) (struct wlandevice *wlandev);
185    void (*reset) (struct wlandevice *wlandev);
186    int (*txframe) (struct wlandevice *wlandev, struct sk_buff *skb,
187            union p80211_hdr *p80211_hdr,
188            struct p80211_metawep *p80211_wep);
189    int (*mlmerequest) (struct wlandevice *wlandev, struct p80211msg *msg);
190    int (*set_multicast_list) (struct wlandevice *wlandev,
191                   netdevice_t *dev);
192    void (*tx_timeout) (struct wlandevice *wlandev);
193
194    /* 802.11 State */
195    u8 bssid[WLAN_BSSID_LEN];
196    p80211pstr32_t ssid;
197    u32 macmode;
198    int linkstatus;
199
200    /* WEP State */
201    u8 wep_keys[NUM_WEPKEYS][MAX_KEYLEN];
202    u8 wep_keylens[NUM_WEPKEYS];
203    int hostwep;
204
205    /* Request/Confirm i/f state (used by p80211) */
206    unsigned long request_pending; /* flag, access atomically */
207
208    /* netlink socket */
209    /* queue for indications waiting for cmd completion */
210    /* Linux netdevice and support */
211    netdevice_t *netdev; /* ptr to linux netdevice */
212    struct net_device_stats linux_stats;
213
214    /* Rx bottom half */
215    struct tasklet_struct rx_bh;
216
217    struct sk_buff_head nsd_rxq;
218
219    /* 802.11 device statistics */
220    struct p80211_frmrx_t rx;
221
222    struct iw_statistics wstats;
223
224    /* jkriegl: iwspy fields */
225    u8 spy_number;
226    char spy_address[IW_MAX_SPY][ETH_ALEN];
227    struct iw_quality spy_stat[IW_MAX_SPY];
228} wlandevice_t;
229
230/* WEP stuff */
231int wep_change_key(wlandevice_t *wlandev, int keynum, u8 *key, int keylen);
232int wep_decrypt(wlandevice_t *wlandev, u8 *buf, u32 len, int key_override,
233        u8 *iv, u8 *icv);
234int wep_encrypt(wlandevice_t *wlandev, u8 *buf, u8 *dst, u32 len, int keynum,
235        u8 *iv, u8 *icv);
236
237int wlan_setup(wlandevice_t *wlandev, struct device *physdev);
238int wlan_unsetup(wlandevice_t *wlandev);
239int register_wlandev(wlandevice_t *wlandev);
240int unregister_wlandev(wlandevice_t *wlandev);
241void p80211netdev_rx(wlandevice_t *wlandev, struct sk_buff *skb);
242void p80211netdev_hwremoved(wlandevice_t *wlandev);
243#endif
244

Archive Download this file



interactive