forked from Imagelibrary/rtems
bsps/irq: bsp_interrupt_get_affinity()
Return a status code for bsp_interrupt_get_affinity(). Update #3269.
This commit is contained in:
@@ -74,7 +74,7 @@ void bsp_interrupt_set_affinity(
|
|||||||
const Processor_mask *affinity
|
const Processor_mask *affinity
|
||||||
);
|
);
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -385,7 +385,7 @@ void bsp_interrupt_set_affinity(
|
|||||||
const Processor_mask *affinity
|
const Processor_mask *affinity
|
||||||
);
|
);
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ void bsp_interrupt_set_affinity(
|
|||||||
rtems_interrupt_lock_release(&lock, &lock_context);
|
rtems_interrupt_lock_release(&lock, &lock_context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
)
|
)
|
||||||
@@ -75,6 +75,7 @@ void bsp_interrupt_get_affinity(
|
|||||||
|
|
||||||
ev_int_get_config(vector, &config, &priority, &destination);
|
ev_int_get_config(vector, &config, &priority, &destination);
|
||||||
_Processor_mask_From_uint32_t(affinity, destination, 0);
|
_Processor_mask_From_uint32_t(affinity, destination, 0);
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
rtems_status_code bsp_interrupt_get_attributes(
|
rtems_status_code bsp_interrupt_get_attributes(
|
||||||
@@ -323,7 +324,7 @@ void bsp_interrupt_set_affinity(
|
|||||||
src_cfg->dr = _Processor_mask_To_uint32_t(affinity, 0);
|
src_cfg->dr = _Processor_mask_To_uint32_t(affinity, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
)
|
)
|
||||||
@@ -331,6 +332,7 @@ void bsp_interrupt_get_affinity(
|
|||||||
volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector);
|
volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector);
|
||||||
|
|
||||||
_Processor_mask_From_uint32_t(affinity, src_cfg->dr, 0);
|
_Processor_mask_From_uint32_t(affinity, src_cfg->dr, 0);
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pic_vector_enable(rtems_vector_number vector, uint32_t msk)
|
static void pic_vector_enable(rtems_vector_number vector, uint32_t msk)
|
||||||
|
|||||||
@@ -35,13 +35,14 @@ RTEMS_INLINE_ROUTINE void bsp_interrupt_set_affinity(
|
|||||||
(void) affinity;
|
(void) affinity;
|
||||||
}
|
}
|
||||||
|
|
||||||
RTEMS_INLINE_ROUTINE void bsp_interrupt_get_affinity(
|
RTEMS_INLINE_ROUTINE rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
(void) vector;
|
(void) vector;
|
||||||
_Processor_mask_From_index( affinity, 0 );
|
_Processor_mask_From_index( affinity, 0 );
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ void bsp_interrupt_set_affinity(
|
|||||||
const Processor_mask *affinity
|
const Processor_mask *affinity
|
||||||
);
|
);
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
|
|||||||
return RTEMS_SUCCESSFUL;
|
return RTEMS_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
)
|
)
|
||||||
@@ -171,6 +171,8 @@ void bsp_interrupt_get_affinity(
|
|||||||
_Processor_mask_Set(affinity, cpu_index);
|
_Processor_mask_Set(affinity, cpu_index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bsp_interrupt_set_affinity(
|
void bsp_interrupt_set_affinity(
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ void bsp_interrupt_set_affinity(
|
|||||||
const Processor_mask *affinity
|
const Processor_mask *affinity
|
||||||
);
|
);
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -399,7 +399,7 @@ void bsp_interrupt_set_affinity(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
)
|
)
|
||||||
@@ -433,4 +433,6 @@ void bsp_interrupt_get_affinity(
|
|||||||
_Processor_mask_Assign(affinity, _SMP_Get_online_processors());
|
_Processor_mask_Assign(affinity, _SMP_Get_online_processors());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -303,7 +303,7 @@ void bsp_interrupt_set_affinity(
|
|||||||
gic_id_set_targets(dist, vector, targets);
|
gic_id_set_targets(dist, vector, targets);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
)
|
)
|
||||||
@@ -312,6 +312,7 @@ void bsp_interrupt_get_affinity(
|
|||||||
uint8_t targets = gic_id_get_targets(dist, vector);
|
uint8_t targets = gic_id_get_targets(dist, vector);
|
||||||
|
|
||||||
_Processor_mask_From_uint32_t(affinity, targets, 0);
|
_Processor_mask_From_uint32_t(affinity, targets, 0);
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets)
|
void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets)
|
||||||
|
|||||||
@@ -410,7 +410,7 @@ void bsp_interrupt_set_affinity(
|
|||||||
gic_id_set_targets(dist, vector, targets);
|
gic_id_set_targets(dist, vector, targets);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
)
|
)
|
||||||
@@ -419,6 +419,7 @@ void bsp_interrupt_get_affinity(
|
|||||||
uint8_t targets = gic_id_get_targets(dist, vector);
|
uint8_t targets = gic_id_get_targets(dist, vector);
|
||||||
|
|
||||||
_Processor_mask_From_uint32_t(affinity, targets, 0);
|
_Processor_mask_From_uint32_t(affinity, targets, 0);
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets)
|
void arm_gic_trigger_sgi(rtems_vector_number vector, uint32_t targets)
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ rtems_status_code rtems_interrupt_get_affinity(
|
|||||||
cpu_set_t *affinity
|
cpu_set_t *affinity
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
rtems_status_code sc;
|
||||||
Processor_mask set;
|
Processor_mask set;
|
||||||
Processor_mask_Copy_status status;
|
Processor_mask_Copy_status status;
|
||||||
|
|
||||||
@@ -79,20 +80,23 @@ rtems_status_code rtems_interrupt_get_affinity(
|
|||||||
return RTEMS_INVALID_ADDRESS;
|
return RTEMS_INVALID_ADDRESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bsp_interrupt_is_valid_vector(vector)) {
|
_Processor_mask_Zero( &set );
|
||||||
return RTEMS_INVALID_ID;
|
|
||||||
|
if ( bsp_interrupt_is_valid_vector( vector ) ) {
|
||||||
|
#if defined(RTEMS_SMP)
|
||||||
|
sc = bsp_interrupt_get_affinity( vector, &set );
|
||||||
|
#else
|
||||||
|
_Processor_mask_From_index( &set, 0 );
|
||||||
|
sc = RTEMS_SUCCESSFUL;
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
sc = RTEMS_INVALID_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(RTEMS_SMP)
|
status = _Processor_mask_To_cpu_set_t( &set, affinity_size, affinity );
|
||||||
bsp_interrupt_get_affinity(vector, &set);
|
if ( sc == RTEMS_SUCCESSFUL && status != PROCESSOR_MASK_COPY_LOSSLESS ) {
|
||||||
#else
|
|
||||||
_Processor_mask_From_index(&set, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
status = _Processor_mask_To_cpu_set_t(&set, affinity_size, affinity);
|
|
||||||
if (status != PROCESSOR_MASK_COPY_LOSSLESS) {
|
|
||||||
return RTEMS_INVALID_SIZE;
|
return RTEMS_INVALID_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return RTEMS_SUCCESSFUL;
|
return sc;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,13 +35,14 @@ RTEMS_INLINE_ROUTINE void bsp_interrupt_set_affinity(
|
|||||||
(void) affinity;
|
(void) affinity;
|
||||||
}
|
}
|
||||||
|
|
||||||
RTEMS_INLINE_ROUTINE void bsp_interrupt_get_affinity(
|
RTEMS_INLINE_ROUTINE rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
(void) vector;
|
(void) vector;
|
||||||
_Processor_mask_From_index( affinity, 0 );
|
_Processor_mask_From_index( affinity, 0 );
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* LIBBSP_ERC32_IRQ_CONFIG_H */
|
#endif /* LIBBSP_ERC32_IRQ_CONFIG_H */
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ void bsp_interrupt_set_affinity(
|
|||||||
const Processor_mask *affinity
|
const Processor_mask *affinity
|
||||||
);
|
);
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -226,11 +226,12 @@ void bsp_interrupt_set_affinity(
|
|||||||
LEON3_IRQCTRL_RELEASE(&lock_context);
|
LEON3_IRQCTRL_RELEASE(&lock_context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bsp_interrupt_get_affinity(
|
rtems_status_code bsp_interrupt_get_affinity(
|
||||||
rtems_vector_number vector,
|
rtems_vector_number vector,
|
||||||
Processor_mask *affinity
|
Processor_mask *affinity
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
*affinity = leon3_interrupt_affinities[vector];
|
*affinity = leon3_interrupt_affinities[vector];
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ static inline int bsp_irq_cpu(int irq)
|
|||||||
#if defined(RTEMS_SMP)
|
#if defined(RTEMS_SMP)
|
||||||
Processor_mask affinity;
|
Processor_mask affinity;
|
||||||
|
|
||||||
bsp_interrupt_get_affinity((rtems_vector_number) irq, &affinity);
|
(void) bsp_interrupt_get_affinity((rtems_vector_number) irq, &affinity);
|
||||||
return (int) _Processor_mask_Find_last_set(&affinity);
|
return (int) _Processor_mask_Find_last_set(&affinity);
|
||||||
#elif defined(LEON3)
|
#elif defined(LEON3)
|
||||||
return _LEON3_Get_current_processor();
|
return _LEON3_Get_current_processor();
|
||||||
|
|||||||
Reference in New Issue
Block a user