Rev 1856 | Rev 1864 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1856 | Rev 1860 | ||
---|---|---|---|
Line 26... | Line 26... | ||
26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | # |
27 | # |
28 | 28 | ||
29 | #include <arch/stack.h> |
29 | #include <arch/stack.h> |
30 | #include <arch/regdef.h> |
30 | #include <arch/regdef.h> |
- | 31 | #include <arch/mm/mmu.h> |
|
31 | 32 | ||
32 | .text |
33 | .text |
33 | 34 | ||
34 | .global memcpy |
35 | .global memcpy |
35 | .global memcpy_from_uspace |
36 | .global memcpy_from_uspace |
Line 141... | Line 142... | ||
141 | WRITE_ALTERNATE_REGISTER %g6, PSTATE_IG_BIT |
142 | WRITE_ALTERNATE_REGISTER %g6, PSTATE_IG_BIT |
142 | 143 | ||
143 | .global read_from_ag_g7 |
144 | .global read_from_ag_g7 |
144 | read_from_ag_g7: |
145 | read_from_ag_g7: |
145 | READ_ALTERNATE_REGISTER %g7, PSTATE_AG_BIT |
146 | READ_ALTERNATE_REGISTER %g7, PSTATE_AG_BIT |
- | 147 | ||
- | 148 | ||
- | 149 | /** Switch to userspace. |
|
- | 150 | * |
|
- | 151 | * %o0 Userspace entry address. |
|
- | 152 | * %o1 Userspace stack pointer address. |
|
- | 153 | */ |
|
- | 154 | .global switch_to_userspace |
|
- | 155 | switch_to_userspace: |
|
- | 156 | flushw |
|
- | 157 | wrpr %g0, 0, %cleanwin ! avoid information leak |
|
- | 158 | save %o1, -STACK_WINDOW_SAVE_AREA_SIZE, %sp |
|
- | 159 | ||
- | 160 | clr %i2 |
|
- | 161 | clr %i3 |
|
- | 162 | clr %i4 |
|
- | 163 | clr %i5 |
|
- | 164 | clr %i6 |
|
- | 165 | ||
- | 166 | wrpr %g0, 1, %tl ! enforce mapping via nucleus |
|
- | 167 | ||
- | 168 | rdpr %cwp, %g1 |
|
- | 169 | wrpr %g1, TSTATE_IE_BIT, %tstate |
|
- | 170 | wrpr %i0, 0, %tnpc |
|
- | 171 | ||
- | 172 | /* |
|
- | 173 | * Set primary context according to secondary context. |
|
- | 174 | * Secondary context has been already installed by |
|
- | 175 | * higher-level functions. |
|
- | 176 | */ |
|
- | 177 | wr %g0, ASI_DMMU, %asi |
|
- | 178 | ldxa [VA_SECONDARY_CONTEXT_REG] %asi, %g1 |
|
- | 179 | stxa %g1, [VA_PRIMARY_CONTEXT_REG] %asi |
|
- | 180 | flush %i7 |
|
- | 181 | ||
- | 182 | done ! jump to userspace |