entry.S (7d4320956f0f8aa2c36c23f209acc3e4c3ae52d6) | entry.S (600eb6110a3f15aedffc3cce31b6065a09e7cb31) |
---|---|
1/* 2 * Low-level system-call handling, trap handlers and context-switching 3 * 4 * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu> 5 * Copyright (C) 2008-2009 PetaLogix 6 * Copyright (C) 2003 John Williams <jwilliams@itee.uq.edu.au> 7 * Copyright (C) 2001,2002 NEC Corporation 8 * Copyright (C) 2001,2002 Miles Bader <miles@gnu.org> --- 172 unchanged lines hidden (view full) --- 181 swi r8, r1, PTO+PT_R8; \ 182 swi r9, r1, PTO+PT_R9; \ 183 swi r10, r1, PTO+PT_R10; \ 184 swi r11, r1, PTO+PT_R11; /* save clobbered regs after rval */\ 185 swi r12, r1, PTO+PT_R12; \ 186 swi r13, r1, PTO+PT_R13; /* Save SDA2 */ \ 187 swi r14, r1, PTO+PT_PC; /* PC, before IRQ/trap */ \ 188 swi r15, r1, PTO+PT_R15; /* Save LP */ \ | 1/* 2 * Low-level system-call handling, trap handlers and context-switching 3 * 4 * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu> 5 * Copyright (C) 2008-2009 PetaLogix 6 * Copyright (C) 2003 John Williams <jwilliams@itee.uq.edu.au> 7 * Copyright (C) 2001,2002 NEC Corporation 8 * Copyright (C) 2001,2002 Miles Bader <miles@gnu.org> --- 172 unchanged lines hidden (view full) --- 181 swi r8, r1, PTO+PT_R8; \ 182 swi r9, r1, PTO+PT_R9; \ 183 swi r10, r1, PTO+PT_R10; \ 184 swi r11, r1, PTO+PT_R11; /* save clobbered regs after rval */\ 185 swi r12, r1, PTO+PT_R12; \ 186 swi r13, r1, PTO+PT_R13; /* Save SDA2 */ \ 187 swi r14, r1, PTO+PT_PC; /* PC, before IRQ/trap */ \ 188 swi r15, r1, PTO+PT_R15; /* Save LP */ \ |
189 swi r16, r1, PTO+PT_R16; \ 190 swi r17, r1, PTO+PT_R17; \ |
|
189 swi r18, r1, PTO+PT_R18; /* Save asm scratch reg */ \ 190 swi r19, r1, PTO+PT_R19; \ 191 swi r20, r1, PTO+PT_R20; \ 192 swi r21, r1, PTO+PT_R21; \ 193 swi r22, r1, PTO+PT_R22; \ 194 swi r23, r1, PTO+PT_R23; \ 195 swi r24, r1, PTO+PT_R24; \ 196 swi r25, r1, PTO+PT_R25; \ --- 18 unchanged lines hidden (view full) --- 215 lwi r8, r1, PTO+PT_R8; \ 216 lwi r9, r1, PTO+PT_R9; \ 217 lwi r10, r1, PTO+PT_R10; \ 218 lwi r11, r1, PTO+PT_R11; /* restore clobbered regs after rval */\ 219 lwi r12, r1, PTO+PT_R12; \ 220 lwi r13, r1, PTO+PT_R13; /* restore SDA2 */ \ 221 lwi r14, r1, PTO+PT_PC; /* RESTORE_LINK PC, before IRQ/trap */\ 222 lwi r15, r1, PTO+PT_R15; /* restore LP */ \ | 191 swi r18, r1, PTO+PT_R18; /* Save asm scratch reg */ \ 192 swi r19, r1, PTO+PT_R19; \ 193 swi r20, r1, PTO+PT_R20; \ 194 swi r21, r1, PTO+PT_R21; \ 195 swi r22, r1, PTO+PT_R22; \ 196 swi r23, r1, PTO+PT_R23; \ 197 swi r24, r1, PTO+PT_R24; \ 198 swi r25, r1, PTO+PT_R25; \ --- 18 unchanged lines hidden (view full) --- 217 lwi r8, r1, PTO+PT_R8; \ 218 lwi r9, r1, PTO+PT_R9; \ 219 lwi r10, r1, PTO+PT_R10; \ 220 lwi r11, r1, PTO+PT_R11; /* restore clobbered regs after rval */\ 221 lwi r12, r1, PTO+PT_R12; \ 222 lwi r13, r1, PTO+PT_R13; /* restore SDA2 */ \ 223 lwi r14, r1, PTO+PT_PC; /* RESTORE_LINK PC, before IRQ/trap */\ 224 lwi r15, r1, PTO+PT_R15; /* restore LP */ \ |
225 lwi r16, r1, PTO+PT_R16; \ 226 lwi r17, r1, PTO+PT_R17; \ |
|
223 lwi r18, r1, PTO+PT_R18; /* restore asm scratch reg */ \ 224 lwi r19, r1, PTO+PT_R19; \ 225 lwi r20, r1, PTO+PT_R20; \ 226 lwi r21, r1, PTO+PT_R21; \ 227 lwi r22, r1, PTO+PT_R22; \ 228 lwi r23, r1, PTO+PT_R23; \ 229 lwi r24, r1, PTO+PT_R24; \ 230 lwi r25, r1, PTO+PT_R25; \ --- 525 unchanged lines hidden (view full) --- 756 lwi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* Reload kernel stack-ptr*/ 757 758 /* BIP bit is set on entry, no interrupts can occur */ 759 addik r1, r1, CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - STATE_SAVE_SIZE; 760 SAVE_REGS; 761 /* save all regs to pt_reg structure */ 762 swi r0, r1, PTO+PT_R0; /* R0 must be saved too */ 763 swi r14, r1, PTO+PT_R14 /* rewrite saved R14 value */ | 227 lwi r18, r1, PTO+PT_R18; /* restore asm scratch reg */ \ 228 lwi r19, r1, PTO+PT_R19; \ 229 lwi r20, r1, PTO+PT_R20; \ 230 lwi r21, r1, PTO+PT_R21; \ 231 lwi r22, r1, PTO+PT_R22; \ 232 lwi r23, r1, PTO+PT_R23; \ 233 lwi r24, r1, PTO+PT_R24; \ 234 lwi r25, r1, PTO+PT_R25; \ --- 525 unchanged lines hidden (view full) --- 760 lwi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* Reload kernel stack-ptr*/ 761 762 /* BIP bit is set on entry, no interrupts can occur */ 763 addik r1, r1, CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - STATE_SAVE_SIZE; 764 SAVE_REGS; 765 /* save all regs to pt_reg structure */ 766 swi r0, r1, PTO+PT_R0; /* R0 must be saved too */ 767 swi r14, r1, PTO+PT_R14 /* rewrite saved R14 value */ |
764 swi r16, r1, PTO+PT_R16 | |
765 swi r16, r1, PTO+PT_PC; /* PC and r16 are the same */ | 768 swi r16, r1, PTO+PT_PC; /* PC and r16 are the same */ |
766 swi r17, r1, PTO+PT_R17 | |
767 /* save special purpose registers to pt_regs */ 768 mfs r11, rear; 769 swi r11, r1, PTO+PT_EAR; 770 mfs r11, resr; 771 swi r11, r1, PTO+PT_ESR; 772 mfs r11, rfsr; 773 swi r11, r1, PTO+PT_FSR; 774 --- 17 unchanged lines hidden (view full) --- 7921: lwi r1, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */ 793 tophys(r1,r1); 794 lwi r1, r1, TS_THREAD_INFO; /* get the thread info */ 795 addik r1, r1, THREAD_SIZE; /* calculate kernel stack pointer */ 796 tophys(r1,r1); 797 798 addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */ 799 SAVE_REGS; | 769 /* save special purpose registers to pt_regs */ 770 mfs r11, rear; 771 swi r11, r1, PTO+PT_EAR; 772 mfs r11, resr; 773 swi r11, r1, PTO+PT_ESR; 774 mfs r11, rfsr; 775 swi r11, r1, PTO+PT_FSR; 776 --- 17 unchanged lines hidden (view full) --- 7941: lwi r1, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */ 795 tophys(r1,r1); 796 lwi r1, r1, TS_THREAD_INFO; /* get the thread info */ 797 addik r1, r1, THREAD_SIZE; /* calculate kernel stack pointer */ 798 tophys(r1,r1); 799 800 addik r1, r1, -STATE_SAVE_SIZE; /* Make room on the stack. */ 801 SAVE_REGS; |
800 swi r17, r1, PTO+PT_R17; 801 swi r16, r1, PTO+PT_R16; | |
802 swi r16, r1, PTO+PT_PC; /* Save LP */ 803 swi r0, r1, PTO + PT_MODE; /* Was in user-mode. */ 804 lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); 805 swi r11, r1, PTO+PT_R1; /* Store user SP. */ 806 lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); 807 tovirt(r1,r1) 808 set_vms; 809 addik r5, r1, PTO; --- 29 unchanged lines hidden (view full) --- 839 add r6, r0, r0; /* Arg 2: sigset_t *oldset */ 840 841/* Finally, return to user state. */ 8421: swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ 843 VM_OFF; 844 tophys(r1,r1); 845 /* MS: Restore all regs */ 846 RESTORE_REGS | 802 swi r16, r1, PTO+PT_PC; /* Save LP */ 803 swi r0, r1, PTO + PT_MODE; /* Was in user-mode. */ 804 lwi r11, r0, TOPHYS(PER_CPU(ENTRY_SP)); 805 swi r11, r1, PTO+PT_R1; /* Store user SP. */ 806 lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); 807 tovirt(r1,r1) 808 set_vms; 809 addik r5, r1, PTO; --- 29 unchanged lines hidden (view full) --- 839 add r6, r0, r0; /* Arg 2: sigset_t *oldset */ 840 841/* Finally, return to user state. */ 8421: swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ 843 VM_OFF; 844 tophys(r1,r1); 845 /* MS: Restore all regs */ 846 RESTORE_REGS |
847 lwi r17, r1, PTO+PT_R17; 848 lwi r16, r1, PTO+PT_R16; | |
849 addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space */ 850 lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer */ 851DBTRAP_return_user: /* MS: Make global symbol for debugging */ 852 rtbd r16, 0; /* MS: Instructions to return from a debug trap */ 853 nop; 854 855/* MS: Return to kernel state - kgdb */ 8562: VM_OFF; 857 tophys(r1,r1); 858 /* MS: Restore all regs */ 859 RESTORE_REGS 860 lwi r14, r1, PTO+PT_R14; 861 lwi r16, r1, PTO+PT_PC; | 847 addik r1, r1, STATE_SAVE_SIZE /* Clean up stack space */ 848 lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer */ 849DBTRAP_return_user: /* MS: Make global symbol for debugging */ 850 rtbd r16, 0; /* MS: Instructions to return from a debug trap */ 851 nop; 852 853/* MS: Return to kernel state - kgdb */ 8542: VM_OFF; 855 tophys(r1,r1); 856 /* MS: Restore all regs */ 857 RESTORE_REGS 858 lwi r14, r1, PTO+PT_R14; 859 lwi r16, r1, PTO+PT_PC; |
862 lwi r17, r1, PTO+PT_R17; | |
863 addik r1, r1, STATE_SAVE_SIZE; /* MS: Clean up stack space */ 864 tovirt(r1,r1); 865DBTRAP_return_kernel: /* MS: Make global symbol for debugging */ 866 rtbd r16, 0; /* MS: Instructions to return from a debug trap */ 867 nop; 868 869 870ENTRY(_switch_to) --- 132 unchanged lines hidden --- | 860 addik r1, r1, STATE_SAVE_SIZE; /* MS: Clean up stack space */ 861 tovirt(r1,r1); 862DBTRAP_return_kernel: /* MS: Make global symbol for debugging */ 863 rtbd r16, 0; /* MS: Instructions to return from a debug trap */ 864 nop; 865 866 867ENTRY(_switch_to) --- 132 unchanged lines hidden --- |