21#ifndef _RTEMS_SCORE_CPU_H
22#define _RTEMS_SCORE_CPU_H
44#define CPU_SIMPLE_VECTORED_INTERRUPTS TRUE
52#define CPU_ISR_PASSES_FRAME_POINTER FALSE
63#if ( M68K_HAS_FPU == 1 ) || ( M68K_HAS_EMAC == 1 )
64 #define CPU_HARDWARE_FP TRUE
65 #define CPU_SOFTWARE_FP FALSE
67 #define CPU_HARDWARE_FP FALSE
68 #if defined( __GNUC__ )
69 #define CPU_SOFTWARE_FP TRUE
71 #define CPU_SOFTWARE_FP FALSE
82#define CPU_ALL_TASKS_ARE_FP FALSE
83#define CPU_IDLE_TASK_IS_FP FALSE
84#define CPU_USE_DEFERRED_FP_SWITCH TRUE
85#define CPU_ENABLE_ROBUST_THREAD_DISPATCH FALSE
87#define CPU_STACK_GROWS_UP FALSE
90#define CPU_CACHE_LINE_BYTES 16
92#define CPU_STRUCTURE_ALIGNMENT RTEMS_ALIGNED( CPU_CACHE_LINE_BYTES )
94#define CPU_MAXIMUM_PROCESSORS 32
96#if ( CPU_HARDWARE_FP == TRUE ) && !defined( __mcoldfire__ )
97 #if defined( __mc68060__ )
98 #define M68K_FP_STATE_SIZE 16
100 #define M68K_FP_STATE_SIZE 216
126 #if defined( __mcoldfire__ ) && ( M68K_HAS_FPU == 1 )
131#define _CPU_Context_Get_SP( _context ) \
138#if ( CPU_SOFTWARE_FP == TRUE )
146 uint16_t _exception_bits;
147 uint16_t _trap_enable_bits;
148 uint16_t _sticky_bits;
149 uint16_t _rounding_mode;
151 uint16_t _last_operation;
162 #define _CPU_Context_Initialize_fp( _fp_area ) \
164 Context_Control_fp *_fp; \
165 _fp = *(Context_Control_fp **)_fp_area; \
166 _fp->_exception_bits = 0; \
167 _fp->_trap_enable_bits = 0; \
168 _fp->_sticky_bits = 0; \
169 _fp->_rounding_mode = 0; \
171 _fp->_last_operation = 0; \
172 _fp->_operand1.df = 0; \
173 _fp->_operand2.df = 0; \
177#if ( CPU_HARDWARE_FP == TRUE )
178 #if defined( __mcoldfire__ )
182 #if ( M68K_HAS_FPU == 1 )
188 extern uint32_t _CPU_cacr_shadow;
198 uint32_t emac_accext01;
199 uint32_t emac_accext23;
201 #if ( M68K_HAS_FPU == 1 )
202 uint16_t fp_state_format;
203 uint16_t fp_state_fpcr;
205 uint32_t fp_state_fpsr;
224 #define _CPU_Context_Initialize_fp( _fp_area ) \
225 memset( *(_fp_area), 0, sizeof( Context_Control_fp ) )
238 uint8_t fp_save_area [M68K_FP_STATE_SIZE + 112];
246 #define _CPU_Context_Initialize_fp( _fp_area ) \
248 uint32_t *_fp_context = (uint32_t *) \
249 ( (uintptr_t) *( _fp_area ) + CPU_CONTEXT_FP_SIZE - 4 ); \
250 *(--(_fp_context)) = 0; \
251 *(_fp_area) = (void *)(_fp_context); \
271 uint32_t d0, d1, d2, d3, d4, d5, d6, d7;
272 uint32_t a0, a1, a2, a3, a4, a5, a6, a7;
288#define CPU_MODES_INTERRUPT_MASK 0x00000007
294#define CPU_CONTEXT_FP_SIZE sizeof( Context_Control_fp )
300#define CPU_MPCI_RECEIVE_SERVER_EXTRA_STACK 1024
306#define CPU_INTERRUPT_NUMBER_OF_VECTORS 256
307#define CPU_INTERRUPT_MAXIMUM_VECTOR_NUMBER (CPU_INTERRUPT_NUMBER_OF_VECTORS - 1)
314#define CPU_PROVIDES_ISR_IS_IN_PROGRESS FALSE
320#define CPU_STACK_MINIMUM_SIZE M68K_CPU_STACK_MINIMUM_SIZE
325#define CPU_PRIORITY_MAXIMUM M68K_CPU_PRIORITY_MAXIMUM
327#define CPU_SIZEOF_POINTER 4
333#define CPU_ALIGNMENT 4
334#define CPU_HEAP_ALIGNMENT CPU_ALIGNMENT
341#define CPU_STACK_ALIGNMENT 0
343#define CPU_INTERRUPT_STACK_ALIGNMENT CPU_CACHE_LINE_BYTES
360#define _CPU_Initialize_vectors()
362#define _CPU_ISR_Disable( _level ) \
363 m68k_disable_interrupts( _level )
365#define _CPU_ISR_Enable( _level ) \
366 m68k_enable_interrupts( _level )
368#define _CPU_ISR_Flash( _level ) \
369 m68k_flash_interrupts( _level )
373 return ( level & 0x0700 ) == 0;
376#define _CPU_ISR_Set_level( _newlevel ) \
377 m68k_set_interrupt_level( _newlevel )
395 void *stack_area_begin,
396 size_t stack_area_size,
398 void (*entry_point)(
void ),
414#if ( defined(__mcoldfire__) )
415#define _CPU_Fatal_halt( _source, _error ) \
416 { __asm__ volatile( "move.w %%sr,%%d0\n\t" \
418 "move.w %%d0,%%sr\n\t" \
419 "move.l %1,%%d0\n\t" \
420 "move.l #0xDEADBEEF,%%d1\n\t" \
423 : "0" (_error), "d"(0x0700) \
427#define _CPU_Fatal_halt( _source, _error ) \
428 { __asm__ volatile( "movl %0,%%d0; " \
429 "orw #0x0700,%%sr; " \
430 "stop #0x2700" : "=d" ((_error)) : "0" ((_error)) ); \
450#define CPU_USE_GENERIC_BITFIELD_CODE FALSE
452#if ( M68K_HAS_BFFFO != 1 )
456extern const unsigned char _CPU_m68k_BFFFO_table[256];
459#if ( M68K_HAS_BFFFO == 1 )
461#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
462 __asm__ volatile( "bfffo (%1),#0,#16,%0" : "=d" (_output) : "a" (&_value));
464#elif ( __mcfisaaplus__ )
466#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
478#if ( defined(__mcoldfire__) )
480#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
489 " move.b (%3,%1),%0\n" \
491 "1: move.w %2,%1\n" \
492 " move.b (%3,%1),%0\n" \
494 "0: and.l #0xff,%0\n" \
495 : "=&d" ((_output)), "=&d" ((dumby)) \
496 : "d" ((_value)), "ao" ((_CPU_m68k_BFFFO_table)) \
499#elif ( M68K_HAS_EXTB_L == 1 )
500#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
504 __asm__ volatile ( " move.w %2,%1\n" \
507 " move.b (%3,%1.w),%0\n" \
510 "1: moveq.l #8,%0\n" \
511 " add.b (%3,%2.w),%0\n" \
513 : "=&d" ((_output)), "=&d" ((dumby)) \
514 : "d" ((_value)), "ao" ((_CPU_m68k_BFFFO_table)) \
518#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
522 __asm__ volatile ( " move.w %2,%1\n" \
525 " move.b (%3,%1.w),%0\n" \
526 " and.l #0x000000ff,%0\n"\
528 "1: moveq.l #8,%0\n" \
529 " add.b (%3,%2.w),%0\n" \
531 : "=&d" ((_output)), "=&d" ((dumby)) \
532 : "d" ((_value)), "ao" ((_CPU_m68k_BFFFO_table)) \
551#define _CPU_Priority_Mask( _bit_number ) \
552 ( 0x8000 >> (_bit_number) )
554#define _CPU_Priority_bits_index( _priority ) \
569typedef void ( *CPU_ISR_raw_handler )( void );
573 CPU_ISR_raw_handler new_handler,
574 CPU_ISR_raw_handler *old_handler
577typedef void ( *CPU_ISR_handler )( uint32_t );
581 CPU_ISR_handler new_handler,
582 CPU_ISR_handler *old_handler
635static inline CPU_Counter_ticks _CPU_Counter_difference(
636 CPU_Counter_ticks second,
637 CPU_Counter_ticks first
640 return second - first;
643#if (M68K_HAS_FPSP_PACKAGE == 1)
669void M68KFPSPInstallExceptionHandlers (
void);
671extern int (*_FPSP_install_raw_handler)(
673 CPU_ISR_raw_handler new_handler,
674 CPU_ISR_raw_handler *old_handler
#define _CPU_Context_Restart_self(_the_context)
Definition: cpu.h:480
#define RTEMS_NO_RETURN
Definition: basedefs.h:102
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:66
bool _CPU_ISR_Is_enabled(uint32_t level)
Returns true if interrupts are enabled in the specified ISR level, otherwise returns false.
Definition: cpu.h:375
void * _CPU_Thread_Idle_body(uintptr_t ignored)
Definition: idle-mcf5272.c:20
void _CPU_Initialize(void)
CPU initialization.
Definition: cpu.c:45
uintptr_t CPU_Uint32ptr
Definition: cpu.h:662
RTEMS_INLINE_ROUTINE void _CPU_ISR_install_vector(uint32_t vector, CPU_ISR_handler new_handler, CPU_ISR_handler *old_handler)
SPARC specific RTEMS ISR installer.
Definition: cpu.h:493
uint32_t _CPU_Counter_frequency(void)
Returns the current CPU counter frequency in Hz.
Definition: system-clocks.c:112
void _CPU_Context_switch(Context_Control *run, Context_Control *heir)
CPU switch context.
Definition: cpu_asm.c:91
CPU_Counter_ticks _CPU_Counter_read(void)
Returns the current CPU counter value.
Definition: system-clocks.c:117
uint32_t _CPU_ISR_Get_level(void)
Definition: cpu.c:88
void _CPU_Context_Initialize(Context_Control *context, void *stack_area_begin, size_t stack_area_size, uint32_t new_level, void(*entry_point)(void), bool is_fp, void *tls_area)
Initializes the CPU context.
Definition: epiphany-context-initialize.c:40
void _CPU_Exception_frame_print(const CPU_Exception_frame *frame)
Prints the exception frame via printk().
Definition: vectorexceptions.c:45
RTEMS_INLINE_ROUTINE void _CPU_ISR_install_raw_handler(uint32_t vector, CPU_ISR_raw_handler new_handler, CPU_ISR_raw_handler *old_handler)
SPARC specific raw ISR installer.
Definition: cpu.h:649
#define pc
pc, used on mips16 */
Definition: regs.h:67
Motorola M68K CPU Dependent Source.
uint32_t CPU_Counter_ticks
Unsigned integer type for CPU counter values.
Definition: cpu.h:1210
#define _CPU_Context_restore_fp(_fp_context_ptr)
Nothing to do due to the synchronous or lazy floating point switch.
Definition: cpu.h:904
#define _CPU_Context_save_fp(_fp_context_ptr)
Nothing to do due to the synchronous or lazy floating point switch.
Definition: cpu.h:898
The set of registers that specifies the complete processor state.
Definition: cpu.h:629
Interrupt stack frame (ISF).
Definition: cpu.h:191
SPARC basic context.
Definition: cpu.h:194
Thread register context.
Definition: cpu.h:194