3 * Copyright (C) 2009 Tomas 'ZeXx86' Jedrzejek (zexx86@gmail.com)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 /** Interval Time Scheduler - NOTE: it's not a task/process scheduler */
26 extern unsigned long timer_ticks
;
30 for (;; schedule ()) {
32 for (its
= its_list
.next
; its
!= &its_list
; its
= its
->next
)
33 if ((timer_ticks
-its
->timer
) >= its
->interval
) {
35 its
->timer
= timer_ticks
;
42 unsigned int its_register (unsigned long interval
, its_handler_t
*handler
)
44 its_t
*its
= its_list
.next
;
45 /* create ITS' task when it's really needed */
47 task_create ("its", (unsigned) task_its
, 255);
49 /* alloc and init context */
50 its
= (its_t
*) kmalloc (sizeof (its_t
));
55 its
->timer
= timer_ticks
;
56 its
->interval
= interval
;
57 its
->handler
= handler
;
60 its
->next
= &its_list
;
61 its
->prev
= its_list
.prev
;
62 its
->prev
->next
= its
;
63 its
->next
->prev
= its
;
65 DPRINT (DBG_CORE
, "its_register () -> 0x%x every %dms", handler
, interval
);
70 unsigned int init_its ()
72 its_list
.next
= &its_list
;
73 its_list
.prev
= &its_list
;