blob: b17420518a21385b55f71638d280c23e355964a4 [file] [log] [blame]
/*
* Copyright (c) 2012 Mindspeed Technologies, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*
*/
#ifndef _MODULE_TIMER_H_
#define _MODULE_TIMER_H_
#if !defined (COMCERTO_2000)
#include "modules.h"
#endif
#if !defined (COMCERTO_2000_CONTROL)
#include "timer.h"
typedef void (*TIMER_HANDLER)(void);
/** Timer
*
*/
typedef struct {
struct slist_entry list;
TIMER_HANDLER handler;
U16 tick;
U16 granularity;
} TIMER_ENTRY;
struct tTIMER_context {
struct slist_head timers;
U32 count;
};
extern struct tTIMER_context gTimerCtx;
BOOL sw_timer_init(void);
/** Run programmed periodic tasks.
* If a timer tick has elapsed, loops through all configured timer entries,
* and executes callback for timers that have expired.
* Called in the Util PE main loop.
*/
void M_timer_entry(void);
/** Initializes a timer structure.
* Must be called once for each TIMER_ENTRY structure.
*
* @param timer pointer to the timer to be initialized
* @param handler timer handler function pointer
*
*/
void timer_init(TIMER_ENTRY *timer, TIMER_HANDLER handler);
/** Adds a timer to the running timer list.
* It's safe to call even if the timer was already running. In this case we just update the granularity.
*
* @param timer pointer to the timer to be added
* @param granularity granularity of the timer (in timer tick units)
*
*/
void timer_add(TIMER_ENTRY *timer, U16 granularity) __attribute__ ((noinline));
/** Deletes a timer from the running timer list.
* It's safe to call even if the timer is no longer running.
*
* @param timer pointer to the timer to be removed
*/
void timer_del(TIMER_ENTRY *timer) __attribute__ ((noinline));
/* Resets the timer tick to 0 */
void timer_reset(TIMER_ENTRY *timer);
#endif
#endif /* _MODULE_TIMER_H_ */