You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ar...@apache.org on 2022/02/27 14:54:27 UTC
[incubator-nuttx] 02/04: arch: Remove the duplicated syscall.h in each arch
This is an automated email from the ASF dual-hosted git repository.
archer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 0c7517e57940abecfa720eaa5ad757561c98e093
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Fri Feb 25 01:49:58 2022 +0800
arch: Remove the duplicated syscall.h in each arch
Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
arch/arm/include/arm/syscall.h | 252 -------------------------------
arch/arm/include/armv6-m/syscall.h | 270 ----------------------------------
arch/arm/include/armv7-a/syscall.h | 252 -------------------------------
arch/arm/include/armv7-m/syscall.h | 248 -------------------------------
arch/arm/include/armv7-r/syscall.h | 252 -------------------------------
arch/arm/include/armv8-m/syscall.h | 248 -------------------------------
arch/arm/include/syscall.h | 217 +++++++++++++++++++++++++--
arch/avr/include/avr/syscall.h | 122 ---------------
arch/avr/include/avr32/syscall.h | 122 ---------------
arch/avr/include/syscall.h | 69 +++++++--
arch/mips/include/mips32/syscall.h | 246 -------------------------------
arch/mips/include/syscall.h | 183 ++++++++++++++++++++++-
arch/misoc/include/lm32/syscall.h | 193 ------------------------
arch/misoc/include/minerva/syscall.h | 192 ------------------------
arch/misoc/include/syscall.h | 160 +++++++++++++++++++-
arch/sparc/include/sparc_v8/syscall.h | 195 ------------------------
arch/sparc/include/syscall.h | 131 ++++++++++++++++-
arch/x86/include/i486/syscall.h | 122 ---------------
arch/x86/include/syscall.h | 67 +++++++--
arch/x86_64/include/intel64/syscall.h | 156 --------------------
arch/x86_64/include/syscall.h | 100 +++++++++++--
21 files changed, 867 insertions(+), 2930 deletions(-)
diff --git a/arch/arm/include/arm/syscall.h b/arch/arm/include/arm/syscall.h
deleted file mode 100644
index f7be3c1..0000000
--- a/arch/arm/include/arm/syscall.h
+++ /dev/null
@@ -1,252 +0,0 @@
-/****************************************************************************
- * arch/arm/include/arm/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_ARM_INCLUDE_ARM_SYSCALL_H
-#define __ARCH_ARM_INCLUDE_ARM_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifndef __ASSEMBLY__
-# include <stdint.h>
-#endif
-
-/****************************************************************************
- * Pre-processor Prototypes
- ****************************************************************************/
-
-#define SYS_syscall 0x00
-
-#if defined(__thumb__) || defined(__thumb2__)
-# define SYS_smhcall 0xab
-#else
-# define SYS_smhcall 0x123456
-#endif
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-
-/* SWI with SYS_ call number and no parameters */
-
-static inline uintptr_t sys_call0(unsigned int nbr)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
-
- __asm__ __volatile__
- (
- "swi %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SWI with SYS_ call number and one parameter */
-
-static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "swi %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SWI with SYS_ call number and two parameters */
-
-static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "swi %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SWI with SYS_ call number and three parameters */
-
-static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "swi %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2), "r"(reg3)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SWI with SYS_ call number and four parameters */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "swi %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SWI with SYS_ call number and five parameters */
-
-static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg5 __asm__("r5") = (long)(parm5);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "swi %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SWI with SYS_ call number and six parameters */
-
-static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg6 __asm__("r6") = (long)(parm6);
- register long reg5 __asm__("r5") = (long)(parm5);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "swi %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5), "r"(reg6)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* semihosting(SMH) call with call number and one parameter */
-
-static inline long smh_call(unsigned int nbr, void *parm)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_smhcall), "r"(reg0), "r"(reg1)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_INCLUDE_ARM_SYSCALL_H */
diff --git a/arch/arm/include/armv6-m/syscall.h b/arch/arm/include/armv6-m/syscall.h
deleted file mode 100644
index da96e1f..0000000
--- a/arch/arm/include/armv6-m/syscall.h
+++ /dev/null
@@ -1,270 +0,0 @@
-/****************************************************************************
- * arch/arm/include/armv6-m/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_ARM_INCLUDE_ARMV6_M_SYSCALL_H
-#define __ARCH_ARM_INCLUDE_ARMV6_M_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifndef __ASSEMBLY__
-# include <stdint.h>
-#endif
-
-/****************************************************************************
- * Pre-processor Prototypes
- ****************************************************************************/
-
-/* This is the value used as the argument to the SVC instruction. It is not
- * used.
- */
-
-#define SYS_syscall 0x00
-#define SYS_smhcall 0xab
-
-/* The SYS_signal_handler_return is executed here... its value is not always
- * available in this context and so is assumed to be 7.
- */
-
-#ifndef SYS_signal_handler_return
-# define SYS_signal_handler_return (7)
-#elif SYS_signal_handler_return != 7
-# error "SYS_signal_handler_return was assumed to be 7"
-#endif
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-
-/* SVC call with SYS_ call number and no parameters */
-
-static inline uintptr_t sys_call0(unsigned int nbr)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and one parameter */
-
-static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and two parameters */
-
-static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and three parameters */
-
-static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2), "r"(reg3)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and four parameters.
- *
- * NOTE the nonstandard parameter passing: parm4 is in R4
- */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and five parameters.
- *
- * NOTE the nonstandard parameter passing: parm4 and parm5 are in R4 and R5
- */
-
-static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg5 __asm__("r5") = (long)(parm5);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and six parameters.
- *
- * NOTE the nonstandard parameter passing: parm4-parm6 are in R4-R6
- */
-
-static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg6 __asm__("r6") = (long)(parm6);
- register long reg5 __asm__("r5") = (long)(parm5);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5), "r"(reg6)
- : "memory"
- );
-
- return reg0;
-}
-
-/* semihosting(SMH) call with call number and one parameter */
-
-static inline long smh_call(unsigned int nbr, void *parm)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm);
-
- __asm__ __volatile__
- (
- "bkpt %1"
- : "=r"(reg0)
- : "i"(SYS_smhcall), "r"(reg0), "r"(reg1)
- : "memory"
- );
-
- return reg0;
-}
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_INCLUDE_ARMV6_M_SYSCALL_H */
diff --git a/arch/arm/include/armv7-a/syscall.h b/arch/arm/include/armv7-a/syscall.h
deleted file mode 100644
index a235a04..0000000
--- a/arch/arm/include/armv7-a/syscall.h
+++ /dev/null
@@ -1,252 +0,0 @@
-/****************************************************************************
- * arch/arm/include/armv7-a/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_ARM_INCLUDE_ARMV7_A_SYSCALL_H
-#define __ARCH_ARM_INCLUDE_ARMV7_A_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifndef __ASSEMBLY__
-# include <stdint.h>
-#endif
-
-/****************************************************************************
- * Pre-processor Prototypes
- ****************************************************************************/
-
-#define SYS_syscall 0x00
-
-#if defined(__thumb__) || defined(__thumb2__)
-# define SYS_smhcall 0xab
-#else
-# define SYS_smhcall 0x123456
-#endif
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-
-/* SVC with SYS_ call number and no parameters */
-
-static inline uintptr_t sys_call0(unsigned int nbr)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and one parameter */
-
-static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and two parameters */
-
-static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and three parameters */
-
-static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2), "r"(reg3)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and four parameters */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and five parameters */
-
-static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg5 __asm__("r5") = (long)(parm5);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and six parameters */
-
-static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg6 __asm__("r6") = (long)(parm6);
- register long reg5 __asm__("r5") = (long)(parm5);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5), "r"(reg6)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* semihosting(SMH) call with call number and one parameter */
-
-static inline long smh_call(unsigned int nbr, void *parm)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_smhcall), "r"(reg0), "r"(reg1)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_INCLUDE_ARMV7_A_SYSCALL_H */
diff --git a/arch/arm/include/armv7-m/syscall.h b/arch/arm/include/armv7-m/syscall.h
deleted file mode 100644
index 83e809f..0000000
--- a/arch/arm/include/armv7-m/syscall.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/****************************************************************************
- * arch/arm/include/armv7-m/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_ARM_INCLUDE_ARMV7_M_SYSCALL_H
-#define __ARCH_ARM_INCLUDE_ARMV7_M_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifndef __ASSEMBLY__
-# include <stdint.h>
-#endif
-
-/****************************************************************************
- * Pre-processor Prototypes
- ****************************************************************************/
-
-/* This is the value used as the argument to the SVC instruction. It is not
- * used.
- */
-
-#define SYS_syscall 0x00
-#define SYS_smhcall 0xab
-
-/* The SYS_signal_handler_return is executed here... its value is not always
- * available in this context and so is assumed to be 7.
- */
-
-#ifndef SYS_signal_handler_return
-# define SYS_signal_handler_return (7)
-#elif SYS_signal_handler_return != 7
-# error "SYS_signal_handler_return was assumed to be 7"
-#endif
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-
-/* SVC call with SYS_ call number and no parameters */
-
-static inline uintptr_t sys_call0(unsigned int nbr)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and one parameter */
-
-static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and two parameters */
-
-static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and three parameters */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4);
-static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3)
-{
- return sys_call4(nbr, parm1, parm2, parm3, 0);
-}
-
-/* SVC call with SYS_ call number and four parameters.
- *
- * NOTE the nonstandard parameter passing: parm4 is in R4
- */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and five parameters.
- *
- * NOTE the nonstandard parameter passing: parm4 and parm5 are in R4 and R5
- */
-
-static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6);
-static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5)
-{
- return sys_call6(nbr, parm1, parm2, parm3, parm4, parm5, 0);
-}
-
-/* SVC call with SYS_ call number and six parameters.
- *
- * NOTE the nonstandard parameter passing: parm4-parm6 are in R4-R6
- */
-
-static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg6 __asm__("r6") = (long)(parm6);
- register long reg5 __asm__("r5") = (long)(parm5);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5), "r"(reg6)
- : "memory"
- );
-
- return reg0;
-}
-
-/* semihosting(SMH) call with call number and one parameter */
-
-static inline long smh_call(unsigned int nbr, void *parm)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm);
-
- __asm__ __volatile__
- (
- "bkpt %1"
- : "=r"(reg0)
- : "i"(SYS_smhcall), "r"(reg0), "r"(reg1)
- : "memory"
- );
-
- return reg0;
-}
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_INCLUDE_ARMV7_M_SYSCALL_H */
diff --git a/arch/arm/include/armv7-r/syscall.h b/arch/arm/include/armv7-r/syscall.h
deleted file mode 100644
index e86170f..0000000
--- a/arch/arm/include/armv7-r/syscall.h
+++ /dev/null
@@ -1,252 +0,0 @@
-/****************************************************************************
- * arch/arm/include/armv7-r/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_ARM_INCLUDE_ARMV7_R_SYSCALL_H
-#define __ARCH_ARM_INCLUDE_ARMV7_R_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifndef __ASSEMBLY__
-# include <stdint.h>
-#endif
-
-/****************************************************************************
- * Pre-processor Prototypes
- ****************************************************************************/
-
-#define SYS_syscall 0x00
-
-#if defined(__thumb__) || defined(__thumb2__)
-# define SYS_smhcall 0xab
-#else
-# define SYS_smhcall 0x123456
-#endif
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-
-/* SVC with SYS_ call number and no parameters */
-
-static inline uintptr_t sys_call0(unsigned int nbr)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and one parameter */
-
-static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and two parameters */
-
-static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and three parameters */
-
-static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2), "r"(reg3)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and four parameters */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and five parameters */
-
-static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg5 __asm__("r5") = (long)(parm5);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* SVC with SYS_ call number and six parameters */
-
-static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg6 __asm__("r6") = (long)(parm6);
- register long reg5 __asm__("r5") = (long)(parm5);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5), "r"(reg6)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/* semihosting(SMH) call with call number and one parameter */
-
-static inline long smh_call(unsigned int nbr, void *parm)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_smhcall), "r"(reg0), "r"(reg1)
- : "memory", "r14"
- );
-
- return reg0;
-}
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_INCLUDE_ARMV7_R_SYSCALL_H */
diff --git a/arch/arm/include/armv8-m/syscall.h b/arch/arm/include/armv8-m/syscall.h
deleted file mode 100644
index 458c33a..0000000
--- a/arch/arm/include/armv8-m/syscall.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/****************************************************************************
- * arch/arm/include/armv8-m/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_ARM_INCLUDE_ARMV8_M_SYSCALL_H
-#define __ARCH_ARM_INCLUDE_ARMV8_M_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifndef __ASSEMBLY__
-# include <stdint.h>
-#endif
-
-/****************************************************************************
- * Pre-processor Prototypes
- ****************************************************************************/
-
-/* This is the value used as the argument to the SVC instruction. It is not
- * used.
- */
-
-#define SYS_syscall 0x00
-#define SYS_smhcall 0xab
-
-/* The SYS_signal_handler_return is executed here... its value is not always
- * available in this context and so is assumed to be 7.
- */
-
-#ifndef SYS_signal_handler_return
-# define SYS_signal_handler_return (7)
-#elif SYS_signal_handler_return != 7
-# error "SYS_signal_handler_return was assumed to be 7"
-#endif
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-
-/* SVC call with SYS_ call number and no parameters */
-
-static inline uintptr_t sys_call0(unsigned int nbr)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and one parameter */
-
-static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and two parameters */
-
-static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and three parameters */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4);
-static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3)
-{
- return sys_call4(nbr, parm1, parm2, parm3, 0);
-}
-
-/* SVC call with SYS_ call number and four parameters.
- *
- * NOTE the nonstandard parameter passing: parm4 is in R4
- */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4)
- : "memory"
- );
-
- return reg0;
-}
-
-/* SVC call with SYS_ call number and five parameters.
- *
- * NOTE the nonstandard parameter passing: parm4 and parm5 are in R4 and R5
- */
-
-static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6);
-static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5)
-{
- return sys_call6(nbr, parm1, parm2, parm3, parm4, parm5, 0);
-}
-
-/* SVC call with SYS_ call number and six parameters.
- *
- * NOTE the nonstandard parameter passing: parm4-parm6 are in R4-R6
- */
-
-static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg6 __asm__("r6") = (long)(parm6);
- register long reg5 __asm__("r5") = (long)(parm5);
- register long reg4 __asm__("r4") = (long)(parm4);
- register long reg3 __asm__("r3") = (long)(parm3);
- register long reg2 __asm__("r2") = (long)(parm2);
- register long reg1 __asm__("r1") = (long)(parm1);
-
- __asm__ __volatile__
- (
- "svc %1"
- : "=r"(reg0)
- : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5), "r"(reg6)
- : "memory"
- );
-
- return reg0;
-}
-
-/* semihosting(SMH) call with call number and one parameter */
-
-static inline long smh_call(unsigned int nbr, void *parm)
-{
- register long reg0 __asm__("r0") = (long)(nbr);
- register long reg1 __asm__("r1") = (long)(parm);
-
- __asm__ __volatile__
- (
- "bkpt %1"
- : "=r"(reg0)
- : "i"(SYS_smhcall), "r"(reg0), "r"(reg1)
- : "memory"
- );
-
- return reg0;
-}
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_INCLUDE_ARMV8_M_SYSCALL_H */
diff --git a/arch/arm/include/syscall.h b/arch/arm/include/syscall.h
index ea1ee2e..033be91 100644
--- a/arch/arm/include/syscall.h
+++ b/arch/arm/include/syscall.h
@@ -29,26 +29,34 @@
* Included Files
****************************************************************************/
-/* Include ARM architecture-specific syscall macros */
-
-#if defined(CONFIG_ARCH_ARMV7A)
-# include <arch/armv7-a/syscall.h>
-#elif defined(CONFIG_ARCH_ARMV7R)
-# include <arch/armv7-r/syscall.h>
-#elif defined(CONFIG_ARCH_ARMV7M)
-# include <arch/armv7-m/syscall.h>
-#elif defined(CONFIG_ARCH_ARMV8M)
-# include <arch/armv8-m/syscall.h>
-#elif defined(CONFIG_ARCH_ARMV6M)
-# include <arch/armv6-m/syscall.h>
-#else
-# include <arch/arm/syscall.h>
+#include <nuttx/config.h>
+
+#ifndef __ASSEMBLY__
+# include <stdint.h>
#endif
/****************************************************************************
* Pre-processor Prototypes
****************************************************************************/
+#define SYS_syscall 0x00
+
+#if defined(__thumb__) || defined(__thumb2__)
+# define SYS_smhcall 0xab
+#else
+# define SYS_smhcall 0x123456
+#endif
+
+/* The SYS_signal_handler_return is executed here... its value is not always
+ * available in this context and so is assumed to be 7.
+ */
+
+#ifndef SYS_signal_handler_return
+# define SYS_signal_handler_return (7)
+#elif SYS_signal_handler_return != 7
+# error "SYS_signal_handler_return was assumed to be 7"
+#endif
+
/****************************************************************************
* Public Types
****************************************************************************/
@@ -57,6 +65,184 @@
* Inline functions
****************************************************************************/
+#ifndef __ASSEMBLY__
+
+/* SVC with SYS_ call number and no parameters */
+
+static inline uintptr_t sys_call0(unsigned int nbr)
+{
+ register long reg0 __asm__("r0") = (long)(nbr);
+
+ __asm__ __volatile__
+ (
+ "svc %1"
+ : "=r"(reg0)
+ : "i"(SYS_syscall), "r"(reg0)
+ : "memory", "r14"
+ );
+
+ return reg0;
+}
+
+/* SVC with SYS_ call number and one parameter */
+
+static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
+{
+ register long reg0 __asm__("r0") = (long)(nbr);
+ register long reg1 __asm__("r1") = (long)(parm1);
+
+ __asm__ __volatile__
+ (
+ "svc %1"
+ : "=r"(reg0)
+ : "i"(SYS_syscall), "r"(reg0), "r"(reg1)
+ : "memory", "r14"
+ );
+
+ return reg0;
+}
+
+/* SVC with SYS_ call number and two parameters */
+
+static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2)
+{
+ register long reg0 __asm__("r0") = (long)(nbr);
+ register long reg2 __asm__("r2") = (long)(parm2);
+ register long reg1 __asm__("r1") = (long)(parm1);
+
+ __asm__ __volatile__
+ (
+ "svc %1"
+ : "=r"(reg0)
+ : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2)
+ : "memory", "r14"
+ );
+
+ return reg0;
+}
+
+/* SVC with SYS_ call number and three parameters */
+
+static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3)
+{
+ register long reg0 __asm__("r0") = (long)(nbr);
+ register long reg3 __asm__("r3") = (long)(parm3);
+ register long reg2 __asm__("r2") = (long)(parm2);
+ register long reg1 __asm__("r1") = (long)(parm1);
+
+ __asm__ __volatile__
+ (
+ "svc %1"
+ : "=r"(reg0)
+ : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2), "r"(reg3)
+ : "memory", "r14"
+ );
+
+ return reg0;
+}
+
+/* SVC with SYS_ call number and four parameters */
+
+static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4)
+{
+ register long reg0 __asm__("r0") = (long)(nbr);
+ register long reg4 __asm__("r4") = (long)(parm4);
+ register long reg3 __asm__("r3") = (long)(parm3);
+ register long reg2 __asm__("r2") = (long)(parm2);
+ register long reg1 __asm__("r1") = (long)(parm1);
+
+ __asm__ __volatile__
+ (
+ "svc %1"
+ : "=r"(reg0)
+ : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
+ "r"(reg3), "r"(reg4)
+ : "memory", "r14"
+ );
+
+ return reg0;
+}
+
+/* SVC with SYS_ call number and five parameters */
+
+static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4, uintptr_t parm5)
+{
+ register long reg0 __asm__("r0") = (long)(nbr);
+ register long reg5 __asm__("r5") = (long)(parm5);
+ register long reg4 __asm__("r4") = (long)(parm4);
+ register long reg3 __asm__("r3") = (long)(parm3);
+ register long reg2 __asm__("r2") = (long)(parm2);
+ register long reg1 __asm__("r1") = (long)(parm1);
+
+ __asm__ __volatile__
+ (
+ "svc %1"
+ : "=r"(reg0)
+ : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
+ "r"(reg3), "r"(reg4), "r"(reg5)
+ : "memory", "r14"
+ );
+
+ return reg0;
+}
+
+/* SVC with SYS_ call number and six parameters */
+
+static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4, uintptr_t parm5,
+ uintptr_t parm6)
+{
+ register long reg0 __asm__("r0") = (long)(nbr);
+ register long reg6 __asm__("r6") = (long)(parm6);
+ register long reg5 __asm__("r5") = (long)(parm5);
+ register long reg4 __asm__("r4") = (long)(parm4);
+ register long reg3 __asm__("r3") = (long)(parm3);
+ register long reg2 __asm__("r2") = (long)(parm2);
+ register long reg1 __asm__("r1") = (long)(parm1);
+
+ __asm__ __volatile__
+ (
+ "svc %1"
+ : "=r"(reg0)
+ : "i"(SYS_syscall), "r"(reg0), "r"(reg1), "r"(reg2),
+ "r"(reg3), "r"(reg4), "r"(reg5), "r"(reg6)
+ : "memory", "r14"
+ );
+
+ return reg0;
+}
+
+/* semihosting(SMH) call with call number and one parameter */
+
+static inline long smh_call(unsigned int nbr, void *parm)
+{
+ register long reg0 __asm__("r0") = (long)(nbr);
+ register long reg1 __asm__("r1") = (long)(parm);
+
+ __asm__ __volatile__
+ (
+#if defined(CONFIG_ARCH_ARMV6M) || \
+ defined(CONFIG_ARCH_ARMV7M) || \
+ defined(CONFIG_ARCH_ARMV8M)
+ "bkpt %1"
+#else
+ "svc %1"
+#endif
+ : "=r"(reg0)
+ : "i"(SYS_smhcall), "r"(reg0), "r"(reg1)
+ : "memory", "r14"
+ );
+
+ return reg0;
+}
+
/****************************************************************************
* Public Data
****************************************************************************/
@@ -65,7 +251,6 @@
* Public Function Prototypes
****************************************************************************/
-#ifndef __ASSEMBLY__
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C"
@@ -78,6 +263,6 @@ extern "C"
#ifdef __cplusplus
}
#endif
-#endif
+#endif /* __ASSEMBLY__ */
#endif /* __ARCH_ARM_INCLUDE_SYSCALL_H */
diff --git a/arch/avr/include/avr/syscall.h b/arch/avr/include/avr/syscall.h
deleted file mode 100644
index 177c210..0000000
--- a/arch/avr/include/avr/syscall.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
- * arch/avr/include/avr/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_AVR_INCLUDE_AVR_SYSCALL_H
-#define __ARCH_AVR_INCLUDE_AVR_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-#include <stdint.h>
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-#define SYS_syscall 0x80
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-/* SWI with SYS_ call number and six parameters */
-#warning "REVISIT"
-uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6);
-
-/* SWI with SYS_ call number and no parameters */
-
-static inline uintptr_t sys_call0(unsigned int nbr)
-{
- return sys_call6(nbr, 0, 0, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and one parameter */
-
-static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
-{
- return sys_call6(nbr, parm1, 0, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and two parameters */
-
-static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2)
-{
- return sys_call6(nbr, parm1, parm2, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and three parameters */
-
-static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3)
-{
- return sys_call6(nbr, parm1, parm2, parm3, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and four parameters */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4)
-{
- return sys_call6(nbr, parm1, parm2, parm3, parm4, 0, 0);
-}
-
-/* SWI with SYS_ call number and five parameters */
-
-static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5)
-{
- return sys_call6(nbr, parm1, parm2, parm3, parm4, parm5, 0);
-}
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-#endif /* __ARCH_AVR_INCLUDE_AVR_SYSCALL_H */
diff --git a/arch/avr/include/avr32/syscall.h b/arch/avr/include/avr32/syscall.h
deleted file mode 100644
index bde8698..0000000
--- a/arch/avr/include/avr32/syscall.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
- * arch/avr/include/avr32/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_AVR_INCLUDE_AVR32_SYSCALL_H
-#define __ARCH_AVR_INCLUDE_AVR32_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-#include <stdint.h>
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-#define SYS_syscall 0x80
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-/* SWI with SYS_ call number and six parameters */
-
-uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6);
-
-/* SWI with SYS_ call number and no parameters */
-
-static inline uintptr_t sys_call0(unsigned int nbr)
-{
- return sys_call6(nbr, 0, 0, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and one parameter */
-
-static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
-{
- return sys_call6(nbr, parm1, 0, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and two parameters */
-
-static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2)
-{
- return sys_call6(nbr, parm1, parm2, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and three parameters */
-
-static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3)
-{
- return sys_call6(nbr, parm1, parm2, parm3, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and four parameters */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4)
-{
- return sys_call6(nbr, parm1, parm2, parm3, parm4, 0, 0);
-}
-
-/* SWI with SYS_ call number and five parameters */
-
-static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5)
-{
- return sys_call6(nbr, parm1, parm2, parm3, parm4, parm5, 0);
-}
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-#endif /* __ARCH_AVR_INCLUDE_AVR32_SYSCALL_H */
diff --git a/arch/avr/include/syscall.h b/arch/avr/include/syscall.h
index 2a975be..e88fcf9 100644
--- a/arch/avr/include/syscall.h
+++ b/arch/avr/include/syscall.h
@@ -29,24 +29,17 @@
* Included Files
****************************************************************************/
-/* Include AVR architecture-specific syscall macros */
-
-#ifdef CONFIG_ARCH_FAMILY_AVR32
-# include <arch/avr32/syscall.h>
-#else
-# include <arch/avr/syscall.h>
-#endif
+#include <nuttx/config.h>
+#include <stdint.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
-/****************************************************************************
- * Public Types
- ****************************************************************************/
+#define SYS_syscall 0x80
/****************************************************************************
- * Inline functions
+ * Public Types
****************************************************************************/
/****************************************************************************
@@ -66,6 +59,60 @@ extern "C"
#define EXTERN extern
#endif
+/* SWI with SYS_ call number and six parameters */
+
+uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3, uintptr_t parm4, uintptr_t parm5,
+ uintptr_t parm6);
+
+/* SWI with SYS_ call number and no parameters */
+
+static inline uintptr_t sys_call0(unsigned int nbr)
+{
+ return sys_call6(nbr, 0, 0, 0, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and one parameter */
+
+static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
+{
+ return sys_call6(nbr, parm1, 0, 0, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and two parameters */
+
+static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2)
+{
+ return sys_call6(nbr, parm1, parm2, 0, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and three parameters */
+
+static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3)
+{
+ return sys_call6(nbr, parm1, parm2, parm3, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and four parameters */
+
+static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4)
+{
+ return sys_call6(nbr, parm1, parm2, parm3, parm4, 0, 0);
+}
+
+/* SWI with SYS_ call number and five parameters */
+
+static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4, uintptr_t parm5)
+{
+ return sys_call6(nbr, parm1, parm2, parm3, parm4, parm5, 0);
+}
+
#undef EXTERN
#ifdef __cplusplus
}
diff --git a/arch/mips/include/mips32/syscall.h b/arch/mips/include/mips32/syscall.h
deleted file mode 100644
index db4b563..0000000
--- a/arch/mips/include/mips32/syscall.h
+++ /dev/null
@@ -1,246 +0,0 @@
-/****************************************************************************
- * arch/mips/include/mips32/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_MIPS_INCLUDE_MIPS32_SYSCALL_H
-#define __ARCH_MIPS_INCLUDE_MIPS32_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifndef __ASSEMBLY__
-# include <stdint.h>
-#endif
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-#define SYS_syscall 0x00
-
-/* Configuration ************************************************************/
-
-/* SYS call 1 and 2 are defined for internal use by the PIC32MX port (see
- * arch/mips/include/mips32/syscall.h). In addition, SYS call 3 is the
- * return from a SYS call in kernel mode. The first four syscall values
- * must, therefore, be reserved (0 is not used).
- */
-
-#ifdef CONFIG_BUILD_KERNEL
-# ifndef CONFIG_SYS_RESERVED
-# error "CONFIG_SYS_RESERVED must be defined to the value 4"
-# elif CONFIG_SYS_RESERVED != 4
-# error "CONFIG_SYS_RESERVED must have the value 4"
-# endif
-#endif
-
-/* sys_call macros **********************************************************/
-
-/* System calls with 3 parameters and fewer are handled by sys_call0
- * (sys_call1, sys_call2, and sys_call3 are aliases for sys_call0).
- * This is because the parameters are passed in a0-a3. a0 is reserved for
- * the syscall number leaving up to three additional parameters that can be
- * passed in registers. The remainder would have to be pushed onto the
- * stack.
- *
- * Instead, these macros are provided which handle parameters four, five and
- * six in a non-standard way: The use s0 ($7), s1 ($8), and s2 ($9) to pass
- * the additional parameters.
- */
-
-#ifndef __ASSEMBLY__
-
-/* System call SYS_ argument and four additional parameters. */
-
-#define sys_call4(nbr,parm1,parm2,parm3,parm4) __extension__({ \
- uintptr_t __result; \
- __asm__ __volatile__ (\
- "\tmove $4, %0\n" \
- "\tmove $5, %1\n" \
- "\tmove $6, %2\n" \
- "\tmove $7, %3\n" \
- "\tmove $8, %4\n" \
- "\la $12, sys_call3\n" \
- "\jalr $12, $31\n" \
- "\tmove %5, $r2\n" \
- : "=r" (nbr) "=r" (parm1) "=r" (parm2) "=r" (parm3) "=r" (parm4) \
- : " "r"(__result)\
- : "memory"\
- ); \
- __result; \
-})
-
-/* System call SYS_ argument and five additional parameters. */
-
-#define sys_call5(nbr,parm1,parm2,parm3,parm4,parm5) __extension__({ \
- uintptr_t __result; \
- __asm__ __volatile__ (\
- "\tmove $4, %0\n" \
- "\tmove $5, %1\n" \
- "\tmove $6, %2\n" \
- "\tmove $7, %3\n" \
- "\tmove $8, %4\n" \
- "\tmove $9, %5\n" \
- "\la $12, sys_call3\n" \
- "\jalr $12, $31\n" \
- "\tmove %6, $r2\n" \
- : "=r" (nbr) "=r" (parm1) "=r" (parm2) "=r" (parm3) "=r" (parm4) "=r" (parm5) \
- : " "r"(__result)\
- : "memory"\
- ); \
- __result; \
-})
-
-/* System call SYS_ argument and six additional parameters. */
-
-#define sys_call5(nbr,parm1,parm2,parm3,parm4,parm5,parm6) __extension__({ \
- uintptr_t __result; \
- __asm__ __volatile__ (\
- "\tmove $4, %0\n" \
- "\tmove $5, %1\n" \
- "\tmove $6, %2\n" \
- "\tmove $7, %3\n" \
- "\tmove $8, %4\n" \
- "\tmove $9, %5\n" \
- "\tmove $10, %5\n" \
- "\la $12, sys_call3\n" \
- "\jalr $12, $31\n" \
- "\tmove %6, $r2\n" \
- : "=r" (nbr) "=r" (parm1) "=r" (parm2) "=r" (parm3) "=r" (parm4) "=r" (parm5) \
- : " "r"(__result)\
- : "memory"\
- ); \
- __result; \
-})
-
-/* Context switching system calls *******************************************/
-
-/* SYS call 0: (not used) */
-
-/* SYS call 1:
- *
- * void up_fullcontextrestore(uint32_t *restoreregs) noreturn_function;
- */
-
-#define SYS_restore_context (1)
-#define up_fullcontextrestore(restoreregs) \
- sys_call1(SYS_restore_context, (uintptr_t)restoreregs)
-
-/* SYS call 2:
- *
- * void up_switchcontext(uint32_t *saveregs, uint32_t *restoreregs);
- */
-
-#define SYS_switch_context (2)
-#define up_switchcontext(saveregs, restoreregs) \
- sys_call2(SYS_switch_context, (uintptr_t)saveregs, (uintptr_t)restoreregs)
-
-#ifdef CONFIG_BUILD_KERNEL
-/* SYS call 3:
- *
- * void up_syscall_return(void);
- */
-
-#define SYS_syscall_return (3)
-#define up_syscall_return() (void)sys_call0(SYS_syscall_return)
-
-#endif
-#endif /* __ASSEMBLY__ */
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-/****************************************************************************
- * Name: up_syscall0
- *
- * Description:
- * System call SYS_ argument and no additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call0(unsigned int nbr);
-
-/****************************************************************************
- * Name: up_syscall1
- *
- * Description:
- * System call SYS_ argument and one additional parameter.
- *
- ****************************************************************************/
-
-uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1);
-
-/****************************************************************************
- * Name: up_syscall2
- *
- * Description:
- * System call SYS_ argument and two additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1, uintptr_t parm2);
-
-/****************************************************************************
- * Name: up_syscall3
- *
- * Description:
- * System call SYS_ argument and three additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3);
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_MIPS_INCLUDE_MIPS32_SYSCALL_H */
diff --git a/arch/mips/include/syscall.h b/arch/mips/include/syscall.h
index 5a4f8b6..8fbb624 100644
--- a/arch/mips/include/syscall.h
+++ b/arch/mips/include/syscall.h
@@ -29,16 +29,147 @@
* Included Files
****************************************************************************/
-/* Include MIPS architecture-specific syscall macros */
+#include <nuttx/config.h>
-#ifdef CONFIG_ARCH_MIPS32
-# include <arch/mips32/syscall.h>
+#ifndef __ASSEMBLY__
+# include <stdint.h>
#endif
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
+#define SYS_syscall 0x00
+
+/* Configuration ************************************************************/
+
+/* SYS call 1 and 2 are defined for internal use by the PIC32MX port (see
+ * arch/mips/include/mips32/syscall.h). In addition, SYS call 3 is the
+ * return from a SYS call in kernel mode. The first four syscall values
+ * must, therefore, be reserved (0 is not used).
+ */
+
+#ifdef CONFIG_BUILD_KERNEL
+# ifndef CONFIG_SYS_RESERVED
+# error "CONFIG_SYS_RESERVED must be defined to the value 4"
+# elif CONFIG_SYS_RESERVED != 4
+# error "CONFIG_SYS_RESERVED must have the value 4"
+# endif
+#endif
+
+/* sys_call macros **********************************************************/
+
+/* System calls with 3 parameters and fewer are handled by sys_call0
+ * (sys_call1, sys_call2, and sys_call3 are aliases for sys_call0).
+ * This is because the parameters are passed in a0-a3. a0 is reserved for
+ * the syscall number leaving up to three additional parameters that can be
+ * passed in registers. The remainder would have to be pushed onto the
+ * stack.
+ *
+ * Instead, these macros are provided which handle parameters four, five and
+ * six in a non-standard way: The use s0 ($7), s1 ($8), and s2 ($9) to pass
+ * the additional parameters.
+ */
+
+#ifndef __ASSEMBLY__
+
+/* System call SYS_ argument and four additional parameters. */
+
+#define sys_call4(nbr,parm1,parm2,parm3,parm4) __extension__({ \
+ uintptr_t __result; \
+ __asm__ __volatile__ (\
+ "\tmove $4, %0\n" \
+ "\tmove $5, %1\n" \
+ "\tmove $6, %2\n" \
+ "\tmove $7, %3\n" \
+ "\tmove $8, %4\n" \
+ "\la $12, sys_call3\n" \
+ "\jalr $12, $31\n" \
+ "\tmove %5, $r2\n" \
+ : "=r" (nbr) "=r" (parm1) "=r" (parm2) "=r" (parm3) "=r" (parm4) \
+ : " "r"(__result)\
+ : "memory"\
+ ); \
+ __result; \
+})
+
+/* System call SYS_ argument and five additional parameters. */
+
+#define sys_call5(nbr,parm1,parm2,parm3,parm4,parm5) __extension__({ \
+ uintptr_t __result; \
+ __asm__ __volatile__ (\
+ "\tmove $4, %0\n" \
+ "\tmove $5, %1\n" \
+ "\tmove $6, %2\n" \
+ "\tmove $7, %3\n" \
+ "\tmove $8, %4\n" \
+ "\tmove $9, %5\n" \
+ "\la $12, sys_call3\n" \
+ "\jalr $12, $31\n" \
+ "\tmove %6, $r2\n" \
+ : "=r" (nbr) "=r" (parm1) "=r" (parm2) "=r" (parm3) "=r" (parm4) "=r" (parm5) \
+ : " "r"(__result)\
+ : "memory"\
+ ); \
+ __result; \
+})
+
+/* System call SYS_ argument and six additional parameters. */
+
+#define sys_call5(nbr,parm1,parm2,parm3,parm4,parm5,parm6) __extension__({ \
+ uintptr_t __result; \
+ __asm__ __volatile__ (\
+ "\tmove $4, %0\n" \
+ "\tmove $5, %1\n" \
+ "\tmove $6, %2\n" \
+ "\tmove $7, %3\n" \
+ "\tmove $8, %4\n" \
+ "\tmove $9, %5\n" \
+ "\tmove $10, %5\n" \
+ "\la $12, sys_call3\n" \
+ "\jalr $12, $31\n" \
+ "\tmove %6, $r2\n" \
+ : "=r" (nbr) "=r" (parm1) "=r" (parm2) "=r" (parm3) "=r" (parm4) "=r" (parm5) \
+ : " "r"(__result)\
+ : "memory"\
+ ); \
+ __result; \
+})
+
+/* Context switching system calls *******************************************/
+
+/* SYS call 0: (not used) */
+
+/* SYS call 1:
+ *
+ * void up_fullcontextrestore(uint32_t *restoreregs) noreturn_function;
+ */
+
+#define SYS_restore_context (1)
+#define up_fullcontextrestore(restoreregs) \
+ sys_call1(SYS_restore_context, (uintptr_t)restoreregs)
+
+/* SYS call 2:
+ *
+ * void up_switchcontext(uint32_t *saveregs, uint32_t *restoreregs);
+ */
+
+#define SYS_switch_context (2)
+#define up_switchcontext(saveregs, restoreregs) \
+ sys_call2(SYS_switch_context, (uintptr_t)saveregs, (uintptr_t)restoreregs)
+
+#ifdef CONFIG_BUILD_KERNEL
+/* SYS call 3:
+ *
+ * void up_syscall_return(void);
+ */
+
+#define SYS_syscall_return (3)
+#define up_syscall_return() (void)sys_call0(SYS_syscall_return)
+
+#endif
+#endif /* __ASSEMBLY__ */
+
/****************************************************************************
* Public Types
****************************************************************************/
@@ -47,6 +178,8 @@
* Inline functions
****************************************************************************/
+#ifndef __ASSEMBLY__
+
/****************************************************************************
* Public Data
****************************************************************************/
@@ -55,7 +188,6 @@
* Public Function Prototypes
****************************************************************************/
-#ifndef __ASSEMBLY__
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C"
@@ -64,10 +196,51 @@ extern "C"
#define EXTERN extern
#endif
+/****************************************************************************
+ * Name: up_syscall0
+ *
+ * Description:
+ * System call SYS_ argument and no additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call0(unsigned int nbr);
+
+/****************************************************************************
+ * Name: up_syscall1
+ *
+ * Description:
+ * System call SYS_ argument and one additional parameter.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1);
+
+/****************************************************************************
+ * Name: up_syscall2
+ *
+ * Description:
+ * System call SYS_ argument and two additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1, uintptr_t parm2);
+
+/****************************************************************************
+ * Name: up_syscall3
+ *
+ * Description:
+ * System call SYS_ argument and three additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3);
+
#undef EXTERN
#ifdef __cplusplus
}
#endif
-#endif
+#endif /* __ASSEMBLY__ */
#endif /* __ARCH_MIPS_INCLUDE_SYSCALL_H */
diff --git a/arch/misoc/include/lm32/syscall.h b/arch/misoc/include/lm32/syscall.h
deleted file mode 100644
index a7a549c..0000000
--- a/arch/misoc/include/lm32/syscall.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/****************************************************************************
- * arch/misoc/include/lm32/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_MISOC_INCLUDE_LM32_SYSCALL_H
-#define __ARCH_MISOC_INCLUDE_LM32_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifndef __ASSEMBLY__
-# include <stdint.h>
-#endif
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-#define SYS_syscall 0x00
-
-/* Configuration ************************************************************/
-
-/* SYS call 1 and 2 are defined for internal use by the LM32 port (see
- * arch/miscoc/include/lm32/syscall.h). In addition, SYS call 3 is the
- * return from a SYS call in kernel mode. The first four syscall values
- * must, therefore, be reserved (0 is not used).
- */
-
-#ifdef CONFIG_BUILD_KERNEL
-# ifndef CONFIG_SYS_RESERVED
-# error "CONFIG_SYS_RESERVED must be defined to the value 4"
-# elif CONFIG_SYS_RESERVED != 4
-# error "CONFIG_SYS_RESERVED must have the value 4"
-# endif
-#endif
-
-/* sys_call macros **********************************************************/
-
-#ifndef __ASSEMBLY__
-
-/* Context switching system calls *******************************************/
-
-/* SYS call 0: (not used) */
-
-/* SYS call 1:
- *
- * void up_fullcontextrestore(uint32_t *restoreregs) noreturn_function;
- */
-
-#define SYS_restore_context (1)
-#define up_fullcontextrestore(restoreregs) \
- sys_call1(SYS_restore_context, (uintptr_t)restoreregs)
-
-/* SYS call 2:
- *
- * void up_switchcontext(uint32_t *saveregs, uint32_t *restoreregs);
- */
-
-#define SYS_switch_context (2)
-#define up_switchcontext(saveregs, restoreregs) \
- sys_call2(SYS_switch_context, (uintptr_t)saveregs, (uintptr_t)restoreregs)
-
-#ifdef CONFIG_BUILD_KERNEL
-/* SYS call 3:
- *
- * void up_syscall_return(void);
- */
-
-#define SYS_syscall_return (3)
-#define up_syscall_return() (void)sys_call0(SYS_syscall_return)
-
-#endif
-#endif /* __ASSEMBLY__ */
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-/****************************************************************************
- * Name: up_syscall0
- *
- * Description:
- * System call SYS_ argument and no additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call0(unsigned int nbr);
-
-/****************************************************************************
- * Name: up_syscall1
- *
- * Description:
- * System call SYS_ argument and one additional parameter.
- *
- ****************************************************************************/
-
-uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1);
-
-/****************************************************************************
- * Name: up_syscall2
- *
- * Description:
- * System call SYS_ argument and two additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1, uintptr_t parm2);
-
-/****************************************************************************
- * Name: up_syscall3
- *
- * Description:
- * System call SYS_ argument and three additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3);
-
-/****************************************************************************
- * Name: up_syscall4
- *
- * Description:
- * System call SYS_ argument and four additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4);
-
-/****************************************************************************
- * Name: up_syscall5
- *
- * Description:
- * System call SYS_ argument and five additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4, uintptr_t parm5);
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_MISOC_INCLUDE_LM32_SYSCALL_H */
diff --git a/arch/misoc/include/minerva/syscall.h b/arch/misoc/include/minerva/syscall.h
deleted file mode 100644
index 7e27993..0000000
--- a/arch/misoc/include/minerva/syscall.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/****************************************************************************
- * arch/misoc/include/minerva/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_MISOC_INCLUDE_MINERVA_SYSCALL_H
-#define __ARCH_MISOC_INCLUDE_MINERVA_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifndef __ASSEMBLY__
-#include <stdint.h>
-#endif
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-#define SYS_syscall 0x00
-
-/* Configuration ************************************************************/
-
-/* SYS call 1 and 2 are defined for internal use by the MINERVA port (see
- * arch/miscoc/include/minerva/syscall.h). In addition, SYS call 3 is the
- * return from a SYS call in kernel mode. The first four syscall values
- * must, therefore, be reserved (0 is not used).
- */
-
-#ifdef CONFIG_BUILD_KERNEL
-# ifndef CONFIG_SYS_RESERVED
-# error "CONFIG_SYS_RESERVED must be defined to the value 4"
-# elif CONFIG_SYS_RESERVED != 4
-# error "CONFIG_SYS_RESERVED must have the value 4"
-# endif
-#endif
-
-/* sys_call macros **********************************************************/
-
-#ifndef __ASSEMBLY__
-
-/* Context switching system calls *******************************************/
-
-/* SYS call 0: (not used) */
-
-/* SYS call 1:
- *
- * void up_fullcontextrestore(uint32_t *restoreregs) noreturn_function;
- */
-
-#define SYS_restore_context (1)
-#define up_fullcontextrestore(restoreregs) \
- sys_call1(SYS_restore_context, (uintptr_t)restoreregs)
-
-/* SYS call 2:
- *
- * void up_switchcontext(uint32_t *saveregs, uint32_t *restoreregs);
- */
-
-#define SYS_switch_context (2)
-#define up_switchcontext(saveregs, restoreregs) \
- sys_call2(SYS_switch_context, (uintptr_t)saveregs, \
- (uintptr_t)restoreregs)
-
-#ifdef CONFIG_BUILD_KERNEL
-
-/* SYS call 3:
- *
- * void up_syscall_return(void);
- */
-
-#define SYS_syscall_return (3)
-#define up_syscall_return() (void)sys_call0(SYS_syscall_return)
-
-#endif
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifdef __cplusplus
-# define EXTERN extern "C"
-extern "C"
-{
-#else
-# define EXTERN extern
-#endif
-
-/****************************************************************************
- * Name: up_syscall0
- *
- * Description:
- * System call SYS_ argument and no additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call0(unsigned int nbr);
-
-/****************************************************************************
- * Name: up_syscall1
- *
- * Description:
- * System call SYS_ argument and one additional parameter.
- *
- ****************************************************************************/
-
-uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1);
-
-/****************************************************************************
- * Name: up_syscall2
- *
- * Description:
- * System call SYS_ argument and two additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1, uintptr_t parm2);
-
-/****************************************************************************
- * Name: up_syscall3
- *
- * Description:
- * System call SYS_ argument and three additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3);
-
-/****************************************************************************
- * Name: up_syscall4
- *
- * Description:
- * System call SYS_ argument and four additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4);
-
-/****************************************************************************
- * Name: up_syscall5
- *
- * Description:
- * System call SYS_ argument and five additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4, uintptr_t parm5);
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_MISOC_INCLUDE_MINERVA_SYSCALL_H */
diff --git a/arch/misoc/include/syscall.h b/arch/misoc/include/syscall.h
index 5d02b94..564c200 100644
--- a/arch/misoc/include/syscall.h
+++ b/arch/misoc/include/syscall.h
@@ -29,14 +29,164 @@
* Included Files
****************************************************************************/
-/* Include LM32 architecture-specific syscall macros */
+#include <nuttx/config.h>
-#ifdef CONFIG_ARCH_CHIP_LM32
-# include <arch/lm32/syscall.h>
+#ifndef __ASSEMBLY__
+#include <stdint.h>
#endif
-#ifdef CONFIG_ARCH_CHIP_MINERVA
-# include <arch/minerva/syscall.h>
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define SYS_syscall 0x00
+
+/* Configuration ************************************************************/
+
+/* SYS call 1 and 2 are defined for internal use by the MINERVA port (see
+ * arch/miscoc/include/minerva/syscall.h). In addition, SYS call 3 is the
+ * return from a SYS call in kernel mode. The first four syscall values
+ * must, therefore, be reserved (0 is not used).
+ */
+
+#ifdef CONFIG_BUILD_KERNEL
+# ifndef CONFIG_SYS_RESERVED
+# error "CONFIG_SYS_RESERVED must be defined to the value 4"
+# elif CONFIG_SYS_RESERVED != 4
+# error "CONFIG_SYS_RESERVED must have the value 4"
+# endif
+#endif
+
+/* sys_call macros **********************************************************/
+
+#ifndef __ASSEMBLY__
+
+/* Context switching system calls *******************************************/
+
+/* SYS call 0: (not used) */
+
+/* SYS call 1:
+ *
+ * void up_fullcontextrestore(uint32_t *restoreregs) noreturn_function;
+ */
+
+#define SYS_restore_context (1)
+#define up_fullcontextrestore(restoreregs) \
+ sys_call1(SYS_restore_context, (uintptr_t)restoreregs)
+
+/* SYS call 2:
+ *
+ * void up_switchcontext(uint32_t *saveregs, uint32_t *restoreregs);
+ */
+
+#define SYS_switch_context (2)
+#define up_switchcontext(saveregs, restoreregs) \
+ sys_call2(SYS_switch_context, (uintptr_t)saveregs, \
+ (uintptr_t)restoreregs)
+
+#ifdef CONFIG_BUILD_KERNEL
+
+/* SYS call 3:
+ *
+ * void up_syscall_return(void);
+ */
+
+#define SYS_syscall_return (3)
+#define up_syscall_return() (void)sys_call0(SYS_syscall_return)
+
+#endif
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Inline functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#ifdef __cplusplus
+# define EXTERN extern "C"
+extern "C"
+{
+#else
+# define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Name: up_syscall0
+ *
+ * Description:
+ * System call SYS_ argument and no additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call0(unsigned int nbr);
+
+/****************************************************************************
+ * Name: up_syscall1
+ *
+ * Description:
+ * System call SYS_ argument and one additional parameter.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1);
+
+/****************************************************************************
+ * Name: up_syscall2
+ *
+ * Description:
+ * System call SYS_ argument and two additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1, uintptr_t parm2);
+
+/****************************************************************************
+ * Name: up_syscall3
+ *
+ * Description:
+ * System call SYS_ argument and three additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3);
+
+/****************************************************************************
+ * Name: up_syscall4
+ *
+ * Description:
+ * System call SYS_ argument and four additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3, uintptr_t parm4);
+
+/****************************************************************************
+ * Name: up_syscall5
+ *
+ * Description:
+ * System call SYS_ argument and five additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3, uintptr_t parm4, uintptr_t parm5);
+
+#undef EXTERN
+#ifdef __cplusplus
+}
#endif
+#endif /* __ASSEMBLY__ */
#endif /* __ARCH_MISOC_INCLUDE_SYSCALL_H */
diff --git a/arch/sparc/include/sparc_v8/syscall.h b/arch/sparc/include/sparc_v8/syscall.h
deleted file mode 100644
index 37eef48..0000000
--- a/arch/sparc/include/sparc_v8/syscall.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/****************************************************************************
- * arch/sparc/include/sparc_v8/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directed but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_SPARC_INCLUDE_SPARC_V8_SYSCALL_H
-#define __ARCH_SPARC_INCLUDE_SPARC_V8_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifndef __ASSEMBLY__
-# include <stdint.h>
-#endif
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-#define SYS_syscall 0x80
-
-/* Configuration ************************************************************/
-
-/* SYS call 1 and 2 are defined for internal use by the RISC-V port (see
- * arch/riscv/include/mips32/syscall.h). In addition, SYS call 3 is the
- * return from a SYS call in kernel mode. The first four syscall values must
- * therefore, be reserved (0 is not used).
- */
-
-#ifdef CONFIG_BUILD_KERNEL
-# ifndef CONFIG_SYS_RESERVED
-# error "CONFIG_SYS_RESERVED must be defined to the value 4"
-# elif CONFIG_SYS_RESERVED != 4
-# error "CONFIG_SYS_RESERVED must have the value 4"
-# endif
-#endif
-
-/* sys_call macros **********************************************************/
-
-#ifndef __ASSEMBLY__
-
-/* Context switching system calls *******************************************/
-
-/* SYS call 0: (not used) */
-
-/* SYS call 1:
- *
- * void up_fullcontextrestore(uint32_t *restoreregs) noreturn_function;
- */
-
-#define SYS_restore_context (1)
-#define up_fullcontextrestore(restoreregs) \
- (void)sys_call1(SYS_restore_context, (uintptr_t)restoreregs)
-
-/* SYS call 2:
- *
- * void up_switchcontext(uint32_t *saveregs, uint32_t *restoreregs);
- */
-
-#define SYS_switch_context (2)
-#define up_switchcontext(saveregs, restoreregs) \
- (void)sys_call2(SYS_switch_context, (uintptr_t)saveregs, (uintptr_t)restoreregs)
-
-#ifdef CONFIG_BUILD_KERNEL
-/* SYS call 3:
- *
- * void up_syscall_return(void);
- */
-
-#define SYS_syscall_return (3)
-#define up_syscall_return() (void)sys_call0(SYS_syscall_return)
-
-#endif
-#endif /* __ASSEMBLY__ */
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-/****************************************************************************
- * Name: up_syscall0
- *
- * Description:
- * System call SYS_ argument and no additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call0(unsigned int nbr);
-
-/****************************************************************************
- * Name: up_syscall1
- *
- * Description:
- * System call SYS_ argument and one additional parameter.
- *
- ****************************************************************************/
-
-uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1);
-
-/****************************************************************************
- * Name: up_syscall2
- *
- * Description:
- * System call SYS_ argument and two additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1, uintptr_t parm2);
-
-/****************************************************************************
- * Name: up_syscall3
- *
- * Description:
- * System call SYS_ argument and three additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3);
-
-/****************************************************************************
- * Name: up_syscall4
- *
- * Description:
- * System call SYS_ argument and four additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4);
-
-/****************************************************************************
- * Name: up_syscall5
- *
- * Description:
- * System call SYS_ argument and five additional parameters.
- *
- ****************************************************************************/
-
-uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4, uintptr_t parm5);
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-
-#endif /* __ARCH_SPARC_INCLUDE_SPARC_V8_SYSCALL_H */
-
diff --git a/arch/sparc/include/syscall.h b/arch/sparc/include/syscall.h
index d45d462..279f3bf 100644
--- a/arch/sparc/include/syscall.h
+++ b/arch/sparc/include/syscall.h
@@ -29,16 +29,72 @@
* Included Files
****************************************************************************/
-/* Include ARM architecture-specific syscall macros */
+#include <nuttx/config.h>
-#ifdef CONFIG_ARCH_SPARC_V8
-# include <arch/sparc_v8/syscall.h>
+#ifndef __ASSEMBLY__
+# include <stdint.h>
#endif
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
+#define SYS_syscall 0x80
+
+/* Configuration ************************************************************/
+
+/* SYS call 1 and 2 are defined for internal use by the RISC-V port (see
+ * arch/riscv/include/mips32/syscall.h). In addition, SYS call 3 is the
+ * return from a SYS call in kernel mode. The first four syscall values must
+ * therefore, be reserved (0 is not used).
+ */
+
+#ifdef CONFIG_BUILD_KERNEL
+# ifndef CONFIG_SYS_RESERVED
+# error "CONFIG_SYS_RESERVED must be defined to the value 4"
+# elif CONFIG_SYS_RESERVED != 4
+# error "CONFIG_SYS_RESERVED must have the value 4"
+# endif
+#endif
+
+/* sys_call macros **********************************************************/
+
+#ifndef __ASSEMBLY__
+
+/* Context switching system calls *******************************************/
+
+/* SYS call 0: (not used) */
+
+/* SYS call 1:
+ *
+ * void up_fullcontextrestore(uint32_t *restoreregs) noreturn_function;
+ */
+
+#define SYS_restore_context (1)
+#define up_fullcontextrestore(restoreregs) \
+ (void)sys_call1(SYS_restore_context, (uintptr_t)restoreregs)
+
+/* SYS call 2:
+ *
+ * void up_switchcontext(uint32_t *saveregs, uint32_t *restoreregs);
+ */
+
+#define SYS_switch_context (2)
+#define up_switchcontext(saveregs, restoreregs) \
+ (void)sys_call2(SYS_switch_context, (uintptr_t)saveregs, (uintptr_t)restoreregs)
+
+#ifdef CONFIG_BUILD_KERNEL
+/* SYS call 3:
+ *
+ * void up_syscall_return(void);
+ */
+
+#define SYS_syscall_return (3)
+#define up_syscall_return() (void)sys_call0(SYS_syscall_return)
+
+#endif
+#endif /* __ASSEMBLY__ */
+
/****************************************************************************
* Public Types
****************************************************************************/
@@ -47,6 +103,8 @@
* Inline functions
****************************************************************************/
+#ifndef __ASSEMBLY__
+
/****************************************************************************
* Public Data
****************************************************************************/
@@ -55,7 +113,6 @@
* Public Function Prototypes
****************************************************************************/
-#ifndef __ASSEMBLY__
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C"
@@ -64,11 +121,75 @@ extern "C"
#define EXTERN extern
#endif
+/****************************************************************************
+ * Name: up_syscall0
+ *
+ * Description:
+ * System call SYS_ argument and no additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call0(unsigned int nbr);
+
+/****************************************************************************
+ * Name: up_syscall1
+ *
+ * Description:
+ * System call SYS_ argument and one additional parameter.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1);
+
+/****************************************************************************
+ * Name: up_syscall2
+ *
+ * Description:
+ * System call SYS_ argument and two additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1, uintptr_t parm2);
+
+/****************************************************************************
+ * Name: up_syscall3
+ *
+ * Description:
+ * System call SYS_ argument and three additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3);
+
+/****************************************************************************
+ * Name: up_syscall4
+ *
+ * Description:
+ * System call SYS_ argument and four additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3, uintptr_t parm4);
+
+/****************************************************************************
+ * Name: up_syscall5
+ *
+ * Description:
+ * System call SYS_ argument and five additional parameters.
+ *
+ ****************************************************************************/
+
+uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3, uintptr_t parm4, uintptr_t parm5);
+
#undef EXTERN
#ifdef __cplusplus
}
#endif
-#endif
+
+#endif /* __ASSEMBLY__ */
#endif /* __ARCH_SPARC_INCLUDE_SYSCALL_H */
diff --git a/arch/x86/include/i486/syscall.h b/arch/x86/include/i486/syscall.h
deleted file mode 100644
index 994f2c0..0000000
--- a/arch/x86/include/i486/syscall.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
- * arch/x86/include/i486/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_X86_INCLUDE_I486_SYSCALL_H
-#define __ARCH_X86_INCLUDE_I486_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-#include <stdint.h>
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-#define SYS_syscall 0x80
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-/* SWI with SYS_ call number and six parameters */
-
-uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6);
-
-/* SWI with SYS_ call number and no parameters */
-
-static inline uintptr_t sys_call0(unsigned int nbr)
-{
- return sys_call6(nbr, 0, 0, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and one parameter */
-
-static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
-{
- return sys_call6(nbr, parm1, 0, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and two parameters */
-
-static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2)
-{
- return sys_call6(nbr, parm1, parm2, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and three parameters */
-
-static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3)
-{
- return sys_call6(nbr, parm1, parm2, parm3, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and four parameters */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4)
-{
- return sys_call6(nbr, parm1, parm2, parm3, parm4, 0, 0);
-}
-
-/* SWI with SYS_ call number and five parameters */
-
-static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5)
-{
- return sys_call6(nbr, parm1, parm2, parm3, parm4, parm5, 0);
-}
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-#endif /* __ARCH_X86_INCLUDE_I486_SYSCALL_H */
diff --git a/arch/x86/include/syscall.h b/arch/x86/include/syscall.h
index 9a4d20a..ea1b814 100644
--- a/arch/x86/include/syscall.h
+++ b/arch/x86/include/syscall.h
@@ -29,22 +29,17 @@
* Included Files
****************************************************************************/
-/* Include x86 architecture-specific syscall macros */
-
-#ifdef CONFIG_ARCH_I486
-# include <arch/i486/syscall.h>
-#endif
+#include <nuttx/config.h>
+#include <stdint.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
-/****************************************************************************
- * Public Types
- ****************************************************************************/
+#define SYS_syscall 0x80
/****************************************************************************
- * Inline functions
+ * Public Types
****************************************************************************/
/****************************************************************************
@@ -64,6 +59,60 @@ extern "C"
#define EXTERN extern
#endif
+/* SWI with SYS_ call number and six parameters */
+
+uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3, uintptr_t parm4, uintptr_t parm5,
+ uintptr_t parm6);
+
+/* SWI with SYS_ call number and no parameters */
+
+static inline uintptr_t sys_call0(unsigned int nbr)
+{
+ return sys_call6(nbr, 0, 0, 0, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and one parameter */
+
+static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
+{
+ return sys_call6(nbr, parm1, 0, 0, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and two parameters */
+
+static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2)
+{
+ return sys_call6(nbr, parm1, parm2, 0, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and three parameters */
+
+static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3)
+{
+ return sys_call6(nbr, parm1, parm2, parm3, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and four parameters */
+
+static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4)
+{
+ return sys_call6(nbr, parm1, parm2, parm3, parm4, 0, 0);
+}
+
+/* SWI with SYS_ call number and five parameters */
+
+static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4, uintptr_t parm5)
+{
+ return sys_call6(nbr, parm1, parm2, parm3, parm4, parm5, 0);
+}
+
#undef EXTERN
#ifdef __cplusplus
}
diff --git a/arch/x86_64/include/intel64/syscall.h b/arch/x86_64/include/intel64/syscall.h
deleted file mode 100644
index 1c4befa..0000000
--- a/arch/x86_64/include/intel64/syscall.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/****************************************************************************
- * arch/x86_64/include/intel64/syscall.h
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/* This file should never be included directly but, rather, only indirectly
- * through include/syscall.h or include/sys/sycall.h
- */
-
-#ifndef __ARCH_X86_64_INCLUDE_INTEL64_SYSCALL_H
-#define __ARCH_X86_64_INCLUDE_INTEL64_SYSCALL_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-#include <stdint.h>
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-#ifndef __ASSEMBLY__
-#ifdef __cplusplus
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
-
-void enable_syscall(void);
-void syscall_entry(void);
-uint64_t syscall_handler(unsigned long nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6);
-uint64_t linux_interface(unsigned long nbr, uintptr_t parm1, uintptr_t parm2,
- uintptr_t parm3, uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6);
-
-/* SWI with SYS_ call number and six parameters */
-
-static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6);
-
-/* SWI with SYS_ call number and no parameters */
-
-static inline uintptr_t sys_call0(unsigned int nbr)
-{
- return sys_call6(nbr, 0, 0, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and one parameter */
-
-static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
-{
- return sys_call6(nbr, parm1, 0, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and two parameters */
-
-static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2)
-{
- return sys_call6(nbr, parm1, parm2, 0, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and three parameters */
-
-static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3)
-{
- return sys_call6(nbr, parm1, parm2, parm3, 0, 0, 0);
-}
-
-/* SWI with SYS_ call number and four parameters */
-
-static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4)
-{
- return sys_call6(nbr, parm1, parm2, parm3, parm4, 0, 0);
-}
-
-/* SWI with SYS_ call number and five parameters */
-
-static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5)
-{
- return sys_call6(nbr, parm1, parm2, parm3, parm4, parm5, 0);
-}
-
-static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
- uintptr_t parm2, uintptr_t parm3,
- uintptr_t parm4, uintptr_t parm5,
- uintptr_t parm6)
-{
- register uint64_t reg0 __asm__("rax") = (uint64_t)(nbr);
- register uint64_t reg1 __asm__("rdi") = (uint64_t)(parm1);
- register uint64_t reg2 __asm__("rsi") = (uint64_t)(parm2);
- register uint64_t reg3 __asm__("rdx") = (uint64_t)(parm3);
- register uint64_t reg4 __asm__("r10") = (uint64_t)(parm4);
- register uint64_t reg5 __asm__("r8") = (uint64_t)(parm5);
- register uint64_t reg6 __asm__("r9") = (uint64_t)(parm6);
-
- __asm__ __volatile__
- (
- "syscall"
- : "=r"(reg0)
- : "r"(reg0), "r"(reg1), "r"(reg2),
- "r"(reg3), "r"(reg4), "r"(reg5), "r"(reg6)
- : "memory"
- );
-
- return reg0;
-}
-
-#undef EXTERN
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-#endif /* __ARCH_X86_64_INCLUDE_INTEL64_SYSCALL_H */
-
diff --git a/arch/x86_64/include/syscall.h b/arch/x86_64/include/syscall.h
index ec9ac4d..6e35fc0 100644
--- a/arch/x86_64/include/syscall.h
+++ b/arch/x86_64/include/syscall.h
@@ -29,11 +29,8 @@
* Included Files
****************************************************************************/
-/* Include x86 architecture-specific syscall macros */
-
-#ifdef CONFIG_ARCH_INTEL64
-# include <arch/intel64/syscall.h>
-#endif
+#include <nuttx/config.h>
+#include <stdint.h>
/****************************************************************************
* Pre-processor Definitions
@@ -44,10 +41,6 @@
****************************************************************************/
/****************************************************************************
- * Inline functions
- ****************************************************************************/
-
-/****************************************************************************
* Public Data
****************************************************************************/
@@ -64,6 +57,95 @@ extern "C"
#define EXTERN extern
#endif
+void enable_syscall(void);
+void syscall_entry(void);
+uint64_t syscall_handler(unsigned long nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3, uintptr_t parm4, uintptr_t parm5,
+ uintptr_t parm6);
+uint64_t linux_interface(unsigned long nbr, uintptr_t parm1, uintptr_t parm2,
+ uintptr_t parm3, uintptr_t parm4, uintptr_t parm5,
+ uintptr_t parm6);
+
+/* SWI with SYS_ call number and six parameters */
+
+static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4, uintptr_t parm5,
+ uintptr_t parm6);
+
+/* SWI with SYS_ call number and no parameters */
+
+static inline uintptr_t sys_call0(unsigned int nbr)
+{
+ return sys_call6(nbr, 0, 0, 0, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and one parameter */
+
+static inline uintptr_t sys_call1(unsigned int nbr, uintptr_t parm1)
+{
+ return sys_call6(nbr, parm1, 0, 0, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and two parameters */
+
+static inline uintptr_t sys_call2(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2)
+{
+ return sys_call6(nbr, parm1, parm2, 0, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and three parameters */
+
+static inline uintptr_t sys_call3(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3)
+{
+ return sys_call6(nbr, parm1, parm2, parm3, 0, 0, 0);
+}
+
+/* SWI with SYS_ call number and four parameters */
+
+static inline uintptr_t sys_call4(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4)
+{
+ return sys_call6(nbr, parm1, parm2, parm3, parm4, 0, 0);
+}
+
+/* SWI with SYS_ call number and five parameters */
+
+static inline uintptr_t sys_call5(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4, uintptr_t parm5)
+{
+ return sys_call6(nbr, parm1, parm2, parm3, parm4, parm5, 0);
+}
+
+static inline uintptr_t sys_call6(unsigned int nbr, uintptr_t parm1,
+ uintptr_t parm2, uintptr_t parm3,
+ uintptr_t parm4, uintptr_t parm5,
+ uintptr_t parm6)
+{
+ register uint64_t reg0 __asm__("rax") = (uint64_t)(nbr);
+ register uint64_t reg1 __asm__("rdi") = (uint64_t)(parm1);
+ register uint64_t reg2 __asm__("rsi") = (uint64_t)(parm2);
+ register uint64_t reg3 __asm__("rdx") = (uint64_t)(parm3);
+ register uint64_t reg4 __asm__("r10") = (uint64_t)(parm4);
+ register uint64_t reg5 __asm__("r8") = (uint64_t)(parm5);
+ register uint64_t reg6 __asm__("r9") = (uint64_t)(parm6);
+
+ __asm__ __volatile__
+ (
+ "syscall"
+ : "=r"(reg0)
+ : "r"(reg0), "r"(reg1), "r"(reg2),
+ "r"(reg3), "r"(reg4), "r"(reg5), "r"(reg6)
+ : "memory"
+ );
+
+ return reg0;
+}
+
#undef EXTERN
#ifdef __cplusplus
}