RTEMS  5.0.0
Modules | Files | Macros | Typedefs | Enumerations | Functions | Variables
PowerPC Exceptions

Modules

 PowerPC Exception Frame
 

Files

file  vectors.h
 PowerPC Exceptions API.
 
file  ppc_exc_address.c
 PowerPC Exceptions implementation.
 
file  ppc_exc_categories.c
 PowerPC Exceptions implementation.
 
file  ppc_exc_global_handler.c
 PowerPC Exceptions implementation.
 
file  ppc_exc_initialize.c
 PowerPC Exceptions implementation.
 
file  ppc_exc_print.c
 PowerPC Exceptions implementation.
 
file  ppc_exc_prologue.c
 PowerPC Exceptions implementation.
 

Macros

#define ASM_RESET_VECTOR   0x01
 
#define ASM_MACH_VECTOR   0x02
 
#define ASM_PROT_VECTOR   0x03
 
#define ASM_ISI_VECTOR   0x04
 
#define ASM_EXT_VECTOR   0x05
 
#define ASM_ALIGN_VECTOR   0x06
 
#define ASM_PROG_VECTOR   0x07
 
#define ASM_FLOAT_VECTOR   0x08
 
#define ASM_DEC_VECTOR   0x09
 
#define ASM_SYS_VECTOR   0x0C
 
#define ASM_TRACE_VECTOR   0x0D
 
#define ASM_PPC405_APU_UNAVAIL_VECTOR   ASM_60X_VEC_ASSIST_VECTOR
 
#define ASM_8XX_FLOATASSIST_VECTOR   0x0E
 
#define ASM_8XX_SOFTEMUL_VECTOR   0x10
 
#define ASM_8XX_ITLBMISS_VECTOR   0x11
 
#define ASM_8XX_DTLBMISS_VECTOR   0x12
 
#define ASM_8XX_ITLBERROR_VECTOR   0x13
 
#define ASM_8XX_DTLBERROR_VECTOR   0x14
 
#define ASM_8XX_DBREAK_VECTOR   0x1C
 
#define ASM_8XX_IBREAK_VECTOR   0x1D
 
#define ASM_8XX_PERIFBREAK_VECTOR   0x1E
 
#define ASM_8XX_DEVPORT_VECTOR   0x1F
 
#define ASM_5XX_FLOATASSIST_VECTOR   0x0E
 
#define ASM_5XX_SOFTEMUL_VECTOR   0x10
 
#define ASM_5XX_IPROT_VECTOR   0x13
 
#define ASM_5XX_DPROT_VECTOR   0x14
 
#define ASM_5XX_DBREAK_VECTOR   0x1C
 
#define ASM_5XX_IBREAK_VECTOR   0x1D
 
#define ASM_5XX_MEBREAK_VECTOR   0x1E
 
#define ASM_5XX_NMEBREAK_VECTOR   0x1F
 
#define ASM_60X_VEC_VECTOR   0x0A
 
#define ASM_60X_PERFMON_VECTOR   0x0F
 
#define ASM_60X_IMISS_VECTOR   0x10
 
#define ASM_60X_DLMISS_VECTOR   0x11
 
#define ASM_60X_DSMISS_VECTOR   0x12
 
#define ASM_60X_ADDR_VECTOR   0x13
 
#define ASM_60X_SYSMGMT_VECTOR   0x14
 
#define ASM_60X_VEC_ASSIST_VECTOR   0x16
 
#define ASM_60X_ITM_VECTOR   0x17
 
#define ASM_BOOKE_CRIT_VECTOR   0x01
 
#define ASM_BOOKE_DEC_VECTOR   0x10
 
#define ASM_BOOKE_ITLBMISS_VECTOR   0x11
 
#define ASM_BOOKE_DTLBMISS_VECTOR   0x12
 
#define ASM_BOOKE_FIT_VECTOR   0x13
 
#define ASM_BOOKE_WDOG_VECTOR   0x14
 
#define ASM_BOOKE_APU_VECTOR   0x18
 
#define ASM_BOOKE_DEBUG_VECTOR   ASM_TRACE_VECTOR
 
#define ASM_E500_SPE_UNAVAILABLE_VECTOR   ASM_60X_VEC_VECTOR
 
#define ASM_E500_EMB_FP_DATA_VECTOR   0x19
 
#define ASM_E500_EMB_FP_ROUND_VECTOR   0x1A
 
#define ASM_E500_PERFMON_VECTOR   ASM_60X_PERFMON_VECTOR
 
