malidp_utils.h 975 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * (C) COPYRIGHT 2018 ARM Limited. All rights reserved.
  4. * Author: James.Qian.Wang <james.qian.wang@arm.com>
  5. *
  6. */
  7. #ifndef _MALIDP_UTILS_
  8. #define _MALIDP_UTILS_
  9. #include <linux/delay.h>
  10. #include <linux/errno.h>
  11. #define has_bit(nr, mask) (BIT(nr) & (mask))
  12. #define has_bits(bits, mask) (((bits) & (mask)) == (bits))
  13. #define dp_wait_cond(__cond, __tries, __min_range, __max_range) \
  14. ({ \
  15. int num_tries = __tries; \
  16. while (!__cond && (num_tries > 0)) { \
  17. usleep_range(__min_range, __max_range); \
  18. num_tries--; \
  19. } \
  20. (__cond) ? 0 : -ETIMEDOUT; \
  21. })
  22. /* the restriction of range is [start, end] */
  23. struct malidp_range {
  24. u32 start;
  25. u32 end;
  26. };
  27. static inline void set_range(struct malidp_range *rg, u32 start, u32 end)
  28. {
  29. rg->start = start;
  30. rg->end = end;
  31. }
  32. static inline bool malidp_in_range(struct malidp_range *rg, u32 v)
  33. {
  34. return (v >= rg->start) && (v <= rg->end);
  35. }
  36. #endif /* _MALIDP_UTILS_ */