Staging: rtl8192su: make private ieee80211 stack really private
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Mon, 13 Jul 2009 18:13:49 +0000 (20:13 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Sep 2009 19:01:42 +0000 (12:01 -0700)
* rename ieee80211_{init,exit}() to ieee80211_debug_{init,exit}()
* make private ieee80211 stack really private
* cleanup Makefile
* remove superfluous ieee80211_* defines
* remove superfluous EXPORT_SYMBOLs

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
17 files changed:
drivers/staging/rtl8192su/Makefile
drivers/staging/rtl8192su/TODO
drivers/staging/rtl8192su/ieee80211/dot11d.c
drivers/staging/rtl8192su/ieee80211/ieee80211.h
drivers/staging/rtl8192su/ieee80211/ieee80211_crypt.c
drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_ccmp.c
drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_tkip.c
drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_wep.c
drivers/staging/rtl8192su/ieee80211/ieee80211_module.c
drivers/staging/rtl8192su/ieee80211/ieee80211_rx.c
drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c
drivers/staging/rtl8192su/ieee80211/ieee80211_softmac_wx.c
drivers/staging/rtl8192su/ieee80211/ieee80211_tx.c
drivers/staging/rtl8192su/ieee80211/ieee80211_wx.c
drivers/staging/rtl8192su/ieee80211/rtl819x_HTProc.c
drivers/staging/rtl8192su/ieee80211/rtl819x_TSProc.c
drivers/staging/rtl8192su/r8192U_core.c

index aa9f80664dea91824c896ca886135fbe643ea65c..52dc09baf4f83ad1d7209c28b9fae53fb5b43948 100644 (file)
@@ -21,9 +21,11 @@ r8192s_usb-objs :=           \
        r8192S_firmware.o       \
        r8192S_Efuse.o          \
        r8192U_core.o           \
-       r8192U_pm.o
-
-ieee80211-rsl-objs :=                  \
+       r8192U_pm.o             \
+       ieee80211/ieee80211_crypt.o             \
+       ieee80211/ieee80211_crypt_tkip.o        \
+       ieee80211/ieee80211_crypt_ccmp.o        \
+       ieee80211/ieee80211_crypt_wep.o         \
        ieee80211/ieee80211_rx.o        \
        ieee80211/ieee80211_softmac.o   \
        ieee80211/ieee80211_tx.o        \
@@ -36,10 +38,3 @@ ieee80211-rsl-objs :=                        \
        ieee80211/dot11d.o
 
 obj-$(CONFIG_RTL8192SU) += r8192s_usb.o
-obj-$(CONFIG_RTL8192SU) += ieee80211-rsl.o
-obj-$(CONFIG_RTL8192SU) += ieee80211/ieee80211_crypt.o
-obj-$(CONFIG_RTL8192SU) += ieee80211/ieee80211_crypt_tkip.o
-obj-$(CONFIG_RTL8192SU) += ieee80211/ieee80211_crypt_ccmp.o
-obj-$(CONFIG_RTL8192SU) += ieee80211/ieee80211_crypt_wep.o
-
-
index 0d0ffce545df760d3892cabd7d5a6371edf9ebc5..0b89c9dd5f26de30c0619d6e1d98b99238b449de 100644 (file)
@@ -1,10 +1,8 @@
 TODO:
-- make ieee80211 stack private (may conflict with libipw currently)
 - prepare private ieee80211 stack for merge with rtl8187se's version:
   - remove JOHN_DUMP[_DESC] ifdefs
   - remove [IN]_OPENSUSE_SLED definitions
   - remove superflous container_of definition from ieee80211.h
-  - remove superfluous ieee80211_* definitions from ieee80211.h
   - remove rtl8192su's specific dead code
   - cleanup ieee80211.h
   - move rtl8192su's specific code out from ieee80211.h
index 757266a152b80f1496be77a09d69b92634779495..22484621478084a6386ca6646f3502d0706f247f 100644 (file)
@@ -214,12 +214,3 @@ int ToLegalChannel(
 
        return default_chn;
 }
-
-EXPORT_SYMBOL(Dot11d_Init);
-EXPORT_SYMBOL(Dot11d_Reset);
-EXPORT_SYMBOL(Dot11d_UpdateCountryIe);
-EXPORT_SYMBOL(DOT11D_GetMaxTxPwrInDbm);
-EXPORT_SYMBOL(DOT11D_ScanComplete);
-EXPORT_SYMBOL(IsLegalChannel);
-EXPORT_SYMBOL(ToLegalChannel);
-
index 596498a2575ad985460447e93ea53ac97591aa01..03862d302ce4f13a608261ee249fc2be4d3ee728 100644 (file)
@@ -265,78 +265,6 @@ typedef struct cb_desc {
 
 #define MAX_IE_LEN  0xff
 
-// added for kernel conflict
-#define ieee80211_crypt_deinit_entries         ieee80211_crypt_deinit_entries_rsl
-#define ieee80211_crypt_deinit_handler         ieee80211_crypt_deinit_handler_rsl
-#define ieee80211_crypt_delayed_deinit         ieee80211_crypt_delayed_deinit_rsl
-#define ieee80211_register_crypto_ops          ieee80211_register_crypto_ops_rsl
-#define ieee80211_unregister_crypto_ops ieee80211_unregister_crypto_ops_rsl
-#define ieee80211_get_crypto_ops       ieee80211_get_crypto_ops_rsl
-
-#define ieee80211_ccmp_null            ieee80211_ccmp_null_rsl
-
-#define ieee80211_tkip_null            ieee80211_tkip_null_rsl
-
-#define ieee80211_wep_null             ieee80211_wep_null_rsl
-
-#define free_ieee80211                 free_ieee80211_rsl
-#define alloc_ieee80211                        alloc_ieee80211_rsl
-
-#define ieee80211_rx                   ieee80211_rx_rsl
-#define ieee80211_rx_mgt               ieee80211_rx_mgt_rsl
-
-#define ieee80211_get_beacon           ieee80211_get_beacon_rsl
-#define ieee80211_wake_queue           ieee80211_wake_queue_rsl
-#define ieee80211_stop_queue           ieee80211_stop_queue_rsl
-#define ieee80211_reset_queue          ieee80211_reset_queue_rsl
-#define ieee80211_softmac_stop_protocol        ieee80211_softmac_stop_protocol_rsl
-#define ieee80211_softmac_start_protocol ieee80211_softmac_start_protocol_rsl
-#define ieee80211_is_shortslot         ieee80211_is_shortslot_rsl
-#define ieee80211_is_54g               ieee80211_is_54g_rsl
-#define ieee80211_wpa_supplicant_ioctl ieee80211_wpa_supplicant_ioctl_rsl
-#define ieee80211_ps_tx_ack            ieee80211_ps_tx_ack_rsl
-#define ieee80211_softmac_xmit         ieee80211_softmac_xmit_rsl
-#define ieee80211_stop_send_beacons    ieee80211_stop_send_beacons_rsl
-#define notify_wx_assoc_event          notify_wx_assoc_event_rsl
-#define SendDisassociation             SendDisassociation_rsl
-#define ieee80211_disassociate         ieee80211_disassociate_rsl
-#define ieee80211_start_send_beacons   ieee80211_start_send_beacons_rsl
-#define ieee80211_stop_scan            ieee80211_stop_scan_rsl
-#define ieee80211_send_probe_requests  ieee80211_send_probe_requests_rsl
-#define ieee80211_softmac_scan_syncro  ieee80211_softmac_scan_syncro_rsl
-#define ieee80211_start_scan_syncro    ieee80211_start_scan_syncro_rsl
-
-#define ieee80211_wx_get_essid         ieee80211_wx_get_essid_rsl
-#define ieee80211_wx_set_essid         ieee80211_wx_set_essid_rsl
-#define ieee80211_wx_set_rate          ieee80211_wx_set_rate_rsl
-#define ieee80211_wx_get_rate          ieee80211_wx_get_rate_rsl
-#define ieee80211_wx_set_wap           ieee80211_wx_set_wap_rsl
-#define ieee80211_wx_get_wap           ieee80211_wx_get_wap_rsl
-#define ieee80211_wx_set_mode          ieee80211_wx_set_mode_rsl
-#define ieee80211_wx_get_mode          ieee80211_wx_get_mode_rsl
-#define ieee80211_wx_set_scan          ieee80211_wx_set_scan_rsl
-#define ieee80211_wx_get_freq          ieee80211_wx_get_freq_rsl
-#define ieee80211_wx_set_freq          ieee80211_wx_set_freq_rsl
-#define ieee80211_wx_set_rawtx         ieee80211_wx_set_rawtx_rsl
-#define ieee80211_wx_get_name          ieee80211_wx_get_name_rsl
-#define ieee80211_wx_set_power         ieee80211_wx_set_power_rsl
-#define ieee80211_wx_get_power         ieee80211_wx_get_power_rsl
-#define ieee80211_wlan_frequencies     ieee80211_wlan_frequencies_rsl
-#define ieee80211_wx_set_rts           ieee80211_wx_set_rts_rsl
-#define ieee80211_wx_get_rts           ieee80211_wx_get_rts_rsl
-
-#define ieee80211_txb_free             ieee80211_txb_free_rsl
-
-#define ieee80211_wx_set_gen_ie                ieee80211_wx_set_gen_ie_rsl
-#define ieee80211_wx_get_scan          ieee80211_wx_get_scan_rsl
-#define ieee80211_wx_set_encode                ieee80211_wx_set_encode_rsl
-#define ieee80211_wx_get_encode                ieee80211_wx_get_encode_rsl
-
-#define ieee80211_wx_set_mlme          ieee80211_wx_set_mlme_rsl
-#define ieee80211_wx_set_auth          ieee80211_wx_set_auth_rsl
-#define ieee80211_wx_set_encode_ext    ieee80211_wx_set_encode_ext_rsl
-#define ieee80211_wx_get_encode_ext    ieee80211_wx_get_encode_ext_rsl
-
 typedef struct ieee_param {
        u32 cmd;
        u8 sta_addr[ETH_ALEN];
index 14ffd76e0d76f7408b22338bbabbbeefee05c1c5..d76a54d59d2ffce04a8d2f1978e83e058a56f573 100644 (file)
@@ -204,8 +204,7 @@ static struct ieee80211_crypto_ops ieee80211_crypt_null = {
        .owner                  = THIS_MODULE,
 };
 
-
-static int __init ieee80211_crypto_init(void)
+int __init ieee80211_crypto_init(void)
 {
        int ret = -ENOMEM;
 
@@ -226,8 +225,7 @@ out:
        return ret;
 }
 
-
-static void __exit ieee80211_crypto_deinit(void)
+void __exit ieee80211_crypto_deinit(void)
 {
        struct list_head *ptr, *n;
 
@@ -246,14 +244,3 @@ static void __exit ieee80211_crypto_deinit(void)
 
        kfree(hcrypt);
 }
-
-EXPORT_SYMBOL(ieee80211_crypt_deinit_entries);
-EXPORT_SYMBOL(ieee80211_crypt_deinit_handler);
-EXPORT_SYMBOL(ieee80211_crypt_delayed_deinit);
-
-EXPORT_SYMBOL(ieee80211_register_crypto_ops);
-EXPORT_SYMBOL(ieee80211_unregister_crypto_ops);
-EXPORT_SYMBOL(ieee80211_get_crypto_ops);
-
-module_init(ieee80211_crypto_init);
-module_exit(ieee80211_crypto_deinit);
index e9225fef427cc5fdf2c38429e39b9aa6152d24c3..10922a916e3c235fd588a56b051915e8f23e8e78 100644 (file)
@@ -473,19 +473,12 @@ static struct ieee80211_crypto_ops ieee80211_crypt_ccmp = {
        .owner                  = THIS_MODULE,
 };
 
-
-static int __init ieee80211_crypto_ccmp_init(void)
+int __init ieee80211_crypto_ccmp_init(void)
 {
        return ieee80211_register_crypto_ops(&ieee80211_crypt_ccmp);
 }
 
-
-static void __exit ieee80211_crypto_ccmp_exit(void)
+void __exit ieee80211_crypto_ccmp_exit(void)
 {
        ieee80211_unregister_crypto_ops(&ieee80211_crypt_ccmp);
 }
-
-EXPORT_SYMBOL(ieee80211_ccmp_null);
-
-module_init(ieee80211_crypto_ccmp_init);
-module_exit(ieee80211_crypto_ccmp_exit);
index 7e497b4927ce02afc0cd243d1e75f01d0946cb68..174af0c7ab94f49e711b42888a5fa4c3ac76f227 100644 (file)
@@ -779,14 +779,12 @@ static struct ieee80211_crypto_ops ieee80211_crypt_tkip = {
        .owner                  = THIS_MODULE,
 };
 
-
-static int __init ieee80211_crypto_tkip_init(void)
+int __init ieee80211_crypto_tkip_init(void)
 {
        return ieee80211_register_crypto_ops(&ieee80211_crypt_tkip);
 }
 
-
-static void __exit ieee80211_crypto_tkip_exit(void)
+void __exit ieee80211_crypto_tkip_exit(void)
 {
        ieee80211_unregister_crypto_ops(&ieee80211_crypt_tkip);
 }
@@ -796,7 +794,3 @@ void ieee80211_tkip_null(void)
 //    printk("============>%s()\n", __FUNCTION__);
         return;
 }
-EXPORT_SYMBOL(ieee80211_tkip_null);
-
-module_init(ieee80211_crypto_tkip_init);
-module_exit(ieee80211_crypto_tkip_exit);
index df07212bd1723734c2317f6dbc245dd1e127612f..d6396c0f5bae68ee6b9056ccf2734beb631f4615 100644 (file)
@@ -283,14 +283,12 @@ static struct ieee80211_crypto_ops ieee80211_crypt_wep = {
        .owner                  = THIS_MODULE,
 };
 
-
-static int __init ieee80211_crypto_wep_init(void)
+int __init ieee80211_crypto_wep_init(void)
 {
        return ieee80211_register_crypto_ops(&ieee80211_crypt_wep);
 }
 
-
-static void __exit ieee80211_crypto_wep_exit(void)
+void __exit ieee80211_crypto_wep_exit(void)
 {
        ieee80211_unregister_crypto_ops(&ieee80211_crypt_wep);
 }
@@ -300,7 +298,3 @@ void ieee80211_wep_null(void)
 //     printk("============>%s()\n", __FUNCTION__);
         return;
 }
-EXPORT_SYMBOL(ieee80211_wep_null);
-
-module_init(ieee80211_crypto_wep_init);
-module_exit(ieee80211_crypto_wep_exit);
index 7c18b8a0569a586f026c87356a06daf745e2e927..510e71e6bfe01494afdf883729812283efae5cf1 100644 (file)
@@ -287,7 +287,7 @@ static int store_debug_level(struct file *file, const char *buffer,
        return strnlen(buf, count);
 }
 
-static int __init ieee80211_init(void)
+int __init ieee80211_debug_init(void)
 {
        struct proc_dir_entry *e;
 
@@ -313,7 +313,7 @@ static int __init ieee80211_init(void)
        return 0;
 }
 
-static void __exit ieee80211_exit(void)
+void __exit ieee80211_debug_exit(void)
 {
        if (ieee80211_proc) {
                remove_proc_entry("debug_level", ieee80211_proc);
@@ -325,11 +325,4 @@ static void __exit ieee80211_exit(void)
 #include <linux/moduleparam.h>
 module_param(debug, int, 0444);
 MODULE_PARM_DESC(debug, "debug output mask");
-
-
-module_exit(ieee80211_exit);
-module_init(ieee80211_init);
 #endif
-
-EXPORT_SYMBOL(alloc_ieee80211);
-EXPORT_SYMBOL(free_ieee80211);
index f63bb49a84e44f167c8de13b4f99812107f5a2e8..e1784f9603ed4722cfa3fc236896dd9b821b54f6 100644 (file)
@@ -2703,6 +2703,3 @@ void ieee80211_rx_mgt(struct ieee80211_device *ieee,
 
        }
 }
-
-EXPORT_SYMBOL(ieee80211_rx_mgt);
-EXPORT_SYMBOL(ieee80211_rx);
index c724968dba4485c77331aad5d358aec89d6b827b..c64ae03f68a085ab9712d40b921282f58292ddc0 100644 (file)
@@ -3240,25 +3240,3 @@ void notify_wx_assoc_event(struct ieee80211_device *ieee)
                memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN);
        wireless_send_event(ieee->dev, SIOCGIWAP, &wrqu, NULL);
 }
