aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/osal/os-less/ARMCMx/osal.c
diff options
context:
space:
mode:
Diffstat (limited to 'os/hal/osal/os-less/ARMCMx/osal.c')
-rw-r--r--os/hal/osal/os-less/ARMCMx/osal.c115
1 files changed, 1 insertions, 114 deletions
diff --git a/os/hal/osal/os-less/ARMCMx/osal.c b/os/hal/osal/os-less/ARMCMx/osal.c
index 4a272bd31..571e6d6b5 100644
--- a/os/hal/osal/os-less/ARMCMx/osal.c
+++ b/os/hal/osal/os-less/ARMCMx/osal.c
@@ -23,6 +23,7 @@
*/
#include "osal.h"
+#include "osal_vt.h"
/*===========================================================================*/
/* Module local definitions. */
@@ -39,11 +40,6 @@
*/
const char *osal_halt_msg;
-/**
- * @brief Virtual timers delta list header.
- */
-virtual_timers_list_t vtlist;
-
/*===========================================================================*/
/* Module local types. */
/*===========================================================================*/
@@ -56,115 +52,6 @@ virtual_timers_list_t vtlist;
/* Module local functions. */
/*===========================================================================*/
-/**
- * @brief Timers initialization.
- *
- * @notapi
- */
-static void vtInit(void) {
-
- /* Virtual Timers initialization.*/
- vtlist.vt_next = vtlist.vt_prev = (void *)&vtlist;
- vtlist.vt_time = (systime_t)-1;
- vtlist.vt_systime = 0;
-}
-
-/**
- * @brief Returns @p TRUE if the specified timer is armed.
- *
- * @param[out] vtp the @p virtual_timer_t structure pointer
- *
- * @notapi
- */
-static bool vtIsArmedI(virtual_timer_t *vtp) {
-
- return vtp->vt_func != NULL;
-}
-
-/**
- * @brief Virtual timers ticker.
- * @note The system lock is released before entering the callback and
- * re-acquired immediately after. It is callback's responsibility
- * to acquire the lock if needed. This is done in order to reduce
- * interrupts jitter when many timers are in use.
- *
- * @notapi
- */
-static void vtDoTickI(void) {
-
- vtlist.vt_systime++;
- if (&vtlist != (virtual_timers_list_t *)vtlist.vt_next) {
- virtual_timer_t *vtp;
-
- --vtlist.vt_next->vt_time;
- while (!(vtp = vtlist.vt_next)->vt_time) {
- vtfunc_t fn = vtp->vt_func;
- vtp->vt_func = (vtfunc_t)NULL;
- vtp->vt_next->vt_prev = (void *)&vtlist;
- (&vtlist)->vt_next = vtp->vt_next;
- osalSysUnlockFromISR();
- fn(vtp->vt_par);
- osalSysLockFromISR();
- }
- }
-}
-
-/**
- * @brief Enables a virtual timer.
- * @note The associated function is invoked from interrupt context.
- *
- * @param[out] vtp the @p virtual_timer_t structure pointer
- * @param[in] time the number of ticks before the operation timeouts, the
- * special values are handled as follow:
- * - @a TIME_INFINITE is allowed but interpreted as a
- * normal time specification.
- * - @a TIME_IMMEDIATE this value is not allowed.
- * .
- * @param[in] vtfunc the timer callback function. After invoking the
- * callback the timer is disabled and the structure can
- * be disposed or reused.
- * @param[in] par a parameter that will be passed to the callback
- * function
- *
- * @notapi
- */
-static void vtSetI(virtual_timer_t *vtp, systime_t time,
- vtfunc_t vtfunc, void *par) {
- virtual_timer_t *p;
-
- vtp->vt_par = par;
- vtp->vt_func = vtfunc;
- p = vtlist.vt_next;
- while (p->vt_time < time) {
- time -= p->vt_time;
- p = p->vt_next;
- }
-
- vtp->vt_prev = (vtp->vt_next = p)->vt_prev;
- vtp->vt_prev->vt_next = p->vt_prev = vtp;
- vtp->vt_time = time;
- if (p != (void *)&vtlist)
- p->vt_time -= time;
-}
-
-/**
- * @brief Disables a Virtual Timer.
- * @note The timer MUST be active when this function is invoked.
- *
- * @param[in] vtp the @p virtual_timer_t structure pointer
- *
- * @notapi
- */
-static void vtResetI(virtual_timer_t *vtp) {
-
- if (vtp->vt_next != (void *)&vtlist)
- vtp->vt_next->vt_time += vtp->vt_time;
- vtp->vt_prev->vt_next = vtp->vt_next;
- vtp->vt_next->vt_prev = vtp->vt_prev;
- vtp->vt_func = (vtfunc_t)NULL;
-}
-
-
static void callback_timeout(void *p) {
osalSysLockFromISR();
osalThreadResumeI((thread_reference_t *)p, MSG_TIMEOUT);