]> rtime.felk.cvut.cz Git - frescor/fosa.git/blobdiff - include/fosa_opaque_types.h
Adding FOSA thread groups
[frescor/fosa.git] / include / fosa_opaque_types.h
index cf7bab8d82c300cb3682962630cb854f84b1d062..a658d5e2e88dad89ec5432efb22e696775b5b86f 100644 (file)
@@ -1,18 +1,18 @@
 // -----------------------------------------------------------------------
-//  Copyright (C) 2006 - 2007 FRESCOR consortium partners:
+//  Copyright (C) 2006 - 2008 FRESCOR consortium partners:
 //
 //    Universidad de Cantabria,              SPAIN
 //    University of York,                    UK
 //    Scuola Superiore Sant'Anna,            ITALY
 //    Kaiserslautern University,             GERMANY
-//    Univ. Politecnica  Valencia,           SPAIN
+//    Univ. Politécnica  Valencia,           SPAIN
 //    Czech Technical University in Prague,  CZECH REPUBLIC
 //    ENEA                                   SWEDEN
 //    Thales Communication S.A.              FRANCE
 //    Visual Tools S.A.                      SPAIN
 //    Rapita Systems Ltd                     UK
 //    Evidence                               ITALY
-//    
+//
 //    See http://www.frescor.org for a link to partners' websites
 //
 //           FRESCOR project (FP6/2005/IST/5-034026) is funded
 //        The European Union is not liable of any use that may be
 //        made of this code.
 //
-//  This file is part of the FRSH implementation
 //
-//  FRSH is free software; you can  redistribute it and/or  modify
-//  it under the terms of  the GNU General Public License as published by
-//  the Free Software Foundation;  either  version 2, or (at  your option)
-//  any later version.
+//  based on previous work (FSF) done in the FIRST project
+//
+//   Copyright (C) 2005  Mälardalen University, SWEDEN
+//                       Scuola Superiore S.Anna, ITALY
+//                       Universidad de Cantabria, SPAIN
+//                       University of York, UK
+//
+//   FSF API web pages: http://marte.unican.es/fsf/docs
+//                      http://shark.sssup.it/contrib/first/docs/
 //
-//  FRSH  is distributed  in  the hope  that  it  will  be useful,  but
-//  WITHOUT  ANY  WARRANTY;     without  even the   implied   warranty  of
-//  MERCHANTABILITY  or  FITNESS FOR  A  PARTICULAR PURPOSE. See  the  GNU
-//  General Public License for more details.
+//   This file is part of FOSA (Frsh Operating System Adaption)
 //
-//  You should have  received a  copy of  the  GNU  General Public License
-//  distributed  with  FRSH;  see file COPYING.   If not,  write to the
-//  Free Software  Foundation,  59 Temple Place  -  Suite 330,  Boston, MA
-//  02111-1307, USA.
+//  FOSA is free software; you can redistribute it and/or modify it
+//  under terms of the GNU General Public License as published by the
+//  Free Software Foundation; either version 2, or (at your option) any
+//  later version.  FOSA is distributed in the hope that it will be
+//  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+//  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+//  General Public License for more details. You should have received a
+//  copy of the GNU General Public License along with FOSA; see file
+//  COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,
+//  Cambridge, MA 02139, USA.
 //
-//  As a special exception, if you include this header file into source
-//  files to be compiled, this header file does not by itself cause
-//  the resulting executable to be covered by the GNU General Public
-//  License.  This exception does not however invalidate any other
-//  reasons why the executable file might be covered by the GNU General
-//  Public License.
+//  As a special exception, including FOSA header files in a file,
+//  instantiating FOSA generics or templates, or linking other files
+//  with FOSA objects to produce an executable application, does not
+//  by itself cause the resulting executable application to be covered
+//  by the GNU General Public License. This exception does not
+//  however invalidate any other reasons why the executable file might be
+//  covered by the GNU Public License.
 // -----------------------------------------------------------------------
 //fosa_opaque_types.h
 //==============================================
@@ -53,7 +61,7 @@
 //  **////  /**    ** ////////** /**//////**
 //  **      /**    **        /** /**     /**
 //  **      /**    **  ********  /**     /**
