[PATCH 04/41] rtems: Add rtems_interrupt_cause_on()

Gedare Bloom gedare at rtems.org
Wed Jul 21 18:10:05 UTC 2021


On Wed, Jul 21, 2021 at 11:46 AM Gedare Bloom <gedare at rtems.org> wrote:
>
> On Wed, Jul 21, 2021 at 11:43 AM Gedare Bloom <gedare at rtems.org> wrote:
> >
> > Before we bake this into the API forever, I want to ask if "cause" is
> > the right word to use here? Often, "interrupt cause" is thought of as
> > a noun to mean what caused the interrupt, while the verb is usually
> > "raise" or post, trigger, etc. Because "cause" is both a noun and a
> > verb that mean something in this context, it may be better to use a
> > different verb. English is pretty much terrible.
> >
> > I don't have a major problem with sticking to "cause" but thought I'd
> > bring this up.
> >
> > On Mon, Jul 12, 2021 at 6:50 AM Sebastian Huber
> > <sebastian.huber at embedded-brains.de> wrote:
> > >
> > > Document the currently not implemented rtems_interrupt_cause() and
> > > rtems_interrupt_clear().
> > >
> > > Update #3269.
> > > ---
> > >  cpukit/include/rtems/rtems/intr.h | 162 +++++++++++++++++++++++-------
> > >  1 file changed, 125 insertions(+), 37 deletions(-)
> > >
> > > diff --git a/cpukit/include/rtems/rtems/intr.h b/cpukit/include/rtems/rtems/intr.h
> > > index 178cf342df..a8b1b892b5 100644
> > > --- a/cpukit/include/rtems/rtems/intr.h
> > > +++ b/cpukit/include/rtems/rtems/intr.h
> > > @@ -54,6 +54,7 @@
> > >  #ifndef _RTEMS_RTEMS_INTR_H
> > >  #define _RTEMS_RTEMS_INTR_H
> > >
> > > +#include <stdint.h>
> > >  #include <rtems/rtems/status.h>
> > >  #include <rtems/score/basedefs.h>
> > >  #include <rtems/score/cpu.h>
> > > @@ -99,7 +100,7 @@ typedef ISR_Handler rtems_isr;
> > >   * @ingroup RTEMSAPIClassicIntr
> > >   *
> > >   * @brief Interrupt service routines installed by rtems_interrupt_catch() shall
> > > - *   have this function pointer type.
> > > + *   have this type.
> > >   */
> > >  #if CPU_SIMPLE_VECTORED_INTERRUPTS == TRUE
> > >    typedef ISR_Handler_entry rtems_isr_entry;
> > > @@ -502,42 +503,6 @@ rtems_status_code rtems_interrupt_catch(
> > >   */
> > >  #define rtems_interrupt_is_in_progress() _ISR_Is_in_progress()
> > >
> > > -/* Generated from spec:/rtems/intr/if/cause */
> > > -
> > > -/**
> > > - * @ingroup RTEMSAPIClassicIntr
> > > - *
> > > - * @brief Causes the interrupt.
> > > - *
> > > - * @param _vector is the vector number of the interrupt to cause.
> > > - *
> > > - * @par Constraints
> > > - * @parblock
> > > - * The following constraints apply to this directive:
> > > - *
> > > - * * The directive is not implemented.
> > > - * @endparblock
> > > - */
> > > -#define rtems_interrupt_cause( _vector ) do { } while ( 0 )
> > > -
> > > -/* Generated from spec:/rtems/intr/if/clear */
> > > -
> > > -/**
> > > - * @ingroup RTEMSAPIClassicIntr
> > > - *
> > > - * @brief Clears the interrupt.
> > > - *
> > > - * @param _vector is the vector number of the interrupt to clear.
> > > - *
> > > - * @par Constraints
> > > - * @parblock
> > > - * The following constraints apply to this directive:
> > > - *
> > > - * * The directive is not implemented.
> > > - * @endparblock
> > > - */
> > > -#define rtems_interrupt_clear( _vector ) do { } while ( 0 )
> > > -
> > >  /* Generated from spec:/rtems/intr/if/lock-initialize */
> > >
> > >  /**
> > > @@ -909,6 +874,129 @@ rtems_status_code rtems_interrupt_catch(
> > >  #define RTEMS_INTERRUPT_LOCK_REFERENCE( _designator, _target ) \
> > >    ISR_LOCK_REFERENCE( _designator, _target )
> > >
> > > +/* Generated from spec:/rtems/intr/if/cause */
> > > +
> > > +/**
> > > + * @ingroup RTEMSAPIClassicIntr
> > > + *
> > > + * @brief Causes the interrupt vector.
> > > + *
> > > + * @param vector is the number of the interrupt vector to cause.
> > > + *
> > > + * @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
> > > + *
> > > + * @retval ::RTEMS_INVALID_ID There was no interrupt vector associated with the
> > > + *   number specified by ``vector``.
> > > + *
> > > + * @retval ::RTEMS_UNSATISFIED The request to cause the interrupt vector has
> > > + *   not been satisfied.
> > > + *
> > > + * @par Notes
> > > + * The rtems_interrupt_get_attributes() directive may be used to check if an
> > > + * interrupt vector can be caused.
> > > + *
> > > + * @par Constraints
> > > + * @parblock
> > > + * The following constraints apply to this directive:
> > > + *
> > > + * * The directive may be called from within interrupt context.
> > > + *
> > > + * * The directive may be called from within device driver initialization
> > > + *   context.
> > > + *
> > > + * * The directive may be called from within task context.
> > > + *
> > > + * * The directive will not cause the calling task to be preempted.
> > > + * @endparblock
> > > + */
> > > +rtems_status_code rtems_interrupt_cause( rtems_vector_number vector );
> > > +
> > > +/* Generated from spec:/rtems/intr/if/cause-on */
> > > +
> > > +/**
> > > + * @ingroup RTEMSAPIClassicIntr
> > > + *
> > > + * @brief Causes the interrupt vector on the processor.
> > > + *
> > > + * @param vector is the number of the interrupt vector to cause.
> > > + *
> > > + * @param cpu_index is the index of the target processor of the interrupt
> > > + *   vector to cause.
> > > + *
> > > + * @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
> > > + *
> > > + * @retval ::RTEMS_INVALID_ID There was no interrupt vector associated with the
> > > + *   number specified by ``vector``.
> > > + *
> > > + * @retval ::RTEMS_NOT_CONFIGURED The processor specified by ``cpu_index`` was
> > > + *   not configured to be used by the application.
> > > + *
> > > + * @retval ::RTEMS_INCORRECT_STATE The processor specified by ``cpu_index`` was
> > > + *   configured to be used by the application, however, it was not online.
> > > + *
> > > + * @retval ::RTEMS_UNSATISFIED The request to cause the interrupt vector has
> > > + *   not been satisfied.
> > > + *
> > > + * @par Notes
> > > + * The rtems_interrupt_get_attributes() directive may be used to check if an
> > > + * interrupt vector can be caused on a processor.
> > > + *
> > > + * @par Constraints
> > > + * @parblock
> > > + * The following constraints apply to this directive:
> > > + *
> > > + * * The directive may be called from within interrupt context.
> > > + *
> > > + * * The directive may be called from within device driver initialization
> > > + *   context.
> > > + *
> > > + * * The directive may be called from within task context.
> > > + *
> > > + * * The directive will not cause the calling task to be preempted.
> > > + * @endparblock
> > > + */
> > > +rtems_status_code rtems_interrupt_cause_on(
>
> One more thing, should we specifically say "on_processor" or
> something, to make it clear what this means? When I first read the
> function name, I thought it is "cause on a condition" so I was
> confused.
>
Another thought with this "cause_on" directive, should we have an
opaque type for the cpu_index?

> > > +  rtems_vector_number vector,
> > > +  uint32_t            cpu_index
> > > +);
> > > +
> > > +/* Generated from spec:/rtems/intr/if/clear */
> > > +
> > > +/**
> > > + * @ingroup RTEMSAPIClassicIntr
> > > + *
> > > + * @brief Clears the interrupt vector.
> > > + *
> > > + * @param vector is the number of the interrupt vector to clear.
> > > + *
> > > + * @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
> > > + *
> > > + * @retval ::RTEMS_INVALID_ID There was no interrupt vector associated with the
> > > + *   number specified by ``vector``.
> > > + *
> > > + * @retval ::RTEMS_UNSATISFIED The request to cause the interrupt vector has
> > > + *   not been satisfied.
> > > + *
> > > + * @par Notes
> > > + * The rtems_interrupt_get_attributes() directive may be used to check if an
> > > + * interrupt vector can be cleared.
> > > + *
> > > + * @par Constraints
> > > + * @parblock
> > > + * The following constraints apply to this directive:
> > > + *
> > > + * * The directive may be called from within interrupt context.
> > > + *
> > > + * * The directive may be called from within device driver initialization
> > > + *   context.
> > > + *
> > > + * * The directive may be called from within task context.
> > > + *
> > > + * * The directive will not cause the calling task to be preempted.
> > > + * @endparblock
> > > + */
> > > +rtems_status_code rtems_interrupt_clear( rtems_vector_number vector );
> > > +
> > >  #ifdef __cplusplus
> > >  }
> > >  #endif
> > > --
> > > 2.26.2
> > >
> > > _______________________________________________
> > > devel mailing list
> > > devel at rtems.org
> > > http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list