Print this page
XXXX pass in cpu_pause_func via pause_cpus


  46 #include <sys/smp_impldefs.h>
  47 #include <sys/sysmacros.h>
  48 #include <sys/mach_mmu.h>
  49 #include <sys/promif.h>
  50 #include <sys/cpu.h>
  51 #include <sys/cpu_event.h>
  52 #include <sys/sunndi.h>
  53 #include <sys/fs/dv_node.h>
  54 #include <vm/hat_i86.h>
  55 #include <vm/as.h>
  56 
  57 extern cpuset_t cpu_ready_set;
  58 
  59 extern int  mp_start_cpu_common(cpu_t *cp, boolean_t boot);
  60 extern void real_mode_start_cpu(void);
  61 extern void real_mode_start_cpu_end(void);
  62 extern void real_mode_stop_cpu_stage1(void);
  63 extern void real_mode_stop_cpu_stage1_end(void);
  64 extern void real_mode_stop_cpu_stage2(void);
  65 extern void real_mode_stop_cpu_stage2_end(void);
  66 extern void *(*cpu_pause_func)(void *);
  67 
  68 void rmp_gdt_init(rm_platter_t *);
  69 
  70 /*
  71  * Fill up the real mode platter to make it easy for real mode code to
  72  * kick it off. This area should really be one passed by boot to kernel
  73  * and guaranteed to be below 1MB and aligned to 16 bytes. Should also
  74  * have identical physical and virtual address in paged mode.
  75  */
  76 static ushort_t *warm_reset_vector = NULL;
  77 
  78 int
  79 mach_cpucontext_init(void)
  80 {
  81         ushort_t *vec;
  82         ulong_t addr;
  83         struct rm_platter *rm = (struct rm_platter *)rm_platter_va;
  84 
  85         if (!(vec = (ushort_t *)psm_map_phys(WARM_RESET_VECTOR,
  86             sizeof (vec), PROT_READ | PROT_WRITE)))




  46 #include <sys/smp_impldefs.h>
  47 #include <sys/sysmacros.h>
  48 #include <sys/mach_mmu.h>
  49 #include <sys/promif.h>
  50 #include <sys/cpu.h>
  51 #include <sys/cpu_event.h>
  52 #include <sys/sunndi.h>
  53 #include <sys/fs/dv_node.h>
  54 #include <vm/hat_i86.h>
  55 #include <vm/as.h>
  56 
  57 extern cpuset_t cpu_ready_set;
  58 
  59 extern int  mp_start_cpu_common(cpu_t *cp, boolean_t boot);
  60 extern void real_mode_start_cpu(void);
  61 extern void real_mode_start_cpu_end(void);
  62 extern void real_mode_stop_cpu_stage1(void);
  63 extern void real_mode_stop_cpu_stage1_end(void);
  64 extern void real_mode_stop_cpu_stage2(void);
  65 extern void real_mode_stop_cpu_stage2_end(void);

  66 
  67 void rmp_gdt_init(rm_platter_t *);
  68 
  69 /*
  70  * Fill up the real mode platter to make it easy for real mode code to
  71  * kick it off. This area should really be one passed by boot to kernel
  72  * and guaranteed to be below 1MB and aligned to 16 bytes. Should also
  73  * have identical physical and virtual address in paged mode.
  74  */
  75 static ushort_t *warm_reset_vector = NULL;
  76 
  77 int
  78 mach_cpucontext_init(void)
  79 {
  80         ushort_t *vec;
  81         ulong_t addr;
  82         struct rm_platter *rm = (struct rm_platter *)rm_platter_va;
  83 
  84         if (!(vec = (ushort_t *)psm_map_phys(WARM_RESET_VECTOR,
  85             sizeof (vec), PROT_READ | PROT_WRITE)))