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 ---