diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/hostap/Kconfig | 6 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_80211.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_80211_rx.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_80211_tx.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_ap.c | 12 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_ap.h | 8 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_hw.c | 36 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_ioctl.c | 110 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_main.c | 19 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_proc.c | 20 | ||||
-rw-r--r-- | drivers/net/wireless/hostap/hostap_wlan.h | 6 | ||||
-rw-r--r-- | drivers/net/wireless/ipw2100.c | 12 | ||||
-rw-r--r-- | drivers/net/wireless/ipw2200.c | 12 |
14 files changed, 136 insertions, 127 deletions
diff --git a/drivers/net/wireless/hostap/Kconfig b/drivers/net/wireless/hostap/Kconfig index 1fef33169fdd..87bbd4db4bad 100644 --- a/drivers/net/wireless/hostap/Kconfig +++ b/drivers/net/wireless/hostap/Kconfig | |||
@@ -2,8 +2,10 @@ config HOSTAP | |||
2 | tristate "IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)" | 2 | tristate "IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)" |
3 | depends on WLAN_80211 | 3 | depends on WLAN_80211 |
4 | select WIRELESS_EXT | 4 | select WIRELESS_EXT |
5 | select IEEE80211 | 5 | select LIB80211 |
6 | select IEEE80211_CRYPT_WEP | 6 | select LIB80211_CRYPT_WEP |
7 | select LIB80211_CRYPT_TKIP | ||
8 | select LIB80211_CRYPT_CCMP | ||
7 | ---help--- | 9 | ---help--- |
8 | Shared driver code for IEEE 802.11b wireless cards based on | 10 | Shared driver code for IEEE 802.11b wireless cards based on |
9 | Intersil Prism2/2.5/3 chipset. This driver supports so called | 11 | Intersil Prism2/2.5/3 chipset. This driver supports so called |
diff --git a/drivers/net/wireless/hostap/hostap.h b/drivers/net/wireless/hostap/hostap.h index 3a386a636cca..2453deaa3e00 100644 --- a/drivers/net/wireless/hostap/hostap.h +++ b/drivers/net/wireless/hostap/hostap.h | |||
@@ -63,7 +63,7 @@ void ap_control_flush_macs(struct mac_restrictions *mac_restrictions); | |||
63 | int ap_control_kick_mac(struct ap_data *ap, struct net_device *dev, u8 *mac); | 63 | int ap_control_kick_mac(struct ap_data *ap, struct net_device *dev, u8 *mac); |
64 | void ap_control_kickall(struct ap_data *ap); | 64 | void ap_control_kickall(struct ap_data *ap); |
65 | void * ap_crypt_get_ptrs(struct ap_data *ap, u8 *addr, int permanent, | 65 | void * ap_crypt_get_ptrs(struct ap_data *ap, u8 *addr, int permanent, |
66 | struct ieee80211_crypt_data ***crypt); | 66 | struct lib80211_crypt_data ***crypt); |
67 | int prism2_ap_get_sta_qual(local_info_t *local, struct sockaddr addr[], | 67 | int prism2_ap_get_sta_qual(local_info_t *local, struct sockaddr addr[], |
68 | struct iw_quality qual[], int buf_size, | 68 | struct iw_quality qual[], int buf_size, |
69 | int aplist); | 69 | int aplist); |
diff --git a/drivers/net/wireless/hostap/hostap_80211.h b/drivers/net/wireless/hostap/hostap_80211.h index 3694b1eba521..3a9474d9a907 100644 --- a/drivers/net/wireless/hostap/hostap_80211.h +++ b/drivers/net/wireless/hostap/hostap_80211.h | |||
@@ -2,7 +2,7 @@ | |||
2 | #define HOSTAP_80211_H | 2 | #define HOSTAP_80211_H |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <net/ieee80211_crypt.h> | 5 | #include <net/ieee80211.h> |
6 | 6 | ||
7 | struct hostap_ieee80211_mgmt { | 7 | struct hostap_ieee80211_mgmt { |
8 | __le16 frame_control; | 8 | __le16 frame_control; |
diff --git a/drivers/net/wireless/hostap/hostap_80211_rx.c b/drivers/net/wireless/hostap/hostap_80211_rx.c index 5f64461aa54e..19b1bf0478bd 100644 --- a/drivers/net/wireless/hostap/hostap_80211_rx.c +++ b/drivers/net/wireless/hostap/hostap_80211_rx.c | |||
@@ -1,5 +1,5 @@ | |||
1 | #include <linux/etherdevice.h> | 1 | #include <linux/etherdevice.h> |
2 | #include <net/ieee80211_crypt.h> | 2 | #include <net/lib80211.h> |
3 | 3 | ||
4 | #include "hostap_80211.h" | 4 | #include "hostap_80211.h" |
5 | #include "hostap.h" | 5 | #include "hostap.h" |
@@ -649,7 +649,7 @@ static int hostap_is_eapol_frame(local_info_t *local, struct sk_buff *skb) | |||
649 | /* Called only as a tasklet (software IRQ) */ | 649 | /* Called only as a tasklet (software IRQ) */ |
650 | static int | 650 | static int |
651 | hostap_rx_frame_decrypt(local_info_t *local, struct sk_buff *skb, | 651 | hostap_rx_frame_decrypt(local_info_t *local, struct sk_buff *skb, |
652 | struct ieee80211_crypt_data *crypt) | 652 | struct lib80211_crypt_data *crypt) |
653 | { | 653 | { |
654 | struct ieee80211_hdr_4addr *hdr; | 654 | struct ieee80211_hdr_4addr *hdr; |
655 | int res, hdrlen; | 655 | int res, hdrlen; |
@@ -687,7 +687,7 @@ hostap_rx_frame_decrypt(local_info_t *local, struct sk_buff *skb, | |||
687 | /* Called only as a tasklet (software IRQ) */ | 687 | /* Called only as a tasklet (software IRQ) */ |
688 | static int | 688 | static int |
689 | hostap_rx_frame_decrypt_msdu(local_info_t *local, struct sk_buff *skb, | 689 | hostap_rx_frame_decrypt_msdu(local_info_t *local, struct sk_buff *skb, |
690 | int keyidx, struct ieee80211_crypt_data *crypt) | 690 | int keyidx, struct lib80211_crypt_data *crypt) |
691 | { | 691 | { |
692 | struct ieee80211_hdr_4addr *hdr; | 692 | struct ieee80211_hdr_4addr *hdr; |
693 | int res, hdrlen; | 693 | int res, hdrlen; |
@@ -733,7 +733,7 @@ void hostap_80211_rx(struct net_device *dev, struct sk_buff *skb, | |||
733 | int from_assoc_ap = 0; | 733 | int from_assoc_ap = 0; |
734 | u8 dst[ETH_ALEN]; | 734 | u8 dst[ETH_ALEN]; |
735 | u8 src[ETH_ALEN]; | 735 | u8 src[ETH_ALEN]; |
736 | struct ieee80211_crypt_data *crypt = NULL; | 736 | struct lib80211_crypt_data *crypt = NULL; |
737 | void *sta = NULL; | 737 | void *sta = NULL; |
738 | int keyidx = 0; | 738 | int keyidx = 0; |
739 | 739 | ||
@@ -785,7 +785,7 @@ void hostap_80211_rx(struct net_device *dev, struct sk_buff *skb, | |||
785 | int idx = 0; | 785 | int idx = 0; |
786 | if (skb->len >= hdrlen + 3) | 786 | if (skb->len >= hdrlen + 3) |
787 | idx = skb->data[hdrlen + 3] >> 6; | 787 | idx = skb->data[hdrlen + 3] >> 6; |
788 | crypt = local->crypt[idx]; | 788 | crypt = local->crypt_info.crypt[idx]; |
789 | sta = NULL; | 789 | sta = NULL; |
790 | 790 | ||
791 | /* Use station specific key to override default keys if the | 791 | /* Use station specific key to override default keys if the |
diff --git a/drivers/net/wireless/hostap/hostap_80211_tx.c b/drivers/net/wireless/hostap/hostap_80211_tx.c index 075247188e64..078a010f39a0 100644 --- a/drivers/net/wireless/hostap/hostap_80211_tx.c +++ b/drivers/net/wireless/hostap/hostap_80211_tx.c | |||
@@ -306,7 +306,7 @@ int hostap_mgmt_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
306 | 306 | ||
307 | /* Called only from software IRQ */ | 307 | /* Called only from software IRQ */ |
308 | static struct sk_buff * hostap_tx_encrypt(struct sk_buff *skb, | 308 | static struct sk_buff * hostap_tx_encrypt(struct sk_buff *skb, |
309 | struct ieee80211_crypt_data *crypt) | 309 | struct lib80211_crypt_data *crypt) |
310 | { | 310 | { |
311 | struct hostap_interface *iface; | 311 | struct hostap_interface *iface; |
312 | local_info_t *local; | 312 | local_info_t *local; |
@@ -405,7 +405,7 @@ int hostap_master_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
405 | if (local->host_encrypt) { | 405 | if (local->host_encrypt) { |
406 | /* Set crypt to default algorithm and key; will be replaced in | 406 | /* Set crypt to default algorithm and key; will be replaced in |
407 | * AP code if STA has own alg/key */ | 407 | * AP code if STA has own alg/key */ |
408 | tx.crypt = local->crypt[local->tx_keyidx]; | 408 | tx.crypt = local->crypt_info.crypt[local->crypt_info.tx_keyidx]; |
409 | tx.host_encrypt = 1; | 409 | tx.host_encrypt = 1; |
410 | } else { | 410 | } else { |
411 | tx.crypt = NULL; | 411 | tx.crypt = NULL; |
@@ -487,7 +487,9 @@ int hostap_master_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
487 | 487 | ||
488 | if (tx.crypt && (!tx.crypt->ops || !tx.crypt->ops->encrypt_mpdu)) | 488 | if (tx.crypt && (!tx.crypt->ops || !tx.crypt->ops->encrypt_mpdu)) |
489 | tx.crypt = NULL; | 489 | tx.crypt = NULL; |
490 | else if ((tx.crypt || local->crypt[local->tx_keyidx]) && !no_encrypt) { | 490 | else if ((tx.crypt || |
491 | local->crypt_info.crypt[local->crypt_info.tx_keyidx]) && | ||
492 | !no_encrypt) { | ||
491 | /* Add ISWEP flag both for firmware and host based encryption | 493 | /* Add ISWEP flag both for firmware and host based encryption |
492 | */ | 494 | */ |
493 | fc |= IEEE80211_FCTL_PROTECTED; | 495 | fc |= IEEE80211_FCTL_PROTECTED; |
diff --git a/drivers/net/wireless/hostap/hostap_ap.c b/drivers/net/wireless/hostap/hostap_ap.c index dec3dbe1bf8f..0903db786d5f 100644 --- a/drivers/net/wireless/hostap/hostap_ap.c +++ b/drivers/net/wireless/hostap/hostap_ap.c | |||
@@ -1206,7 +1206,7 @@ static void prism2_check_tx_rates(struct sta_info *sta) | |||
1206 | 1206 | ||
1207 | static void ap_crypt_init(struct ap_data *ap) | 1207 | static void ap_crypt_init(struct ap_data *ap) |
1208 | { | 1208 | { |
1209 | ap->crypt = ieee80211_get_crypto_ops("WEP"); | 1209 | ap->crypt = lib80211_get_crypto_ops("WEP"); |
1210 | 1210 | ||
1211 | if (ap->crypt) { | 1211 | if (ap->crypt) { |
1212 | if (ap->crypt->init) { | 1212 | if (ap->crypt->init) { |
@@ -1224,7 +1224,7 @@ static void ap_crypt_init(struct ap_data *ap) | |||
1224 | 1224 | ||
1225 | if (ap->crypt == NULL) { | 1225 | if (ap->crypt == NULL) { |
1226 | printk(KERN_WARNING "AP could not initialize WEP: load module " | 1226 | printk(KERN_WARNING "AP could not initialize WEP: load module " |
1227 | "ieee80211_crypt_wep.ko\n"); | 1227 | "lib80211_crypt_wep.ko\n"); |
1228 | } | 1228 | } |
1229 | } | 1229 | } |
1230 | 1230 | ||
@@ -1293,7 +1293,7 @@ static void handle_authen(local_info_t *local, struct sk_buff *skb, | |||
1293 | __le16 *pos; | 1293 | __le16 *pos; |
1294 | u16 resp = WLAN_STATUS_SUCCESS, fc; | 1294 | u16 resp = WLAN_STATUS_SUCCESS, fc; |
1295 | struct sta_info *sta = NULL; | 1295 | struct sta_info *sta = NULL; |
1296 | struct ieee80211_crypt_data *crypt; | 1296 | struct lib80211_crypt_data *crypt; |
1297 | char *txt = ""; | 1297 | char *txt = ""; |
1298 | 1298 | ||
1299 | len = skb->len - IEEE80211_MGMT_HDR_LEN; | 1299 | len = skb->len - IEEE80211_MGMT_HDR_LEN; |
@@ -1319,7 +1319,7 @@ static void handle_authen(local_info_t *local, struct sk_buff *skb, | |||
1319 | int idx = 0; | 1319 | int idx = 0; |
1320 | if (skb->len >= hdrlen + 3) | 1320 | if (skb->len >= hdrlen + 3) |
1321 | idx = skb->data[hdrlen + 3] >> 6; | 1321 | idx = skb->data[hdrlen + 3] >> 6; |
1322 | crypt = local->crypt[idx]; | 1322 | crypt = local->crypt_info.crypt[idx]; |
1323 | } | 1323 | } |
1324 | 1324 | ||
1325 | pos = (__le16 *) (skb->data + IEEE80211_MGMT_HDR_LEN); | 1325 | pos = (__le16 *) (skb->data + IEEE80211_MGMT_HDR_LEN); |
@@ -3065,7 +3065,7 @@ ap_rx_ret hostap_handle_sta_rx(local_info_t *local, struct net_device *dev, | |||
3065 | /* Called only as a tasklet (software IRQ) */ | 3065 | /* Called only as a tasklet (software IRQ) */ |
3066 | int hostap_handle_sta_crypto(local_info_t *local, | 3066 | int hostap_handle_sta_crypto(local_info_t *local, |
3067 | struct ieee80211_hdr_4addr *hdr, | 3067 | struct ieee80211_hdr_4addr *hdr, |
3068 | struct ieee80211_crypt_data **crypt, | 3068 | struct lib80211_crypt_data **crypt, |
3069 | void **sta_ptr) | 3069 | void **sta_ptr) |
3070 | { | 3070 | { |
3071 | struct sta_info *sta; | 3071 | struct sta_info *sta; |
@@ -3213,7 +3213,7 @@ void hostap_update_rates(local_info_t *local) | |||
3213 | 3213 | ||
3214 | 3214 | ||
3215 | void * ap_crypt_get_ptrs(struct ap_data *ap, u8 *addr, int permanent, | 3215 | void * ap_crypt_get_ptrs(struct ap_data *ap, u8 *addr, int permanent, |
3216 | struct ieee80211_crypt_data ***crypt) | 3216 | struct lib80211_crypt_data ***crypt) |
3217 | { | 3217 | { |
3218 | struct sta_info *sta; | 3218 | struct sta_info *sta; |
3219 | 3219 | ||
diff --git a/drivers/net/wireless/hostap/hostap_ap.h b/drivers/net/wireless/hostap/hostap_ap.h index 2fa2452b6b07..d36e4b175336 100644 --- a/drivers/net/wireless/hostap/hostap_ap.h +++ b/drivers/net/wireless/hostap/hostap_ap.h | |||
@@ -74,7 +74,7 @@ struct sta_info { | |||
74 | u32 tx_since_last_failure; | 74 | u32 tx_since_last_failure; |
75 | u32 tx_consecutive_exc; | 75 | u32 tx_consecutive_exc; |
76 | 76 | ||
77 | struct ieee80211_crypt_data *crypt; | 77 | struct lib80211_crypt_data *crypt; |
78 | 78 | ||
79 | int ap; /* whether this station is an AP */ | 79 | int ap; /* whether this station is an AP */ |
80 | 80 | ||
@@ -209,7 +209,7 @@ struct ap_data { | |||
209 | 209 | ||
210 | /* WEP operations for generating challenges to be used with shared key | 210 | /* WEP operations for generating challenges to be used with shared key |
211 | * authentication */ | 211 | * authentication */ |
212 | struct ieee80211_crypto_ops *crypt; | 212 | struct lib80211_crypto_ops *crypt; |
213 | void *crypt_priv; | 213 | void *crypt_priv; |
214 | #endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */ | 214 | #endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */ |
215 | }; | 215 | }; |
@@ -229,7 +229,7 @@ typedef enum { | |||
229 | struct hostap_tx_data { | 229 | struct hostap_tx_data { |
230 | struct sk_buff *skb; | 230 | struct sk_buff *skb; |
231 | int host_encrypt; | 231 | int host_encrypt; |
232 | struct ieee80211_crypt_data *crypt; | 232 | struct lib80211_crypt_data *crypt; |
233 | void *sta_ptr; | 233 | void *sta_ptr; |
234 | }; | 234 | }; |
235 | ap_tx_ret hostap_handle_sta_tx(local_info_t *local, struct hostap_tx_data *tx); | 235 | ap_tx_ret hostap_handle_sta_tx(local_info_t *local, struct hostap_tx_data *tx); |
@@ -244,7 +244,7 @@ ap_rx_ret hostap_handle_sta_rx(local_info_t *local, struct net_device *dev, | |||
244 | struct hostap_80211_rx_status *rx_stats, | 244 | struct hostap_80211_rx_status *rx_stats, |
245 | int wds); | 245 | int wds); |
246 | int hostap_handle_sta_crypto(local_info_t *local, struct ieee80211_hdr_4addr *hdr, | 246 | int hostap_handle_sta_crypto(local_info_t *local, struct ieee80211_hdr_4addr *hdr, |
247 | struct ieee80211_crypt_data **crypt, | 247 | struct lib80211_crypt_data **crypt, |
248 | void **sta_ptr); | 248 | void **sta_ptr); |
249 | int hostap_is_sta_assoc(struct ap_data *ap, u8 *sta_addr); | 249 | int hostap_is_sta_assoc(struct ap_data *ap, u8 *sta_addr); |
250 | int hostap_is_sta_authorized(struct ap_data *ap, u8 *sta_addr); | 250 | int hostap_is_sta_authorized(struct ap_data *ap, u8 *sta_addr); |
diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c index fd7f7ceeac46..066299fc9259 100644 --- a/drivers/net/wireless/hostap/hostap_hw.c +++ b/drivers/net/wireless/hostap/hostap_hw.c | |||
@@ -47,7 +47,7 @@ | |||
47 | #include <linux/wireless.h> | 47 | #include <linux/wireless.h> |
48 | #include <net/iw_handler.h> | 48 | #include <net/iw_handler.h> |
49 | #include <net/ieee80211.h> | 49 | #include <net/ieee80211.h> |
50 | #include <net/ieee80211_crypt.h> | 50 | #include <net/lib80211.h> |
51 | #include <asm/irq.h> | 51 | #include <asm/irq.h> |
52 | 52 | ||
53 | #include "hostap_80211.h" | 53 | #include "hostap_80211.h" |
@@ -2791,11 +2791,12 @@ static void prism2_check_sta_fw_version(local_info_t *local) | |||
2791 | static void prism2_crypt_deinit_entries(local_info_t *local, int force) | 2791 | static void prism2_crypt_deinit_entries(local_info_t *local, int force) |
2792 | { | 2792 | { |
2793 | struct list_head *ptr, *n; | 2793 | struct list_head *ptr, *n; |
2794 | struct ieee80211_crypt_data *entry; | 2794 | struct lib80211_crypt_data *entry; |
2795 | 2795 | ||
2796 | for (ptr = local->crypt_deinit_list.next, n = ptr->next; | 2796 | for (ptr = local->crypt_info.crypt_deinit_list.next, n = ptr->next; |
2797 | ptr != &local->crypt_deinit_list; ptr = n, n = ptr->next) { | 2797 | ptr != &local->crypt_info.crypt_deinit_list; |
2798 | entry = list_entry(ptr, struct ieee80211_crypt_data, list); | 2798 | ptr = n, n = ptr->next) { |
2799 | entry = list_entry(ptr, struct lib80211_crypt_data, list); | ||
2799 | 2800 | ||
2800 | if (atomic_read(&entry->refcnt) != 0 && !force) | 2801 | if (atomic_read(&entry->refcnt) != 0 && !force) |
2801 | continue; | 2802 | continue; |
@@ -2816,11 +2817,11 @@ static void prism2_crypt_deinit_handler(unsigned long data) | |||
2816 | 2817 | ||
2817 | spin_lock_irqsave(&local->lock, flags); | 2818 | spin_lock_irqsave(&local->lock, flags); |
2818 | prism2_crypt_deinit_entries(local, 0); | 2819 | prism2_crypt_deinit_entries(local, 0); |
2819 | if (!list_empty(&local->crypt_deinit_list)) { | 2820 | if (!list_empty(&local->crypt_info.crypt_deinit_list)) { |
2820 | printk(KERN_DEBUG "%s: entries remaining in delayed crypt " | 2821 | printk(KERN_DEBUG "%s: entries remaining in delayed crypt " |
2821 | "deletion list\n", local->dev->name); | 2822 | "deletion list\n", local->dev->name); |
2822 | local->crypt_deinit_timer.expires = jiffies + HZ; | 2823 | local->crypt_info.crypt_deinit_timer.expires = jiffies + HZ; |
2823 | add_timer(&local->crypt_deinit_timer); | 2824 | add_timer(&local->crypt_info.crypt_deinit_timer); |
2824 | } | 2825 | } |
2825 | spin_unlock_irqrestore(&local->lock, flags); | 2826 | spin_unlock_irqrestore(&local->lock, flags); |
2826 | 2827 | ||
@@ -3250,10 +3251,13 @@ while (0) | |||
3250 | 3251 | ||
3251 | INIT_LIST_HEAD(&local->cmd_queue); | 3252 | INIT_LIST_HEAD(&local->cmd_queue); |
3252 | init_waitqueue_head(&local->hostscan_wq); | 3253 | init_waitqueue_head(&local->hostscan_wq); |
3253 | INIT_LIST_HEAD(&local->crypt_deinit_list); | 3254 | |
3254 | init_timer(&local->crypt_deinit_timer); | 3255 | local->crypt_info.name = dev->name; |
3255 | local->crypt_deinit_timer.data = (unsigned long) local; | 3256 | local->crypt_info.lock = &local->lock; |
3256 | local->crypt_deinit_timer.function = prism2_crypt_deinit_handler; | 3257 | INIT_LIST_HEAD(&local->crypt_info.crypt_deinit_list); |
3258 | init_timer(&local->crypt_info.crypt_deinit_timer); | ||
3259 | local->crypt_info.crypt_deinit_timer.data = (unsigned long) local; | ||
3260 | local->crypt_info.crypt_deinit_timer.function = prism2_crypt_deinit_handler; | ||
3257 | 3261 | ||
3258 | init_timer(&local->passive_scan_timer); | 3262 | init_timer(&local->passive_scan_timer); |
3259 | local->passive_scan_timer.data = (unsigned long) local; | 3263 | local->passive_scan_timer.data = (unsigned long) local; |
@@ -3354,8 +3358,8 @@ static void prism2_free_local_data(struct net_device *dev) | |||
3354 | 3358 | ||
3355 | flush_scheduled_work(); | 3359 | flush_scheduled_work(); |
3356 | 3360 | ||
3357 | if (timer_pending(&local->crypt_deinit_timer)) | 3361 | if (timer_pending(&local->crypt_info.crypt_deinit_timer)) |
3358 | del_timer(&local->crypt_deinit_timer); | 3362 | del_timer(&local->crypt_info.crypt_deinit_timer); |
3359 | prism2_crypt_deinit_entries(local, 1); | 3363 | prism2_crypt_deinit_entries(local, 1); |
3360 | 3364 | ||
3361 | if (timer_pending(&local->passive_scan_timer)) | 3365 | if (timer_pending(&local->passive_scan_timer)) |
@@ -3374,12 +3378,12 @@ static void prism2_free_local_data(struct net_device *dev) | |||
3374 | prism2_callback(local, PRISM2_CALLBACK_DISABLE); | 3378 | prism2_callback(local, PRISM2_CALLBACK_DISABLE); |
3375 | 3379 | ||
3376 | for (i = 0; i < WEP_KEYS; i++) { | 3380 | for (i = 0; i < WEP_KEYS; i++) { |
3377 | struct ieee80211_crypt_data *crypt = local->crypt[i]; | 3381 | struct lib80211_crypt_data *crypt = local->crypt_info.crypt[i]; |
3378 | if (crypt) { | 3382 | if (crypt) { |
3379 | if (crypt->ops) | 3383 | if (crypt->ops) |
3380 | crypt->ops->deinit(crypt->priv); | 3384 | crypt->ops->deinit(crypt->priv); |
3381 | kfree(crypt); | 3385 | kfree(crypt); |
3382 | local->crypt[i] = NULL; | 3386 | local->crypt_info.crypt[i] = NULL; |
3383 | } | 3387 | } |
3384 | } | 3388 | } |
3385 | 3389 | ||
diff --git a/drivers/net/wireless/hostap/hostap_ioctl.c b/drivers/net/wireless/hostap/hostap_ioctl.c index 2318c5df7a08..29aebb679099 100644 --- a/drivers/net/wireless/hostap/hostap_ioctl.c +++ b/drivers/net/wireless/hostap/hostap_ioctl.c | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | #include <linux/types.h> | 3 | #include <linux/types.h> |
4 | #include <linux/ethtool.h> | 4 | #include <linux/ethtool.h> |
5 | #include <net/ieee80211_crypt.h> | 5 | #include <net/lib80211.h> |
6 | 6 | ||
7 | #include "hostap_wlan.h" | 7 | #include "hostap_wlan.h" |
8 | #include "hostap.h" | 8 | #include "hostap.h" |
@@ -117,9 +117,9 @@ static int prism2_get_name(struct net_device *dev, | |||
117 | 117 | ||
118 | 118 | ||
119 | static void prism2_crypt_delayed_deinit(local_info_t *local, | 119 | static void prism2_crypt_delayed_deinit(local_info_t *local, |
120 | struct ieee80211_crypt_data **crypt) | 120 | struct lib80211_crypt_data **crypt) |
121 | { | 121 | { |
122 | struct ieee80211_crypt_data *tmp; | 122 | struct lib80211_crypt_data *tmp; |
123 | unsigned long flags; | 123 | unsigned long flags; |
124 | 124 | ||
125 | tmp = *crypt; | 125 | tmp = *crypt; |
@@ -133,10 +133,10 @@ static void prism2_crypt_delayed_deinit(local_info_t *local, | |||
133 | * locking. */ | 133 | * locking. */ |
134 | 134 | ||
135 | spin_lock_irqsave(&local->lock, flags); | 135 | spin_lock_irqsave(&local->lock, flags); |
136 | list_add(&tmp->list, &local->crypt_deinit_list); | 136 | list_add(&tmp->list, &local->crypt_info.crypt_deinit_list); |
137 | if (!timer_pending(&local->crypt_deinit_timer)) { | 137 | if (!timer_pending(&local->crypt_info.crypt_deinit_timer)) { |
138 | local->crypt_deinit_timer.expires = jiffies + HZ; | 138 | local->crypt_info.crypt_deinit_timer.expires = jiffies + HZ; |
139 | add_timer(&local->crypt_deinit_timer); | 139 | add_timer(&local->crypt_info.crypt_deinit_timer); |
140 | } | 140 | } |
141 | spin_unlock_irqrestore(&local->lock, flags); | 141 | spin_unlock_irqrestore(&local->lock, flags); |
142 | } | 142 | } |
@@ -149,20 +149,20 @@ static int prism2_ioctl_siwencode(struct net_device *dev, | |||
149 | struct hostap_interface *iface; | 149 | struct hostap_interface *iface; |
150 | local_info_t *local; | 150 | local_info_t *local; |
151 | int i; | 151 | int i; |
152 | struct ieee80211_crypt_data **crypt; | 152 | struct lib80211_crypt_data **crypt; |
153 | 153 | ||
154 | iface = netdev_priv(dev); | 154 | iface = netdev_priv(dev); |
155 | local = iface->local; | 155 | local = iface->local; |
156 | 156 | ||
157 | i = erq->flags & IW_ENCODE_INDEX; | 157 | i = erq->flags & IW_ENCODE_INDEX; |
158 | if (i < 1 || i > 4) | 158 | if (i < 1 || i > 4) |
159 | i = local->tx_keyidx; | 159 | i = local->crypt_info.tx_keyidx; |
160 | else | 160 | else |
161 | i--; | 161 | i--; |
162 | if (i < 0 || i >= WEP_KEYS) | 162 | if (i < 0 || i >= WEP_KEYS) |
163 | return -EINVAL; | 163 | return -EINVAL; |
164 | 164 | ||
165 | crypt = &local->crypt[i]; | 165 | crypt = &local->crypt_info.crypt[i]; |
166 | 166 | ||
167 | if (erq->flags & IW_ENCODE_DISABLED) { | 167 | if (erq->flags & IW_ENCODE_DISABLED) { |
168 | if (*crypt) | 168 | if (*crypt) |
@@ -177,17 +177,17 @@ static int prism2_ioctl_siwencode(struct net_device *dev, | |||
177 | } | 177 | } |
178 | 178 | ||
179 | if (*crypt == NULL) { | 179 | if (*crypt == NULL) { |
180 | struct ieee80211_crypt_data *new_crypt; | 180 | struct lib80211_crypt_data *new_crypt; |
181 | 181 | ||
182 | /* take WEP into use */ | 182 | /* take WEP into use */ |
183 | new_crypt = kzalloc(sizeof(struct ieee80211_crypt_data), | 183 | new_crypt = kzalloc(sizeof(struct lib80211_crypt_data), |
184 | GFP_KERNEL); | 184 | GFP_KERNEL); |
185 | if (new_crypt == NULL) | 185 | if (new_crypt == NULL) |
186 | return -ENOMEM; | 186 | return -ENOMEM; |
187 | new_crypt->ops = ieee80211_get_crypto_ops("WEP"); | 187 | new_crypt->ops = lib80211_get_crypto_ops("WEP"); |
188 | if (!new_crypt->ops) { | 188 | if (!new_crypt->ops) { |
189 | request_module("ieee80211_crypt_wep"); | 189 | request_module("lib80211_crypt_wep"); |
190 | new_crypt->ops = ieee80211_get_crypto_ops("WEP"); | 190 | new_crypt->ops = lib80211_get_crypto_ops("WEP"); |
191 | } | 191 | } |
192 | if (new_crypt->ops) | 192 | if (new_crypt->ops) |
193 | new_crypt->priv = new_crypt->ops->init(i); | 193 | new_crypt->priv = new_crypt->ops->init(i); |
@@ -210,16 +210,16 @@ static int prism2_ioctl_siwencode(struct net_device *dev, | |||
210 | memset(keybuf + erq->length, 0, len - erq->length); | 210 | memset(keybuf + erq->length, 0, len - erq->length); |
211 | (*crypt)->ops->set_key(keybuf, len, NULL, (*crypt)->priv); | 211 | (*crypt)->ops->set_key(keybuf, len, NULL, (*crypt)->priv); |
212 | for (j = 0; j < WEP_KEYS; j++) { | 212 | for (j = 0; j < WEP_KEYS; j++) { |
213 | if (j != i && local->crypt[j]) { | 213 | if (j != i && local->crypt_info.crypt[j]) { |
214 | first = 0; | 214 | first = 0; |
215 | break; | 215 | break; |
216 | } | 216 | } |
217 | } | 217 | } |
218 | if (first) | 218 | if (first) |
219 | local->tx_keyidx = i; | 219 | local->crypt_info.tx_keyidx = i; |
220 | } else { | 220 | } else { |
221 | /* No key data - just set the default TX key index */ | 221 | /* No key data - just set the default TX key index */ |
222 | local->tx_keyidx = i; | 222 | local->crypt_info.tx_keyidx = i; |
223 | } | 223 | } |
224 | 224 | ||
225 | done: | 225 | done: |
@@ -252,20 +252,20 @@ static int prism2_ioctl_giwencode(struct net_device *dev, | |||
252 | local_info_t *local; | 252 | local_info_t *local; |
253 | int i, len; | 253 | int i, len; |
254 | u16 val; | 254 | u16 val; |
255 | struct ieee80211_crypt_data *crypt; | 255 | struct lib80211_crypt_data *crypt; |
256 | 256 | ||
257 | iface = netdev_priv(dev); | 257 | iface = netdev_priv(dev); |
258 | local = iface->local; | 258 | local = iface->local; |
259 | 259 | ||
260 | i = erq->flags & IW_ENCODE_INDEX; | 260 | i = erq->flags & IW_ENCODE_INDEX; |
261 | if (i < 1 || i > 4) | 261 | if (i < 1 || i > 4) |
262 | i = local->tx_keyidx; | 262 | i = local->crypt_info.tx_keyidx; |
263 | else | 263 | else |
264 | i--; | 264 | i--; |
265 | if (i < 0 || i >= WEP_KEYS) | 265 | if (i < 0 || i >= WEP_KEYS) |
266 | return -EINVAL; | 266 | return -EINVAL; |
267 | 267 | ||
268 | crypt = local->crypt[i]; | 268 | crypt = local->crypt_info.crypt[i]; |
269 | erq->flags = i + 1; | 269 | erq->flags = i + 1; |
270 | 270 | ||
271 | if (crypt == NULL || crypt->ops == NULL) { | 271 | if (crypt == NULL || crypt->ops == NULL) { |
@@ -3227,8 +3227,8 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev, | |||
3227 | local_info_t *local = iface->local; | 3227 | local_info_t *local = iface->local; |
3228 | struct iw_encode_ext *ext = (struct iw_encode_ext *) extra; | 3228 | struct iw_encode_ext *ext = (struct iw_encode_ext *) extra; |
3229 | int i, ret = 0; | 3229 | int i, ret = 0; |
3230 | struct ieee80211_crypto_ops *ops; | 3230 | struct lib80211_crypto_ops *ops; |
3231 | struct ieee80211_crypt_data **crypt; | 3231 | struct lib80211_crypt_data **crypt; |
3232 | void *sta_ptr; | 3232 | void *sta_ptr; |
3233 | u8 *addr; | 3233 | u8 *addr; |
3234 | const char *alg, *module; | 3234 | const char *alg, *module; |
@@ -3237,7 +3237,7 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev, | |||
3237 | if (i > WEP_KEYS) | 3237 | if (i > WEP_KEYS) |
3238 | return -EINVAL; | 3238 | return -EINVAL; |
3239 | if (i < 1 || i > WEP_KEYS) | 3239 | if (i < 1 || i > WEP_KEYS) |
3240 | i = local->tx_keyidx; | 3240 | i = local->crypt_info.tx_keyidx; |
3241 | else | 3241 | else |
3242 | i--; | 3242 | i--; |
3243 | if (i < 0 || i >= WEP_KEYS) | 3243 | if (i < 0 || i >= WEP_KEYS) |
@@ -3247,7 +3247,7 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev, | |||
3247 | if (addr[0] == 0xff && addr[1] == 0xff && addr[2] == 0xff && | 3247 | if (addr[0] == 0xff && addr[1] == 0xff && addr[2] == 0xff && |
3248 | addr[3] == 0xff && addr[4] == 0xff && addr[5] == 0xff) { | 3248 | addr[3] == 0xff && addr[4] == 0xff && addr[5] == 0xff) { |
3249 | sta_ptr = NULL; | 3249 | sta_ptr = NULL; |
3250 | crypt = &local->crypt[i]; | 3250 | crypt = &local->crypt_info.crypt[i]; |
3251 | } else { | 3251 | } else { |
3252 | if (i != 0) | 3252 | if (i != 0) |
3253 | return -EINVAL; | 3253 | return -EINVAL; |
@@ -3260,7 +3260,7 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev, | |||
3260 | * is emulated by using default key idx 0. | 3260 | * is emulated by using default key idx 0. |
3261 | */ | 3261 | */ |
3262 | i = 0; | 3262 | i = 0; |
3263 | crypt = &local->crypt[i]; | 3263 | crypt = &local->crypt_info.crypt[i]; |
3264 | } else | 3264 | } else |
3265 | return -EINVAL; | 3265 | return -EINVAL; |
3266 | } | 3266 | } |
@@ -3276,15 +3276,15 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev, | |||
3276 | switch (ext->alg) { | 3276 | switch (ext->alg) { |
3277 | case IW_ENCODE_ALG_WEP: | 3277 | case IW_ENCODE_ALG_WEP: |
3278 | alg = "WEP"; | 3278 | alg = "WEP"; |
3279 | module = "ieee80211_crypt_wep"; | 3279 | module = "lib80211_crypt_wep"; |
3280 | break; | 3280 | break; |
3281 | case IW_ENCODE_ALG_TKIP: | 3281 | case IW_ENCODE_ALG_TKIP: |
3282 | alg = "TKIP"; | 3282 | alg = "TKIP"; |
3283 | module = "ieee80211_crypt_tkip"; | 3283 | module = "lib80211_crypt_tkip"; |
3284 | break; | 3284 | break; |
3285 | case IW_ENCODE_ALG_CCMP: | 3285 | case IW_ENCODE_ALG_CCMP: |
3286 | alg = "CCMP"; | 3286 | alg = "CCMP"; |
3287 | module = "ieee80211_crypt_ccmp"; | 3287 | module = "lib80211_crypt_ccmp"; |
3288 | break; | 3288 | break; |
3289 | default: | 3289 | default: |
3290 | printk(KERN_DEBUG "%s: unsupported algorithm %d\n", | 3290 | printk(KERN_DEBUG "%s: unsupported algorithm %d\n", |
@@ -3293,10 +3293,10 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev, | |||
3293 | goto done; | 3293 | goto done; |
3294 | } | 3294 | } |
3295 | 3295 | ||
3296 | ops = ieee80211_get_crypto_ops(alg); | 3296 | ops = lib80211_get_crypto_ops(alg); |
3297 | if (ops == NULL) { | 3297 | if (ops == NULL) { |
3298 | request_module(module); | 3298 | request_module(module); |
3299 | ops = ieee80211_get_crypto_ops(alg); | 3299 | ops = lib80211_get_crypto_ops(alg); |
3300 | } | 3300 | } |
3301 | if (ops == NULL) { | 3301 | if (ops == NULL) { |
3302 | printk(KERN_DEBUG "%s: unknown crypto alg '%s'\n", | 3302 | printk(KERN_DEBUG "%s: unknown crypto alg '%s'\n", |
@@ -3315,11 +3315,11 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev, | |||
3315 | } | 3315 | } |
3316 | 3316 | ||
3317 | if (*crypt == NULL || (*crypt)->ops != ops) { | 3317 | if (*crypt == NULL || (*crypt)->ops != ops) { |
3318 | struct ieee80211_crypt_data *new_crypt; | 3318 | struct lib80211_crypt_data *new_crypt; |
3319 | 3319 | ||
3320 | prism2_crypt_delayed_deinit(local, crypt); | 3320 | prism2_crypt_delayed_deinit(local, crypt); |
3321 | 3321 | ||
3322 | new_crypt = kzalloc(sizeof(struct ieee80211_crypt_data), | 3322 | new_crypt = kzalloc(sizeof(struct lib80211_crypt_data), |
3323 | GFP_KERNEL); | 3323 | GFP_KERNEL); |
3324 | if (new_crypt == NULL) { | 3324 | if (new_crypt == NULL) { |
3325 | ret = -ENOMEM; | 3325 | ret = -ENOMEM; |
@@ -3354,20 +3354,20 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev, | |||
3354 | 3354 | ||
3355 | if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { | 3355 | if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { |
3356 | if (!sta_ptr) | 3356 | if (!sta_ptr) |
3357 | local->tx_keyidx = i; | 3357 | local->crypt_info.tx_keyidx = i; |
3358 | } | 3358 | } |
3359 | 3359 | ||
3360 | 3360 | ||
3361 | if (sta_ptr == NULL && ext->key_len > 0) { | 3361 | if (sta_ptr == NULL && ext->key_len > 0) { |
3362 | int first = 1, j; | 3362 | int first = 1, j; |
3363 | for (j = 0; j < WEP_KEYS; j++) { | 3363 | for (j = 0; j < WEP_KEYS; j++) { |
3364 | if (j != i && local->crypt[j]) { | 3364 | if (j != i && local->crypt_info.crypt[j]) { |
3365 | first = 0; | 3365 | first = 0; |
3366 | break; | 3366 | break; |
3367 | } | 3367 | } |
3368 | } | 3368 | } |
3369 | if (first) | 3369 | if (first) |
3370 | local->tx_keyidx = i; | 3370 | local->crypt_info.tx_keyidx = i; |
3371 | } | 3371 | } |
3372 | 3372 | ||
3373 | done: | 3373 | done: |
@@ -3399,7 +3399,7 @@ static int prism2_ioctl_giwencodeext(struct net_device *dev, | |||
3399 | { | 3399 | { |
3400 | struct hostap_interface *iface = netdev_priv(dev); | 3400 | struct hostap_interface *iface = netdev_priv(dev); |
3401 | local_info_t *local = iface->local; | 3401 | local_info_t *local = iface->local; |
3402 | struct ieee80211_crypt_data **crypt; | 3402 | struct lib80211_crypt_data **crypt; |
3403 | void *sta_ptr; | 3403 | void *sta_ptr; |
3404 | int max_key_len, i; | 3404 | int max_key_len, i; |
3405 | struct iw_encode_ext *ext = (struct iw_encode_ext *) extra; | 3405 | struct iw_encode_ext *ext = (struct iw_encode_ext *) extra; |
@@ -3411,7 +3411,7 @@ static int prism2_ioctl_giwencodeext(struct net_device *dev, | |||
3411 | 3411 | ||
3412 | i = erq->flags & IW_ENCODE_INDEX; | 3412 | i = erq->flags & IW_ENCODE_INDEX; |
3413 | if (i < 1 || i > WEP_KEYS) | 3413 | if (i < 1 || i > WEP_KEYS) |
3414 | i = local->tx_keyidx; | 3414 | i = local->crypt_info.tx_keyidx; |
3415 | else | 3415 | else |
3416 | i--; | 3416 | i--; |
3417 | 3417 | ||
@@ -3419,7 +3419,7 @@ static int prism2_ioctl_giwencodeext(struct net_device *dev, | |||
3419 | if (addr[0] == 0xff && addr[1] == 0xff && addr[2] == 0xff && | 3419 | if (addr[0] == 0xff && addr[1] == 0xff && addr[2] == 0xff && |
3420 | addr[3] == 0xff && addr[4] == 0xff && addr[5] == 0xff) { | 3420 | addr[3] == 0xff && addr[4] == 0xff && addr[5] == 0xff) { |
3421 | sta_ptr = NULL; | 3421 | sta_ptr = NULL; |
3422 | crypt = &local->crypt[i]; | 3422 | crypt = &local->crypt_info.crypt[i]; |
3423 | } else { | 3423 | } else { |
3424 | i = 0; | 3424 | i = 0; |
3425 | sta_ptr = ap_crypt_get_ptrs(local->ap, addr, 0, &crypt); | 3425 | sta_ptr = ap_crypt_get_ptrs(local->ap, addr, 0, &crypt); |
@@ -3468,8 +3468,8 @@ static int prism2_ioctl_set_encryption(local_info_t *local, | |||
3468 | int param_len) | 3468 | int param_len) |
3469 | { | 3469 | { |
3470 | int ret = 0; | 3470 | int ret = 0; |
3471 | struct ieee80211_crypto_ops *ops; | 3471 | struct lib80211_crypto_ops *ops; |
3472 | struct ieee80211_crypt_data **crypt; | 3472 | struct lib80211_crypt_data **crypt; |
3473 | void *sta_ptr; | 3473 | void *sta_ptr; |
3474 | 3474 | ||
3475 | param->u.crypt.err = 0; | 3475 | param->u.crypt.err = 0; |
@@ -3486,7 +3486,7 @@ static int prism2_ioctl_set_encryption(local_info_t *local, | |||
3486 | if (param->u.crypt.idx >= WEP_KEYS) | 3486 | if (param->u.crypt.idx >= WEP_KEYS) |
3487 | return -EINVAL; | 3487 | return -EINVAL; |
3488 | sta_ptr = NULL; | 3488 | sta_ptr = NULL; |
3489 | crypt = &local->crypt[param->u.crypt.idx]; | 3489 | crypt = &local->crypt_info.crypt[param->u.crypt.idx]; |
3490 | } else { | 3490 | } else { |
3491 | if (param->u.crypt.idx) | 3491 | if (param->u.crypt.idx) |
3492 | return -EINVAL; | 3492 | return -EINVAL; |
@@ -3507,16 +3507,16 @@ static int prism2_ioctl_set_encryption(local_info_t *local, | |||
3507 | goto done; | 3507 | goto done; |
3508 | } | 3508 | } |
3509 | 3509 | ||
3510 | ops = ieee80211_get_crypto_ops(param->u.crypt.alg); | 3510 | ops = lib80211_get_crypto_ops(param->u.crypt.alg); |
3511 | if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) { | 3511 | if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) { |
3512 | request_module("ieee80211_crypt_wep"); | 3512 | request_module("lib80211_crypt_wep"); |
3513 | ops = ieee80211_get_crypto_ops(param->u.crypt.alg); | 3513 | ops = lib80211_get_crypto_ops(param->u.crypt.alg); |
3514 | } else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) { | 3514 | } else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) { |
3515 | request_module("ieee80211_crypt_tkip"); | 3515 | request_module("lib80211_crypt_tkip"); |
3516 | ops = ieee80211_get_crypto_ops(param->u.crypt.alg); | 3516 | ops = lib80211_get_crypto_ops(param->u.crypt.alg); |
3517 | } else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) { | 3517 | } else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) { |
3518 | request_module("ieee80211_crypt_ccmp"); | 3518 | request_module("lib80211_crypt_ccmp"); |
3519 | ops = ieee80211_get_crypto_ops(param->u.crypt.alg); | 3519 | ops = lib80211_get_crypto_ops(param->u.crypt.alg); |
3520 | } | 3520 | } |
3521 | if (ops == NULL) { | 3521 | if (ops == NULL) { |
3522 | printk(KERN_DEBUG "%s: unknown crypto alg '%s'\n", | 3522 | printk(KERN_DEBUG "%s: unknown crypto alg '%s'\n", |
@@ -3531,11 +3531,11 @@ static int prism2_ioctl_set_encryption(local_info_t *local, | |||
3531 | local->host_decrypt = local->host_encrypt = 1; | 3531 | local->host_decrypt = local->host_encrypt = 1; |
3532 | 3532 | ||
3533 | if (*crypt == NULL || (*crypt)->ops != ops) { | 3533 | if (*crypt == NULL || (*crypt)->ops != ops) { |
3534 | struct ieee80211_crypt_data *new_crypt; | 3534 | struct lib80211_crypt_data *new_crypt; |
3535 | 3535 | ||
3536 | prism2_crypt_delayed_deinit(local, crypt); | 3536 | prism2_crypt_delayed_deinit(local, crypt); |
3537 | 3537 | ||
3538 | new_crypt = kzalloc(sizeof(struct ieee80211_crypt_data), | 3538 | new_crypt = kzalloc(sizeof(struct lib80211_crypt_data), |
3539 | GFP_KERNEL); | 3539 | GFP_KERNEL); |
3540 | if (new_crypt == NULL) { | 3540 | if (new_crypt == NULL) { |
3541 | ret = -ENOMEM; | 3541 | ret = -ENOMEM; |
@@ -3568,7 +3568,7 @@ static int prism2_ioctl_set_encryption(local_info_t *local, | |||
3568 | 3568 | ||
3569 | if (param->u.crypt.flags & HOSTAP_CRYPT_FLAG_SET_TX_KEY) { | 3569 | if (param->u.crypt.flags & HOSTAP_CRYPT_FLAG_SET_TX_KEY) { |
3570 | if (!sta_ptr) | 3570 | if (!sta_ptr) |
3571 | local->tx_keyidx = param->u.crypt.idx; | 3571 | local->crypt_info.tx_keyidx = param->u.crypt.idx; |
3572 | else if (param->u.crypt.idx) { | 3572 | else if (param->u.crypt.idx) { |
3573 | printk(KERN_DEBUG "%s: TX key idx setting failed\n", | 3573 | printk(KERN_DEBUG "%s: TX key idx setting failed\n", |
3574 | local->dev->name); | 3574 | local->dev->name); |
@@ -3604,7 +3604,7 @@ static int prism2_ioctl_get_encryption(local_info_t *local, | |||
3604 | struct prism2_hostapd_param *param, | 3604 | struct prism2_hostapd_param *param, |
3605 | int param_len) | 3605 | int param_len) |
3606 | { | 3606 | { |
3607 | struct ieee80211_crypt_data **crypt; | 3607 | struct lib80211_crypt_data **crypt; |
3608 | void *sta_ptr; | 3608 | void *sta_ptr; |
3609 | int max_key_len; | 3609 | int max_key_len; |
3610 | 3610 | ||
@@ -3620,8 +3620,8 @@ static int prism2_ioctl_get_encryption(local_info_t *local, | |||
3620 | param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) { | 3620 | param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) { |
3621 | sta_ptr = NULL; | 3621 | sta_ptr = NULL; |
3622 | if (param->u.crypt.idx >= WEP_KEYS) | 3622 | if (param->u.crypt.idx >= WEP_KEYS) |
3623 | param->u.crypt.idx = local->tx_keyidx; | 3623 | param->u.crypt.idx = local->crypt_info.tx_keyidx; |
3624 | crypt = &local->crypt[param->u.crypt.idx]; | 3624 | crypt = &local->crypt_info.crypt[param->u.crypt.idx]; |
3625 | } else { | 3625 | } else { |
3626 | param->u.crypt.idx = 0; | 3626 | param->u.crypt.idx = 0; |
3627 | sta_ptr = ap_crypt_get_ptrs(local->ap, param->sta_addr, 0, | 3627 | sta_ptr = ap_crypt_get_ptrs(local->ap, param->sta_addr, 0, |
diff --git a/drivers/net/wireless/hostap/hostap_main.c b/drivers/net/wireless/hostap/hostap_main.c index 4c36eb2fafd1..02a312ca8607 100644 --- a/drivers/net/wireless/hostap/hostap_main.c +++ b/drivers/net/wireless/hostap/hostap_main.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include <net/net_namespace.h> | 27 | #include <net/net_namespace.h> |
28 | #include <net/iw_handler.h> | 28 | #include <net/iw_handler.h> |
29 | #include <net/ieee80211.h> | 29 | #include <net/ieee80211.h> |
30 | #include <net/ieee80211_crypt.h> | 30 | #include <net/lib80211.h> |
31 | #include <asm/uaccess.h> | 31 | #include <asm/uaccess.h> |
32 | 32 | ||
33 | #include "hostap_wlan.h" | 33 | #include "hostap_wlan.h" |
@@ -343,10 +343,11 @@ int hostap_set_encryption(local_info_t *local) | |||
343 | char keybuf[WEP_KEY_LEN + 1]; | 343 | char keybuf[WEP_KEY_LEN + 1]; |
344 | enum { NONE, WEP, OTHER } encrypt_type; | 344 | enum { NONE, WEP, OTHER } encrypt_type; |
345 | 345 | ||
346 | idx = local->tx_keyidx; | 346 | idx = local->crypt_info.tx_keyidx; |
347 | if (local->crypt[idx] == NULL || local->crypt[idx]->ops == NULL) | 347 | if (local->crypt_info.crypt[idx] == NULL || |
348 | local->crypt_info.crypt[idx]->ops == NULL) | ||
348 | encrypt_type = NONE; | 349 | encrypt_type = NONE; |
349 | else if (strcmp(local->crypt[idx]->ops->name, "WEP") == 0) | 350 | else if (strcmp(local->crypt_info.crypt[idx]->ops->name, "WEP") == 0) |
350 | encrypt_type = WEP; | 351 | encrypt_type = WEP; |
351 | else | 352 | else |
352 | encrypt_type = OTHER; | 353 | encrypt_type = OTHER; |
@@ -394,17 +395,17 @@ int hostap_set_encryption(local_info_t *local) | |||
394 | /* 104-bit support seems to require that all the keys are set to the | 395 | /* 104-bit support seems to require that all the keys are set to the |
395 | * same keylen */ | 396 | * same keylen */ |
396 | keylen = 6; /* first 5 octets */ | 397 | keylen = 6; /* first 5 octets */ |
397 | len = local->crypt[idx]->ops->get_key(keybuf, sizeof(keybuf), | 398 | len = local->crypt_info.crypt[idx]->ops->get_key(keybuf, sizeof(keybuf), NULL, |
398 | NULL, local->crypt[idx]->priv); | 399 | local->crypt_info.crypt[idx]->priv); |
399 | if (idx >= 0 && idx < WEP_KEYS && len > 5) | 400 | if (idx >= 0 && idx < WEP_KEYS && len > 5) |
400 | keylen = WEP_KEY_LEN + 1; /* first 13 octets */ | 401 | keylen = WEP_KEY_LEN + 1; /* first 13 octets */ |
401 | 402 | ||
402 | for (i = 0; i < WEP_KEYS; i++) { | 403 | for (i = 0; i < WEP_KEYS; i++) { |
403 | memset(keybuf, 0, sizeof(keybuf)); | 404 | memset(keybuf, 0, sizeof(keybuf)); |
404 | if (local->crypt[i]) { | 405 | if (local->crypt_info.crypt[i]) { |
405 | (void) local->crypt[i]->ops->get_key( | 406 | (void) local->crypt_info.crypt[i]->ops->get_key( |
406 | keybuf, sizeof(keybuf), | 407 | keybuf, sizeof(keybuf), |
407 | NULL, local->crypt[i]->priv); | 408 | NULL, local->crypt_info.crypt[i]->priv); |
408 | } | 409 | } |
409 | if (local->func->set_rid(local->dev, | 410 | if (local->func->set_rid(local->dev, |
410 | HFA384X_RID_CNFDEFAULTKEY0 + i, | 411 | HFA384X_RID_CNFDEFAULTKEY0 + i, |
diff --git a/drivers/net/wireless/hostap/hostap_proc.c b/drivers/net/wireless/hostap/hostap_proc.c index ae7d3caf3dae..005ff25a405f 100644 --- a/drivers/net/wireless/hostap/hostap_proc.c +++ b/drivers/net/wireless/hostap/hostap_proc.c | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | #include <linux/types.h> | 3 | #include <linux/types.h> |
4 | #include <linux/proc_fs.h> | 4 | #include <linux/proc_fs.h> |
5 | #include <net/ieee80211_crypt.h> | 5 | #include <net/lib80211.h> |
6 | 6 | ||
7 | #include "hostap_wlan.h" | 7 | #include "hostap_wlan.h" |
8 | #include "hostap.h" | 8 | #include "hostap.h" |
@@ -36,9 +36,10 @@ static int prism2_debug_proc_read(char *page, char **start, off_t off, | |||
36 | p += sprintf(p, "dev_enabled=%d\n", local->dev_enabled); | 36 | p += sprintf(p, "dev_enabled=%d\n", local->dev_enabled); |
37 | p += sprintf(p, "sw_tick_stuck=%d\n", local->sw_tick_stuck); | 37 | p += sprintf(p, "sw_tick_stuck=%d\n", local->sw_tick_stuck); |
38 | for (i = 0; i < WEP_KEYS; i++) { | 38 | for (i = 0; i < WEP_KEYS; i++) { |
39 | if (local->crypt[i] && local->crypt[i]->ops) { | 39 | if (local->crypt_info.crypt[i] && |
40 | p += sprintf(p, "crypt[%d]=%s\n", | 40 | local->crypt_info.crypt[i]->ops) { |
41 | i, local->crypt[i]->ops->name); | 41 | p += sprintf(p, "crypt[%d]=%s\n", i, |
42 | local->crypt_info.crypt[i]->ops->name); | ||
42 | } | 43 | } |
43 | } | 44 | } |
44 | p += sprintf(p, "pri_only=%d\n", local->pri_only); | 45 | p += sprintf(p, "pri_only=%d\n", local->pri_only); |
@@ -206,12 +207,13 @@ static int prism2_crypt_proc_read(char *page, char **start, off_t off, | |||
206 | return 0; | 207 | return 0; |
207 | } | 208 | } |
208 | 209 | ||
209 | p += sprintf(p, "tx_keyidx=%d\n", local->tx_keyidx); | 210 | p += sprintf(p, "tx_keyidx=%d\n", local->crypt_info.tx_keyidx); |
210 | for (i = 0; i < WEP_KEYS; i++) { | 211 | for (i = 0; i < WEP_KEYS; i++) { |
211 | if (local->crypt[i] && local->crypt[i]->ops && | 212 | if (local->crypt_info.crypt[i] && |
212 | local->crypt[i]->ops->print_stats) { | 213 | local->crypt_info.crypt[i]->ops && |
213 | p = local->crypt[i]->ops->print_stats( | 214 | local->crypt_info.crypt[i]->ops->print_stats) { |
214 | p, local->crypt[i]->priv); | 215 | p = local->crypt_info.crypt[i]->ops->print_stats( |
216 | p, local->crypt_info.crypt[i]->priv); | ||
215 | } | 217 | } |
216 | } | 218 | } |
217 | 219 | ||
diff --git a/drivers/net/wireless/hostap/hostap_wlan.h b/drivers/net/wireless/hostap/hostap_wlan.h index d2c7a56b8b59..4d8d51a353cd 100644 --- a/drivers/net/wireless/hostap/hostap_wlan.h +++ b/drivers/net/wireless/hostap/hostap_wlan.h | |||
@@ -6,6 +6,7 @@ | |||
6 | #include <linux/mutex.h> | 6 | #include <linux/mutex.h> |
7 | #include <net/iw_handler.h> | 7 | #include <net/iw_handler.h> |
8 | #include <net/ieee80211_radiotap.h> | 8 | #include <net/ieee80211_radiotap.h> |
9 | #include <net/lib80211.h> | ||
9 | 10 | ||
10 | #include "hostap_config.h" | 11 | #include "hostap_config.h" |
11 | #include "hostap_common.h" | 12 | #include "hostap_common.h" |
@@ -763,10 +764,7 @@ struct local_info { | |||
763 | 764 | ||
764 | #define WEP_KEYS 4 | 765 | #define WEP_KEYS 4 |
765 | #define WEP_KEY_LEN 13 | 766 | #define WEP_KEY_LEN 13 |
766 | struct ieee80211_crypt_data *crypt[WEP_KEYS]; | 767 | struct lib80211_crypt_info crypt_info; |
767 | int tx_keyidx; /* default TX key index (crypt[tx_keyidx]) */ | ||
768 | struct timer_list crypt_deinit_timer; | ||
769 | struct list_head crypt_deinit_list; | ||
770 | 768 | ||
771 | int open_wep; /* allow unencrypted frames */ | 769 | int open_wep; /* allow unencrypted frames */ |
772 | int host_encrypt; | 770 | int host_encrypt; |
diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c index 062c9f280304..2d2044d3d1c9 100644 --- a/drivers/net/wireless/ipw2100.c +++ b/drivers/net/wireless/ipw2100.c | |||
@@ -4010,7 +4010,7 @@ static ssize_t show_internals(struct device *d, struct device_attribute *attr, | |||
4010 | else | 4010 | else |
4011 | len += sprintf(buf + len, "not connected\n"); | 4011 | len += sprintf(buf + len, "not connected\n"); |
4012 | 4012 | ||
4013 | DUMP_VAR(ieee->crypt[priv->ieee->tx_keyidx], "p"); | 4013 | DUMP_VAR(ieee->crypt_info.crypt[priv->ieee->crypt_info.tx_keyidx], "p"); |
4014 | DUMP_VAR(status, "08lx"); | 4014 | DUMP_VAR(status, "08lx"); |
4015 | DUMP_VAR(config, "08lx"); | 4015 | DUMP_VAR(config, "08lx"); |
4016 | DUMP_VAR(capability, "08lx"); | 4016 | DUMP_VAR(capability, "08lx"); |
@@ -5514,7 +5514,7 @@ static int ipw2100_configure_security(struct ipw2100_priv *priv, int batch_mode) | |||
5514 | } | 5514 | } |
5515 | } | 5515 | } |
5516 | 5516 | ||
5517 | ipw2100_set_key_index(priv, priv->ieee->tx_keyidx, 1); | 5517 | ipw2100_set_key_index(priv, priv->ieee->crypt_info.tx_keyidx, 1); |
5518 | } | 5518 | } |
5519 | 5519 | ||
5520 | /* Always enable privacy so the Host can filter WEP packets if | 5520 | /* Always enable privacy so the Host can filter WEP packets if |
@@ -7620,7 +7620,7 @@ static int ipw2100_wx_set_auth(struct net_device *dev, | |||
7620 | struct ipw2100_priv *priv = ieee80211_priv(dev); | 7620 | struct ipw2100_priv *priv = ieee80211_priv(dev); |
7621 | struct ieee80211_device *ieee = priv->ieee; | 7621 | struct ieee80211_device *ieee = priv->ieee; |
7622 | struct iw_param *param = &wrqu->param; | 7622 | struct iw_param *param = &wrqu->param; |
7623 | struct ieee80211_crypt_data *crypt; | 7623 | struct lib80211_crypt_data *crypt; |
7624 | unsigned long flags; | 7624 | unsigned long flags; |
7625 | int ret = 0; | 7625 | int ret = 0; |
7626 | 7626 | ||
@@ -7635,7 +7635,7 @@ static int ipw2100_wx_set_auth(struct net_device *dev, | |||
7635 | break; | 7635 | break; |
7636 | 7636 | ||
7637 | case IW_AUTH_TKIP_COUNTERMEASURES: | 7637 | case IW_AUTH_TKIP_COUNTERMEASURES: |
7638 | crypt = priv->ieee->crypt[priv->ieee->tx_keyidx]; | 7638 | crypt = priv->ieee->crypt_info.crypt[priv->ieee->crypt_info.tx_keyidx]; |
7639 | if (!crypt || !crypt->ops->set_flags || !crypt->ops->get_flags) | 7639 | if (!crypt || !crypt->ops->set_flags || !crypt->ops->get_flags) |
7640 | break; | 7640 | break; |
7641 | 7641 | ||
@@ -7712,7 +7712,7 @@ static int ipw2100_wx_get_auth(struct net_device *dev, | |||
7712 | { | 7712 | { |
7713 | struct ipw2100_priv *priv = ieee80211_priv(dev); | 7713 | struct ipw2100_priv *priv = ieee80211_priv(dev); |
7714 | struct ieee80211_device *ieee = priv->ieee; | 7714 | struct ieee80211_device *ieee = priv->ieee; |
7715 | struct ieee80211_crypt_data *crypt; | 7715 | struct lib80211_crypt_data *crypt; |
7716 | struct iw_param *param = &wrqu->param; | 7716 | struct iw_param *param = &wrqu->param; |
7717 | int ret = 0; | 7717 | int ret = 0; |
7718 | 7718 | ||
@@ -7728,7 +7728,7 @@ static int ipw2100_wx_get_auth(struct net_device *dev, | |||
7728 | break; | 7728 | break; |
7729 | 7729 | ||
7730 | case IW_AUTH_TKIP_COUNTERMEASURES: | 7730 | case IW_AUTH_TKIP_COUNTERMEASURES: |
7731 | crypt = priv->ieee->crypt[priv->ieee->tx_keyidx]; | 7731 | crypt = priv->ieee->crypt_info.crypt[priv->ieee->crypt_info.tx_keyidx]; |
7732 | if (!crypt || !crypt->ops->get_flags) { | 7732 | if (!crypt || !crypt->ops->get_flags) { |
7733 | IPW_DEBUG_WARNING("Can't get TKIP countermeasures: " | 7733 | IPW_DEBUG_WARNING("Can't get TKIP countermeasures: " |
7734 | "crypt not set!\n"); | 7734 | "crypt not set!\n"); |
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index 6ca0f1c05048..d2a2b7586d08 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
@@ -6600,7 +6600,7 @@ static int ipw_wx_set_auth(struct net_device *dev, | |||
6600 | struct ipw_priv *priv = ieee80211_priv(dev); | 6600 | struct ipw_priv *priv = ieee80211_priv(dev); |
6601 | struct ieee80211_device *ieee = priv->ieee; | 6601 | struct ieee80211_device *ieee = priv->ieee; |
6602 | struct iw_param *param = &wrqu->param; | 6602 | struct iw_param *param = &wrqu->param; |
6603 | struct ieee80211_crypt_data *crypt; | 6603 | struct lib80211_crypt_data *crypt; |
6604 | unsigned long flags; | 6604 | unsigned long flags; |
6605 | int ret = 0; | 6605 | int ret = 0; |
6606 | 6606 | ||
@@ -6622,7 +6622,7 @@ static int ipw_wx_set_auth(struct net_device *dev, | |||
6622 | break; | 6622 | break; |
6623 | 6623 | ||
6624 | case IW_AUTH_TKIP_COUNTERMEASURES: | 6624 | case IW_AUTH_TKIP_COUNTERMEASURES: |
6625 | crypt = priv->ieee->crypt[priv->ieee->tx_keyidx]; | 6625 | crypt = priv->ieee->crypt_info.crypt[priv->ieee->crypt_info.tx_keyidx]; |
6626 | if (!crypt || !crypt->ops->set_flags || !crypt->ops->get_flags) | 6626 | if (!crypt || !crypt->ops->set_flags || !crypt->ops->get_flags) |
6627 | break; | 6627 | break; |
6628 | 6628 | ||
@@ -6699,7 +6699,7 @@ static int ipw_wx_get_auth(struct net_device *dev, | |||
6699 | { | 6699 | { |
6700 | struct ipw_priv *priv = ieee80211_priv(dev); | 6700 | struct ipw_priv *priv = ieee80211_priv(dev); |
6701 | struct ieee80211_device *ieee = priv->ieee; | 6701 | struct ieee80211_device *ieee = priv->ieee; |
6702 | struct ieee80211_crypt_data *crypt; | 6702 | struct lib80211_crypt_data *crypt; |
6703 | struct iw_param *param = &wrqu->param; | 6703 | struct iw_param *param = &wrqu->param; |
6704 | int ret = 0; | 6704 | int ret = 0; |
6705 | 6705 | ||
@@ -6715,7 +6715,7 @@ static int ipw_wx_get_auth(struct net_device *dev, | |||
6715 | break; | 6715 | break; |
6716 | 6716 | ||
6717 | case IW_AUTH_TKIP_COUNTERMEASURES: | 6717 | case IW_AUTH_TKIP_COUNTERMEASURES: |
6718 | crypt = priv->ieee->crypt[priv->ieee->tx_keyidx]; | 6718 | crypt = priv->ieee->crypt_info.crypt[priv->ieee->crypt_info.tx_keyidx]; |
6719 | if (!crypt || !crypt->ops->get_flags) | 6719 | if (!crypt || !crypt->ops->get_flags) |
6720 | break; | 6720 | break; |
6721 | 6721 | ||
@@ -10251,8 +10251,8 @@ static int ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb, | |||
10251 | case SEC_LEVEL_1: | 10251 | case SEC_LEVEL_1: |
10252 | tfd->u.data.tfd.tfd_24.mchdr.frame_ctl |= | 10252 | tfd->u.data.tfd.tfd_24.mchdr.frame_ctl |= |
10253 | cpu_to_le16(IEEE80211_FCTL_PROTECTED); | 10253 | cpu_to_le16(IEEE80211_FCTL_PROTECTED); |
10254 | tfd->u.data.key_index = priv->ieee->tx_keyidx; | 10254 | tfd->u.data.key_index = priv->ieee->crypt_info.tx_keyidx; |
10255 | if (priv->ieee->sec.key_sizes[priv->ieee->tx_keyidx] <= | 10255 | if (priv->ieee->sec.key_sizes[priv->ieee->crypt_info.tx_keyidx] <= |
10256 | 40) | 10256 | 40) |
10257 | tfd->u.data.key_index |= DCT_WEP_KEY_64Bit; | 10257 | tfd->u.data.key_index |= DCT_WEP_KEY_64Bit; |
10258 | else | 10258 | else |