-//  //       /******/  ////////   //      // 
+//  //       /******/  ////////   //      //
 //
 // FOSA(Frescor Operating System Adaptation layer)
 //================================================
 
 #include <stdbool.h>
 
-/////////////////////// RT_LINUX, MARTE_OS & AQuoSA ///////////////////////////
+#include "fosa_cpp_macros.h"
+#include "fosa_opaque_types_time.h"
 
-#if defined(RT_LINUX) || defined(MARTE_OS) || defined(AQuoSA)
+///////////////////////  MARTE_OS /////////////////////////////
+
+#ifdef MARTE_OS
 
 #include <pthread.h>
 #include <signal.h>
 #include <time.h>
 #include <sched.h>
+#include <errno.h>
+
+FOSA_CPP_BEGIN_DECLS
+
+
+/* Thread and signals */
+/**********************/
+typedef pthread_t FOSA_THREAD_ID_T_OPAQUE;
+typedef pthread_attr_t FOSA_THREAD_ATTR_T_OPAQUE;
+
+typedef int FOSA_SIGNAL_T_OPAQUE;
+/* Signal info is defined as a union in thread_and_signals */
+
+#define FOSA_SIGNAL_MIN       SIGRTMIN
+#define FOSA_SIGNAL_MAX       SIGRTMIN+0
+
+#define FOSA_NULL_SIGNAL 0
+
+/* Clocks and timers */
+/**********************/
+typedef clockid_t FOSA_CLOCK_ID_T_OPAQUE;
+typedef timer_t FOSA_TIMER_ID_T_OPAQUE;
+
+#define FOSA_SYSTEM_CLOCK_OPAQUE  CLOCK_MONOTONIC
+
+/* Mutex and conditional variables */
+/***********************************/
+typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
+typedef pthread_cond_t FOSA_COND_T_OPAQUE;
+
+
+/* Application defined Scheduling */
+/**********************************/
+#define FOSA_ADS_ACTIONS_T_OPAQUE  struct \
+{ \
+    posix_appsched_actions_t actions; \
+    struct timespec *timeout_ptr; \
+    struct timespec timeout; \
+    bool rejected; \
+    bool suspended; \
+    bool activated; \
+} 
+
+
+/* Local jump */
+/**************/
+#include "marte_non_local_jmp.h"
+
+#define FOSA_LONG_JUMP_CONTEXT_T_OPAQUE  struct { \
+  marte_nonlocaljmp_context_t marte_context;      \
+  fosa_thread_id_t tid;                            \
+}
+
+
+/* Thread groups */
+/*****************/
+typedef marte_thread_set_t FOSA_THREAD_GROUP_ID_T_OPAQUE;
+
+#define FOSA_NULL_THREAD_GROUP_ID_OPAQUE 0 /* In MaRTE-OS thread_set_t are
+                                     * pointers */
+
+/* FOSA errors */
+/***************/
+/** Not enough memory available **/
+#define FOSA_ENOMEM   ENOMEM
+
+/** Invalid parameter **/
+#define FOSA_EINVAL   EINVAL
+
+/** Still pending information **/
+#define FOSA_EAGAIN   EAGAIN
+
+/** FOSA ADS errors **/
+#ifdef MARTE_OS
+#define EREJECT   201 /* (for linux_lib_arch) Appsched has rejected object */
+#endif
+
+#define FOSA_EREJECT   EREJECT
+#define FOSA_EMASKED   -2
+#define FOSA_EPOLICY   -3
+
+#define FOSA_ETIMEDOUT ETIMEDOUT
+
+/* Not found in search (non existing thread, thread_group...) */
+#define FOSA_ESRCH   ESRCH
+#define FOSA_ENOTSUP ENOTSUP
+
+#endif
+
+///////////////////////  End of MARTE_OS  /////////////////////////////
+
+
+/////////////////////// RT_LINUX ///////////////////////////
 
 #ifdef RT_LINUX
+
+/* Very similar to MARTE_OS but I leave separate for clarity */
+
+#include <pthread.h>
+#include <signal.h>
+#include <time.h>
+#include <sched.h>
+#include <errno.h>
 #include <rtl_timer.h>
