Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * (C) COPYRIGHT 2018 ARM Limited. All rights reserved.
0004  * Author: James.Qian.Wang <james.qian.wang@arm.com>
0005  *
0006  */
0007 #ifndef _MALIDP_UTILS_
0008 #define _MALIDP_UTILS_
0009 
0010 #include <linux/delay.h>
0011 #include <linux/errno.h>
0012 
0013 #define has_bit(nr, mask)   (BIT(nr) & (mask))
0014 #define has_bits(bits, mask)    (((bits) & (mask)) == (bits))
0015 
0016 #define dp_wait_cond(__cond, __tries, __min_range, __max_range) \
0017 ({                          \
0018     int num_tries = __tries;            \
0019     while (!__cond && (num_tries > 0)) {        \
0020         usleep_range(__min_range, __max_range); \
0021         num_tries--;                \
0022     }                       \
0023     (__cond) ? 0 : -ETIMEDOUT;          \
0024 })
0025 
0026 /* the restriction of range is [start, end] */
0027 struct malidp_range {
0028     u32 start;
0029     u32 end;
0030 };
0031 
0032 static inline void set_range(struct malidp_range *rg, u32 start, u32 end)
0033 {
0034     rg->start = start;
0035     rg->end   = end;
0036 }
0037 
0038 static inline bool in_range(struct malidp_range *rg, u32 v)
0039 {
0040     return (v >= rg->start) && (v <= rg->end);
0041 }
0042 
0043 #endif /* _MALIDP_UTILS_ */