cpuport.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. * 2018-10-03 Bernard The first version
  9. */
  10. #ifndef CPUPORT_H__
  11. #define CPUPORT_H__
  12. #include <rtconfig.h>
  13. #include <opcode.h>
  14. /* bytes of register width */
  15. #ifdef ARCH_CPU_64BIT
  16. #define STORE sd
  17. #define LOAD ld
  18. #define REGBYTES 8
  19. #else
  20. // error here, not portable
  21. #endif
  22. /* 33 general register */
  23. #define CTX_GENERAL_REG_NR 33
  24. #ifdef ENABLE_FPU
  25. /* 32 fpu register */
  26. #define CTX_FPU_REG_NR 32
  27. #else
  28. #define CTX_FPU_REG_NR 0
  29. #endif
  30. /* all context registers */
  31. #define CTX_REG_NR (CTX_GENERAL_REG_NR + CTX_FPU_REG_NR)
  32. #ifndef __ASSEMBLY__
  33. #include <rtthread.h>
  34. rt_inline void rt_hw_dsb()
  35. {
  36. __asm__ volatile("fence":::"memory");
  37. }
  38. rt_inline void rt_hw_dmb()
  39. {
  40. __asm__ volatile("fence":::"memory");
  41. }
  42. rt_inline void rt_hw_isb()
  43. {
  44. __asm__ volatile(OPC_FENCE_I:::"memory");
  45. }
  46. int rt_hw_cpu_id(void);
  47. #endif
  48. #endif
  49. #ifdef RISCV_U_MODE
  50. #define RISCV_USER_ENTRY 0xFFFFFFE000000000ULL
  51. #endif