Files
2026-07-30 11:19:44 +05:30

86 lines
2.4 KiB
C

/* cycleLib.h - clock cycle level event library header */
/* Copyright 2005, 2018 Wind River Systems, Inc. */
#include "copyright_wrs.h"
/*
modification history
--------------------
01b,25sep18,whu move extern C declaration to the front of structure declaration
(VXW6-86818)
01a,06dec05,prb written.
*/
#ifndef __INCcycleLibh
#define __INCcycleLibh
#include <sys/cdefs.h>
__BEGIN_DECLS
#define SET_RELOAD(x)
#undef SET_RELOAD
typedef unsigned int CYCLE_TICK;
typedef unsigned long long int CYCLE_CLOCK;
typedef struct cycleLibEvent_t cycleLibEvent_t;
typedef cycleLibEvent_t *CEVENT_ID;
/*
* The event queue is a double linked delta queue.
*
* The next pointer points to the next element, or NULL if it is
* the last event in the queue.
*
* The prev pointer points t the previous element. It's value is unspecified
* for the first element in the queue.
*
* The tick value is the number of ticks between the previous event
* and this event.
*
* The rate is the frequency, in ticks, of this event. A value of 0
* implies this is not a repeating event.
*
* The base is only used for repeating events. This is the absolute cycle
* value for the next event.
*/
struct cycleLibEvent_t {
CEVENT_ID next; /* Next event to fire */
CEVENT_ID prev; /* doubly linked list */
CYCLE_TICK tick; /* delta until event fires */
void (*callback)(void *); /* callback function */
void *arg; /* argument to callback */
CYCLE_TICK rate; /* rate if repeating event */
CYCLE_CLOCK base; /* time base if repeating */
};
extern void cycleLibInit __P((void));
extern int cycleLibPoolAlloc __P((int, CEVENT_ID));
extern void cycleLibEventFree __P((CEVENT_ID));
extern void cycleLibEventHandler __P((void));
extern CEVENT_ID cycleLibEventAdd __P((CYCLE_TICK, void(*)(void *),
void *));
extern CEVENT_ID cycleLibEventAddRepeating __P((CYCLE_TICK, CYCLE_TICK,
void(*)(void *), void *));
extern CEVENT_ID cycleLibEventAddAbsolute __P((CYCLE_CLOCK,
void(*)(void *), void *, CEVENT_ID));
extern void cycleLibEventDelete __P((CEVENT_ID, void(*)(void *),
void *));
__END_DECLS
/*
* The values below should be set in a architecture specific location.
*/
#define SET_TIMER(x) vxDecSet(x)
#define GET_CYCLE_CLOCK() gettb()
__BEGIN_DECLS
extern CYCLE_CLOCK gettb __P((void));
extern void vxDecSet __P((unsigned));
__END_DECLS
#endif /* __INCcycleLibh */