Subversion Repositories shark

Rev

Rev 3 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 pj 1
/*
2
 * Project: S.Ha.R.K.
3
 *
4
 * Coordinators:
5
 *   Giorgio Buttazzo    <giorgio@sssup.it>
6
 *   Paolo Gai           <pj@gandalf.sssup.it>
7
 *
8
 * Authors     :
9
 *   Paolo Gai           <pj@gandalf.sssup.it>
10
 *   Massimiliano Giorgi <massy@gandalf.sssup.it>
11
 *   Luca Abeni          <luca@gandalf.sssup.it>
12
 *   (see the web pages for full authors list)
13
 *
14
 * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
15
 *
16
 * http://www.sssup.it
17
 * http://retis.sssup.it
18
 * http://shark.sssup.it
19
 */
20
 
21
/*
22
 * Copyright (C) 2000 Massimiliano Giorgi
23
 *
24
 * This program is free software; you can redistribute it and/or modify
25
 * it under the terms of the GNU General Public License as published by
26
 * the Free Software Foundation; either version 2 of the License, or
27
 * (at your option) any later version.
28
 *
29
 * This program is distributed in the hope that it will be useful,
30
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
31
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
32
 * GNU General Public License for more details.
33
 *
34
 * You should have received a copy of the GNU General Public License
35
 * along with this program; if not, write to the Free Software
36
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
37
 *
38
 */
39
 
40
/*
38 pj 41
 * CVS :        $Id: bd_edf.c,v 1.2 2003-01-07 17:07:50 pj Exp $
2 pj 42
 *
43
 * File:        $File$
38 pj 44
 * Revision:    $Revision: 1.2 $
45
 * Last update: $Date: 2003-01-07 17:07:50 $
2 pj 46
 */
47
 
48
#include <modules/bd_edf.h>
49
 
50
#include <ll/ll.h>
51
#include <ll/string.h>
52
#include <ll/stdio.h>
53
#include <kernel/const.h>
54
#include <sys/types.h>
55
#include <kernel/var.h>
56
#include <kernel/func.h>
57
#include <kernel/assert.h>
58
 
59
static int mylevel=-1;
60
 
61
typedef struct TAGbd_edf_resource_des
62
{
63
  resource_des rd;
64
  TIME dl[MAX_PROC];
65
} bd_edf_resource_des;
66
 
67
static int res_level_accept_resource_model(RLEVEL l, RES_MODEL *r)
68
{
69
  assertk(mylevel==l);
70
  if (r->rclass==BDEDF_RCLASS||r->rclass==(BDEDF_RCLASS|l))
71
    return 0;
72
  else
73
    return -1;
74
}
75
 
38 pj 76
static int res_register(RLEVEL l, PID p, RES_MODEL *r)
2 pj 77
{
78
  bd_edf_resource_des *m=(bd_edf_resource_des*)(resource_table[l]);
38 pj 79
  BDEDF_RES_MODEL *rm;
80
 
81
  if (r->rclass!=BDEDF_RCLASS)
82
    return -1;
83
  if (r->level && r->level !=l)
84
    return -1;
85
 
86
  rm=(BDEDF_RES_MODEL*)r;
2 pj 87
  assertk(mylevel==l);
88
  m->dl[p]=rm->dl;
38 pj 89
 
90
  return 0;
2 pj 91
}
92
 
93
static void res_detach(RLEVEL l, PID p)
94
{
95
  bd_edf_resource_des *m=(bd_edf_resource_des*)(resource_table[l]);
96
  assertk(mylevel==l);
97
  m->dl[p]=0;
98
}
99
 
38 pj 100
RLEVEL BD_EDF_register_module(void)
2 pj 101
{
102
  RLEVEL l;
103
  bd_edf_resource_des *m;
104
  int i;
105
 
106
  /* request an entry in the level_table */
107
  l=resource_alloc_descriptor();
108
 
109
  /* alloc the space needed for the EDF_level_des */
110
  m=(bd_edf_resource_des*)kern_alloc(sizeof(bd_edf_resource_des));
111
 
112
  /* update the level_table with the new entry */
113
  resource_table[l]=(resource_des*)m;
114
 
115
  /* fill the resource_des descriptor */
116
  m->rd.rtype=DEFAULT_RTYPE;
117
  m->rd.res_register=res_register;
118
  m->rd.res_detach=res_detach;
119
 
120
  for (i=0;i<MAX_PROC;i++) m->dl[i]=MAX_TIME;
121
 
122
  assertk(mylevel==-1);
123
  mylevel=l;
38 pj 124
 
125
  return l;
2 pj 126
}
127
 
128
TIME bd_edf_getdl(void)
129
{
130
  bd_edf_resource_des *m;
131
  if (mylevel==-1) return MAX_TIME;
132
  m=(bd_edf_resource_des*)(resource_table[mylevel]);
133
  if (m->dl[exec_shadow]==MAX_TIME) return MAX_TIME;
134
  return m->dl[exec_shadow]+sys_gettime(NULL);
135
}