]> rtime.felk.cvut.cz Git - frescor/fosa.git/blobdiff - src_rtlinux/fosa_app_def_sched.c
Updating header text in FOSA files for the incoming final project
[frescor/fosa.git] / src_rtlinux / fosa_app_def_sched.c
index 38f55e96648f9c366b411b773e3a8e0ee497e97c..c9b03c0070e81eccc8d1b031a0fdb6e1c0ac9871 100644 (file)
@@ -1,18 +1,18 @@
 // -----------------------------------------------------------------------
-//  Copyright (C) 2006 - 2007 FRESCOR consortium partners:
+//  Copyright (C) 2006 - 2009 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
 //
-//  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.
+//   FSF API web pages: http://marte.unican.es/fsf/docs
+//                      http://shark.sssup.it/contrib/first/docs/
 //
-//  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.
+//   This file is part of FOSA (Frsh Operating System Adaption)
 //
-//  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.
+//  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, 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_app_def_sched.c
 //==============================================
 // FOSA(Frescor Operating System Adaptation layer)
 //================================================
 
-
-// MISSED: HEADERS
+#include <fosa.h>
+#include <rtl.h>
+//#include <rtl_sched.h>
+#include <rtl_malloc.h>
 
 /********************************
  * Application-defined scheduling
@@ -76,7 +86,7 @@ int fosa_ads_scheduler_create (const fosa_ads_scheduler_ops_t * scheduler_ops,
                               size_t scheduler_data_size,
                               void * init_args, 
                               size_t init_args_size){
-
+    struct sched_param sched_param;
     pthread_attr_t  attr; 
     int ret;
 
@@ -131,14 +141,14 @@ int fosa_thread_attr_get_appscheduled (const frsh_thread_attr_t *attr,
 
 int fosa_thread_attr_set_appsched_params (frsh_thread_attr_t *attr,
                                                 const void *param,
-                                                int paramsize){
-     return pthread_attr_setappschedparam(attr, param, paramsize);
+                                                size_t paramsize){
+     return pthread_attr_setappschedparam(attr, (void *)param, paramsize);
 }
 
 int fosa_thread_attr_get_appsched_params (const frsh_thread_attr_t *attr,
                                          void *param,
                                          size_t *paramsize){
-     return pthread_attr_getappschedparam(attr, param, paramsize);     
+     return pthread_attr_getappschedparam((frsh_thread_attr_t *)attr, param, paramsize);       
 }
 
 int fosa_ads_set_appscheduled (frsh_thread_id_t thread,
@@ -160,15 +170,21 @@ int fosa_ads_get_appscheduled (frsh_thread_id_t thread,
 int fosa_ads_set_appschedparam (frsh_thread_id_t thread,
                                const void *param,
                                size_t paramsize){
-     return (!pthread_setappschedparam(thread, param, paramsize))?0:EINVAL;
+     return (!pthread_setappschedparam(thread, (void *)param, paramsize))?0:EINVAL;
 }
 
 int fosa_ads_get_appsched_params (frsh_thread_id_t thread,
-                                        void *param,
-                                        int *paramsize){
+                                 void *param,
+                                 size_t *paramsize){
      return (!pthread_getappschedparam(thread, param, paramsize))?0:EINVAL;
 }
 
+int fosa_ads_set_appsched_params (frsh_thread_id_t thread,
+                                 const void *param,
+                                 size_t paramsize){
+     return (!pthread_setappschedparam(thread, (void *)param, paramsize))?0:EINVAL;
+}
+
 /*********************************
  * ADS actions
  *
@@ -181,14 +197,14 @@ int fosa_ads_get_appsched_params (frsh_thread_id_t thread,
 
 int fosa_adsactions_add_reject(fosa_ads_actions_t *sched_actions,
                               frsh_thread_id_t thread){
-     return posix_appsched_actions_addreject(sched_actions, thread);
+    return posix_appsched_actions_addreject(sched_actions, thread);
 }
 
 int fosa_adsactions_add_activate(fosa_ads_actions_t *sched_actions,
                                  frsh_thread_id_t thread,
                                  fosa_ads_urgency_t urgency){
-     RTL_PRIO(&thread)=set_urgency(urgency, (&thread));
-     return posix_appsched_actions_addactivate(sched_actions, thread);
+    RTL_PRIO(thread)=set_urgency(thread, urgency);
+    return posix_appsched_actions_addactivate(sched_actions, thread);
 }
 
 int fosa_adsactions_add_suspend(fosa_ads_actions_t *sched_actions,
@@ -196,19 +212,24 @@ int fosa_adsactions_add_suspend(fosa_ads_actions_t *sched_actions,
      return posix_appsched_actions_addsuspend (sched_actions, thread);
 }
 
-
+extern timer_t fosa_timeout_timer; // defined in rtl_fosa.c
 int fosa_adsactions_add_timeout(fosa_ads_actions_t *sched_actions,
                                 fosa_clock_id_t clock_id,
                                 const struct timespec *at_time){
      struct sigevent signal;
+     struct itimerspec at_itimer= (struct itimerspec)
+        {.it_interval=(struct timespec){0,0},
+         .it_value=*at_time};
+
      if (fosa_timeout_timer)
           return EINVAL;
 
      signal.sigev_signo=0;
      signal.sigev_notify=SIGEV_NONE;
 
-     timer_create(clock_id, signal, &fosa_timeout_timer);
-     timer_settime(fosa_timeout_timer, int flags, at_time, 0);
+     timer_create(clock_id, &signal, &fosa_timeout_timer);
+     timer_settime(fosa_timeout_timer, 0, &at_itimer, 0);
+     return 0;
 }
 
 
@@ -216,20 +237,35 @@ int fosa_adsactions_add_thread_notification(fosa_ads_actions_t *sched_actions,
                                             frsh_thread_id_t thread,
                                             fosa_clock_id_t clock_id,
                                             const struct timespec *at_time){
+     struct sigevent signal;
+     struct itimerspec at_itimer= (struct itimerspec)
+        {.it_interval=(struct timespec){0,0},
+         .it_value=*at_time};
      
-     To be added;
-}
+     if (fosa_timeout_timer)
+          return EINVAL;
+
+     signal.sigev_value.sival_ptr=(void *)clock_id;
+     signal.sigev_signo=(int)thread;
+     signal.sigev_notify=SIGEV_NONE;
 
+     timer_create(clock_id, &signal, &fosa_timeout_timer);
+     timer_settime(fosa_timeout_timer, 0, &at_itimer, 0);
+     return 0;
+}
+extern rtl_sigset_t fosa_scheduler_signal_bitmap; // as declared in rtl_fosa.c
 
+int fosa_ads_set_handled_signal_set(frsh_signal_t set[], int size){
+     int x;
 
-int fosa_ads_set_handled_signal_set(frsh_signal_t set[]){
-     To be added;
+     rtl_sigemptyset(&fosa_scheduler_signal_bitmap);
+     for (x=0; x<size; x++)
+        rtl_sigaddset(&fosa_scheduler_signal_bitmap, set[x]); 
+     return 0;
 }
 
 
-int fosa_ads_invoke_withdata (const void *msg, 
-                                    size_t msg_size, 
-                                    void *reply, 
-                                    size_t *reply_size){
-       posix_appsched_invoke_withdata(msg, msg_size, reply, reply_size);
+int fosa_ads_invoke_withdata (const void *msg, size_t msg_size, 
+                              void *reply, size_t *reply_size){
+    return posix_appsched_invoke_withdata((void *)msg, msg_size, reply, reply_size);
 }