-#endif
 
+
+/* Threads and signals */
+/***********************/
+#define    FOSA_THREAD_ID_T_OPAQUE pthread_t
+
+typedef pthread_attr_t FOSA_THREAD_ATTR_T_OPAQUE;
+typedef int FOSA_SIGNAL_T_OPAQUE;
+/* Signal info is defined as a union in fosa_types.h */
+
+// The minimum and maximum signal numbers that may be used by the FRSH
+// implementation
+#define FOSA_SIGNAL_MIN       SIGRTMIN
+#define FOSA_SIGNAL_MAX       SIGRTMIN+0
+#define FOSA_NULL_SIGNAL 0
+
+/* Clocks and timers */
+/*********************/
 #define    FOSA_CLOCK_ID_T_OPAQUE    clockid_t
-#define    FOSA_SYSTEM_CLOCK_OPAQUE  CLOCK_REALTIME
+#define    FOSA_TIMER_ID_T_OPAQUE    timer_t
+#define    FOSA_SYSTEM_CLOCK_OPAQUE  CLOCK_MONOTONIC
+
+/* Mutex and cond vars */
+/***********************/
+typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
+#define    FOSA_COND_T_OPAQUE        pthread_cond_t
+
+/* Thread groups */
+/*****************/
+typedef int FOSA_THREAD_GROUP_ID_T_OPAQUE
+
+/* FOSA Errors */
+/***************/
+/** Not enough memory available **/
+#define FOSA_ENOMEM   ENOMEM
+/** Invalid parameter **/
+#define FOSA_EINVAL   EINVAL
+/** Still pending information **/
+#define FOSA_EAGAIN   EAGAIN
+
+/** FOSA ADS errors **/
+#define FOSA_EREJECT   EREJECT
+#define FOSA_EMASKED   -2
+#define FOSA_EPOLICY   -3
+
+#define FOSA_ETIMEDOUT ETIMEDOUT
+
+#endif
+
+///////////////////////  End of RT_LINUX  /////////////////////////////
+
+
+////////////////////////// OSE    //////////////////////////////////////
+
+#ifdef OSE
+
+
+
+/* Put OSE dependent includes and defines here */
+
+#endif /* OSE */
+
+
+
+/////////////////////// AQuoSA ///////////////////////////
+
+#ifdef AQuoSA
+
+#include <unistd.h>
+#include <linux/unistd.h>
+
+#define _XOPEN_SOURCE 500
+#define __USE_UNIX98
+#include <pthread.h>
+
+#include <signal.h>
+#include <errno.h>
+#include <time.h>
+
+/* Time */
+/********/
+// typedef struct timespec fosa_rel_time_t;
+// typedef struct timespec fosa_abs_time_t;
+
 
+/* Threads and signals */
+/***********************/
+typedef struct {
+       pthread_t pthread_id;
+       pid_t linux_pid;
+       pid_t linux_tid;
+} FOSA_THREAD_ID_T_OPAQUE;
+
+
+typedef pthread_attr_t FOSA_THREAD_ATTR_T_OPAQUE;
+typedef int FOSA_SIGNAL_T_OPAQUE;
+
+
+// The minimum and maximum signal numbers that may be used by the FRSH
+// implementation
+#define FOSA_SIGNAL_MIN       SIGRTMIN
+#define FOSA_SIGNAL_MAX       SIGRTMIN+0
+
+#define FOSA_NULL_SIGNAL 0
+
+
+/* Clocks and signals */
+/**********************/
+#define    FOSA_CLOCK_ID_T_OPAQUE    clockid_t
+#define    FOSA_SYSTEM_CLOCK_OPAQUE  CLOCK_MONOTONIC
 #define    FOSA_TIMER_ID_T_OPAQUE    timer_t
 
+
+
+/* Mutex and cond vars */
+/***********************/
+typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 #define    FOSA_COND_T_OPAQUE        pthread_cond_t
 
-/*********
- *  ADS
- *********/
 
