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
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
20 The full GNU General Public License is included in this distribution in the
24 James P. Ketrenos <ipw2100-admin@linux.intel.com>
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27 *******************************************************************************/
29 #include <linux/compiler.h>
30 #include <linux/errno.h>
31 #include <linux/if_arp.h>
32 #include <linux/in6.h>
35 #include <linux/kernel.h>
36 #include <linux/module.h>
37 #include <linux/netdevice.h>
38 #include <linux/pci.h>
39 #include <linux/proc_fs.h>
40 #include <linux/skbuff.h>
41 #include <linux/slab.h>
42 #include <linux/tcp.h>
43 #include <linux/types.h>
44 #include <linux/wireless.h>
45 #include <linux/etherdevice.h>
46 #include <linux/uaccess.h>
52 u32 rt_global_debug_component = COMP_ERR;
53 EXPORT_SYMBOL(rt_global_debug_component);
57 static inline int rtllib_networks_allocate(struct rtllib_device *ieee)
62 ieee->networks = kzalloc(
63 MAX_NETWORK_COUNT * sizeof(struct rtllib_network),
71 static inline void rtllib_networks_free(struct rtllib_device *ieee)
75 kfree(ieee->networks);
76 ieee->networks = NULL;
79 static inline void rtllib_networks_initialize(struct rtllib_device *ieee)
83 INIT_LIST_HEAD(&ieee->network_free_list);
84 INIT_LIST_HEAD(&ieee->network_list);
85 for (i = 0; i < MAX_NETWORK_COUNT; i++)
86 list_add_tail(&ieee->networks[i].list,
87 &ieee->network_free_list);
90 struct net_device *alloc_rtllib(int sizeof_priv)
92 struct rtllib_device *ieee = NULL;
93 struct net_device *dev;
96 pr_debug("rtllib: Initializing...\n");
98 dev = alloc_etherdev(sizeof(struct rtllib_device) + sizeof_priv);
100 pr_err("Unable to allocate net_device.\n");
103 ieee = (struct rtllib_device *)netdev_priv_rsl(dev);
104 memset(ieee, 0, sizeof(struct rtllib_device)+sizeof_priv);
107 err = rtllib_networks_allocate(ieee);
109 pr_err("Unable to allocate beacon storage: %d\n", err);
112 rtllib_networks_initialize(ieee);
115 /* Default fragmentation threshold is maximum payload size */
116 ieee->fts = DEFAULT_FTS;
117 ieee->scan_age = DEFAULT_MAX_SCAN_AGE;
120 /* Default to enabling full open WEP with host based encrypt/decrypt */
121 ieee->host_encrypt = 1;
122 ieee->host_decrypt = 1;
123 ieee->ieee802_1x = 1; /* Default to supporting 802.1x */
125 ieee->rtllib_ap_sec_type = rtllib_ap_sec_type;
127 spin_lock_init(&ieee->lock);
128 spin_lock_init(&ieee->wpax_suitlist_lock);
129 spin_lock_init(&ieee->reorder_spinlock);
130 atomic_set(&(ieee->atm_swbw), 0);
133 lib80211_crypt_info_init(&ieee->crypt_info, "RTLLIB", &ieee->lock);
135 ieee->wpa_enabled = 0;
136 ieee->tkip_countermeasures = 0;
137 ieee->drop_unencrypted = 0;
138 ieee->privacy_invoked = 0;
139 ieee->ieee802_1x = 1;
141 ieee->hwsec_active = 0;
143 memset(ieee->swcamtable, 0, sizeof(struct sw_cam_table) * 32);
144 rtllib_softmac_init(ieee);
146 ieee->pHTInfo = kzalloc(sizeof(struct rt_hi_throughput), GFP_KERNEL);
147 if (ieee->pHTInfo == NULL)
150 HTUpdateDefaultSetting(ieee);
151 HTInitializeHTInfo(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;
168 EXPORT_SYMBOL(alloc_rtllib);
170 void free_rtllib(struct net_device *dev)
172 struct rtllib_device *ieee = (struct rtllib_device *)
173 netdev_priv_rsl(dev);
175 kfree(ieee->pHTInfo);
176 ieee->pHTInfo = NULL;
177 rtllib_softmac_free(ieee);
179 lib80211_crypt_info_free(&ieee->crypt_info);
181 rtllib_networks_free(ieee);
184 EXPORT_SYMBOL(free_rtllib);
186 static int __init rtllib_init(void)
191 static void __exit rtllib_exit(void)
195 module_init(rtllib_init);
196 module_exit(rtllib_exit);
198 MODULE_LICENSE("GPL");