* invalidate any other reasons why the executable file might be covered by
* the GNU General Public License.
*
- * Copyright 2007 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 2007, 2008 Develer S.r.l. (http://www.develer.com/)
*
* -->
*
* \author Francesco Sacchi <batt@develer.com>
*/
-
-/*
- * NOTE: At each change of this function affecting proc.c
- * (i.e. arguments, data stored in the stack) bump up version
- * number in asm_switch_version().
- */
-
-/* void asm_switch_context(void **new_sp, void **save_sp) */
+/* void asm_switch_context(void **new_sp [r0], void **save_sp [r1]) */
.globl asm_switch_context
asm_switch_context:
mrs r2, cpsr /* Save status. */
msr cpsr, r2 /* restore flags reg. */
mov pc, lr
-
-
-/* int asm_switch_version(void) */
-.globl asm_switch_version
-asm_switch_version:
- mov r0, #1
- mov pc, lr
/*!
* \file
* <!--
- * Copyright 2004 Develer S.r.l. (http://www.develer.com/)
- * Copyright 1999,2000,2001 Bernie Innocenti <bernie@codewiz.org>
- * This file is part of DevLib - See devlib/README for information.
- * -->
+ * This file is part of BeRTOS.
*
- * \brief AVR context switch
+ * 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.
*
- * \version $Id$
+ * 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>
-/*
- * NOTE: At each change of this function affecting proc.c
- * (i.e. arguments, data stored in the stack) bump up version
- * number in asm_switch_version().
- */
-
-/* void asm_switch_context(void **new_sp, void **save_sp) */
+/* void asm_switch_context(void **new_sp [r24:r25], void **save_sp [r22:r23]) */
.globl asm_switch_context
asm_switch_context:
; push r30 ;caller-save
; push r31 ;caller-save
-; First parameter (new_sp) is in r24:r25, second (save_sp) in r22:r23
-
in r18,SPL-__SFR_OFFSET ; r18:r19 = SP
in r19,SPH-__SFR_OFFSET
movw r26,r22 ; X = save_sp
out SREG-__SFR_OFFSET,r0
ret
-
-
-/* int asm_switch_version(void) */
-.globl asm_switch_version
-asm_switch_version:
- ldi r24,lo8(1)
- ldi r25,hi8(1)
- ret
-
* invalidate any other reasons why the executable file might be covered by
* the GNU General Public License.
*
- * Copyright 2004 Develer S.r.l. (http://www.develer.com/)
- *
+ * Copyright 2004, 2008 Develer S.r.l. (http://www.develer.com/)
* -->
*
* \version $Id$
- *
* \author Giovanni Bajo <rasky@develer.com>
*
* \brief DSP5680x task switching support
*/
-/*#*
- *#* $Log$
- *#* Revision 1.7 2006/07/19 12:56:27 bernie
- *#* Convert to new Doxygen style.
- *#*
- *#* Revision 1.6 2006/02/24 01:17:05 bernie
- *#* Update for new emulator.
- *#*
- *#* Revision 1.5 2005/11/04 16:20:02 bernie
- *#* Fix reference to README.devlib in header.
- *#*
- *#* Revision 1.4 2004/08/25 14:12:09 rasky
- *#* Aggiornato il comment block dei log RCS
- *#*
- *#* Revision 1.3 2004/07/30 14:24:16 rasky
- *#* Task switching con salvataggio perfetto stato di interrupt (SR)
- *#* Kernel monitor per dump informazioni su stack dei processi
- *#*
- *#* Revision 1.2 2004/06/03 11:27:09 bernie
- *#* Add dual-license information.
- *#*
- *#* Revision 1.1 2004/05/23 17:27:00 bernie
- *#* Import kern/ subdirectory.
- *#*
- *#*/
-
-void asm_switch_context(void ** new_sp/*R2*/, void ** save_sp/*R3*/);
+void asm_switch_context(void ** new_sp /* R2 */, void ** save_sp /* R3 */);
asm void asm_switch_context(void ** new_sp, void ** save_sp)
{
lea (SP)+
; it, so that interrupt status is preserved across the tasks.
rti
}
-
-int asm_switch_version(void);
-int asm_switch_version(void)
-{
- return 1;
-}
* invalidate any other reasons why the executable file might be covered by
* the GNU General Public License.
*
- * Copyright 2004 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 2004, 2008 Develer S.r.l. (http://www.develer.com/)
* Copyright 1999, 2000, 2001 Bernie Innocenti <bernie@codewiz.org>
- * This file is part of DevLib - See devlib/README for information.
* -->
*
* \version $Id$
* \brief i386 context switch
*/
-
-
#ifdef __APPLE__
- //This workaround is necessary to compile under OS X assembler.
+ // This workaround is necessary to compile under OS X assembler.
#define SWITCH_CONTEXT _asm_switch_context
- #define SWITCH_VERSION _asm_switch_version
#else
#define SWITCH_CONTEXT asm_switch_context
- #define SWITCH_VERSION asm_switch_version
#endif
-/* void asm_switch_context(void ** new_sp, void ** save_sp) */
+/* void asm_switch_context(void ** new_sp [sp+4], void ** save_sp [sp+8]) */
.globl SWITCH_CONTEXT
SWITCH_CONTEXT:
pushl %eax
popl %ebx
popl %eax
ret
-
-/* int asm_switch_version(void) */
-.globl SWITCH_VERSION
-SWITCH_VERSION:
- mov $1,%eax
- ret
-
* invalidate any other reasons why the executable file might be covered by
* the GNU General Public License.
*
- * Copyright 2004 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 2004, 2008 Develer S.r.l. (http://www.develer.com/)
* Copyright 1999, 2000, 2001 Bernie Innocenti <bernie@codewiz.org>
- * This file is part of DevLib - See devlib/README for information.
* -->
*
* \version $Id$
* \brief i386 context switch
*/
-/* I know it's ugly... */
-/* .intel_syntax */
-
-/* void AsmSwitchContext(void **new_sp, void **save_sp) */
-/* %rdi %rsi */
+/* void asm_switch_context(void **new_sp [%rdi], void **save_sp [%rsi]) */
.globl asm_switch_context
asm_switch_context:
pushq %rax
popq %rbx
popq %rax
ret
-
-/* int asm_switch_version(void) */
-.globl asm_switch_version
-asm_switch_version:
- mov $1,%rax
- ret
-
* \note This function *MUST* preserve also the status of the interrupts.
*/
EXTERN_C void asm_switch_context(cpustack_t **new_sp, cpustack_t **save_sp);
-EXTERN_C int asm_switch_version(void);
/*
* The scheduer tracks ready and waiting processes
proc_init_struct(&MainProcess);
CurrentProcess = &MainProcess;
- /* Make sure the assembly routine is up-to-date with us */
- ASSERT(asm_switch_version() == 1);
MOD_INIT(proc);
}