[PATCH v2 09/12] bsps/irq: Use BSP_INTERRUPT_VECTOR_COUNT

Gedare Bloom gedare at rtems.org
Wed Jun 23 16:07:08 UTC 2021


On Sat, Jun 19, 2021 at 8:05 AM Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
>
> Use BSP_INTERRUPT_VECTOR_COUNT instead of BSP_INTERRUPT_VECTOR_MAX.
>
> Update #3269.
> ---
>  bsps/arm/atsam/start/bspstart.c         | 2 +-
>  bsps/arm/beagle/irq/irq.c               | 2 +-
>  bsps/arm/lpc176x/irq/irq.c              | 2 +-
>  bsps/arm/lpc24xx/irq/irq.c              | 4 ++--
>  bsps/arm/lpc32xx/include/bsp/irq.h      | 2 +-
>  bsps/arm/shared/irq/irq-armv7m.c        | 2 +-
>  bsps/arm/shared/start/start.S           | 2 +-
>  bsps/arm/tms570/irq/irq.c               | 2 +-
>  bsps/include/bsp/irq-generic.h          | 8 ++++----
>  bsps/m68k/genmcf548x/irq/irq.c          | 4 ++--
>  bsps/mips/shared/irq/irq.c              | 2 +-
>  bsps/powerpc/qoriq/irq/irq.c            | 6 +++---
>  bsps/shared/irq/irq-info.c              | 2 +-
>  bsps/shared/irq/irq-server.c            | 2 +-
>  testsuites/smptests/smpcapture02/init.c | 2 +-
>  15 files changed, 22 insertions(+), 22 deletions(-)
>
> diff --git a/bsps/arm/atsam/start/bspstart.c b/bsps/arm/atsam/start/bspstart.c
> index b463bab696..3f49779797 100644
> --- a/bsps/arm/atsam/start/bspstart.c
> +++ b/bsps/arm/atsam/start/bspstart.c
> @@ -21,7 +21,7 @@
>  #include <chip.h>
>
>  RTEMS_STATIC_ASSERT(
> -  PERIPH_COUNT_IRQn <= BSP_INTERRUPT_VECTOR_MAX,
> +  PERIPH_COUNT_IRQn <= BSP_INTERRUPT_VECTOR_COUNT,
>    PERIPH_COUNT_IRQn
>  );
>
> diff --git a/bsps/arm/beagle/irq/irq.c b/bsps/arm/beagle/irq/irq.c
> index 721703b87b..8e9294cae9 100644
> --- a/bsps/arm/beagle/irq/irq.c
> +++ b/bsps/arm/beagle/irq/irq.c
> @@ -133,7 +133,7 @@ rtems_status_code bsp_interrupt_facility_initialize(void)
>    }
>
>    /* Mask all interrupts */
> -  for(i = 0; i <= BSP_INTERRUPT_VECTOR_MAX; i++)
> +  for(i = 0; i < BSP_INTERRUPT_VECTOR_COUNT; i++)
>      bsp_interrupt_vector_disable(i);
>
>    /* Install generic interrupt handler */
> diff --git a/bsps/arm/lpc176x/irq/irq.c b/bsps/arm/lpc176x/irq/irq.c
> index e05fd59e6c..a060401d0b 100644
> --- a/bsps/arm/lpc176x/irq/irq.c
> +++ b/bsps/arm/lpc176x/irq/irq.c
> @@ -38,7 +38,7 @@
>   */
>  static inline bool lpc176x_irq_is_valid( const rtems_vector_number vector )
>  {
> -  return vector <= BSP_INTERRUPT_VECTOR_MAX;
> +  return vector < BSP_INTERRUPT_VECTOR_COUNT;
>  }
>
>  void lpc176x_irq_set_priority(
> diff --git a/bsps/arm/lpc24xx/irq/irq.c b/bsps/arm/lpc24xx/irq/irq.c
> index 2fed80efda..ed07805a9a 100644
> --- a/bsps/arm/lpc24xx/irq/irq.c
> +++ b/bsps/arm/lpc24xx/irq/irq.c
> @@ -31,7 +31,7 @@
>
>  static inline bool lpc24xx_irq_is_valid(rtems_vector_number vector)
>  {
> -  return vector <= BSP_INTERRUPT_VECTOR_MAX;
> +  return vector < BSP_INTERRUPT_VECTOR_COUNT;
>  }
>
>  void lpc24xx_irq_set_priority(rtems_vector_number vector, unsigned priority)
> @@ -91,7 +91,7 @@ rtems_status_code bsp_interrupt_facility_initialize(void)
>    /* Use IRQ category */
>    VICIntSelect = 0;
>
> -  for (i = 0; i <= BSP_INTERRUPT_VECTOR_MAX; ++i) {
> +  for (i = 0; i < BSP_INTERRUPT_VECTOR_COUNT; ++i) {
>      /* Use the vector address register to store the vector number */
>      addr [i] = i;
>
> diff --git a/bsps/arm/lpc32xx/include/bsp/irq.h b/bsps/arm/lpc32xx/include/bsp/irq.h
> index d6f7e3144e..02fce3258a 100644
> --- a/bsps/arm/lpc32xx/include/bsp/irq.h
> +++ b/bsps/arm/lpc32xx/include/bsp/irq.h
> @@ -142,7 +142,7 @@ extern "C" {
>  #define BSP_INTERRUPT_VECTOR_MAX LPC32XX_IRQ_SYSCLK
>  #define BSP_INTERRUPT_VECTOR_COUNT (LPC32XX_IRQ_SYSCLK + 1)
>
> -#define LPC32XX_IRQ_COUNT (BSP_INTERRUPT_VECTOR_MAX + 1)
> +#define LPC32XX_IRQ_COUNT BSP_INTERRUPT_VECTOR_COUNT
>
>  void lpc32xx_irq_set_priority(rtems_vector_number vector, unsigned priority);
>
> diff --git a/bsps/arm/shared/irq/irq-armv7m.c b/bsps/arm/shared/irq/irq-armv7m.c
> index 7c7c1ab114..2bf8c9df74 100644
> --- a/bsps/arm/shared/irq/irq-armv7m.c
> +++ b/bsps/arm/shared/irq/irq-armv7m.c
> @@ -67,7 +67,7 @@ rtems_status_code bsp_interrupt_facility_initialize(void)
>
>    _ARMV7M_SCB->icsr = ARMV7M_SCB_ICSR_PENDSVCLR | ARMV7M_SCB_ICSR_PENDSTCLR;
>
> -  for (i = 0; i <= BSP_INTERRUPT_VECTOR_MAX; ++i) {
> +  for (i = 0; i < BSP_INTERRUPT_VECTOR_COUNT; ++i) {
>      _ARMV7M_NVIC_Clear_enable(i);
>      _ARMV7M_NVIC_Clear_pending(i);
>      _ARMV7M_NVIC_Set_priority(i, BSP_ARMV7M_IRQ_PRIORITY_DEFAULT);
> diff --git a/bsps/arm/shared/start/start.S b/bsps/arm/shared/start/start.S
> index bd623178ed..698495d32e 100644
> --- a/bsps/arm/shared/start/start.S
> +++ b/bsps/arm/shared/start/start.S
> @@ -529,7 +529,7 @@ bsp_start_vector_table_begin:
>         .word   _ARMV7M_Exception_default /* Reserved */
>         .word   _ARMV7M_Pendable_service_call /* PendSV */
>         .word   _ARMV7M_Clock_handler /* SysTick */
> -       .rept   BSP_INTERRUPT_VECTOR_MAX + 1
> +       .rept   BSP_INTERRUPT_VECTOR_COUNT
>         .word   _ARMV7M_NVIC_Interrupt_dispatch /* IRQ */
>         .endr
>
> diff --git a/bsps/arm/tms570/irq/irq.c b/bsps/arm/tms570/irq/irq.c
> index 7129915c93..4abab8feb3 100644
> --- a/bsps/arm/tms570/irq/irq.c
> +++ b/bsps/arm/tms570/irq/irq.c
> @@ -28,7 +28,7 @@
>  #include <bsp/irq.h>
>  #include <rtems/score/armv4.h>
>
> -unsigned int priorityTable[BSP_INTERRUPT_VECTOR_MAX+1];
> +unsigned int priorityTable[BSP_INTERRUPT_VECTOR_COUNT];
>
>  /**
>   * @brief Set priority of the interrupt vector.
> diff --git a/bsps/include/bsp/irq-generic.h b/bsps/include/bsp/irq-generic.h
> index 749dc78988..ad64c457d6 100644
> --- a/bsps/include/bsp/irq-generic.h
> +++ b/bsps/include/bsp/irq-generic.h
> @@ -132,8 +132,8 @@ static inline rtems_vector_number bsp_interrupt_handler_index(
>   * @brief Generic BSP Interrupt Support
>   *
>   * The BSP interrupt support manages a sequence of interrupt vector numbers
> - * ranging from zero to @ref BSP_INTERRUPT_VECTOR_MAX
> - * including the end points.  It provides methods to
> + * greater than or equal to zero and less than @ref BSP_INTERRUPT_VECTOR_COUNT
> + * It provides methods to
>   * @ref bsp_interrupt_handler_install() "install",
>   * @ref bsp_interrupt_handler_remove() "remove" and
>   * @ref bsp_interrupt_handler_dispatch() "dispatch" interrupt handlers for each
> @@ -144,7 +144,7 @@ static inline rtems_vector_number bsp_interrupt_handler_index(
>   *
>   * You have to configure the BSP interrupt support in the <bsp/irq.h> file
>   * for each BSP.  For a minimum configuration you have to provide
> - * @ref BSP_INTERRUPT_VECTOR_MAX.
> + * @ref BSP_INTERRUPT_VECTOR_COUNT.
>   *
>   * For boards with small memory requirements you can define
>   * @ref BSP_INTERRUPT_USE_INDEX_TABLE.  With an enabled index table the handler
> @@ -179,7 +179,7 @@ static inline rtems_vector_number bsp_interrupt_handler_index(
>     */
>    static inline bool bsp_interrupt_is_valid_vector(rtems_vector_number vector)
>    {
> -    return vector <= (rtems_vector_number) BSP_INTERRUPT_VECTOR_MAX;
> +    return vector < (rtems_vector_number) BSP_INTERRUPT_VECTOR_COUNT;
>    }
>  #endif
>
> diff --git a/bsps/m68k/genmcf548x/irq/irq.c b/bsps/m68k/genmcf548x/irq/irq.c
> index d010865152..547e851cdd 100644
> --- a/bsps/m68k/genmcf548x/irq/irq.c
> +++ b/bsps/m68k/genmcf548x/irq/irq.c
> @@ -19,7 +19,7 @@
>  static inline bool is_valid_vector(rtems_vector_number vector)
>  {
>    return 1 <= vector
> -    && vector <= (rtems_vector_number) BSP_INTERRUPT_VECTOR_MAX;
> +    && vector < (rtems_vector_number) BSP_INTERRUPT_VECTOR_COUNT;
>  }
>
This one is weird. I don't know if there's an elegant solution though.
The "BSP_INTERRUPT_VECTOR_COUNT" isn't actually the number of vectors
in this BSP, since 0 is not a valid vector. However, I'm ok because
BSP_INTERRUPT_VECTOR_COUNT is an upper bound on the number of vectors.
Probably, this point needs to be documented carefully at least for
this particular BSP.

>  void asm_default_interrupt(void);
> @@ -32,7 +32,7 @@ typedef struct {
>    const char *info;
>  } interrupt_control;
>
> -static interrupt_control interrupt_controls[BSP_INTERRUPT_VECTOR_MAX + 1];
> +static interrupt_control interrupt_controls[BSP_INTERRUPT_VECTOR_COUNT];
>
>  static uint32_t vector_to_reg(rtems_vector_number vector)
>  {
> diff --git a/bsps/mips/shared/irq/irq.c b/bsps/mips/shared/irq/irq.c
> index 1c2d3b8c5b..9fed3db489 100644
> --- a/bsps/mips/shared/irq/irq.c
> +++ b/bsps/mips/shared/irq/irq.c
> @@ -64,7 +64,7 @@ static const char *const cause_strings[32] = {
>
>  static inline bool bsp_irq_is_valid(rtems_vector_number vector)
>  {
> -  return vector <= BSP_INTERRUPT_VECTOR_MAX;
> +  return vector < BSP_INTERRUPT_VECTOR_COUNT;
>  }
>
>  void bsp_interrupt_vector_enable(rtems_vector_number vector)
> diff --git a/bsps/powerpc/qoriq/irq/irq.c b/bsps/powerpc/qoriq/irq/irq.c
> index 7f9680ea1c..ffbff25dc6 100644
> --- a/bsps/powerpc/qoriq/irq/irq.c
> +++ b/bsps/powerpc/qoriq/irq/irq.c
> @@ -128,7 +128,7 @@ rtems_status_code bsp_interrupt_facility_initialize(void)
>  {
>         unsigned int i;
>
> -       for (i = 0; i <= BSP_INTERRUPT_VECTOR_MAX; ++i) {
> +       for (i = 0; i < BSP_INTERRUPT_VECTOR_COUNT; ++i) {
>                 uint32_t config;
>                 unsigned int priority;
>                 uint32_t destination;
> @@ -354,7 +354,7 @@ rtems_status_code bsp_interrupt_facility_initialize(void)
>
>                 pic_reset();
>
> -               for (i = 0; i <= BSP_INTERRUPT_VECTOR_MAX; ++i) {
> +               for (i = 0; i < BSP_INTERRUPT_VECTOR_COUNT; ++i) {
>                         volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(i);
>
>                         src_cfg->vpr = VPR_MSK | VPR_P
> @@ -375,7 +375,7 @@ rtems_status_code bsp_interrupt_facility_initialize(void)
>
>         qoriq.pic.ctpr = 0;
>
> -       for (i = 0; i <= BSP_INTERRUPT_VECTOR_MAX; ++i) {
> +       for (i = 0; i < BSP_INTERRUPT_VECTOR_COUNT; ++i) {
>                 qoriq.pic.iack;
>                 qoriq.pic.eoi = 0;
>                 qoriq.pic.whoami;
> diff --git a/bsps/shared/irq/irq-info.c b/bsps/shared/irq/irq-info.c
> index 697976e525..a52465ef09 100644
> --- a/bsps/shared/irq/irq-info.c
> +++ b/bsps/shared/irq/irq-info.c
> @@ -87,7 +87,7 @@ void bsp_interrupt_report_with_plugin(
>      "--------+----------------------------------+---------+------------+------------\n"
>    );
>
> -  for (v = 0; v <= BSP_INTERRUPT_VECTOR_MAX; ++v) {
> +  for (v = 0; v < BSP_INTERRUPT_VECTOR_COUNT; ++v) {
>      e.vector = v;
>      rtems_interrupt_handler_iterate(
>        v,
> diff --git a/bsps/shared/irq/irq-server.c b/bsps/shared/irq/irq-server.c
> index fa2153fcb0..8b9d82eb29 100644
> --- a/bsps/shared/irq/irq-server.c
> +++ b/bsps/shared/irq/irq-server.c
> @@ -42,7 +42,7 @@
>
>  #include <bsp/irq-generic.h>
>
> -#define BSP_INTERRUPT_SERVER_MANAGEMENT_VECTOR (BSP_INTERRUPT_VECTOR_MAX + 1)
> +#define BSP_INTERRUPT_SERVER_MANAGEMENT_VECTOR BSP_INTERRUPT_VECTOR_COUNT
>
>  static rtems_interrupt_server_control bsp_interrupt_server_default;
>
> diff --git a/testsuites/smptests/smpcapture02/init.c b/testsuites/smptests/smpcapture02/init.c
> index 329fd344e6..4b11e6bbd7 100644
> --- a/testsuites/smptests/smpcapture02/init.c
> +++ b/testsuites/smptests/smpcapture02/init.c
> @@ -316,7 +316,7 @@ static void Init(rtems_task_argument arg)
>    test(cpu_count);
>
>    /* Try to find the clock interrupt handler */
> -  for ( vec = 0; vec <= BSP_INTERRUPT_VECTOR_MAX; vec++ ) {
> +  for ( vec = 0; vec < BSP_INTERRUPT_VECTOR_COUNT; vec++ ) {
>      rtems_interrupt_handler_iterate(vec, locate_clock_interrupt_handler, &cih);
>      if ( cih.found )
>        break;
> --
> 2.26.2
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list