Changeset b994a60 in mainline for arch/ia64/src
- Timestamp:
- 2006-03-09T12:44:27Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 901122b
- Parents:
- cd373bb
- Location:
- arch/ia64/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia64/src/asm.S
rcd373bb rb994a60 27 27 # 28 28 29 #include <arch/register.h> 30 29 31 .text 30 32 … … 47 49 } 48 50 br halt 51 52 /** Switch to userspace - low level code. 53 * 54 * @param in0 Userspace entry point address. 55 * @param in1 Userspace stack pointer address. 56 * @param in2 Userspace register stack pointer address. 57 * @param in3 Value to be stored in IPSR. 58 * @param in4 Value to be stored in RSC. 59 */ 60 .global switch_to_userspace 61 switch_to_userspace: 62 alloc loc0 = ar.pfs, 5, 3, 0, 0 63 rsm (PSR_IC_MASK | PSR_I_MASK) /* disable interruption collection and interrupts */ 64 srlz.d ;; 65 srlz.i ;; 66 67 mov cr.ipsr = in3 68 mov cr.iip = in0 69 mov r12 = in1 70 71 xor r1 = r1, r1 72 73 mov loc1 = cr.ifs 74 movl loc2 = PFM_MASK ;; 75 and loc1 = loc2, loc1 ;; 76 mov cr.ifs = loc1 ;; /* prevent decrementing BSP by rfi */ 77 78 invala 79 80 mov loc1 = ar.rsc ;; 81 and loc1 = ~3, loc1 ;; 82 mov ar.rsc = loc1 ;; /* put RSE into enforced lazy mode */ 83 84 flushrs ;; 85 86 mov ar.bspstore = in2 ;; 87 mov ar.rsc = in4 ;; 88 89 rfi ;; -
arch/ia64/src/dummy.s
rcd373bb rb994a60 31 31 .global calibrate_delay_loop 32 32 .global asm_delay_loop 33 .global userspace34 33 .global cpu_sleep 35 34 .global dummy … … 38 37 .global fpu_init 39 38 40 userspace:41 39 calibrate_delay_loop: 42 40 asm_delay_loop: -
arch/ia64/src/ia64.c
rcd373bb rb994a60 32 32 #include <arch/interrupt.h> 33 33 #include <arch/barrier.h> 34 #include <arch/asm.h> 35 #include <arch/register.h> 34 36 #include <arch/types.h> 35 37 #include <arch/context.h> 38 #include <arch/mm/page.h> 39 #include <mm/as.h> 40 #include <config.h> 41 #include <userspace.h> 36 42 #include <console/console.h> 37 43 … … 44 50 ski_init_console(); 45 51 it_init(); 52 config.init_addr = INIT_ADDRESS; 53 config.init_size = INIT_SIZE; 46 54 } 47 55 … … 54 62 } 55 63 56 57 64 void arch_post_smp_init(void) 58 65 { 59 66 } 67 68 /** Enter userspace and never return. */ 69 void userspace(void) 70 { 71 psr_t psr; 72 rsc_t rsc; 73 74 psr.value = psr_read(); 75 psr.cpl = PL_USER; 76 psr.i = true; /* start with interrupts enabled */ 77 psr.ic = true; 78 psr.ri = 0; /* start with instruction #0 */ 79 80 __asm__ volatile ("mov %0 = ar.rsc\n" : "=r" (rsc.value)); 81 rsc.loadrs = 0; 82 rsc.be = false; 83 rsc.pl = PL_USER; 84 rsc.mode = 3; /* eager mode */ 85 86 switch_to_userspace(UTEXT_ADDRESS, USTACK_ADDRESS+PAGE_SIZE-1, USTACK_ADDRESS, psr.value, rsc.value); 87 88 while (1) { 89 ; 90 } 91 } -
arch/ia64/src/ivt.S
rcd373bb rb994a60 137 137 st8 [r31] = r26, -8 /* save ar.ifs */ 138 138 139 and r30 = ~3, r24 ;; 140 mov ar.rsc = r30 ;; /* place RSE in enforced lazy mode */ 139 and r24 = ~(RSC_PL_MASK), r24 ;; 140 and r30 = ~(RSC_MODE_MASK), r24 ;; 141 mov ar.rsc = r30 ;; /* update RSE state */ 141 142 142 143 mov r27 = ar.rnat … … 163 164 st8 [r31] = r29, -8 /* save ar.bsp */ 164 165 165 mov ar.rsc = r24 /* restore RSE's setting */166 mov ar.rsc = r24 /* restore RSE's setting + kernel privileges */ 166 167 167 168 /* steps 6 - 15 are done by heavyweight_handler_inner() */ … … 301 302 302 303 /* 10. call handler */ 304 movl r1 = _hardcoded_load_address 305 303 306 mov b1 = loc2 304 307 br.call.sptk.many b0 = b1 -
arch/ia64/src/mm/tlb.c
rcd373bb rb994a60 64 64 * @param entry The rest of TLB entry as required by TLB insertion format. 65 65 */ 66 void dtc_mapping_insert(__address va, asid_t asid, tlb_entry_t entry) { 66 void dtc_mapping_insert(__address va, asid_t asid, tlb_entry_t entry) 67 { 67 68 tc_mapping_insert(va, asid, entry, true); 68 69 } … … 74 75 * @param entry The rest of TLB entry as required by TLB insertion format. 75 76 */ 76 void itc_mapping_insert(__address va, asid_t asid, tlb_entry_t entry) { 77 void itc_mapping_insert(__address va, asid_t asid, tlb_entry_t entry) 78 { 77 79 tc_mapping_insert(va, asid, entry, false); 78 80 } … … 336 338 } 337 339 } 338 340 339 341 t = page_mapping_find(AS, va); 340 342 if (t) { -
arch/ia64/src/start.S
rcd373bb rb994a60 125 125 126 126 # initialize gp (Global Pointer) register 127 movl r1 = _hardcoded_load_address ;;127 movl r1 = _hardcoded_load_address 128 128 129 129 /* … … 132 132 movl r14 = _hardcoded_ktext_size 133 133 movl r15 = _hardcoded_kdata_size 134 movl r16 = _hardcoded_load_address 134 movl r16 = _hardcoded_load_address ;; 135 135 addl r17 = @gprel(hardcoded_ktext_size), gp 136 136 addl r18 = @gprel(hardcoded_kdata_size), gp
Note:
See TracChangeset
for help on using the changeset viewer.