-
-EXPORT_SYMBOL(ieee80211_get_beacon);
-EXPORT_SYMBOL(ieee80211_wake_queue);
-EXPORT_SYMBOL(ieee80211_stop_queue);
-EXPORT_SYMBOL(ieee80211_reset_queue);
-EXPORT_SYMBOL(ieee80211_softmac_stop_protocol);
-EXPORT_SYMBOL(ieee80211_softmac_start_protocol);
-EXPORT_SYMBOL(ieee80211_is_shortslot);
-EXPORT_SYMBOL(ieee80211_is_54g);
-EXPORT_SYMBOL(ieee80211_wpa_supplicant_ioctl);
-EXPORT_SYMBOL(ieee80211_ps_tx_ack);
-EXPORT_SYMBOL(ieee80211_softmac_xmit);
-EXPORT_SYMBOL(ieee80211_stop_send_beacons);
-EXPORT_SYMBOL(notify_wx_assoc_event);
-EXPORT_SYMBOL(SendDisassociation);
-EXPORT_SYMBOL(ieee80211_disassociate);
-EXPORT_SYMBOL(ieee80211_start_send_beacons);
-EXPORT_SYMBOL(ieee80211_stop_scan);
-EXPORT_SYMBOL(ieee80211_send_probe_requests);
-EXPORT_SYMBOL(ieee80211_softmac_scan_syncro);
-EXPORT_SYMBOL(ieee80211_start_scan_syncro);
-//EXPORT_SYMBOL(ieee80211_sta_ps_send_null_frame);
index dfb61ef656f0d24319db0a02c759a50d394a15db..9ded253e1f9a7700bdf88d7076bcb19ec861f633 100644 (file)
@@ -623,22 +623,3 @@ exit:
        return ret;
 
 }
