// -----------------------------------------------------------------------
+// Copyright (C) 2006 - 2008 FRESCOR consortium partners:
+//
+// Universidad de Cantabria, SPAIN
+// University of York, UK
+// Scuola Superiore Sant'Anna, ITALY
+// Kaiserslautern University, GERMANY
+// 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
+// in part by the European Union Sixth Framework Programme
+// The European Union is not liable of any use that may be
+// made of this code.
+//
+//
+// 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 API web pages: http://marte.unican.es/frsh/docs/
+// FSF API web pages: http://marte.unican.es/fsf/docs
// http://shark.sssup.it/contrib/first/docs/
//
-// This file is part of FRSH API
+// This file is part of FRSH (FRescor ScHeduler)
//
-// FRSH API 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.
+// FRSH 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. 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. You should have received a
+// copy of the GNU General Public License along with FRSH; see file
+// COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,
+// Cambridge, MA 02139, USA.
//
-// FRSH API 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
-// distributed with FRSH API; see file COPYING. If not, write to the
-// Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-// 02111-1307, 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 FRSH header files in a file,
+// instantiating FRSH generics or templates, or linking other files
+// with FRSH 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.
// -----------------------------------------------------------------------
//frsh_configuration_parameters.h
//==============================================
-// ******** ******* ******** ** **
-// **///// /**////** **////// /** /**
-// ** /** /** /** /** /**
-// ******* /******* /*********/**********
-// **//// /**///** ////////**/**//////**
-// ** /** //** /**/** /**
-// ** /** //** ******** /** /**
-// // // // //////// // //
+// ******** ******* ******** ** **
+// **///// /**////** **////// /** /**
+// ** /** /** /** /** /**
+// ******* /******* /********* /**********
+// **//// /**///** ////////** /**//////**
+// ** /** //** /** /** /**
+// ** /** //** ******** /** /**
+// // // // //////// // //
//
// FRSH(FRescor ScHeduler), pronounced "fresh"
//==============================================
#define _FRSH_CONFIGURATION_PARAMETERS_H_
#include <unistd.h>
+#include <frsh_cpp_macros.h>
+
+FRSH_CPP_BEGIN_DECLS
+
+/**
+ * @file frsh_configuration_parameters.h
+ *
+ * This file contains parameters that govern the capabilities of the
+ * FRescor ScHeduler. They must be in concordance with the respective
+ * OS configuration.
+ **/
+
/**
* @defgroup config Configuration Parameters
**/
#define FRSH_ADMISSION_TEST_IS_ENABLED true
+/**
+ * This symbol specifies whether the service thread will try to
+ * assign automatically the priorities of each vres
+ **/
+#define FRSH_AUTOMATIC_PRIO_ASSIGN_ENABLE true
+
+#ifdef ENABLE_FRSH_DISTRIBUTED_MODULE
+#define FRSH_DISTRIBUTED_MODULE_SUPPORTED true
+#else
+#define FRSH_DISTRIBUTED_MODULE_SUPPORTED false
+#endif
+
+/** This defines 1 resource_id value for systems that have only one
+ resource of a kind. **/
+#define FRSH_RESOURCE_ID_DEFAULT 0
+#define FRSH_CPU_ID_DEFAULT 0
+#define FRSH_NETWORK_ID_DEFAULT 0
/**
- * @defgroup internal lists size for memory optimization
+ * @defgroup internal Array size for memory optimization
* @ingroup config
*
* Tune these values for optimizing the amount of memory used by the
* @{
**/
-/** Maximum number of accepted contracts (servers) **/
-#define FRSH_MAX_N_SERVERS 125
-
+/** Maximum number of accepted contracts (vres) **/
+#define FRSH_MAX_N_VRES 100
/** Maximum number of threads that may be scheduled by the framework **/
#define FRSH_MAX_N_THREADS 25
-
/**
* Maximum number of critical sections that can be stored in a
* contract parameters object
**/
-#define FRSH_MAX_N_CRITICAL_SECTIONS 25
+#define FRSH_MAX_N_CRITICAL_SECTIONS 10
+/**
+ * Maximum number of memory areas that can be specified for a
+ * wite operation in a critical section
+ **/
+#define FRSH_MAX_N_MEMORY_AREAS 4
/**
* Maximum number of utilization values (pairs of budget and period)
**/
#define FRSH_MAX_N_UTILIZATION_VALUES 5
+/** Number of importance levels for spare capacity allocation **/
+#define FRSH_N_IMPORTANCE_LEVELS 5
/**
* Maximum number of synchronization objects
**/
#define FRSH_MAX_N_SYNCH_OBJECTS 5
-
/** Maximum number of shared objects **/
#define FRSH_MAX_N_SHARED_OBJECTS 100
+/** Maximum number of send and receive endpoints in a single node **/
+#define FRSH_MAX_N_ENDPOINTS 10
+
+/** Maximum number of chars for a contract label **/
+#define FRSH_CONTRACT_LABEL_MAXLENGTH 15
+
/*@}*/
/**
* operates under the rules of the FIRST scheduling framework.
*
* In this implementation there are two special threads:
- * - The application scheduler thread, that
+ * - The application scheduler thread, that
* implements the scheduler
*
- * - The service thread, that is in charge of
- * negotiating and renegotiating contracts
+ * - The service thread, that is in charge of
+ * negotiating and renegotiating contracts
* concurrently with the application
*
* The following symbols are necessary to adapt the application to the
* thread, and it should be at least 1 level below the maximum of the
* system
**/
-#define FRSH_SCHEDULER_PRIORITY 29 //104
+#define FRSH_SCHEDULER_PRIORITY (fosa_get_priority_max() - FOSA_ADS_SCHEDULER_PRIO_DIFF)
/**
* Real-time signal number reserved for the application scheduler to
* manage its timers.
**/
-#define FRSH_SCHEDULER_SIGNAL SIGRTMIN
+#define FRSH_SCHEDULER_SIGNAL FRSH_SIGNAL_MIN
+
/**
* it should be defined as one level less than the
* FRSH_SCHEDULER_PRIORITY
**/
-#define FRSH_HIGHEST_THREAD_PRIORITY FRSH_SCHEDULER_PRIORITY-1
+#define FRSH_HIGHEST_THREAD_PRIORITY (FRSH_SCHEDULER_PRIORITY-1)
/**
* The lowest priority that can be assigned to an application thread,
* it should be at least 1 level above the minimum of the system
**/
-#define FRSH_LOWEST_THREAD_PRIORITY 3
+#define FRSH_LOWEST_THREAD_PRIORITY ( fosa_get_priority_min() + 4)
/**
* Each call to the functions that negotiate or renegotiate a contract
* following symbol represents the maximum number of requests that can
* be simultaneously queued.
**/
-#define FRSH_MAX_N_SERVICE_JOBS FRSH_MAX_N_SERVERS * 2
+#define FRSH_MAX_N_SERVICE_JOBS (FRSH_MAX_N_VRES * 2)
/**
**/
/** Initial period of the service thread (timespec) **/
-#define FRSH_SERVICE_THREAD_PERIOD {0,10000000} // 0.01 seg
- // {0,100000000} //0.1 seg
- // {0,10000000} //3.1 0.01
+#define FRSH_SERVICE_THREAD_PERIOD_USECS 5000000 /* 500 msecs */
/** Initial budget of the service thread (timespec) **/
-#define FRSH_SERVICE_THREAD_BUDGET {0,1000000} // 0.001 seg
- // {0,10000000} //0.01 seg
- // {0,1000000} //3.1 0.001
-
+#define FRSH_SERVICE_THREAD_BUDGET_USECS 1000 /* 1 msec */
/**
* Initial priority of the service thread, it has to be lower than the
* expected response times for reconfiguration or tunning of the
* system.
**/
-#define FRSH_SERVICE_THREAD_PRIORITY FRSH_LOWEST_THREAD_PRIORITY+1 //3 3 //3 1
+//#define FRSH_SERVICE_THREAD_PRIORITY (FRSH_LOWEST_THREAD_PRIORITY+1)
+#define FRSH_SERVICE_THREAD_PRIORITY 0
/*@}*/
**/
/**
- * Maximum number of servers that can be simultaneusly waiting for
+ * Maximum number of vres that can be simultaneusly waiting for
* being signaled in a synchronization object
**/
-#define FRSH_MAX_N_SERVERS_IN_SYNCH_OBJECT 4
+#define FRSH_MAX_N_VRES_IN_SYNCH_OBJECT 4
/**
* Maximum number of events that can be pending to be signaled in a
* synchronization object
**/
-#define FRSH_MAX_N_EVENTS_IN_SYNCH_OBJECT 100
+#define FRSH_MAX_N_EVENTS_IN_SYNCH_OBJECT 100
/**
* Maximum number of pending replenishments in each sporadic server
**/
-#define FRSH_MAX_N_PENDING_REPLENISHMENTS 25 //250
+#define FRSH_MAX_N_PENDING_REPLENISHMENTS 3 //250
/**
#define FRSH_MAX_N_TARGET_WINDOWS 100
/**
- * The cpu time given by the round robin scheduler
+ * The cpu time given by the round robin scheduler
* to the threads in the background (timespec)
**/
-#define FRSH_RR_SLICE_CPU_TIME {0,100000000} //3 0.1 sec
+#define FRSH_RR_SLICE_CPU_TIME_USECS 100000 // 0.1 sec
/**
* This function must be supplied by the user to map the preemption
- * level values given in the contracts for the servers, to priority
+ * level values given in the contracts for the vres, to priority
* values in the range that is allowed by the present implementation
* for application threads. The value returned by the function must
* fit in the interval defined by the constants:
/**
* This symbol specifies the maximum number of chars that are stored
* of a given shared_object_id, so this is the maximum length used
- * in comparissons
+ * in comparisons
**/
-#define FRSH_MAX_SIZE_SHARED_OBJ_ID 65
+#define FRSH_MAX_SIZE_SHARED_OBJ_LABEL 15
/** Maximum number of networks accesible from a node **/
#define FRSH_MAX_N_NETWORK_IDS 1
/**
- * Maximum number of servers that can be given in a servers list
- * to the group negotiation/cancellation primitive
+ * Maximum number of groups allocated at the same time
**/
-#define FRSH_MAX_N_SERVER_VALUES 10
+#define FRSH_MAX_N_GROUPS 3
/**
- * Maximum number of contracts that can be given in a contracts list
- * to the group negotiation/cancellation primitive
+ * Maximum number of groups operations (neg, reneg, cancel) per group
**/
-#define FRSH_MAX_N_CONTRACT_VALUES 10
+#define FRSH_MAX_GROUP_OPS 3
+
+/**
+ * Default overheads of shared object protection mechanisms
+ * These values should be calibrated on each specific execution platform
+ */
+
+// fixed overhead for saving the environment and subsequently
+// aborting a critical section; units in nanoseconds
+
+#define FRSH_SO_FIXED_ABORT_OVHD 0
+
-/*@}*/
+// fixed overhead for copying a memory area, in nanoseconds
+
+#define FRSH_SO_FIXED_AREA_OVHD 0
+
+
+// variable overhead for copying a memory area; units in nanoseconds per kbyte
+
+#define FRSH_SO_NANOS_PER_KB 0
+
+
+/* Default memory pool's size in Kbytes */
+#define FRSH_DYNAMIC_MEMORY_POOL_SIZE 6670
+
+/*@}*/
+
+/*@}*/
-/*@}*/
+FRSH_CPP_END_DECLS
#endif /* _FRSH_CONFIGURATION_PARAMETERS_H_ */