X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fnet%2Fni65.c;h=1578f4d984987eed6dfd0320b961721df4fe8068;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=1dffbbf83ccb76b5efce888f0b4f18b5794db471;hpb=6a77f38946aaee1cd85eeec6cf4229b204c15071;p=linux-2.6.git diff --git a/drivers/net/ni65.c b/drivers/net/ni65.c index 1dffbbf83..1578f4d98 100644 --- a/drivers/net/ni65.c +++ b/drivers/net/ni65.c @@ -248,7 +248,7 @@ struct priv }; static int ni65_probe1(struct net_device *dev,int); -static irqreturn_t ni65_interrupt(int irq, void * dev_id, struct pt_regs *regs); +static irqreturn_t ni65_interrupt(int irq, void * dev_id); static void ni65_recv_intr(struct net_device *dev,int); static void ni65_xmit_intr(struct net_device *dev,int); static int ni65_open(struct net_device *dev); @@ -324,7 +324,7 @@ static int ni65_close(struct net_device *dev) struct priv *p = (struct priv *) dev->priv; netif_stop_queue(dev); - + outw(inw(PORT+L_RESET),PORT+L_RESET); /* that's the hard way */ #ifdef XMT_VIA_SKB @@ -489,20 +489,20 @@ static int __init ni65_probe1(struct net_device *dev,int ioaddr) int dma = dmatab[i]; if(test_bit(dma,&dma_channels) || request_dma(dma,"ni6510")) continue; - + flags=claim_dma_lock(); disable_dma(dma); set_dma_mode(dma,DMA_MODE_CASCADE); enable_dma(dma); release_dma_lock(flags); - + ni65_init_lance(p,dev->dev_addr,0,0); /* trigger memory access */ - + flags=claim_dma_lock(); disable_dma(dma); free_dma(dma); release_dma_lock(flags); - + if(readreg(CSR0) & CSR0_IDON) break; } @@ -526,8 +526,7 @@ static int __init ni65_probe1(struct net_device *dev,int ioaddr) ni65_init_lance(p,dev->dev_addr,0,0); irq_mask = probe_irq_on(); writereg(CSR0_INIT|CSR0_INEA,CSR0); /* trigger interrupt */ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(HZ/50); + msleep(20); dev->irq = probe_irq_off(irq_mask); if(!dev->irq) { @@ -697,8 +696,7 @@ static void ni65_free_buffer(struct priv *p) return; for(i=0;itmdbounce[i]) - kfree(p->tmdbounce[i]); + kfree(p->tmdbounce[i]); #ifdef XMT_VIA_SKB if(p->tmd_skb[i]) dev_kfree_skb(p->tmd_skb[i]); @@ -711,12 +709,10 @@ static void ni65_free_buffer(struct priv *p) if(p->recv_skb[i]) dev_kfree_skb(p->recv_skb[i]); #else - if(p->recvbounce[i]) - kfree(p->recvbounce[i]); + kfree(p->recvbounce[i]); #endif } - if(p->self) - kfree(p->self); + kfree(p->self); } @@ -875,7 +871,7 @@ static int ni65_lance_reinit(struct net_device *dev) /* * interrupt handler */ -static irqreturn_t ni65_interrupt(int irq, void * dev_id, struct pt_regs * regs) +static irqreturn_t ni65_interrupt(int irq, void * dev_id) { int csr0 = 0; struct net_device *dev = dev_id; @@ -885,7 +881,7 @@ static irqreturn_t ni65_interrupt(int irq, void * dev_id, struct pt_regs * regs) p = (struct priv *) dev->priv; spin_lock(&p->ring_lock); - + while(--bcnt) { csr0 = inw(PORT+L_DATAREG); @@ -1143,7 +1139,7 @@ static void ni65_recv_intr(struct net_device *dev,int csr0) /* * kick xmitter .. */ - + static void ni65_timeout(struct net_device *dev) { int i; @@ -1167,7 +1163,7 @@ static int ni65_send_packet(struct sk_buff *skb, struct net_device *dev) struct priv *p = (struct priv *) dev->priv; netif_stop_queue(dev); - + if (test_and_set_bit(0, (void*)&p->lock)) { printk(KERN_ERR "%s: Queue was locked.\n", dev->name); return 1; @@ -1213,10 +1209,10 @@ static int ni65_send_packet(struct sk_buff *skb, struct net_device *dev) if(p->tmdnum != p->tmdlast) netif_wake_queue(dev); - + p->lock = 0; dev->trans_start = jiffies; - + spin_unlock_irqrestore(&p->ring_lock, flags); } @@ -1257,13 +1253,13 @@ MODULE_PARM_DESC(irq, "ni6510 IRQ number (ignored for some cards)"); MODULE_PARM_DESC(io, "ni6510 I/O base address"); MODULE_PARM_DESC(dma, "ni6510 ISA DMA channel (ignored for some cards)"); -int init_module(void) +int __init init_module(void) { dev_ni65 = ni65_probe(-1); return IS_ERR(dev_ni65) ? PTR_ERR(dev_ni65) : 0; } -void cleanup_module(void) +void __exit cleanup_module(void) { unregister_netdev(dev_ni65); cleanup_card(dev_ni65);