-
-EXPORT_SYMBOL(ieee80211_wx_get_essid);
-EXPORT_SYMBOL(ieee80211_wx_set_essid);
-EXPORT_SYMBOL(ieee80211_wx_set_rate);
-EXPORT_SYMBOL(ieee80211_wx_get_rate);
-EXPORT_SYMBOL(ieee80211_wx_set_wap);
-EXPORT_SYMBOL(ieee80211_wx_get_wap);
-EXPORT_SYMBOL(ieee80211_wx_set_mode);
-EXPORT_SYMBOL(ieee80211_wx_get_mode);
-EXPORT_SYMBOL(ieee80211_wx_set_scan);
-EXPORT_SYMBOL(ieee80211_wx_get_freq);
-EXPORT_SYMBOL(ieee80211_wx_set_freq);
-EXPORT_SYMBOL(ieee80211_wx_set_rawtx);
-EXPORT_SYMBOL(ieee80211_wx_get_name);
-EXPORT_SYMBOL(ieee80211_wx_set_power);
-EXPORT_SYMBOL(ieee80211_wx_get_power);
-EXPORT_SYMBOL(ieee80211_wlan_frequencies);
-EXPORT_SYMBOL(ieee80211_wx_set_rts);
-EXPORT_SYMBOL(ieee80211_wx_get_rts);
index e6e4c0af7fd83dc6f04dbefd9e6eb23d72441d0f..b942e30cc1811726a26d06b927457f02a997aa6f 100644 (file)
@@ -927,6 +927,3 @@ int rtl8192_ieee80211_xmit(struct sk_buff *skb, struct net_device *dev)
        return 1;
 
 }
