[BACK]Return to intrdefs.h CVS log [TXT][DIR] Up to [local] / sys / arch / amd64 / include

Annotation of sys/arch/amd64/include/intrdefs.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: intrdefs.h,v 1.5 2007/05/06 03:37:08 gwk Exp $        */
                      2: /*     $NetBSD: intrdefs.h,v 1.2 2003/05/04 22:01:56 fvdl Exp $        */
                      3:
                      4: #ifndef _i386_INTRDEFS_H
                      5: #define _i386_INTRDEFS_H
                      6:
                      7: /*
                      8:  * Interrupt priority levels.
                      9:  *
                     10:  * There are tty, network and disk drivers that use free() at interrupt
                     11:  * time, so imp > (tty | net | bio).
                     12:  *
                     13:  * Since run queues may be manipulated by both the statclock and tty,
                     14:  * network, and disk drivers, clock > imp.
                     15:  *
                     16:  * IPL_HIGH must block everything that can manipulate a run queue.
                     17:  *
                     18:  * We need serial drivers to run at the absolute highest priority to
                     19:  * avoid overruns, so serial > high.
                     20:  *
                     21:  * The level numbers are picked to fit into APIC vector priorities.
                     22:  *
                     23:  */
                     24: #define        IPL_NONE        0x0     /* nothing */
                     25: #define        IPL_SOFTCLOCK   0x4     /* timeouts */
                     26: #define        IPL_SOFTNET     0x5     /* protocol stacks */
                     27: #define        IPL_BIO         0x6     /* block I/O */
                     28: #define        IPL_NET         0x7     /* network */
                     29: #define        IPL_SOFTSERIAL  0x8     /* serial */
                     30: #define        IPL_TTY         0x9     /* terminal */
                     31: #define        IPL_VM          0xa     /* memory allocation */
                     32: #define        IPL_AUDIO       0xb     /* audio */
                     33: #define        IPL_CLOCK       0xc     /* clock */
                     34: #define IPL_SCHED      IPL_CLOCK
                     35: #define IPL_STATCLOCK  IPL_CLOCK
                     36: #define        IPL_HIGH        0xd     /* everything */
                     37: #define        IPL_SERIAL      0xd     /* serial */
                     38: #define IPL_IPI                0xe     /* inter-processor interrupts */
                     39: #define        NIPL            16
                     40:
                     41: /* Interrupt sharing types. */
                     42: #define        IST_NONE        0       /* none */
                     43: #define        IST_PULSE       1       /* pulsed */
                     44: #define        IST_EDGE        2       /* edge-triggered */
                     45: #define        IST_LEVEL       3       /* level-triggered */
                     46:
                     47: /*
                     48:  * Local APIC masks. Must not conflict with SIR_* above, and must
                     49:  * be >= NUM_LEGACY_IRQs. Note that LIR_IPI must be first.
                     50:  */
                     51: #define LIR_IPI                31
                     52: #define LIR_TIMER      30
                     53:
                     54: /* Soft interrupt masks. */
                     55: #define        SIR_CLOCK       29
                     56: #define        SIR_NET         28
                     57: #define        SIR_SERIAL      27
                     58:
                     59:
                     60: /*
                     61:  * Maximum # of interrupt sources per CPU. 32 to fit in one word.
                     62:  * ioapics can theoretically produce more, but it's not likely to
                     63:  * happen. For multiple ioapics, things can be routed to different
                     64:  * CPUs.
                     65:  */
                     66: #define MAX_INTR_SOURCES       32
                     67: #define NUM_LEGACY_IRQS                16
                     68:
                     69: /*
                     70:  * Low and high boundaries between which interrupt gates will
                     71:  * be allocated in the IDT.
                     72:  */
                     73: #define IDT_INTR_LOW   (0x20 + NUM_LEGACY_IRQS)
                     74: #define IDT_INTR_HIGH  0xef
                     75:
                     76: #define X86_IPI_HALT                   0x00000001
                     77: #define X86_IPI_NOP                    0x00000002
                     78: #define X86_IPI_FLUSH_FPU              0x00000004
                     79: #define X86_IPI_SYNCH_FPU              0x00000008
                     80: #define X86_IPI_TLB                    0x00000010
                     81: #define X86_IPI_MTRR                   0x00000020
                     82: #define X86_IPI_GDT                    0x00000040
                     83: #define X86_IPI_DDB                    0x00000080
                     84: #define X86_IPI_SETPERF                        0x00000100
                     85:
                     86: #define X86_NIPI                       9
                     87:
                     88: #define X86_IPI_NAMES { "halt IPI", "nop IPI", "FPU flush IPI", \
                     89:                         "FPU synch IPI", "TLB shootdown IPI", \
                     90:                         "MTRR update IPI", "GDT update IPI", "ddb IPI", \
                     91:                         "setperf IPI"}
                     92:
                     93: #define IREENT_MAGIC   0x18041969
                     94:
                     95: #endif /* _X86_INTRDEFS_H */

CVSweb