#include <hal/hwtimer.h>
#include <lunaix/spike.h>
-struct hwtimer_context* sys_hwtctx;
+#include <usr/lunaix/ioctl_defs.h>
-void
-hwtimer_init(u32_t hertz, void* tick_callback)
-{
- struct hwtimer_context* hwt_ctx = hwtimer_choose();
-
- hwt_ctx->init(hwt_ctx, hertz, tick_callback);
- hwt_ctx->running_freq = hertz;
-
- sys_hwtctx = hwt_ctx;
-}
+struct hwtimer* current_timer;
ticks_t
hwtimer_base_frequency()
{
- return sys_hwtctx->base_freq;
+ assert(current_timer);
+ return current_timer->base_freq;
}
ticks_t
hwtimer_current_systicks()
{
- return sys_hwtctx->systicks();
+ assert(current_timer);
+ return current_timer->systicks();
}
ticks_t
hwtimer_to_ticks(u32_t value, int unit)
{
+ assert(current_timer);
// in case system frequency is less than 1000Hz
if (unit != TIME_MS) {
- return sys_hwtctx->running_freq * unit * value;
+ return current_timer->running_freq * unit * value;
}
- ticks_t freq_ms = sys_hwtctx->running_freq / 1000;
+ ticks_t freq_ms = current_timer->running_freq / 1000;
return freq_ms * value;
+}
+
+static int
+__hwtimer_ioctl(struct device* dev, u32_t req, va_list args)
+{
+ struct hwtimer* hwt = (struct hwtimer*)dev->underlay;
+ switch (req) {
+ case TIMERIO_GETINFO:
+ // TODO
+ break;
+
+ default:
+ break;
+ }
+ return 0;
+}
+
+void
+hwtimer_init(u32_t hertz, void* tick_callback)
+{
+ struct hwtimer* hwt_ctx = hwtimer_choose();
+
+ hwt_ctx->init(hwt_ctx, hertz, tick_callback);
+ hwt_ctx->running_freq = hertz;
+
+ current_timer = hwt_ctx;
+
+ struct device* timerdev = device_addsys(NULL, hwt_ctx, hwt_ctx->name);
+
+ timerdev->ops.exec_cmd = __hwtimer_ioctl;
}
\ No newline at end of file