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/9.0/sys/sys/timetc.h 224043 2011-07-14 21:02:15Z jkim $
   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 typedef u_int timecounter_get_t(struct timecounter *);
   32 typedef void timecounter_pps_t(struct timecounter *);
   33 
   34 struct timecounter {
   35         timecounter_get_t       *tc_get_timecount;
   36                 /*
   37                  * This function reads the counter.  It is not required to
   38                  * mask any unimplemented bits out, as long as they are
   39                  * constant.
   40                  */
   41         timecounter_pps_t       *tc_poll_pps;
   42                 /*
   43                  * This function is optional.  It will be called whenever the
   44                  * timecounter is rewound, and is intended to check for PPS
   45                  * events.  Normal hardware does not need it but timecounters
   46                  * which latch PPS in hardware (like sys/pci/xrpu.c) do.
   47                  */
   48         u_int                   tc_counter_mask;
   49                 /* This mask should mask off any unimplemented bits. */
   50         uint64_t                tc_frequency;
   51                 /* Frequency of the counter in Hz. */
   52         char                    *tc_name;
   53                 /* Name of the timecounter. */
   54         int                     tc_quality;
   55                 /*
   56                  * Used to determine if this timecounter is better than
   57                  * another timecounter higher means better.  Negative
   58                  * means "only use at explicit request".
   59                  */
   60         u_int                   tc_flags;
   61 #define TC_FLAGS_C3STOP         1       /* Timer dies in C3. */
   62 
   63         void                    *tc_priv;
   64                 /* Pointer to the timecounter's private parts. */
   65         struct timecounter      *tc_next;
   66                 /* Pointer to the next timecounter. */
   67 };
   68 
   69 extern struct timecounter *timecounter;
   70 extern int tc_min_ticktock_freq; /*
   71                                   * Minimal tc_ticktock() call frequency,
   72                                   * required to handle counter wraps.
   73                                   */
   74 
   75 u_int64_t tc_getfrequency(void);
   76 void    tc_init(struct timecounter *tc);
   77 void    tc_setclock(struct timespec *ts);
   78 void    tc_ticktock(int cnt);
   79 void    cpu_tick_calibration(void);
   80 
   81 #ifdef SYSCTL_DECL
   82 SYSCTL_DECL(_kern_timecounter);
   83 #endif
   84 
   85 #endif /* !_SYS_TIMETC_H_ */

Cache object: 002ce810c49f6f79444082e26399f2e1


[ 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.