cpuport.h 986 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. */
  9. #ifndef CPUPORT_H__
  10. #define CPUPORT_H__
  11. #include <armv8.h>
  12. #include <rtdef.h>
  13. #ifdef RT_USING_SMP
  14. typedef union {
  15. unsigned long slock;
  16. struct __arch_tickets {
  17. unsigned short owner;
  18. unsigned short next;
  19. } tickets;
  20. } rt_hw_spinlock_t;
  21. #endif
  22. #define rt_hw_barrier(cmd, ...) \
  23. __asm__ volatile (RT_STRINGIFY(cmd) " "RT_STRINGIFY(__VA_ARGS__):::"memory")
  24. #define rt_hw_isb() rt_hw_barrier(isb)
  25. #define rt_hw_dmb() rt_hw_barrier(dmb, ish)
  26. #define rt_hw_wmb() rt_hw_barrier(dmb, ishst)
  27. #define rt_hw_rmb() rt_hw_barrier(dmb, ishld)
  28. #define rt_hw_dsb() rt_hw_barrier(dsb, ish)
  29. #define rt_hw_wfi() rt_hw_barrier(wfi)
  30. #define rt_hw_wfe() rt_hw_barrier(wfe)
  31. #define rt_hw_sev() rt_hw_barrier(sev)
  32. #define rt_hw_cpu_relax() rt_hw_barrier(yield)
  33. void _thread_start(void);
  34. #endif /*CPUPORT_H__*/