1 /**************************************************************************/
2 /* ---------------------------------------------------------------------- */
3 /* Copyright (C) 2006 - 2008 FRESCOR consortium partners: */
5 /* Universidad de Cantabria, SPAIN */
6 /* University of York, UK */
7 /* Scuola Superiore Sant'Anna, ITALY */
8 /* Kaiserslautern University, GERMANY */
9 /* Univ. Politécnica Valencia, SPAIN */
10 /* Czech Technical University in Prague, CZECH REPUBLIC */
12 /* Thales Communication S.A. FRANCE */
13 /* Visual Tools S.A. SPAIN */
14 /* Rapita Systems Ltd UK */
17 /* See http://www.frescor.org for a link to partners' websites */
19 /* FRESCOR project (FP6/2005/IST/5-034026) is funded */
20 /* in part by the European Union Sixth Framework Programme */
21 /* The European Union is not liable of any use that may be */
22 /* made of this code. */
25 /* This file is part of FRSH (FRescor ScHeduler) */
27 /* FRSH is free software; you can redistribute it and/or modify it */
28 /* under terms of the GNU General Public License as published by the */
29 /* Free Software Foundation; either version 2, or (at your option) any */
30 /* later version. FRSH is distributed in the hope that it will be */
31 /* useful, but WITHOUT ANY WARRANTY; without even the implied warranty */
32 /* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */
33 /* General Public License for more details. You should have received a */
34 /* copy of the GNU General Public License along with FRSH; see file */
35 /* COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, */
36 /* Cambridge, MA 02139, USA. */
38 /* As a special exception, including FRSH header files in a file, */
39 /* instantiating FRSH generics or templates, or linking other files */
40 /* with FRSH objects to produce an executable application, does not */
41 /* by itself cause the resulting executable application to be covered */
42 /* by the GNU General Public License. This exception does not */
43 /* however invalidate any other reasons why the executable file might be */
44 /* covered by the GNU Public License. */
45 /**************************************************************************/
49 * @author Michal Sojka <sojkam1@fel.cvut.cz>
50 * @date Wed Feb 18 16:00:15 2009
52 * @brief VRES definition
62 #include <fres_contract_idl.h>
63 #include <ul_gavlcust.h>
65 struct fres_allocator;
67 /** Description of VRES (virtual resource) */
68 typedef struct fres_vres {
69 /** Contracts IDs of this VRES. */
70 fres_contract_id_t id;
73 * Stores actual allocation of the resource. During a mode
74 * change, the callbacks can compare this old allocation with
75 * the changed (stored in @a new) one and depending on the
76 * kind of difference, it can apply the change
77 * differently. Callbacks must not change this field. as well as
78 * the @a perceived field.
80 struct fres_contract *allocated;
83 * Perceived allocation as seen by application during mode
84 * change. Callback functions must set this value because FRSH
85 * functions such as frsh_vres_get_budget_and_period() use it
86 * to inform the application about current allocation.
88 * @todo We need reference counting here.
90 struct fres_contract *perceived;
93 * The schedulable contract received by the allocator. The
94 * allocator callbacks should use this contract to
95 * create/change VRES and must not change the value of this
98 struct fres_contract *new;
100 struct fres_allocator *allocator;
101 void *priv; /**< Resource allocator private data */
105 fres_vres_t *fres_vres_new(fres_contract_id_t *id);
106 void fres_vres_destroy(fres_vres_t *vres);
109 * Representation of thread to VRES binding.
111 typedef struct fres_thread_vres {
115 fosa_abs_time_t job_start_time;
116 fosa_abs_time_t job_cpu_time;
119 } fres_thread_vres_t;
122 int fres_thread_vres_cmp(const fosa_thread_id_t *a, const fosa_thread_id_t *b)
124 return fosa_thread_equal(*a, *b);
127 fres_thread_vres_t *fres_thread_vres_new
128 (const fosa_thread_id_t *id,
131 void fres_thread_vres_destroy(fres_thread_vres_t *th_vres);