1 // -----------------------------------------------------------------------
2 // Copyright (C) 2006 - 2008 FRESCOR consortium partners:
4 // Universidad de Cantabria, SPAIN
5 // University of York, UK
6 // Scuola Superiore Sant'Anna, ITALY
7 // Kaiserslautern University, GERMANY
8 // Univ. Politécnica Valencia, SPAIN
9 // Czech Technical University in Prague, CZECH REPUBLIC
11 // Thales Communication S.A. FRANCE
12 // Visual Tools S.A. SPAIN
13 // Rapita Systems Ltd UK
16 // See http://www.frescor.org for a link to partners' websites
18 // FRESCOR project (FP6/2005/IST/5-034026) is funded
19 // in part by the European Union Sixth Framework Programme
20 // The European Union is not liable of any use that may be
24 // based on previous work (FSF) done in the FIRST project
26 // Copyright (C) 2005 Mälardalen University, SWEDEN
27 // Scuola Superiore S.Anna, ITALY
28 // Universidad de Cantabria, SPAIN
29 // University of York, UK
31 // FSF API web pages: http://marte.unican.es/fsf/docs
32 // http://shark.sssup.it/contrib/first/docs/
34 // This file is part of FRSH (FRescor ScHeduler)
36 // FRSH is free software; you can redistribute it and/or modify it
37 // under terms of the GNU General Public License as published by the
38 // Free Software Foundation; either version 2, or (at your option) any
39 // later version. FRSH is distributed in the hope that it will be
40 // useful, but WITHOUT ANY WARRANTY; without even the implied warranty
41 // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
42 // General Public License for more details. You should have received a
43 // copy of the GNU General Public License along with FRSH; see file
44 // COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,
45 // Cambridge, MA 02139, USA.
47 // As a special exception, including FRSH header files in a file,
48 // instantiating FRSH generics or templates, or linking other files
49 // with FRSH objects to produce an executable application, does not
50 // by itself cause the resulting executable application to be covered
51 // by the GNU General Public License. This exception does not
52 // however invalidate any other reasons why the executable file might be
53 // covered by the GNU Public License.
54 // As a special exception, if you include this header file into source
55 // files to be compiled, this header file does not by itself cause
56 // the resulting executable to be covered by the GNU General Public
57 // License. This exception does not however invalidate any other
58 // reasons why the executable file might be covered by the GNU General
60 // -----------------------------------------------------------------------
62 //==============================================
63 // ******** ******* ******** ** **
64 // **///// /**////** **////// /** /**
65 // ** /** /** /** /** /**
66 // ******* /******* /********* /**********
67 // **//// /**///** ////////** /**//////**
68 // ** /** //** /** /** /**
69 // ** /** //** ******** /** /**
70 // // // // //////// // //
72 // FRSH(FRescor ScHeduler), pronounced "fresh"
73 //==============================================
75 // Implementation dependent definitions
76 #ifndef _FRSH_OPAQUE_TYPES_H_
77 #define _FRSH_OPAQUE_TYPES_H_
82 * @file frsh_opaque_types.h
86 * @defgroup opaque Opaque types
88 * This module specifies some #defines for privates types in the
89 * interface. In this way we warn the FRSH user never to access the internal
90 * members of the types directly allowing us to change their internal
91 * definitions to suit our needs.
93 * Note that in Ada the FRSH user would never be allowed to access the
94 * members directly, however in C the compiler does not prevent this.
95 * But this is the best we can do in this language.
100 /** frsh_contract_parameters_t **/
101 #define FRSH_CONTRACT_T_OPAQUE struct { \
103 /** Processor Id or Network Id **/ \
104 frsh_resource_id_t resource_id; \
106 /** Whether processor or network **/ \
107 frsh_resource_type_t resource_type; \
109 /** Printable name for the contract
110 Unique within the local node **/ \
111 frsh_contract_label_t contract_label; \
113 /** Minimum budget needed to perform a job. With the energy
114 module this will be an array **/ \
115 frsh_rel_time_t budget_min; \
117 /** Maximum period that the system system can sustain **/ \
118 frsh_rel_time_t period_max; \
120 /** Maximum budget that the vres can use
121 (and would be happy to have). With the energy module
122 this will be an array **/ \
123 frsh_rel_time_t budget_max; \
125 /** Minimum period for that
126 the system can use (and would be happy to have) **/ \
127 frsh_rel_time_t period_min; \
129 /** Set of discrete values for budget and period. With the
130 energy module this will be an array **/ \
131 frsh_utilization_set_t utilization_set; \
133 /** Workload_type: bounded, indeterminate, overhead **/ \
134 frsh_workload_t workload; \
136 /** Scheduling type: Regular, background
137 (in round-robin) or dummy **/ \
138 frsh_contract_type_t contract_type; \
140 /** Whether delay equals period **/ \
143 /** Deadline (will be ignored if d_equals_t is TRUE **/ \
144 frsh_rel_time_t deadline; \
146 /** Signal parameters for the case of
147 attempting to use too much budget **/ \
148 frsh_signal_t budget_overrun_signal; \
149 frsh_signal_info_t budget_overrun_siginfo; \
151 /** Signal parameters for the case a deadline
153 frsh_signal_t deadline_miss_signal; \
154 frsh_signal_info_t deadline_miss_siginfo; \
156 /** Wether the range of period and budget is specified
157 in a continuous way (max-min) or as a set of
158 discrete values **/ \
159 frsh_granularity_t granularity; \
161 /** Non-cooperative parameter for fair capacity
165 /** Cooperative parameter for fair capacity
169 /** If > 0 it describes a duration for which
170 the allocated budget and capacity will be
171 maintained across negotiations and will
172 not be affected for dynamic spare capacity **/ \
173 frsh_rel_time_t stability_time; \
175 /** Low level parameter related with the elegibility
176 preempt other threads **/ \
177 frsh_preemption_level_t preemption_level; \
179 /** Set of critical sections that the vres executes
180 besides the normal budget **/ \
181 frsh_csects_group_t critical_sections; \
183 /** Internal scheduling policy within the vres for
184 hierarchical scheduling systems **/ \
185 frsh_sched_policy_t policy; \
187 /** Protocol info for distributed systems. We store it
188 as a pointer+size. It's internal meaning is imple-
189 mentation dependent. **/ \
190 frsh_protocol_info_t protocol_info; \
191 frsh_endpoint_queueing_info_t queueing_info; \
193 /** Maximum loss rate
194 Percentage of packet loss in the network that is
195 tolerated by the application **/ \
198 /** Minimum memory size to be reserved **/ \
199 size_t minimum_memory; \
201 /** Maximum memory size to be reserved **/ \
202 size_t maximum_memory; \
206 typedef int FRSH_SYNCHOBJ_HANDLE_T_OPAQUE;
208 typedef int FRSH_SHAREDOBJ_HANDLE_T_OPAQUE;
211 * Critical section data
213 * op_kind; // kind of operation (READ or WRITE)
214 * obj_handle; // handle to shared object
215 * wcet; // Execution time
216 * blocking; // Blocking time (execution time + protection overheads)
217 * - attributes used only for protected shared objects
218 * op; // pointer to the operation
219 * - attributes used only for protected write operations
220 * areas; // memory areas to be protected
223 #define FRSH_CSECT_T_OPAQUE struct { \
224 frsh_csect_op_kind_t op_kind; \
225 frsh_sharedobj_handle_t obj_handle; \
226 frsh_rel_time_t wcet; \
227 frsh_rel_time_t blocking; \
228 frsh_csect_op_t op; \
229 frsh_memory_areas_t areas; \
230 frsh_memory_areas_t storage; \
234 //opaque types for frsh endpoints
235 typedef int FRSH_SEND_ENDPOINT_T_OPAQUE;
237 typedef int FRSH_RECEIVE_ENDPOINT_T_OPAQUE;
243 #endif // _FRSH_OPAQUE_TYPES_H_