[PATCH v2 02/12] bsp/genmcf548x: Change BSP_INTERRUPT_VECTOR_MIN

Sebastian Huber sebastian.huber at embedded-brains.de
Sat Jun 19 14:04:38 UTC 2021


This BSP uses a customized implementation of the interrupt extension API.  It
was the only BSP which defined BSP_INTERRUPT_VECTOR_MIN to a value other than
zero.  Define it to zero and use a custom is_valid_vector() function instead.

Update #3269.
---
 bsps/m68k/genmcf548x/include/bsp/irq.h |  2 +-
 bsps/m68k/genmcf548x/irq/irq.c         | 16 +++++++++++-----
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/bsps/m68k/genmcf548x/include/bsp/irq.h b/bsps/m68k/genmcf548x/include/bsp/irq.h
index 0a5a4cd6d5..c9809e3cbf 100644
--- a/bsps/m68k/genmcf548x/include/bsp/irq.h
+++ b/bsps/m68k/genmcf548x/include/bsp/irq.h
@@ -89,7 +89,7 @@
 #define MCF548X_IRQ_GPT1 61
 #define MCF548X_IRQ_GPT0 62
 
-#define BSP_INTERRUPT_VECTOR_MIN 1
+#define BSP_INTERRUPT_VECTOR_MIN 0
 
 #define BSP_INTERRUPT_VECTOR_MAX 63
 
diff --git a/bsps/m68k/genmcf548x/irq/irq.c b/bsps/m68k/genmcf548x/irq/irq.c
index f02231b67c..d010865152 100644
--- a/bsps/m68k/genmcf548x/irq/irq.c
+++ b/bsps/m68k/genmcf548x/irq/irq.c
@@ -16,6 +16,12 @@
 
 #include <mcf548x/mcf548x.h>
 
+static inline bool is_valid_vector(rtems_vector_number vector)
+{
+  return 1 <= vector
+    && vector <= (rtems_vector_number) BSP_INTERRUPT_VECTOR_MAX;
+}
+
 void asm_default_interrupt(void);
 
 typedef void (*void_func)(void);
@@ -65,7 +71,7 @@ void bsp_interrupt_vector_enable(rtems_vector_number vector)
   uint32_t bit = vector_to_bit(vector);
   rtems_interrupt_level level;
 
-  bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
+  bsp_interrupt_assert(is_valid_vector(vector));
 
   rtems_interrupt_disable(level);
   *imr &= ~bit;
@@ -78,7 +84,7 @@ void bsp_interrupt_vector_disable(rtems_vector_number vector)
   uint32_t bit = vector_to_bit(vector);
   rtems_interrupt_level level;
 
-  bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
+  bsp_interrupt_assert(is_valid_vector(vector));
 
   rtems_interrupt_disable(level);
   *imr |= bit;
@@ -134,7 +140,7 @@ rtems_status_code rtems_interrupt_handler_install(
 {
   rtems_status_code sc = RTEMS_SUCCESSFUL;
 
-  if (bsp_interrupt_is_valid_vector(vector)) {
+  if (is_valid_vector(vector)) {
     rtems_interrupt_level level;
 
     rtems_interrupt_disable(level);
@@ -180,7 +186,7 @@ rtems_status_code rtems_interrupt_handler_remove(
 {
   rtems_status_code sc = RTEMS_SUCCESSFUL;
 
-  if (bsp_interrupt_is_valid_vector(vector)) {
+  if (is_valid_vector(vector)) {
     rtems_interrupt_level level;
     interrupt_control *ic = &interrupt_controls[vector];
 
@@ -215,7 +221,7 @@ rtems_status_code rtems_interrupt_handler_iterate(
 {
   rtems_status_code sc = RTEMS_SUCCESSFUL;
 
-  if (bsp_interrupt_is_valid_vector(vector)) {
+  if (is_valid_vector(vector)) {
     if (is_occupied_by_us(vector)) {
       const interrupt_control *ic = &interrupt_controls[vector];
 
-- 
2.26.2



More information about the devel mailing list