diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-09-10 10:41:35 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-09-10 10:43:41 +0200 |
commit | 90f44cd2dd55a0a109d5a4423ba158e29b8f6fbf (patch) | |
tree | 55aa2b52e44b8dd608b00473f2c2eca3402c6d21 /c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h | |
parent | arm/lpc176x: Adding "eth" linker script section. (diff) | |
download | rtems-90f44cd2dd55a0a109d5a4423ba158e29b8f6fbf.tar.bz2 |
bsps/arm: Fix GIC tm27 support
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h b/c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h index 0c61881fef..95f3077716 100644 --- a/c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h +++ b/c/src/lib/libbsp/arm/shared/include/arm-gic-tm27.h @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -34,17 +34,19 @@ #define MUST_WAIT_FOR_INTERRUPT 1 -#define ARM_GIC_TM27_IRQ ARM_GIC_IRQ_SGI_13 +#define ARM_GIC_TM27_IRQ_LOW ARM_GIC_IRQ_SGI_12 -#define ARM_GIC_TM27_PRIO_LOW 0xfe +#define ARM_GIC_TM27_IRQ_HIGH ARM_GIC_IRQ_SGI_13 + +#define ARM_GIC_TM27_PRIO_LOW 0x80 #define ARM_GIC_TM27_PRIO_HIGH 0x00 static inline void Install_tm27_vector(void (*handler)(rtems_vector_number)) { rtems_status_code sc = rtems_interrupt_handler_install( - ARM_GIC_TM27_IRQ, - "TM27", + ARM_GIC_TM27_IRQ_LOW, + "tm27 low", RTEMS_INTERRUPT_UNIQUE, (rtems_interrupt_handler) handler, NULL @@ -52,16 +54,31 @@ static inline void Install_tm27_vector(void (*handler)(rtems_vector_number)) assert(sc == RTEMS_SUCCESSFUL); sc = arm_gic_irq_set_priority( - ARM_GIC_TM27_IRQ, + ARM_GIC_TM27_IRQ_LOW, ARM_GIC_TM27_PRIO_LOW ); assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_interrupt_handler_install( + ARM_GIC_TM27_IRQ_HIGH, + "tm27 high", + RTEMS_INTERRUPT_UNIQUE, + (rtems_interrupt_handler) handler, + NULL + ); + assert(sc == RTEMS_SUCCESSFUL); + + sc = arm_gic_irq_set_priority( + ARM_GIC_TM27_IRQ_HIGH, + ARM_GIC_TM27_PRIO_HIGH + ); + assert(sc == RTEMS_SUCCESSFUL); } static inline void Cause_tm27_intr(void) { rtems_status_code sc = arm_gic_irq_generate_software_irq( - ARM_GIC_TM27_IRQ, + ARM_GIC_TM27_IRQ_LOW, ARM_GIC_IRQ_SOFTWARE_IRQ_TO_SELF, 0 ); @@ -70,18 +87,15 @@ static inline void Cause_tm27_intr(void) static inline void Clear_tm27_intr(void) { - rtems_status_code sc = arm_gic_irq_set_priority( - ARM_GIC_TM27_IRQ, - ARM_GIC_TM27_PRIO_LOW - ); - assert(sc == RTEMS_SUCCESSFUL); + /* Nothing to do */ } static inline void Lower_tm27_intr(void) { - rtems_status_code sc = arm_gic_irq_set_priority( - ARM_GIC_TM27_IRQ, - ARM_GIC_TM27_PRIO_HIGH + rtems_status_code sc = arm_gic_irq_generate_software_irq( + ARM_GIC_TM27_IRQ_HIGH, + ARM_GIC_IRQ_SOFTWARE_IRQ_TO_SELF, + 0 ); assert(sc == RTEMS_SUCCESSFUL); } |