[BACK]Return to timetc.h CVS log [TXT][DIR] Up to [local] / sys / sys

Annotation of sys/sys/timetc.h, Revision 1.1.1.1

1.1       nbrk        1: /*-
                      2:  * ----------------------------------------------------------------------------
                      3:  * "THE BEER-WARE LICENSE" (Revision 42):
                      4:  * <phk@FreeBSD.ORG> wrote this file.  As long as you retain this notice you
                      5:  * can do whatever you want with this stuff. If we meet some day, and you think
                      6:  * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
                      7:  * ----------------------------------------------------------------------------
                      8:  *
                      9:  * $OpenBSD: timetc.h,v 1.2 2006/10/30 20:19:33 otto Exp $
                     10:  * $FreeBSD: src/sys/sys/timetc.h,v 1.57 2003/04/10 23:07:24 des Exp $
                     11:  */
                     12:
                     13: #ifndef _SYS_TIMETC_H_
                     14: #define        _SYS_TIMETC_H_
                     15:
                     16: #ifndef _KERNEL
                     17: #error "no user-serviceable parts inside"
                     18: #endif
                     19:
                     20: /*-
                     21:  * `struct timecounter' is the interface between the hardware which implements
                     22:  * a timecounter and the MI code which uses this to keep track of time.
                     23:  *
                     24:  * A timecounter is a binary counter which has two properties:
                     25:  *    * it runs at a fixed, known frequency.
                     26:  *    * it has sufficient bits to not roll over in less than approximately
                     27:  *      max(2 msec, 2/HZ seconds).  (The value 2 here is really 1 + delta,
                     28:  *      for some indeterminate value of delta.)
                     29:  */
                     30:
                     31: struct timecounter;
                     32: typedef u_int timecounter_get_t(struct timecounter *);
                     33: typedef void timecounter_pps_t(struct timecounter *);
                     34:
                     35: struct timecounter {
                     36:        timecounter_get_t       *tc_get_timecount;
                     37:                /*
                     38:                 * This function reads the counter.  It is not required to
                     39:                 * mask any unimplemented bits out, as long as they are
                     40:                 * constant.
                     41:                 */
                     42:        timecounter_pps_t       *tc_poll_pps;
                     43:                /*
                     44:                 * This function is optional.  It will be called whenever the
                     45:                 * timecounter is rewound, and is intended to check for PPS
                     46:                 * events.  Normal hardware does not need it but timecounters
                     47:                 * which latch PPS in hardware (like sys/pci/xrpu.c) do.
                     48:                 */
                     49:        u_int                   tc_counter_mask;
                     50:                /* This mask should mask off any unimplemented bits. */
                     51:        u_int64_t               tc_frequency;
                     52:                /* Frequency of the counter in Hz. */
                     53:        char                    *tc_name;
                     54:                /* Name of the timecounter. */
                     55:        int                     tc_quality;
                     56:                /*
                     57:                 * Used to determine if this timecounter is better than
                     58:                 * another timecounter higher means better.  Negative
                     59:                 * means "only use at explicit request".
                     60:                 */
                     61:        void                    *tc_priv;
                     62:                /* Pointer to the timecounter's private parts. */
                     63:        struct timecounter      *tc_next;
                     64:                /* Pointer to the next timecounter. */
                     65:        int64_t                 tc_freq_adj;
                     66:                /* Current frequency adjustment. */
                     67: };
                     68:
                     69: extern struct timecounter *timecounter;
                     70:
                     71: u_int64_t tc_getfrequency(void);
                     72: void   tc_init(struct timecounter *tc);
                     73: void   tc_setclock(struct timespec *ts);
                     74: void   tc_ticktock(void);
                     75: void   inittimecounter(void);
                     76: int    sysctl_tc(int *, u_int, void *, size_t *, void *, size_t);
                     77: int    tc_adjfreq(int64_t *, int64_t *);
                     78:
                     79: #endif /* !_SYS_TIMETC_H_ */

CVSweb