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 // -----------------------------------------------------------------------
56 //==============================================
57 // ******** ******* ******** ** **
58 // **///// /**////** **////// /** /**
59 // ** /** /** /** /** /**
60 // ******* /******* /********* /**********
61 // **//// /**///** ////////** /**//////**
62 // ** /** //** /** /** /**
63 // ** /** //** ******** /** /**
64 // // // // //////// // //
66 // FRSH(FRescor ScHeduler), pronounced "fresh"
67 //==============================================
83 #define FRSH_NO_ERROR 0
85 #define FRSH_ERR_BASE_VALUE 0x02004000
87 #define FRSH_ERR_TOO_MANY_TASKS 0x02004001
88 #define FRSH_ERR_BAD_ARGUMENT 0x02004002
89 #define FRSH_ERR_INVALID_SYNCH_OBJ_HANDLE 0x02004003
90 #define FRSH_ERR_NO_RENEGOTIATION_REQUESTED 0x02004004
91 #define FRSH_ERR_CONTRACT_REJECTED 0x02004005
92 #define FRSH_ERR_NOT_SCHEDULED_CALLING_THREAD 0x02004006
93 #define FRSH_ERR_NOT_BOUND 0x02004007
94 #define FRSH_ERR_UNKNOWN_SCHEDULED_THREAD 0x02004008
95 #define FRSH_ERR_NOT_CONTRACTED_VRES 0x02004009
96 #define FRSH_ERR_NOT_SCHEDULED_THREAD 0x0200400A
97 #define FRSH_ERR_TOO_MANY_SERVICE_JOBS 0x0200400B
98 #define FRSH_ERR_TOO_MANY_SYNCH_OBJS 0x0200400C
99 #define FRSH_ERR_TOO_MANY_VRES_IN_SYNCH_OBJ 0x0200400D
100 #define FRSH_ERR_TOO_MANY_EVENTS_IN_SYNCH_OBJ 0x0200400E
101 #define FRSH_ERR_INTERNAL_ERROR 0x0200400F
102 #define FRSH_ERR_TOO_MANY_VRES 0x02004010
103 #define FRSH_ERR_INVALID_SCHEDULER_REPLY 0x02004011
104 #define FRSH_ERR_TOO_MANY_PENDING_REPLENISHMENTS 0x02004012
105 #define FRSH_ERR_SYSTEM_ALREADY_INITIALIZED 0x02004013
106 #define FRSH_ERR_SHARED_OBJ_ALREADY_INITIALIZED 0x02004014
107 #define FRSH_ERR_SHARED_OBJ_NOT_INITIALIZED 0x02004015
108 #define FRSH_ERR_SCHED_POLICY_NOT_COMPATIBLE 0x02004016
109 #define FRSH_ERR_VRES_WORKLOAD_NOT_COMPATIBLE 0x02004017
110 #define FRSH_ERR_ALREADY_BOUND 0x02004018
111 #define FRSH_ERR_RESOURCE_ID_INVALID 0x02004019
112 #define FRSH_ERR_TOO_LARGE 0x0200401A
113 #define FRSH_ERR_BUFFER_FULL 0x0200401B
114 #define FRSH_ERR_NO_SPACE 0x0200401C
115 #define FRSH_ERR_NO_MESSAGES 0x0200401D
116 #define FRSH_WRN_MODULE_NOT_SUPPORTED 0x0200401E
117 #define FRSH_ERR_NOT_INITIALIZED 0x0200401F
118 #define FRSH_ERR_TOO_MANY_SHARED_OBJS 0x02004020
119 #define FRSH_ERR_CONTRACT_LABEL_ALREADY_EXISTS 0x02004021
120 #define FRSH_ERR_BUDGET_EXPIRED 0x02004022
121 #define FRSH_ERR_SHARED_OBJECT_NOT_PROTECTED 0x02004023
122 #define FRSH_ERR_NOT_IMPLEMENTED 0x02004024
123 #define FRSH_ERR_CONTRACT_TYPE_NOT_COMPATIBLE 0x02004025
124 #define FRSH_ERR_CAPACITY_NOT_DECREASING 0x02004026
125 #define FRSH_ERR_CONTRACT_LABEL_UNKNOWN 0x02004027
126 #define FRSH_ERR_OUT_OF_BUDGET 0x02004028
127 #define FRSH_ERR_ALREADY_IN_FRSH 0x02004029
129 #define FRSH_ERR_LAST_VALUE 0x02004030
134 #define my_frsh_perror(nn,ss) do { errno = nn; perror(ss); } while(0)
136 #define my_frsh_perror(nn,ss) do { perror(ss); } while(0)
139 #define ERROR(nn,ss) do {if(nn>FRSH_ERR_BASE_VALUE) my_frsh_strerror(nn, ss); else { my_frsh_perror(nn, ss); } exit (nn);} while (0)
142 int frsh_strerror (int error, char *message, size_t size);
143 void my_frsh_strerror(int error, char *sss);
146 * This str_helper is needed to ensure argument expansion,
147 * see http://www.iar.com/p180591/p180591_eng.php
149 #define STR_HELPER(x) #x
154 * This macro checks the given error number and composes a messages accordingly.
156 * @param nn Error number
157 * @param ss Error string (to be appended to FRSH or system error string)
159 #define PERROR_FRESCOR(_nn_,_ss_) do { \
161 char error_string[1024]; \
163 sprintf(error_string, "File: %s, in function %s at line %d, error %d: %s\n", __FILE__, __FUNCTION__, __LINE__, (_nn_), _ss_); \
165 if( (_nn_)>FRSH_ERR_BASE_VALUE ) { \
166 my_frsh_strerror( (_nn_), error_string); \
168 my_frsh_perror(_nn_, error_string); \
177 * Macro that displays an error code and message and then returns from
178 * the current function
180 * @param nn Error number
181 * @param ss Error string (to be appended to FRSH or system error string)
183 #define PERROR_AND_RETURN(nn,ss) do { \
184 PERROR_FRESCOR(nn, ss); \
194 * Macro that displays an error code and message and then aborts the
197 * @param nn Error number
198 * @param ss Error string (to be appended to FRSH or system error string)
200 #define PERROR_AND_EXIT(nn,ss) do { \
201 PERROR_FRESCOR(nn,ss); \
207 * PRW: Perror and Return Wrapper
209 * Function that calls funccall and checks the result != 0.
210 * In case of error it displays the error code with the function call
211 * as extra error string and returns from the function.
213 * terror (int) needs to be visible in the point of call.
215 * @param funccall Code to execute that should return 0 in a non error
218 #define PRW(funccall) do { \
219 if ( (terror = funccall ) != 0) \
221 PERROR_AND_RETURN( terror, STR_HELPER(funccall) ); \
228 * PXW: Perror and eXit Wrapper
230 * Function that calls funccall and checks the result != 0.
231 * In case of error it displays the error code with the function call
232 * as extra error string and ABORTS the program.
234 * terror (int) needs to be visible in the point of call.
236 * @param funccall Code to execute that should return 0 in a non error
239 #define PXW(funccall) do { \
240 if ( (terror = funccall ) != 0) \
242 PERROR_AND_EXIT( terror, STR_HELPER(funccall) ); \
249 * PERROR_KERN_AND_EXIT
251 * Function that displays an error code and message and then aborts the
254 * @param nn Error number
255 * @param ss Error string (to be appended to FRSH or system error string)
257 #define PERROR_KERN_AND_EXIT(nn, ss) do { \
258 errno = errno ? errno : (nn); \
268 #endif /* !FRSH_ERROR_H_ */