diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2011-03-29 00:07:02 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2011-03-29 00:07:02 +0000 |
commit | 9d3dd1fbba6b9c1dff1f1b6699cb0b293857ed74 (patch) | |
tree | 82bf5b0e6e26f447eedb4044500a97a0108f4572 | |
parent | 3b136a8a2bba17e4f5ab0a18118a9f69e5f5eab1 (diff) | |
download | px4-nuttx-9d3dd1fbba6b9c1dff1f1b6699cb0b293857ed74.tar.gz px4-nuttx-9d3dd1fbba6b9c1dff1f1b6699cb0b293857ed74.tar.bz2 px4-nuttx-9d3dd1fbba6b9c1dff1f1b6699cb0b293857ed74.zip |
Moving toward system call infrastructure
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3435 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r-- | nuttx/arch/arm/include/arm/irq.h | 47 | ||||
-rw-r--r-- | nuttx/arch/arm/include/cortexm3/irq.h | 58 | ||||
-rw-r--r-- | nuttx/arch/avr/include/avr32/irq.h | 6 | ||||
-rwxr-xr-x | nuttx/arch/hc/include/hc12/irq.h | 6 | ||||
-rwxr-xr-x | nuttx/arch/hc/include/hcs12/irq.h | 7 | ||||
-rwxr-xr-x | nuttx/arch/x86/include/i486/irq.h | 6 | ||||
-rwxr-xr-x | nuttx/configs/vsn/nsh/setenv.sh | 3 | ||||
-rw-r--r-- | nuttx/include/nuttx/irq.h | 3 | ||||
-rw-r--r-- | nuttx/include/sys/syscall.h | 160 |
9 files changed, 207 insertions, 89 deletions
diff --git a/nuttx/arch/arm/include/arm/irq.h b/nuttx/arch/arm/include/arm/irq.h index 65ccd1356..befc1218b 100644 --- a/nuttx/arch/arm/include/arm/irq.h +++ b/nuttx/arch/arm/include/arm/irq.h @@ -1,7 +1,7 @@ /**************************************************************************** * arch/arm/include/arm/irq.h * - * Copyright (C) 2009-2010 Gregory Nutt. All rights reserved. + * Copyright (C) 2009-2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -204,8 +204,46 @@ static inline void irqrestore(irqstate_t flags) : "memory"); } -static inline void system_call(swint_t func, int parm1, - int parm2, int parm3) +static inline void system_call0(unsigned int nbr) +{ + __asm__ __volatile__ + ( + "mov\tr0,%0\n\t" + "swi\t0x900001\n\t" + : + : "r" ((long)(nbr)) + : "r0", "lr"); +} + +static inline void system_call1(unsigned int nbr, uintptr_t parm1) +{ + __asm__ __volatile__ + ( + "mov\tr0,%0\n\t" + "mov\tr1,%1\n\t" + "swi\t0x900001\n\t" + : + : "r" ((long)(nbr)), "r" ((long)(parm1)) + : "r0", "r1", "lr"); +} + +static inline void system_call2(unsigned int nbr, uintptr_t parm1, + uintptr_t parm2) +{ + __asm__ __volatile__ + ( + "mov\tr0,%0\n\t" + "mov\tr1,%1\n\t" + "mov\tr2,%2\n\t" + "swi\t0x900001\n\t" + : + : "r" ((long)(nbr)), "r" ((long)(parm1)), + "r" ((long)(parm2)) + : "r0", "r1", "r2", "lr"); +} + +static inline void system_call3(unsigned int nbr, uintptr_t parm1, + uintptr_t parm2, uintptr_t parm3) { __asm__ __volatile__ ( @@ -215,10 +253,11 @@ static inline void system_call(swint_t func, int parm1, "mov\tr3,%3\n\t" "swi\t0x900001\n\t" : - : "r" ((long)(func)), "r" ((long)(parm1)), + : "r" ((long)(nbr)), "r" ((long)(parm1)), "r" ((long)(parm2)), "r" ((long)(parm3)) : "r0", "r1", "r2", "r3", "lr"); } + #endif /* __ASSEMBLY__ */ /**************************************************************************** diff --git a/nuttx/arch/arm/include/cortexm3/irq.h b/nuttx/arch/arm/include/cortexm3/irq.h index 3f731385b..f57c1dc33 100644 --- a/nuttx/arch/arm/include/cortexm3/irq.h +++ b/nuttx/arch/arm/include/cortexm3/irq.h @@ -1,7 +1,7 @@ /**************************************************************************** * arch/arm/include/cortexm3/irq.h * - * Copyright (C) 2009 Gregory Nutt. All rights reserved. + * Copyright (C) 2009, 2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -49,7 +49,6 @@ # include <stdint.h> #endif - /**************************************************************************** * Definitions ****************************************************************************/ @@ -281,6 +280,61 @@ static inline void svcall(uint32_t cmd, uint32_t arg) : "r" (cmd), "r" (arg) : "memory"); } + +static inline void system_call0(unsigned int nbr) +{ + __asm__ __volatile__ + ( + "mov\tr0,%0\n\t" + "\tsvc 0\n" + : + : "r" ((long)(nbr)) + : "r0", "lr"); +} + +static inline void system_call1(unsigned int nbr, uintptr_t parm1) +{ + __asm__ __volatile__ + ( + "mov\tr0,%0\n\t" + "mov\tr1,%1\n\t" + "\tsvc 0\n" + : + : "r" ((long)(nbr)), "r" ((long)(parm1)) + : "r0", "r1", "lr"); +} + +static inline void system_call2(unsigned int nbr, uintptr_t parm1, + uintptr_t parm2) +{ + __asm__ __volatile__ + ( + "mov\tr0,%0\n\t" + "mov\tr1,%1\n\t" + "mov\tr2,%2\n\t" + "\tsvc 0\n" + : + : "r" ((long)(nbr)), "r" ((long)(parm1)), + "r" ((long)(parm2)) + : "r0", "r1", "r2", "lr"); +} + +static inline void system_call3(unsigned int nbr, uintptr_t parm1, + uintptr_t parm2, uintptr_t parm3) +{ + __asm__ __volatile__ + ( + "mov\tr0,%0\n\t" + "mov\tr1,%1\n\t" + "mov\tr2,%2\n\t" + "mov\tr3,%3\n\t" + "\tsvc 0\n" + : + : "r" ((long)(nbr)), "r" ((long)(parm1)), + "r" ((long)(parm2)), "r" ((long)(parm3)) + : "r0", "r1", "r2", "r3", "lr"); +} + #endif /* __ASSEMBLY__ */ /**************************************************************************** diff --git a/nuttx/arch/avr/include/avr32/irq.h b/nuttx/arch/avr/include/avr32/irq.h index a9d0d8626..691bc72d4 100644 --- a/nuttx/arch/avr/include/avr32/irq.h +++ b/nuttx/arch/avr/include/avr32/irq.h @@ -188,6 +188,12 @@ static inline void irqrestore(irqstate_t flags) ); } } + +static inline void system_call3(unsigned int nbr, uintptr_t parm1, + uintptr_t parm2, uintptr_t parm3) +{ + /* To be provided */ +} #endif /* __ASSEMBLY__ */ /**************************************************************************** diff --git a/nuttx/arch/hc/include/hc12/irq.h b/nuttx/arch/hc/include/hc12/irq.h index b499b171d..8754dc5d8 100755 --- a/nuttx/arch/hc/include/hc12/irq.h +++ b/nuttx/arch/hc/include/hc12/irq.h @@ -1,7 +1,7 @@ /************************************************************************************ * arch/hc/include/hc12/irq.h * - * Copyright (C) 2009 Gregory Nutt. All rights reserved. + * Copyright (C) 2009, 2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -81,8 +81,8 @@ static inline void irqrestore(irqstate_t flags) /* To be provided */ } -static inline void system_call(swint_t func, int parm1, - int parm2, int parm3) +static inline void system_call3(unsigned int nbr, uintptr_t parm1, + uintptr_t parm2, uintptr_t parm3) { /* To be provided */ } diff --git a/nuttx/arch/hc/include/hcs12/irq.h b/nuttx/arch/hc/include/hcs12/irq.h index cb3eb8ecb..d6162b82e 100755 --- a/nuttx/arch/hc/include/hcs12/irq.h +++ b/nuttx/arch/hc/include/hcs12/irq.h @@ -243,7 +243,12 @@ static inline void irqrestore(irqstate_t flags) /* System call */ -#define system_call(f,p1,p2,p3) __asm("swi") +static inline void system_call3(unsigned int nbr, uintptr_t parm1, + uintptr_t parm2, uintptr_t parm3) +{ + /* To be provided */ + /* __asm("swi") */ +} /************************************************************************************ * Public Data diff --git a/nuttx/arch/x86/include/i486/irq.h b/nuttx/arch/x86/include/i486/irq.h index 437352199..bca34b3ba 100755 --- a/nuttx/arch/x86/include/i486/irq.h +++ b/nuttx/arch/x86/include/i486/irq.h @@ -256,6 +256,12 @@ static inline void irqrestore(irqstate_t flags) } } +static inline void system_call3(unsigned int nbr, uintptr_t parm1, + uintptr_t parm2, uintptr_t parm3) +{ + /* To be provided */ +} + /**************************************************************************** * Public Variables ****************************************************************************/ diff --git a/nuttx/configs/vsn/nsh/setenv.sh b/nuttx/configs/vsn/nsh/setenv.sh index d83685192..cbd45aa50 100755 --- a/nuttx/configs/vsn/nsh/setenv.sh +++ b/nuttx/configs/vsn/nsh/setenv.sh @@ -40,8 +40,7 @@ fi if [ -z "${PATH_ORIG}" ]; then export PATH_ORIG="${PATH}"; fi WD=`pwd` -export RIDE_BIN="/cygdrive/c/Program Files/Raisonance/Ride/arm-gcc/bin" export BUILDROOT_BIN="${WD}/../buildroot/build_arm_nofpu/staging_dir/bin" -export PATH="${BUILDROOT_BIN}:${RIDE_BIN}:/sbin:/usr/sbin:${PATH_ORIG}" +export PATH="${BUILDROOT_BIN}:/sbin:/usr/sbin:${PATH_ORIG}" echo "PATH : ${PATH}" diff --git a/nuttx/include/nuttx/irq.h b/nuttx/include/nuttx/irq.h index 5c83d9587..c9c6109d5 100644 --- a/nuttx/include/nuttx/irq.h +++ b/nuttx/include/nuttx/irq.h @@ -1,7 +1,7 @@ /**************************************************************************** * include/nuttx/irq.h * - * Copyright (C) 2007-2010 Gregory Nutt. All rights reserved. + * Copyright (C) 2007-2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -60,7 +60,6 @@ #ifndef __ASSEMBLY__ typedef int (*xcpt_t)(int irq, FAR void *context); -typedef int (*swint_t)(int code, int parm2, int parm3, FAR void *context); #endif /* Now include architecture-specific types */ diff --git a/nuttx/include/sys/syscall.h b/nuttx/include/sys/syscall.h index 709f282c9..f5c083751 100644 --- a/nuttx/include/sys/syscall.h +++ b/nuttx/include/sys/syscall.h @@ -41,85 +41,95 @@ * Included Files ****************************************************************************/ +#include <nuttx/config.h> + /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ -#define SYS_accept (0) -#define SYS_bind (1) -#define SYS_chdir (2) -#define SYS_clock_getres (3) -#define SYS_clock_gettime (4) -#define SYS_clock_settime (5) -#define SYS_close (6) -#define SYS_connect (7) -#define SYS_creat (8) -#define SYS_dup (9) -#define SYS_dup2 (10) -#define SYS_exit (11) -#define SYS_fcntl (12) -#define SYS_fstat (13) -#define SYS_fstatfs (14) -#define SYS_fsync (15) -#define SYS_getcwd (16) -#define SYS_getpid (17) -#define SYS_getsockopt (18) -#define SYS_gettimeofday (19) -#define SYS_ioctl (20) -#define SYS_kill (21) -#define SYS_listen (22) -#define SYS_lseek (23) -#define SYS_mkdir (24) -#define SYS_mmap (25) -#define SYS_mount (26) -#define SYS_mq_notify (27) -#define SYS_mq_open (28) -#define SYS_mq_timedreceive (29) -#define SYS_mq_timedsend (30) -#define SYS_mq_unlink (31) -#define SYS_munmap (32) -#define SYS_open (33) -#define SYS_pipe (34) -#define SYS_poll (35) -#define SYS_read (36) -#define SYS_readdir (37) -#define SYS_reboot (38) -#define SYS_recvfrom (39) -#define SYS_rename (40) -#define SYS_rmdir (41) -#define SYS_sched_getparam (42) -#define SYS_sched_get_priority_max (43) -#define SYS_sched_get_priority_min (44) -#define SYS_sched_getscheduler (45) -#define SYS_sched_rr_get_interval (46) -#define SYS_sched_setparam (47) -#define SYS_sched_setscheduler (48) -#define SYS_sched_yield (49) -#define SYS_select (50) -#define SYS_sendto (51) -#define SYS_setsockopt (52) -#define SYS_sigaction (53) -#define SYS_signal (54) -#define SYS_sigpending (55) -#define SYS_sigprocmask (56) -#define SYS_sigsuspend (57) -#define SYS_socket (58) -#define SYS_stat (59) -#define SYS_statfs (60) -#define SYS_task_create (61) -#define SYS_task_delete (62) -#define SYS_task_init (63) -#define SYS_task_restart (64) -#define SYS_timer_create (65) -#define SYS_timer_delete (66) -#define SYS_timer_getoverrun (67) -#define SYS_timer_gettime (68) -#define SYS_timer_settime (69) -#define SYS_umount (70) -#define SYS_unlink (71) -#define SYS_waitid (72) -#define SYS_waitpid (73) -#define SYS_write (74) +/* Reserve the first system calls for platform-specific usage */ + +#ifndef CONFIG_CONFIG_SYS_RESERVED +# define CONFIG_SYS_RESERVED (32) +#endif + +/* System call numbers */ + +#define SYS_accept (CONFIG_SYS_RESERVED+0) +#define SYS_bind (CONFIG_SYS_RESERVED+1) +#define SYS_chdir (CONFIG_SYS_RESERVED+2) +#define SYS_clock_getres (CONFIG_SYS_RESERVED+3) +#define SYS_clock_gettime (CONFIG_SYS_RESERVED+4) +#define SYS_clock_settime (CONFIG_SYS_RESERVED+5) +#define SYS_close (CONFIG_SYS_RESERVED+6) +#define SYS_connect (CONFIG_SYS_RESERVED+7) +#define SYS_creat (CONFIG_SYS_RESERVED+8) +#define SYS_dup (CONFIG_SYS_RESERVED+9) +#define SYS_dup2 (CONFIG_SYS_RESERVED+10) +#define SYS_exit (CONFIG_SYS_RESERVED+11) +#define SYS_fcntl (CONFIG_SYS_RESERVED+12) +#define SYS_fstat (CONFIG_SYS_RESERVED+13) +#define SYS_fstatfs (CONFIG_SYS_RESERVED+14) +#define SYS_fsync (CONFIG_SYS_RESERVED+15) +#define SYS_getcwd (CONFIG_SYS_RESERVED+16) +#define SYS_getpid (CONFIG_SYS_RESERVED+17) +#define SYS_getsockopt (CONFIG_SYS_RESERVED+18) +#define SYS_gettimeofday (CONFIG_SYS_RESERVED+19) +#define SYS_ioctl (CONFIG_SYS_RESERVED+20) +#define SYS_kill (CONFIG_SYS_RESERVED+21) +#define SYS_listen (CONFIG_SYS_RESERVED+22) +#define SYS_lseek (CONFIG_SYS_RESERVED+23) +#define SYS_mkdir (CONFIG_SYS_RESERVED+24) +#define SYS_mmap (CONFIG_SYS_RESERVED+25) +#define SYS_mount (CONFIG_SYS_RESERVED+26) +#define SYS_mq_notify (CONFIG_SYS_RESERVED+27) +#define SYS_mq_open (CONFIG_SYS_RESERVED+28) +#define SYS_mq_timedreceive (CONFIG_SYS_RESERVED+29) +#define SYS_mq_timedsend (CONFIG_SYS_RESERVED+30) +#define SYS_mq_unlink (CONFIG_SYS_RESERVED+31) +#define SYS_munmap (CONFIG_SYS_RESERVED+32) +#define SYS_open (CONFIG_SYS_RESERVED+33) +#define SYS_pipe (CONFIG_SYS_RESERVED+34) +#define SYS_poll (CONFIG_SYS_RESERVED+35) +#define SYS_read (CONFIG_SYS_RESERVED+36) +#define SYS_readdir (CONFIG_SYS_RESERVED+37) +#define SYS_reboot (CONFIG_SYS_RESERVED+38) +#define SYS_recvfrom (CONFIG_SYS_RESERVED+39) +#define SYS_rename (CONFIG_SYS_RESERVED+40) +#define SYS_rmdir (CONFIG_SYS_RESERVED+41) +#define SYS_sched_getparam (CONFIG_SYS_RESERVED+42) +#define SYS_sched_get_priority_max (CONFIG_SYS_RESERVED+43) +#define SYS_sched_get_priority_min (CONFIG_SYS_RESERVED+44) +#define SYS_sched_getscheduler (CONFIG_SYS_RESERVED+45) +#define SYS_sched_rr_get_interval (CONFIG_SYS_RESERVED+46) +#define SYS_sched_setparam (CONFIG_SYS_RESERVED+47) +#define SYS_sched_setscheduler (CONFIG_SYS_RESERVED+48) +#define SYS_sched_yield (CONFIG_SYS_RESERVED+49) +#define SYS_select (CONFIG_SYS_RESERVED+50) +#define SYS_sendto (CONFIG_SYS_RESERVED+51) +#define SYS_setsockopt (CONFIG_SYS_RESERVED+52) +#define SYS_sigaction (CONFIG_SYS_RESERVED+53) +#define SYS_signal (CONFIG_SYS_RESERVED+54) +#define SYS_sigpending (CONFIG_SYS_RESERVED+55) +#define SYS_sigprocmask (CONFIG_SYS_RESERVED+56) +#define SYS_sigsuspend (CONFIG_SYS_RESERVED+57) +#define SYS_socket (CONFIG_SYS_RESERVED+58) +#define SYS_stat (CONFIG_SYS_RESERVED+59) +#define SYS_statfs (CONFIG_SYS_RESERVED+60) +#define SYS_task_create (CONFIG_SYS_RESERVED+61) +#define SYS_task_delete (CONFIG_SYS_RESERVED+62) +#define SYS_task_init (CONFIG_SYS_RESERVED+63) +#define SYS_task_restart (CONFIG_SYS_RESERVED+64) +#define SYS_timer_create (CONFIG_SYS_RESERVED+65) +#define SYS_timer_delete (CONFIG_SYS_RESERVED+66) +#define SYS_timer_getoverrun (CONFIG_SYS_RESERVED+67) +#define SYS_timer_gettime (CONFIG_SYS_RESERVED+68) +#define SYS_timer_settime (CONFIG_SYS_RESERVED+69) +#define SYS_umount (CONFIG_SYS_RESERVED+70) +#define SYS_unlink (CONFIG_SYS_RESERVED+71) +#define SYS_waitid (CONFIG_SYS_RESERVED+72) +#define SYS_waitpid (CONFIG_SYS_RESERVED+73) +#define SYS_write (CONFIG_SYS_RESERVED+74) /**************************************************************************** * Public Type Definitions |