README.md
1<!--
2 Copyright 2020, Data61
3 Commonwealth Scientific and Industrial Research Organisation (CSIRO)
4 ABN 41 687 119 230.
5
6 This software may be distributed and modified according to the terms of
7 the BSD 2-Clause license. Note that NO WARRANTY is provided.
8 See "LICENSE_BSD2.txt" for details.
9
10 @TAG(DATA61_BSD)
11-->
12
13# TimeServer
14
15This is a CAmkES component that is intended to abstract over a platform's timer
16and multiplex client access to it.
17
18## Dependencies
19
20There are currently no dependencies for this component.
21
22## Usage
23
24For clients to use the functionality exposed by the component, the clients will
25need to be connected to this CAmkES interface using the `seL4TimeServer`
26connector.
27
28```c
29provides Timer the_timer;
30```
31
32The component also exposes a CAmkES emits interface which can be connected to
33clients with the `seL4GlobalAsynchCallback` connector to allow a callback to be
34automatically called on the client's side when the component signals a timeout
35has occurred.
36
37```c
38emits Notification timer_notification;
39```
40
41The `timers_per_client` attribute can also be set to a maximum limit of active
42timers for all clients.
43
44## Supported platforms
45
46Currently, this component supports the following platforms:
47 - i.MX6
48 - i.MX8
49 - Odroid C2
50 - Exynos5-based platforms (Odroid XU, Odroid XU4)
51 - Beaglebone Black (possibly Beaglebone Blue as well)
52 - pc99
53 - QEMU ARM Virt configuration
54 - TK1
55 - TX1
56 - TX2
57 - Zynq7000
58 - ZynqMP
59
60Additional platforms require a corresponding timer driver to be
61implemented in the libplatsupport library of the
62[`util_libs`](https://github.com/seL4/util_libs) repository, and the following
63CPP defintions to be created in the `include` folder of this component:
64 - `HARDWARE_TIMER_COMPONENT`
65 - `HARDWARE_TIMER_INTERFACES`
66 - `HARDWARE_TIMER_ATTRIBUTES`
67 - `HARDWARE_TIMER_COMPOSITION`
68 - `HARDWARE_TIMER_CONFIG`
69
70## Limitations
71
72Right now, some of the timer drivers assume that the clocks for the timers are
73initialised (at least for ARM and possibly RISC V platforms). This is mainly a
74side-effect of boards being booted by U-Boot which handles the clock
75initialisation.
76