diff options
Diffstat (limited to 'c/src/libchip/shmdr/poll.c')
-rw-r--r-- | c/src/libchip/shmdr/poll.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/c/src/libchip/shmdr/poll.c b/c/src/libchip/shmdr/poll.c new file mode 100644 index 0000000000..9afe6883df --- /dev/null +++ b/c/src/libchip/shmdr/poll.c @@ -0,0 +1,53 @@ +/* void Shm_Poll() + * + * This routine polls to see if a packet has arrived. If one + * has it informs the executive. It is typically called from + * the clock tick interrupt service routine. + * + * Input parameters: NONE + * + * Output parameters: NONE + * + * COPYRIGHT (c) 1989-1997. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may in + * the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include <rtems.h> +#include <rtems/score/sysstate.h> +#include <rtems/libio.h> + +#include "shm.h" + +void Shm_Poll() +{ + rtems_unsigned32 tmpfront; + rtems_libio_ioctl_args_t args; + + /* invoke clock isr */ + args.iop = 0; + args.command = rtems_build_name('I', 'S', 'R', ' '); + (void) rtems_io_control(rtems_clock_major, rtems_clock_minor, &args); + + /* + * Check for msgs only if we are "up" + * This avoids a race condition where we may get a clock + * interrupt before MPCI has completed its init + */ + + if (_System_state_Is_up(_System_state_Get())) + { + tmpfront = Shm_Local_receive_queue->front; + if ( Shm_Convert(tmpfront) != Shm_Locked_queue_End_of_list ) + { + rtems_multiprocessing_announce(); + Shm_Interrupt_count++; + } + } +} |