diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-06-19 14:09:28 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-06-20 07:42:25 +0200 |
commit | c6810c824c9445fdc44ae5c0092f9ae5355a1420 (patch) | |
tree | 72441065d38fefdef1008118d9bf51bebf71ad05 /c/src/lib/libbsp/arm/lpc32xx/irq/irq.c | |
parent | bsps/powerpc: Fix warning (diff) | |
download | rtems-c6810c824c9445fdc44ae5c0092f9ae5355a1420.tar.bz2 |
bsps: Improve interrupt vector enable/disable API
Change bsp_interrupt_vector_enable() and bsp_interrupt_vector_disable()
to not return a status code. Add bsp_interrupt_assert() and use it to
validate the vector number in the vector enable/disable implementations.
Diffstat (limited to 'c/src/lib/libbsp/arm/lpc32xx/irq/irq.c')
-rwxr-xr-x | c/src/lib/libbsp/arm/lpc32xx/irq/irq.c | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/c/src/lib/libbsp/arm/lpc32xx/irq/irq.c b/c/src/lib/libbsp/arm/lpc32xx/irq/irq.c index 37080f4de2..eac320000b 100755 --- a/c/src/lib/libbsp/arm/lpc32xx/irq/irq.c +++ b/c/src/lib/libbsp/arm/lpc32xx/irq/irq.c @@ -50,11 +50,6 @@ static lpc32xx_irq_fields lpc32xx_irq_priority_masks [LPC32XX_IRQ_PRIORITY_COUNT static lpc32xx_irq_fields lpc32xx_irq_enable; -static inline bool lpc32xx_irq_is_valid(rtems_vector_number vector) -{ - return vector <= BSP_INTERRUPT_VECTOR_MAX; -} - static inline bool lpc32xx_irq_priority_is_valid(unsigned priority) { return priority <= LPC32XX_IRQ_PRIORITY_LOWEST; @@ -130,7 +125,7 @@ static inline unsigned lpc32xx_irq_get_index(uint32_t val) void lpc32xx_irq_set_priority(rtems_vector_number vector, unsigned priority) { - if (lpc32xx_irq_is_valid(vector)) { + if (bsp_interrupt_is_valid_vector(vector)) { rtems_interrupt_level level; unsigned i = 0; @@ -156,7 +151,7 @@ void lpc32xx_irq_set_priority(rtems_vector_number vector, unsigned priority) unsigned lpc32xx_irq_get_priority(rtems_vector_number vector) { - if (lpc32xx_irq_is_valid(vector)) { + if (bsp_interrupt_is_valid_vector(vector)) { return lpc32xx_irq_priority_table [vector]; } else { return LPC32XX_IRQ_PRIORITY_LOWEST; @@ -165,7 +160,7 @@ unsigned lpc32xx_irq_get_priority(rtems_vector_number vector) void lpc32xx_irq_set_activation_polarity(rtems_vector_number vector, lpc32xx_irq_activation_polarity activation_polarity) { - if (lpc32xx_irq_is_valid(vector)) { + if (bsp_interrupt_is_valid_vector(vector)) { rtems_interrupt_level level; rtems_interrupt_disable(level); @@ -180,7 +175,7 @@ void lpc32xx_irq_set_activation_polarity(rtems_vector_number vector, lpc32xx_irq lpc32xx_irq_activation_polarity lpc32xx_irq_get_activation_polarity(rtems_vector_number vector) { - if (lpc32xx_irq_is_valid(vector)) { + if (bsp_interrupt_is_valid_vector(vector)) { if (lpc32xx_irq_is_bit_set_in_register(vector, LPC32XX_IRQ_OFFSET_APR)) { return LPC32XX_IRQ_ACTIVE_HIGH_OR_RISING_EDGE; } else { @@ -193,7 +188,7 @@ lpc32xx_irq_activation_polarity lpc32xx_irq_get_activation_polarity(rtems_vector void lpc32xx_irq_set_activation_type(rtems_vector_number vector, lpc32xx_irq_activation_type activation_type) { - if (lpc32xx_irq_is_valid(vector)) { + if (bsp_interrupt_is_valid_vector(vector)) { rtems_interrupt_level level; rtems_interrupt_disable(level); @@ -208,7 +203,7 @@ void lpc32xx_irq_set_activation_type(rtems_vector_number vector, lpc32xx_irq_act lpc32xx_irq_activation_type lpc32xx_irq_get_activation_type(rtems_vector_number vector) { - if (lpc32xx_irq_is_valid(vector)) { + if (bsp_interrupt_is_valid_vector(vector)) { if (lpc32xx_irq_is_bit_set_in_register(vector, LPC32XX_IRQ_OFFSET_ATR)) { return LPC32XX_IRQ_EDGE_SENSITIVE; } else { @@ -265,32 +260,28 @@ void bsp_interrupt_dispatch(void) lpc32xx.sic_2.er = er_sic_2 & lpc32xx_irq_enable.field.sic_2; } -rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector) +void bsp_interrupt_vector_enable(rtems_vector_number vector) { - if (lpc32xx_irq_is_valid(vector)) { - rtems_interrupt_level level; + rtems_interrupt_level level; - rtems_interrupt_disable(level); - lpc32xx_irq_set_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER); - lpc32xx_irq_set_bit_in_field(vector, &lpc32xx_irq_enable); - rtems_interrupt_enable(level); - } + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); - return RTEMS_SUCCESSFUL; + rtems_interrupt_disable(level); + lpc32xx_irq_set_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER); + lpc32xx_irq_set_bit_in_field(vector, &lpc32xx_irq_enable); + rtems_interrupt_enable(level); } -rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector) +void bsp_interrupt_vector_disable(rtems_vector_number vector) { - if (lpc32xx_irq_is_valid(vector)) { - rtems_interrupt_level level; + rtems_interrupt_level level; - rtems_interrupt_disable(level); - lpc32xx_irq_clear_bit_in_field(vector, &lpc32xx_irq_enable); - lpc32xx_irq_clear_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER); - rtems_interrupt_enable(level); - } + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); - return RTEMS_SUCCESSFUL; + rtems_interrupt_disable(level); + lpc32xx_irq_clear_bit_in_field(vector, &lpc32xx_irq_enable); + lpc32xx_irq_clear_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER); + rtems_interrupt_enable(level); } void lpc32xx_set_exception_handler( |