summaryrefslogtreecommitdiffstats
path: root/spec/rtems/intr/if/entry-install.yml
blob: b48e31f405d92a66b2ddeffa9628818d25635cd3 (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
brief: |
  Installs the interrupt entry at the interrupt vector.
copyrights:
- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
definition:
  default:
    attributes: null
    body: null
    params:
    - ${vector-number:/name} ${.:/params[0]/name}
    - ${../../option/if/option:/name} ${.:/params[1]/name}
    - ${entry:/name} *${.:/params[2]/name}
    return: ${../../status/if/code:/name}
  variants: []
description: |
  One of the following mutually exclusive options

  * ${unique:/name}, and

  * ${shared:/name}

  shall be set in the ${.:/params[1]/name} parameter.

  The handler routine of the entry specified by ${.:/params[2]/name} will be
  called with the handler argument of the entry when dispatched.  The order in
  which shared interrupt handlers are dispatched for one vector is defined by
  the installation order.  The first installed handler is dispatched first.

  If the option ${unique:/name} is set, then it will be ensured that the
  handler will be the only one for the interrupt vector.

  If the option ${shared:/name} is set, then multiple handlers may be installed
  for the interrupt vector.
enabled-by: true
index-entries: []
interface-type: function
links:
- role: interface-placement
  uid: header
- role: interface-ingroup
  uid: group
- role: constraint
  uid: /constraint/directive-ctx-devinit
- role: constraint
  uid: /constraint/directive-ctx-task
- role: constraint
  uid: /constraint/object-allocator
- role: constraint
  uid: ../constraint/entry-initialized
name: rtems_interrupt_entry_install
notes: |
  When the directive call was successful, the ownership of the interrupt entry
  has been transferred from the caller to the interrupt service.  An installed
  interrupt entry may be removed from the interrupt service by calling
  ${entry-remove:/name}.
params:
- description: |
    is the interrupt vector number.
  dir: null
  name: vector
- description: |
    is the interrupt entry install option set.
  dir: null
  name: options
- description: |
    is the interrupt entry to install.
  dir: null
  name: entry
return:
  return: null
  return-values:
  - description: |
      The requested operation was successful.
    value: ${../../status/if/successful:/name}
  - description: |
      The ${.:/params[2]/name} parameter was ${/c/if/null:/name}.
    value: ${../../status/if/invalid-address:/name}
  - description: |
      The service was not initialized.
    value: ${../../status/if/incorrect-state:/name}
  - description: |
      The handler routine of the entry was ${/c/if/null:/name}.
    value: ${../../status/if/invalid-address:/name}
  - description: |
      There was no interrupt vector associated with the number specified by
      ${.:/params[0]/name}.
    value: ${../../status/if/invalid-id:/name}
  - description: |
      The directive was called from within interrupt context.
    value: ${../../status/if/called-from-isr:/name}
  - description: |
      An option specified by ${.:/params[1]/name} was not applicable.
    value: ${../../status/if/invalid-number:/name}
  - description: |
      The ${unique:/name} option was set in ${.:/params[2]/name} and the
      interrupt vector was already occupied by a handler.
    value: ${../../status/if/resource-in-use:/name}
  - description: |
      The ${shared:/name} option was set in ${.:/params[2]/name} and the
      interrupt vector was already occupied by a unique handler.
    value: ${../../status/if/resource-in-use:/name}
  - description: |
      The handler routine of the entry specified by ${.:/params[2]/name} was
      already installed for the interrupt vector specified by
      ${.:/params[0]/name} with an argument equal to the handler argument of
      the entry.
    value: ${../../status/if/too-many:/name}
type: interface