net: use netdev_mc_count and netdev_mc_empty when appropriate
[safe/jmp/linux-2.6] / drivers / net / arm / ks8695net.c
index 0073d19..1dc181a 100644 (file)
@@ -433,24 +433,16 @@ ks8695_rx_irq(int irq, void *dev_id)
 {
        struct net_device *ndev = (struct net_device *)dev_id;
        struct ks8695_priv *ksp = netdev_priv(ndev);
-       unsigned long status;
-
-       unsigned long mask_bit = 1 << ks8695_get_rx_enable_bit(ksp);
 
        spin_lock(&ksp->rx_lock);
 
-       status = readl(KS8695_IRQ_VA + KS8695_INTST);
-
-       /*clean rx status bit*/
-       writel(status | mask_bit , KS8695_IRQ_VA + KS8695_INTST);
-
-       if (status & mask_bit) {
-               if (napi_schedule_prep(&ksp->napi)) {
-                       /*disable rx interrupt*/
-                       status &= ~mask_bit;
-                       writel(status , KS8695_IRQ_VA + KS8695_INTEN);
-                       __napi_schedule(&ksp->napi);
-               }
+       if (napi_schedule_prep(&ksp->napi)) {
+               unsigned long status = readl(KS8695_IRQ_VA + KS8695_INTEN);
+               unsigned long mask_bit = 1 << ks8695_get_rx_enable_bit(ksp);
+               /*disable rx interrupt*/
+               status &= ~mask_bit;
+               writel(status , KS8695_IRQ_VA + KS8695_INTEN);
+               __napi_schedule(&ksp->napi);
        }
 
        spin_unlock(&ksp->rx_lock);
@@ -552,14 +544,13 @@ rx_finished:
                                ksp->next_rx_desc_read =
                                        (last_rx_processed + 1) &
                                        MAX_RX_DESC_MASK;
-
-                       /* And refill the buffers */
-                       ks8695_refill_rxbuffers(ksp);
-
-                       /* Kick the RX DMA engine, in case it became
-                        *  suspended */
-                       ks8695_writereg(ksp, KS8695_DRSC, 0);
        }
+       /* And refill the buffers */
+       ks8695_refill_rxbuffers(ksp);
+
+       /* Kick the RX DMA engine, in case it became
+        *  suspended */
+       ks8695_writereg(ksp, KS8695_DRSC, 0);
        return received;
 }
 
@@ -1216,7 +1207,7 @@ ks8695_set_multicast(struct net_device *ndev)
        if (ndev->flags & IFF_ALLMULTI) {
                /* enable all multicast mode */
                ctrl |= DRXC_RM;
-       } else if (ndev->mc_count > KS8695_NR_ADDRESSES) {
+       } else if (netdev_mc_count(ndev) > KS8695_NR_ADDRESSES) {
                /* more specific multicast addresses than can be
                 * handled in hardware
                 */
@@ -1225,7 +1216,7 @@ ks8695_set_multicast(struct net_device *ndev)
                /* enable specific multicasts */
                ctrl &= ~DRXC_RM;
                ks8695_init_partial_multicast(ksp, ndev->mc_list,
-                                             ndev->mc_count);
+                                             netdev_mc_count(ndev));
        }
 
        ks8695_writereg(ksp, KS8695_DRXC, ctrl);