summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/lpc32xx/irq/irq.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-06-19 14:09:28 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-06-20 07:42:25 +0200
commitc6810c824c9445fdc44ae5c0092f9ae5355a1420 (patch)
tree72441065d38fefdef1008118d9bf51bebf71ad05 /c/src/lib/libbsp/arm/lpc32xx/irq/irq.c
parentbsps/powerpc: Fix warning (diff)
downloadrtems-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-xc/src/lib/libbsp/arm/lpc32xx/irq/irq.c49
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(