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 ) 456 extern 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 ) \ 569 typedef void ( *CPU_ISR_raw_handler )( void );
573 CPU_ISR_raw_handler new_handler,
574 CPU_ISR_raw_handler *old_handler
577 typedef void ( *CPU_ISR_handler )( uint32_t );
581 CPU_ISR_handler new_handler,
582 CPU_ISR_handler *old_handler
635 static 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) 669 void M68KFPSPInstallExceptionHandlers (
void);
671 extern int (*_FPSP_install_raw_handler)(
673 CPU_ISR_raw_handler new_handler,
674 CPU_ISR_raw_handler *old_handler
void _CPU_Exception_frame_print(const CPU_Exception_frame *frame)
Prints the exception frame via printk().
Definition: vectorexceptions.c:45
CPU_Counter_ticks _CPU_Counter_read(void)
Returns the current CPU counter value.
Definition: system-clocks.c:117
Thread register context.
Definition: cpu.h:196
void * _CPU_Thread_Idle_body(uintptr_t ignored)
Definition: idle-mcf5272.c:20
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:65
void _CPU_Context_restore_fp(Context_Control_fp **fp_context_ptr)
Definition: cpu.c:207
Interrupt stack frame (ISF).
Definition: cpu.h:306
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_Context_switch(Context_Control *run, Context_Control *heir)
CPU switch context.
Definition: cpu_asm.c:91
#define _CPU_Context_Restart_self(_the_context)
Definition: cpu.h:618
void _CPU_Initialize(void)
CPU initialization.
Definition: cpu.c:45
#define pc
pc, used on mips16 */
Definition: regs.h:67
SPARC basic context.
Definition: cpu.h:242
uint32_t CPU_Counter_ticks
Unsigned integer type for CPU counter values.
Definition: cpu.h:1202
#define RTEMS_NO_RETURN
Definition: basedefs.h:101
uint32_t _CPU_ISR_Get_level(void)
Definition: cpu.c:88
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:703
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:381
Motorola M68K CPU Dependent Source.
uintptr_t CPU_Uint32ptr
Definition: cpu.h:668
uint32_t _CPU_Counter_frequency(void)
Returns the current CPU counter frequency in Hz.
Definition: system-clocks.c:112
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:605
void _CPU_Context_save_fp(Context_Control_fp **fp_context_ptr)
Definition: cpu.c:198
The set of registers that specifies the complete processor state.
Definition: cpu.h:635