File: /Users/paulross/dev/linux/linux-3.13/include/linux/jiffies.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: #ifndef _LINUX_JIFFIES_H
       2: #define _LINUX_JIFFIES_H
       3: 
       4: #include <linux/math64.h>
       5: #include <linux/kernel.h>
       6: #include <linux/types.h>
       7: #include <linux/time.h>
       8: #include <linux/timex.h>
       9: #include <asm/param.h>            /* for HZ */
      10: 
      11: /*
      12:  * The following defines establish the engineering parameters of the PLL
      13:  * model. The HZ variable establishes the timer interrupt frequency, 100 Hz
      14:  * for the SunOS kernel, 256 Hz for the Ultrix kernel and 1024 Hz for the
      15:  * OSF/1 kernel. The SHIFT_HZ define expresses the same value as the
      16:  * nearest power of two in order to avoid hardware multiply operations.
      17:  */
      18: #if HZ >= 12 && HZ < 24
      19: # define SHIFT_HZ    4
      20: #elif HZ >= 24 && HZ < 48
      21: # define SHIFT_HZ    5
      22: #elif HZ >= 48 && HZ < 96
      23: # define SHIFT_HZ    6
      24: #elif HZ >= 96 && HZ < 192
      25: # define SHIFT_HZ    7
      26: #elif HZ >= 192 && HZ < 384
      27: # define SHIFT_HZ    8
      28: #elif HZ >= 384 && HZ < 768
      29: # define SHIFT_HZ    9
      30: #elif HZ >= 768 && HZ < 1536
      31: # define SHIFT_HZ    10
      32: #elif HZ >= 1536 && HZ < 3072
      33: # define SHIFT_HZ    11
      34: #elif HZ >= 3072 && HZ < 6144
      35: # define SHIFT_HZ    12
      36: #elif HZ >= 6144 && HZ < 12288
      37: # define SHIFT_HZ    13
      38: #else
      39: # error Invalid value of HZ.
      40: #endif
      41: 
      42: /* Suppose we want to divide two numbers NOM and DEN: NOM/DEN, then we can
      43:  * improve accuracy by shifting LSH bits, hence calculating:
      44:  *     (NOM << LSH) / DEN
      45:  * This however means trouble for large NOM, because (NOM << LSH) may no
      46:  * longer fit in 32 bits. The following way of calculating this gives us
      47:  * some slack, under the following conditions:
      48:  *   - (NOM / DEN) fits in (32 - LSH) bits.
      49:  *   - (NOM % DEN) fits in (32 - LSH) bits.
      50:  */
      51: #define SH_DIV(NOM,DEN,LSH) (   (((NOM) / (DEN)) << (LSH))              \
      52:                              + ((((NOM) % (DEN)) << (LSH)) + (DEN) / 2) / (DEN))
      53: 
      54: /* LATCH is used in the interval timer and ftape setup. */
      55: #define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ)    /* For divider */
      56: 
      57: extern int register_refined_jiffies(long clock_tick_rate);
      58: 
      59: /* TICK_NSEC is the time between ticks in nsec assuming SHIFTED_HZ */
      60: #define TICK_NSEC ((NSEC_PER_SEC+HZ/2)/HZ)
      61: 
      62: /* TICK_USEC is the time between ticks in usec assuming fake USER_HZ */
      63: #define TICK_USEC ((1000000UL + USER_HZ/2) / USER_HZ)
      64: 
      65: /* some arch's have a small-data section that can be accessed register-relative
      66:  * but that can only take up to, say, 4-byte variables. jiffies being part of
      67:  * an 8-byte variable may not be correctly accessed unless we force the issue
      68:  */
      69: #define __jiffy_data  __attribute__((section(".data")))
      70: 
      71: /*
      72:  * The 64-bit value is not atomic - you MUST NOT read it
      73:  * without sampling the sequence number in jiffies_lock.
      74:  * get_jiffies_64() will do this for you as appropriate.
      75:  */
      76: extern u64 __jiffy_data jiffies_64;
      77: extern unsigned long volatile __jiffy_data jiffies;
      78: 
      79: #if (BITS_PER_LONG < 64)
      80: u64 get_jiffies_64(void);
      81: #else
      82: static inline u64 get_jiffies_64(void)
      83: {
      84:     return (u64)jiffies;
      85: }
      86: #endif
      87: 
      88: /*
      89:  *    These inlines deal with timer wrapping correctly. You are 
      90:  *    strongly encouraged to use them
      91:  *    1. Because people otherwise forget
      92:  *    2. Because if the timer wrap changes in future you won't have to
      93:  *       alter your driver code.
      94:  *
      95:  * time_after(a,b) returns true if the time a is after time b.
      96:  *
      97:  * Do this with "<0" and ">=0" to only test the sign of the result. A
      98:  * good compiler would generate better code (and a really good compiler
      99:  * wouldn't care). Gcc is currently neither.
     100:  */
     101: #define time_after(a,b)        \
     102:     (typecheck(unsigned long, a) && \
     103:      typecheck(unsigned long, b) && \
     104:      ((long)((b) - (a)) < 0))
     105: #define time_before(a,b)    time_after(b,a)
     106: 
     107: #define time_after_eq(a,b)    \
     108:     (typecheck(unsigned long, a) && \
     109:      typecheck(unsigned long, b) && \
     110:      ((long)((a) - (b)) >= 0))
     111: #define time_before_eq(a,b)    time_after_eq(b,a)
     112: 
     113: /*
     114:  * Calculate whether a is in the range of [b, c].
     115:  */
     116: #define time_in_range(a,b,c) \
     117:     (time_after_eq(a,b) && \
     118:      time_before_eq(a,c))
     119: 
     120: /*
     121:  * Calculate whether a is in the range of [b, c).
     122:  */
     123: #define time_in_range_open(a,b,c) \
     124:     (time_after_eq(a,b) && \
     125:      time_before(a,c))
     126: 
     127: /* Same as above, but does so with platform independent 64bit types.
     128:  * These must be used when utilizing jiffies_64 (i.e. return value of
     129:  * get_jiffies_64() */
     130: #define time_after64(a,b)    \
     131:     (typecheck(__u64, a) &&    \
     132:      typecheck(__u64, b) && \
     133:      ((__s64)((b) - (a)) < 0))
     134: #define time_before64(a,b)    time_after64(b,a)
     135: 
     136: #define time_after_eq64(a,b)    \
     137:     (typecheck(__u64, a) && \
     138:      typecheck(__u64, b) && \
     139:      ((__s64)((a) - (b)) >= 0))
     140: #define time_before_eq64(a,b)    time_after_eq64(b,a)
     141: 
     142: #define time_in_range64(a, b, c) \
     143:     (time_after_eq64(a, b) && \
     144:      time_before_eq64(a, c))
     145: 
     146: /*
     147:  * These four macros compare jiffies and 'a' for convenience.
     148:  */
     149: 
     150: /* time_is_before_jiffies(a) return true if a is before jiffies */
     151: #define time_is_before_jiffies(a) time_after(jiffies, a)
     152: 
     153: /* time_is_after_jiffies(a) return true if a is after jiffies */
     154: #define time_is_after_jiffies(a) time_before(jiffies, a)
     155: 
     156: /* time_is_before_eq_jiffies(a) return true if a is before or equal to jiffies*/
     157: #define time_is_before_eq_jiffies(a) time_after_eq(jiffies, a)
     158: 
     159: /* time_is_after_eq_jiffies(a) return true if a is after or equal to jiffies*/
     160: #define time_is_after_eq_jiffies(a) time_before_eq(jiffies, a)
     161: 
     162: /*
     163:  * Have the 32 bit jiffies value wrap 5 minutes after boot
     164:  * so jiffies wrap bugs show up earlier.
     165:  */
     166: #define INITIAL_JIFFIES ((unsigned long)(unsigned int) (-300*HZ))
     167: 
     168: /*
     169:  * Change timeval to jiffies, trying to avoid the
     170:  * most obvious overflows..
     171:  *
     172:  * And some not so obvious.
     173:  *
     174:  * Note that we don't want to return LONG_MAX, because
     175:  * for various timeout reasons we often end up having
     176:  * to wait "jiffies+1" in order to guarantee that we wait
     177:  * at _least_ "jiffies" - so "jiffies+1" had better still
     178:  * be positive.
     179:  */
     180: #define MAX_JIFFY_OFFSET ((LONG_MAX >> 1)-1)
     181: 
     182: extern unsigned long preset_lpj;
     183: 
     184: /*
     185:  * We want to do realistic conversions of time so we need to use the same
     186:  * values the update wall clock code uses as the jiffies size.  This value
     187:  * is: TICK_NSEC (which is defined in timex.h).  This
     188:  * is a constant and is in nanoseconds.  We will use scaled math
     189:  * with a set of scales defined here as SEC_JIFFIE_SC,  USEC_JIFFIE_SC and
     190:  * NSEC_JIFFIE_SC.  Note that these defines contain nothing but
     191:  * constants and so are computed at compile time.  SHIFT_HZ (computed in
     192:  * timex.h) adjusts the scaling for different HZ values.
     193: 
     194:  * Scaled math???  What is that?
     195:  *
     196:  * Scaled math is a way to do integer math on values that would,
     197:  * otherwise, either overflow, underflow, or cause undesired div
     198:  * instructions to appear in the execution path.  In short, we "scale"
     199:  * up the operands so they take more bits (more precision, less
     200:  * underflow), do the desired operation and then "scale" the result back
     201:  * by the same amount.  If we do the scaling by shifting we avoid the
     202:  * costly mpy and the dastardly div instructions.
     203: 
     204:  * Suppose, for example, we want to convert from seconds to jiffies
     205:  * where jiffies is defined in nanoseconds as NSEC_PER_JIFFIE.  The
     206:  * simple math is: jiff = (sec * NSEC_PER_SEC) / NSEC_PER_JIFFIE; We
     207:  * observe that (NSEC_PER_SEC / NSEC_PER_JIFFIE) is a constant which we
     208:  * might calculate at compile time, however, the result will only have
     209:  * about 3-4 bits of precision (less for smaller values of HZ).
     210:  *
     211:  * So, we scale as follows:
     212:  * jiff = (sec) * (NSEC_PER_SEC / NSEC_PER_JIFFIE);
     213:  * jiff = ((sec) * ((NSEC_PER_SEC * SCALE)/ NSEC_PER_JIFFIE)) / SCALE;
     214:  * Then we make SCALE a power of two so:
     215:  * jiff = ((sec) * ((NSEC_PER_SEC << SCALE)/ NSEC_PER_JIFFIE)) >> SCALE;
     216:  * Now we define:
     217:  * #define SEC_CONV = ((NSEC_PER_SEC << SCALE)/ NSEC_PER_JIFFIE))
     218:  * jiff = (sec * SEC_CONV) >> SCALE;
     219:  *
     220:  * Often the math we use will expand beyond 32-bits so we tell C how to
     221:  * do this and pass the 64-bit result of the mpy through the ">> SCALE"
     222:  * which should take the result back to 32-bits.  We want this expansion
     223:  * to capture as much precision as possible.  At the same time we don't
     224:  * want to overflow so we pick the SCALE to avoid this.  In this file,
     225:  * that means using a different scale for each range of HZ values (as
     226:  * defined in timex.h).
     227:  *
     228:  * For those who want to know, gcc will give a 64-bit result from a "*"
     229:  * operator if the result is a long long AND at least one of the
     230:  * operands is cast to long long (usually just prior to the "*" so as
     231:  * not to confuse it into thinking it really has a 64-bit operand,
     232:  * which, buy the way, it can do, but it takes more code and at least 2
     233:  * mpys).
     234: 
     235:  * We also need to be aware that one second in nanoseconds is only a
     236:  * couple of bits away from overflowing a 32-bit word, so we MUST use
     237:  * 64-bits to get the full range time in nanoseconds.
     238: 
     239:  */
     240: 
     241: /*
     242:  * Here are the scales we will use.  One for seconds, nanoseconds and
     243:  * microseconds.
     244:  *
     245:  * Within the limits of cpp we do a rough cut at the SEC_JIFFIE_SC and
     246:  * check if the sign bit is set.  If not, we bump the shift count by 1.
     247:  * (Gets an extra bit of precision where we can use it.)
     248:  * We know it is set for HZ = 1024 and HZ = 100 not for 1000.
     249:  * Haven't tested others.
     250: 
     251:  * Limits of cpp (for #if expressions) only long (no long long), but
     252:  * then we only need the most signicant bit.
     253:  */
     254: 
     255: #define SEC_JIFFIE_SC (31 - SHIFT_HZ)
     256: #if !((((NSEC_PER_SEC << 2) / TICK_NSEC) << (SEC_JIFFIE_SC - 2)) & 0x80000000)
     257: #undef SEC_JIFFIE_SC
     258: #define SEC_JIFFIE_SC (32 - SHIFT_HZ)
     259: #endif
     260: #define NSEC_JIFFIE_SC (SEC_JIFFIE_SC + 29)
     261: #define USEC_JIFFIE_SC (SEC_JIFFIE_SC + 19)
     262: #define SEC_CONVERSION ((unsigned long)((((u64)NSEC_PER_SEC << SEC_JIFFIE_SC) +\
                                TICK_NSEC -1) / (u64)TICK_NSEC))
     264: 
     265: #define NSEC_CONVERSION ((unsigned long)((((u64)1 << NSEC_JIFFIE_SC) +\
                                        TICK_NSEC -1) / (u64)TICK_NSEC))
     267: #define USEC_CONVERSION  \
     268:                     ((unsigned long)((((u64)NSEC_PER_USEC << USEC_JIFFIE_SC) +\
                                        TICK_NSEC -1) / (u64)TICK_NSEC))
     270: /*
     271:  * USEC_ROUND is used in the timeval to jiffie conversion.  See there
     272:  * for more details.  It is the scaled resolution rounding value.  Note
     273:  * that it is a 64-bit value.  Since, when it is applied, we are already
     274:  * in jiffies (albit scaled), it is nothing but the bits we will shift
     275:  * off.
     276:  */
     277: #define USEC_ROUND (u64)(((u64)1 << USEC_JIFFIE_SC) - 1)
     278: /*
     279:  * The maximum jiffie value is (MAX_INT >> 1).  Here we translate that
     280:  * into seconds.  The 64-bit case will overflow if we are not careful,
     281:  * so use the messy SH_DIV macro to do it.  Still all constants.
     282:  */
     283: #if BITS_PER_LONG < 64
     284: # define MAX_SEC_IN_JIFFIES \
     285:     (long)((u64)((u64)MAX_JIFFY_OFFSET * TICK_NSEC) / NSEC_PER_SEC)
     286: #else    /* take care of overflow on 64 bits machines */
     287: # define MAX_SEC_IN_JIFFIES \
     288:     (SH_DIV((MAX_JIFFY_OFFSET >> SEC_JIFFIE_SC) * TICK_NSEC, NSEC_PER_SEC, 1) - 1)
     289: 
     290: #endif
     291: 
     292: /*
     293:  * Convert various time units to each other:
     294:  */
     295: extern unsigned int jiffies_to_msecs(const unsigned long j);
     296: extern unsigned int jiffies_to_usecs(const unsigned long j);
     297: extern unsigned long msecs_to_jiffies(const unsigned int m);
     298: extern unsigned long usecs_to_jiffies(const unsigned int u);
     299: extern unsigned long timespec_to_jiffies(const struct timespec *value);
     300: extern void jiffies_to_timespec(const unsigned long jiffies,
     301:                 struct timespec *value);
     302: extern unsigned long timeval_to_jiffies(const struct timeval *value);
     303: extern void jiffies_to_timeval(const unsigned long jiffies,
     304:                    struct timeval *value);
     305: 
     306: extern clock_t jiffies_to_clock_t(unsigned long x);
     307: static inline clock_t jiffies_delta_to_clock_t(long delta)
     308: {
     309:     return jiffies_to_clock_t(max(0L, delta));
     310: }
     311: 
     312: extern unsigned long clock_t_to_jiffies(unsigned long x);
     313: extern u64 jiffies_64_to_clock_t(u64 x);
     314: extern u64 nsec_to_clock_t(u64 x);
     315: extern u64 nsecs_to_jiffies64(u64 n);
     316: extern unsigned long nsecs_to_jiffies(u64 n);
     317: 
     318: #define TIMESTAMP_SIZE    30
     319: 
     320: #endif
     321: