--- skge.c.orig 2008-12-23 11:11:58.000000000 +0100 +++ skge.c 2009-03-03 13:19:55.249359585 +0100 @@ -2559,6 +2559,10 @@ static void skge_qset(struct skge_port * skge_write32(hw, Q_ADDR(q, Q_DA_L), (u32)base); } + +static irqreturn_t skge_intr(int, void *); + + static int skge_up(struct net_device *dev) { struct skge_port *skge = netdev_priv(dev); @@ -2640,6 +2644,14 @@ static int skge_up(struct net_device *de spin_unlock_irq(&hw->hw_lock); napi_enable(&skge->napi); + + printk("enabling irq_: %d\n",hw->pdev->irq); + err = request_irq(hw->pdev->irq, skge_intr, IRQF_SHARED, dev->name, hw); + if (err) { + dev_err(&hw->pdev->dev, "%s: cannot assign irq %d\n", dev->name, hw->pdev->irq); + goto free_rx_ring; + } + return 0; free_rx_ring: @@ -2649,6 +2661,9 @@ static int skge_up(struct net_device *de pci_free_consistent(hw->pdev, skge->mem_size, skge->mem, skge->dma); skge->mem = NULL; + + + return err; } @@ -2735,6 +2750,12 @@ static int skge_down(struct net_device * kfree(skge->tx_ring.start); pci_free_consistent(hw->pdev, skge->mem_size, skge->mem, skge->dma); skge->mem = NULL; + + + printk("disabling irq_: %d\n",hw->pdev->irq); + free_irq(hw->pdev->irq, hw); + + return 0; } @@ -3963,12 +3984,14 @@ static int __devinit skge_probe(struct p goto err_out_free_netdev; } +#if 0 err = request_irq(pdev->irq, skge_intr, IRQF_SHARED, dev->name, hw); if (err) { dev_err(&pdev->dev, "%s: cannot assign irq %d\n", dev->name, pdev->irq); goto err_out_unregister; } +#endif skge_show_addr(dev); if (hw->ports > 1 && (dev1 = skge_devinit(hw, 1, using_dac))) { @@ -4030,7 +4053,9 @@ static void __devexit skge_remove(struct skge_write16(hw, B0_LED, LED_STAT_OFF); skge_write8(hw, B0_CTST, CS_RST_SET); +#if 0 free_irq(pdev->irq, hw); +#endif pci_release_regions(pdev); pci_disable_device(pdev); if (dev1)