Changeset 762a824 in mainline
- Timestamp:
- 2006-05-01T14:44:37Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 16dad032
- Parents:
- 0f27b4c
- Location:
- arch/ppc32
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc32/include/asm.h
r0f27b4c r762a824 41 41 */ 42 42 static inline ipl_t interrupts_enable(void) { 43 ipl_t v ;43 ipl_t v = 0; 44 44 ipl_t tmp; 45 45 46 __asm__volatile (46 asm volatile ( 47 47 "mfmsr %0\n" 48 48 "mfmsr %1\n" … … 65 65 ipl_t tmp; 66 66 67 __asm__volatile (67 asm volatile ( 68 68 "mfmsr %0\n" 69 69 "mfmsr %1\n" … … 84 84 ipl_t tmp; 85 85 86 __asm__volatile (86 asm volatile ( 87 87 "mfmsr %1\n" 88 88 "rlwimi %0, %1, 0, 17, 15\n" … … 104 104 static inline ipl_t interrupts_read(void) { 105 105 ipl_t v; 106 __asm__ volatile ( 106 107 asm volatile ( 107 108 "mfmsr %0\n" 108 109 : "=r" (v) … … 121 122 __address v; 122 123 123 __asm__ volatile ("and %0, %%sp, %1\n" : "=r" (v) : "r" (~(STACK_SIZE-1))); 124 124 asm volatile ( 125 "and %0, %%sp, %1\n" 126 : "=r" (v) 127 : "r" (~(STACK_SIZE - 1)) 128 ); 125 129 return v; 126 130 } -
arch/ppc32/include/asm/regname.h
r0f27b4c r762a824 195 195 #define msr_ir (1 << 4) 196 196 #define msr_dr (1 << 5) 197 #define msr_pr (1 << 14) 198 #define msr_ee (1 << 15) 197 199 198 200 /* HID0 bits */ -
arch/ppc32/include/atomic.h
r0f27b4c r762a824 34 34 long tmp; 35 35 36 asm __volatile__(36 asm volatile ( 37 37 "1:\n" 38 38 "lwarx %0, 0, %2\n" … … 42 42 : "=&r" (tmp), "=m" (val->count) 43 43 : "r" (&val->count), "m" (val->count) 44 : "cc"); 44 : "cc" 45 ); 45 46 } 46 47 … … 49 50 long tmp; 50 51 51 asm __volatile__(52 asm volatile ( 52 53 "1:\n" 53 54 "lwarx %0, 0, %2\n" … … 57 58 : "=&r" (tmp), "=m" (val->count) 58 59 : "r" (&val->count), "m" (val->count) 59 : "cc"); 60 : "cc" 61 ); 60 62 } 61 63 -
arch/ppc32/include/barrier.h
r0f27b4c r762a824 30 30 #define __ppc32_BARRIER_H__ 31 31 32 #define CS_ENTER_BARRIER() __asm__volatile ("" ::: "memory")33 #define CS_LEAVE_BARRIER() __asm__volatile ("" ::: "memory")32 #define CS_ENTER_BARRIER() asm volatile ("" ::: "memory") 33 #define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory") 34 34 35 #define memory_barrier() __asm__volatile ("sync" ::: "memory")36 #define read_barrier() __asm__volatile ("sync" ::: "memory")37 #define write_barrier() __asm__volatile ("eieio" ::: "memory")35 #define memory_barrier() asm volatile ("sync" ::: "memory") 36 #define read_barrier() asm volatile ("sync" ::: "memory") 37 #define write_barrier() asm volatile ("eieio" ::: "memory") 38 38 39 39 #endif -
arch/ppc32/include/byteorder.h
r0f27b4c r762a824 52 52 __address v; 53 53 54 __asm__ volatile ("lwbrx %0, %1, %2\n" : "=r" (v) : "i" (0) , "r" (&n)); 55 54 asm volatile ( 55 "lwbrx %0, %1, %2\n" 56 : "=r" (v) 57 : "i" (0), "r" (&n) 58 ); 56 59 return v; 57 60 } 61 58 62 #endif -
arch/ppc32/include/cpuid.h
r0f27b4c r762a824 39 39 static inline void cpu_version(struct cpu_info *info) 40 40 { 41 __asm__volatile (42 "mf spr %0, 287\n"41 asm volatile ( 42 "mfpvr %0\n" 43 43 : "=r" (*info) 44 44 ); -
arch/ppc32/include/exception.h
r0f27b4c r762a824 48 48 __u32 r10; 49 49 __u32 r11; 50 __u32 r12;51 50 __u32 r13; 52 51 __u32 r14; -
arch/ppc32/include/interrupt.h
r0f27b4c r762a824 30 30 #define __ppc32_INTERRUPT_H__ 31 31 32 #define IRQ_COUNT 1 /* TODO */ 33 32 #define IRQ_COUNT 1 34 33 #define IVT_ITEMS 15 35 34 #define INT_OFFSET 0 -
arch/ppc32/src/asm.S
r0f27b4c r762a824 40 40 # r3 = uspace_uarg 41 41 # r4 = stack 42 # r5 = entry 42 # r5 = entry 43 44 # disable interrupts 43 45 44 46 mfmsr r31 … … 52 54 # set problem state, enable interrupts 53 55 54 ori r31, r31, 1 << 1455 ori r31, r31, 1 << 1556 ori r31, r31, msr_pr 57 ori r31, r31, msr_ee 56 58 mtsrr1 r31 57 59 … … 65 67 66 68 iret: 67 lwz r3, 144(sp)68 mtxer r369 70 lwz r3, 140(sp)71 mtctr r372 73 lwz r3, 136(sp)74 mtcr r375 76 lwz r3, 132(sp)77 mtlr r378 79 lwz r3, 128(sp)80 mtspr srr1, r381 82 lwz r3, 124(sp)83 mtspr srr0, r384 85 69 lwz r0, 0(sp) 86 70 lwz r2, 4(sp) … … 94 78 lwz r10, 36(sp) 95 79 lwz r11, 40(sp) 96 lwz r12, 44(sp) 97 lwz r13, 48(sp) 98 lwz r14, 52(sp) 99 lwz r15, 56(sp) 100 lwz r16, 60(sp) 101 lwz r17, 64(sp) 102 lwz r18, 68(sp) 103 lwz r19, 72(sp) 104 lwz r20, 76(sp) 105 lwz r21, 80(sp) 106 lwz r22, 84(sp) 107 lwz r23, 88(sp) 108 lwz r24, 92(sp) 109 lwz r25, 96(sp) 110 lwz r26, 100(sp) 111 lwz r27, 104(sp) 112 lwz r28, 108(sp) 113 lwz r29, 112(sp) 114 lwz r30, 116(sp) 115 lwz r31, 120(sp) 116 117 mfspr sp, sprg1 80 lwz r13, 44(sp) 81 lwz r14, 48(sp) 82 lwz r15, 52(sp) 83 lwz r16, 56(sp) 84 lwz r17, 60(sp) 85 lwz r18, 64(sp) 86 lwz r19, 68(sp) 87 lwz r20, 72(sp) 88 lwz r21, 76(sp) 89 lwz r22, 80(sp) 90 lwz r23, 84(sp) 91 lwz r24, 88(sp) 92 lwz r25, 92(sp) 93 lwz r26, 96(sp) 94 lwz r27, 100(sp) 95 lwz r28, 104(sp) 96 lwz r29, 108(sp) 97 lwz r30, 112(sp) 98 lwz r31, 116(sp) 99 100 lwz r12, 120(sp) 101 mtsrr0 r12 102 103 lwz r12, 124(sp) 104 mtsrr1 r12 105 106 lwz r12, 128(sp) 107 mtlr r12 108 109 lwz r12, 132(sp) 110 mtcr r12 111 112 lwz r12, 136(sp) 113 mtctr r12 114 115 lwz r12, 140(sp) 116 mtxer r12 117 118 mfsprg1 sp 119 mfsprg2 r12 118 120 119 121 rfi -
arch/ppc32/src/boot/boot.S
r0f27b4c r762a824 35 35 kernel_image_start: 36 36 37 # load tempora rystack37 # load temporal kernel stack 38 38 39 lis sp, end_stack@ha 40 addi sp, sp, end_stack@l 39 lis sp, kernel_stack@ha 40 addi sp, sp, kernel_stack@l 41 42 # set kernel stack for interrupt handling 43 44 mr r31, sp 45 subis r31, r31, 0x8000 46 mtsprg0 r31 41 47 42 48 # r3 contains physical address of bootinfo_t 43 49 # r4 contains size of bootinfo_t 44 50 45 lis r31, 0x80000000@ha 46 addi r31, r31, 0x80000000@l 47 48 add r3, r3, r31 51 addis r3, r3, 0x8000 49 52 50 53 lis r31, bootinfo@ha … … 73 76 .section K_DATA_START, "aw", @progbits 74 77 78 .align 12 79 kernel_stack_bottom: 75 80 .space TEMP_STACK_SIZE 76 end_stack:81 kernel_stack: -
arch/ppc32/src/exception.S
r0f27b4c r762a824 33 33 34 34 .macro CONTEXT_STORE 35 mtspr sprg1, sp 36 37 subis sp, sp, 0x8000 38 39 subi sp, sp, 144 35 36 # save SP in SPRG1 37 # save R12 in SPRG2, backup CR in R12 38 39 mtsprg1 sp 40 mtsprg2 r12 41 mfcr r12 42 43 # check whether SP is in kernel 44 45 andis. sp, sp, 0x8000 46 bne 1f 47 48 # stack is in user-space 49 50 mfsprg0 sp 51 52 b 2f 53 54 1: 55 56 # stack is in kernel 57 58 mfsprg1 sp 59 subis sp, sp, 0x8000 60 61 2: 62 63 subi sp, sp, 140 40 64 stw r0, 0(sp) 41 65 stw r2, 4(sp) … … 49 73 stw r10, 36(sp) 50 74 stw r11, 40(sp) 51 stw r12, 44(sp) 52 stw r13, 48(sp) 53 stw r14, 52(sp) 54 stw r15, 56(sp) 55 stw r16, 60(sp) 56 stw r17, 64(sp) 57 stw r18, 68(sp) 58 stw r19, 72(sp) 59 stw r20, 76(sp) 60 stw r21, 80(sp) 61 stw r22, 84(sp) 62 stw r23, 88(sp) 63 stw r24, 92(sp) 64 stw r25, 96(sp) 65 stw r26, 100(sp) 66 stw r27, 104(sp) 67 stw r28, 108(sp) 68 stw r29, 112(sp) 69 stw r30, 116(sp) 70 stw r31, 120(sp) 71 72 mfspr r3, srr0 75 stw r13, 44(sp) 76 stw r14, 48(sp) 77 stw r15, 52(sp) 78 stw r16, 56(sp) 79 stw r17, 60(sp) 80 stw r18, 64(sp) 81 stw r19, 68(sp) 82 stw r20, 72(sp) 83 stw r21, 76(sp) 84 stw r22, 80(sp) 85 stw r23, 84(sp) 86 stw r24, 88(sp) 87 stw r25, 92(sp) 88 stw r26, 96(sp) 89 stw r27, 100(sp) 90 stw r28, 104(sp) 91 stw r29, 108(sp) 92 stw r30, 112(sp) 93 stw r31, 116(sp) 94 95 mfsrr0 r3 96 stw r3, 120(sp) 97 98 mfsrr1 r3 73 99 stw r3, 124(sp) 74 100 75 mf spr r3, srr1101 mflr r3 76 102 stw r3, 128(sp) 77 103 78 mflr r3 79 stw r3, 132(sp) 80 81 mfcr r3 104 stw r12, 132(sp) 105 106 mfctr r3 82 107 stw r3, 136(sp) 83 108 84 mf ctr r3109 mfxer r3 85 110 stw r3, 140(sp) 86 87 mfxer r388 stw r3, 144(sp)89 111 .endm 90 112 … … 103 125 exc_data_storage: 104 126 CONTEXT_STORE 105 127 106 128 lis r3, pht_refill@ha 107 129 addi r3, r3, pht_refill@l 108 mts pr srr0,r3130 mtsrr0 r3 109 131 110 132 mfmsr r3 111 133 ori r3, r3, (msr_ir | msr_dr)@l 112 mts pr srr1,r3134 mtsrr1 r3 113 135 114 136 lis r3, iret@ha … … 117 139 118 140 addis sp, sp, 0x8000 141 mr r3, sp 119 142 rfi 120 143 … … 122 145 .global exc_instruction_storage 123 146 exc_instruction_storage: 124 b exc_instruction_storage 125 126 .org 0x480 127 .global exc_instruction_segment 128 exc_instruction_segment: 129 b exc_instruction_segment 147 CONTEXT_STORE 148 149 lis r3, pht_refill@ha 150 addi r3, r3, pht_refill@l 151 mtsrr0 r3 152 153 mfmsr r3 154 ori r3, r3, (msr_ir | msr_dr)@l 155 mtsrr1 r3 156 157 lis r3, iret@ha 158 addi r3, r3, iret@l 159 mtlr r3 160 161 addis sp, sp, 0x8000 162 mr r3, sp 163 rfi 130 164 131 165 .org 0x500 … … 156 190 lis r3, exc_dispatch@ha 157 191 addi r3, r3, exc_dispatch@l 158 mts pr srr0,r3192 mtsrr0 r3 159 193 160 194 mfmsr r3 161 195 ori r3, r3, (msr_ir | msr_dr)@l 162 mts pr srr1,r3196 mtsrr1 r3 163 197 164 198 lis r3, iret@ha … … 168 202 addis sp, sp, 0x8000 169 203 li r3, 10 204 mr r4, sp 170 205 rfi 171 206 -
arch/ppc32/src/interrupt.c
r0f27b4c r762a824 32 32 #include <arch.h> 33 33 #include <time/clock.h> 34 #include <print.h>35 34 #include <ipc/sysipc.h> 35 36 36 37 37 void start_decrementer(void) -
arch/ppc32/src/proc/scheduler.c
r0f27b4c r762a824 28 28 29 29 #include <arch/mm/page.h> 30 #include <arch/boot/boot.h> 30 31 #include <proc/scheduler.h> 31 32 #include <proc/thread.h> 32 33 #include <arch.h> 33 34 __address supervisor_sp;35 __address supervisor_sp_physical;36 34 37 35 /** Perform ppc32 specific tasks needed before the new task is run. */ … … 43 41 void before_thread_runs_arch(void) 44 42 { 45 supervisor_sp = (__address) &THREAD->kstack[THREAD_STACK_SIZE - SP_DELTA]; 46 supervisor_sp_physical = KA2PA(supervisor_sp_physical); 43 asm volatile ( 44 "mtsprg0 %0\n" 45 : 46 : "r" (KA2PA(&THREAD->kstack[THREAD_STACK_SIZE - SP_DELTA])) 47 ); 47 48 } 48 49
Note:
See TracChangeset
for help on using the changeset viewer.