Changeset e11ae91 in mainline for kernel/arch/sparc64/src
- Timestamp:
- 2006-08-30T11:31:25Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ee454eb
- Parents:
- 0fa6044
- Location:
- kernel/arch/sparc64/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/asm.S
r0fa6044 re11ae91 107 107 b _memsetb 108 108 nop 109 110 111 .macro WRITE_ALTERNATE_REGISTER reg, bit 112 save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp 113 rdpr %pstate, %l0 114 wrpr %l0, \bit, %pstate 115 mov %i0, \reg 116 wrpr %l0, 0, %pstate 117 ret 118 restore 119 .endm 120 121 .macro READ_ALTERNATE_REGISTER reg, bit 122 save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp 123 rdpr %pstate, %l0 124 wrpr %l0, \bit, %pstate 125 mov \reg, %i0 126 wrpr %l0, 0, %pstate 127 ret 128 restore 129 .endm 130 131 .global write_to_ag_g6 132 write_to_ag_g6: 133 WRITE_ALTERNATE_REGISTER %g6, PSTATE_AG_BIT 134 135 .global write_to_ag_g7 136 write_to_ag_g7: 137 WRITE_ALTERNATE_REGISTER %g7, PSTATE_AG_BIT 138 139 .global write_to_ig_g6 140 write_to_ig_g6: 141 WRITE_ALTERNATE_REGISTER %g6, PSTATE_IG_BIT 142 143 .global read_from_ag_g7 144 read_from_ag_g7: 145 READ_ALTERNATE_REGISTER %g7, PSTATE_AG_BIT -
kernel/arch/sparc64/src/proc/scheduler.c
r0fa6044 re11ae91 37 37 #include <arch.h> 38 38 #include <arch/asm.h> 39 #include <arch/regdef.h> 40 #include <arch/stack.h> 39 41 #include <arch/mm/tlb.h> 40 42 #include <arch/mm/page.h> … … 52 54 * Ensure that thread's kernel stack, as well as userspace window 53 55 * buffer for userspace threads, are locked in DTLB. 56 * For userspace threads, initialize reserved global registers 57 * in the alternate and interrupt sets. 54 58 */ 55 59 void before_thread_runs_arch(void) … … 83 87 dtlb_insert_mapping(uw_buf, KA2PA(uw_buf), PAGESIZE_8K, true, true); 84 88 } 89 90 /* 91 * Write kernel stack address to %g6 and a pointer to the last item 92 * in the userspace window buffer to %g7 in the alternate and interrupt sets. 93 */ 94 write_to_ig_g6((uintptr_t) THREAD->kstack + STACK_SIZE - STACK_BIAS); 95 write_to_ag_g6((uintptr_t) THREAD->kstack + STACK_SIZE - STACK_BIAS); 96 write_to_ag_g7((uintptr_t) THREAD->arch.uspace_window_buffer); 85 97 } 86 98 } … … 124 136 dtlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_NUCLEUS, (uintptr_t) uw_buf); 125 137 } 138 139 /* sample the state of the userspace window buffer */ 140 THREAD->arch.uspace_window_buffer = (uint8_t *) read_from_ag_g7(); 126 141 } 127 142 } -
kernel/arch/sparc64/src/trap/trap_table.S
r0fa6044 re11ae91 204 204 SPILL_NORMAL_HANDLER_KERNEL 205 205 206 /* TT = 0x84, TL = 0, spill_1_normal handler */ 207 .org trap_table + TT_SPILL_1_NORMAL*ENTRY_SIZE 208 .global spill_1_normal 209 spill_1_normal: 210 SPILL_NORMAL_HANDLER_USERSPACE 211 212 /* TT = 0x88, TL = 0, spill_2_normal handler */ 213 .org trap_table + TT_SPILL_2_NORMAL*ENTRY_SIZE 214 .global spill_2_normal 215 spill_2_normal: 216 SPILL_TO_USPACE_WINDOW_BUFFER 217 206 218 /* TT = 0xc0, TL = 0, fill_0_normal handler */ 207 219 .org trap_table + TT_FILL_0_NORMAL*ENTRY_SIZE … … 210 222 FILL_NORMAL_HANDLER_KERNEL 211 223 224 /* TT = 0xc4, TL = 0, fill_1_normal handler */ 225 .org trap_table + TT_FILL_1_NORMAL*ENTRY_SIZE 226 .global fill_1_normal 227 fill_1_normal: 228 FILL_NORMAL_HANDLER_USERSPACE 229 212 230 /* 213 231 * Handlers for TL>0. … … 267 285 spill_0_normal_high: 268 286 SPILL_NORMAL_HANDLER_KERNEL 287 288 /* TT = 0x88, TL > 0, spill_2_normal handler */ 289 .org trap_table + (TT_SPILL_2_NORMAL+512)*ENTRY_SIZE 290 .global spill_2_normal_high 291 spill_2_normal_high: 292 SPILL_TO_USPACE_WINDOW_BUFFER 293 294 /* TT = 0xa0, TL > 0, spill_0_other handler */ 295 .org trap_table + (TT_SPILL_0_OTHER+512)*ENTRY_SIZE 296 .global spill_0_other_high 297 spill_0_other_high: 298 SPILL_TO_USPACE_WINDOW_BUFFER 269 299 270 300 /* TT = 0xc0, TL > 0, fill_0_normal handler */ … … 290 320 * %g2 Argument for the function. 291 321 * %g6 Pre-set as kernel stack base if trap from userspace. 292 * %g7 Reserved.322 * %g7 Pre-set as address of the userspace window buffer. 293 323 */ 294 324 .global preemptible_handler
Note:
See TracChangeset
for help on using the changeset viewer.