RTEMS 6.1-rc7
Loading...
Searching...
No Matches
Macros | Functions

This source file contains static assertions to ensure the consistency of interfaces used in C and assembler and it contains the SPARC-specific implementation of _CPU_Initialize(), _CPU_ISR_Get_level(), and _CPU_Context_Initialize(). More...

#include <rtems/score/percpu.h>
#include <rtems/score/tls.h>
#include <rtems/score/thread.h>

Macros

#define SPARC_ASSERT_OFFSET(field, off)
 
#define SPARC_ASSERT_ISF_OFFSET(field, off)
 
#define SPARC_ASSERT_FP_OFFSET(field, off)
 
#define SPARC_ASSERT_REGISTER_WINDOW_OFFSET(member, off)
 
#define SPARC_ASSERT_EXCEPTION_OFFSET(member, off)
 

Functions

 SPARC_ASSERT_OFFSET (g5, G5)
 
 SPARC_ASSERT_OFFSET (g7, G7)
 
 RTEMS_STATIC_ASSERT (offsetof(Context_Control, l0_and_l1)==L0_OFFSET, Context_Control_offset_L0)
 
 RTEMS_STATIC_ASSERT (offsetof(Context_Control, l0_and_l1)+4==L1_OFFSET, Context_Control_offset_L1)
 
 SPARC_ASSERT_OFFSET (l2, L2)
 
 SPARC_ASSERT_OFFSET (l3, L3)
 
 SPARC_ASSERT_OFFSET (l4, L4)
 
 SPARC_ASSERT_OFFSET (l5, L5)
 
 SPARC_ASSERT_OFFSET (l6, L6)
 
 SPARC_ASSERT_OFFSET (l7, L7)
 
 SPARC_ASSERT_OFFSET (i0, I0)
 
 SPARC_ASSERT_OFFSET (i1, I1)
 
 SPARC_ASSERT_OFFSET (i2, I2)
 
 SPARC_ASSERT_OFFSET (i3, I3)
 
 SPARC_ASSERT_OFFSET (i4, I4)
 
 SPARC_ASSERT_OFFSET (i5, I5)
 
 SPARC_ASSERT_OFFSET (i6_fp, I6_FP)
 
 SPARC_ASSERT_OFFSET (i7, I7)
 
 SPARC_ASSERT_OFFSET (o6_sp, O6_SP)
 
 SPARC_ASSERT_OFFSET (o7, O7)
 
 SPARC_ASSERT_OFFSET (psr, PSR)
 
 SPARC_ASSERT_OFFSET (isr_dispatch_disable, ISR_DISPATCH_DISABLE_STACK)
 
 SPARC_ASSERT_ISF_OFFSET (psr, PSR)
 
 SPARC_ASSERT_ISF_OFFSET (pc, PC)
 
 SPARC_ASSERT_ISF_OFFSET (npc, NPC)
 
 SPARC_ASSERT_ISF_OFFSET (g1, G1)
 
 SPARC_ASSERT_ISF_OFFSET (g2, G2)
 
 SPARC_ASSERT_ISF_OFFSET (g3, G3)
 
 SPARC_ASSERT_ISF_OFFSET (g4, G4)
 
 SPARC_ASSERT_ISF_OFFSET (g5, G5)
 
 SPARC_ASSERT_ISF_OFFSET (g7, G7)
 
 SPARC_ASSERT_ISF_OFFSET (i0, I0)
 
 SPARC_ASSERT_ISF_OFFSET (i1, I1)
 
 SPARC_ASSERT_ISF_OFFSET (i2, I2)
 
 SPARC_ASSERT_ISF_OFFSET (i3, I3)
 
 SPARC_ASSERT_ISF_OFFSET (i4, I4)
 
 SPARC_ASSERT_ISF_OFFSET (i5, I5)
 
 SPARC_ASSERT_ISF_OFFSET (i6_fp, I6_FP)
 
 SPARC_ASSERT_ISF_OFFSET (i7, I7)
 
 SPARC_ASSERT_ISF_OFFSET (y, Y)
 
 SPARC_ASSERT_ISF_OFFSET (tpc, TPC)
 
 SPARC_ASSERT_FP_OFFSET (f0_f1, F0_F1)
 
 SPARC_ASSERT_FP_OFFSET (f2_f3, F2_F3)
 
 SPARC_ASSERT_FP_OFFSET (f4_f5, F4_F5)
 
 SPARC_ASSERT_FP_OFFSET (f6_f7, F6_F7)
 
 SPARC_ASSERT_FP_OFFSET (f8_f9, F8_F9)
 
 SPARC_ASSERT_FP_OFFSET (f10_f11, F10_F11)
 
 SPARC_ASSERT_FP_OFFSET (f12_f13, F12_F13)
 
 SPARC_ASSERT_FP_OFFSET (f14_f15, F14_F15)
 
 SPARC_ASSERT_FP_OFFSET (f16_f17, F16_F17)
 
 SPARC_ASSERT_FP_OFFSET (f18_f19, F18_F19)
 
 SPARC_ASSERT_FP_OFFSET (f20_f21, F20_F21)
 
 SPARC_ASSERT_FP_OFFSET (f22_f23, F22_F23)
 
 SPARC_ASSERT_FP_OFFSET (f24_f25, F24_F25)
 
 SPARC_ASSERT_FP_OFFSET (f26_f27, F26_F27)
 
 SPARC_ASSERT_FP_OFFSET (f28_f29, F28_F29)
 
 SPARC_ASSERT_FP_OFFSET (f30_f31, F30_F31)
 
 SPARC_ASSERT_FP_OFFSET (fsr, FSR)
 
 RTEMS_STATIC_ASSERT (sizeof(SPARC_Minimum_stack_frame)==SPARC_MINIMUM_STACK_FRAME_SIZE, SPARC_MINIMUM_STACK_FRAME_SIZE)
 
 RTEMS_STATIC_ASSERT (sizeof(CPU_Interrupt_frame) % CPU_ALIGNMENT==0, CPU_Interrupt_frame_alignment)
 
 SPARC_ASSERT_REGISTER_WINDOW_OFFSET (local[0], LOCAL(0))
 
 SPARC_ASSERT_REGISTER_WINDOW_OFFSET (local[1], LOCAL(1))
 
 SPARC_ASSERT_REGISTER_WINDOW_OFFSET (input[0], INPUT(0))
 
 SPARC_ASSERT_REGISTER_WINDOW_OFFSET (input[1], INPUT(1))
 
 RTEMS_STATIC_ASSERT (sizeof(SPARC_Register_window)==SPARC_REGISTER_WINDOW_SIZE, SPARC_REGISTER_WINDOW_SIZE)
 
 SPARC_ASSERT_EXCEPTION_OFFSET (psr, PSR)
 
 SPARC_ASSERT_EXCEPTION_OFFSET (pc, PC)
 
 SPARC_ASSERT_EXCEPTION_OFFSET (npc, NPC)
 
 SPARC_ASSERT_EXCEPTION_OFFSET (trap, TRAP)
 
 SPARC_ASSERT_EXCEPTION_OFFSET (wim, WIM)
 
 SPARC_ASSERT_EXCEPTION_OFFSET (y, Y)
 
 SPARC_ASSERT_EXCEPTION_OFFSET (global[0], GLOBAL(0))
 
 SPARC_ASSERT_EXCEPTION_OFFSET (global[1], GLOBAL(1))
 
 SPARC_ASSERT_EXCEPTION_OFFSET (output[0], OUTPUT(0))
 
 SPARC_ASSERT_EXCEPTION_OFFSET (output[1], OUTPUT(1))
 
 RTEMS_STATIC_ASSERT (sizeof(CPU_Exception_frame)==SPARC_EXCEPTION_FRAME_SIZE, SPARC_EXCEPTION_FRAME_SIZE)
 
 RTEMS_STATIC_ASSERT (sizeof(CPU_Exception_frame) % CPU_ALIGNMENT==0, CPU_Exception_frame_alignment)
 
