forked from Imagelibrary/rtems
Added CPU_ISR_PASSES_FRAME_POINTER so some ports could pass just the
vector number to user ISR's and other ports could pass both the vector number and a pointer to the ISF.
This commit is contained in:
@@ -159,6 +159,14 @@ extern void a29k_sigdfl_sup(void);
|
||||
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK FALSE
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 0
|
||||
|
||||
/*
|
||||
* Does the CPU have hardware floating point?
|
||||
*
|
||||
|
||||
@@ -40,6 +40,14 @@ extern "C" {
|
||||
#define CPU_HAS_HARDWARE_INTERRUPT_STACK FALSE
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK TRUE
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 0
|
||||
|
||||
/*
|
||||
* HPPA has hardware FP, it is assumed to exist by GCC so all tasks
|
||||
* may implicitly use it (especially for integer multiplies). Because
|
||||
|
||||
@@ -39,6 +39,14 @@ extern "C" {
|
||||
#define CPU_HAS_HARDWARE_INTERRUPT_STACK FALSE
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK TRUE
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 0
|
||||
|
||||
/*
|
||||
* Some family members have no FP, some have an FPU such as the i387
|
||||
* for the i386, others have it built in (i486DX, Pentium).
|
||||
|
||||
@@ -40,6 +40,14 @@ extern "C" {
|
||||
#define CPU_HAS_HARDWARE_INTERRUPT_STACK TRUE
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK TRUE
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 0
|
||||
|
||||
/*
|
||||
* Some family members have no FP (SA/KA/CA/CF), others have it built in
|
||||
* (KB/MC/MX). There does not appear to be an external coprocessor
|
||||
|
||||
@@ -46,6 +46,14 @@ extern "C" {
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK 1
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 0
|
||||
|
||||
/*
|
||||
* Some family members have no FP, some have an FPU such as the
|
||||
* MC68881/MC68882 for the MC68020, others have it built in (MC68030, 040).
|
||||
|
||||
@@ -146,6 +146,14 @@ extern void mips_fatal_error ( int error );
|
||||
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK FALSE
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 0
|
||||
|
||||
/*
|
||||
* Does the CPU have hardware floating point?
|
||||
*
|
||||
|
||||
@@ -122,6 +122,14 @@ extern "C" {
|
||||
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK TRUE
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 0
|
||||
|
||||
/*
|
||||
* Does the CPU have hardware floating point?
|
||||
*
|
||||
|
||||
@@ -146,6 +146,14 @@ struct CPU_Interrupt_frame;
|
||||
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK TRUE
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 1
|
||||
|
||||
/*
|
||||
* Does the CPU have hardware floating point?
|
||||
*
|
||||
@@ -1094,6 +1102,38 @@ static inline unsigned int CPU_swap_u32(
|
||||
#define CPU_swap_u16( value ) \
|
||||
(((value&0xff) << 8) | ((value >> 8)&0xff))
|
||||
|
||||
/*
|
||||
* Routines to access the decrementer register
|
||||
*/
|
||||
|
||||
#define PPC_Set_decrementer( _clicks ) \
|
||||
do { \
|
||||
asm volatile( "mtdec %0" : "=r" ((_clicks)) : "r" ((_clicks)) ); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Routines to access the time base register
|
||||
*/
|
||||
|
||||
static inline unsigned64 PPC_Get_timebase_register( void )
|
||||
{
|
||||
unsigned32 tbr_low;
|
||||
unsigned32 tbr_high;
|
||||
unsigned32 tbr_high_old;
|
||||
unsigned64 tbr;
|
||||
|
||||
do {
|
||||
asm volatile( "mftbu %0" : "=r" (tbr_high_old));
|
||||
asm volatile( "mftb %0" : "=r" (tbr_low));
|
||||
asm volatile( "mftbu %0" : "=r" (tbr_high));
|
||||
} while ( tbr_high_old != tbr_high );
|
||||
|
||||
tbr = tbr_high;
|
||||
tbr <<= 32;
|
||||
tbr |= tbr_low;
|
||||
return tbr;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -108,6 +108,13 @@ extern "C" {
|
||||
*/
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK FALSE
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 0
|
||||
|
||||
/*
|
||||
* Does the CPU have hardware floating point?
|
||||
|
||||
@@ -93,6 +93,14 @@ extern "C" {
|
||||
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK TRUE
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 0
|
||||
|
||||
/*
|
||||
* Does the CPU have hardware floating point?
|
||||
*
|
||||
|
||||
@@ -133,6 +133,14 @@ extern "C" {
|
||||
|
||||
#define CPU_ALLOCATE_INTERRUPT_STACK FALSE
|
||||
|
||||
/*
|
||||
* Does the RTEMS invoke the user's ISR with the vector number and
|
||||
* a pointer to the saved interrupt frame (1) or just the vector
|
||||
* number (0)?
|
||||
*/
|
||||
|
||||
#define CPU_ISR_PASSES_FRAME_POINTER 0
|
||||
|
||||
/*
|
||||
* Does the CPU have hardware floating point?
|
||||
*
|
||||
|
||||
@@ -46,9 +46,16 @@ typedef void ISR_Handler;
|
||||
* Pointer to an ISR Handler
|
||||
*/
|
||||
|
||||
#if (CPU_ISR_PASSES_FRAME_POINTER == 1)
|
||||
typedef ISR_Handler ( *ISR_Handler_entry )(
|
||||
ISR_Vector_number,
|
||||
CPU_Interrupt_frame *
|
||||
);
|
||||
#else
|
||||
typedef ISR_Handler ( *ISR_Handler_entry )(
|
||||
ISR_Vector_number
|
||||
);
|
||||
#endif
|
||||
/*
|
||||
* This constant promotes out the number of vectors truly supported by
|
||||
* the current CPU being used. This is usually the number of distinct vectors
|
||||
|
||||
@@ -46,9 +46,16 @@ typedef void ISR_Handler;
|
||||
* Pointer to an ISR Handler
|
||||
*/
|
||||
|
||||
#if (CPU_ISR_PASSES_FRAME_POINTER == 1)
|
||||
typedef ISR_Handler ( *ISR_Handler_entry )(
|
||||
ISR_Vector_number,
|
||||
CPU_Interrupt_frame *
|
||||
);
|
||||
#else
|
||||
typedef ISR_Handler ( *ISR_Handler_entry )(
|
||||
ISR_Vector_number
|
||||
);
|
||||
#endif
|
||||
/*
|
||||
* This constant promotes out the number of vectors truly supported by
|
||||
* the current CPU being used. This is usually the number of distinct vectors
|
||||
|
||||
Reference in New Issue
Block a user