RTEMS 6.1-rc4
|
This group contains the ISR locks implementation. More...
Files | |
file | isrlock.h |
This header file provides the interfaces of the ISR Locks. | |
Data Structures | |
struct | ISR_lock_Context |
Local ISR lock context for acquire and release pairs. More... | |
Macros | |
#define | ISR_LOCK_NEEDS_OBJECT 0 |
If this define has a non-zero value, then the interrupt lock operations require an object of type ::ISR_lock_Control, otherwise no lock object is required. | |
#define | _ISR_lock_Initialize(_lock, _name) do { (void) _name; } while (0) |
Initializes an ISR lock. | |
#define | _ISR_lock_Destroy(_lock) |
Destroys an ISR lock. | |
#define | _ISR_lock_Set_name(_lock, _name) |
Sets the name of an ISR lock. | |
#define | _ISR_lock_ISR_disable_and_acquire(_lock, _context) _ISR_Local_disable( ( _context )->isr_level ) |
Acquires an ISR lock. | |
#define | _ISR_lock_Release_and_ISR_enable(_lock, _context) _ISR_Local_enable( ( _context )->isr_level ) |
Releases an ISR lock. | |
#define | _ISR_lock_Acquire(_lock, _context) do { (void) _context; } while ( 0 ) |
Acquires an ISR lock inside an ISR disabled section. | |
#define | _ISR_lock_Release(_lock, _context) do { (void) _context; } while ( 0 ) |
Releases an ISR lock inside an ISR disabled section. | |
#define | _ISR_lock_Acquire_inline(_lock, _context) do { (void) _context; } while ( 0 ) |
Acquires an ISR lock inside an ISR disabled section (inline). | |
#define | _ISR_lock_Release_inline(_lock, _context) do { (void) _context; } while ( 0 ) |
Releases an ISR lock inside an ISR disabled section (inline). | |
#define | _ISR_lock_ISR_disable_profile(_context) |
#define | _ISR_lock_ISR_disable(_context) |
Disables interrupts and saves the previous interrupt state in the ISR lock context. | |
#define | _ISR_lock_ISR_enable(_context) _ISR_Local_enable( ( _context )->isr_level ) |
Restores the saved interrupt state of the ISR lock context. | |
This group contains the ISR locks implementation.
The ISR locks are low-level locks to protect critical sections accessed by threads and interrupt service routines.
In uniprocessor configurations the ISR locks degrade to simple ISR disable/enable sequences. No additional storage or objects are required.
This synchronization primitive is supported in SMP configurations. Here SMP locks are used.
#define _ISR_lock_Acquire | ( | _lock, | |
_context | |||
) | do { (void) _context; } while ( 0 ) |
Acquires an ISR lock inside an ISR disabled section.
The interrupt status will remain unchanged. On SMP configurations this function acquires an SMP lock.
In case the executing context can be interrupted by higher priority interrupts and these interrupts enter the critical section protected by this lock, then the result is unpredictable.
[in] | _lock | The ISR lock control. |
[in] | _context | The local ISR lock context for an acquire and release pair. |
#define _ISR_lock_Acquire_inline | ( | _lock, | |
_context | |||
) | do { (void) _context; } while ( 0 ) |
Acquires an ISR lock inside an ISR disabled section (inline).
#define _ISR_lock_Destroy | ( | _lock | ) |
Destroys an ISR lock.
Concurrent destruction leads to unpredictable results.
[in] | _lock | The ISR lock control. |
#define _ISR_lock_Initialize | ( | _lock, | |
_name | |||
) | do { (void) _name; } while (0) |
Initializes an ISR lock.
Concurrent initialization leads to unpredictable results.
[in] | _lock | The ISR lock control. |
[in] | _name | The name for the ISR lock. This name must be a string persistent throughout the life time of this lock. The name is only used if profiling is enabled. |
#define _ISR_lock_ISR_disable | ( | _context | ) |
Disables interrupts and saves the previous interrupt state in the ISR lock context.
This function can be used in thread and interrupt context.
[in] | _context | The local ISR lock context to store the interrupt state. |
#define _ISR_lock_ISR_disable_and_acquire | ( | _lock, | |
_context | |||
) | _ISR_Local_disable( ( _context )->isr_level ) |
Acquires an ISR lock.
Interrupts will be disabled. On SMP configurations this function acquires an SMP lock.
This function can be used in thread and interrupt context.
[in] | _lock | The ISR lock control. |
[in] | _context | The local ISR lock context for an acquire and release pair. |
#define _ISR_lock_ISR_enable | ( | _context | ) | _ISR_Local_enable( ( _context )->isr_level ) |
Restores the saved interrupt state of the ISR lock context.
This function can be used in thread and interrupt context.
[in] | _context | The local ISR lock context containing the saved interrupt state. |
#define _ISR_lock_Release | ( | _lock, | |
_context | |||
) | do { (void) _context; } while ( 0 ) |
Releases an ISR lock inside an ISR disabled section.
The interrupt status will remain unchanged. On SMP configurations this function releases an SMP lock.
[in] | _lock | The ISR lock control. |
[in] | _context | The local ISR lock context for an acquire and release pair. |
#define _ISR_lock_Release_and_ISR_enable | ( | _lock, | |
_context | |||
) | _ISR_Local_enable( ( _context )->isr_level ) |
Releases an ISR lock.
The interrupt status will be restored. On SMP configurations this function releases an SMP lock.
This function can be used in thread and interrupt context.
[in] | _lock | The ISR lock control. |
[in] | _context | The local ISR lock context for an acquire and release pair. |
#define _ISR_lock_Release_inline | ( | _lock, | |
_context | |||
) | do { (void) _context; } while ( 0 ) |
Releases an ISR lock inside an ISR disabled section (inline).
#define _ISR_lock_Set_name | ( | _lock, | |
_name | |||
) |
Sets the name of an ISR lock.
[out] | _lock | The ISR lock control. |
_name | The name for the ISR lock. This name must be a string persistent throughout the life time of this lock. The name is only used if profiling is enabled. |
#define ISR_LOCK_NEEDS_OBJECT 0 |
If this define has a non-zero value, then the interrupt lock operations require an object of type ::ISR_lock_Control, otherwise no lock object is required.