diff options
Diffstat (limited to 'drivers')
| -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 |
