RTEMS 6.1-rc1
|
This header file provides information required to build RTEMS for a particular member of the SPARC family. More...
#include <rtems/score/basedefs.h>
Go to the source code of this file.
Macros | |
#define | SPARC_HAS_BITSCAN 0 |
#define | SPARC_NUMBER_OF_REGISTER_WINDOWS 8 |
#define | SPARC_LEON3FT_B2BST_NOP |
#define | SPARC_HAS_FPU 1 |
#define | CPU_MODEL_NAME "w/FPU" |
#define | CPU_NAME "SPARC" |
#define | SPARC_PSR_CWP_MASK 0x07 /* bits 0 - 4 */ |
#define | SPARC_PSR_ET_MASK 0x00000020 /* bit 5 */ |
#define | SPARC_PSR_PS_MASK 0x00000040 /* bit 6 */ |
#define | SPARC_PSR_S_MASK 0x00000080 /* bit 7 */ |
#define | SPARC_PSR_PIL_MASK 0x00000F00 /* bits 8 - 11 */ |
#define | SPARC_PSR_EF_MASK 0x00001000 /* bit 12 */ |
#define | SPARC_PSR_EC_MASK 0x00002000 /* bit 13 */ |
#define | SPARC_PSR_ICC_MASK 0x00F00000 /* bits 20 - 23 */ |
#define | SPARC_PSR_VER_MASK 0x0F000000 /* bits 24 - 27 */ |
#define | SPARC_PSR_IMPL_MASK 0xF0000000 /* bits 28 - 31 */ |
#define | SPARC_PSR_CWP_BIT_POSITION 0 /* bits 0 - 4 */ |
#define | SPARC_PSR_ET_BIT_POSITION 5 /* bit 5 */ |
#define | SPARC_PSR_PS_BIT_POSITION 6 /* bit 6 */ |
#define | SPARC_PSR_S_BIT_POSITION 7 /* bit 7 */ |
#define | SPARC_PSR_PIL_BIT_POSITION 8 /* bits 8 - 11 */ |
#define | SPARC_PSR_EF_BIT_POSITION 12 /* bit 12 */ |
#define | SPARC_PSR_EC_BIT_POSITION 13 /* bit 13 */ |
#define | SPARC_PSR_ICC_BIT_POSITION 20 /* bits 20 - 23 */ |
#define | SPARC_PSR_VER_BIT_POSITION 24 /* bits 24 - 27 */ |
#define | SPARC_PSR_IMPL_BIT_POSITION 28 /* bits 28 - 31 */ |
#define | LEON3_ASR17_PROCESSOR_INDEX_SHIFT 28 |
#define | SPARC_SWTRAP_SYSCALL 0 |
#define | SPARC_SWTRAP_IRQDIS 9 |
#define | SPARC_SWTRAP_IRQEN 10 |
#define | SPARC_SWTRAP_IRQDIS_FP 11 |
#define | SPARC_SYNCHRONOUS_TRAP_BIT_MASK 0x100 |
This is the bit step in a vector number to indicate it is being installed as a synchronous trap. | |
#define | SPARC_ASYNCHRONOUS_TRAP(_vector) ( _vector ) |
Maps the real hardware vector number to the associated asynchronous trap number. More... | |
#define | SPARC_SYNCHRONOUS_TRAP(_vector) ( ( _vector ) + 256 ) |
Maps the real hardware vector number to the associated synchronous trap number. More... | |
#define | SPARC_REAL_TRAP_NUMBER(_trap) ( ( _trap ) % 256 ) |
Maps the synchronous or asynchronous trap number to the associated real hardware vector number. More... | |
#define | SPARC_IS_INTERRUPT_TRAP(_trap) |
Checks if the real hardware vector number, synchronous trap number, or asynchronous trap number is an interrupt trap. More... | |
#define | SPARC_INTERRUPT_TRAP_TO_SOURCE(_trap) ( SPARC_REAL_TRAP_NUMBER( _trap ) - 0x10 ) |
Maps the interrupt trap number to the associated interrupt source number. More... | |
#define | SPARC_INTERRUPT_SOURCE_TO_TRAP(_source) ( SPARC_ASYNCHRONOUS_TRAP( _source ) + 0x10 ) |
Maps the interrupt source number to the associated asynchronous trap number. More... | |
#define | nop() |
#define | sparc_get_psr(_psr) |
Macro to obtain the PSR. More... | |
#define | sparc_set_psr(_psr) |
Macro to set the PSR. More... | |
#define | sparc_get_tbr(_tbr) |
Macro to obtain the TBR. More... | |
#define | sparc_set_tbr(_tbr) |
Macro to set the TBR. More... | |
#define | sparc_get_wim(_wim) |
Macro to obtain the WIM. More... | |
#define | sparc_set_wim(_wim) |
Macro to set the WIM. More... | |
#define | sparc_get_y(_y) |
Macro to obtain the Y register. More... | |
#define | sparc_set_y(_y) |
Macro to set the Y register. More... | |
#define | sparc_flash_interrupts(_psr) |
SPARC flash processor interrupts. More... | |
#define | sparc_get_interrupt_level(_level) |
SPARC obtain interrupt level. More... | |
Functions | |
RTEMS_NO_RETURN void | sparc_syscall_exit (uint32_t exitcode1, uint32_t exitcode2) |
SPARC exit through system call 1. More... | |
This header file provides information required to build RTEMS for a particular member of the SPARC family.
This file contains the information required to build RTEMS for a particular member of the SPARC family. It does this by setting variables to indicate which implementation dependent features are present in a particular member of the family.
#define CPU_MODEL_NAME "w/FPU" |
This macro contains a string describing the multilib variant being build.
#define CPU_NAME "SPARC" |
Define the name of the CPU family.
#define nop | ( | ) |
This macro is a standard nop instruction.
#define SPARC_ASYNCHRONOUS_TRAP | ( | _vector | ) | ( _vector ) |
Maps the real hardware vector number to the associated asynchronous trap number.
_vector | is the real hardware vector number to map. |
#define sparc_flash_interrupts | ( | _psr | ) |
SPARC flash processor interrupts.
This method is invoked to temporarily enable all maskable interrupts.
[in] | _psr | is the PSR returned by sparc_disable_interrupts. |
#define sparc_get_interrupt_level | ( | _level | ) |
SPARC obtain interrupt level.
This method is invoked to obtain the current interrupt disable level.
[in] | _level | is the PSR returned by sparc_disable_interrupts. |
#define sparc_get_psr | ( | _psr | ) |
Macro to obtain the PSR.
This macro returns the current contents of the PSR register in _psr.
#define sparc_get_tbr | ( | _tbr | ) |
Macro to obtain the TBR.
This macro returns the current contents of the TBR register in _tbr.
#define sparc_get_wim | ( | _wim | ) |
Macro to obtain the WIM.
This macro returns the current contents of the WIM field in _wim.
#define sparc_get_y | ( | _y | ) |
Macro to obtain the Y register.
This macro returns the current contents of the Y register in _y.
#define SPARC_HAS_BITSCAN 0 |
Some higher end SPARCs have a bitscan instructions. It would be nice to take advantage of them. Right now, there is no port to a CPU model with this feature and no (untested) code that is based on this feature flag.
#define SPARC_HAS_FPU 1 |
This macro indicates whether this multilib variation has hardware floating point or not. We use the gcc cpp predefine _SOFT_FLOAT to determine that.
#define SPARC_INTERRUPT_SOURCE_TO_TRAP | ( | _source | ) | ( SPARC_ASYNCHRONOUS_TRAP( _source ) + 0x10 ) |
Maps the interrupt source number to the associated asynchronous trap number.
_source | is the interrupt source number to map. |
#define SPARC_INTERRUPT_TRAP_TO_SOURCE | ( | _trap | ) | ( SPARC_REAL_TRAP_NUMBER( _trap ) - 0x10 ) |
Maps the interrupt trap number to the associated interrupt source number.
Interrupt trap numbers are real hardware vector numbers, synchronous trap numbers, and asynchronous trap numbers for which SPARC_IS_INTERRUPT_TRAP() returns true.
_trap | is the real hardware vector number, synchronous trap number, or asynchronous trap number to map. |
#define SPARC_IS_INTERRUPT_TRAP | ( | _trap | ) |
Checks if the real hardware vector number, synchronous trap number, or asynchronous trap number is an interrupt trap.
Interrupt traps are defined by Table 7-1 "Exception and Interrupt Request Priority and tt Values" in "The SPARC Architecture Manual: Version 8".
_trap | is the real hardware vector number, synchronous trap number, or asynchronous trap number to check. |
#define SPARC_LEON3FT_B2BST_NOP |
See GRLIB-TN-0009: "LEON3FT Stale Cache Entry After Store with Data Tag Parity Error"
#define SPARC_NUMBER_OF_REGISTER_WINDOWS 8 |
This should be OK until a port to a higher end SPARC processor is made that has more than 8 register windows. If this cannot be determined based on multilib settings (v7/v8/v9), then the cpu_asm.S code that depends on this will have to move to libcpu.
#define SPARC_PSR_CWP_BIT_POSITION 0 /* bits 0 - 4 */ |
This constant is the starting bit position of the CWP in the PSR.
#define SPARC_PSR_CWP_MASK 0x07 /* bits 0 - 4 */ |
PSR masks and starting bit positions
NOTE: Reserved bits are ignored.
#define SPARC_PSR_EC_BIT_POSITION 13 /* bit 13 */ |
This constant is the starting bit position of the EC in the PSR.
#define SPARC_PSR_EC_MASK 0x00002000 /* bit 13 */ |
This constant is a mask for the EC bits in the PSR.
#define SPARC_PSR_EF_BIT_POSITION 12 /* bit 12 */ |
This constant is the starting bit position of the EF in the PSR.
#define SPARC_PSR_EF_MASK 0x00001000 /* bit 12 */ |
This constant is a mask for the EF bits in the PSR.
#define SPARC_PSR_ET_BIT_POSITION 5 /* bit 5 */ |
This constant is the starting bit position of the ET in the PSR.
#define SPARC_PSR_ET_MASK 0x00000020 /* bit 5 */ |
This constant is a mask for the ET bits in the PSR.
#define SPARC_PSR_ICC_BIT_POSITION 20 /* bits 20 - 23 */ |
This constant is the starting bit position of the ICC in the PSR.
#define SPARC_PSR_ICC_MASK 0x00F00000 /* bits 20 - 23 */ |
This constant is a mask for the ICC bits in the PSR.
#define SPARC_PSR_IMPL_BIT_POSITION 28 /* bits 28 - 31 */ |
This constant is the starting bit position of the IMPL in the PSR.
#define SPARC_PSR_IMPL_MASK 0xF0000000 /* bits 28 - 31 */ |
This constant is a mask for the IMPL bits in the PSR.
#define SPARC_PSR_PIL_BIT_POSITION 8 /* bits 8 - 11 */ |
This constant is the starting bit position of the PIL in the PSR.
#define SPARC_PSR_PIL_MASK 0x00000F00 /* bits 8 - 11 */ |
This constant is a mask for the PIL bits in the PSR.
#define SPARC_PSR_PS_BIT_POSITION 6 /* bit 6 */ |
This constant is the starting bit position of the PS in the PSR.
#define SPARC_PSR_PS_MASK 0x00000040 /* bit 6 */ |
This constant is a mask for the PS bits in the PSR.
#define SPARC_PSR_S_BIT_POSITION 7 /* bit 7 */ |
This constant is the starting bit position of the S in the PSR.
#define SPARC_PSR_S_MASK 0x00000080 /* bit 7 */ |
This constant is a mask for the S bits in the PSR.
#define SPARC_PSR_VER_BIT_POSITION 24 /* bits 24 - 27 */ |
This constant is the starting bit position of the VER in the PSR.
#define SPARC_PSR_VER_MASK 0x0F000000 /* bits 24 - 27 */ |
This constant is a mask for the VER bits in the PSR.
#define SPARC_REAL_TRAP_NUMBER | ( | _trap | ) | ( ( _trap ) % 256 ) |
Maps the synchronous or asynchronous trap number to the associated real hardware vector number.
_trap | is the synchronous or asynchronous trap number to map. |
#define sparc_set_psr | ( | _psr | ) |
Macro to set the PSR.
This macro sets the PSR register to the value in _psr.
#define sparc_set_tbr | ( | _tbr | ) |
Macro to set the TBR.
This macro sets the TBR register to the value in _tbr.
#define sparc_set_wim | ( | _wim | ) |
Macro to set the WIM.
This macro sets the WIM field to the value in _wim.
#define sparc_set_y | ( | _y | ) |
Macro to set the Y register.
This macro sets the Y register to the value in _y.
#define SPARC_SYNCHRONOUS_TRAP | ( | _vector | ) | ( ( _vector ) + 256 ) |
Maps the real hardware vector number to the associated synchronous trap number.
_vector | is the real hardware vector number to map. |
RTEMS_NO_RETURN void sparc_syscall_exit | ( | uint32_t | exitcode1, |
uint32_t | exitcode2 | ||
) |
SPARC exit through system call 1.
This method is invoked to go into system error halt. The optional arguments can be given to hypervisor, hardware debugger, simulator or similar.
System error mode is entered when taking a trap when traps have been disabled. What happens when error mode is entered depends on the motherboard. In a typical development systems the CPU relingish control to the debugger, simulator, hypervisor or similar. The following steps are taken:
This function never returns.
[in] | exitcode1 | Primary exit code stored in CPU g2 register after exit |
[in] | exitcode2 | Primary exit code stored in CPU g3 register after exit |