]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/staging/rtl8192e/rtllib_module.c
Merge branch 'overlayfs-af_unix-fix' into overlayfs-linus
[mirror_ubuntu-bionic-kernel.git] / drivers / staging / rtl8192e / rtllib_module.c
CommitLineData
94a79942
LF
1/*******************************************************************************
2
3 Copyright(c) 2004 Intel Corporation. All rights reserved.
4
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>
10
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.
14
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.
19
94a79942
LF
20 The full GNU General Public License is included in this distribution in the
21 file called LICENSE.
22
23 Contact Information:
24 James P. Ketrenos <ipw2100-admin@linux.intel.com>
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26
27*******************************************************************************/
28
29#include <linux/compiler.h>
30#include <linux/errno.h>
31#include <linux/if_arp.h>
32#include <linux/in6.h>
33#include <linux/in.h>
34#include <linux/ip.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>
94a79942
LF
44#include <linux/wireless.h>
45#include <linux/etherdevice.h>
8567829a 46#include <linux/uaccess.h>
94a79942 47#include <net/arp.h>
94a79942
LF
48#include "rtllib.h"
49
d37e0208
SM
50u32 rt_global_debug_component = COMP_ERR;
51EXPORT_SYMBOL(rt_global_debug_component);
52
94a79942
LF
53static inline int rtllib_networks_allocate(struct rtllib_device *ieee)
54{
55 if (ieee->networks)
56 return 0;
57
749f3c05
SB
58 ieee->networks = kcalloc(MAX_NETWORK_COUNT,
59 sizeof(struct rtllib_network), GFP_KERNEL);
b6b0012c 60 if (!ieee->networks)
94a79942 61 return -ENOMEM;
94a79942 62
94a79942
LF
63 return 0;
64}
65
66static inline void rtllib_networks_free(struct rtllib_device *ieee)
67{
68 if (!ieee->networks)
69 return;
94a79942 70 kfree(ieee->networks);
94a79942
LF
71 ieee->networks = NULL;
72}
73
74static inline void rtllib_networks_initialize(struct rtllib_device *ieee)
75{
76 int i;
77
78 INIT_LIST_HEAD(&ieee->network_free_list);
79 INIT_LIST_HEAD(&ieee->network_list);
80 for (i = 0; i < MAX_NETWORK_COUNT; i++)
8567829a
LF
81 list_add_tail(&ieee->networks[i].list,
82 &ieee->network_free_list);
94a79942
LF
83}
84
94a79942
LF
85struct net_device *alloc_rtllib(int sizeof_priv)
86{
87 struct rtllib_device *ieee = NULL;
88 struct net_device *dev;
8567829a 89 int i, err;
94a79942 90
def16d2e 91 pr_debug("rtllib: Initializing...\n");
94a79942
LF
92
93 dev = alloc_etherdev(sizeof(struct rtllib_device) + sizeof_priv);
94 if (!dev) {
f0dddb1d 95 pr_err("Unable to allocate net_device.\n");
49d74d70 96 return NULL;
94a79942
LF
97 }
98 ieee = (struct rtllib_device *)netdev_priv_rsl(dev);
99 memset(ieee, 0, sizeof(struct rtllib_device)+sizeof_priv);
100 ieee->dev = dev;
101
94a79942
LF
102 err = rtllib_networks_allocate(ieee);
103 if (err) {
f0dddb1d 104 pr_err("Unable to allocate beacon storage: %d\n", err);
94a79942
LF
105 goto failed;
106 }
107 rtllib_networks_initialize(ieee);
108
94a79942
LF
109 /* Default fragmentation threshold is maximum payload size */
110 ieee->fts = DEFAULT_FTS;
111 ieee->scan_age = DEFAULT_MAX_SCAN_AGE;
112 ieee->open_wep = 1;
113
114 /* Default to enabling full open WEP with host based encrypt/decrypt */
115 ieee->host_encrypt = 1;
116 ieee->host_decrypt = 1;
117 ieee->ieee802_1x = 1; /* Default to supporting 802.1x */
118
94a79942
LF
119 ieee->rtllib_ap_sec_type = rtllib_ap_sec_type;
120
121 spin_lock_init(&ieee->lock);
122 spin_lock_init(&ieee->wpax_suitlist_lock);
94a79942 123 spin_lock_init(&ieee->reorder_spinlock);
94a79942
LF
124 atomic_set(&(ieee->atm_swbw), 0);
125
3b148be0
SM
126 /* SAM FIXME */
127 lib80211_crypt_info_init(&ieee->crypt_info, "RTLLIB", &ieee->lock);
128
94a79942
LF
129 ieee->wpa_enabled = 0;
130 ieee->tkip_countermeasures = 0;
131 ieee->drop_unencrypted = 0;
132 ieee->privacy_invoked = 0;
133 ieee->ieee802_1x = 1;
134 ieee->raw_tx = 0;
135 ieee->hwsec_active = 0;
136
8567829a 137 memset(ieee->swcamtable, 0, sizeof(struct sw_cam_table) * 32);
94a79942
LF
138 rtllib_softmac_init(ieee);
139
8567829a 140 ieee->pHTInfo = kzalloc(sizeof(struct rt_hi_throughput), GFP_KERNEL);
b6b0012c 141 if (ieee->pHTInfo == NULL)
94a79942 142 return NULL;
b6b0012c 143
94a79942
LF
144 HTUpdateDefaultSetting(ieee);
145 HTInitializeHTInfo(ieee);
146 TSInitialize(ieee);
147 for (i = 0; i < IEEE_IBSS_MAC_HASH_SIZE; i++)
148 INIT_LIST_HEAD(&ieee->ibss_mac_hash[i]);
149
150 for (i = 0; i < 17; i++) {
151 ieee->last_rxseq_num[i] = -1;
152 ieee->last_rxfrag_num[i] = -1;
153 ieee->last_packet_time[i] = 0;
154 }
155
94a79942
LF
156 return dev;
157
158 failed:
49d74d70 159 free_netdev(dev);
94a79942
LF
160 return NULL;
161}
3b28499c 162EXPORT_SYMBOL(alloc_rtllib);
94a79942 163
94a79942
LF
164void free_rtllib(struct net_device *dev)
165{
8567829a
LF
166 struct rtllib_device *ieee = (struct rtllib_device *)
167 netdev_priv_rsl(dev);
d7613e53
LF
168
169 kfree(ieee->pHTInfo);
170 ieee->pHTInfo = NULL;
94a79942 171 rtllib_softmac_free(ieee);
0ddcf5fd 172
3b148be0 173 lib80211_crypt_info_free(&ieee->crypt_info);
94a79942
LF
174
175 rtllib_networks_free(ieee);
94a79942
LF
176 free_netdev(dev);
177}
3b28499c 178EXPORT_SYMBOL(free_rtllib);
94a79942 179
cf8ab8cf 180static int __init rtllib_init(void)
94a79942 181{
94a79942
LF
182 return 0;
183}
184
cf8ab8cf 185static void __exit rtllib_exit(void)
94a79942 186{
94a79942 187}
d37e0208
SM
188
189module_init(rtllib_init);
190module_exit(rtllib_exit);
191
192MODULE_LICENSE("GPL");