summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc
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/powerpc
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/powerpc')
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/irq/irq.c32
-rw-r--r--c/src/lib/libbsp/powerpc/gen83xx/irq/irq.c16
-rw-r--r--c/src/lib/libbsp/powerpc/mpc8260ads/irq/irq.c12
-rw-r--r--c/src/lib/libbsp/powerpc/psim/irq/irq_init.c8
-rw-r--r--c/src/lib/libbsp/powerpc/qemuppc/irq/irq_init.c8
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/irq/irq.c24
-rw-r--r--c/src/lib/libbsp/powerpc/t32mppc/irq/irq.c8
-rw-r--r--c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c32
-rw-r--r--c/src/lib/libbsp/powerpc/virtex/irq/irq_init.c32
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)