1 # ====================================================================
5 # configuration data related to the kernel synchronization primitives
7 # ====================================================================
8 #####ECOSGPLCOPYRIGHTBEGIN####
9 ## -------------------------------------------
10 ## This file is part of eCos, the Embedded Configurable Operating System.
11 ## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12 ## Copyright (C) 2006 eCosCentric Ltd.
14 ## eCos is free software; you can redistribute it and/or modify it under
15 ## the terms of the GNU General Public License as published by the Free
16 ## Software Foundation; either version 2 or (at your option) any later version.
18 ## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
19 ## WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 ## You should have received a copy of the GNU General Public License along
24 ## with eCos; if not, write to the Free Software Foundation, Inc.,
25 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
27 ## As a special exception, if other files instantiate templates or use macros
28 ## or inline functions from this file, or you compile this file and link it
29 ## with other works to produce a work based on this file, this file does not
30 ## by itself cause the resulting work to be covered by the GNU General Public
31 ## License. However the source code for this file must still be made available
32 ## in accordance with section (3) of the GNU General Public License.
34 ## This exception does not invalidate any other reasons why a work based on
35 ## this file might be covered by the GNU General Public License.
36 ## -------------------------------------------
37 #####ECOSGPLCOPYRIGHTEND####
38 # ====================================================================
39 ######DESCRIPTIONBEGIN####
42 # Original data: nickg
46 #####DESCRIPTIONEND####
48 # ====================================================================
51 cdl_component CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL {
52 display "Priority inversion protection protocols"
54 doc ref/kernel-mutexes.html
55 legal_values { "SIMPLE" }
56 default_value { "SIMPLE" }
57 active_if { CYGSEM_KERNEL_SCHED_MLQUEUE }
58 requires { CYGINT_KERNEL_SCHEDULER_UNIQUE_PRIORITIES == 0 }
60 This component controls the protocols used to protect mutexes against
61 priority inversion. If this option is enabled it defines which
62 algorithm is used to implement this protection. At present only
63 one such algorithm is defined: \"SIMPLE\". The implementation
64 will only work in the mlqueue scheduler, and it does not handle the
65 rare case of nested mutexes completely correctly. However it is
66 both fast and deterministic."
68 cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT {
69 display "Enable priority inheritance protocol"
71 implements CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT
73 This option enables priority inheritance protocol. This protocol
74 causes the owner of a mutex to be executed at the highest priority
75 of the threads waiting for access to the mutex."
78 cdl_component CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING {
79 display "Enable priority ceiling protocol"
81 implements CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT
83 This option enables priority ceiling protocol. This protocol
84 causes the owner of a mutex to be executed at a priority
85 associated with the mutex."
86 cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT_PRIORITY {
87 display "Default priority ceiling"
89 legal_values 0 to { CYGNUM_KERNEL_SCHED_PRIORITIES - 1 }
91 active_if CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING
93 This option defines the default priority ceiling to be
94 used if the chosen default priority inversion protocol is
95 priority ceoptioniling protocol. The default value for this is zero,
96 making all such mutexes boost threads to the maximum priority."
100 cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_NONE {
101 display "No priority inversion protocol"
103 implements CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT
105 This option enables the ability to have no priority inversion protocol.
106 It is equivalent to disabling the priority inversion protocol at
107 the top level, but is necessary for the runtime and default
111 cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT {
112 display "Default priority inversion protocol"
114 active_if { CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT > 1 }
115 legal_values { "INHERIT" "CEILING" "NONE" }
116 default_value { CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT ?
118 CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING ?
121 This option defines the default inversion protocol used for mutexes that
122 are created without an explicit protocol being specified. The protocol
123 chosen by default is to use priority inheritance if it is present otherwise
124 priority ceiling, or none if neither is present."
127 cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DYNAMIC {
128 display "Specify mutex priority inversion protocol at runtime"
130 active_if { CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT > 1 }
132 This option controls whether the priority inversion protocol used by
133 a mutex can be specified when that mutex is created."
136 cdl_interface CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT {
137 display "Number of protocols selected"
142 cdl_option CYGIMP_MBOX_USE_MBOXT_PLAIN {
143 display "Use mboxt_plain mbox implementation"
146 Use the plain mboxt implementation instead of the mboxt2
147 implementation. The mboxt2 version is designed to provide
148 semantics compatible with UITRON, the plain implementation
149 is adquate in most other situations."
152 cdl_option CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAIT {
153 display "Message box blocking put support"
154 doc ref/kernel-mail-boxes.html
157 Message boxes can support three different versions of the
158 put-message operation. The first is tryput(), which will fail
159 if the message box is already full. The other two are the
160 ordinary put() function which will block if the message box
161 is full, and a timed put() operation which will block for
162 upto a certain length of time if the message box is currently
163 full. The blocking versions require extra memory in the
164 message box data structure and extra code in the other
165 message box functions, so they can be disabled if the
166 application does not require them. If this option is enabled
167 then the system will always provide the blocking put()
168 function, and it will also provide the timed put() function
169 if thread timers are enabled."
172 cdl_option CYGNUM_KERNEL_SYNCH_MBOX_QUEUE_SIZE {
173 display "Message box queue size"
174 doc ref/kernel-mail-boxes.html
176 legal_values 1 to 65535
179 This configuration option controls the number of messages
180 that can be queued in a message box before a non-blocking
181 put() operation will fail or a blocking put() operation will
182 block. The cost in memory is one pointer per message box for
183 each possible message."
186 cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT {
187 display "Condition variable timed-wait support"
188 doc ref/kernel-condition-variables.html
189 requires CYGFUN_KERNEL_THREADS_TIMER
192 This option enables the condition variable timed wait
196 cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_WAIT_MUTEX {
197 display "Condition variable explicit mutex wait support"
198 doc ref/kernel-condition-variables.html
201 This option enables the condition variable explicit mutex wait
202 facility. By default condition variables in eCos are created with
203 a statically associated mutex. This option permits wait (and timed wait
204 if CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT is enabled) to provide a
205 different mutex as an argument. This makes no difference to the semantics
206 the wait operation except that a different mutex will be used during it."
209 cdl_option CYGIMP_KERNEL_SYNCH_MQUEUE_NOT_INLINE {
210 display "Avoid inlines in mqueue implementation"
213 With this option disabled, the 'mqueue' message queue implementation
214 provides most of its implementation via inlines. However this can
215 adversely affect code size in application that make lots of mqueue
216 calls from different places, so enabling this option provides
217 non-inline versions to be used instead."
218 compile sync/mqueue.cxx