#define ASM_E300_CRIT_VECTOR   0x0A
 
#define ASM_E300_PERFMON_VECTOR   ASM_60X_PERFMON_VECTOR
 
#define ASM_E300_IMISS_VECTOR   ASM_60X_IMISS_VECTOR /* Special case: Shadowed GPRs */
 
#define ASM_E300_DLMISS_VECTOR   ASM_60X_DLMISS_VECTOR /* Special case: Shadowed GPRs */
 
#define ASM_E300_DSMISS_VECTOR   ASM_60X_DSMISS_VECTOR /* Special case: Shadowed GPRs */
 
#define ASM_E300_ADDR_VECTOR   ASM_60X_ADDR_VECTOR
 
#define ASM_E300_SYSMGMT_VECTOR   ASM_60X_SYSMGMT_VECTOR
 
#define LAST_VALID_EXC   0x1F
 
#define ASM_60X_VEC_VECTOR_OFFSET   0xf20
 
#define ASM_PPC405_FIT_VECTOR_OFFSET   0x1010
 
#define ASM_PPC405_WDOG_VECTOR_OFFSET   0x1020
 
#define ASM_PPC405_TRACE_VECTOR_OFFSET   0x2000
 

Typedefs

typedef void(* exception_handler_t) (BSP_Exception_frame *)
 Global exception handler type.
 
typedef uint8_t ppc_exc_categories[LAST_VALID_EXC+1]
 Categorie set type.
 
typedef int(* ppc_exc_handler_t) (BSP_Exception_frame *f, unsigned vector)
 High-level exception handler type. More...
 

Enumerations

enum  ppc_exc_category {
  PPC_EXC_INVALID = 0, PPC_EXC_ASYNC = 1, PPC_EXC_CLASSIC = 2, PPC_EXC_CLASSIC_ASYNC = PPC_EXC_CLASSIC | PPC_EXC_ASYNC,
  PPC_EXC_405_CRITICAL = 4, PPC_EXC_405_CRITICAL_ASYNC = PPC_EXC_405_CRITICAL | PPC_EXC_ASYNC, PPC_EXC_BOOKE_CRITICAL = 6, PPC_EXC_BOOKE_CRITICAL_ASYNC = PPC_EXC_BOOKE_CRITICAL | PPC_EXC_ASYNC,
  PPC_EXC_E500_MACHCHK = 8, PPC_EXC_E500_MACHCHK_ASYNC = PPC_EXC_E500_MACHCHK | PPC_EXC_ASYNC, PPC_EXC_NAKED = 10
}
 Exception categories. More...
 

Functions

void C_exception_handler (BSP_Exception_frame *excPtr)
 Default global exception handler.
 
void BSP_printStackTrace (const BSP_Exception_frame *excPtr)
 
void * ppc_exc_vector_address (unsigned vector, void *vector_base)
 Returns the entry address of the vector. More...
 
const ppc_exc_categoriesppc_exc_categories_for_cpu (ppc_cpu_id_t cpu)
 Returns the category set for a CPU of type cpu, or NULL if there is no category set available for this CPU.
 
ppc_exc_category ppc_exc_category_for_vector (const ppc_exc_categories *categories, unsigned vector)
 Returns the category for the vector vector using the category set categories.
 
rtems_status_code ppc_exc_make_prologue (unsigned vector, void *vector_base, ppc_exc_category category, uint32_t *prologue, size_t *prologue_size)
 Makes a minimal prologue for the vector vector with the category category. More...
 
void ppc_exc_initialize_with_vector_base (uintptr_t interrupt_stack_begin, void *vector_base)
 Initializes the exception handling. More...
 
int ppc_exc_handler_default (BSP_Exception_frame *f, unsigned int vector)
 Default high-level exception handler. More...
 
rtems_status_code ppc_exc_set_handler (unsigned vector, ppc_exc_handler_t hdl)
 Set high-level exception handler. More...
 
ppc_exc_handler_t ppc_exc_get_handler (unsigned vector)
 Returns the currently active high-level exception handler.
 
void ppc_exc_wrapup (BSP_Exception_frame *f)
 
int ppc_exc_alignment_handler (BSP_Exception_frame *frame, unsigned excNum)
 Standard aligment handler. More...
 

Variables

uint32_t ppc_exc_msr_bits
 Bits for MSR update. More...
 
uint32_t ppc_exc_cache_wb_check
 Cache write back check flag. More...
 
