The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/timetc.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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  * $FreeBSD: releng/11.2/sys/sys/timetc.h 305866 2016-09-16 10:04:28Z kib $
   10  */
   11 
   12 #ifndef _SYS_TIMETC_H_
   13 #define _SYS_TIMETC_H_
   14 
   15 #ifndef _KERNEL
   16 #error "no user-serviceable parts inside"
   17 #endif
   18 
   19 /*-
   20  * `struct timecounter' is the interface between the hardware which implements
   21  * a timecounter and the MI code which uses this to keep track of time.
   22  *
   23  * A timecounter is a binary counter which has two properties:
   24  *    * it runs at a fixed, known frequency.
   25  *    * it has sufficient bits to not roll over in less than approximately
   26  *      max(2 msec, 2/HZ seconds).  (The value 2 here is really 1 + delta,
   27  *      for some indeterminate value of delta.)
   28  */
   29 
   30 struct timecounter;
   31 struct vdso_timehands;
   32 struct vdso_timehands32;
   33 typedef u_int timecounter_get_t(struct timecounter *);
   34 typedef void timecounter_pps_t(struct timecounter *);
   35 typedef uint32_t timecounter_fill_vdso_timehands_t(struct vdso_timehands *,
   36     struct timecounter *);
   37 typedef uint32_t timecounter_fill_vdso_timehands32_t(struct vdso_timehands32 *,
   38     struct timecounter *);
   39 
   40 struct timecounter {
   41         timecounter_get_t       *tc_get_timecount;
   42                 /*
   43                  * This function reads the counter.  It is not required to
   44                  * mask any unimplemented bits out, as long as they are
   45                  * constant.
   46                  */
   47         timecounter_pps_t       *tc_poll_pps;
   48                 /*
   49                  * This function is optional.  It will be called whenever the
   50                  * timecounter is rewound, and is intended to check for PPS
   51                  * events.  Normal hardware does not need it but timecounters
   52                  * which latch PPS in hardware (like sys/pci/xrpu.c) do.
   53                  */
   54         u_int                   tc_counter_mask;
   55                 /* This mask should mask off any unimplemented bits. */
   56         uint64_t                tc_frequency;
   57                 /* Frequency of the counter in Hz. */
   58         const char              *tc_name;
   59                 /* Name of the timecounter. */
   60         int                     tc_quality;
   61                 /*
   62                  * Used to determine if this timecounter is better than
   63                  * another timecounter higher means better.  Negative
   64                  * means "only use at explicit request".
   65                  */
   66         u_int                   tc_flags;
   67 #define TC_FLAGS_C2STOP         1       /* Timer dies in C2+. */
   68 #define TC_FLAGS_SUSPEND_SAFE   2       /*
   69                                          * Timer functional across
   70                                          * suspend/resume.
   71                                          */
   72 
   73         void                    *tc_priv;
   74                 /* Pointer to the timecounter's private parts. */
   75         struct timecounter      *tc_next;
   76                 /* Pointer to the next timecounter. */
   77         timecounter_fill_vdso_timehands_t *tc_fill_vdso_timehands;
   78         timecounter_fill_vdso_timehands32_t *tc_fill_vdso_timehands32;
   79 };
   80 
   81 extern struct timecounter *timecounter;
   82 extern int tc_min_ticktock_freq; /*
   83                                   * Minimal tc_ticktock() call frequency,
   84                                   * required to handle counter wraps.
   85                                   */
   86 
   87 u_int64_t tc_getfrequency(void);
   88 void    tc_init(struct timecounter *tc);
   89 void    tc_setclock(struct timespec *ts);
   90 void    tc_ticktock(int cnt);
   91 void    cpu_tick_calibration(void);
   92 
   93 #ifdef SYSCTL_DECL
   94 SYSCTL_DECL(_kern_timecounter);
   95 #endif
   96 
   97 #endif /* !_SYS_TIMETC_H_ */

Cache object: 9ef31664012d825208025d3a5a38cb7f


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.