Spinlock Handler


Data Structures

struct  CORE_spinlock_Attributes
struct  CORE_spinlock_Control

Defines

#define CORE_SPINLOCK_STATUS_LAST   CORE_SPINLOCK_NOT_LOCKED
#define CORE_SPINLOCK_UNLOCKED   0
#define CORE_SPINLOCK_LOCKED   1

Enumerations

enum  CORE_spinlock_Status {
  CORE_SPINLOCK_SUCCESSFUL, CORE_SPINLOCK_HOLDER_RELOCKING, CORE_SPINLOCK_NOT_HOLDER, CORE_SPINLOCK_TIMEOUT,
  CORE_SPINLOCK_IS_BUSY, CORE_SPINLOCK_UNAVAILABLE, CORE_SPINLOCK_NOT_LOCKED
}

Functions

void _CORE_spinlock_Initialize (CORE_spinlock_Control *the_spinlock, CORE_spinlock_Attributes *the_spinlock_attributes)
CORE_spinlock_Status _CORE_spinlock_Wait (CORE_spinlock_Control *the_spinlock, boolean wait, Watchdog_Interval timeout)
CORE_spinlock_Status _CORE_spinlock_Release (CORE_spinlock_Control *the_spinlock)
RTEMS_INLINE_ROUTINE boolean _CORE_spinlock_Is_busy (CORE_spinlock_Control *the_spinlock)

Detailed Description

This handler encapsulates functionality which provides the foundation Spinlock services used in all of the APIs supported by RTEMS.

Define Documentation

#define CORE_SPINLOCK_LOCKED   1

This indicates the lock is unavailable.

#define CORE_SPINLOCK_STATUS_LAST   CORE_SPINLOCK_NOT_LOCKED

This is a shorthand for the last status code.

#define CORE_SPINLOCK_UNLOCKED   0

This indicates the lock is available.


Enumeration Type Documentation

Core Spinlock handler return statuses.

Enumerator:
CORE_SPINLOCK_SUCCESSFUL  This status indicates that the operation completed successfully.
CORE_SPINLOCK_HOLDER_RELOCKING  This status indicates that the current thread already holds the spinlock. An attempt to relock it will result in deadlock.
CORE_SPINLOCK_NOT_HOLDER  This status indicates that the current thread is attempting to unlock a spinlock that is held by another thread.
CORE_SPINLOCK_TIMEOUT  This status indicates that a thread reached the limit of time it was willing to wait on the spin lock.
CORE_SPINLOCK_IS_BUSY  This status indicates that a thread is currently waiting for this spin lock.
CORE_SPINLOCK_UNAVAILABLE  This status indicates that the spinlock is currently locked and thus unavailable.
CORE_SPINLOCK_NOT_LOCKED  This status indicates that the spinlock is not currently locked and thus should not be released.


Function Documentation

void _CORE_spinlock_Initialize ( CORE_spinlock_Control the_spinlock,
CORE_spinlock_Attributes the_spinlock_attributes 
)

This routine initializes the spinlock based on the parameters passed.

Parameters:
[in] the_spinlock is the spinlock to initialize
[in] the_spinlock_attributes define the behavior of this instance

RTEMS_INLINE_ROUTINE boolean _CORE_spinlock_Is_busy ( CORE_spinlock_Control the_spinlock  ) 

This method is used to determine if the spinlock is available or not.

Parameters:
[in] the_spinlock will be checked
Returns:
This method will return TRUE if the spinlock is busy and FALSE otherwise.

References CORE_spinlock_Control::users.

CORE_spinlock_Status _CORE_spinlock_Release ( CORE_spinlock_Control the_spinlock  ) 

This routine manually releases the spinlock. All of the threads waiting for the spinlock will be readied.

Parameters:
[in] the_spinlock is the spinlock to surrender

CORE_spinlock_Status _CORE_spinlock_Wait ( CORE_spinlock_Control the_spinlock,
boolean  wait,
Watchdog_Interval  timeout 
)

This routine wait for the spinlock to be released. If the spinlock is set to automatic and this is the appropriate thread, then it returns immediately. Otherwise, the calling thread is blocked until the spinlock is released.

Parameters:
[in] the_spinlock is the spinlock to wait for
[in] wait is true if willing to wait
[in] timeout is the maximum number of ticks to spin (0 is forever)
Returns:
A status is returned which indicates the success or failure of this operation.


Generated on Fri Jul 4 00:21:26 2008 for RTEMSSuperCore by  doxygen 1.5.6