void _CPU_Initialize (void)
 CPU initialization.
 
uint32_t _CPU_ISR_Get_level (void)
 Returns the interrupt level of the executing thread.
 
void _CPU_Context_Initialize (Context_Control *the_context, uint32_t *stack_base, uint32_t size, uint32_t new_level, void *entry_point, bool is_fp, void *tls_area)
 

Detailed Description

This source file contains static assertions to ensure the consistency of interfaces used in C and assembler and it contains the SPARC-specific implementation of _CPU_Initialize(), _CPU_ISR_Get_level(), and _CPU_Context_Initialize().

Macro Definition Documentation

◆ SPARC_ASSERT_EXCEPTION_OFFSET

#define SPARC_ASSERT_EXCEPTION_OFFSET (   member,
  off 
)
Value:
offsetof( CPU_Exception_frame, member ) == \
RTEMS_XCONCAT( SPARC_EXCEPTION_OFFSET_, off ), \
CPU_Exception_frame_offset_ ## member \
)
#define RTEMS_STATIC_ASSERT(_cond, _msg)
It is defined if a static analysis run is performed.
Definition: basedefs.h:841
#define RTEMS_XCONCAT(_x, _y)
Concatenates expansion of _x and expansion of _y.
Definition: basedefs.h:466
The set of registers that specifies the complete processor state.
Definition: cpu.h:446

