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 /* $NetBSD: timetc.h,v 1.9 2020/09/04 00:36:07 thorpej Exp $ */
    2 
    3 /*-
    4  * ----------------------------------------------------------------------------
    5  * "THE BEER-WARE LICENSE" (Revision 42):
    6  * <phk@FreeBSD.ORG> wrote this file.  As long as you retain this notice you
    7  * can do whatever you want with this stuff. If we meet some day, and you think
    8  * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
    9  * ----------------------------------------------------------------------------
   10  *
   11  * $FreeBSD: src/sys/sys/timetc.h,v 1.58 2003/08/16 08:23:52 phk Exp $
   12  */
   13 
   14 #ifndef _SYS_TIMETC_H_
   15 #define _SYS_TIMETC_H_
   16 
   17 #if !defined(_KERNEL) && !defined(_KMEMUSER)
   18 #error "no user-serviceable parts inside"
   19 #endif
   20 
   21 /*
   22  * max recommended timecounter name length
   23  *
   24  * it is not a functional limit but names longer
   25  * then that will not be controllable via
   26  * sysctl. see kern/kern_tc.c for the sysctl
   27  * implementation.
   28  */
   29 #define MAX_TCNAMELEN   64
   30 
   31 /*-
   32  * `struct timecounter' is the interface between the hardware which implements
   33  * a timecounter and the MI code which uses this to keep track of time.
   34  *
   35  * A timecounter is a binary counter which has two properties:
   36  *    * it runs at a fixed, known frequency.
   37  *    * it has sufficient bits to not roll over in less than approximately
   38  *      max(2 msec, 2/HZ seconds).  (The value 2 here is really 1 + delta,
   39  *      for some indeterminate value of delta.)
   40  */
   41 
   42 struct timecounter;
   43 struct timespec;
   44 typedef u_int timecounter_get_t(struct timecounter *);
   45 typedef void timecounter_pps_t(struct timecounter *);
   46 
   47 struct timecounter {
   48         timecounter_get_t       *tc_get_timecount;
   49                 /*
   50                  * This function reads the counter.  It is not required to
   51                  * mask any unimplemented bits out, as long as they are
   52                  * constant.
   53                  */
   54         timecounter_pps_t       *tc_poll_pps;
   55                 /*
   56                  * This function is optional.  It will be called whenever the
   57                  * timecounter is rewound, and is intended to check for PPS
   58                  * events.  Normal hardware does not need it but timecounters
   59                  * which latch PPS in hardware (like sys/pci/xrpu.c) do.
   60                  */
   61         u_int                   tc_counter_mask;
   62                 /* This mask should mask off any unimplemented bits. */
   63         uint64_t                tc_frequency;
   64                 /* Frequency of the counter in Hz. */
   65         const char              *tc_name;
   66                 /* Name of the timecounter. */
   67         int                     tc_quality;
   68                 /*
   69                  * Used to determine if this timecounter is better than
   70                  * another timecounter higher means better.  Negative
   71                  * means "only use at explicit request".
   72                  */
   73 
   74         void                    *tc_priv;
   75                 /* Pointer to the timecounter's private parts. */
   76         struct timecounter      *tc_next;
   77                 /* Pointer to the next timecounter. */
   78 };
   79 
   80 #ifdef _KERNEL
   81 extern struct timecounter *timecounter;
   82 
   83 uint64_t tc_getfrequency(void);
   84 void    tc_init(struct timecounter *tc);
   85 int     tc_detach(struct timecounter *);
   86 void    tc_setclock(const struct timespec *ts);
   87 void    tc_ticktock(void);
   88 void    tc_gonebad(struct timecounter *);
   89 
   90 #ifdef SYSCTL_DECL
   91 SYSCTL_DECL(_kern_timecounter);
   92 #endif
   93 #endif /* _KERNEL */
   94 
   95 #endif /* !_SYS_TIMETC_H_ */

Cache object: ac9f3c5ae8d253f09cbb7bbf6f5263cf


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