summaryrefslogtreecommitdiffstats
path: root/bsps
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-09-20 09:16:17 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-09-20 09:22:46 +0200
commit33ed4123c0f3e6193beb8d6a22d46c9983d0df79 (patch)
tree1fd0434cef45c7412f9ebc581eb4ad76ecf9d0b0 /bsps
parentbsps/beagle: register i2c device at initialization (diff)
downloadrtems-33ed4123c0f3e6193beb8d6a22d46c9983d0df79.tar.bz2
rtems: Add rtems_interrupt_server_entry_move()
The use case for this function is the libbsd. In FreeBSD, the interrupt setup and binding to a processor is done in two steps. Message based interrupts like PCIe MSI and MSI-X interrupts can be implemented through interrupt server entries. They are setup at the default interrupt server and may optionally move to an interrupt server bound to a specific processor.
Diffstat (limited to 'bsps')
-rw-r--r--bsps/shared/irq/irq-server.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/bsps/shared/irq/irq-server.c b/bsps/shared/irq/irq-server.c
index fad0fc661f..0e62d76acb 100644
--- a/bsps/shared/irq/irq-server.c
+++ b/bsps/shared/irq/irq-server.c
@@ -638,6 +638,23 @@ void rtems_interrupt_server_entry_submit(
bsp_interrupt_server_trigger(entry);
}
+rtems_status_code rtems_interrupt_server_entry_move(
+ rtems_interrupt_server_entry *entry,
+ uint32_t destination_server_index
+)
+{
+ rtems_status_code sc;
+ bsp_interrupt_server_context *s;
+
+ s = bsp_interrupt_server_get_context(destination_server_index, &sc);
+ if (s == NULL) {
+ return sc;
+ }
+
+ entry->server = s;
+ return RTEMS_SUCCESSFUL;
+}
+
static void bsp_interrupt_server_entry_synchronize_helper(void *arg)
{
bsp_interrupt_server_helper_data *hd = arg;