NAME
tc_init
—
machine-independent binary
timescale
SYNOPSIS
#include
<sys/timetc.h>
void
tc_init
(struct
timecounter *tc);
DESCRIPTION
The timecounter interface is a machine-independent implementation of a binary timescale using whatever hardware support is at hand for tracking time.
A timecounter is a binary counter which has two properties:
- it runs at a fixed, known frequency
- it has sufficient bits to not roll over in less than approximately max(2 msec, 2/HZ seconds) (the value 2 here is really 1 + delta, for some indeterminate value of delta)
The interface between the hardware which implements a timecounter and the machine-independent code which uses this to keep track of time is a timecounter structure:
struct timecounter { timecounter_get_t *tc_get_timecount; u_int tc_counter_mask; u_int64_t tc_frequency; char *tc_name; int tc_quality; void *tc_priv; struct timecounter *tc_next; }
The fields of the timecounter structure are described below.
- u_int
(*tc_get_timecount)
(struct timecounter *) - This function reads the counter. It is not required to mask any unimplemented bits out, as long as they are constant.
- tc_counter_mask
- This mask should mask off any unimplemented bits.
- tc_frequency
- Frequency of the counter in Hz.
- tc_name
- Name of the timecounter. Can be any null-terminated string.
- tc_quality
- Used to determine if this timecounter is better than another timecounter - higher means better. If this field is negative, the counter is only used at explicit request.
- tc_priv
- Pointer to the timecounter's private parts.
- tc_next
- For internal use.
To register a new timecounter, the hardware device
driver should fill a timecounter structure with
appropriate values and call the
tc_init
()
function, giving a pointer to the structure as a tc
parameter.
CODE REFERENCES
The timecounter framework is implemented in the file sys/kern/kern_tc.c.
SEE ALSO
amdpm(4), gscpm(4), ichpcib(4), viapm(4), hz(9), microtime(9)
Poul-Henning Kamp, Timecounter: Efficient and precise timekeeping in SMP kernels, The FreeBSD Project, http://phk.freebsd.dk/pubs/timecounter.pdf.
HISTORY
The timecounter interface first appeared in OpenBSD 3.6.