cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

delay.h (1157B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __ASM_GENERIC_DELAY_H
      3#define __ASM_GENERIC_DELAY_H
      4
      5/* Undefined functions to get compile-time errors */
      6extern void __bad_udelay(void);
      7extern void __bad_ndelay(void);
      8
      9extern void __udelay(unsigned long usecs);
     10extern void __ndelay(unsigned long nsecs);
     11extern void __const_udelay(unsigned long xloops);
     12extern void __delay(unsigned long loops);
     13
     14/*
     15 * The weird n/20000 thing suppresses a "comparison is always false due to
     16 * limited range of data type" warning with non-const 8-bit arguments.
     17 */
     18
     19/* 0x10c7 is 2**32 / 1000000 (rounded up) */
     20#define udelay(n)							\
     21	({								\
     22		if (__builtin_constant_p(n)) {				\
     23			if ((n) / 20000 >= 1)				\
     24				 __bad_udelay();			\
     25			else						\
     26				__const_udelay((n) * 0x10c7ul);		\
     27		} else {						\
     28			__udelay(n);					\
     29		}							\
     30	})
     31
     32/* 0x5 is 2**32 / 1000000000 (rounded up) */
     33#define ndelay(n)							\
     34	({								\
     35		if (__builtin_constant_p(n)) {				\
     36			if ((n) / 20000 >= 1)				\
     37				__bad_ndelay();				\
     38			else						\
     39				__const_udelay((n) * 5ul);		\
     40		} else {						\
     41			__ndelay(n);					\
     42		}							\
     43	})
     44
     45#endif /* __ASM_GENERIC_DELAY_H */