Rev 1705 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1705 | Rev 1742 | ||
---|---|---|---|
Line 65... | Line 65... | ||
65 | 65 | ||
66 | #define TLB_EXC ((char *) 0x80000000) |
66 | #define TLB_EXC ((char *) 0x80000000) |
67 | #define NORM_EXC ((char *) 0x80000180) |
67 | #define NORM_EXC ((char *) 0x80000180) |
68 | #define CACHE_EXC ((char *) 0x80000100) |
68 | #define CACHE_EXC ((char *) 0x80000100) |
69 | 69 | ||
- | 70 | ||
- | 71 | /* Why the linker moves the variable 64K away in assembler |
|
- | 72 | * when not in .text section ???????? |
|
- | 73 | */ |
|
- | 74 | __address supervisor_sp __attribute__ ((section (".text"))); |
|
- | 75 | /* Stack pointer saved when entering user mode */ |
|
- | 76 | /* TODO: How do we do it on SMP system???? */ |
|
70 | bootinfo_t bootinfo; |
77 | bootinfo_t bootinfo __attribute__ ((section (".text"))); |
71 | 78 | ||
72 | void arch_pre_main(void) |
79 | void arch_pre_main(void) |
73 | { |
80 | { |
74 | /* Setup usermode */ |
81 | /* Setup usermode */ |
75 | init.cnt = bootinfo.cnt; |
82 | init.cnt = bootinfo.cnt; |
Line 118... | Line 125... | ||
118 | } |
125 | } |
119 | 126 | ||
120 | void arch_post_mm_init(void) |
127 | void arch_post_mm_init(void) |
121 | { |
128 | { |
122 | #ifdef CONFIG_FB |
129 | #ifdef CONFIG_FB |
123 | fb_init(0x12000000, 640, 480, 24, 1920); // gxemul framebuffer |
130 | fb_init(0x12000000, 640, 480, 24, 1920); // gxemul framebuffer |
124 | #endif |
131 | #endif |
125 | sysinfo_set_item_val("machine." STRING(MACHINE),NULL,1); |
132 | sysinfo_set_item_val("machine." STRING(MACHINE),NULL,1); |
126 | } |
133 | } |
127 | 134 | ||
128 | void arch_pre_smp_init(void) |
135 | void arch_pre_smp_init(void) |
129 | { |
136 | { |
130 | } |
137 | } |
131 | 138 | ||
132 | void arch_post_smp_init(void) |
139 | void arch_post_smp_init(void) |
133 | { |
140 | { |
134 | } |
141 | } |
135 | 142 | ||
136 | /* Stack pointer saved when entering user mode */ |
- | |
137 | /* TODO: How do we do it on SMP system???? */ |
- | |
138 | - | ||
139 | /* Why the linker moves the variable 64K away in assembler |
- | |
140 | * when not in .text section ???????? |
- | |
141 | */ |
- | |
142 | __address supervisor_sp __attribute__ ((section (".text"))); |
- | |
143 | - | ||
144 | void userspace(uspace_arg_t *kernel_uarg) |
143 | void userspace(uspace_arg_t *kernel_uarg) |
145 | { |
144 | { |
146 | /* EXL=1, UM=1, IE=1 */ |
145 | /* EXL=1, UM=1, IE=1 */ |
147 | cp0_status_write(cp0_status_read() | (cp0_status_exl_exception_bit | |
146 | cp0_status_write(cp0_status_read() | (cp0_status_exl_exception_bit | |
148 | cp0_status_um_bit | |
147 | cp0_status_um_bit | |