diff options
Diffstat (limited to 'drivers/net/wireless/zd1211rw/zd_mac.c')
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_mac.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c index 4c5f78eac349..6753d240c168 100644 --- a/drivers/net/wireless/zd1211rw/zd_mac.c +++ b/drivers/net/wireless/zd1211rw/zd_mac.c | |||
@@ -156,17 +156,8 @@ void zd_mac_clear(struct zd_mac *mac) | |||
156 | static int reset_mode(struct zd_mac *mac) | 156 | static int reset_mode(struct zd_mac *mac) |
157 | { | 157 | { |
158 | struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac); | 158 | struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac); |
159 | struct zd_ioreq32 ioreqs[] = { | 159 | u32 filter = (ieee->iw_mode == IW_MODE_MONITOR) ? ~0 : STA_RX_FILTER; |
160 | { CR_RX_FILTER, STA_RX_FILTER }, | 160 | return zd_iowrite32(&mac->chip, CR_RX_FILTER, filter); |
161 | { CR_SNIFFER_ON, 0U }, | ||
162 | }; | ||
163 | |||
164 | if (ieee->iw_mode == IW_MODE_MONITOR) { | ||
165 | ioreqs[0].value = 0xffffffff; | ||
166 | ioreqs[1].value = 0x1; | ||
167 | } | ||
168 | |||
169 | return zd_iowrite32a(&mac->chip, ioreqs, ARRAY_SIZE(ioreqs)); | ||
170 | } | 161 | } |
171 | 162 | ||
172 | int zd_mac_open(struct net_device *netdev) | 163 | int zd_mac_open(struct net_device *netdev) |
@@ -974,14 +965,14 @@ static int is_data_packet_for_us(struct ieee80211_device *ieee, | |||
974 | switch (ieee->iw_mode) { | 965 | switch (ieee->iw_mode) { |
975 | case IW_MODE_ADHOC: | 966 | case IW_MODE_ADHOC: |
976 | if ((fc & (IEEE80211_FCTL_TODS|IEEE80211_FCTL_FROMDS)) != 0 || | 967 | if ((fc & (IEEE80211_FCTL_TODS|IEEE80211_FCTL_FROMDS)) != 0 || |
977 | memcmp(hdr->addr3, ieee->bssid, ETH_ALEN) != 0) | 968 | compare_ether_addr(hdr->addr3, ieee->bssid) != 0) |
978 | return 0; | 969 | return 0; |
979 | break; | 970 | break; |
980 | case IW_MODE_AUTO: | 971 | case IW_MODE_AUTO: |
981 | case IW_MODE_INFRA: | 972 | case IW_MODE_INFRA: |
982 | if ((fc & (IEEE80211_FCTL_TODS|IEEE80211_FCTL_FROMDS)) != | 973 | if ((fc & (IEEE80211_FCTL_TODS|IEEE80211_FCTL_FROMDS)) != |
983 | IEEE80211_FCTL_FROMDS || | 974 | IEEE80211_FCTL_FROMDS || |
984 | memcmp(hdr->addr2, ieee->bssid, ETH_ALEN) != 0) | 975 | compare_ether_addr(hdr->addr2, ieee->bssid) != 0) |
985 | return 0; | 976 | return 0; |
986 | break; | 977 | break; |
987 | default: | 978 | default: |
@@ -989,9 +980,9 @@ static int is_data_packet_for_us(struct ieee80211_device *ieee, | |||
989 | return 0; | 980 | return 0; |
990 | } | 981 | } |
991 | 982 | ||
992 | return memcmp(hdr->addr1, netdev->dev_addr, ETH_ALEN) == 0 || | 983 | return compare_ether_addr(hdr->addr1, netdev->dev_addr) == 0 || |
993 | (is_multicast_ether_addr(hdr->addr1) && | 984 | (is_multicast_ether_addr(hdr->addr1) && |
994 | memcmp(hdr->addr3, netdev->dev_addr, ETH_ALEN) != 0) || | 985 | compare_ether_addr(hdr->addr3, netdev->dev_addr) != 0) || |
995 | (netdev->flags & IFF_PROMISC); | 986 | (netdev->flags & IFF_PROMISC); |
996 | } | 987 | } |
997 | 988 | ||
@@ -1047,7 +1038,7 @@ static void update_qual_rssi(struct zd_mac *mac, | |||
1047 | hdr = (struct ieee80211_hdr_3addr *)buffer; | 1038 | hdr = (struct ieee80211_hdr_3addr *)buffer; |
1048 | if (length < offsetof(struct ieee80211_hdr_3addr, addr3)) | 1039 | if (length < offsetof(struct ieee80211_hdr_3addr, addr3)) |
1049 | return; | 1040 | return; |
1050 | if (memcmp(hdr->addr2, zd_mac_to_ieee80211(mac)->bssid, ETH_ALEN) != 0) | 1041 | if (compare_ether_addr(hdr->addr2, zd_mac_to_ieee80211(mac)->bssid) != 0) |
1051 | return; | 1042 | return; |
1052 | 1043 | ||
1053 | spin_lock_irqsave(&mac->lock, flags); | 1044 | spin_lock_irqsave(&mac->lock, flags); |