~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm/include/asm/delay.h

Version: ~ [ linux-5.8-rc5 ] ~ [ linux-5.7.8 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.51 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.132 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.188 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.230 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.230 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.85 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Copyright (C) 1995-2004 Russell King
  3  *
  4  * Delay routines, using a pre-computed "loops_per_second" value.
  5  */
  6 #ifndef __ASM_ARM_DELAY_H
  7 #define __ASM_ARM_DELAY_H
  8 
  9 #include <asm/memory.h>
 10 #include <asm/param.h>  /* HZ */
 11 
 12 #define MAX_UDELAY_MS   2
 13 #define UDELAY_MULT     ((UL(2199023) * HZ) >> 11)
 14 #define UDELAY_SHIFT    30
 15 
 16 #ifndef __ASSEMBLY__
 17 
 18 struct delay_timer {
 19         unsigned long (*read_current_timer)(void);
 20         unsigned long freq;
 21 };
 22 
 23 extern struct arm_delay_ops {
 24         void (*delay)(unsigned long);
 25         void (*const_udelay)(unsigned long);
 26         void (*udelay)(unsigned long);
 27         unsigned long ticks_per_jiffy;
 28 } arm_delay_ops;
 29 
 30 #define __delay(n)              arm_delay_ops.delay(n)
 31 
 32 /*
 33  * This function intentionally does not exist; if you see references to
 34  * it, it means that you're calling udelay() with an out of range value.
 35  *
 36  * With currently imposed limits, this means that we support a max delay
 37  * of 2000us. Further limits: HZ<=1000 and bogomips<=3355
 38  */
 39 extern void __bad_udelay(void);
 40 
 41 /*
 42  * division by multiplication: you don't have to worry about
 43  * loss of precision.
 44  *
 45  * Use only for very small delays ( < 2 msec).  Should probably use a
 46  * lookup table, really, as the multiplications take much too long with
 47  * short delays.  This is a "reasonable" implementation, though (and the
 48  * first constant multiplications gets optimized away if the delay is
 49  * a constant)
 50  */
 51 #define __udelay(n)             arm_delay_ops.udelay(n)
 52 #define __const_udelay(n)       arm_delay_ops.const_udelay(n)
 53 
 54 #define udelay(n)                                                       \
 55         (__builtin_constant_p(n) ?                                      \
 56           ((n) > (MAX_UDELAY_MS * 1000) ? __bad_udelay() :              \
 57                         __const_udelay((n) * UDELAY_MULT)) :            \
 58           __udelay(n))
 59 
 60 /* Loop-based definitions for assembly code. */
 61 extern void __loop_delay(unsigned long loops);
 62 extern void __loop_udelay(unsigned long usecs);
 63 extern void __loop_const_udelay(unsigned long);
 64 
 65 /* Delay-loop timer registration. */
 66 #define ARCH_HAS_READ_CURRENT_TIMER
 67 extern void register_current_timer_delay(const struct delay_timer *timer);
 68 
 69 #endif /* __ASSEMBLY__ */
 70 
 71 #endif /* defined(_ARM_DELAY_H) */
 72 
 73 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp