summaryrefslogtreecommitdiffstats
path: root/c/src/exec/score/cpu/m68k
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/exec/score/cpu/m68k')
-rw-r--r--c/src/exec/score/cpu/m68k/asm.h2
-rw-r--r--c/src/exec/score/cpu/m68k/cpu.c19
-rw-r--r--c/src/exec/score/cpu/m68k/cpu.h6
-rw-r--r--c/src/exec/score/cpu/m68k/m68k.h11
4 files changed, 31 insertions, 7 deletions
diff --git a/c/src/exec/score/cpu/m68k/asm.h b/c/src/exec/score/cpu/m68k/asm.h
index 58bb04bdf9..7a25b6c298 100644
--- a/c/src/exec/score/cpu/m68k/asm.h
+++ b/c/src/exec/score/cpu/m68k/asm.h
@@ -31,7 +31,7 @@
*/
#define ASM
-#include <rtems/m68k.h>
+#include <rtems/core/m68k.h>
/*
* Recent versions of GNU cpp define variables which indicate the
diff --git a/c/src/exec/score/cpu/m68k/cpu.c b/c/src/exec/score/cpu/m68k/cpu.c
index a97698372a..fdba64bffe 100644
--- a/c/src/exec/score/cpu/m68k/cpu.c
+++ b/c/src/exec/score/cpu/m68k/cpu.c
@@ -14,7 +14,7 @@
#include <rtems/system.h>
#include <rtems/fatal.h>
-#include <rtems/isr.h>
+#include <rtems/core/isr.h>
/* _CPU_Initialize
*
@@ -33,15 +33,26 @@ void _CPU_Initialize(
)
{
- if ( cpu_table == NULL )
- rtems_fatal_error_occurred( RTEMS_NOT_CONFIGURED );
-
_CPU_Table = *cpu_table;
}
/*PAGE
*
+ * _CPU_ISR_Get_level
+ */
+
+unsigned32 _CPU_ISR_Get_level( void )
+{
+ unsigned32 level;
+
+ m68k_get_interrupt_level( level );
+
+ return level;
+}
+
+/*PAGE
+ *
* _CPU_ISR_install_raw_handler
*/
diff --git a/c/src/exec/score/cpu/m68k/cpu.h b/c/src/exec/score/cpu/m68k/cpu.h
index 566e479f3a..8379d47a00 100644
--- a/c/src/exec/score/cpu/m68k/cpu.h
+++ b/c/src/exec/score/cpu/m68k/cpu.h
@@ -30,9 +30,9 @@ extern "C" {
#define NO_UNINITIALIZED_WARNINGS
-#include <rtems/m68k.h>
+#include <rtems/core/m68k.h>
#ifndef ASM
-#include <rtems/m68ktypes.h>
+#include <rtems/core/m68ktypes.h>
#endif
/* conditional compilation parameters */
@@ -222,6 +222,8 @@ EXTERN void *_CPU_Interrupt_stack_high;
#define _CPU_ISR_Set_level( _newlevel ) \
m68k_set_interrupt_level( _newlevel )
+unsigned32 _CPU_ISR_Get_level( void );
+
/* end of ISR handler macros */
/*
diff --git a/c/src/exec/score/cpu/m68k/m68k.h b/c/src/exec/score/cpu/m68k/m68k.h
index b86db286cb..a2e0df6a25 100644
--- a/c/src/exec/score/cpu/m68k/m68k.h
+++ b/c/src/exec/score/cpu/m68k/m68k.h
@@ -196,6 +196,17 @@ extern "C" {
); \
}
+#define m68k_get_interrupt_level( _level ) \
+ do { \
+ register unsigned32 _tmpsr = 0; \
+ \
+ asm volatile( "movw %%sr,%0" \
+ : "=d" (_tmpsr) : "0" (_tmpsr) \
+ ); \
+ \
+ _level = (_tmpsr & 0x0700) >> 8; \
+ } while (0)
+
#define m68k_set_interrupt_level( _newlevel ) \
{ \
register unsigned32 _tmpsr = 0; \