static int suni_start(struct atm_dev *dev) { unsigned long flags; int first; spin_lock_irqsave(&sunis_lock,flags); first = !sunis; PRIV(dev)->next = sunis; sunis = PRIV(dev); spin_unlock_irqrestore(&sunis_lock,flags); memset(&PRIV(dev)->sonet_stats,0,sizeof(struct k_sonet_stats)); PUT(GET(RSOP_CIE) | SUNI_RSOP_CIE_LOSE,RSOP_CIE); /* interrupt on loss of signal */ poll_los(dev); /* ... and clear SUNI interrupts */ if (dev->signal == ATM_PHY_SIG_LOST) printk(KERN_WARNING "%s(itf %d): no signal\n",dev->type, dev->number); PRIV(dev)->loop_mode = ATM_LM_NONE; suni_hz(NULL); /* clear SUNI counters */ (void) fetch_stats(dev,NULL,1); /* clear kernel counters */ if (first) { timer_setup(&poll_timer, suni_hz, 0); poll_timer.expires = jiffies+HZ; #if 0 printk(KERN_DEBUG "[u] p=0x%lx,n=0x%lx\n",(unsigned long) poll_timer.list.prev, (unsigned long) poll_timer.list.next); #endif add_timer(&poll_timer); } return 0; }
static int suni_start(struct atm_dev *dev) { unsigned long flags; int first; spin_lock_irqsave(&sunis_lock,flags); first = !sunis; PRIV(dev)->next = sunis; sunis = PRIV(dev); spin_unlock_irqrestore(&sunis_lock,flags); memset(&PRIV(dev)->sonet_stats,0,sizeof(struct k_sonet_stats)); PUT(GET(RSOP_CIE) | SUNI_RSOP_CIE_LOSE,RSOP_CIE); poll_los(dev); if (dev->signal == ATM_PHY_SIG_LOST) printk(KERN_WARNING "%s(itf %d): no signal\n",dev->type, dev->number); PRIV(dev)->loop_mode = ATM_LM_NONE; suni_hz(0); (void) fetch_stats(dev,NULL,1); if (first) { init_timer(&poll_timer); poll_timer.expires = jiffies+HZ; poll_timer.function = suni_hz; poll_timer.data = 1; #if 0 printk(KERN_DEBUG "[u] p=0x%lx,n=0x%lx\n",(unsigned long) poll_timer.list.prev, (unsigned long) poll_timer.list.next); #endif add_timer(&poll_timer); } return 0; }
static void suni_int(struct atm_dev *dev) { poll_los(dev); printk(KERN_NOTICE "%s(itf %d): signal %s\n",dev->type,dev->number, dev->signal == ATM_PHY_SIG_LOST ? "lost" : "detected again"); }