◆ SPARC_ASSERT_FP_OFFSET

#define SPARC_ASSERT_FP_OFFSET (   field,
  off 
)
Value:
offsetof(Context_Control_fp, field) == SPARC_FP_CONTEXT_OFFSET_ ## off, \
Context_Control_fp_offset_ ## field \
)
SPARC basic context.
Definition: cpu.h:213

◆ SPARC_ASSERT_ISF_OFFSET

#define SPARC_ASSERT_ISF_OFFSET (   field,
  off 
)
Value:
offsetof(CPU_Interrupt_frame, field) == ISF_ ## off ## _OFFSET, \
CPU_Interrupt_frame_offset_ ## field \
)
Interrupt stack frame (ISF).
Definition: cpuimpl.h:64

◆ SPARC_ASSERT_OFFSET

#define SPARC_ASSERT_OFFSET (   field,
  off 
)
Value:
offsetof(Context_Control, field) == off ## _OFFSET, \
Context_Control_offset_ ## field \
)
Thread register context.
Definition: cpu.h:173

◆ SPARC_ASSERT_REGISTER_WINDOW_OFFSET

#define SPARC_ASSERT_REGISTER_WINDOW_OFFSET (   member,
  off 
)
Value:
offsetof( SPARC_Register_window, member ) == \
RTEMS_XCONCAT( SPARC_REGISTER_WINDOW_OFFSET_, off ), \
)
This structure contains the local and input registers of a register window.
Definition: cpu.h:1051

Function Documentation

◆ _CPU_Context_Initialize()

void _CPU_Context_Initialize ( Context_Control the_context,
uint32_t *  stack_base,
uint32_t  size,
uint32_t  new_level,
void *  entry_point,
bool  is_fp,
void *  tls_area 
)

Initialize the context to a state suitable for starting a task after a context restore operation. Generally, this involves:

  • setting a starting address
  • preparing the stack
  • preparing the stack and frame pointers
  • setting the proper interrupt level in the context
  • initializing the floating point context
Parameters
[in]the_contextpoints to the context area
[in]stack_baseis the low address of the allocated stack area
[in]sizeis the size of the stack area in bytes
[in]new_levelis the interrupt level for the task
[in]entry_pointis the task's entry point
[in]is_fpis set to TRUE if the task is a floating point task
[in]tls_areais the thread-local storage (TLS) area

NOTE: Implemented as a subroutine for the SPARC port.