[BACK]Return to interrupt.c CVS log [TXT][DIR] Up to [local] / prex-old / sys / arch / i386 / pc

Diff for /prex-old/sys/arch/i386/pc/interrupt.c between version 1.1.1.1 and 1.1.1.1.2.1

version 1.1.1.1, 2008/06/03 10:38:45 version 1.1.1.1.2.1, 2008/08/13 17:12:30
Line 34 
Line 34 
 #include <kernel.h>  #include <kernel.h>
 #include <irq.h>  #include <irq.h>
 #include <cpu.h>  #include <cpu.h>
   #include <locore.h>
   
 /* I/O address for master/slave programmable interrupt controller */  /* I/O address for master/slave programmable interrupt controller */
 #define PIC_M           0x20  #define PIC_M           0x20
Line 45 
Line 46 
 /*  /*
  * Interrupt priority level   * Interrupt priority level
  *   *
  * Each interrupt has its logical priority level, with 0 being the highest   * Each interrupt has its logical priority level, with 0 being
  * priority. While some ISR is running, all lower priority interrupts   * the highest priority. While some ISR is running, all lower
  * are masked off.   * priority interrupts are masked off.
  */   */
 volatile int irq_level;  volatile int irq_level;
   
Line 131 
Line 132 
   
 /*  /*
  * Common interrupt handler.   * Common interrupt handler.
  * This routine is called from low level interrupt routine written   *
  * in assemble code. The interrupt flag is automatically disabled   * This routine is called from low level interrupt routine
  * by h/w in CPU when the interrupt is occurred.   * written in assemble code. The interrupt flag is automatically
  * The target interrupt will be masked in ICU while the irq handler   * disabled by h/w in CPU when the interrupt is occurred. The
    * target interrupt will be masked in ICU while the irq handler
  * is called.   * is called.
  */   */
 void  void
Line 156 
Line 158 
         outb(0x20, PIC_M);              /* Non specific EOI to master */          outb(0x20, PIC_M);              /* Non specific EOI to master */
   
         /* Dispatch interrupt */          /* Dispatch interrupt */
         sti();          interrupt_enable();
         irq_handler(vector);          irq_handler(vector);
         cli();          interrupt_disable();
   
         /* Restore interrupt level */          /* Restore interrupt level */
         irq_level = old_ipl;          irq_level = old_ipl;
         update_mask();          update_mask();
   }
   
   void interrupt_save(int *sts)
   {
           *sts = (int)(get_eflags() & EFL_IF);
   }
   
   void interrupt_restore(int sts)
   {
           set_eflags((get_eflags() & ~EFL_IF) | sts);
 }  }
   
 /*  /*

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.1.2.1

CVSweb