2 * @file frescan_sched_analysis.c
4 * @brief FRESCAN sched analysis queue
6 * This module contains the scheduling analysis data and functions for the
7 * admission tests and spare capacity distribution of the negotiation layer.
8 * It provides an easy API easy to understand and in the implementation part
9 * it makes call to the general sched analysis module of FRSH which is shared
10 * with the CPU contracts layer in FRSH.
12 * EXAMPLE of utilization:
16 * params.min_prio = 0;
17 * params.max_prio = 16;
18 * params.overhead = ...;
19 * frescan_sa_init(&scenario, ¶ms);
23 * fadt_freelist_alloc(&freelist_contracts, &id);
24 * frescan_sa_add_contract(&scenario, &contracts[id], id);
25 * frescan_sa_sched_test(&scenario, &success);
28 * frescan_sa_remove_contract(&scenario, id);
30 * frescan_sa_spare_capacity(&scenario);
31 * vres_id = to_vres(resource_type, resource_id, id);
32 * create vres runtime structures;
34 * for vres_id in active_vres_id {
35 * frescan_sa_get_final_values(&scenario,
38 * update vres runtime structures if necessary;
45 * frescan_sa_update_contract(&scenario, to_index(vres_id), &contract);
46 * frescan_sa_sched_test(&scenario, &success);
49 * frescan_sa_update_contract(&sa_data,
53 * frescan_sa_spare_capacity(&scenario);
54 * for vres_id in active_vres_id {
55 * frescan_sa_get_final_values(&scenario,
58 * update vres runtime structures if necessary;
64 * frescan_sa_remove_contract(&scenario, to_index(vres_id));
65 * frescan_sa_spare_capacity(&scenario);
71 * @author Daniel Sangorrin <daniel.sangorrin@unican.es>
75 #include "frescan_sched_analysis.h"
77 #include "frescan_debug.h"
78 // #include "frsh_sa_tools.h"
82 * frescan_sa_init() - init the scenario
85 int frescan_sa_init(frsh_sa_scenario_t *scenario, // in out
86 const frsh_sa_init_params_t *params) // in
90 // ret = frsh_sa_scenario_init(scenario, params);
92 WARNING("not implemented, returning 0\n");
97 * frescan_sa_add_contract() - add a contract to the scenario
100 int frescan_sa_add_contract(frsh_sa_scenario_t *scenario, // in out
101 const frsh_contract_t *contract, // in
102 frsh_vres_index_t id) // in
106 // ret = frsh_sa_scenario_add_vres(scenario, contract, id);
108 WARNING("not implemented, returning 0\n");
113 * frescan_sa_update_contract() - update a contract in the scenario
116 int frescan_sa_update_contract(frsh_sa_scenario_t *scenario, // in out
117 frsh_vres_index_t id, // in
118 const frsh_contract_t *contract) // in
122 // ret = frsh_sa_scenario_modify_vres(scenario, id, *contract);
124 WARNING("not implemented, returning 0\n");
129 * frescan_sa_remove_contract() - remove a contract from the scenario
132 int frescan_sa_remove_contract(frsh_sa_scenario_t *scenario, // in out
133 frsh_vres_index_t id) // in
137 // ret = frsh_sa_scenario_del_vres(scenario, id);
139 WARNING("not implemented, returning 0\n");
144 * frescan_sa_sched_test() - perform a scheduling test on the scenario
147 int frescan_sa_sched_test(frsh_sa_scenario_t *scenario, // in out
148 bool *success) // out
152 // ret = frsh_sa_scenario_reset_to_min(scenario, NULL, NULL);
153 // if (ret != 0) goto error;
155 // ret = frsh_sa_assign_priorities(scenario, NULL, NULL, NULL, NULL);
156 // if (ret != 0) goto error;
158 // ret = frsh_sa_ceilings_ok(scenario);
159 // if (ret != 0) goto error;
161 // ret = frsh_sa_calculate_blockings(scenario);
162 // if (ret != 0) goto error;
164 // ret = frsh_sa_sched_test(scenario, success);
165 // if (ret != 0) goto error;
172 WARNING("not implemented, returning 0\n");
177 * frescan_sa_spare_capacity() - distribute the remaining spare capacity
180 int frescan_sa_spare_capacity(frsh_sa_scenario_t *scenario) // in out
184 // ret = frsh_sa_distribute_spare(scenario,
185 // NULL, NULL, NULL, NULL, NULL, NULL);
187 WARNING("not implemented, returning 0\n");
192 * sa_get_final_values() - get the final values
195 int sa_get_final_values(const frsh_sa_scenario_t *scenario, // in
196 frsh_vres_index_t id, // in
197 frescan_sa_final_values_t *final_values) // out
199 // final_values->budget = scenario->sa_vres_alloc[id].c;
200 // final_values->period = scenario->sa_vres_alloc[id].t;
201 // final_values->deadline = scenario->sa_vres_alloc[id].d;
202 // final_values->priority = scenario->sa_vres_alloc[id].p;
204 WARNING("not implemented, returning 0\n");