mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 15:15:44 +00:00
bsps: Add gicv3_get_attributes()
This commit is contained in:
@@ -327,6 +327,38 @@ static void gicv3_init_cpu_interface(uint32_t cpu_index)
|
||||
WRITE_SR(ICC_CTLR, 0x0);
|
||||
}
|
||||
|
||||
static inline void gicv3_get_attributes(
|
||||
rtems_vector_number vector,
|
||||
rtems_interrupt_attributes *attributes
|
||||
)
|
||||
{
|
||||
attributes->is_maskable = true;
|
||||
attributes->maybe_enable = true;
|
||||
attributes->maybe_disable = true;
|
||||
attributes->can_raise = true;
|
||||
|
||||
if ( vector <= ARM_GIC_IRQ_SGI_LAST ) {
|
||||
/*
|
||||
* It is implementation-defined whether implemented SGIs are permanently
|
||||
* enabled, or can be enabled and disabled by writes to GICD_ISENABLER0 and
|
||||
* GICD_ICENABLER0.
|
||||
*/
|
||||
attributes->can_raise_on = true;
|
||||
attributes->cleared_by_acknowledge = true;
|
||||
attributes->trigger_signal = RTEMS_INTERRUPT_NO_SIGNAL;
|
||||
} else {
|
||||
attributes->can_disable = true;
|
||||
attributes->can_clear = true;
|
||||
attributes->trigger_signal = RTEMS_INTERRUPT_UNSPECIFIED_SIGNAL;
|
||||
|
||||
if ( vector > ARM_GIC_IRQ_PPI_LAST ) {
|
||||
/* SPI */
|
||||
attributes->can_get_affinity = true;
|
||||
attributes->can_set_affinity = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -49,32 +49,7 @@ rtems_status_code bsp_interrupt_get_attributes(
|
||||
rtems_interrupt_attributes *attributes
|
||||
)
|
||||
{
|
||||
attributes->is_maskable = true;
|
||||
attributes->maybe_enable = true;
|
||||
attributes->maybe_disable = true;
|
||||
attributes->can_raise = true;
|
||||
|
||||
if ( vector <= ARM_GIC_IRQ_SGI_LAST ) {
|
||||
/*
|
||||
* It is implementation-defined whether implemented SGIs are permanently
|
||||
* enabled, or can be enabled and disabled by writes to GICD_ISENABLER0 and
|
||||
* GICD_ICENABLER0.
|
||||
*/
|
||||
attributes->can_raise_on = true;
|
||||
attributes->cleared_by_acknowledge = true;
|
||||
attributes->trigger_signal = RTEMS_INTERRUPT_NO_SIGNAL;
|
||||
} else {
|
||||
attributes->can_disable = true;
|
||||
attributes->can_clear = true;
|
||||
attributes->trigger_signal = RTEMS_INTERRUPT_UNSPECIFIED_SIGNAL;
|
||||
|
||||
if ( vector > ARM_GIC_IRQ_PPI_LAST ) {
|
||||
/* SPI */
|
||||
attributes->can_get_affinity = true;
|
||||
attributes->can_set_affinity = true;
|
||||
}
|
||||
}
|
||||
|
||||
gicv3_get_attributes(vector, attributes);
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user