embox
1/**
2* @file
3* @brief
4*
5* @author Anton Kozlov
6* @date 08.03.2013
7*/
8
9#include <embox/unit.h>10#include <hal/clock.h>11#include <hal/system.h>12#include <kernel/irq.h>13#include <kernel/time/clock_source.h>14#include <kernel/host.h>15
16#define CLOCK_IRQ HOST_TIMER_IRQ17
18static irq_return_t clock_handler(unsigned int irq_nr, void *data) {19
20clock_tick_handler(data);21
22return IRQ_HANDLED;23}
24
25static int clk_set_periodic(struct clock_source *cs);26
27static struct time_event_device umclock_ev = {28.set_periodic = clk_set_periodic,29.irq_nr = CLOCK_IRQ,30};31
32static int clk_set_periodic(struct clock_source *cs) {33
34host_timer_config(1000000 / 1000);35
36return 0;37}
38
39static int umclock_init(struct clock_source *cs) {40return irq_attach(CLOCK_IRQ, clock_handler, 0, cs, "usermode clock");41}
42
43CLOCK_SOURCE_DEF(usermode, umclock_init, NULL,44&umclock_ev,NULL);45