Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 66428
b: refs/heads/master
c: c569123
h: refs/heads/master
v: v3
  • Loading branch information
Ulrich Kunitz authored and David S. Miller committed Oct 10, 2007
1 parent eaaad65 commit dc0d42e
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cc0b88cf5ecf13cdd750f08e201ce8fadcdb601f
refs/heads/master: c5691235cf70ae2bd71c1f445eb991191530ec6c
5 changes: 0 additions & 5 deletions trunk/drivers/net/wireless/zd1211rw/zd_chip.h
Original file line number Diff line number Diff line change
Expand Up @@ -871,11 +871,6 @@ static inline int zd_chip_set_basic_rates(struct zd_chip *chip, u16 cr_rates)
return r;
}

static inline int zd_chip_set_rx_filter(struct zd_chip *chip, u32 filter)
{
return zd_iowrite32(chip, CR_RX_FILTER, filter);
}

int zd_chip_lock_phy_regs(struct zd_chip *chip);
int zd_chip_unlock_phy_regs(struct zd_chip *chip);

Expand Down
44 changes: 38 additions & 6 deletions trunk/drivers/net/wireless/zd1211rw/zd_mac.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,13 +161,33 @@ void zd_mac_clear(struct zd_mac *mac)
ZD_MEMCLEAR(mac, sizeof(struct zd_mac));
}

static int reset_mode(struct zd_mac *mac)
static int set_rx_filter(struct zd_mac *mac)
{
struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
u32 filter = (ieee->iw_mode == IW_MODE_MONITOR) ? ~0 : STA_RX_FILTER;
return zd_iowrite32(&mac->chip, CR_RX_FILTER, filter);
}

static int set_sniffer(struct zd_mac *mac)
{
struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
return zd_iowrite32(&mac->chip, CR_SNIFFER_ON,
ieee->iw_mode == IW_MODE_MONITOR ? 1 : 0);
return 0;
}

static int set_mc_hash(struct zd_mac *mac)
{
struct zd_mc_hash hash;
struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);

zd_mc_clear(&hash);
if (ieee->iw_mode == IW_MODE_MONITOR)
zd_mc_add_all(&hash);

return zd_chip_set_multicast_hash(&mac->chip, &hash);
}

int zd_mac_open(struct net_device *netdev)
{
struct zd_mac *mac = zd_netdev_mac(netdev);
Expand All @@ -194,7 +214,13 @@ int zd_mac_open(struct net_device *netdev)
r = zd_chip_set_basic_rates(chip, CR_RATES_80211B | CR_RATES_80211G);
if (r < 0)
goto disable_int;
r = reset_mode(mac);
r = set_rx_filter(mac);
if (r)
goto disable_int;
r = set_sniffer(mac);
if (r)
goto disable_int;
r = set_mc_hash(mac);
if (r)
goto disable_int;
r = zd_chip_switch_radio_on(chip);
Expand Down Expand Up @@ -298,12 +324,14 @@ static void set_multicast_hash_handler(struct work_struct *work)

void zd_mac_set_multicast_list(struct net_device *dev)
{
struct zd_mc_hash hash;
struct zd_mac *mac = zd_netdev_mac(dev);
struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
struct zd_mc_hash hash;
struct dev_mc_list *mc;
unsigned long flags;

if (dev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
if (dev->flags & (IFF_PROMISC|IFF_ALLMULTI) ||
ieee->iw_mode == IW_MODE_MONITOR) {
zd_mc_add_all(&hash);
} else {
zd_mc_clear(&hash);
Expand Down Expand Up @@ -628,8 +656,12 @@ int zd_mac_set_mode(struct zd_mac *mac, u32 mode)
ieee->iw_mode = mode;
spin_unlock_irq(&ieee->lock);

if (netif_running(mac->netdev))
return reset_mode(mac);
if (netif_running(mac->netdev)) {
int r = set_rx_filter(mac);
if (r)
return r;
return set_sniffer(mac);
}

return 0;
}
Expand Down

0 comments on commit dc0d42e

Please sign in to comment.