Rev 3743 | Rev 3993 | 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 |
|