iPXE
timer.h
Go to the documentation of this file.
1 #ifndef _IPXE_TIMER_H
2 #define _IPXE_TIMER_H
3 
4 /** @file
5  *
6  * iPXE timers
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 
12 #include <ipxe/tables.h>
13 
14 /** Number of ticks per second */
15 #define TICKS_PER_SEC 1024
16 
17 /** Number of ticks per millisecond
18  *
19  * This is (obviously) not 100% consistent with the definition of
20  * TICKS_PER_SEC, but it allows for multiplications and divisions to
21  * be elided. In any case, timer ticks are not expected to be a
22  * precision timing source; for example, the standard BIOS timer is
23  * based on an 18.2Hz clock.
24  */
25 #define TICKS_PER_MS 1
26 
27 /** A timer */
28 struct timer {
29  /** Name */
30  const char *name;
31  /**
32  * Probe timer
33  *
34  * @ret rc Return status code
35  */
36  int ( * probe ) ( void );
37  /**
38  * Get current system time in ticks
39  *
40  * @ret ticks Current time, in ticks
41  */
42  unsigned long ( * currticks ) ( void );
43  /**
44  * Delay for a fixed number of microseconds
45  *
46  * @v usecs Number of microseconds for which to delay
47  */
48  void ( * udelay ) ( unsigned long usecs );
49 };
50 
51 /** Timer table */
52 #define TIMERS __table ( struct timer, "timers" )
53 
54 /** Declare a timer */
55 #define __timer( order ) __table_entry ( TIMERS, order )
56 
57 /** @defgroup timer_order Timer detection order
58  *
59  * @{
60  */
61 
62 #define TIMER_PREFERRED 01 /**< Preferred timer */
63 #define TIMER_NORMAL 02 /**< Normal timer */
64 
65 /** @} */
66 
67 /*
68  * sleep() prototype is defined by POSIX.1. usleep() prototype is
69  * defined by 4.3BSD. udelay() and mdelay() prototypes are chosen to
70  * be reasonably sensible.
71  *
72  */
73 
74 extern void udelay ( unsigned long usecs );
75 extern void mdelay ( unsigned long msecs );
76 extern unsigned long currticks ( void );
77 extern unsigned int sleep ( unsigned int seconds );
78 extern void sleep_fixed ( unsigned int secs );
79 
80 #endif /* _IPXE_TIMER_H */
unsigned int sleep(unsigned int seconds)
Sleep (interruptibly) for a fixed number of seconds.
Definition: timer.c:133
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
Definition: timer.c:78
A timer.
Definition: timer.h:28
void(* udelay)(unsigned long usecs)
Delay for a fixed number of microseconds.
Definition: timer.h:48
unsigned long(* currticks)(void)
Get current system time in ticks.
Definition: timer.h:42
unsigned long currticks(void)
Get current system time in ticks.
Definition: timer.c:42
int(* probe)(void)
Probe timer.
Definition: timer.h:36
const char * name
Name.
Definition: timer.h:30
UINT16_t seconds
Elapsed time.
Definition: pxe_api.h:81
Linker tables.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
void sleep_fixed(unsigned int secs)
Sleep (uninterruptibly) for a fixed number of seconds.
Definition: timer.c:143
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
Definition: timer.c:60