Lines Matching defs:dmt

21 #include <platsupport/plat/dmt.h>
46 static void dmt_timer_reset(dmt_t *dmt)
48 assert(dmt != NULL && dmt->dmt_map != NULL);
49 dmt_regs_t *dmt_regs = dmt->dmt_map;
52 dmt->time_h = 0;
55 int dmt_stop(dmt_t *dmt)
57 if (dmt == NULL) {
60 assert(dmt != NULL && dmt->dmt_map != NULL);
61 dmt_regs_t *dmt_regs = dmt->dmt_map;
66 int dmt_start(dmt_t *dmt)
68 if (dmt == NULL) {
71 assert(dmt != NULL && dmt->dmt_map != NULL);
72 dmt_regs_t *dmt_regs = dmt->dmt_map;
82 bool dmt_is_irq_pending(dmt_t *dmt)
84 if (dmt) {
85 assert(dmt != NULL && dmt->dmt_map != NULL);
86 return !!dmt->dmt_map->ris;
91 int dmt_set_timeout(dmt_t *dmt, uint64_t ns, bool periodic, bool irqs)
97 return dmt_set_timeout_ticks(dmt, ticks64, periodic, irqs);
100 int dmt_set_timeout_ticks(dmt_t *dmt, uint32_t ticks, bool periodic, bool irqs)
102 if (dmt == NULL) {
105 assert(dmt != NULL && dmt->dmt_map != NULL);
110 dmt_regs_t *dmt_regs = dmt->dmt_map;
131 * dmt->regs->bgload = ticks;
153 dmt_t *dmt = data;
156 if (dmt->user_cb_event == LTIMER_OVERFLOW_EVENT) {
157 dmt->time_h++;
160 assert(dmt->dmt_map != NULL);
161 dmt_regs_t *dmt_regs = dmt->dmt_map;
165 if (dmt->user_cb_fn) {
166 dmt->user_cb_fn(dmt->user_cb_token, dmt->user_cb_event);
170 uint64_t dmt_get_ticks(dmt_t *dmt)
172 assert(dmt != NULL && dmt->dmt_map != NULL);
173 dmt_regs_t *dmt_regs = dmt->dmt_map;
177 uint64_t dmt_get_time(dmt_t *dmt)
182 assert(dmt->user_cb_event == LTIMER_OVERFLOW_EVENT);
184 /* dmt is a down counter, invert the result */
185 high = dmt->time_h;
186 low = UINT32_MAX - dmt_get_ticks(dmt);
189 if (dmt_is_irq_pending(dmt)) {
198 void dmt_destroy(dmt_t *dmt)
201 if (dmt->irq_id != PS_INVALID_IRQ_ID) {
202 error = ps_irq_unregister(&dmt->ops.irq_ops, dmt->irq_id);
205 if (dmt->dmt_map != NULL) {
206 dmt_stop(dmt);
208 if (dmt->dmt_map_base != NULL) {
210 ps_pmem_unmap(&dmt->ops, dmt->pmem, (void *) dmt->dmt_map_base);
214 int dmt_init(dmt_t *dmt, ps_io_ops_t ops, dmt_config_t config)
218 if (dmt == NULL) {
219 ZF_LOGE("dmt cannot be null");
223 dmt->ops = ops;
224 dmt->user_cb_fn = config.user_cb_fn;
225 dmt->user_cb_token = config.user_cb_token;
226 dmt->user_cb_event = config.user_cb_event;
231 &dmt->dmt_map_base, &dmt->pmem, &dmt->irq_id,
232 dmt_handle_irq, dmt
239 dmt->dmt_map = dmt->dmt_map_base;
241 dmt_timer_reset(dmt);
245 /* initialise dmt using the base address of dmtp, so that we do not attempt to map
247 int dmt_init_secondary(dmt_t *dmt, dmt_t *dmtp, ps_io_ops_t ops, dmt_config_t config)
251 if (dmt == NULL || dmtp == NULL) {
252 ZF_LOGE("dmt or dmtp cannot be null");
256 dmt->ops = ops;
257 dmt->user_cb_fn = config.user_cb_fn;
258 dmt->user_cb_token = config.user_cb_token;
259 dmt->user_cb_event = config.user_cb_event;
262 dmt->dmt_map_base = NULL;
265 dmt->dmt_map = (void *)((uintptr_t) dmtp->dmt_map_base) + HIKEY_DUALTIMER_SECONDARY_TIMER_OFFSET;
266 dmt->irq_id = PS_INVALID_IRQ_ID;
277 irq_id_t irq_id = ps_fdt_index_register_irq(&ops, cookie, 1, dmt_handle_irq, dmt);
289 dmt->irq_id = irq_id;
291 dmt_timer_reset(dmt);