The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/i386/isa/intr_machdep.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 1991 The Regents of the University of California.
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  * 3. All advertising materials mentioning features or use of this software
   14  *    must display the following acknowledgement:
   15  *      This product includes software developed by the University of
   16  *      California, Berkeley and its contributors.
   17  * 4. Neither the name of the University nor the names of its contributors
   18  *    may be used to endorse or promote products derived from this software
   19  *    without specific prior written permission.
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   31  * SUCH DAMAGE.
   32  *
   33  *      from: @(#)isa_device.h  7.1 (Berkeley) 5/9/91
   34  * $FreeBSD$
   35  */
   36 
   37 #ifndef _I386_ISA_INTR_MACHDEP_H_
   38 #define _I386_ISA_INTR_MACHDEP_H_
   39 
   40 /*
   41  * Low level interrupt code.
   42  */ 
   43 
   44 #ifdef KERNEL
   45 
   46 #if defined(SMP) || defined(APIC_IO)
   47 /*
   48  * XXX FIXME: rethink location for all IPI vectors.
   49  */
   50 
   51 /*
   52     APIC TPR priority vector levels:
   53 
   54         0xff (255) +-------------+
   55                    |             | 15 (IPIs: Xspuriousint)
   56         0xf0 (240) +-------------+
   57                    |             | 14
   58         0xe0 (224) +-------------+
   59                    |             | 13
   60         0xd0 (208) +-------------+
   61                    |             | 12
   62         0xc0 (192) +-------------+
   63                    |             | 11
   64         0xb0 (176) +-------------+
   65                    |             | 10 (IPIs: Xcpustop)
   66         0xa0 (160) +-------------+
   67                    |             |  9 (IPIs: Xinvltlb)
   68         0x90 (144) +-------------+
   69                    |             |  8 (linux/BSD syscall, IGNORE FAST HW INTS)
   70         0x80 (128) +-------------+
   71                    |             |  7 (FAST_INTR 16-23)
   72         0x70 (112) +-------------+
   73                    |             |  6 (FAST_INTR 0-15)
   74         0x60 (96)  +-------------+
   75                    |             |  5 (IGNORE HW INTS)
   76         0x50 (80)  +-------------+
   77                    |             |  4 (2nd IO APIC)
   78         0x40 (64)  +------+------+
   79                    |      |      |  3 (upper APIC hardware INTs: PCI)
   80         0x30 (48)  +------+------+
   81                    |             |  2 (start of hardware INTs: ISA)
   82         0x20 (32)  +-------------+
   83                    |             |  1 (exceptions, traps, etc.)
   84         0x10 (16)  +-------------+
   85                    |             |  0 (exceptions, traps, etc.)
   86         0x00 (0)   +-------------+
   87  */
   88 
   89 /* IDT vector base for regular (aka. slow) and fast interrupts */
   90 #define TPR_SLOW_INTS           0x20
   91 #define TPR_FAST_INTS           0x60
   92 
   93 /* blocking values for local APIC Task Priority Register */
   94 #define TPR_BLOCK_HWI           0x4f            /* hardware INTs */
   95 #define TPR_IGNORE_HWI          0x5f            /* ignore INTs */
   96 #define TPR_BLOCK_FHWI          0x7f            /* hardware FAST INTs */
   97 #define TPR_IGNORE_FHWI         0x8f            /* ignore FAST INTs */
   98 #define TPR_BLOCK_XINVLTLB      0x9f            /*  */
   99 #define TPR_BLOCK_XCPUSTOP      0xaf            /*  */
  100 #define TPR_BLOCK_ALL           0xff            /* all INTs */
  101 
  102 
  103 #ifdef TEST_TEST1
  104 /* put a 'fake' HWI in top of APIC prio 0x3x, 32 + 31 = 63 = 0x3f */
  105 #define XTEST1_OFFSET           (ICU_OFFSET + 31)
  106 #endif /** TEST_TEST1 */
  107 
  108 /* TLB shootdowns */
  109 #define XINVLTLB_OFFSET         (ICU_OFFSET + 112)
  110 
  111 #ifdef BETTER_CLOCK
  112 /* inter-cpu clock handling */
  113 #define XCPUCHECKSTATE_OFFSET   (ICU_OFFSET + 113)
  114 #endif
  115 
  116 /* inter-CPU rendezvous */
  117 #define XRENDEZVOUS_OFFSET      (ICU_OFFSET + 114)
  118 
  119 /* IPI to generate an additional software trap at the target CPU */
  120 #define XCPUAST_OFFSET          (ICU_OFFSET +  48)
  121 
  122 /* IPI to signal the CPU holding the ISR lock that another IRQ has appeared */
  123 #define XFORWARD_IRQ_OFFSET     (ICU_OFFSET +  49)
  124 
  125 /* IPI to signal CPUs to stop and wait for another CPU to restart them */
  126 #define XCPUSTOP_OFFSET         (ICU_OFFSET + 128)
  127 
  128 /*
  129  * Note: this vector MUST be xxxx1111, 32 + 223 = 255 = 0xff:
  130  */
  131 #define XSPURIOUSINT_OFFSET     (ICU_OFFSET + 223)
  132 
  133 #endif /* SMP || APIC_IO */
  134 
  135 #ifndef LOCORE
  136 
  137 /*
  138  * Type of the first (asm) part of an interrupt handler.
  139  */
  140 typedef void inthand_t __P((u_int cs, u_int ef, u_int esp, u_int ss));
  141 
  142 #define IDTVEC(name)    __CONCAT(X,name)
  143 
  144 extern char eintrnames[];       /* end of intrnames[] */
  145 extern u_long intrcnt[];        /* counts for for each device and stray */
  146 extern char intrnames[];        /* string table containing device names */
  147 extern u_long *intr_countp[];   /* pointers into intrcnt[] */
  148 extern inthand2_t *intr_handler[];      /* C entry points of intr handlers */
  149 extern u_int intr_mask[];       /* sets of intrs masked during handling of 1 */
  150 extern void *intr_unit[];       /* cookies to pass to intr handlers */
  151 
  152 inthand_t
  153         IDTVEC(fastintr0), IDTVEC(fastintr1),
  154         IDTVEC(fastintr2), IDTVEC(fastintr3),
  155         IDTVEC(fastintr4), IDTVEC(fastintr5),
  156         IDTVEC(fastintr6), IDTVEC(fastintr7),
  157         IDTVEC(fastintr8), IDTVEC(fastintr9),
  158         IDTVEC(fastintr10), IDTVEC(fastintr11),
  159         IDTVEC(fastintr12), IDTVEC(fastintr13),
  160         IDTVEC(fastintr14), IDTVEC(fastintr15);
  161 inthand_t
  162         IDTVEC(intr0), IDTVEC(intr1), IDTVEC(intr2), IDTVEC(intr3),
  163         IDTVEC(intr4), IDTVEC(intr5), IDTVEC(intr6), IDTVEC(intr7),
  164         IDTVEC(intr8), IDTVEC(intr9), IDTVEC(intr10), IDTVEC(intr11),
  165         IDTVEC(intr12), IDTVEC(intr13), IDTVEC(intr14), IDTVEC(intr15);
  166 
  167 #if defined(SMP) || defined(APIC_IO)
  168 inthand_t
  169         IDTVEC(fastintr16), IDTVEC(fastintr17),
  170         IDTVEC(fastintr18), IDTVEC(fastintr19),
  171         IDTVEC(fastintr20), IDTVEC(fastintr21),
  172         IDTVEC(fastintr22), IDTVEC(fastintr23);
  173 inthand_t
  174         IDTVEC(intr16), IDTVEC(intr17), IDTVEC(intr18), IDTVEC(intr19),
  175         IDTVEC(intr20), IDTVEC(intr21), IDTVEC(intr22), IDTVEC(intr23);
  176 
  177 inthand_t
  178         Xinvltlb,       /* TLB shootdowns */
  179 #ifdef BETTER_CLOCK
  180         Xcpucheckstate, /* Check cpu state */
  181 #endif
  182         Xcpuast,        /* Additional software trap on other cpu */ 
  183         Xforward_irq,   /* Forward irq to cpu holding ISR lock */
  184         Xcpustop,       /* CPU stops & waits for another CPU to restart it */
  185         Xspuriousint,   /* handle APIC "spurious INTs" */
  186         Xrendezvous;    /* handle CPU rendezvous */
  187 
  188 #ifdef TEST_TEST1
  189 inthand_t
  190         Xtest1;         /* 'fake' HWI at top of APIC prio 0x3x, 32+31 = 0x3f */
  191 #endif /** TEST_TEST1 */
  192 #endif /* SMP || APIC_IO */
  193 
  194 struct isa_device;
  195 
  196 void    isa_defaultirq __P((void));
  197 intrmask_t isa_irq_pending __P((void));
  198 int     isa_nmi __P((int cd));
  199 void    update_intrname __P((int intr, int device_id));
  200 int     icu_setup __P((int intr, inthand2_t *func, void *arg, 
  201                        u_int *maskptr, int flags));
  202 int     icu_unset __P((int intr, inthand2_t *handler));
  203 int     update_intr_masks __P((void));
  204 void    register_imask __P((struct isa_device *dvp, u_int mask));
  205 
  206 #endif /* LOCORE */
  207 
  208 #endif /* KERNEL */
  209 
  210 #endif /* !_I386_ISA_INTR_MACHDEP_H_ */

Cache object: d87ccbbc40685f8d9894c3c3130b982c


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.