spin_unlock_irqrestore(&db->lock, flags);
 }
 
+static void
+dm9000_mask_interrupts(board_info_t *db)
+{
+       iow(db, DM9000_IMR, IMR_PAR);
+}
+
+static void
+dm9000_unmask_interrupts(board_info_t *db)
+{
+       iow(db, DM9000_IMR, db->imr_all);
+}
+
 /*
  * Initialize dm9000 board
  */
        dm9000_dbg(db, 1, "entering %s\n", __func__);
 
        dm9000_reset(db);
+       dm9000_mask_interrupts(db);
 
        /* I/O mode */
        db->io_mode = ior(db, DM9000_ISR) >> 6; /* ISR bit7:6 keeps I/O mode */
 
        db->imr_all = imr;
 
-       /* Enable TX/RX interrupt mask */
-       iow(db, DM9000_IMR, imr);
-
        /* Init Driver variable */
        db->tx_pkt_cnt = 0;
        db->queue_pkt_len = 0;
 
        netif_stop_queue(dev);
        dm9000_init_dm9000(dev);
+       dm9000_unmask_interrupts(db);
        /* We can accept TX packets again */
        dev->trans_start = jiffies; /* prevent tx timeout */
        netif_wake_queue(dev);
        /* Save previous register address */
        reg_save = readb(db->io_addr);
 
-       /* Disable all interrupts */
-       iow(db, DM9000_IMR, IMR_PAR);
-
+       dm9000_mask_interrupts(db);
        /* Got DM9000 interrupt status */
        int_status = ior(db, DM9000_ISR);       /* Got ISR */
        iow(db, DM9000_ISR, int_status);        /* Clear ISR status */
                }
        }
 
-       /* Re-enable interrupt mask */
-       iow(db, DM9000_IMR, db->imr_all);
-
+       dm9000_unmask_interrupts(db);
        /* Restore previous register address */
        writeb(reg_save, db->io_addr);
 
 
        if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev))
                return -EAGAIN;
+       /* Now that we have an interrupt handler hooked up we can unmask
+        * our interrupts
+        */
+       dm9000_unmask_interrupts(db);
 
        /* Init driver variable */
        db->dbug_cnt = 0;
        /* RESET device */
        dm9000_phy_write(dev, 0, MII_BMCR, BMCR_RESET); /* PHY RESET */
        iow(db, DM9000_GPR, 0x01);      /* Power-Down PHY */
-       iow(db, DM9000_IMR, IMR_PAR);   /* Disable all interrupt */
+       dm9000_mask_interrupts(db);
        iow(db, DM9000_RCR, 0x00);      /* Disable RX */
 }
 
                         * the device was powered off it is in a known state */
                        if (!db->wake_state) {
                                dm9000_init_dm9000(ndev);
+                               dm9000_unmask_interrupts(db);
                        }
 
                        netif_device_attach(ndev);