alonglkj 发表于 2014-03-28 18:00

static irqreturn_t dm9000_interrupt(int irq, void *dev_id)
{
        struct net_device *dev = dev_id;
        board_info_t *db = netdev_priv(dev);
        int int_status;
        unsigned long flags;
        u8 reg_save;
   
        dm9000_dbg(db, 3, "entering %s\n", __func__);

        /* A real interrupt coming */

        /* holders of db->lock must always block IRQs */
        spin_lock_irqsave(&db->lock, flags);

        /* Save previous register address */
        reg_save = readb(db->io_addr);

        /* Disable all interrupts */
        iow(db, DM9000_IMR, IMR_PAR);

        /* Got DM9000 interrupt status */
        int_status = ior(db, DM9000_ISR);        /* Got ISR */
        iow(db, DM9000_ISR, int_status);        /* Clear ISR status */

        if (netif_msg_intr(db))
                dev_dbg(db->dev, "interrupt status %02x\n", int_status);

        /* Received the coming packet */
        if (int_status & ISR_PRS)
                dm9000_rx(dev);

        /* Trnasmit Interrupt check */
        if (int_status & ISR_PTS)
                dm9000_tx_done(dev, db);

        if (db->type != TYPE_DM9000E) {
                if (int_status & ISR_LNKCHNG) {
                        /* fire a link-change request */
                        schedule_delayed_work(&db->phy_poll, 1);
                }
        }

        /* Re-enable interrupt mask */
        iow(db, DM9000_IMR, db->imr_all);

        /* Restore previous register address */
        writeb(reg_save, db->io_addr);

        spin_unlock_irqrestore(&db->lock, flags);

        return IRQ_HANDLED;
}
当把网线插上(不通)的网口的时候,会不停的进入这个中断函数但是不会进入dm9000_rx,int_status的值等于0,但是当网线插上能通的那个网口上的时候,也进这个中断函数,但是int_status=1;然后进入dm9000_rx函数,怎么会这样呢?
页: 1 [2]
查看完整版本: dm9000 双网卡