Rev 3743 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3743 | Rev 3863 | ||
---|---|---|---|
Line 24... | Line 24... | ||
24 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
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/mm/mmu.h> |
|
- | 30 | #include <arch/regdef.h> |
|
- | 31 | #include <arch/stack.h> |
|
- | 32 | ||
29 | .text |
33 | .text |
30 | 34 | ||
31 | /* TODO: remove it as soon as there is a scheduler for sun4v. It is here only to make the code compilable/ */ |
35 | /* TODO: remove it as soon as there is a scheduler for sun4v. It is here only to make the code compilable/ */ |
32 | 36 | ||
33 | .global write_to_ag_g6 |
37 | .global write_to_ag_g6 |
Line 40... | Line 44... | ||
40 | write_to_ig_g6: |
44 | write_to_ig_g6: |
41 | 45 | ||
42 | .global read_from_ag_g7 |
46 | .global read_from_ag_g7 |
43 | read_from_ag_g7: |
47 | read_from_ag_g7: |
44 | 48 | ||
- | 49 | /** Switch to userspace. |
|
- | 50 | * |
|
- | 51 | * %o0 Userspace entry address. |
|
- | 52 | * %o1 Userspace stack pointer address. |
|
- | 53 | * %o2 Userspace address of uarg structure. |
|
- | 54 | */ |
|
45 | .global switch_to_userspace |
55 | .global switch_to_userspace |
46 | switch_to_userspace: |
56 | switch_to_userspace: |
- | 57 | #if 0 |
|
- | 58 | save %o1, -STACK_WINDOW_SAVE_AREA_SIZE, %sp |
|
- | 59 | flushw |
|
- | 60 | wrpr %g0, 0, %cleanwin ! avoid information leak |
|
- | 61 | ||
- | 62 | mov %i2, %o0 ! uarg |
|
- | 63 | xor %o1, %o1, %o1 ! %o1 is defined to hold pcb_ptr |
|
- | 64 | ! set it to 0 |
|
- | 65 | clr %i2 |
|
- | 66 | clr %i3 |
|
- | 67 | clr %i4 |
|
- | 68 | clr %i5 |
|
- | 69 | clr %i6 |
|
- | 70 | wrpr %g0, 1, %tl ! enforce mapping via nucleus |
|
- | 71 | ||
- | 72 | rdpr %cwp, %g1 |
|
- | 73 | wrpr %g1, TSTATE_IE_BIT, %tstate |
|
- | 74 | wrpr %i0, 0, %tnpc |
|
- | 75 | ||
- | 76 | /* |
|
- | 77 | * Set primary context according to secondary context. |
|
- | 78 | * Secondary context has been already installed by |
|
- | 79 | * higher-level functions. |
|
- | 80 | */ |
|
- | 81 | wr %g0, ASI_SECONDARY_CONTEXT_REG, %asi |
|
- | 82 | ldxa [VA_SECONDARY_CONTEXT_REG] %asi, %g1 |
|
- | 83 | wr %g0, ASI_PRIMARY_CONTEXT_REG, %asi |
|
- | 84 | stxa %g1, [VA_PRIMARY_CONTEXT_REG] %asi |
|
- | 85 | flush %i7 |
|
- | 86 | ||
- | 87 | /* |
|
- | 88 | * Spills and fills will be handled by the userspace handlers. |
|
- | 89 | */ |
|
- | 90 | wrpr %g0, WSTATE_OTHER(0) | WSTATE_NORMAL(1), %wstate |
|
47 | 91 | ||
- | 92 | done ! jump to userspace |
|
- | 93 | #endif |