diff options
Diffstat (limited to 'bsps/shared/shmdr/shmdr-poll.c')
-rw-r--r-- | bsps/shared/shmdr/shmdr-poll.c | 57 |
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 ); +} + |