1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 .macro LOAD_GUEST_SEGMENTS
  16 
  17         
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 #define XCHG_SR(n)      lwz     r9, (SVCPU_SR+(n*4))(r3);  \
  31                         mtsr    n, r9
  32 
  33         XCHG_SR(0)
  34         XCHG_SR(1)
  35         XCHG_SR(2)
  36         XCHG_SR(3)
  37         XCHG_SR(4)
  38         XCHG_SR(5)
  39         XCHG_SR(6)
  40         XCHG_SR(7)
  41         XCHG_SR(8)
  42         XCHG_SR(9)
  43         XCHG_SR(10)
  44         XCHG_SR(11)
  45         XCHG_SR(12)
  46         XCHG_SR(13)
  47         XCHG_SR(14)
  48         XCHG_SR(15)
  49 
  50         
  51 
  52 #define KVM_KILL_BAT(n, reg)            \
  53         mtspr   SPRN_IBAT##n##U,reg;    \
  54         mtspr   SPRN_IBAT##n##L,reg;    \
  55         mtspr   SPRN_DBAT##n##U,reg;    \
  56         mtspr   SPRN_DBAT##n##L,reg;    \
  57 
  58         li      r9, 0
  59         KVM_KILL_BAT(0, r9)
  60         KVM_KILL_BAT(1, r9)
  61         KVM_KILL_BAT(2, r9)
  62         KVM_KILL_BAT(3, r9)
  63 
  64 .endm
  65 
  66 
  67 
  68 
  69 
  70 
  71 
  72 .macro LOAD_HOST_SEGMENTS
  73 
  74         
  75 
  76 
  77 
  78 
  79 
  80 
  81 
  82 
  83 
  84 
  85 
  86 
  87 
  88         
  89 
  90         
  91 
  92 #define KVM_LOAD_BAT(n, reg, RA, RB)    \
  93         lwz     RA,(n*16)+0(reg);       \
  94         lwz     RB,(n*16)+4(reg);       \
  95         mtspr   SPRN_IBAT##n##U,RA;     \
  96         mtspr   SPRN_IBAT##n##L,RB;     \
  97         lwz     RA,(n*16)+8(reg);       \
  98         lwz     RB,(n*16)+12(reg);      \
  99         mtspr   SPRN_DBAT##n##U,RA;     \
 100         mtspr   SPRN_DBAT##n##L,RB;     \
 101 
 102         lis     r9, BATS@ha
 103         addi    r9, r9, BATS@l
 104         tophys(r9, r9)
 105         KVM_LOAD_BAT(0, r9, r10, r11)
 106         KVM_LOAD_BAT(1, r9, r10, r11)
 107         KVM_LOAD_BAT(2, r9, r10, r11)
 108         KVM_LOAD_BAT(3, r9, r10, r11)
 109 
 110         
 111 
 112         
 113 
 114         li      r0, 4
 115         mtctr   r0
 116         LOAD_REG_IMMEDIATE(r3, 0x20000000 | (0x111 * 0xc))
 117         lis     r4, 0xc000
 118 3:      mtsrin  r3, r4
 119         addi    r3, r3, 0x111     
 120         addis   r4, r4, 0x1000    
 121         bdnz    3b
 122 
 123         
 124 
 125         
 126         tophys(r4, r2)
 127         lwz     r4, MM(r4)
 128         tophys(r4, r4)
 129         
 130         bl      switch_mmu_context
 131 
 132 .endm