Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[pandora-kernel.git] / drivers / net / depca.c
index 8b0084d..f2015a8 100644 (file)
@@ -708,11 +708,11 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
 
        /* Tx & Rx descriptors (aligned to a quadword boundary) */
        offset = (offset + DEPCA_ALIGN) & ~DEPCA_ALIGN;
-       lp->rx_ring = (struct depca_rx_desc __iomem *) (lp->sh_mem + offset);
+       lp->rx_ring = lp->sh_mem + offset;
        lp->rx_ring_offset = offset;
 
        offset += (sizeof(struct depca_rx_desc) * NUM_RX_DESC);
-       lp->tx_ring = (struct depca_tx_desc __iomem *) (lp->sh_mem + offset);
+       lp->tx_ring = lp->sh_mem + offset;
        lp->tx_ring_offset = offset;
 
        offset += (sizeof(struct depca_tx_desc) * NUM_TX_DESC);
@@ -1073,13 +1073,13 @@ static int depca_rx(struct net_device *dev)
                                                        i = DEPCA_PKT_STAT_SZ;
                                                }
                                        }
-                                       if (buf[0] & 0x01) {    /* Multicast/Broadcast */
-                                               if ((*(s16 *) & buf[0] == -1) && (*(s16 *) & buf[2] == -1) && (*(s16 *) & buf[4] == -1)) {
+                                       if (is_multicast_ether_addr(buf)) {
+                                               if (is_broadcast_ether_addr(buf)) {
                                                        lp->pktStats.broadcast++;
                                                } else {
                                                        lp->pktStats.multicast++;
                                                }
-                                       } else if ((*(s16 *) & buf[0] == *(s16 *) & dev->dev_addr[0]) && (*(s16 *) & buf[2] == *(s16 *) & dev->dev_addr[2]) && (*(s16 *) & buf[4] == *(s16 *) & dev->dev_addr[4])) {
+                                       } else if (compare_ether_addr(buf, dev->dev_addr) == 0) {
                                                lp->pktStats.unicast++;
                                        }
 
@@ -1270,7 +1270,6 @@ static void SetMulticastFilter(struct net_device *dev)
 {
        struct depca_private *lp = netdev_priv(dev);
        struct netdev_hw_addr *ha;
-       char *addrs;
        int i, j, bit, byte;
        u16 hashcode;
        u32 crc;
@@ -1285,19 +1284,15 @@ static void SetMulticastFilter(struct net_device *dev)
                }
                /* Add multicast addresses */
                netdev_for_each_mc_addr(ha, dev) {
-                       addrs = ha->addr;
-                       if ((*addrs & 0x01) == 1) {     /* multicast address? */
-                               crc = ether_crc(ETH_ALEN, addrs);
-                               hashcode = (crc & 1);   /* hashcode is 6 LSb of CRC ... */
-                               for (j = 0; j < 5; j++) {       /* ... in reverse order. */
-                                       hashcode = (hashcode << 1) | ((crc >>= 1) & 1);
-                               }
-
-
-                               byte = hashcode >> 3;   /* bit[3-5] -> byte in filter */
-                               bit = 1 << (hashcode & 0x07);   /* bit[0-2] -> bit in byte */
-                               lp->init_block.mcast_table[byte] |= bit;
+                       crc = ether_crc(ETH_ALEN, ha->addr);
+                       hashcode = (crc & 1);   /* hashcode is 6 LSb of CRC ... */
+                       for (j = 0; j < 5; j++) {       /* ... in reverse order. */
+                               hashcode = (hashcode << 1) | ((crc >>= 1) & 1);
                        }
+
+                       byte = hashcode >> 3;   /* bit[3-5] -> byte in filter */
+                       bit = 1 << (hashcode & 0x07);   /* bit[0-2] -> bit in byte */
+                       lp->init_block.mcast_table[byte] |= bit;
                }
        }
 }