From cbf0141d6cc2c6bd0f3980bd96b91dbe77c042c0 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Thu, 28 Aug 2014 13:21:36 -0600 Subject: [PATCH] Add an ARMv7-A system call definition header file --- arch/arm/include/armv6-m/syscall.h | 2 +- arch/arm/include/armv7-m/syscall.h | 2 +- arch/arm/src/armv6-m/svcall.h | 16 ++-- arch/arm/src/armv7-a/syscall.h | 123 +++++++++++++++++++++++++++++ arch/arm/src/armv7-m/svcall.h | 16 ++-- 5 files changed, 145 insertions(+), 14 deletions(-) create mode 100644 arch/arm/src/armv7-a/syscall.h diff --git a/arch/arm/include/armv6-m/syscall.h b/arch/arm/include/armv6-m/syscall.h index 812e863a58..a7ca476123 100644 --- a/arch/arm/include/armv6-m/syscall.h +++ b/arch/arm/include/armv6-m/syscall.h @@ -51,7 +51,7 @@ #endif /**************************************************************************** - * Pro-processor Definitions + * Pre-processor Definitions ****************************************************************************/ /* This is the value used as the argument to the SVC instruction. It is not diff --git a/arch/arm/include/armv7-m/syscall.h b/arch/arm/include/armv7-m/syscall.h index 6d3928a17b..bb2fb6fd35 100644 --- a/arch/arm/include/armv7-m/syscall.h +++ b/arch/arm/include/armv7-m/syscall.h @@ -51,7 +51,7 @@ #endif /**************************************************************************** - * Pro-processor Definitions + * Pre-processor Definitions ****************************************************************************/ /* This is the value used as the argument to the SVC instruction. It is not diff --git a/arch/arm/src/armv6-m/svcall.h b/arch/arm/src/armv6-m/svcall.h index f5511c525d..8afd1a981b 100644 --- a/arch/arm/src/armv6-m/svcall.h +++ b/arch/arm/src/armv6-m/svcall.h @@ -52,7 +52,8 @@ /* Configuration ********************************************************************/ /* This logic uses three system calls {0,1,2} for context switching and one for the - * syscall return. The first four syscall values must be reserved. + * syscall return. So a minimum of four syscall values must be reserved. If + * CONFIG_NUTTX_KERNEL is defined, then four more syscall values must be reserved. */ #ifdef CONFIG_LIB_SYSCALL @@ -64,9 +65,9 @@ # endif # else # ifndef CONFIG_SYS_RESERVED -# error "CONFIG_SYS_RESERVED must be defined to have the value 3" -# elif CONFIG_SYS_RESERVED != 3 -# error "CONFIG_SYS_RESERVED must have the value 3" +# error "CONFIG_SYS_RESERVED must be defined to have the value 4" +# elif CONFIG_SYS_RESERVED != 4 +# error "CONFIG_SYS_RESERVED must have the value 4" # endif # endif #endif @@ -94,7 +95,7 @@ #define SYS_switch_context (2) -#ifdef CONFIG_NUTTX_KERNEL +#ifdef CONFIG_LIB_SYSCALL /* SYS call 3: * * void up_syscall_return(void); @@ -102,6 +103,7 @@ #define SYS_syscall_return (3) +#ifdef CONFIG_NUTTX_KERNEL /* SYS call 4: * * void up_task_start(main_t taskentry, int argc, FAR char *argv[]) @@ -132,7 +134,9 @@ */ #define SYS_signal_handler_return (7) -#endif + +#endif /* CONFIG_NUTTX_KERNEL */ +#endif /* CONFIG_LIB_SYSCALL */ /************************************************************************************ * Inline Functions diff --git a/arch/arm/src/armv7-a/syscall.h b/arch/arm/src/armv7-a/syscall.h new file mode 100644 index 0000000000..8f83a93c2a --- /dev/null +++ b/arch/arm/src/armv7-a/syscall.h @@ -0,0 +1,123 @@ +/************************************************************************************ + * arch/arm/src/armv7-a/syscall.h + * + * Copyright (C) 2014 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************************/ + +#ifndef __ARCH_ARM_SRC_COMMON_CORTEXM_SVCALL_H +#define __ARCH_ARM_SRC_COMMON_CORTEXM_SVCALL_H + +/************************************************************************************ + * Included Files + ************************************************************************************/ + +#include + +#ifdef CONFIG_LIB_SYSCALL +# include +#endif + +#ifdef CONFIG_LIB_SYSCALL + +/************************************************************************************ + * Pre-processor Definitions + ************************************************************************************/ + +/* Configuration ********************************************************************/ +/* This logic uses one system call for the syscall return. So a minimum of one + * syscall values must be reserved. If CONFIG_NUTTX_KERNEL is defined, then four + * more syscall values must be reserved. + */ + +#ifdef CONFIG_NUTTX_KERNEL +# ifndef CONFIG_SYS_RESERVED +# error "CONFIG_SYS_RESERVED must be defined to have the value 5" +# elif CONFIG_SYS_RESERVED != 5 +# error "CONFIG_SYS_RESERVED must have the value 5" +# endif +#else +# ifndef CONFIG_SYS_RESERVED +# error "CONFIG_SYS_RESERVED must be defined to have the value 1" +# elif CONFIG_SYS_RESERVED != 1 +# error "CONFIG_SYS_RESERVED must have the value 1" +# endif +#endif + +/* Cortex M3 system calls ***********************************************************/ + +/* SYS call 0: + * + * void up_syscall_return(void); + */ + +#define SYS_syscall_return (0) + +#ifdef CONFIG_NUTTX_KERNEL +/* SYS call 1: + * + * void up_task_start(main_t taskentry, int argc, FAR char *argv[]) + * noreturn_function; + */ + +#define SYS_task_start (1) + +/* SYS call 2: + * + * void up_pthread_start(pthread_startroutine_t entrypt, pthread_addr_t arg) + * noreturn_function + */ + +#define SYS_pthread_start (2) + +/* SYS call 3: + * + * void signal_handler(_sa_sigaction_t sighand, int signo, FAR siginfo_t *info, + * FAR void *ucontext); + */ + +#define SYS_signal_handler (3) + +/* SYS call 4: + * + * void signal_handler_return(void); + */ + +#define SYS_signal_handler_return (4) + +#endif /* CONFIG_NUTTX_KERNEL */ + +/************************************************************************************ + * Inline Functions + ************************************************************************************/ + +#endif /* CONFIG_LIB_SYSCALL */ +#endif /* __ARCH_ARM_SRC_COMMON_CORTEXM_SVCALL_H */ diff --git a/arch/arm/src/armv7-m/svcall.h b/arch/arm/src/armv7-m/svcall.h index 64c4bdfe8d..8d3a19ed07 100644 --- a/arch/arm/src/armv7-m/svcall.h +++ b/arch/arm/src/armv7-m/svcall.h @@ -52,7 +52,8 @@ /* Configuration ********************************************************************/ /* This logic uses three system calls {0,1,2} for context switching and one for the - * syscall return. The first four syscall values must be reserved. + * syscall return. So a minimum of four syscall values must be reserved. If + * CONFIG_NUTTX_KERNEL is defined, then four more syscall values must be reserved. */ #ifdef CONFIG_LIB_SYSCALL @@ -64,9 +65,9 @@ # endif # else # ifndef CONFIG_SYS_RESERVED -# error "CONFIG_SYS_RESERVED must be defined to have the value 3" -# elif CONFIG_SYS_RESERVED != 3 -# error "CONFIG_SYS_RESERVED must have the value 3" +# error "CONFIG_SYS_RESERVED must be defined to have the value 4" +# elif CONFIG_SYS_RESERVED != 4 +# error "CONFIG_SYS_RESERVED must have the value 4" # endif # endif #endif @@ -94,7 +95,7 @@ #define SYS_switch_context (2) -#ifdef CONFIG_NUTTX_KERNEL +#ifdef CONFIG_LIB_SYSCALL /* SYS call 3: * * void up_syscall_return(void); @@ -102,6 +103,7 @@ #define SYS_syscall_return (3) +#ifdef CONFIG_NUTTX_KERNEL /* SYS call 4: * * void up_task_start(main_t taskentry, int argc, FAR char *argv[]) @@ -132,7 +134,9 @@ */ #define SYS_signal_handler_return (7) -#endif + +#endif /* CONFIG_NUTTX_KERNEL */ +#endif /* CONFIG_LIB_SYSCALL */ /************************************************************************************ * Inline Functions