diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2008-10-30 17:09:54 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-11-10 15:11:56 -0500 |
commit | 2c706002fc147decdba2658ea48e4436faca3af2 (patch) | |
tree | 3e515fa59e6f7de045579f103cba09cd05293de7 /drivers/net/wireless/atmel.c | |
parent | 9b1fbae4b242cf86a878771eb59dc600dde72ec8 (diff) |
don't use net/ieee80211.h
Convert all the drivers using net/ieee80211.h to use linux/ieee80211.h.
Contains a bugfix in libertas where the SSID parsing could overrun the
buffer when the AP sends invalid information.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Acked-by: Dan Williams <dcbw@redhat.com> [airo, libertas]
Acked-by: Pavel Roskin <proski@gnu.org> [orinoco]
Acked-by: David Kilroy <kilroyd@googlemail.com> [orinoco]
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/atmel.c')
-rw-r--r-- | drivers/net/wireless/atmel.c | 70 |
1 files changed, 35 insertions, 35 deletions
diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c index d16931589f81..3962b553fbf1 100644 --- a/drivers/net/wireless/atmel.c +++ b/drivers/net/wireless/atmel.c | |||
@@ -67,7 +67,7 @@ | |||
67 | #include <linux/moduleparam.h> | 67 | #include <linux/moduleparam.h> |
68 | #include <linux/firmware.h> | 68 | #include <linux/firmware.h> |
69 | #include <linux/jiffies.h> | 69 | #include <linux/jiffies.h> |
70 | #include <net/ieee80211.h> | 70 | #include <linux/ieee80211.h> |
71 | #include "atmel.h" | 71 | #include "atmel.h" |
72 | 72 | ||
73 | #define DRIVER_MAJOR 0 | 73 | #define DRIVER_MAJOR 0 |
@@ -569,7 +569,7 @@ static void atmel_wmem32(struct atmel_private *priv, u16 pos, u32 data); | |||
569 | static void atmel_command_irq(struct atmel_private *priv); | 569 | static void atmel_command_irq(struct atmel_private *priv); |
570 | static int atmel_validate_channel(struct atmel_private *priv, int channel); | 570 | static int atmel_validate_channel(struct atmel_private *priv, int channel); |
571 | static void atmel_management_frame(struct atmel_private *priv, | 571 | static void atmel_management_frame(struct atmel_private *priv, |
572 | struct ieee80211_hdr_4addr *header, | 572 | struct ieee80211_hdr *header, |
573 | u16 frame_len, u8 rssi); | 573 | u16 frame_len, u8 rssi); |
574 | static void atmel_management_timer(u_long a); | 574 | static void atmel_management_timer(u_long a); |
575 | static void atmel_send_command(struct atmel_private *priv, int command, | 575 | static void atmel_send_command(struct atmel_private *priv, int command, |
@@ -577,7 +577,7 @@ static void atmel_send_command(struct atmel_private *priv, int command, | |||
577 | static int atmel_send_command_wait(struct atmel_private *priv, int command, | 577 | static int atmel_send_command_wait(struct atmel_private *priv, int command, |
578 | void *cmd, int cmd_size); | 578 | void *cmd, int cmd_size); |
579 | static void atmel_transmit_management_frame(struct atmel_private *priv, | 579 | static void atmel_transmit_management_frame(struct atmel_private *priv, |
580 | struct ieee80211_hdr_4addr *header, | 580 | struct ieee80211_hdr *header, |
581 | u8 *body, int body_len); | 581 | u8 *body, int body_len); |
582 | 582 | ||
583 | static u8 atmel_get_mib8(struct atmel_private *priv, u8 type, u8 index); | 583 | static u8 atmel_get_mib8(struct atmel_private *priv, u8 type, u8 index); |
@@ -785,7 +785,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev) | |||
785 | { | 785 | { |
786 | static const u8 SNAP_RFC1024[6] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; | 786 | static const u8 SNAP_RFC1024[6] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; |
787 | struct atmel_private *priv = netdev_priv(dev); | 787 | struct atmel_private *priv = netdev_priv(dev); |
788 | struct ieee80211_hdr_4addr header; | 788 | struct ieee80211_hdr header; |
789 | unsigned long flags; | 789 | unsigned long flags; |
790 | u16 buff, frame_ctl, len = (ETH_ZLEN < skb->len) ? skb->len : ETH_ZLEN; | 790 | u16 buff, frame_ctl, len = (ETH_ZLEN < skb->len) ? skb->len : ETH_ZLEN; |
791 | 791 | ||
@@ -823,7 +823,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev) | |||
823 | 823 | ||
824 | frame_ctl = IEEE80211_FTYPE_DATA; | 824 | frame_ctl = IEEE80211_FTYPE_DATA; |
825 | header.duration_id = 0; | 825 | header.duration_id = 0; |
826 | header.seq_ctl = 0; | 826 | header.seq_ctrl = 0; |
827 | if (priv->wep_is_on) | 827 | if (priv->wep_is_on) |
828 | frame_ctl |= IEEE80211_FCTL_PROTECTED; | 828 | frame_ctl |= IEEE80211_FCTL_PROTECTED; |
829 | if (priv->operating_mode == IW_MODE_ADHOC) { | 829 | if (priv->operating_mode == IW_MODE_ADHOC) { |
@@ -840,7 +840,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev) | |||
840 | if (priv->use_wpa) | 840 | if (priv->use_wpa) |
841 | memcpy(&header.addr4, SNAP_RFC1024, 6); | 841 | memcpy(&header.addr4, SNAP_RFC1024, 6); |
842 | 842 | ||
843 | header.frame_ctl = cpu_to_le16(frame_ctl); | 843 | header.frame_control = cpu_to_le16(frame_ctl); |
844 | /* Copy the wireless header into the card */ | 844 | /* Copy the wireless header into the card */ |
845 | atmel_copy_to_card(dev, buff, (unsigned char *)&header, DATA_FRAME_WS_HEADER_SIZE); | 845 | atmel_copy_to_card(dev, buff, (unsigned char *)&header, DATA_FRAME_WS_HEADER_SIZE); |
846 | /* Copy the packet sans its 802.3 header addresses which have been replaced */ | 846 | /* Copy the packet sans its 802.3 header addresses which have been replaced */ |
@@ -860,7 +860,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev) | |||
860 | } | 860 | } |
861 | 861 | ||
862 | static void atmel_transmit_management_frame(struct atmel_private *priv, | 862 | static void atmel_transmit_management_frame(struct atmel_private *priv, |
863 | struct ieee80211_hdr_4addr *header, | 863 | struct ieee80211_hdr *header, |
864 | u8 *body, int body_len) | 864 | u8 *body, int body_len) |
865 | { | 865 | { |
866 | u16 buff; | 866 | u16 buff; |
@@ -876,7 +876,7 @@ static void atmel_transmit_management_frame(struct atmel_private *priv, | |||
876 | } | 876 | } |
877 | 877 | ||
878 | static void fast_rx_path(struct atmel_private *priv, | 878 | static void fast_rx_path(struct atmel_private *priv, |
879 | struct ieee80211_hdr_4addr *header, | 879 | struct ieee80211_hdr *header, |
880 | u16 msdu_size, u16 rx_packet_loc, u32 crc) | 880 | u16 msdu_size, u16 rx_packet_loc, u32 crc) |
881 | { | 881 | { |
882 | /* fast path: unfragmented packet copy directly into skbuf */ | 882 | /* fast path: unfragmented packet copy directly into skbuf */ |
@@ -914,7 +914,7 @@ static void fast_rx_path(struct atmel_private *priv, | |||
914 | } | 914 | } |
915 | 915 | ||
916 | memcpy(skbp, header->addr1, 6); /* destination address */ | 916 | memcpy(skbp, header->addr1, 6); /* destination address */ |
917 | if (le16_to_cpu(header->frame_ctl) & IEEE80211_FCTL_FROMDS) | 917 | if (le16_to_cpu(header->frame_control) & IEEE80211_FCTL_FROMDS) |
918 | memcpy(&skbp[6], header->addr3, 6); | 918 | memcpy(&skbp[6], header->addr3, 6); |
919 | else | 919 | else |
920 | memcpy(&skbp[6], header->addr2, 6); /* source address */ | 920 | memcpy(&skbp[6], header->addr2, 6); /* source address */ |
@@ -949,7 +949,7 @@ static int probe_crc(struct atmel_private *priv, u16 packet_loc, u16 msdu_size) | |||
949 | } | 949 | } |
950 | 950 | ||
951 | static void frag_rx_path(struct atmel_private *priv, | 951 | static void frag_rx_path(struct atmel_private *priv, |
952 | struct ieee80211_hdr_4addr *header, | 952 | struct ieee80211_hdr *header, |
953 | u16 msdu_size, u16 rx_packet_loc, u32 crc, u16 seq_no, | 953 | u16 msdu_size, u16 rx_packet_loc, u32 crc, u16 seq_no, |
954 | u8 frag_no, int more_frags) | 954 | u8 frag_no, int more_frags) |
955 | { | 955 | { |
@@ -957,7 +957,7 @@ static void frag_rx_path(struct atmel_private *priv, | |||
957 | u8 source[6]; | 957 | u8 source[6]; |
958 | struct sk_buff *skb; | 958 | struct sk_buff *skb; |
959 | 959 | ||
960 | if (le16_to_cpu(header->frame_ctl) & IEEE80211_FCTL_FROMDS) | 960 | if (le16_to_cpu(header->frame_control) & IEEE80211_FCTL_FROMDS) |
961 | memcpy(source, header->addr3, 6); | 961 | memcpy(source, header->addr3, 6); |
962 | else | 962 | else |
963 | memcpy(source, header->addr2, 6); | 963 | memcpy(source, header->addr2, 6); |
@@ -1039,7 +1039,7 @@ static void frag_rx_path(struct atmel_private *priv, | |||
1039 | static void rx_done_irq(struct atmel_private *priv) | 1039 | static void rx_done_irq(struct atmel_private *priv) |
1040 | { | 1040 | { |
1041 | int i; | 1041 | int i; |
1042 | struct ieee80211_hdr_4addr header; | 1042 | struct ieee80211_hdr header; |
1043 | 1043 | ||
1044 | for (i = 0; | 1044 | for (i = 0; |
1045 | atmel_rmem8(priv, atmel_rx(priv, RX_DESC_FLAGS_OFFSET, priv->rx_desc_head)) == RX_DESC_FLAG_VALID && | 1045 | atmel_rmem8(priv, atmel_rx(priv, RX_DESC_FLAGS_OFFSET, priv->rx_desc_head)) == RX_DESC_FLAG_VALID && |
@@ -1066,10 +1066,10 @@ static void rx_done_irq(struct atmel_private *priv) | |||
1066 | goto next; | 1066 | goto next; |
1067 | } | 1067 | } |
1068 | 1068 | ||
1069 | /* Get header as far as end of seq_ctl */ | 1069 | /* Get header as far as end of seq_ctrl */ |
1070 | atmel_copy_to_host(priv->dev, (char *)&header, rx_packet_loc, 24); | 1070 | atmel_copy_to_host(priv->dev, (char *)&header, rx_packet_loc, 24); |
1071 | frame_ctl = le16_to_cpu(header.frame_ctl); | 1071 | frame_ctl = le16_to_cpu(header.frame_control); |
1072 | seq_control = le16_to_cpu(header.seq_ctl); | 1072 | seq_control = le16_to_cpu(header.seq_ctrl); |
1073 | 1073 | ||
1074 | /* probe for CRC use here if needed once five packets have | 1074 | /* probe for CRC use here if needed once five packets have |
1075 | arrived with the same crc status, we assume we know what's | 1075 | arrived with the same crc status, we assume we know what's |
@@ -1819,7 +1819,7 @@ static int atmel_set_encodeext(struct net_device *dev, | |||
1819 | /* Determine and validate the key index */ | 1819 | /* Determine and validate the key index */ |
1820 | idx = encoding->flags & IW_ENCODE_INDEX; | 1820 | idx = encoding->flags & IW_ENCODE_INDEX; |
1821 | if (idx) { | 1821 | if (idx) { |
1822 | if (idx < 1 || idx > WEP_KEYS) | 1822 | if (idx < 1 || idx > 4) |
1823 | return -EINVAL; | 1823 | return -EINVAL; |
1824 | idx--; | 1824 | idx--; |
1825 | } else | 1825 | } else |
@@ -1882,7 +1882,7 @@ static int atmel_get_encodeext(struct net_device *dev, | |||
1882 | 1882 | ||
1883 | idx = encoding->flags & IW_ENCODE_INDEX; | 1883 | idx = encoding->flags & IW_ENCODE_INDEX; |
1884 | if (idx) { | 1884 | if (idx) { |
1885 | if (idx < 1 || idx > WEP_KEYS) | 1885 | if (idx < 1 || idx > 4) |
1886 | return -EINVAL; | 1886 | return -EINVAL; |
1887 | idx--; | 1887 | idx--; |
1888 | } else | 1888 | } else |
@@ -2797,7 +2797,7 @@ static void handle_beacon_probe(struct atmel_private *priv, u16 capability, | |||
2797 | u8 channel) | 2797 | u8 channel) |
2798 | { | 2798 | { |
2799 | int rejoin = 0; | 2799 | int rejoin = 0; |
2800 | int new = capability & MFIE_TYPE_POWER_CONSTRAINT ? | 2800 | int new = capability & WLAN_CAPABILITY_SHORT_PREAMBLE ? |
2801 | SHORT_PREAMBLE : LONG_PREAMBLE; | 2801 | SHORT_PREAMBLE : LONG_PREAMBLE; |
2802 | 2802 | ||
2803 | if (priv->preamble != new) { | 2803 | if (priv->preamble != new) { |
@@ -2826,19 +2826,19 @@ static void handle_beacon_probe(struct atmel_private *priv, u16 capability, | |||
2826 | static void send_authentication_request(struct atmel_private *priv, u16 system, | 2826 | static void send_authentication_request(struct atmel_private *priv, u16 system, |
2827 | u8 *challenge, int challenge_len) | 2827 | u8 *challenge, int challenge_len) |
2828 | { | 2828 | { |
2829 | struct ieee80211_hdr_4addr header; | 2829 | struct ieee80211_hdr header; |
2830 | struct auth_body auth; | 2830 | struct auth_body auth; |
2831 | 2831 | ||
2832 | header.frame_ctl = cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_AUTH); | 2832 | header.frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_AUTH); |
2833 | header.duration_id = cpu_to_le16(0x8000); | 2833 | header.duration_id = cpu_to_le16(0x8000); |
2834 | header.seq_ctl = 0; | 2834 | header.seq_ctrl = 0; |
2835 | memcpy(header.addr1, priv->CurrentBSSID, 6); | 2835 | memcpy(header.addr1, priv->CurrentBSSID, 6); |
2836 | memcpy(header.addr2, priv->dev->dev_addr, 6); | 2836 | memcpy(header.addr2, priv->dev->dev_addr, 6); |
2837 | memcpy(header.addr3, priv->CurrentBSSID, 6); | 2837 | memcpy(header.addr3, priv->CurrentBSSID, 6); |
2838 | 2838 | ||
2839 | if (priv->wep_is_on && priv->CurrentAuthentTransactionSeqNum != 1) | 2839 | if (priv->wep_is_on && priv->CurrentAuthentTransactionSeqNum != 1) |
2840 | /* no WEP for authentication frames with TrSeqNo 1 */ | 2840 | /* no WEP for authentication frames with TrSeqNo 1 */ |
2841 | header.frame_ctl |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); | 2841 | header.frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); |
2842 | 2842 | ||
2843 | auth.alg = cpu_to_le16(system); | 2843 | auth.alg = cpu_to_le16(system); |
2844 | 2844 | ||
@@ -2861,7 +2861,7 @@ static void send_association_request(struct atmel_private *priv, int is_reassoc) | |||
2861 | { | 2861 | { |
2862 | u8 *ssid_el_p; | 2862 | u8 *ssid_el_p; |
2863 | int bodysize; | 2863 | int bodysize; |
2864 | struct ieee80211_hdr_4addr header; | 2864 | struct ieee80211_hdr header; |
2865 | struct ass_req_format { | 2865 | struct ass_req_format { |
2866 | __le16 capability; | 2866 | __le16 capability; |
2867 | __le16 listen_interval; | 2867 | __le16 listen_interval; |
@@ -2874,10 +2874,10 @@ static void send_association_request(struct atmel_private *priv, int is_reassoc) | |||
2874 | u8 rates[4]; | 2874 | u8 rates[4]; |
2875 | } body; | 2875 | } body; |
2876 | 2876 | ||
2877 | header.frame_ctl = cpu_to_le16(IEEE80211_FTYPE_MGMT | | 2877 | header.frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | |
2878 | (is_reassoc ? IEEE80211_STYPE_REASSOC_REQ : IEEE80211_STYPE_ASSOC_REQ)); | 2878 | (is_reassoc ? IEEE80211_STYPE_REASSOC_REQ : IEEE80211_STYPE_ASSOC_REQ)); |
2879 | header.duration_id = cpu_to_le16(0x8000); | 2879 | header.duration_id = cpu_to_le16(0x8000); |
2880 | header.seq_ctl = 0; | 2880 | header.seq_ctrl = 0; |
2881 | 2881 | ||
2882 | memcpy(header.addr1, priv->CurrentBSSID, 6); | 2882 | memcpy(header.addr1, priv->CurrentBSSID, 6); |
2883 | memcpy(header.addr2, priv->dev->dev_addr, 6); | 2883 | memcpy(header.addr2, priv->dev->dev_addr, 6); |
@@ -2887,7 +2887,7 @@ static void send_association_request(struct atmel_private *priv, int is_reassoc) | |||
2887 | if (priv->wep_is_on) | 2887 | if (priv->wep_is_on) |
2888 | body.capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); | 2888 | body.capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); |
2889 | if (priv->preamble == SHORT_PREAMBLE) | 2889 | if (priv->preamble == SHORT_PREAMBLE) |
2890 | body.capability |= cpu_to_le16(MFIE_TYPE_POWER_CONSTRAINT); | 2890 | body.capability |= cpu_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE); |
2891 | 2891 | ||
2892 | body.listen_interval = cpu_to_le16(priv->listen_interval * priv->beacon_period); | 2892 | body.listen_interval = cpu_to_le16(priv->listen_interval * priv->beacon_period); |
2893 | 2893 | ||
@@ -2901,10 +2901,10 @@ static void send_association_request(struct atmel_private *priv, int is_reassoc) | |||
2901 | bodysize = 12 + priv->SSID_size; | 2901 | bodysize = 12 + priv->SSID_size; |
2902 | } | 2902 | } |
2903 | 2903 | ||
2904 | ssid_el_p[0] = MFIE_TYPE_SSID; | 2904 | ssid_el_p[0] = WLAN_EID_SSID; |
2905 | ssid_el_p[1] = priv->SSID_size; | 2905 | ssid_el_p[1] = priv->SSID_size; |
2906 | memcpy(ssid_el_p + 2, priv->SSID, priv->SSID_size); | 2906 | memcpy(ssid_el_p + 2, priv->SSID, priv->SSID_size); |
2907 | ssid_el_p[2 + priv->SSID_size] = MFIE_TYPE_RATES; | 2907 | ssid_el_p[2 + priv->SSID_size] = WLAN_EID_SUPP_RATES; |
2908 | ssid_el_p[3 + priv->SSID_size] = 4; /* len of suported rates */ | 2908 | ssid_el_p[3 + priv->SSID_size] = 4; /* len of suported rates */ |
2909 | memcpy(ssid_el_p + 4 + priv->SSID_size, atmel_basic_rates, 4); | 2909 | memcpy(ssid_el_p + 4 + priv->SSID_size, atmel_basic_rates, 4); |
2910 | 2910 | ||
@@ -2912,9 +2912,9 @@ static void send_association_request(struct atmel_private *priv, int is_reassoc) | |||
2912 | } | 2912 | } |
2913 | 2913 | ||
2914 | static int is_frame_from_current_bss(struct atmel_private *priv, | 2914 | static int is_frame_from_current_bss(struct atmel_private *priv, |
2915 | struct ieee80211_hdr_4addr *header) | 2915 | struct ieee80211_hdr *header) |
2916 | { | 2916 | { |
2917 | if (le16_to_cpu(header->frame_ctl) & IEEE80211_FCTL_FROMDS) | 2917 | if (le16_to_cpu(header->frame_control) & IEEE80211_FCTL_FROMDS) |
2918 | return memcmp(header->addr3, priv->CurrentBSSID, 6) == 0; | 2918 | return memcmp(header->addr3, priv->CurrentBSSID, 6) == 0; |
2919 | else | 2919 | else |
2920 | return memcmp(header->addr2, priv->CurrentBSSID, 6) == 0; | 2920 | return memcmp(header->addr2, priv->CurrentBSSID, 6) == 0; |
@@ -2962,7 +2962,7 @@ static int retrieve_bss(struct atmel_private *priv) | |||
2962 | } | 2962 | } |
2963 | 2963 | ||
2964 | static void store_bss_info(struct atmel_private *priv, | 2964 | static void store_bss_info(struct atmel_private *priv, |
2965 | struct ieee80211_hdr_4addr *header, u16 capability, | 2965 | struct ieee80211_hdr *header, u16 capability, |
2966 | u16 beacon_period, u8 channel, u8 rssi, u8 ssid_len, | 2966 | u16 beacon_period, u8 channel, u8 rssi, u8 ssid_len, |
2967 | u8 *ssid, int is_beacon) | 2967 | u8 *ssid, int is_beacon) |
2968 | { | 2968 | { |
@@ -3001,7 +3001,7 @@ static void store_bss_info(struct atmel_private *priv, | |||
3001 | else if (capability & WLAN_CAPABILITY_ESS) | 3001 | else if (capability & WLAN_CAPABILITY_ESS) |
3002 | priv->BSSinfo[index].BSStype =IW_MODE_INFRA; | 3002 | priv->BSSinfo[index].BSStype =IW_MODE_INFRA; |
3003 | 3003 | ||
3004 | priv->BSSinfo[index].preamble = capability & MFIE_TYPE_POWER_CONSTRAINT ? | 3004 | priv->BSSinfo[index].preamble = capability & WLAN_CAPABILITY_SHORT_PREAMBLE ? |
3005 | SHORT_PREAMBLE : LONG_PREAMBLE; | 3005 | SHORT_PREAMBLE : LONG_PREAMBLE; |
3006 | } | 3006 | } |
3007 | 3007 | ||
@@ -3037,7 +3037,7 @@ static void authenticate(struct atmel_private *priv, u16 frame_len) | |||
3037 | } | 3037 | } |
3038 | } else if (system == WLAN_AUTH_SHARED_KEY) { | 3038 | } else if (system == WLAN_AUTH_SHARED_KEY) { |
3039 | if (trans_seq_no == 0x0002 && | 3039 | if (trans_seq_no == 0x0002 && |
3040 | auth->el_id == MFIE_TYPE_CHALLENGE) { | 3040 | auth->el_id == WLAN_EID_CHALLENGE) { |
3041 | send_authentication_request(priv, system, auth->chall_text, auth->chall_text_len); | 3041 | send_authentication_request(priv, system, auth->chall_text, auth->chall_text_len); |
3042 | return; | 3042 | return; |
3043 | } else if (trans_seq_no == 0x0004) { | 3043 | } else if (trans_seq_no == 0x0004) { |
@@ -3288,12 +3288,12 @@ static void atmel_smooth_qual(struct atmel_private *priv) | |||
3288 | 3288 | ||
3289 | /* deals with incoming managment frames. */ | 3289 | /* deals with incoming managment frames. */ |
3290 | static void atmel_management_frame(struct atmel_private *priv, | 3290 | static void atmel_management_frame(struct atmel_private *priv, |
3291 | struct ieee80211_hdr_4addr *header, | 3291 | struct ieee80211_hdr *header, |
3292 | u16 frame_len, u8 rssi) | 3292 | u16 frame_len, u8 rssi) |
3293 | { | 3293 | { |
3294 | u16 subtype; | 3294 | u16 subtype; |
3295 | 3295 | ||
3296 | subtype = le16_to_cpu(header->frame_ctl) & IEEE80211_FCTL_STYPE; | 3296 | subtype = le16_to_cpu(header->frame_control) & IEEE80211_FCTL_STYPE; |
3297 | switch (subtype) { | 3297 | switch (subtype) { |
3298 | case IEEE80211_STYPE_BEACON: | 3298 | case IEEE80211_STYPE_BEACON: |
3299 | case IEEE80211_STYPE_PROBE_RESP: | 3299 | case IEEE80211_STYPE_PROBE_RESP: |