Changeset b994a60 in mainline
- Timestamp:
- 2006-03-09T12:44:27Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 901122b
- Parents:
- cd373bb
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia64/Makefile.inc
rcd373bb rb994a60 39 39 # 40 40 41 INIT_ADDRESS = 0xe000000000400000 42 INIT_SIZE = 0x100000 43 41 44 CFLAGS += -mconstant-gp -fno-unwind-tables 42 45 LFLAGS += -EL 43 46 AFLAGS += -mconstant-gp 47 48 DEFS += -DINIT_ADDRESS=$(INIT_ADDRESS) -DINIT_SIZE=$(INIT_SIZE) 44 49 45 50 ## Compile with page hash table support. -
arch/ia64/include/asm.h
rcd373bb rb994a60 49 49 } 50 50 51 /** Return Processor State Register. 52 * 53 * @return PSR. 54 */ 55 static inline __u64 psr_read(void) 56 { 57 __u64 v; 58 59 __asm__ volatile ("mov %0 = psr\n" : "=r" (v)); 60 61 return v; 62 } 63 51 64 /** Read IVA (Interruption Vector Address). 52 65 * … … 233 246 static inline ipl_t interrupts_read(void) 234 247 { 235 __u64 v; 236 237 __asm__ volatile ("mov %0 = psr\n" : "=r" (v)); 238 239 return (ipl_t) v; 248 return (ipl_t) psr_read(); 240 249 } 241 250 … … 250 259 extern void asm_delay_loop(__u32 t); 251 260 261 extern void switch_to_userspace(__address entry, __address sp, __address bsp, __u64 ipsr, __u64 rsc); 262 252 263 #endif -
arch/ia64/include/context.h
rcd373bb rb994a60 31 31 32 32 #include <arch/types.h> 33 #include <arch/register.h> 33 34 #include <typedefs.h> 34 35 #include <align.h> … … 42 43 */ 43 44 #define SP_DELTA (0+ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT)) 44 45 #define PFM_MASK (~0x3fffffffff)46 45 47 46 #ifdef context_set -
arch/ia64/include/mm/as.h
rcd373bb rb994a60 32 32 #include <arch/types.h> 33 33 34 #define KERNEL_ADDRESS_SPACE_START_ARCH (__address) 0x 800000000000000035 #define KERNEL_ADDRESS_SPACE_END_ARCH (__address) 0xffffffffffffffff 36 #define USER_ADDRESS_SPACE_START_ARCH (__address) 0x0000000000000000 37 #define USER_ADDRESS_SPACE_END_ARCH (__address) 0x 7fffffffffffffff34 #define KERNEL_ADDRESS_SPACE_START_ARCH (__address) 0xe000000000000000ULL 35 #define KERNEL_ADDRESS_SPACE_END_ARCH (__address) 0xffffffffffffffffULL 36 #define USER_ADDRESS_SPACE_START_ARCH (__address) 0x0000000000000000ULL 37 #define USER_ADDRESS_SPACE_END_ARCH (__address) 0xdfffffffffffffffULL 38 38 39 #define UTEXT_ADDRESS_ARCH 0x00000000000 0100040 #define USTACK_ADDRESS_ARCH (0x7fffffffffffffff-(PAGE_SIZE-1))41 #define UDATA_ADDRESS_ARCH 0x00000000010 0100039 #define UTEXT_ADDRESS_ARCH 0x0000000000010000ULL 40 #define USTACK_ADDRESS_ARCH 0x0000000ff0000000ULL 41 #define UDATA_ADDRESS_ARCH 0x0000000001010000ULL 42 42 43 43 extern void as_arch_init(void); -
arch/ia64/include/register.h
rcd373bb rb994a60 30 30 #define __ia64_REGISTER_H__ 31 31 32 #ifndef __ASM__33 #include <arch/types.h>34 #endif35 36 32 #define CR_IVR_MASK 0xf 37 33 #define PSR_IC_MASK 0x2000 … … 45 41 #define PSR_CPL_SHIFT 32 46 42 #define PSR_CPL_MASK_SHIFTED 3 43 44 #define PFM_MASK (~0x3fffffffff) 45 46 #define RSC_MODE_MASK 3 47 #define RSC_PL_MASK 12 47 48 48 49 /** Application registers. */ … … 121 122 122 123 #ifndef __ASM__ 124 125 #include <arch/types.h> 126 127 /** Processor Status Register. */ 128 union psr { 129 __u64 value; 130 struct { 131 unsigned : 1; 132 unsigned be : 1; /**< Big-Endian data accesses. */ 133 unsigned up : 1; /**< User Performance monitor enable. */ 134 unsigned ac : 1; /**< Alignment Check. */ 135 unsigned mfl : 1; /**< Lower floating-point register written. */ 136 unsigned mfh : 1; /**< Upper floating-point register written. */ 137 unsigned : 7; 138 unsigned ic : 1; /**< Interruption Collection. */ 139 unsigned i : 1; /**< Interrupt Bit. */ 140 unsigned pk : 1; /**< Protection Key enable. */ 141 unsigned : 1; 142 unsigned dt : 1; /**< Data address Translation. */ 143 unsigned dfl : 1; /**< Disabled Floating-point Low register set. */ 144 unsigned dfh : 1; /**< Disabled Floating-point High register set. */ 145 unsigned sp : 1; /**< Secure Performance monitors. */ 146 unsigned pp : 1; /**< Privileged Performance monitor enable. */ 147 unsigned di : 1; /**< Disable Instruction set transition. */ 148 unsigned si : 1; /**< Secure Interval timer. */ 149 unsigned db : 1; /**< Debug Breakpoint fault. */ 150 unsigned lp : 1; /**< Lower Privilege transfer trap. */ 151 unsigned tb : 1; /**< Taken Branch trap. */ 152 unsigned rt : 1; /**< Register Stack Translation. */ 153 unsigned : 4; 154 unsigned cpl : 2; /**< Current Privilege Level. */ 155 unsigned is : 1; /**< Instruction Set. */ 156 unsigned mc : 1; /**< Machine Check abort mask. */ 157 unsigned it : 1; /**< Instruction address Translation. */ 158 unsigned id : 1; /**< Instruction Debug fault disable. */ 159 unsigned da : 1; /**< Disable Data Access and Dirty-bit faults. */ 160 unsigned dd : 1; /**< Data Debug fault disable. */ 161 unsigned ss : 1; /**< Single Step enable. */ 162 unsigned ri : 2; /**< Restart Instruction. */ 163 unsigned ed : 1; /**< Exception Deferral. */ 164 unsigned bn : 1; /**< Register Bank. */ 165 unsigned ia : 1; /**< Disable Instruction Access-bit faults. */ 166 } __attribute__ ((packed)); 167 }; 168 typedef union psr psr_t; 169 170 /** Register Stack Configuration Register */ 171 union rsc { 172 __u64 value; 173 struct { 174 unsigned mode : 2; 175 unsigned pl : 2; /**< Privilege Level. */ 176 unsigned be : 1; /**< Big-endian. */ 177 unsigned : 11; 178 unsigned loadrs : 14; 179 } __attribute__ ((packed)); 180 }; 181 typedef union rsc rsc_t; 182 123 183 /** External Interrupt Vector Register */ 124 184 union cr_ivr { -
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 -
contrib/conf/ski.conf
rcd373bb rb994a60 1 load SPARTAN/kernel.bin2 load SPARTAN/load.bin 1 load HelenOS/boot/kernel.bin 2 romload HelenOS/boot/init 0x400000
Note:
See TracChangeset
for help on using the changeset viewer.