dm9000 trivial annotation
[sfrench/cifs-2.6.git] / drivers / net / dm9000.c
index 1fe305ca2cf0b42bb8a5a90e80918924a90ac2f8..d63cc93f055dfd2be2c8a493a514b20a743fd9fa 100644 (file)
@@ -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);
 
@@ -970,7 +968,7 @@ dm9000_interrupt(int irq, void *dev_id)
 struct dm9000_rxhdr {
        u8      RxPktReady;
        u8      RxStatus;
-       u16     RxLen;
+       __le16  RxLen;
 } __attribute__((__packed__));
 
 /*
@@ -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);
 }