delay.h (1738B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _ASM_IA64_DELAY_H 3#define _ASM_IA64_DELAY_H 4 5/* 6 * Delay routines using a pre-computed "cycles/usec" value. 7 * 8 * Copyright (C) 1998, 1999 Hewlett-Packard Co 9 * David Mosberger-Tang <davidm@hpl.hp.com> 10 * Copyright (C) 1999 VA Linux Systems 11 * Copyright (C) 1999 Walt Drummond <drummond@valinux.com> 12 * Copyright (C) 1999 Asit Mallick <asit.k.mallick@intel.com> 13 * Copyright (C) 1999 Don Dugger <don.dugger@intel.com> 14 */ 15 16#include <linux/kernel.h> 17#include <linux/sched.h> 18#include <linux/compiler.h> 19 20#include <asm/intrinsics.h> 21#include <asm/processor.h> 22 23static __inline__ void 24ia64_set_itm (unsigned long val) 25{ 26 ia64_setreg(_IA64_REG_CR_ITM, val); 27 ia64_srlz_d(); 28} 29 30static __inline__ unsigned long 31ia64_get_itm (void) 32{ 33 unsigned long result; 34 35 result = ia64_getreg(_IA64_REG_CR_ITM); 36 ia64_srlz_d(); 37 return result; 38} 39 40static __inline__ void 41ia64_set_itv (unsigned long val) 42{ 43 ia64_setreg(_IA64_REG_CR_ITV, val); 44 ia64_srlz_d(); 45} 46 47static __inline__ unsigned long 48ia64_get_itv (void) 49{ 50 return ia64_getreg(_IA64_REG_CR_ITV); 51} 52 53static __inline__ void 54ia64_set_itc (unsigned long val) 55{ 56 ia64_setreg(_IA64_REG_AR_ITC, val); 57 ia64_srlz_d(); 58} 59 60static __inline__ unsigned long 61ia64_get_itc (void) 62{ 63 unsigned long result; 64 65 result = ia64_getreg(_IA64_REG_AR_ITC); 66 ia64_barrier(); 67#ifdef CONFIG_ITANIUM 68 while (unlikely((__s32) result == -1)) { 69 result = ia64_getreg(_IA64_REG_AR_ITC); 70 ia64_barrier(); 71 } 72#endif 73 return result; 74} 75 76extern void ia64_delay_loop (unsigned long loops); 77 78static __inline__ void 79__delay (unsigned long loops) 80{ 81 if (unlikely(loops < 1)) 82 return; 83 84 ia64_delay_loop (loops - 1); 85} 86 87extern void udelay (unsigned long usecs); 88 89#endif /* _ASM_IA64_DELAY_H */