summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-08-30 13:26:45 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-08-30 13:26:45 -0600
commit7af9398910df9a007a16856956fd7754fa6e89ff (patch)
tree0fa44384f324c59b873cadc399dba506605779a2
parent932f0d94e00ef4fd1763ebe7097ff74f42728212 (diff)
downloadnuttx-7af9398910df9a007a16856956fd7754fa6e89ff.tar.gz
nuttx-7af9398910df9a007a16856956fd7754fa6e89ff.tar.bz2
nuttx-7af9398910df9a007a16856956fd7754fa6e89ff.zip
clock_systimer needs the same fix as fore get/set_errno when used with system calls
-rw-r--r--nuttx/include/nuttx/syscall.h110
-rw-r--r--nuttx/syscall/syscall.csv6
2 files changed, 113 insertions, 3 deletions
diff --git a/nuttx/include/nuttx/syscall.h b/nuttx/include/nuttx/syscall.h
new file mode 100644
index 000000000..4fd05c7b2
--- /dev/null
+++ b/nuttx/include/nuttx/syscall.h
@@ -0,0 +1,110 @@
+/************************************************************************
+ * include/nuttx/errno.h
+ *
+ * Copyright (C) 2014 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ************************************************************************/
+
+#ifndef __INCLUDE_NUTTX_ERRNO_H
+#define __INCLUDE_NUTTX_ERRNO_H
+
+/************************************************************************
+ * Included Files
+ ************************************************************************/
+
+#include <nuttx/config.h>
+
+/* These must always be included before this file */
+
+#include <errno.h>
+#include <nuttx/clock.h>
+
+#ifdef CONFIG_LIB_SYSCALL
+
+/************************************************************************
+ * Pre-processor Definitions
+ ************************************************************************/
+/* 'errno' and timer access is awkward. We need to generate get_errno(),
+ * set_errno(), and clock_systimer() interfaces to support the system
+ * calls, even though we don't use them from within the OS.
+ *
+ * The "normal" pre-processor definitions for the errno functions are in
+ * errno.h and clock functions in nuttx/clock.h but we need the internal
+ * function prototypes in here because those may be macro-ized.
+ */
+
+#undef get_errno
+#undef set_errno
+#undef clock_systimer
+
+/************************************************************************
+ * Type Declarations
+ ************************************************************************/
+
+/************************************************************************
+ * Public Data
+ ************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/************************************************************************
+ * Public Function Prototypes
+ ************************************************************************/
+/* These get_errno(), set_errno(), and clock_systimer() functions are
+ * always exported as functions from the kernel always when the system
+ * call interface is built. errno.h and nuttx/clock.h provide the
+ * context-specific usage interface for both the kernel- and
+ * user-spaces. These may be different: These interfaces may be macro-
+ * ized in those header files.
+ *
+ * This header file always exists to disambiguate the context. The
+ * prototypes here duplicate those of errno.h and nuttx/clock.h and must
+ * exactly match.
+ */
+
+void set_errno(int errcode);
+int get_errno(void);
+uint32_t clock_systimer(void);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* CONFIG_LIB_SYSCALL */
+#endif /* __INCLUDE_NUTTX_ERRNO_H */
diff --git a/nuttx/syscall/syscall.csv b/nuttx/syscall/syscall.csv
index f90d83b9b..1f7a2e759 100644
--- a/nuttx/syscall/syscall.csv
+++ b/nuttx/syscall/syscall.csv
@@ -6,7 +6,7 @@
"clock_getres","time.h","","int","clockid_t","struct timespec*"
"clock_gettime","time.h","","int","clockid_t","struct timespec*"
"clock_settime","time.h","","int","clockid_t","const struct timespec*"
-"clock_systimer","nuttx/clock.h","","uint32_t"
+"clock_systimer","nuttx/syscall.h","","uint32_t"
"close","unistd.h","CONFIG_NSOCKET_DESCRIPTORS > 0 || CONFIG_NFILE_DESCRIPTORS > 0","int","int"
"closedir","dirent.h","CONFIG_NFILE_DESCRIPTORS > 0","int","FAR DIR*"
"connect","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","int","int","FAR const struct sockaddr*","socklen_t"
@@ -18,7 +18,7 @@
"fcntl","fcntl.h","CONFIG_NFILE_DESCRIPTORS > 0","int","int","int","..."
"fs_fdopen","nuttx/fs/fs.h","CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0","FAR struct file_struct*","int","int","FAR struct tcb_s*"
"fsync","unistd.h","CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT)","int","int"
-"get_errno","nuttx/errno.h","","int"
+"get_errno","nuttx/syscall.h","","int"
"getenv","stdlib.h","!defined(CONFIG_DISABLE_ENVIRON)","FAR char*","FAR const char*"
"getpid","unistd.h","","pid_t"
"getsockopt","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","int","int","int","int","FAR void*","FAR socklen_t*"
@@ -110,7 +110,7 @@
"send","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","ssize_t","int","FAR const void*","size_t","int"
"sendfile","sys/sendfile.h","CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_NET_SENDFILE)","ssize_t","int","int","FAR off_t*","size_t"
"sendto","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","ssize_t","int","FAR const void*","size_t","int","FAR const struct sockaddr*","socklen_t"
-"set_errno","nuttx/errno.h","","void","int"
+"set_errno","nuttx/syscall.h","","void","int"
"setenv","stdlib.h","!defined(CONFIG_DISABLE_ENVIRON)","int","const char*","const char*","int"
"setsockopt","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","int","int","int","int","FAR const void*","socklen_t"
"sigaction","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","int","FAR const struct sigaction*","FAR struct sigaction*"