-#ifdef MARTE_OS
+/* Application Defined Scheduling */
+/**********************************/
+/* hack to get AQuoSA sources compile without having none
+ * of the application level scheduler header files and symbols */
+#define posix_appsched_actions_t int
+#define FOSA_LONG_JUMP_CONTEXT_T_OPAQUE int
+
+#define FOSA_ADS_ACTIONS_T_OPAQUE posix_appsched_actions_t
+
+
+/* FOSA Errors */
+
+/** Not enough memory available **/
+#define FOSA_ENOMEM   ENOMEM
+
+/** Invalid parameter **/
+#define FOSA_EINVAL   EINVAL
+
+/** Still pending information **/
+#define FOSA_EAGAIN   EAGAIN
+
+#define FOSA_EREJECT   EREJECT
+#define FOSA_EMASKED   -2
+#define FOSA_EPOLICY   -3
+
+#define FOSA_ETIMEDOUT ETIMEDOUT
+
+
+#endif 
+////////////////// END of AQuoSA //////////////////////
+
+
+
+/////////////////////////////////// PARTIKLE ///////////////////////////////////////////
+#if defined(PARTIKLE)
+
+#include <pthread.h>
+#include <signal.h>
+#include <time.h>
+#include <sched.h>
+#include <stdlib.h>
+#include <setjmp.h>
+#include <limits.h>
+
 typedef struct {
     posix_appsched_actions_t actions;
     struct timespec * timeout_ptr;
@@ -97,25 +359,115 @@ typedef struct {
     bool rejected;
     bool suspended;
     bool activated;
-} fosa_ads_actions_internal_t;
+} FOSA_ADS_ACTIONS_T_OPAQUE;
 
+typedef unsigned long FOSA_LONG_JUMP_CONTEXT_T_OPAQUE [32];
 
-#define FOSA_ADS_ACTIONS_T_OPAQUE fosa_ads_actions_internal_t
-#else
+typedef pthread_t                   FOSA_THREAD_ID_T_OPAQUE;
+typedef pthread_attr_t              FOSA_THREAD_ATTR_T_OPAQUE;
+typedef int                         FOSA_SIGNAL_T_OPAQUE;
+typedef clockid_t                   FOSA_CLOCK_ID_T_OPAQUE;
+typedef timer_t                     FOSA_TIMER_ID_T_OPAQUE;
+typedef pthread_cond_t              FOSA_COND_T_OPAQUE;
+typedef pthread_mutex_t             FOSA_MUTEX_T_OPAQUE;
 
-/* hack to get AQuoSA sources compile without having none
- * of the application level scheduler header files and symbols */
-#ifdef AQuoSA
-#define posix_appsched_actions_t int
-#endif
 
-#define FOSA_ADS_ACTIONS_T_OPAQUE posix_appsched_actions_t
+
+enum _fosa_clocks_e {
+  FOSA_SYSTEM_CLOCK_OPAQUE = CLOCK_MONOTONIC
+};
+
+#define LONGJMP_NSIG 3
+
+#if LONGJMP_NSIG > (RTSIG_MAX - 1)
+#   error LONGJMP_NSIG too big (LONGJMP_NSIG > RTSIG_MAX - 1)
 #endif
 
+enum _fosa_signal_limits_e {
+  LONGJMP_FIRSTSIG = SIGRTMAX - LONGJMP_NSIG + 1,
+  FOSA_SIGNAL_MAX = LONGJMP_FIRSTSIG - 1,
+  FOSA_SIGNAL_MIN = FOSA_SIGNAL_MAX,
+};
+
+
+enum _fosa_errors_e {
+  FOSA_EINVAL = EINVAL,
+  FOSA_EAGAIN = EAGAIN,
+  FOSA_EREJECT = EREJECT,
+  FOSA_EMASKED = EMASKED,
+  FOSA_EPOLICY = EPOLICY, 
+  FOSA_ETIMEDOUT = ETIMEDOUT,
+  FOSA_ENOMEM = ENOMEM,
+};
+
+
+
 
 #endif
