forked from Imagelibrary/rtems
65 lines
1.4 KiB
C
65 lines
1.4 KiB
C
/* Shared Memory Lock Routines
|
|
*
|
|
* This shared memory locked queue support routine need to be
|
|
* able to lock the specified locked queue. Interrupts are
|
|
* disabled while the queue is locked to prevent preemption
|
|
* and deadlock when two tasks poll for the same lock.
|
|
* previous level.
|
|
*
|
|
* COPYRIGHT (c) 1989-2008.
|
|
* On-Line Applications Research Corporation (OAR).
|
|
*
|
|
* The license and distribution terms for this file may in
|
|
* the file LICENSE in this distribution or at
|
|
* http://www.rtems.org/license/LICENSE.
|
|
*/
|
|
|
|
#include <rtems.h>
|
|
#include <bsp.h>
|
|
#include <shm_driver.h>
|
|
#include <psim.h>
|
|
|
|
/*
|
|
* Shm_Initialize_lock
|
|
*
|
|
* Initialize the lock for the specified locked queue.
|
|
*/
|
|
|
|
void Shm_Initialize_lock(
|
|
Shm_Locked_queue_Control *lq_cb
|
|
)
|
|
{
|
|
/* nothing required -- done implicitly by device tree */
|
|
}
|
|
|
|
/* void _Shm_Lock( &lq_cb )
|
|
*
|
|
* This shared memory locked queue support routine locks the
|
|
* specified locked queue. It disables interrupts to prevent
|
|
* a deadlock condition.
|
|
*/
|
|
|
|
static rtems_interrupt_level level;
|
|
|
|
void Shm_Lock(
|
|
Shm_Locked_queue_Control *lq_cb
|
|
)
|
|
{
|
|
rtems_interrupt_disable( level );
|
|
(void) PSIM.Semaphore.lock;
|
|
}
|
|
|
|
/*
|
|
* Shm_Unlock
|
|
*
|
|
* Unlock the lock for the specified locked queue.
|
|
*/
|
|
|
|
void Shm_Unlock(
|
|
Shm_Locked_queue_Control *lq_cb
|
|
)
|
|
{
|
|
(void) PSIM.Semaphore.unlock;
|
|
rtems_interrupt_enable( level );
|
|
}
|