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/include/smp.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  * ----------------------------------------------------------------------------
    3  * "THE BEER-WARE LICENSE" (Revision 42):
    4  * <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
    5  * can do whatever you want with this stuff. If we meet some day, and you think
    6  * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
    7  * ----------------------------------------------------------------------------
    8  *
    9  * $FreeBSD$
   10  *
   11  */
   12 
   13 #ifndef _MACHINE_SMP_H_
   14 #define _MACHINE_SMP_H_
   15 
   16 #ifdef KERNEL
   17 
   18 #if defined(SMP) && !defined(APIC_IO)
   19 # error APIC_IO required for SMP, add "options APIC_IO" to your config file.
   20 #endif /* SMP && !APIC_IO */
   21 
   22 /* Number of CPUs. */
   23 #if defined(SMP) && !defined(NCPU)
   24 # define NCPU                   2
   25 #endif /* SMP && NCPU */
   26 
   27 /* Number of IO APICs. */
   28 #if defined(APIC_IO) && !defined(NAPIC)
   29 # define NAPIC                  1
   30 #endif /* SMP && NAPIC */
   31 
   32 
   33 #if defined(SMP) || defined(APIC_IO)
   34 
   35 #ifndef LOCORE
   36 
   37 /*
   38  * For sending values to POST displays.
   39  * XXX FIXME: where does this really belong, isa.h/isa.c perhaps?
   40  */
   41 extern int current_postcode;  /** XXX currently in mp_machdep.c */
   42 #define POSTCODE(X)     current_postcode = (X), \
   43                         outb(0x80, current_postcode)
   44 #define POSTCODE_LO(X)  current_postcode &= 0xf0, \
   45                         current_postcode |= ((X) & 0x0f), \
   46                         outb(0x80, current_postcode)
   47 #define POSTCODE_HI(X)  current_postcode &= 0x0f, \
   48                         current_postcode |= (((X) << 4) & 0xf0), \
   49                         outb(0x80, current_postcode)
   50 
   51 
   52 #include <machine/apic.h>
   53 
   54 /* global data in mpboot.s */
   55 extern int                      bootMP_size;
   56 
   57 /* functions in mpboot.s */
   58 void    bootMP                  __P((void));
   59 
   60 /* global data in mplock.s */
   61 extern u_int                    mp_lock;
   62 extern u_int                    isr_lock;
   63 #ifdef RECURSIVE_MPINTRLOCK
   64 extern u_int                    mpintr_lock;
   65 #endif /*  RECURSIVE_MPINTRLOCK */
   66 
   67 /* functions in mplock.s */
   68 void    get_mplock              __P((void));
   69 void    rel_mplock              __P((void));
   70 int             try_mplock              __P((void));
   71 #ifdef RECURSIVE_MPINTRLOCK
   72 void    get_mpintrlock          __P((void));
   73 void    rel_mpintrlock          __P((void));
   74 int             try_mpintrlock          __P((void));
   75 #endif /*  RECURSIVE_MPINTRLOCK */
   76 
   77 /* global data in apic_vector.s */
   78 extern volatile u_int           stopped_cpus;
   79 extern volatile u_int           started_cpus;
   80 
   81 extern volatile u_int           checkstate_probed_cpus;
   82 extern volatile u_int           checkstate_need_ast;
   83 extern volatile u_int           resched_cpus;
   84 extern void (*cpustop_restartfunc) __P((void));
   85 
   86 /* functions in apic_ipl.s */
   87 void    apic_eoi                __P((void));
   88 u_int   io_apic_read            __P((int, int));
   89 void    io_apic_write           __P((int, int, u_int));
   90 
   91 /* global data in mp_machdep.c */
   92 extern int                      bsp_apic_ready;
   93 extern int                      mp_ncpus;
   94 extern int                      mp_naps;
   95 extern int                      mp_nbusses;
   96 extern int                      mp_napics;
   97 extern int                      mp_picmode;
   98 extern int                      boot_cpu_id;
   99 extern vm_offset_t              cpu_apic_address;
  100 extern vm_offset_t              io_apic_address[];
  101 extern u_int32_t                cpu_apic_versions[];
  102 extern u_int32_t                io_apic_versions[];
  103 extern int                      cpu_num_to_apic_id[];
  104 extern int                      io_num_to_apic_id[];
  105 extern int                      apic_id_to_logical[];
  106 #define APIC_INTMAPSIZE 24
  107 struct apic_intmapinfo {
  108         int ioapic;
  109         int int_pin;
  110         volatile void *apic_address;
  111         int redirindex;
  112 };
  113 extern struct apic_intmapinfo   int_to_apicintpin[];
  114 extern u_int                    all_cpus;
  115 extern u_char                   SMP_ioapic[];
  116 extern struct pcb               stoppcbs[];
  117 
  118 /* functions in mp_machdep.c */
  119 u_int   mp_bootaddress          __P((u_int));
  120 int     mp_probe                __P((void));
  121 void    mp_start                __P((void));
  122 void    mp_announce             __P((void));
  123 u_int   isa_apic_mask           __P((u_int));
  124 int     isa_apic_irq            __P((int));
  125 int     pci_apic_irq            __P((int, int, int));
  126 int     apic_irq                __P((int, int));
  127 int     next_apic_irq           __P((int));
  128 int     undirect_isa_irq        __P((int));
  129 int     undirect_pci_irq        __P((int));
  130 int     apic_bus_type           __P((int));
  131 int     apic_src_bus_id         __P((int, int));
  132 int     apic_src_bus_irq        __P((int, int));
  133 int     apic_int_type           __P((int, int));
  134 int     apic_trigger            __P((int, int));
  135 int     apic_polarity           __P((int, int));
  136 void    bsp_apic_configure      __P((void));
  137 void    init_secondary          __P((void));
  138 void    smp_invltlb             __P((void));
  139 int     stop_cpus               __P((u_int));
  140 int     restart_cpus            __P((u_int));
  141 #ifdef BETTER_CLOCK 
  142 void    forward_statclock       __P((int pscnt));
  143 void    forward_hardclock       __P((int pscnt));
  144 #endif /* BETTER_CLOCK */
  145 void    forward_signal          __P((struct proc *));
  146 void    forward_roundrobin      __P((void));
  147 #ifdef  APIC_INTR_REORDER
  148 void    set_lapic_isrloc        __P((int, int));
  149 #endif /* APIC_INTR_REORDER */
  150 void    smp_rendezvous_action   __P((void));
  151 void    smp_rendezvous          __P((void (*)(void *), 
  152                                      void (*)(void *),
  153                                      void (*)(void *),
  154                                      void *arg));
  155 
  156 /* global data in mpapic.c */
  157 extern volatile lapic_t         lapic;
  158 extern volatile ioapic_t        *ioapic[];
  159 
  160 /* functions in mpapic.c */
  161 void    apic_dump               __P((char*));
  162 void    apic_initialize         __P((void));
  163 void    imen_dump               __P((void));
  164 int     apic_ipi                __P((int, int, int));
  165 int     selected_apic_ipi       __P((u_int, int, int));
  166 int     io_apic_setup           __P((int));
  167 int     ext_int_setup           __P((int, int));
  168 
  169 #if defined(READY)
  170 void    clr_io_apic_mask24      __P((int, u_int32_t));
  171 void    set_io_apic_mask24      __P((int, u_int32_t));
  172 #endif /* READY */
  173 
  174 void    set_apic_timer          __P((int));
  175 int     read_apic_timer         __P((void));
  176 void    u_sleep                 __P((int));
  177 
  178 /* global data in init_smp.c */
  179 extern int                      invltlb_ok;
  180 extern int                      smp_active;
  181 extern volatile int             smp_idle_loops;
  182 
  183 /* 'private' global data in locore.s */
  184 extern volatile u_int           cpuid;
  185 extern volatile u_int           cpu_lockid;
  186 extern int                      inside_intr;
  187 extern volatile u_int           other_cpus;
  188 
  189 #endif /* !LOCORE */
  190 #endif /* SMP || APIC_IO */
  191 #endif /* KERNEL */
  192 #endif /* _MACHINE_SMP_H_ */

Cache object: 02da8e863edb5fb5f1f34bf7ce8a0713


[ 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.