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-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-2  -  FREEBSD-11-1  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-4  -  FREEBSD-10-3  -  FREEBSD-10-2  -  FREEBSD-10-1  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-3  -  FREEBSD-9-2  -  FREEBSD-9-1  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-4  -  FREEBSD-8-3  -  FREEBSD-8-2  -  FREEBSD-8-1  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-4  -  FREEBSD-7-3  -  FREEBSD-7-2  -  FREEBSD-7-1  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-4  -  FREEBSD-6-3  -  FREEBSD-6-2  -  FREEBSD-6-1  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-5  -  FREEBSD-5-4  -  FREEBSD-5-3  -  FREEBSD-5-2  -  FREEBSD-5-1  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  linux-2.6  -  linux-2.4.22  -  MK83  -  MK84  -  PLAN9  -  DFBSD  -  NETBSD  -  NETBSD5  -  NETBSD4  -  NETBSD3  -  NETBSD20  -  OPENBSD  -  xnu-517  -  xnu-792  -  xnu-792.6.70  -  xnu-1228  -  xnu-1456.1.26  -  xnu-1699.24.8  -  xnu-2050.18.24  -  OPENSOLARIS  -  minix-3-1-1 
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: releng/5.0/sys/i386/include/smp.h 105347 2002-10-17 18:17:28Z pirzyk $
   10  *
   11  */
   12 
   13 #ifndef _MACHINE_SMP_H_
   14 #define _MACHINE_SMP_H_
   15 
   16 #ifdef _KERNEL
   17 
   18 #if defined(SMP) && defined(I386_CPU) && !defined(COMPILING_LINT)
   19 #error SMP not supported with I386_CPU
   20 #endif
   21 #if defined(SMP) && !defined(APIC_IO)
   22 # error APIC_IO required for SMP, add "options APIC_IO" to your config file.
   23 #endif /* SMP && !APIC_IO */
   24 #if defined(SMP) && defined(CPU_DISABLE_CMPXCHG) && !defined(COMPILING_LINT)
   25 #error SMP not supported with CPU_DISABLE_CMPXCHG
   26 #endif
   27 
   28 #if defined(SMP) || defined(APIC_IO)
   29 
   30 #ifndef LOCORE
   31 
   32 /*
   33  * For sending values to POST displays.
   34  * XXX FIXME: where does this really belong, isa.h/isa.c perhaps?
   35  */
   36 extern int current_postcode;  /** XXX currently in mp_machdep.c */
   37 #define POSTCODE(X)     current_postcode = (X), \
   38                         outb(0x80, current_postcode)
   39 #define POSTCODE_LO(X)  current_postcode &= 0xf0, \
   40                         current_postcode |= ((X) & 0x0f), \
   41                         outb(0x80, current_postcode)
   42 #define POSTCODE_HI(X)  current_postcode &= 0x0f, \
   43                         current_postcode |= (((X) << 4) & 0xf0), \
   44                         outb(0x80, current_postcode)
   45 
   46 
   47 #include <sys/bus.h>    /* XXX */
   48 #include <machine/apic.h>
   49 #include <machine/frame.h>
   50 #include <i386/isa/icu.h>
   51 #include <i386/isa/intr_machdep.h>
   52 
   53 /*
   54  * Interprocessor interrupts for SMP.
   55  */
   56 #define IPI_INVLTLB             XINVLTLB_OFFSET
   57 #define IPI_INVLPG              XINVLPG_OFFSET
   58 #define IPI_INVLRNG             XINVLRNG_OFFSET
   59 #define IPI_RENDEZVOUS          XRENDEZVOUS_OFFSET
   60 #define IPI_AST                 XCPUAST_OFFSET
   61 #define IPI_STOP                XCPUSTOP_OFFSET
   62 #define IPI_HARDCLOCK           XHARDCLOCK_OFFSET
   63 #define IPI_STATCLOCK           XSTATCLOCK_OFFSET
   64 
   65 /* global data in mpboot.s */
   66 extern int                      bootMP_size;
   67 
   68 /* functions in mpboot.s */
   69 void    bootMP(void);
   70 
   71 /* global data in mp_machdep.c */
   72 extern int                      bsp_apic_ready;
   73 extern int                      mp_naps;
   74 extern int                      mp_nbusses;
   75 extern int                      mp_napics;
   76 extern int                      mp_picmode;
   77 extern int                      boot_cpu_id;
   78 extern vm_offset_t              cpu_apic_address;
   79 extern vm_offset_t              io_apic_address[];
   80 extern u_int32_t                cpu_apic_versions[];
   81 extern u_int32_t                *io_apic_versions;
   82 extern int                      cpu_num_to_apic_id[];
   83 extern int                      io_num_to_apic_id[];
   84 extern int                      apic_id_to_logical[];
   85 #define APIC_INTMAPSIZE 32
   86 struct apic_intmapinfo {
   87         int ioapic;
   88         int int_pin;
   89         volatile void *apic_address;
   90         int redirindex;
   91 };
   92 extern struct apic_intmapinfo   int_to_apicintpin[];
   93 extern struct pcb               stoppcbs[];
   94 
   95 /* functions in mp_machdep.c */
   96 void    i386_mp_probe(void);
   97 u_int   mp_bootaddress(u_int);
   98 u_int   isa_apic_mask(u_int);
   99 int     isa_apic_irq(int);
  100 int     pci_apic_irq(int, int, int);
  101 int     apic_irq(int, int);
  102 int     next_apic_irq(int);
  103 int     undirect_isa_irq(int);
  104 int     undirect_pci_irq(int);
  105 int     apic_bus_type(int);
  106 int     apic_src_bus_id(int, int);
  107 int     apic_src_bus_irq(int, int);
  108 int     apic_int_type(int, int);
  109 int     apic_trigger(int, int);
  110 int     apic_polarity(int, int);
  111 void    assign_apic_irq(int apic, int intpin, int irq);
  112 void    revoke_apic_irq(int irq);
  113 void    bsp_apic_configure(void);
  114 void    init_secondary(void);
  115 void    forward_statclock(void);
  116 void    forwarded_statclock(struct trapframe frame);
  117 void    forward_hardclock(void);
  118 void    forwarded_hardclock(struct trapframe frame);
  119 void    ipi_selected(u_int cpus, u_int ipi);
  120 void    ipi_all(u_int ipi);
  121 void    ipi_all_but_self(u_int ipi);
  122 void    ipi_self(u_int ipi);
  123 #ifdef  APIC_INTR_REORDER
  124 void    set_lapic_isrloc(int, int);
  125 #endif /* APIC_INTR_REORDER */
  126 void    smp_invlpg(vm_offset_t addr);
  127 void    smp_masked_invlpg(u_int mask, vm_offset_t addr);
  128 void    smp_invlpg_range(vm_offset_t startva, vm_offset_t endva);
  129 void    smp_masked_invlpg_range(u_int mask, vm_offset_t startva,
  130             vm_offset_t endva);
  131 void    smp_invltlb(void);
  132 void    smp_masked_invltlb(u_int mask);
  133 
  134 /* global data in mpapic.c */
  135 extern volatile lapic_t         lapic;
  136 extern volatile ioapic_t        **ioapic;
  137 
  138 /* functions in mpapic.c */
  139 void    apic_dump(char*);
  140 void    apic_initialize(void);
  141 void    imen_dump(void);
  142 int     apic_ipi(int, int, int);
  143 int     selected_apic_ipi(u_int, int, int);
  144 int     io_apic_setup(int);
  145 void    io_apic_setup_intpin(int, int);
  146 void    io_apic_set_id(int, int);
  147 int     io_apic_get_id(int);
  148 int     ext_int_setup(int, int);
  149 
  150 void    set_apic_timer(int);
  151 int     read_apic_timer(void);
  152 void    u_sleep(int);
  153 u_int   io_apic_read(int, int);
  154 void    io_apic_write(int, int, u_int);
  155 
  156 #endif /* !LOCORE */
  157 #endif /* SMP && !APIC_IO */
  158 
  159 #endif /* _KERNEL */
  160 #endif /* _MACHINE_SMP_H_ */

Cache object: f481bf512b745c89b91b5c110616dcbd


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