summaryrefslogtreecommitdiffstats
path: root/spec/rtems/intr/if/lock-acquire-isr.yml
blob: e74ea8fe32ad358ec4952225d4f058ed4bff30bc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
brief: |
  Acquires the ISR lock from within an ISR.
copyrights:
- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
- Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
definition:
  default:
    attributes: null
    body: do { (void) ${.:/params[1]/name}; } while ( 0 )
    params:
    - ${lock:/name} *${.:/params[0]/name}
    - ${lock-context:/name} *${.:/params[1]/name}
    return: void
  variants:
  - definition:
      attributes: null
      body: |
        ${/score/smp/if/lock-acquire:/name}(
          &( ${.:/params[0]/name} )->Lock,
          &( ${.:/params[1]/name} )->Lock_context
        )
      params:
      - ${lock:/name} *${.:/params[0]/name}
      - ${lock-context:/name} *${.:/params[1]/name}
      return: void
    enabled-by: defined(${/build-options/if/smp:/name})
description: |
  This directive acquires the ISR lock specified by ${.:/params[0]/name} using
  the lock context provided by ${.:/params[1]/name}.  The interrupt level will
  remain unchanged.
enabled-by: true
index-entries: []
interface-type: macro
links:
- role: interface-placement
  uid: header
- role: interface-ingroup
  uid: group
- role: constraint
  uid: /constraint/directive-ctx-any
- role: constraint
  uid: /constraint/directive-no-preempt
name: rtems_interrupt_lock_acquire_isr
notes: |
  A caller-specific lock context shall be provided for each acquire/release
  pair, for example an automatic variable.

  Where the system was built with SMP support enabled, this directive acquires
  an SMP lock.  An attempt to recursively acquire the lock may result in an
  infinite loop.

  This directive is intended for device drivers and should be called from the
  corresponding interrupt service routine.

  In case the corresponding interrupt service routine can be interrupted by
  higher priority interrupts and these interrupts enter the critical section
  protected by this lock, then the result is unpredictable.  This directive may
  be used under specific circumstances as an optimization.  In doubt, use
  ${lock-acquire:/name} and ${lock-release:/name}.
params:
- description: |
    is the ISR lock to acquire within an ISR.
  dir: inout
  name: _lock
- description: |
    is the ISR lock context.  This lock context shall be used to release the
    lock by calling ${lock-release-isr:/name}.
  dir: out
  name: _lock_context
return: null
type: interface