--- 2.6/drivers/net/forcedeth.c 2004-05-10 04:31:59.000000000 +0200 +++ build-2.6/drivers/net/forcedeth.c 2004-06-06 10:31:43.826368991 +0200 @@ -1195,16 +1195,13 @@ enable_irq(dev->irq); } -static int nv_open(struct net_device *dev) +static void nv_reset(struct net_device *dev) { - struct fe_priv *np = get_nvpriv(dev); u8 *base = get_hwbase(dev); - int ret, oom, i; - dprintk(KERN_DEBUG "nv_open: begin\n"); + writel(0, base + NvRegIrqMask); + writel(NVREG_IRQSTAT_MASK, base + NvRegIrqStatus); - /* 1) erase previous misconfiguration */ - /* 4.1-1: stop adapter: ignored, 4.3 seems to be overkill */ writel(NVREG_MCASTADDRA_FORCE, base + NvRegMulticastAddrA); writel(0, base + NvRegMulticastAddrB); writel(0, base + NvRegMulticastMaskA); @@ -1215,6 +1212,20 @@ writel(0, base + NvRegUnknownTransmitterReg); nv_txrx_reset(dev); writel(0, base + NvRegUnknownSetupReg6); + pci_push(base); +} + +static int nv_open(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + u8 *base = get_hwbase(dev); + int ret, oom, i; + + dprintk(KERN_DEBUG "nv_open: begin\n"); + + /* 1) erase previous misconfiguration */ + /* 4.1-1: stop adapter: ignored, 4.3 seems to be overkill */ + nv_reset(dev); /* 2) initialize descriptor rings */ np->in_shutdown = 0; @@ -1506,6 +1517,11 @@ writel(0, base + NvRegWakeUpFlags); np->wolenabled = 0; +printk(KERN_ERR "forcedeth: irq line %d, Status 0x%8x, Mask %0x8x\n", + pci_dev->irq, readl(base + NvRegIrqStatus), + readl(base + NvRegIrqMask)); + nv_reset(dev); + np->tx_flags = cpu_to_le16(NV_TX_LASTPACKET|NV_TX_LASTPACKET1|NV_TX_VALID); if (id->driver_data & DEV_NEED_LASTPACKET1) np->tx_flags |= cpu_to_le16(NV_TX_LASTPACKET1);