Home | History | Annotate | Line # | Download | only in linux
jiffies.h revision 1.6.30.1
      1  1.6.30.1  christos /*	$NetBSD: jiffies.h,v 1.6.30.1 2019/06/10 22:08:31 christos Exp $	*/
      2       1.2  riastrad 
      3       1.2  riastrad /*-
      4       1.2  riastrad  * Copyright (c) 2013 The NetBSD Foundation, Inc.
      5       1.2  riastrad  * All rights reserved.
      6       1.2  riastrad  *
      7       1.2  riastrad  * This code is derived from software contributed to The NetBSD Foundation
      8       1.2  riastrad  * by Taylor R. Campbell.
      9       1.2  riastrad  *
     10       1.2  riastrad  * Redistribution and use in source and binary forms, with or without
     11       1.2  riastrad  * modification, are permitted provided that the following conditions
     12       1.2  riastrad  * are met:
     13       1.2  riastrad  * 1. Redistributions of source code must retain the above copyright
     14       1.2  riastrad  *    notice, this list of conditions and the following disclaimer.
     15       1.2  riastrad  * 2. Redistributions in binary form must reproduce the above copyright
     16       1.2  riastrad  *    notice, this list of conditions and the following disclaimer in the
     17       1.2  riastrad  *    documentation and/or other materials provided with the distribution.
     18       1.2  riastrad  *
     19       1.2  riastrad  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20       1.2  riastrad  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21       1.2  riastrad  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22       1.2  riastrad  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23       1.2  riastrad  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24       1.2  riastrad  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25       1.2  riastrad  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26       1.2  riastrad  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27       1.2  riastrad  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28       1.2  riastrad  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29       1.2  riastrad  * POSSIBILITY OF SUCH DAMAGE.
     30       1.2  riastrad  */
     31       1.2  riastrad 
     32       1.2  riastrad #ifndef _LINUX_JIFFIES_H_
     33       1.2  riastrad #define _LINUX_JIFFIES_H_
     34       1.2  riastrad 
     35       1.2  riastrad #include <sys/param.h>
     36       1.2  riastrad #include <sys/kernel.h>
     37       1.2  riastrad 
     38       1.4  riastrad #define	jiffies		hardclock_ticks
     39       1.4  riastrad #define	jiffies_64	hardclock_ticks /* XXX */
     40       1.2  riastrad 
     41       1.3  riastrad /* XXX Er, what?  */
     42       1.3  riastrad #define	MAX_JIFFY_OFFSET	((INT_MAX >> 1) - 1)
     43       1.3  riastrad 
     44  1.6.30.1  christos static inline uint64_t
     45  1.6.30.1  christos get_jiffies_64(void)
     46  1.6.30.1  christos {
     47  1.6.30.1  christos 
     48  1.6.30.1  christos 	return (uint64_t)(unsigned)hardclock_ticks;
     49  1.6.30.1  christos }
     50  1.6.30.1  christos 
     51  1.6.30.1  christos static inline uint64_t
     52  1.6.30.1  christos nsecs_to_jiffies64(uint64_t nsec)
     53  1.6.30.1  christos {
     54  1.6.30.1  christos 
     55  1.6.30.1  christos 	/* XXX Arbitrary cutoff, should review the arithmetic.  */
     56  1.6.30.1  christos 	if (((1000000000 % hz) == 0) || (nsec >= 20000000000ul))
     57  1.6.30.1  christos 		return (nsec/1000000000)*hz;
     58  1.6.30.1  christos 	else
     59  1.6.30.1  christos 		return (nsec*hz)/1000000000;
     60  1.6.30.1  christos }
     61  1.6.30.1  christos 
     62  1.6.30.1  christos static inline uint32_t
     63  1.6.30.1  christos nsecs_to_jiffies(uint64_t nsec)
     64  1.6.30.1  christos {
     65  1.6.30.1  christos 
     66  1.6.30.1  christos 	/* XXX Not sure what else to do but truncate...  */
     67  1.6.30.1  christos 	return (uint32_t)nsecs_to_jiffies64(nsec);
     68  1.6.30.1  christos }
     69  1.6.30.1  christos 
     70       1.2  riastrad static inline unsigned int
     71       1.2  riastrad msecs_to_jiffies(unsigned int msec)
     72       1.2  riastrad {
     73       1.2  riastrad 	return mstohz(msec);
     74       1.2  riastrad }
     75       1.2  riastrad 
     76       1.2  riastrad static inline unsigned int
     77       1.2  riastrad jiffies_to_msecs(unsigned int j)
     78       1.2  riastrad {
     79       1.2  riastrad 	return hztoms(j);
     80       1.2  riastrad }
     81       1.2  riastrad 
     82       1.2  riastrad static inline unsigned int
     83       1.2  riastrad usecs_to_jiffies(unsigned int usec)
     84       1.2  riastrad {
     85       1.6  riastrad 	const struct timeval tv = {
     86       1.6  riastrad 		.tv_sec = usec / 1000000,
     87       1.6  riastrad 		.tv_usec = usec % 1000000,
     88       1.6  riastrad 	};
     89       1.5  riastrad 
     90       1.6  riastrad 	return tvtohz(&tv);
     91       1.2  riastrad }
     92       1.2  riastrad 
     93       1.2  riastrad static inline unsigned int
     94  1.6.30.1  christos jiffies_to_usecs(unsigned int j)
     95  1.6.30.1  christos {
     96  1.6.30.1  christos 
     97  1.6.30.1  christos 	/* XXX Do better arithmetic.  */
     98  1.6.30.1  christos 	return (unsigned int)((unsigned long)j*1000000/hz);
     99  1.6.30.1  christos }
    100  1.6.30.1  christos 
    101  1.6.30.1  christos static inline unsigned int
    102       1.2  riastrad timespec_to_jiffies(const struct timespec *ts)
    103       1.2  riastrad {
    104       1.2  riastrad 	return tstohz(ts);
    105       1.2  riastrad }
    106       1.2  riastrad 
    107       1.2  riastrad /* XXX long is the wrong type here times...  */
    108       1.2  riastrad 
    109       1.2  riastrad #define	__linux_time_compare(A, OP, B)	(((long)(A) - (long)(B)) OP 0)
    110       1.2  riastrad 
    111       1.2  riastrad static inline bool
    112       1.2  riastrad time_after(unsigned long a, unsigned long b)
    113       1.2  riastrad {
    114       1.2  riastrad 	return __linux_time_compare(a, >, b);
    115       1.2  riastrad }
    116       1.2  riastrad 
    117       1.2  riastrad static inline bool
    118       1.2  riastrad time_after_eq(unsigned long a, unsigned long b)
    119       1.2  riastrad {
    120       1.2  riastrad 	return __linux_time_compare(a, >=, b);
    121       1.2  riastrad }
    122       1.2  riastrad 
    123       1.2  riastrad static inline bool
    124       1.2  riastrad time_before(unsigned long a, unsigned long b)
    125       1.2  riastrad {
    126       1.2  riastrad 	return __linux_time_compare(a, <, b);
    127       1.2  riastrad }
    128       1.2  riastrad 
    129       1.2  riastrad static inline bool
    130       1.2  riastrad time_before_eq(unsigned long a, unsigned long b)
    131       1.2  riastrad {
    132       1.2  riastrad 	return __linux_time_compare(a, <=, b);
    133       1.2  riastrad }
    134       1.2  riastrad 
    135       1.2  riastrad #endif  /* _LINUX_JIFFIES_H_ */
    136