forked from Imagelibrary/rtems
rtems: Add rtems_interrupt_get_attributes()
Add a directive to query the attributes of an interrupt vector. This can be used for generic tests and system diagnostics. Update #3269.
This commit is contained in:
@@ -419,6 +419,213 @@ rtems_status_code rtems_interrupt_set_affinity(
|
|||||||
const cpu_set_t *affinity
|
const cpu_set_t *affinity
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Generated from spec:/rtems/intr/if/signal-variant */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup RTEMSAPIClassicIntr
|
||||||
|
*
|
||||||
|
* @brief This enumeration provides interrupt trigger signal variants.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
/**
|
||||||
|
* @brief This interrupt signal variant indicates that the interrupt trigger
|
||||||
|
* signal is unspecified.
|
||||||
|
*/
|
||||||
|
RTEMS_INTERRUPT_UNSPECIFIED_SIGNAL,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This interrupt signal variant indicates that the interrupt cannot be
|
||||||
|
* triggered by a signal.
|
||||||
|
*/
|
||||||
|
RTEMS_INTERRUPT_NO_SIGNAL,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This interrupt signal variant indicates that the interrupt is
|
||||||
|
* triggered by a low level signal.
|
||||||
|
*/
|
||||||
|
RTEMS_INTERRUPT_SIGNAL_LEVEL_LOW,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This interrupt signal variant indicates that the interrupt is
|
||||||
|
* triggered by a high level signal.
|
||||||
|
*/
|
||||||
|
RTEMS_INTERRUPT_SIGNAL_LEVEL_HIGH,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This interrupt signal variant indicates that the interrupt is
|
||||||
|
* triggered by a falling edge signal.
|
||||||
|
*/
|
||||||
|
RTEMS_INTERRUPT_SIGNAL_EDGE_FALLING,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This interrupt signal variant indicates that the interrupt is
|
||||||
|
* triggered by a raising edge signal.
|
||||||
|
*/
|
||||||
|
RTEMS_INTERRUPT_SIGNAL_EDGE_RAISING
|
||||||
|
} rtems_interrupt_signal_variant;
|
||||||
|
|
||||||
|
/* Generated from spec:/rtems/intr/if/attributes */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup RTEMSAPIClassicIntr
|
||||||
|
*
|
||||||
|
* @brief This structure provides the attributes of an interrupt vector.
|
||||||
|
*
|
||||||
|
* The rtems_interrupt_get_attributes() directive may be used to obtain the
|
||||||
|
* attributes of an interrupt vector.
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the interrupt vector is maskable by
|
||||||
|
* rtems_interrupt_local_disable(), otherwise it is false.
|
||||||
|
*
|
||||||
|
* Interrupt vectors which are not maskable by rtems_interrupt_local_disable()
|
||||||
|
* should be used with care since they cannot use most operating system
|
||||||
|
* services.
|
||||||
|
*/
|
||||||
|
bool is_maskable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the interrupt vector can be enabled by
|
||||||
|
* rtems_interrupt_vector_enable(), otherwise it is false.
|
||||||
|
*
|
||||||
|
* When an interrupt vector can be enabled, this means that the enabled state
|
||||||
|
* can always be changed from disabled to enabled. For an interrupt vector
|
||||||
|
* which can be enabled it follows that it may be enabled.
|
||||||
|
*/
|
||||||
|
bool can_enable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the interrupt vector may be enabled by
|
||||||
|
* rtems_interrupt_vector_enable(), otherwise it is false.
|
||||||
|
*
|
||||||
|
* When an interrupt vector may be enabled, this means that the enabled state
|
||||||
|
* may be changed from disabled to enabled. The requested enabled state change
|
||||||
|
* should be checked by rtems_interrupt_vector_is_enabled(). Some interrupt
|
||||||
|
* vectors may be optionally available and cannot be enabled on a particular
|
||||||
|
* target.
|
||||||
|
*/
|
||||||
|
bool maybe_enable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the interrupt vector can be disabled by
|
||||||
|
* rtems_interrupt_vector_disable(), otherwise it is false.
|
||||||
|
*
|
||||||
|
* When an interrupt vector can be disabled, this means that the enabled state
|
||||||
|
* can be changed from enabled to disabled. For an interrupt vector which can
|
||||||
|
* be disabled it follows that it may be disabled.
|
||||||
|
*/
|
||||||
|
bool can_disable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the interrupt vector may be disabled by
|
||||||
|
* rtems_interrupt_vector_disable(), otherwise it is false.
|
||||||
|
*
|
||||||
|
* When an interrupt vector may be disabled, this means that the enabled state
|
||||||
|
* may be changed from enabled to disabled. The requested enabled state change
|
||||||
|
* should be checked by rtems_interrupt_vector_is_enabled(). Some interrupt
|
||||||
|
* vectors may be always enabled and cannot be disabled on a particular target.
|
||||||
|
*/
|
||||||
|
bool maybe_disable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the interrupt vector can be raised by
|
||||||
|
* rtems_interrupt_raise(), otherwise it is false.
|
||||||
|
*/
|
||||||
|
bool can_raise;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the interrupt vector can be raised on a
|
||||||
|
* processor by rtems_interrupt_raise_on(), otherwise it is false.
|
||||||
|
*/
|
||||||
|
bool can_raise_on;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the interrupt vector can be cleared by
|
||||||
|
* rtems_interrupt_clear(), otherwise it is false.
|
||||||
|
*/
|
||||||
|
bool can_clear;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the pending status of the interrupt
|
||||||
|
* associated with the interrupt vector is cleared by an interrupt
|
||||||
|
* acknowledge from the processor, otherwise it is false.
|
||||||
|
*/
|
||||||
|
bool cleared_by_acknowledge;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the affinity set of the interrupt vector can
|
||||||
|
* be obtained by rtems_interrupt_get_affinity(), otherwise it is false.
|
||||||
|
*/
|
||||||
|
bool can_get_affinity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the affinity set of the interrupt vector can
|
||||||
|
* be set by rtems_interrupt_set_affinity(), otherwise it is false.
|
||||||
|
*/
|
||||||
|
bool can_set_affinity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member is true, if the interrupt associated with the interrupt
|
||||||
|
* vector can be triggered by a message.
|
||||||
|
*
|
||||||
|
* Interrupts may be also triggered by signals, rtems_interrupt_raise(), or
|
||||||
|
* rtems_interrupt_raise_on(). Examples for message triggered interrupts are
|
||||||
|
* the PCIe MSI/MSI-X and the ARM GICv3 Locality-specific Peripheral Interrupts
|
||||||
|
* (LPI).
|
||||||
|
*/
|
||||||
|
bool can_be_triggered_by_message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This member describes the trigger signal of the interrupt associated
|
||||||
|
* with the interrupt vector.
|
||||||
|
*
|
||||||
|
* Interrupts are normally triggered by signals which indicate an interrupt
|
||||||
|
* request from a peripheral. Interrupts may be also triggered by messages,
|
||||||
|
* rtems_interrupt_raise(), or rtems_interrupt_raise_on().
|
||||||
|
*/
|
||||||
|
rtems_interrupt_signal_variant trigger_signal;
|
||||||
|
} rtems_interrupt_attributes;
|
||||||
|
|
||||||
|
/* Generated from spec:/rtems/intr/if/get-attributes */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup RTEMSAPIClassicIntr
|
||||||
|
*
|
||||||
|
* @brief Gets the attributes of the interrupt vector.
|
||||||
|
*
|
||||||
|
* @param vector is the interrupt vector number.
|
||||||
|
*
|
||||||
|
* @param[out] attributes is the pointer to an rtems_interrupt_attributes
|
||||||
|
* object. When the directive call is successful, the attributes of the
|
||||||
|
* interrupt vector will be stored in this object.
|
||||||
|
*
|
||||||
|
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
|
||||||
|
*
|
||||||
|
* @retval ::RTEMS_INVALID_ADDRESS The ``attributes`` parameter was NULL.
|
||||||
|
*
|
||||||
|
* @retval ::RTEMS_INVALID_ID There was no interrupt vector associated with the
|
||||||
|
* number specified by ``vector``.
|
||||||
|
*
|
||||||
|
* @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_get_attributes(
|
||||||
|
rtems_vector_number vector,
|
||||||
|
rtems_interrupt_attributes *attributes
|
||||||
|
);
|
||||||
|
|
||||||
/* Generated from spec:/rtems/intr/if/handler-iterate */
|
/* Generated from spec:/rtems/intr/if/handler-iterate */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user