diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-03-26 18:35:50 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-03-26 18:35:50 -0700 |
commit | ee20a0dd5400e771ff93eb7f2bcc731eab1f377e (patch) | |
tree | 43743bd300a5b1ed94888881689e1d6a8ecac1e1 /drivers/net/dm9000.c | |
parent | d55a4528f7f607ca2872fec18574bc8cec060f05 (diff) | |
parent | 732c8bd590625e8bc0b88313b82930e336b2bec4 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (43 commits)
[IPSEC]: Fix BEET output
[ICMP]: Dst entry leak in icmp_send host re-lookup code (v2).
[AX25]: Remove obsolete references to BKL from TODO file.
[NET]: Fix multicast device ioctl checks
[IRDA]: Store irnet_socket termios properly.
[UML]: uml-net: don't set IFF_ALLMULTI in set_multicast_list
[VLAN]: Don't copy ALLMULTI/PROMISC flags from underlying device
netxen, phy/marvell, skge: minor checkpatch fixes
S2io: Handle TX completions on the same CPU as the sender for MIS-X interrupts
b44: Truncate PHY address
skge napi->poll() locking bug
rndis_host: fix oops when query for OID_GEN_PHYSICAL_MEDIUM fails
cxgb3: Fix lockdep problems with sge.reg_lock
ehea: Fix IPv6 support
dm9000: Support promisc and all-multi modes
dm9601: configure MAC to drop invalid (crc/length) packets
dm9601: add Hirose USB-100 device ID
Marvell PHY m88e1111 driver fix
netxen: fix rx dropped stats
netxen: remove low level tx lock
...
Diffstat (limited to 'drivers/net/dm9000.c')
-rw-r--r-- | drivers/net/dm9000.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index 1fe305ca2cf..b09a53de1c5 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c @@ -798,8 +798,6 @@ dm9000_init_dm9000(struct net_device *dev) /* Set address filter table */ dm9000_hash_table(dev); - /* Activate DM9000 */ - iow(db, DM9000_RCR, RCR_DIS_LONG | RCR_DIS_CRC | RCR_RXEN); /* Enable TX/RX interrupt mask */ iow(db, DM9000_IMR, IMR_PAR | IMR_PTM | IMR_PRM); @@ -1197,6 +1195,7 @@ dm9000_hash_table(struct net_device *dev) int i, oft; u32 hash_val; u16 hash_table[4]; + u8 rcr = RCR_DIS_LONG | RCR_DIS_CRC | RCR_RXEN; unsigned long flags; dm9000_dbg(db, 1, "entering %s\n", __func__); @@ -1213,6 +1212,12 @@ dm9000_hash_table(struct net_device *dev) /* broadcast address */ hash_table[3] = 0x8000; + if (dev->flags & IFF_PROMISC) + rcr |= RCR_PRMSC; + + if (dev->flags & IFF_ALLMULTI) + rcr |= RCR_ALL; + /* the multicast address in Hash Table : 64 bits */ for (i = 0; i < mc_cnt; i++, mcptr = mcptr->next) { hash_val = ether_crc_le(6, mcptr->dmi_addr) & 0x3f; @@ -1225,6 +1230,7 @@ dm9000_hash_table(struct net_device *dev) iow(db, oft++, hash_table[i] >> 8); } + iow(db, DM9000_RCR, rcr); spin_unlock_irqrestore(&db->lock, flags); } |