GUI: Fix Tomato RAF theme for all builds. Compilation typo.
[tomato.git] / release / src-rt-6.x.4708 / linux / linux-2.6.36 / drivers / staging / rtl8187se / ieee80211 / ieee80211_module.c
blob9d58a429c5658fbd8851cc4b7a9d4d4434f5d63f
1 /*******************************************************************************
3 Copyright(c) 2004 Intel Corporation. All rights reserved.
5 Portions of this file are based on the WEP enablement code provided by the
6 Host AP project hostap-drivers v0.1.3
7 Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen
8 <jkmaline@cc.hut.fi>
9 Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi>
11 This program is free software; you can redistribute it and/or modify it
12 under the terms of version 2 of the GNU General Public License as
13 published by the Free Software Foundation.
15 This program is distributed in the hope that it will be useful, but WITHOUT
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
18 more details.
20 You should have received a copy of the GNU General Public License along with
21 this program; if not, write to the Free Software Foundation, Inc., 59
22 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 The full GNU General Public License is included in this distribution in the
25 file called LICENSE.
27 Contact Information:
28 James P. Ketrenos <ipw2100-admin@linux.intel.com>
29 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
31 *******************************************************************************/
33 #include <linux/compiler.h>
34 //#include <linux/config.h>
35 #include <linux/errno.h>
36 #include <linux/if_arp.h>
37 #include <linux/in6.h>
38 #include <linux/in.h>
39 #include <linux/ip.h>
40 #include <linux/kernel.h>
41 #include <linux/module.h>
42 #include <linux/netdevice.h>
43 #include <linux/pci.h>
44 #include <linux/proc_fs.h>
45 #include <linux/skbuff.h>
46 #include <linux/slab.h>
47 #include <linux/tcp.h>
48 #include <linux/types.h>
49 #include <linux/version.h>
50 #include <linux/wireless.h>
51 #include <linux/etherdevice.h>
52 #include <asm/uaccess.h>
53 #include <net/arp.h>
54 #include <net/net_namespace.h>
56 #include "ieee80211.h"
58 MODULE_DESCRIPTION("802.11 data/management/control stack");
59 MODULE_AUTHOR("Copyright (C) 2004 Intel Corporation <jketreno@linux.intel.com>");
60 MODULE_LICENSE("GPL");
62 #define DRV_NAME "ieee80211"
64 static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee)
66 if (ieee->networks)
67 return 0;
69 ieee->networks = kcalloc(
70 MAX_NETWORK_COUNT, sizeof(struct ieee80211_network),
71 GFP_KERNEL);
72 if (!ieee->networks) {
73 printk(KERN_WARNING "%s: Out of memory allocating beacons\n",
74 ieee->dev->name);
75 return -ENOMEM;
78 return 0;
81 static inline void ieee80211_networks_free(struct ieee80211_device *ieee)
83 if (!ieee->networks)
84 return;
85 kfree(ieee->networks);
86 ieee->networks = NULL;
89 static inline void ieee80211_networks_initialize(struct ieee80211_device *ieee)
91 int i;
93 INIT_LIST_HEAD(&ieee->network_free_list);
94 INIT_LIST_HEAD(&ieee->network_list);
95 for (i = 0; i < MAX_NETWORK_COUNT; i++)
96 list_add_tail(&ieee->networks[i].list, &ieee->network_free_list);
100 struct net_device *alloc_ieee80211(int sizeof_priv)
102 struct ieee80211_device *ieee;
103 struct net_device *dev;
104 int i,err;
106 IEEE80211_DEBUG_INFO("Initializing...\n");
108 dev = alloc_etherdev(sizeof(struct ieee80211_device) + sizeof_priv);
109 if (!dev) {
110 IEEE80211_ERROR("Unable to network device.\n");
111 goto failed;
113 ieee = netdev_priv(dev);
115 ieee->dev = dev;
117 err = ieee80211_networks_allocate(ieee);
118 if (err) {
119 IEEE80211_ERROR("Unable to allocate beacon storage: %d\n",
120 err);
121 goto failed;
123 ieee80211_networks_initialize(ieee);
125 /* Default fragmentation threshold is maximum payload size */
126 ieee->fts = DEFAULT_FTS;
127 ieee->scan_age = DEFAULT_MAX_SCAN_AGE;
128 ieee->open_wep = 1;
130 /* Default to enabling full open WEP with host based encrypt/decrypt */
131 ieee->host_encrypt = 1;
132 ieee->host_decrypt = 1;
133 ieee->ieee802_1x = 1; /* Default to supporting 802.1x */
135 INIT_LIST_HEAD(&ieee->crypt_deinit_list);
136 init_timer(&ieee->crypt_deinit_timer);
137 ieee->crypt_deinit_timer.data = (unsigned long)ieee;
138 ieee->crypt_deinit_timer.function = ieee80211_crypt_deinit_handler;
140 spin_lock_init(&ieee->lock);
141 spin_lock_init(&ieee->wpax_suitlist_lock);
143 ieee->wpax_type_set = 0;
144 ieee->wpa_enabled = 0;
145 ieee->tkip_countermeasures = 0;
146 ieee->drop_unencrypted = 0;
147 ieee->privacy_invoked = 0;
148 ieee->ieee802_1x = 1;
149 ieee->raw_tx = 0;
151 ieee80211_softmac_init(ieee);
153 for (i = 0; i < IEEE_IBSS_MAC_HASH_SIZE; i++)
154 INIT_LIST_HEAD(&ieee->ibss_mac_hash[i]);
156 for (i = 0; i < 17; i++) {
157 ieee->last_rxseq_num[i] = -1;
158 ieee->last_rxfrag_num[i] = -1;
159 ieee->last_packet_time[i] = 0;
161 //These function were added to load crypte module autoly
162 ieee80211_tkip_null();
163 ieee80211_wep_null();
164 ieee80211_ccmp_null();
165 return dev;
167 failed:
168 if (dev)
169 free_netdev(dev);
170 return NULL;
174 void free_ieee80211(struct net_device *dev)
176 struct ieee80211_device *ieee = netdev_priv(dev);
178 int i;
179 struct list_head *p, *q;
182 ieee80211_softmac_free(ieee);
183 del_timer_sync(&ieee->crypt_deinit_timer);
184 ieee80211_crypt_deinit_entries(ieee, 1);
186 for (i = 0; i < WEP_KEYS; i++) {
187 struct ieee80211_crypt_data *crypt = ieee->crypt[i];
188 if (crypt) {
189 if (crypt->ops)
190 crypt->ops->deinit(crypt->priv);
191 kfree(crypt);
192 ieee->crypt[i] = NULL;
196 ieee80211_networks_free(ieee);
198 for (i = 0; i < IEEE_IBSS_MAC_HASH_SIZE; i++) {
199 list_for_each_safe(p, q, &ieee->ibss_mac_hash[i]) {
200 kfree(list_entry(p, struct ieee_ibss_seq, list));
201 list_del(p);
206 free_netdev(dev);