RTEMS  5.1
Macros | Typedefs | Enumerations | Functions | Variables

PowerPC Exceptions API. More...

#include <bspopts.h>
#include <rtems/score/cpuimpl.h>
#include <libcpu/powerpc-utility.h>

Go to the source code of this file.

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
 
#define LINK_REGISTER_CALLEE_UPDATE_ROOM   4
 
#define EXC_GENERIC_SIZE   (PPC_EXC_FRAME_SIZE + PPC_STACK_RED_ZONE_SIZE)
 
#define PPC_EXC_INTERRUPT_FRAME_SIZE   CPU_INTERRUPT_FRAME_SIZE
 
#define EXC_VEC_SIZE   (0)
 
#define EXCEPTION_FRAME_END   (EXC_GENERIC_SIZE + EXC_VEC_SIZE)
 

Typedefs

typedef CPU_Exception_frame BSP_Exception_frame
 
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...
 
typedef exception_handler_t cpuExcHandlerType
 

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

PowerPC Exceptions API.