[BACK]Return to ep93xx_intr.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / arm / ep93xx

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/arch/arm/ep93xx/ep93xx_intr.c between version 1.2 and 1.3

version 1.2, 2004/12/29 04:46:13 version 1.3, 2005/01/05 04:53:50
Line 476  ep93xx_intr_dispatch(struct clockframe *
Line 476  ep93xx_intr_dispatch(struct clockframe *
         u_int32_t               vic1_hwpend;          u_int32_t               vic1_hwpend;
         u_int32_t               vic2_hwpend;          u_int32_t               vic2_hwpend;
         int                     irq;          int                     irq;
         u_int32_t               ibit;  
   
         pcpl = current_spl_level;          pcpl = current_spl_level;
   
Line 490  ep93xx_intr_dispatch(struct clockframe *
Line 489  ep93xx_intr_dispatch(struct clockframe *
         vic1_hwpend &= ~vic1_imask[pcpl];          vic1_hwpend &= ~vic1_imask[pcpl];
         vic2_hwpend &= ~vic2_imask[pcpl];          vic2_hwpend &= ~vic2_imask[pcpl];
   
         while (vic1_hwpend) {          if (vic1_hwpend) {
                 irq = ffs(vic1_hwpend) - 1;                  irq = ffs(vic1_hwpend) - 1;
                 ibit = (1U << irq);  
   
                 iq = &intrq[irq];                  iq = &intrq[irq];
                 iq->iq_ev.ev_count++;                  iq->iq_ev.ev_count++;
                 uvmexp.intrs++;                  uvmexp.intrs++;
                 for (ih = TAILQ_FIRST(&iq->iq_list); ih != NULL;                  for (ih = TAILQ_FIRST(&iq->iq_list); ih != NULL;
                      ih = TAILQ_NEXT(ih, ih_list)) {                       ih = TAILQ_NEXT(ih, ih_list)) {
                         int     ipl;                          current_spl_level = ih->ih_ipl;
   
                         current_spl_level = ipl = ih->ih_ipl;  
                         oldirqstate = enable_interrupts(I32_bit);                          oldirqstate = enable_interrupts(I32_bit);
                         (void) (*ih->ih_func)(ih->ih_arg ? ih->ih_arg : frame);                          (void) (*ih->ih_func)(ih->ih_arg ? ih->ih_arg : frame);
                         restore_interrupts(oldirqstate);                          restore_interrupts(oldirqstate);
                         vic1_hwpend &= ~ibit;  
                 }                  }
         }          } else if (vic2_hwpend) {
         while (vic2_hwpend) {  
                 irq = ffs(vic2_hwpend) - 1;                  irq = ffs(vic2_hwpend) - 1;
                 ibit = (1U << irq);  
   
                 iq = &intrq[irq + VIC_NIRQ];                  iq = &intrq[irq + VIC_NIRQ];
                 iq->iq_ev.ev_count++;                  iq->iq_ev.ev_count++;
                 uvmexp.intrs++;                  uvmexp.intrs++;
                 for (ih = TAILQ_FIRST(&iq->iq_list); ih != NULL;                  for (ih = TAILQ_FIRST(&iq->iq_list); ih != NULL;
                      ih = TAILQ_NEXT(ih, ih_list)) {                       ih = TAILQ_NEXT(ih, ih_list)) {
                         int     ipl;                          current_spl_level = ih->ih_ipl;
   
                         current_spl_level = ipl = ih->ih_ipl;  
                         oldirqstate = enable_interrupts(I32_bit);                          oldirqstate = enable_interrupts(I32_bit);
                         (void) (*ih->ih_func)(ih->ih_arg ? ih->ih_arg : frame);                          (void) (*ih->ih_func)(ih->ih_arg ? ih->ih_arg : frame);
                         restore_interrupts(oldirqstate);                          restore_interrupts(oldirqstate);
                         vic2_hwpend &= ~ibit;  
                 }                  }
         }          }
   

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

CVSweb <webmaster@jp.NetBSD.org>