1 // -----------------------------------------------------------------------
2 // Copyright (C) 2006 - 2007 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 API
36 // FRSH API is free software; you can redistribute it and/or modify
37 // it under the terms of the GNU General Public License as published by
38 // the Free Software Foundation; either version 2, or (at your option)
41 // FRSH API is distributed in the hope that it will be useful, but
42 // WITHOUT ANY WARRANTY; without even the implied warranty of
43 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
44 // General Public License for more details.
46 // You should have received a copy of the GNU General Public License
47 // distributed with FRSH API; see file COPYING. If not, write to the
48 // Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
51 // As a special exception, if you include this header file into source
52 // files to be compiled, this header file does not by itself cause
53 // the resulting executable to be covered by the GNU General Public
54 // License. This exception does not however invalidate any other
55 // reasons why the executable file might be covered by the GNU General
57 // -----------------------------------------------------------------------
59 //==============================================
60 // ******** ******* ******** ** **
61 // **///// /**////** **////// /** /**
62 // ** /** /** /** /** /**
63 // ******* /******* /********* /**********
64 // **//// /**///** ////////** /**//////**
65 // ** /** //** /** /** /**
66 // ** /** //** ******** /** /**
67 // // // // //////// // //
69 // FRSH(FRescor ScHeduler), pronounced "fresh"
70 //==============================================
72 // Implementation dependent definitions
73 #ifndef _FRSH_OPAQUE_TYPES_H_
74 #define _FRSH_OPAQUE_TYPES_H_
78 * @defgroup opaque Opaque types
80 * This module specifies some #defines for privates types in the
81 * interface. In this way we warn the FRSH user never to access the internal
82 * members of the types directly allowing us to change their internal
83 * definitions to suit our needs.
85 * Note that in Ada the FRSH user would never be allowed to access the
86 * members directly, however in C the compiler does not prevent this.
87 * But this is the best we can do in this language.
92 /** frsh_contract_parameters_t **/
93 #define FRSH_CONTRACT_T_OPAQUE struct { \
95 /** Processor Id or Network Id **/ \
96 frsh_resource_id_t resource_id; \
98 /** Whether processor or network **/ \
99 frsh_resource_type_t resource_type; \
101 /** Printable name for the contract
102 Unique within the local node **/ \
103 frsh_contract_id_t contract_id; \
105 /** Minimum budget needed to perform a job **/ \
106 struct timespec budget_min; \
108 /** Maximum period that the system system can sustain **/ \
109 struct timespec period_max; \
111 /** Maximum budget that the vres can use
112 (and would be happy to have) **/ \
113 struct timespec budget_max; \
115 /** Minimum period for that
116 the system can use (and would be happy to have) **/ \
117 struct timespec period_min; \
119 /** Workload_type: bounded, indeterminate, overhead **/ \
120 frsh_workload_t workload; \
122 /** Scheduling type: Regular, background
123 (in round-robin) or dummy **/ \
124 frsh_contract_type_t contract_type; \
126 /** Whether delay equals period **/ \
129 /** Deadline (will be ignored if d_equals_t is TRUE **/ \
130 struct timespec deadline; \
132 /** Signal parameters for the case of
133 attempting to use too much budget **/ \
134 frsh_signal_t budget_overrun_signal; \
135 frsh_signal_info_t budget_overrun_siginfo; \
137 /** Signal parameters for the case a deadline
139 frsh_signal_t deadline_miss_signal; \
140 frsh_signal_info_t deadline_miss_siginfo; \
142 /** Wether the range of period and budget is specified
143 in a continuous way (max-min) or as a set of
144 discrete values **/ \
145 frsh_granularity_t granularity; \
147 /** Set of discrete values for budget and period **/ \
148 frsh_utilization_set_t utilization_set; \
150 /** Non-cooperative parameter for fair capacity
154 /** Cooperative parameter for fair capacity
158 /** If > 0 it describes a duration for which
159 the allocated budget and capacity will be
160 maintained across negotiations and will
161 not be affected for dynamic spare capacity **/ \
162 struct timespec remaining_stability_time; \
164 /** Low level parameter related with the elegibility
165 preempt other threads **/ \
166 frsh_preemption_level_t preemption_level; \
168 /** Set of critical sections that the vres executes
169 besides the normal budget **/ \
170 frsh_csects_group_t critical_sections; \
172 /** Internal scheduling policy within the vres for
173 hierarchical scheduling systems **/ \
174 frsh_sched_policy_t policy; \
178 #define FRSH_SYNCHOBJ_HANDLE_T_OPAQUE int
180 #define FRSH_SHAREDOBJ_HANDLE_T_OPAQUE int
183 * Critical section data
185 * op_kind; // kind of operation (READ or WRITE)
186 * obj_handle; // handle to shared object
187 * wcet; // Execution time
188 * - attributes used only for protected shared objects
189 * op; // pointer to the operation
190 * - attributes used only for protected write operations
191 * areas; // memory areas to be protected
194 #define FRSH_CSECT_T_OPAQUE struct { \
195 frsh_csect_op_kind_t op_kind; \
196 frsh_sharedobj_handle_t obj_handle; \
197 struct timespec wcet; \
198 frsh_csect_op_t op; \
199 frsh_memory_areas_t areas; \
203 //opaque types for frsh endpoints
204 #define FRSH_SEND_ENDPOINT_T_OPAQUE int
206 #define FRSH_RECEIVE_ENDPOINT_T_OPAQUE int
210 #endif // _FRSH_OPAQUE_TYPES_H_