+/////////////////////////////////// PARTIKLE  END //////////////////////////////////////
+
+
+
+////////////////////////// VIRTUAL TIME    //////////////////////////////////////
+#ifdef VIRTUAL_TIME
+
+/* Time */
+/********/
+// typedef struct timespec fosa_rel_time_t;
+// typedef struct timespec fosa_abs_time_t;
+
+#include <fosa_vt.h>
+
+#define FOSA_THREAD_ID_T_OPAQUE   vt_posix_process_t
+#define FOSA_THREAD_ATTR_T_OPAQUE fosa_thread_attr_t
+#define FOSA_SIGNAL_T_OPAQUE      int
+
+#define FOSA_MUTEX_T_OPAQUE fosa_mutex_t
+
+// The minimum and maximum signal numbers that may be used by the FRSH
+// implementation
+#define FOSA_SIGNAL_MIN       8
+#define FOSA_SIGNAL_MAX       31
 
-////////////////// END OF RT_LINUX, MARTE_OS and AQuoSA //////////////////////
+// the min. and max. priority a fosa thread can have
+#define FOSA_PRIORITY_MAX VT_PRIORITY_MIN - 1
+#define FOSA_PRIORITY_MIN VT_PRIORITY_MAX
+
+#define FOSA_NULL_SIGNAL       0
+
+/* FOSA Errors and return values*/
+
+/** Invalid parameter **/
+#define FOSA_EINVAL   -1
+
+/** Not enough memory available **/
+#define FOSA_ENOMEM   -2
+
+/** Still pending information **/
+#define FOSA_EAGAIN   -3
+
+/** Mutex not available **/
+#define FOSA_EBUSY        -4
+
+/** Cond var timedout **/
+#define FOSA_ETIMEDOUT -5
+
+/** FOSA ADS errors **/
+#define FOSA_EREJECT   -6
+#define FOSA_EMASKED   -7
+
+
+/** Sched policy not correct */
+#define FOSA_EPOLICY   -8
+
+/** the value given by thread_id is not valid for ADS */
+#define FOSA_ESRCH             -9
+
+/** retval if no action performed **/
+#define FOSA_NO_ACTION 0
+
+#endif /* VIRTUAL_TIME */
+//////////////////////////End of VIRTUAL TIME ///////////////////////////////////
 
 
 ////////////////////////// DUMMY_OS    //////////////////////////////////////
@@ -126,26 +478,47 @@ typedef struct {
 /* independent at the FRSH code.                                 */
 /*****************************************************************/
 
-#define    FOSA_CLOCK_ID_T_OPAQUE    int
-#define    FOSA_SYSTEM_CLOCK_OPAQUE  42
+/* Time */
+/********/
+// typedef struct timespec fosa_rel_time_t;
+// typedef struct timespec fosa_abs_time_t;
 
-#define    FOSA_TIMER_ID_T_OPAQUE    int
+/* Thread and signals */
+/**********************/
+typedef int FOSA_THREAD_ID_T_OPAQUE;
+typedef int FOSA_THREAD_ATTR_T_OPAQUE;
 
-#define    FOSA_COND_T_OPAQUE        int
+typedef int FOSA_SIGNAL_T_OPAQUE;
+typedef int FOSA_SIGNAL_INFO_T_OPAQUE;
 
-/*********
- *  ADS
- *********/
+/* Signal info is defined as a union in thread_and_signals */
 
-#define FOSA_ADS_ACTIONS_T_OPAQUE  int
+#define FOSA_SIGNAL_MIN     42
+#define FOSA_SIGNAL_MAX     44
+
+#define FOSA_NULL_SIGNAL 0
 
+/* Clocks and timers */
+/**********************/
+typedef int FOSA_CLOCK_ID_T_OPAQUE;
+typedef int FOSA_TIMER_ID_T_OPAQUE;
 
+#define FOSA_SYSTEM_CLOCK_OPAQUE  25
+
+/* Mutex and conditional variables */
+/***********************************/
+typedef int FOSA_MUTEX_T_OPAQUE;
+typedef int FOSA_COND_T_OPAQUE;
+
+/* Application defined Scheduling */
+/**********************************/
+#define FOSA_ADS_ACTIONS_T_OPAQUE  int
 
 
 #endif /* DUMMY */
 //////////////////////////End of DUMMY_OS ////////////////////////////////////
 
-
+FOSA_CPP_END_DECLS
 
 
 #endif // _FOSA_OPAQUE_TYPES_H_