-EXPORT_SYMBOL(rtl8192_ieee80211_xmit);
-
-EXPORT_SYMBOL(ieee80211_txb_free);
index 5c37964552f3fd538c1a81a4ddf98caa9addf564..47dc210144759f9e87780f227d56ee1173d3a7ed 100644 (file)
@@ -851,12 +851,3 @@ int ieee80211_wx_set_gen_ie(struct ieee80211_device *ieee, u8 *ie, size_t len)
 
 }
 #endif
-
-EXPORT_SYMBOL(ieee80211_wx_set_gen_ie);
-EXPORT_SYMBOL(ieee80211_wx_set_mlme);
-EXPORT_SYMBOL(ieee80211_wx_set_auth);
-EXPORT_SYMBOL(ieee80211_wx_set_encode_ext);
-EXPORT_SYMBOL(ieee80211_wx_get_encode_ext);
-EXPORT_SYMBOL(ieee80211_wx_get_scan);
-EXPORT_SYMBOL(ieee80211_wx_set_encode);
-EXPORT_SYMBOL(ieee80211_wx_get_encode);
index 8a1090d59254ed3229d67f43d466170aeb5ceb20..33c7fa7edc8b89098e61affb13b39c42a837a9b9 100644 (file)
@@ -1760,5 +1760,3 @@ void HTSetConnectBwModeCallback(struct ieee80211_device* ieee)
 
        pHTInfo->bSwBwInProgress = false;
 }