ppc_exc_handler_t ppc_exc_handler_table [LAST_VALID_EXC+1]
 High-level exception handler table.
 
exception_handler_t globalExceptHdl
 Global exception handler.
 
uint32_t(* ppc_exc_get_DAR )(void)
 Function for DAR access. More...
 

Detailed Description

Typedef Documentation

◆ ppc_exc_handler_t

typedef int(* ppc_exc_handler_t) (BSP_Exception_frame *f, unsigned vector)

High-level exception handler type.

Return values
0The exception was handled and normal execution may resume.
-1Reject the exception resulting in a call of the global exception handler.
otherReserved, do not use.

Enumeration Type Documentation

◆ ppc_exc_category

Exception categories.

Exceptions of different categories use different SRR registers to save the machine state and do different things in the prologue and epilogue.

For now, the CPU descriptions assume this fits into 8 bits.

Function Documentation

◆ ppc_exc_alignment_handler()

int ppc_exc_alignment_handler ( BSP_Exception_frame frame,
unsigned  excNum 
)

Standard aligment handler.

Return values
0Performed a dcbz instruction.
-1Otherwise.

◆ ppc_exc_handler_default()

int ppc_exc_handler_default ( BSP_Exception_frame f,
unsigned int  vector 
)

Default high-level exception handler.

Return values
-1Always.

◆ ppc_exc_initialize_with_vector_base()

void ppc_exc_initialize_with_vector_base ( uintptr_t  interrupt_stack_begin,
void *  vector_base 
)

Initializes the exception handling.

See also
ppc_exc_initialize().

◆ ppc_exc_make_prologue()

rtems_status_code ppc_exc_make_prologue ( unsigned  vector,
void *  vector_base,
ppc_exc_category  category,
uint32_t *  prologue,
size_t *  prologue_size 
)

Makes a minimal prologue for the vector vector with the category category.

The minimal prologue will be copied to prologue. Not more than prologue_size bytes will be copied. Returns the actual minimal prologue size in bytes in prologue_size.

Return values
RTEMS_SUCCESSFULMinimal prologue successfully made.
RTEMS_INVALID_IDInvalid vector number.
RTEMS_INVALID_NUMBERInvalid category.
RTEMS_INVALID_SIZEPrologue size to small.

◆ ppc_exc_set_handler()

rtems_status_code ppc_exc_set_handler ( unsigned  vector,
ppc_exc_handler_t  hdl 
)

Set high-level exception handler.

Hook C exception handlers.

  • handlers for asynchronous exceptions run on the ISR stack with thread-dispatching disabled.
  • handlers for synchronous exceptions run on the task stack with thread-dispatching enabled.

If a particular slot is NULL then the traditional 'globalExcHdl' is used.

ppc_exc_set_handler() registers a handler (returning 0 on success, -1 if the vector argument is too big).

It is legal to set a NULL handler. This leads to the globalExcHdl being called if an exception for 'vector' occurs.

Return values
RTEMS_SUCCESSFULSuccessful operation.
RTEMS_INVALID_IDInvalid vector number.
RTEMS_RESOURCE_IN_USEHandler table is read-only and handler does not match.

◆ ppc_exc_vector_address()

void* ppc_exc_vector_address ( unsigned  vector,
void *  vector_base 
)

Returns the entry address of the vector.

Parameters
[in]vectorThe vector number.
[in]vector_baseThe vector table base address.

Variable Documentation

◆ ppc_exc_cache_wb_check

uint32_t ppc_exc_cache_wb_check

Cache write back check flag.

(See README under CAVEATS). During initialization a check is performed to assert that write-back caching is enabled for memory accesses. If a BSP runs entirely without any caching then it should set this variable to zero prior to initializing exceptions in order to skip the test. NOTE: The code does NOT support mapping memory with cache-attributes other than write-back (unless the entire cache is physically disabled)

◆ ppc_exc_get_DAR

uint32_t(* ppc_exc_get_DAR) (void)

Function for DAR access.

CPU support may store the address of a function here that can be used by the default exception handler to obtain fault-address info which is helpful. Unfortunately, the SPR holding this information is not uniform across PPC families so we need assistance from CPU support

◆ ppc_exc_msr_bits

uint32_t ppc_exc_msr_bits

Bits for MSR update.

Bits in MSR that are enabled during execution of exception handlers / ISRs (on classic PPC these are DR/IR/RI [default], on bookE-style CPUs they should be set to 0 during initialization)

By default, the setting of these bits that is in effect when exception handling is initialized is used.