1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 #ifndef __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H
   9 #define __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H
  10 
  11 #define CP0_EBASE $15, 1
  12 
  13         .macro  kernel_entry_setup
  14 #ifdef CONFIG_SMP
  15         mfc0    t0, CP0_EBASE
  16         andi    t0, t0, 0x3ff           # CPUNum
  17         beqz    t0, 1f
  18         # CPUs other than zero goto smp_bootstrap
  19         j       smp_bootstrap
  20 #endif 
  21 
  22 1:
  23         .endm
  24 
  25 
  26 
  27 
  28 
  29         .macro  smp_slave_setup
  30         mfc0    t0, CP0_EBASE
  31         andi    t0, t0, 0x3ff           # CPUNum
  32         slti    t1, t0, NR_CPUS
  33         bnez    t1, 1f
  34 2:
  35         di
  36         wait
  37         b       2b                      # Unknown CPU, loop forever.
  38 1:
  39         PTR_LA  t1, paravirt_smp_sp
  40         PTR_SLL t0, PTR_SCALESHIFT
  41         PTR_ADDU t1, t1, t0
  42 3:
  43         PTR_L   sp, 0(t1)
  44         beqz    sp, 3b                  # Spin until told to proceed.
  45 
  46         PTR_LA  t1, paravirt_smp_gp
  47         PTR_ADDU t1, t1, t0
  48         sync
  49         PTR_L   gp, 0(t1)
  50         .endm
  51 
  52 #endif