summaryrefslogtreecommitdiffstats
path: root/bsps/shared/shmdr/shmdr-poll.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/shared/shmdr/shmdr-poll.c')
-rw-r--r--bsps/shared/shmdr/shmdr-poll.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/bsps/shared/shmdr/shmdr-poll.c b/bsps/shared/shmdr/shmdr-poll.c
new file mode 100644
index 0000000000..39eab7d352
--- /dev/null
+++ b/bsps/shared/shmdr/shmdr-poll.c
@@ -0,0 +1,57 @@
+/**
+ * @file
+ * This routine polls to see if a packet has arrived. If one
+ * has it informs the executive. It uses a Classic API Timer
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2008, 2016.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#include <rtems.h>
+#include <rtems/score/sysstate.h>
+#include <rtems/libio.h>
+
+#include <assert.h>
+
+#include "shm_driver.h"
+
+static rtems_timer_service_routine Shm_Poll_TSR(
+ rtems_id id,
+ void *ignored_address
+)
+{
+ uint32_t tmpfront;
+
+ /*
+ * This should NEVER happen but just in case.
+ */
+ if (!_System_state_Is_up(_System_state_Get()))
+ return;
+
+ tmpfront = Shm_Local_receive_queue->front;
+ if ( Shm_Convert(tmpfront) != Shm_Locked_queue_End_of_list ) {
+ rtems_multiprocessing_announce();
+ Shm_Interrupt_count++;
+ }
+
+ (void) rtems_timer_reset( id );
+}
+
+void Shm_install_timer(void)
+{
+ rtems_id id;
+ rtems_status_code status;
+
+ status = rtems_timer_create( rtems_build_name( 'S', 'H', 'P', 'L' ), &id );
+ assert( !status );
+
+ status = rtems_timer_fire_after( id, 1, Shm_Poll_TSR, NULL );
+ assert( !status );
+}
+