-
-EXPORT_SYMBOL(HTUpdateSelfAndPeerSetting);
index 3143b252fb1d91d095ad1cbb7e1c8e8ba5d3320c..ad3bf35d80e661f6991ec99a61891c0536e98727 100644 (file)
@@ -633,5 +633,3 @@ void TsStartAddBaProcess(struct ieee80211_device* ieee, PTX_TS_RECORD       pTxTS)
        else
                IEEE80211_DEBUG(IEEE80211_DL_ERR, "%s()==>BA timer is already added\n", __FUNCTION__);
 }
-
-EXPORT_SYMBOL(RemovePeerTS);
index 31b2a30fc44b602d1cd02e9ea73756d938435397..ea96b1159031df48c138f2e13e3999f60d9d205a 100644 (file)
@@ -7547,8 +7547,55 @@ static void __devexit rtl8192_usb_disconnect(struct usb_interface *intf)
        RT_TRACE(COMP_DOWN, "wlan driver removed\n");
 }
 
+/* fun with the built-in ieee80211 stack... */
+extern int ieee80211_debug_init(void);
+extern void ieee80211_debug_exit(void);
+extern int ieee80211_crypto_init(void);
+extern void ieee80211_crypto_deinit(void);
+extern int ieee80211_crypto_tkip_init(void);
+extern void ieee80211_crypto_tkip_exit(void);
+extern int ieee80211_crypto_ccmp_init(void);
+extern void ieee80211_crypto_ccmp_exit(void);
+extern int ieee80211_crypto_wep_init(void);
+extern void ieee80211_crypto_wep_exit(void);
+
 static int __init rtl8192_usb_module_init(void)
 {
+       int ret;
+
+#ifdef CONFIG_IEEE80211_DEBUG
+       ret = ieee80211_debug_init();
+       if (ret) {
+               printk(KERN_ERR "ieee80211_debug_init() failed %d\n", ret);
+               return ret;
+       }
+#endif
+       ret = ieee80211_crypto_init();
+       if (ret) {
+               printk(KERN_ERR "ieee80211_crypto_init() failed %d\n", ret);
+               return ret;
+       }
+
+       ret = ieee80211_crypto_tkip_init();
+       if (ret) {
+               printk(KERN_ERR "ieee80211_crypto_tkip_init() failed %d\n",
+                       ret);
+               return ret;
+       }
+
+       ret = ieee80211_crypto_ccmp_init();
+       if (ret) {
+               printk(KERN_ERR "ieee80211_crypto_ccmp_init() failed %d\n",
+                       ret);
+               return ret;
+       }
+
+       ret = ieee80211_crypto_wep_init();
+       if (ret) {
+               printk(KERN_ERR "ieee80211_crypto_wep_init() failed %d\n", ret);
+               return ret;
+       }
+
        printk(KERN_INFO "\nLinux kernel driver for RTL8192 based WLAN cards\n");
        printk(KERN_INFO "Copyright (c) 2007-2008, Realsil Wlan\n");
        RT_TRACE(COMP_INIT, "Initializing module");
@@ -7564,6 +7611,14 @@ static void __exit rtl8192_usb_module_exit(void)
 
        RT_TRACE(COMP_DOWN, "Exiting");
        rtl8192_proc_module_remove();
+
+       ieee80211_crypto_tkip_exit();
+       ieee80211_crypto_ccmp_exit();
+       ieee80211_crypto_wep_exit();
+       ieee80211_crypto_deinit();
+#ifdef CONFIG_IEEE80211_DEBUG
+       ieee80211_debug_exit();
+#endif
 }