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/powerpc | |
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/powerpc')
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen5200/irq/irq.c | 32 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen83xx/irq/irq.c | 16 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/mpc8260ads/irq/irq.c | 12 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/psim/irq/irq_init.c | 8 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/qemuppc/irq/irq_init.c | 8 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/qoriq/irq/irq.c | 24 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/t32mppc/irq/irq.c | 8 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c | 32 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c | 32 |
9 files changed, 76 insertions, 96 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen5200/irq/irq.c b/c/src/lib/libbsp/powerpc/gen5200/irq/irq.c index 029ed3182e..58e2f2a987 100644 --- a/c/src/lib/libbsp/powerpc/gen5200/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/gen5200/irq/irq.c @@ -359,24 +359,26 @@ static inline void BSP_disable_crit_irq_at_siu( rtems_vector_number /* * This function enables a given siu interrupt */ -rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqLine) +void bsp_interrupt_vector_enable( rtems_vector_number vector) { - int base_index = get_siu_irq_base_index( irqLine); + int base_index = get_siu_irq_base_index( vector); - if (is_siu_irq( irqLine)) { + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); + + if (is_siu_irq( vector)) { rtems_interrupt_level level; rtems_interrupt_disable( level); switch (base_index) { case BSP_PER_IRQ_LOWEST_OFFSET: - BSP_enable_per_irq_at_siu( irqLine); + BSP_enable_per_irq_at_siu( vector); break; case BSP_MAIN_IRQ_LOWEST_OFFSET: - BSP_enable_main_irq_at_siu( irqLine); + BSP_enable_main_irq_at_siu( vector); break; case BSP_CRIT_IRQ_LOWEST_OFFSET: - BSP_enable_crit_irq_at_siu( irqLine); + BSP_enable_crit_irq_at_siu( vector); break; default: rtems_interrupt_enable( level); @@ -386,31 +388,31 @@ rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqLine) rtems_interrupt_enable( level); } - - return RTEMS_SUCCESSFUL; } /* * This function disables a given siu interrupt */ -rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqLine) +void bsp_interrupt_vector_disable( rtems_vector_number vector) { - int base_index = get_siu_irq_base_index( irqLine); + int base_index = get_siu_irq_base_index( vector); - if (is_siu_irq( irqLine)) { + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); + + if (is_siu_irq( vector)) { rtems_interrupt_level level; rtems_interrupt_disable( level); switch (base_index) { case BSP_PER_IRQ_LOWEST_OFFSET: - BSP_disable_per_irq_at_siu( irqLine); + BSP_disable_per_irq_at_siu( vector); break; case BSP_MAIN_IRQ_LOWEST_OFFSET: - BSP_disable_main_irq_at_siu( irqLine); + BSP_disable_main_irq_at_siu( vector); break; case BSP_CRIT_IRQ_LOWEST_OFFSET: - BSP_disable_crit_irq_at_siu( irqLine); + BSP_disable_crit_irq_at_siu( vector); break; default: rtems_interrupt_enable( level); @@ -420,8 +422,6 @@ rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqLine) rtems_interrupt_enable( level); } - - return RTEMS_SUCCESSFUL; } #if (BENCHMARK_IRQ_PROCESSING == 0) diff --git a/c/src/lib/libbsp/powerpc/gen83xx/irq/irq.c b/c/src/lib/libbsp/powerpc/gen83xx/irq/irq.c index 2d89cfa137..7a8ce3cc0b 100644 --- a/c/src/lib/libbsp/powerpc/gen83xx/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/gen83xx/irq/irq.c @@ -376,11 +376,13 @@ rtems_status_code mpc83xx_ipic_set_highest_priority_interrupt( /* * functions to enable/disable a source at the ipic */ -rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqnum) +void bsp_interrupt_vector_enable( rtems_vector_number vector) { - rtems_vector_number vecnum = irqnum - BSP_IPIC_IRQ_LOWEST_OFFSET; + rtems_vector_number vecnum = vector - BSP_IPIC_IRQ_LOWEST_OFFSET; const BSP_isrc_rsc_t *rsc_ptr; + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); + if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) { rsc_ptr = &mpc83xx_ipic_isrc_rsc [vecnum]; if (rsc_ptr->mask_reg != NULL) { @@ -392,15 +394,15 @@ rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqnum) rtems_interrupt_enable(level); } } - - return RTEMS_SUCCESSFUL; } -rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqnum) +void bsp_interrupt_vector_disable( rtems_vector_number vector) { - rtems_vector_number vecnum = irqnum - BSP_IPIC_IRQ_LOWEST_OFFSET; + rtems_vector_number vecnum = vector - BSP_IPIC_IRQ_LOWEST_OFFSET; const BSP_isrc_rsc_t *rsc_ptr; + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); + if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) { rsc_ptr = &mpc83xx_ipic_isrc_rsc [vecnum]; if (rsc_ptr->mask_reg != NULL) { @@ -412,8 +414,6 @@ rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqnum) rtems_interrupt_enable(level); } } - - return RTEMS_SUCCESSFUL; } /* diff --git a/c/src/lib/libbsp/powerpc/mpc8260ads/irq/irq.c b/c/src/lib/libbsp/powerpc/mpc8260ads/irq/irq.c index 52465ec2a7..c145186a52 100644 --- a/c/src/lib/libbsp/powerpc/mpc8260ads/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/mpc8260ads/irq/irq.c @@ -328,28 +328,28 @@ BSP_CPM_irq_init(void) } -rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqnum) +void bsp_interrupt_vector_enable( rtems_vector_number irqnum) { + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); + if (is_cpm_irq(irqnum)) { /* * Enable interrupt at PIC level */ BSP_irq_enable_at_cpm (irqnum); } - - return RTEMS_SUCCESSFUL; } -rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqnum) +void bsp_interrupt_vector_disable( rtems_vector_number irqnum) { + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); + if (is_cpm_irq(irqnum)) { /* * disable interrupt at PIC level */ BSP_irq_disable_at_cpm (irqnum); } - - return RTEMS_SUCCESSFUL; } rtems_status_code bsp_interrupt_facility_initialize() diff --git a/c/src/lib/libbsp/powerpc/psim/irq/irq_init.c b/c/src/lib/libbsp/powerpc/psim/irq/irq_init.c index 59f0e1dcea..61600a9d62 100644 --- a/c/src/lib/libbsp/powerpc/psim/irq/irq_init.c +++ b/c/src/lib/libbsp/powerpc/psim/irq/irq_init.c @@ -102,16 +102,16 @@ static int psim_exception_handler( /* * functions to enable/disable a source at the ipic */ -rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqnum) +void bsp_interrupt_vector_enable( rtems_vector_number irqnum) { /* FIXME: do something */ - return RTEMS_SUCCESSFUL; + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); } -rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqnum) +void bsp_interrupt_vector_disable( rtems_vector_number irqnum) { /* FIXME: do something */ - return RTEMS_SUCCESSFUL; + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); } rtems_status_code bsp_interrupt_facility_initialize(void) diff --git a/c/src/lib/libbsp/powerpc/qemuppc/irq/irq_init.c b/c/src/lib/libbsp/powerpc/qemuppc/irq/irq_init.c index f4592a375f..b5533e0872 100644 --- a/c/src/lib/libbsp/powerpc/qemuppc/irq/irq_init.c +++ b/c/src/lib/libbsp/powerpc/qemuppc/irq/irq_init.c @@ -38,16 +38,16 @@ static int qemuppc_exception_handler( /* * functions to enable/disable a source at the ipic */ -rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqnum) +void bsp_interrupt_vector_enable( rtems_vector_number irqnum) { /* FIXME: do something */ - return RTEMS_SUCCESSFUL; + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); } -rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqnum) +void bsp_interrupt_vector_disable( rtems_vector_number irqnum) { /* FIXME: do something */ - return RTEMS_SUCCESSFUL; + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); } rtems_status_code bsp_interrupt_facility_initialize(void) diff --git a/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c b/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c index da7def3913..ea086215fc 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c @@ -175,28 +175,24 @@ rtems_status_code qoriq_pic_set_affinity( static rtems_status_code pic_vector_enable(rtems_vector_number vector, uint32_t msk) { - rtems_status_code sc = RTEMS_SUCCESSFUL; - - if (bsp_interrupt_is_valid_vector(vector)) { - volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector); - rtems_interrupt_lock_context lock_context; + volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector); + rtems_interrupt_lock_context lock_context; - rtems_interrupt_lock_acquire(&lock, &lock_context); - src_cfg->vpr = (src_cfg->vpr & ~VPR_MSK) | msk; - rtems_interrupt_lock_release(&lock, &lock_context); - } + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); - return sc; + rtems_interrupt_lock_acquire(&lock, &lock_context); + src_cfg->vpr = (src_cfg->vpr & ~VPR_MSK) | msk; + rtems_interrupt_lock_release(&lock, &lock_context); } -rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector) +void bsp_interrupt_vector_enable(rtems_vector_number vector) { - return pic_vector_enable(vector, 0); + pic_vector_enable(vector, 0); } -rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector) +void bsp_interrupt_vector_disable(rtems_vector_number vector) { - return pic_vector_enable(vector, VPR_MSK); + pic_vector_enable(vector, VPR_MSK); } static void qoriq_interrupt_dispatch(void) diff --git a/c/src/lib/libbsp/powerpc/t32mppc/irq/irq.c b/c/src/lib/libbsp/powerpc/t32mppc/irq/irq.c index 3cabcdef35..0c98c3a27d 100644 --- a/c/src/lib/libbsp/powerpc/t32mppc/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/t32mppc/irq/irq.c @@ -14,14 +14,14 @@ #include <bsp/irq-generic.h> -rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector) +void bsp_interrupt_vector_enable(rtems_vector_number vector) { - return RTEMS_INVALID_ID; + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); } -rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector) +void bsp_interrupt_vector_disable(rtems_vector_number vector) { - return RTEMS_INVALID_ID; + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); } rtems_status_code bsp_interrupt_facility_initialize(void) diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c b/c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c index 8066a7f43b..2a94c27d1b 100644 --- a/c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c @@ -63,30 +63,26 @@ static rtems_status_code bsp_irq_enable_at_CPM(rtems_vector_number irqnum) return RTEMS_SUCCESSFUL; } -rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number irqnum) +void bsp_interrupt_vector_enable(rtems_vector_number vector) { - if (BSP_IS_CPM_IRQ(irqnum)) { - bsp_irq_enable_at_CPM(irqnum); - return RTEMS_SUCCESSFUL; - } - else if (BSP_IS_SIU_IRQ(irqnum)) { - bsp_irq_enable_at_SIU(irqnum); - return RTEMS_SUCCESSFUL; + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); + + if (BSP_IS_CPM_IRQ(vector)) { + bsp_irq_enable_at_CPM(vector); + } else if (BSP_IS_SIU_IRQ(vector)) { + bsp_irq_enable_at_SIU(vector); } - return RTEMS_INVALID_ID; } -rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number irqnum) +void bsp_interrupt_vector_disable(rtems_vector_number vector) { - if (BSP_IS_CPM_IRQ(irqnum)) { - bsp_irq_disable_at_CPM(irqnum); - return RTEMS_SUCCESSFUL; - } - else if (BSP_IS_SIU_IRQ(irqnum)) { - bsp_irq_disable_at_SIU(irqnum); - return RTEMS_SUCCESSFUL; + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); + + if (BSP_IS_CPM_IRQ(vector)) { + bsp_irq_disable_at_CPM(vector); + } else if (BSP_IS_SIU_IRQ(vector)) { + bsp_irq_disable_at_SIU(vector); } - return RTEMS_INVALID_ID; } /* diff --git a/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c b/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c index a9fe7066bc..55194cb1e6 100644 --- a/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c +++ b/c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c @@ -132,34 +132,22 @@ static void opb_intc_init(void) (OPB_INTC_MER_HIE | OPB_INTC_MER_ME); } -rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector) +void bsp_interrupt_vector_enable(rtems_vector_number vector) { - rtems_status_code sc = RTEMS_SUCCESSFUL; - - if (bsp_interrupt_is_valid_vector(vector)) { - if (BSP_IS_OPBINTC_IRQ(vector)) { - BSP_irq_enable_at_opbintc(vector); - } - } else { - sc = RTEMS_INVALID_ID; - } + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); - return sc; + if (BSP_IS_OPBINTC_IRQ(vector)) { + BSP_irq_enable_at_opbintc(vector); + } } -rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector) +void bsp_interrupt_vector_disable(rtems_vector_number vector) { - rtems_status_code sc = RTEMS_SUCCESSFUL; - - if (bsp_interrupt_is_valid_vector(vector)) { - if (BSP_IS_OPBINTC_IRQ(vector)) { - BSP_irq_disable_at_opbintc(vector); - } - } else { - sc = RTEMS_INVALID_ID; - } + bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); - return sc; + if (BSP_IS_OPBINTC_IRQ(vector)) { + BSP_irq_disable_at_opbintc(vector); + } } static int C_dispatch_irq_handler(BSP_Exception_frame *frame, unsigned int excNum) |