diff options
Diffstat (limited to 'c/src/lib/libbsp/powerpc/shared')
-rw-r--r-- | c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S | 18 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/shared/vectors/vectors.h | 10 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/shared/vectors/vectors_init.c | 5 |
3 files changed, 33 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S b/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S index 412a8e2214..e8a9c779e7 100644 --- a/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S +++ b/c/src/lib/libbsp/powerpc/shared/irq/irq_asm.S @@ -47,6 +47,24 @@ SYM (decrementer_exception_vector_prolog_code): decrementer_exception_vector_prolog_code_size = . - decrementer_exception_vector_prolog_code #endif +#if defined(ASM_SYSMGMT_VECTOR) + PUBLIC_VAR(sysmgmt_exception_vector_prolog_code) + +SYM (sysmgmt_exception_vector_prolog_code): + /* + * let room for exception frame + */ + stwu r1, - (EXCEPTION_FRAME_END)(r1) + stw r4, GPR4_OFFSET(r1) + li r4, ASM_SYSMGMT_VECTOR + ba shared_raw_irq_code_entry + + PUBLIC_VAR (sysmgmt_exception_vector_prolog_code_size) + + sysmgmt_exception_vector_prolog_code_size = . - sysmgmt_exception_vector_prolog_code +#endif + + #if defined(ASM_PIT_VECTOR) PUBLIC_VAR(pit_exception_vector_prolog_code) diff --git a/c/src/lib/libbsp/powerpc/shared/vectors/vectors.h b/c/src/lib/libbsp/powerpc/shared/vectors/vectors.h index e931db260b..fbba8fe490 100644 --- a/c/src/lib/libbsp/powerpc/shared/vectors/vectors.h +++ b/c/src/lib/libbsp/powerpc/shared/vectors/vectors.h @@ -87,12 +87,22 @@ extern unsigned int tgpr_clr_exception_vector_code_prolog_size[]; */ extern void external_exception_vector_prolog_code(); extern unsigned int external_exception_vector_prolog_code_size[]; +#if defined(ASM_DEC_VECTOR) extern void decrementer_exception_vector_prolog_code(); extern unsigned int decrementer_exception_vector_prolog_code_size[]; +#endif +#if defined(ASM_SYSMGMT_VECTOR) +extern void sysmgmt_exception_vector_prolog_code(); +extern unsigned int sysmgmt_exception_vector_prolog_code_size[]; +#endif +#if defined(ASM_PIT_VECTOR) extern void pit_exception_vector_prolog_code(); extern unsigned int pit_exception_vector_prolog_code_size[]; +#endif +#if defined(ASM_FIT_VECTOR) extern void fit_exception_vector_prolog_code(); extern unsigned int fit_exception_vector_prolog_code_size[]; +#endif /* codemove is like memmove, but it also gets the cache line size * as 4th parameter to synchronize them. If this last parameter is diff --git a/c/src/lib/libbsp/powerpc/shared/vectors/vectors_init.c b/c/src/lib/libbsp/powerpc/shared/vectors/vectors_init.c index ffe295ff03..87b4cdfb80 100644 --- a/c/src/lib/libbsp/powerpc/shared/vectors/vectors_init.c +++ b/c/src/lib/libbsp/powerpc/shared/vectors/vectors_init.c @@ -173,6 +173,11 @@ void initialize_exceptions() switch ( get_ppc_cpu_type() ) { case PPC_603e: + case PPC_603ev: + case PPC_603le: + case PPC_e300c1: + case PPC_e300c2: + case PPC_e300c3: case PPC_8240: has_shadowed_gprs = 1; default: break; |