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

TOMOYO Linux Cross Reference
Linux/include/asm-generic/delay.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ 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.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /include/asm-generic/delay.h (Version linux-6.11.5) and /include/asm-ppc/delay.h (Version linux-2.4.37.11)


  1 /* SPDX-License-Identifier: GPL-2.0 */         !!   1 #ifdef __KERNEL__
  2 #ifndef __ASM_GENERIC_DELAY_H                  !!   2 #ifndef _PPC_DELAY_H
  3 #define __ASM_GENERIC_DELAY_H                  !!   3 #define _PPC_DELAY_H
  4                                                !!   4 
  5 /* Undefined functions to get compile-time err !!   5 #include <asm/param.h>
  6 extern void __bad_udelay(void);                !!   6 
  7 extern void __bad_ndelay(void);                !!   7 /*
  8                                                !!   8  * Copyright 1996, Paul Mackerras.
  9 extern void __udelay(unsigned long usecs);     !!   9  *
 10 extern void __ndelay(unsigned long nsecs);     !!  10  * This program is free software; you can redistribute it and/or
 11 extern void __const_udelay(unsigned long xloop !!  11  * modify it under the terms of the GNU General Public License
 12 extern void __delay(unsigned long loops);      !!  12  * as published by the Free Software Foundation; either version
                                                   >>  13  * 2 of the License, or (at your option) any later version.
                                                   >>  14  */
                                                   >>  15 
                                                   >>  16 extern unsigned long loops_per_jiffy;
                                                   >>  17 
                                                   >>  18 extern void __delay(unsigned int loops);
 13                                                    19 
 14 /*                                                 20 /*
 15  * The weird n/20000 thing suppresses a "compa !!  21  * Note that 19 * 226 == 4294 ==~ 2^32 / 10^6, so
 16  * limited range of data type" warning with no !!  22  * loops = (4294 * usecs * loops_per_jiffy * HZ) / 2^32.
                                                   >>  23  *
                                                   >>  24  * The mulhwu instruction gives us loops = (a * b) / 2^32.
                                                   >>  25  * We choose a = usecs * 19 * HZ and b = loops_per_jiffy * 226
                                                   >>  26  * because this lets us support a wide range of HZ and
                                                   >>  27  * loops_per_jiffy values without either a or b overflowing 2^32.
                                                   >>  28  * Thus we need usecs * HZ <= (2^32 - 1) / 19 = 226050910 and
                                                   >>  29  * loops_per_jiffy <= (2^32 - 1) / 226 = 19004280
                                                   >>  30  * (which corresponds to ~3800 bogomips at HZ = 100).
                                                   >>  31  *  -- paulus
 17  */                                                32  */
                                                   >>  33 #define __MAX_UDELAY    (226050910UL/HZ)        /* maximum udelay argument */
                                                   >>  34 #define __MAX_NDELAY    (4294967295UL/HZ)       /* maximum ndelay argument */
 18                                                    35 
 19 /* 0x10c7 is 2**32 / 1000000 (rounded up) */   !!  36 extern __inline__ void __udelay(unsigned int x)
 20 #define udelay(n)                              !!  37 {
 21         ({                                     !!  38         unsigned int loops;
 22                 if (__builtin_constant_p(n)) { !!  39 
 23                         if ((n) / 20000 >= 1)  !!  40         __asm__("mulhwu %0,%1,%2" : "=r" (loops) :
 24                                  __bad_udelay( !!  41                 "r" (x), "r" (loops_per_jiffy * 226));
 25                         else                   !!  42         __delay(loops);
 26                                 __const_udelay !!  43 }
 27                 } else {                       !!  44 
 28                         __udelay(n);           !!  45 extern __inline__ void __ndelay(unsigned int x)
 29                 }                              !!  46 {
 30         })                                     !!  47         unsigned int loops;
 31                                                !!  48 
 32 /* 0x5 is 2**32 / 1000000000 (rounded up) */   !!  49         __asm__("mulhwu %0,%1,%2" : "=r" (loops) :
 33 #define ndelay(n)                              !!  50                 "r" (x), "r" (loops_per_jiffy * 5));
 34         ({                                     !!  51         __delay(loops);
 35                 if (__builtin_constant_p(n)) { !!  52 }
 36                         if ((n) / 20000 >= 1)  !!  53 
 37                                 __bad_ndelay() !!  54 extern void __bad_udelay(void);         /* deliberately undefined */
 38                         else                   !!  55 extern void __bad_ndelay(void);         /* deliberately undefined */
 39                                 __const_udelay !!  56 
 40                 } else {                       !!  57 #define udelay(n) (__builtin_constant_p(n)? \
 41                         __ndelay(n);           !!  58         ((n) > __MAX_UDELAY? __bad_udelay(): __udelay((n) * (19 * HZ))) : \
 42                 }                              !!  59         __udelay((n) * (19 * HZ)))
 43         })                                     !!  60 
                                                   >>  61 #define ndelay(n) (__builtin_constant_p(n)? \
                                                   >>  62         ((n) > __MAX_NDELAY? __bad_ndelay(): __ndelay((n) * HZ)) : \
                                                   >>  63         __ndelay((n) * HZ))
 44                                                    64 
 45 #endif /* __ASM_GENERIC_DELAY_H */             !!  65 #endif /* defined(_PPC_DELAY_H) */
                                                   >>  66 #endif /* __KERNEL__ */
 46                                                    67 

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

kernel.org | git.kernel.org | LWN.net | Project Home | 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.

sflogo.php