Refactor switch context ASM files to comply to Wizard.
authorbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 10 Apr 2009 18:13:22 +0000 (18:13 +0000)
committerbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 10 Apr 2009 18:13:22 +0000 (18:13 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@2490 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/cpu/arm/hw/switch_arm.S
bertos/cpu/arm/hw/switch_ctx_arm.S [new file with mode: 0644]
bertos/cpu/avr/hw/switch_avr.S
bertos/cpu/avr/hw/switch_ctx_avr.S [new file with mode: 0644]
bertos/emul/switch.S
bertos/emul/switch_ctx_emul.S [new file with mode: 0644]
bertos/kern/proc.h
examples/at91sam7s/at91sam7s.mk
examples/demo/demo.mk
test/run_tests.sh

index bde843cda734cd14ed7066fcb69dfa096dc2c4b2..38ceff8e32d0aff19f3e548509508e9d789e0093 100644 (file)
@@ -1,53 +1,2 @@
-/**
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2007, 2008 Develer S.r.l. (http://www.develer.com/)
- *
- * -->
- *
- * \brief ARM context switch
- *
- * \version $Id: proc.c 18271 2007-10-11 14:51:31Z batt $
- *
- * \author Stefano Fedrigo <aleph@develer.com>
- * \author Francesco Sacchi <batt@develer.com>
- */
-
-/* void asm_switch_context(void **new_sp [r0], void **save_sp [r1]) */
-.globl asm_switch_context
-asm_switch_context:
-       mrs     r2, cpsr               /* Save status. */
-       stmfd   sp!, {r2, r4-r11, lr}  /* Save registers. */
-
-       str     sp, [r1]               /* Save old stack pointer. */
-       ldr     sp, [r0]               /* Load new stack pointer */
-
-       ldmfd   sp!, {r2, r4-r11, lr}  /* Load new registers. */
-       msr     cpsr, r2               /* restore flags reg. */
-
-       mov     pc, lr
+#warning This file is deprecated, use switch_ctx_arm.S
+#include "switch_ctx_arm.S"
diff --git a/bertos/cpu/arm/hw/switch_ctx_arm.S b/bertos/cpu/arm/hw/switch_ctx_arm.S
new file mode 100644 (file)
index 0000000..bde843c
--- /dev/null
@@ -0,0 +1,53 @@
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2007, 2008 Develer S.r.l. (http://www.develer.com/)
+ *
+ * -->
+ *
+ * \brief ARM context switch
+ *
+ * \version $Id: proc.c 18271 2007-10-11 14:51:31Z batt $
+ *
+ * \author Stefano Fedrigo <aleph@develer.com>
+ * \author Francesco Sacchi <batt@develer.com>
+ */
+
+/* void asm_switch_context(void **new_sp [r0], void **save_sp [r1]) */
+.globl asm_switch_context
+asm_switch_context:
+       mrs     r2, cpsr               /* Save status. */
+       stmfd   sp!, {r2, r4-r11, lr}  /* Save registers. */
+
+       str     sp, [r1]               /* Save old stack pointer. */
+       ldr     sp, [r0]               /* Load new stack pointer */
+
+       ldmfd   sp!, {r2, r4-r11, lr}  /* Load new registers. */
+       msr     cpsr, r2               /* restore flags reg. */
+
+       mov     pc, lr
index 50280292ad7a2e90f73aabc4b8f557a380071bc2..e6d0edfa4875ed6010e849b161b8b0dfddcfc16f 100644 (file)
@@ -1,142 +1,2 @@
-/*!
- * \file
- * <!--
- * This file is part of BeRTOS.
- *
- * Bertos is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * As a special exception, you may use this file as part of a free software
- * library without restriction.  Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU General Public License.  This exception does not however
- * invalidate any other reasons why the executable file might be covered by
- * the GNU General Public License.
- *
- * Copyright 2004, 2008 Develer S.r.l. (http://www.develer.com/)
- * Copyright 1999, 2000, 2001 Bernie Innocenti <bernie@codewiz.org>
- * -->
- *
- * \version $Id$
- * \author Bernie Innocenti <bernie@codewiz.org>
- * \author Stefano Fedrigo <aleph@develer.com>
- *
- * \brief AVR context switch
- *
- */
-
-#include <avr/io.h>
-
-/* void asm_switch_context(void **new_sp [r24:r25], void **save_sp [r22:r23]) */
-.globl asm_switch_context
-asm_switch_context:
-
-;      r0 is the TEMP REG and can be used freely.
-;      r1 is the ZERO REG and must always contain 0.
-;
-;      Stack frame is 19 byte, remember to update
-;      CPU_SAVED_REGS_CNT if you change pushed regs.
-
-       in      r0,SREG-__SFR_OFFSET
-       push    r0
-;      push    r1      ;zero-reg
-       push    r2
-       push    r3
-       push    r4
-       push    r5
-       push    r6
-       push    r7
-       push    r8
-       push    r9
-       push    r10
-       push    r11
-       push    r12
-       push    r13
-       push    r14
-       push    r15
-       push    r16
-       push    r17
-;      push    r18     ;caller-save
-;      push    r19     ;caller-save
-;      push    r20     ;caller-save
-;      push    r21     ;caller-save
-;      push    r22     ;caller-save
-;      push    r23     ;caller-save
-;      push    r24     ;caller-save
-;      push    r25     ;caller-save
-;      push    r26     ;caller-save
-;      push    r27     ;caller-save
-       push    r28
-       push    r29
-;      push    r30     ;caller-save
-;      push    r31     ;caller-save
-
-       in      r18,SPL-__SFR_OFFSET    ; r18:r19 = SP
-       in      r19,SPH-__SFR_OFFSET
-       movw    r26,r22                 ; X = save_sp
-       st      X+,r18                  ; *save_sp = SP
-       st      X,r19
-       movw    r26,r24                 ; X = new_sp
-       ld      r18,X+
-       ld      r19,X
-
-;      Set new stack pointer.
-;      AVR is an 8 bit processor so
-;      care must be taken when updating
-;      SP that is a 16 bit reg.
-;      Two instructions are required to update SP
-;      so an IRQ can sneak in between them.
-;      So IRQ *MUST* be disabled and then restored.
-       cli                             ; Disable interrupt
-       out     SPL-__SFR_OFFSET,r18    ; SP = *new_sp
-       out     SPH-__SFR_OFFSET,r19
-       out     SREG-__SFR_OFFSET,r0    ; Restore previous IRQ state
-
-;      pop     r31     ;caller-save
-;      pop     r30     ;caller-save
-       pop     r29
-       pop     r28
-;      pop     r27     ;caller-save
-;      pop     r26     ;caller-save
-;      pop     r25     ;caller-save
-;      pop     r24     ;caller-save
-;      pop     r23     ;caller-save
-;      pop     r22     ;caller-save
-;      pop     r21     ;caller-save
-;      pop     r20     ;caller-save
-;      pop     r19     ;caller-save
-;      pop     r18     ;caller-save
-       pop     r17
-       pop     r16
-       pop     r15
-       pop     r14
-       pop     r13
-       pop     r12
-       pop     r11
-       pop     r10
-       pop     r9
-       pop     r8
-       pop     r7
-       pop     r6
-       pop     r5
-       pop     r4
-       pop     r3
-       pop     r2
-;      pop     r1      ;zero-reg
-       pop     r0
-       out     SREG-__SFR_OFFSET,r0
-
-       ret
+#warning This file is deprecated, use switch_ctx_avr.S
+#include "switch_ctx_avr.S"
diff --git a/bertos/cpu/avr/hw/switch_ctx_avr.S b/bertos/cpu/avr/hw/switch_ctx_avr.S
new file mode 100644 (file)
index 0000000..5028029
--- /dev/null
@@ -0,0 +1,142 @@
+/*!
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction.  Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License.  This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2004, 2008 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 1999, 2000, 2001 Bernie Innocenti <bernie@codewiz.org>
+ * -->
+ *
+ * \version $Id$
+ * \author Bernie Innocenti <bernie@codewiz.org>
+ * \author Stefano Fedrigo <aleph@develer.com>
+ *
+ * \brief AVR context switch
+ *
+ */
+
+#include <avr/io.h>
+
+/* void asm_switch_context(void **new_sp [r24:r25], void **save_sp [r22:r23]) */
+.globl asm_switch_context
+asm_switch_context:
+
+;      r0 is the TEMP REG and can be used freely.
+;      r1 is the ZERO REG and must always contain 0.
+;
+;      Stack frame is 19 byte, remember to update
+;      CPU_SAVED_REGS_CNT if you change pushed regs.
+
+       in      r0,SREG-__SFR_OFFSET
+       push    r0
+;      push    r1      ;zero-reg
+       push    r2
+       push    r3
+       push    r4
+       push    r5
+       push    r6
+       push    r7
+       push    r8
+       push    r9
+       push    r10
+       push    r11
+       push    r12
+       push    r13
+       push    r14
+       push    r15
+       push    r16
+       push    r17
+;      push    r18     ;caller-save
+;      push    r19     ;caller-save
+;      push    r20     ;caller-save
+;      push    r21     ;caller-save
+;      push    r22     ;caller-save
+;      push    r23     ;caller-save
+;      push    r24     ;caller-save
+;      push    r25     ;caller-save
+;      push    r26     ;caller-save
+;      push    r27     ;caller-save
+       push    r28
+       push    r29
+;      push    r30     ;caller-save
+;      push    r31     ;caller-save
+
+       in      r18,SPL-__SFR_OFFSET    ; r18:r19 = SP
+       in      r19,SPH-__SFR_OFFSET
+       movw    r26,r22                 ; X = save_sp
+       st      X+,r18                  ; *save_sp = SP
+       st      X,r19
+       movw    r26,r24                 ; X = new_sp
+       ld      r18,X+
+       ld      r19,X
+
+;      Set new stack pointer.
+;      AVR is an 8 bit processor so
+;      care must be taken when updating
+;      SP that is a 16 bit reg.
+;      Two instructions are required to update SP
+;      so an IRQ can sneak in between them.
+;      So IRQ *MUST* be disabled and then restored.
+       cli                             ; Disable interrupt
+       out     SPL-__SFR_OFFSET,r18    ; SP = *new_sp
+       out     SPH-__SFR_OFFSET,r19
+       out     SREG-__SFR_OFFSET,r0    ; Restore previous IRQ state
+
+;      pop     r31     ;caller-save
+;      pop     r30     ;caller-save
+       pop     r29
+       pop     r28
+;      pop     r27     ;caller-save
+;      pop     r26     ;caller-save
+;      pop     r25     ;caller-save
+;      pop     r24     ;caller-save
+;      pop     r23     ;caller-save
+;      pop     r22     ;caller-save
+;      pop     r21     ;caller-save
+;      pop     r20     ;caller-save
+;      pop     r19     ;caller-save
+;      pop     r18     ;caller-save
+       pop     r17
+       pop     r16
+       pop     r15
+       pop     r14
+       pop     r13
+       pop     r12
+       pop     r11
+       pop     r10
+       pop     r9
+       pop     r8
+       pop     r7
+       pop     r6
+       pop     r5
+       pop     r4
+       pop     r3
+       pop     r2
+;      pop     r1      ;zero-reg
+       pop     r0
+       out     SREG-__SFR_OFFSET,r0
+
+       ret
index 50567d193cf5ad0ed19a4da68f62f0a2b82b5679..110d62f5d0e03b056bc79206cbc44afad40c9414 100644 (file)
@@ -1,10 +1,2 @@
-#if defined(__i386__)
-       #include "switch_i386.S"
-#elif defined(__x86_64__)
-       #include "switch_x86_64.s"
-#elif defined(_ARCH_PPC) || defined(_ARCH_PPC64)
-       #include "switch_ppc.S"
-#else
-       #error Unknown CPU
-#endif
-
+#warning This file is deprecated, use switch_ctx_emul.S
+#include "switch_ctx_emul.S"
diff --git a/bertos/emul/switch_ctx_emul.S b/bertos/emul/switch_ctx_emul.S
new file mode 100644 (file)
index 0000000..50567d1
--- /dev/null
@@ -0,0 +1,10 @@
+#if defined(__i386__)
+       #include "switch_i386.S"
+#elif defined(__x86_64__)
+       #include "switch_x86_64.s"
+#elif defined(_ARCH_PPC) || defined(_ARCH_PPC64)
+       #include "switch_ppc.S"
+#else
+       #error Unknown CPU
+#endif
+
index b270d4069d52ab43540aa9e46d80947978d20d07..7ac632ec1fb7fd3702d1dd4e8f20babfde3160f5 100644 (file)
@@ -37,6 +37,7 @@
  *
  * $WIZ$ module_name = "kernel"
  * $WIZ$ module_configuration = "bertos/cfg/cfg_proc.h"
+ * $WIZ$ module_depends = "switch_ctx"
  */
 
 #ifndef KERN_PROC_H
index 1c3660e02966d6368e0b085686ffe2390e9ec290..90d8016a47b7ed21f404dad3da8ca690c9488e36 100644 (file)
@@ -33,7 +33,7 @@ at91sam7s_CSRC = \
 
 at91sam7s_CPPASRC = \
        bertos/cpu/arm/hw/crtat91sam7_rom.S \
-       bertos/cpu/arm/hw/switch_arm.S
+       bertos/cpu/arm/hw/switch_ctx_arm.S
 
 at91sam7s_PREFIX = arm-none-eabi-
 
index d2588fd4f7a08be48ede86cc7ea0580ae1693b08..733b52c5adbea71a8b8e4121d762a1db610cfc4e 100644 (file)
@@ -65,7 +65,7 @@ demo_CSRC = \
        bertos/verstag.c
 
 demo_CPPASRC = \
-       bertos/emul/switch.S
+       bertos/emul/switch_ctx_emul.S
 
 # FIXME: maybe this junk should go in emul/emul.mk?
 $(OBJDIR)/demo/bertos/emul/emulwin.o: bertos/emul/emulwin_moc.cpp
index 78877addb9a2ea12055a7c7e88ee2c62deb566f1..90de1f043dac504b7f189618ba59217752ee8214 100755 (executable)
@@ -27,7 +27,7 @@ TESTS=${TESTS:-`find . \
        -o -name "*_test.c" -print` }
 
 TESTOUT="testout"
-SRC_LIST="bertos/algo/ramp.c bertos/drv/kdebug.c bertos/drv/timer.c bertos/fs/battfs.c bertos/kern/coop.c bertos/kern/idle.c bertos/kern/kfile.c bertos/kern/monitor.c bertos/kern/proc.c bertos/kern/signal.c bertos/kern/sem.c bertos/mware/event.c bertos/mware/formatwr.c bertos/mware/hex.c bertos/mware/sprintf.c bertos/os/hptime.c bertos/emul/switch.S"
+SRC_LIST="bertos/algo/ramp.c bertos/drv/kdebug.c bertos/drv/timer.c bertos/fs/battfs.c bertos/kern/coop.c bertos/kern/idle.c bertos/kern/kfile.c bertos/kern/monitor.c bertos/kern/proc.c bertos/kern/signal.c bertos/kern/sem.c bertos/mware/event.c bertos/mware/formatwr.c bertos/mware/hex.c bertos/mware/sprintf.c bertos/os/hptime.c bertos/emul/switch_ctx_emul.S"
 
 buildout='/dev/null'
 runout='/dev/null'