static void set_multicast_list(struct net_device *dev) { netif_stop_queue(dev); ni_disint(); alloc586(dev); init586(dev); startrecv586(dev); ni_enaint(); netif_wake_queue(dev); }
static int ni52_open(struct net_device *dev) { int ret; ni_disint(); alloc586(dev); init586(dev); startrecv586(dev); ni_enaint(); ret = request_irq(dev->irq, ni52_interrupt, 0, dev->name, dev); if (ret) { ni_reset586(); return ret; } netif_start_queue(dev); return 0; /* */ }
static irqreturn_t ni52_interrupt(int irq,void *dev_id,struct pt_regs *reg_ptr) { struct net_device *dev = dev_id; unsigned short stat; int cnt=0; struct priv *p; if (!dev) { printk ("ni5210-interrupt: irq %d for unknown device.\n",irq); return IRQ_NONE; } p = (struct priv *) dev->priv; if(debuglevel > 1) printk("I"); WAIT_4_SCB_CMD(); /* wait for last command */ while((stat=p->scb->cus & STAT_MASK)) { p->scb->cmd_cuc = stat; ni_attn586(); if(stat & STAT_FR) /* received a frame */ ni52_rcv_int(dev); if(stat & STAT_RNR) /* RU went 'not ready' */ { printk("(R)"); if(p->scb->rus & RU_SUSPEND) /* special case: RU_SUSPEND */ { WAIT_4_SCB_CMD(); p->scb->cmd_ruc = RUC_RESUME; ni_attn586(); WAIT_4_SCB_CMD_RUC(); } else { printk("%s: Receiver-Unit went 'NOT READY': %04x/%02x.\n",dev->name,(int) stat,(int) p->scb->rus); ni52_rnr_int(dev); } } if(stat & STAT_CX) /* command with I-bit set complete */ ni52_xmt_int(dev); #ifndef NO_NOPCOMMANDS if(stat & STAT_CNA) /* CU went 'not ready' */ { if(netif_running(dev)) printk("%s: oops! CU has left active state. stat: %04x/%02x.\n",dev->name,(int) stat,(int) p->scb->cus); } #endif if(debuglevel > 1) printk("%d",cnt++); WAIT_4_SCB_CMD(); /* wait for ack. (ni52_xmt_int can be faster than ack!!) */ if(p->scb->cmd_cuc) /* timed out? */ { printk("%s: Acknowledge timed out.\n",dev->name); ni_disint(); break; } } if(debuglevel > 1) printk("i"); return IRQ_HANDLED; }
static irqreturn_t ni52_interrupt(int irq, void *dev_id) { struct net_device *dev = dev_id; unsigned int stat; int cnt = 0; struct priv *p; p = netdev_priv(dev); if (debuglevel > 1) printk("I"); spin_lock(&p->spinlock); wait_for_scb_cmd(dev); /* */ while ((stat = readb(&p->scb->cus) & STAT_MASK)) { writeb(stat, &p->scb->cmd_cuc); ni_attn586(); if (stat & STAT_FR) /* */ ni52_rcv_int(dev); if (stat & STAT_RNR) { /* */ printk("(R)"); if (readb(&p->scb->rus) & RU_SUSPEND) { /* */ wait_for_scb_cmd(dev); writeb(RUC_RESUME, &p->scb->cmd_ruc); ni_attn586(); wait_for_scb_cmd_ruc(dev); } else { printk(KERN_ERR "%s: Receiver-Unit went 'NOT READY': %04x/%02x.\n", dev->name, stat, readb(&p->scb->rus)); ni52_rnr_int(dev); } } /* */ if (stat & STAT_CX) ni52_xmt_int(dev); #ifndef NO_NOPCOMMANDS if (stat & STAT_CNA) { /* */ if (netif_running(dev)) printk(KERN_ERR "%s: oops! CU has left active state. stat: %04x/%02x.\n", dev->name, stat, readb(&p->scb->cus)); } #endif if (debuglevel > 1) printk("%d", cnt++); /* */ wait_for_scb_cmd(dev); if (readb(&p->scb->cmd_cuc)) { /* */ printk(KERN_ERR "%s: Acknowledge timed out.\n", dev->name); ni_disint(); break; } } spin_unlock(&p->spinlock); if (debuglevel > 1) printk("i"); return IRQ_HANDLED; }