diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-07-11 11:54:30 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-07-12 08:00:13 +0200 |
commit | af207fa9f6ac891b9a61f36bd8382eb89358aeca (patch) | |
tree | 0f6604b9702087b467c48bd747b63f865b43c697 /c/src/lib/libbsp/shared | |
parent | Add interrupt server move (diff) | |
download | rtems-af207fa9f6ac891b9a61f36bd8382eb89358aeca.tar.bz2 |
Add interrupt vector set/get affinity
Close #3071.
Diffstat (limited to 'c/src/lib/libbsp/shared')
-rwxr-xr-x | c/src/lib/libbsp/shared/src/irq-generic.c | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/c/src/lib/libbsp/shared/src/irq-generic.c b/c/src/lib/libbsp/shared/src/irq-generic.c index 7f943d96cb..a773644eae 100755 --- a/c/src/lib/libbsp/shared/src/irq-generic.c +++ b/c/src/lib/libbsp/shared/src/irq-generic.c @@ -9,7 +9,7 @@ /* * Based on concepts of Pavel Pisa, Till Straumann and Eric Valette. * - * Copyright (c) 2008-2014 embedded brains GmbH. + * Copyright (c) 2008, 2017 embedded brains GmbH. * * embedded brains GmbH * Dornierstr. 4 @@ -573,3 +573,54 @@ bool bsp_interrupt_handler_is_empty(rtems_vector_number vector) return empty; } + +rtems_status_code rtems_interrupt_set_affinity( + rtems_vector_number vector, + size_t affinity_size, + const cpu_set_t *affinity +) +{ + Processor_mask set; + Processor_mask_Copy_status status; + + if (!bsp_interrupt_is_valid_vector(vector)) { + return RTEMS_INVALID_ID; + } + + status = _Processor_mask_From_cpu_set_t(&set, affinity_size, affinity); + if (status != PROCESSOR_MASK_COPY_LOSSLESS) { + return RTEMS_INVALID_SIZE; + } + +#if defined(RTEMS_SMP) + bsp_interrupt_set_affinity(vector, &set); +#endif + return RTEMS_SUCCESSFUL; +} + +rtems_status_code rtems_interrupt_get_affinity( + rtems_vector_number vector, + size_t affinity_size, + cpu_set_t *affinity +) +{ + Processor_mask set; + Processor_mask_Copy_status status; + + if (!bsp_interrupt_is_valid_vector(vector)) { + return RTEMS_INVALID_ID; + } + +#if defined(RTEMS_SMP) + bsp_interrupt_get_affinity(vector, &set); +#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_SUCCESSFUL; +} |