diff options
Diffstat (limited to 'cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h')
-rw-r--r-- | cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h b/cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h index 2a63e03513..1370e656dd 100644 --- a/cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h +++ b/cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h @@ -52,6 +52,21 @@ extern "C" { #endif +#ifdef RTEMS_SMP + +static inline struct Per_CPU_Control *_RISCV_Get_current_per_CPU_control( void ) +{ + struct Per_CPU_Control *cpu_self; + + __asm__ volatile ( "csrr %0, mscratch" : "=r" ( cpu_self ) ); + + return cpu_self; +} + +#define _CPU_Get_current_per_CPU_control() _RISCV_Get_current_per_CPU_control() + +#endif /* RTEMS_SMP */ + #ifdef __cplusplus } #endif |