if (dev->flags & IFF_PROMISC) {
                outb(RX_PROM, RX_CMD);
                inb(RX_STATUS);
-       } else if (dev->mc_list || dev->flags & IFF_ALLMULTI) {
+       } else if (!netdev_mc_empty(dev) || dev->flags & IFF_ALLMULTI) {
                /* Multicast or all multicast is the same */
                outb(RX_MULT, RX_CMD);
                inb(RX_STATUS);         /* Clear status. */
 
 static void elp_set_mc_list(struct net_device *dev)
 {
        elp_device *adapter = netdev_priv(dev);
-       struct dev_mc_list *dmi = dev->mc_list;
+       struct dev_mc_list *dmi;
        int i;
        unsigned long flags;
 
                /* if num_addrs==0 the list will be cleared */
                adapter->tx_pcb.command = CMD_LOAD_MULTICAST_LIST;
                adapter->tx_pcb.length = 6 * netdev_mc_count(dev);
-               for (i = 0; i < netdev_mc_count(dev); i++) {
-                       memcpy(adapter->tx_pcb.data.multicast[i], dmi->dmi_addr, 6);
-                       dmi = dmi->next;
-               }
+               i = 0;
+               netdev_for_each_mc_addr(dmi, dev)
+                       memcpy(adapter->tx_pcb.data.multicast[i++], dmi->dmi_addr, 6);
                adapter->got[CMD_LOAD_MULTICAST_LIST] = 0;
                if (!send_pcb(dev, &adapter->tx_pcb))
                        pr_err("%s: couldn't send set_multicast command\n", dev->name);
 
                        pr_debug("%s: Setting promiscuous mode.\n",
                               dev->name);
                new_mode = SetRxFilter | RxStation | RxMulticast | RxBroadcast | RxProm;
-       } else if ((dev->mc_list) || (dev->flags & IFF_ALLMULTI)) {
+       } else if (!netdev_mc_empty(dev) || dev->flags & IFF_ALLMULTI) {
                new_mode = SetRxFilter | RxStation | RxMulticast | RxBroadcast;
        } else
                new_mode = SetRxFilter | RxStation | RxBroadcast;
 
        volatile struct iasetup_cmd_struct *ias_cmd;
        volatile struct tdr_cmd_struct *tdr_cmd;
        volatile struct mcsetup_cmd_struct *mc_cmd;
-       struct dev_mc_list *dmi = dev->mc_list;
+       struct dev_mc_list *dmi;
        int num_addrs = netdev_mc_count(dev);
 
        ptr = (void *) ((char *) p->scb + sizeof(struct scb_struct));
                        mc_cmd->cmd_cmd = CMD_MCSETUP | CMD_LAST;
                        mc_cmd->cmd_link = 0xffff;
                        mc_cmd->mc_cnt = num_addrs * 6;
-                       for (i = 0; i < num_addrs; i++) {
-                               memcpy((char *) mc_cmd->mc_list[i], dmi->dmi_addr, 6);
-                               dmi = dmi->next;
-                       }
+                       i = 0;
+                       netdev_for_each_mc_addr(dmi, dev)
+                               memcpy((char *) mc_cmd->mc_list[i++], dmi->dmi_addr, 6);
                        p->scb->cbl_offset = make16(mc_cmd);
                        p->scb->cmd = CUC_START;
                        elmc_id_attn586();
 
        {
                unsigned char block[62];
                unsigned char *bp;
-               struct dev_mc_list *dmc=dev->mc_list;
-
-               int i;
+               struct dev_mc_list *dmc;
 
                if(retry==0)
                        lp->mc_list_valid = 0;
                        block[0]=netdev_mc_count(dev);
                        bp=block+2;
 
-                       for(i=0;i<netdev_mc_count(dev);i++)
-                       {
+                       netdev_for_each_mc_addr(dmc, dev) {
                                memcpy(bp, dmc->dmi_addr, 6);
                                bp+=6;
-                               dmc=dmc->next;
                        }
                        if(mc32_command_nowait(dev, 2, block,
                                               2+6*netdev_mc_count(dev))==-1)
 
                if (vortex_debug > 3)
                        pr_notice("%s: Setting promiscuous mode.\n", dev->name);
                new_mode = SetRxFilter|RxStation|RxMulticast|RxBroadcast|RxProm;
-       } else  if ((dev->mc_list)  ||  (dev->flags & IFF_ALLMULTI)) {
+       } else  if (!netdev_mc_empty(dev) || dev->flags & IFF_ALLMULTI) {
                new_mode = SetRxFilter|RxStation|RxMulticast|RxBroadcast;
        } else
                new_mode = SetRxFilter | RxStation | RxBroadcast;