diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-04 16:39:58 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-09 07:09:47 +0200 |
commit | 4b28d3c79729e582c3cde8392524a15f3e7923ca (patch) | |
tree | 726aab374bb374aeb96d3ca6334d011b5a1e511c /bsps/shared/shmdr/shmdr-getlq.c | |
parent | bsps: Move VME support to bsps (diff) | |
download | rtems-4b28d3c79729e582c3cde8392524a15f3e7923ca.tar.bz2 |
bsps: Move shmdr to bsps
This patch is a part of the BSP source reorganization.
Update #3285.
Diffstat (limited to 'bsps/shared/shmdr/shmdr-getlq.c')
-rw-r--r-- | bsps/shared/shmdr/shmdr-getlq.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/bsps/shared/shmdr/shmdr-getlq.c b/bsps/shared/shmdr/shmdr-getlq.c new file mode 100644 index 0000000000..afb288b793 --- /dev/null +++ b/bsps/shared/shmdr/shmdr-getlq.c @@ -0,0 +1,45 @@ +/* Shm_Envelope_control *Shm_Locked_queue_Get( lq_cb ) + * + * This routine returns an envelope control block from a shared + * memory queue. + * + * Input parameters: + * lq_cb - pointer to a locked queue control block + * + * Output parameters: + * returns - pointer to an envelope control block + * - NULL if no envelopes on specified queue + * + * COPYRIGHT (c) 1989-1999. + * 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 <shm_driver.h> + +Shm_Envelope_control *Shm_Locked_queue_Get( + Shm_Locked_queue_Control *lq_cb +) +{ + Shm_Envelope_control *tmp_ecb; + uint32_t tmpfront; + + tmp_ecb = NULL; + Shm_Lock( lq_cb ); + + tmpfront = Shm_Convert(lq_cb->front); + if ( tmpfront != Shm_Locked_queue_End_of_list ) { + tmp_ecb = &Shm_Envelopes[ tmpfront ]; + lq_cb->front = tmp_ecb->next; + if ( tmp_ecb->next == Shm_Locked_queue_End_of_list ) + lq_cb->rear = Shm_Locked_queue_End_of_list; + tmp_ecb->next = Shm_Locked_queue_Not_on_list; + } + + Shm_Unlock( lq_cb ); + return( tmp_ecb ); +} |