comparison packages/hal/common/current/include/pkgconf/hal.h @ 0:3111d98ba7b3 ecos-v1_1-release

Initial commit of eCos version 1.1
author jlarmour
date Tue, 11 May 1999 11:16:07 +0000
parents
children 443894e2e912
comparison
equal deleted inserted replaced
-1:000000000000 0:3111d98ba7b3
1 #ifndef CYGONCE_PKGCONF_HAL_H
2 #define CYGONCE_PKGCONF_HAL_H
3 // ====================================================================
4 //
5 // pkgconf/hal.h
6 //
7 // HAL configuration file
8 //
9 // ====================================================================
10 //####COPYRIGHTBEGIN####
11 //
12 // -------------------------------------------
13 // The contents of this file are subject to the Cygnus eCos Public License
14 // Version 1.0 (the "License"); you may not use this file except in
15 // compliance with the License. You may obtain a copy of the License at
16 // http://sourceware.cygnus.com/ecos
17 //
18 // Software distributed under the License is distributed on an "AS IS"
19 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
20 // License for the specific language governing rights and limitations under
21 // the License.
22 //
23 // The Original Code is eCos - Embedded Cygnus Operating System, released
24 // September 30, 1998.
25 //
26 // The Initial Developer of the Original Code is Cygnus. Portions created
27 // by Cygnus are Copyright (C) 1998 Cygnus Solutions. All Rights Reserved.
28 // -------------------------------------------
29 //
30 //####COPYRIGHTEND####
31 // ====================================================================
32 //#####DESCRIPTIONBEGIN####
33 //
34 // Author(s): nickg
35 // Contributors: nickg
36 // Date: 1997-09-29
37 // Purpose: To allow the user to edit HAL configuration options.
38 // Description:
39 //
40 //####DESCRIPTIONEND####
41 //
42 // ====================================================================
43
44 /* ---------------------------------------------------------------------
45 * Some of the HAL configuration options depend on global options,
46 * so it is necessary to include the global options first.
47 */
48
49 #include <pkgconf/system.h>
50
51 /* ---------------------------------------------------------------------
52 Define an overall package for the HAL. All other HAL packages
53 live below this.
54
55 {{CFG_DATA
56
57 cdl_package CYGPKG_HAL {
58 display "eCos HAL"
59 type dummy
60 description "
61 The eCos HAL package provide a porting layer for
62 higher-level parts of the system such as the kernel and the
63 C library. Each installation should have HAL packages for
64 one or more architectures, and for each architecture there
65 may be one or more supported platforms. It is necessary to
66 select one target architecture and one platform for that
67 architecture. There are also a number of configuration
68 options that are common to all HAL packages."
69 doc ref/ecos-ref/the-ecos-hardware-abstraction-layer-hal.html
70 }
71
72 }}CFG_DATA */
73
74 /* ---------------------------------------------------------------------
75 * The platform-independent HAL configuration options go here,
76 * inside a component CYGPKG_HAL_COMMON. In practice some of the
77 * options are not completely platform-independent, but they are
78 * likely to be available on the vast majority of platforms and
79 * it is more convenient to provide them by default and let the
80 * appropriate platforms disable them (probably via a suitable
81 * interface).
82 *
83 * The common component is subdivided into components for
84 * interrupt handling, thread context, and rom monitor/gdb support.
85
86 {{CFG_DATA
87
88 cdl_component CYGPKG_HAL_COMMON {
89 display "Platform-independent HAL options"
90 parent CYGPKG_HAL
91 type dummy
92 description "
93 A number of configuration options are common to most or all
94 HAL packages, for example options controlling how much state
95 should be saved during a context switch. The implementations
96 of these options will vary from architecture to architecture."
97 }
98
99 cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT {
100 display "Provide eCos kernel support"
101 parent CYGPKG_HAL_COMMON
102 requires CYGPKG_KERNEL
103 description "
104 The HAL can be configured to either support the full eCos
105 kernel, or to support only very simple applications which do
106 not require a full kernel. If kernel support is not required
107 then some of the startup, exception, and interrupt handling
108 code can be eliminated."
109 }
110
111 }}CFG_DATA */
112 #define CYGFUN_HAL_COMMON_KERNEL_SUPPORT
113
114 /* {{CFG_DATA
115
116 cdl_component CYGPKG_HAL_COMMON_INTERRUPTS {
117 display "HAL interrupt handling"
118 parent CYGPKG_HAL_COMMON
119 type dummy
120 description "
121 A number of configuration options related to interrupt
122 handling are common to most or all HAL packages, even though
123 the implementations will vary from architecture to
124 architecture."
125 }
126
127 cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK {
128 display "Use separate stack for interrupts"
129 parent CYGPKG_HAL_COMMON_INTERRUPTS
130 description "
131 When an interrupt occurs this interrupt can be handled either
132 on the current stack or on a separate stack maintained by the
133 HAL. Using a separate stack requires a small number of extra
134 instructions in the interrupt handling code, but it has the
135 advantage that it is no longer necessary to allow extra space
136 in every thread stack for the interrupt handlers. The amount
137 of extra space required depends on the interrupt handlers
138 that are being used."
139 }
140
141 # NOTE: various parts of the system such as device drivers should
142 # impose lower bounds on this. The actual lower bound depends on a
143 # platform-specific value for startup overheads, and the minimum
144 # sizes specified by the various device drivers. If interrupts are
145 # not handled on a separate stack then only the startup overheads
146 # are significant. If nested interrupts are disabled then the
147 # lower bound is the maximum of the individual sizes, otherwise
148 # it is the sum of these sizes. It is not currently possible to
149 # express a relationship like this.
150 cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE {
151 display "Interrupt stack size"
152 parent CYGPKG_HAL_COMMON_INTERRUPTS
153 type count
154 legal_values 1024 to 1048576
155 description "
156 This configuration option specifies the stack size in bytes
157 for the interrupt stack. Typically this should be a multiple
158 of 16, but the exact requirements will vary from architecture
159 to architecture. The interrupt stack serves two separate
160 purposes. It is used as the stack during system
161 initialization. In addition, if the interrupt system is
162 configured to use a separate stack then all interrupts will
163 be processed on this stack. The exact memory requirements
164 will vary from application to application, and will depend
165 heavily on whether or not other interrupt-related options,
166 for example nested interrupts, are enabled."
167 }
168
169 cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING {
170 display "Allow nested interrupts"
171 parent CYGPKG_HAL_COMMON_INTERRUPTS
172 description "
173 When an interrupt occurs the HAL interrupt handling code can
174 either leave interrupts disabled for the duration of the
175 interrupt handling code, or by doing some extra work it can
176 reenable interrupts before invoking the interrupt handler and
177 thus allow nested interrupts to happen. If all the interrupt
178 handlers being used are small and do not involve any loops
179 then it is usually better to disallow nested interrupts.
180 However if any of the interrupt handlers are more complicated
181 than nested interrupts will usually be required."
182 }
183
184 cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT {
185 display "Save minimum context on interrupt"
186 parent CYGPKG_HAL_COMMON_INTERRUPTS
187 description "
188 The HAL interrupt handling code can exploit the calling conventions
189 defined for a given architecture to reduce the amount of state
190 that has to be saved. Generally this improves performance and
191 reduces code size. However it can make source-level debugging
192 more difficult.
193 "
194 }
195
196 cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN {
197 display "Chain all interrupts together"
198 parent CYGPKG_HAL_COMMON_INTERRUPTS
199 description "
200 Interrupts can be attached to vectors either singly, or be
201 chained together. The latter is necessary if there is no way
202 of discovering which device has interrupted without
203 inspecting the device itself. It can also reduce the amount
204 of RAM needed for interrupt decoding tables and code."
205 }
206
207 }}CFG_DATA
208
209 */
210
211 #define CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
212 #define CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE 4096
213 #undef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING
214 #define CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT
215 #undef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
216
217
218 /* {{CFG_DATA
219
220 cdl_component CYGPKG_HAL_COMMON_CONTEXT {
221 display "HAL context switch support"
222 parent CYGPKG_HAL_COMMON
223 type dummy
224 description "
225 A number of configuration options related to thread contexts
226 are common to most or all HAL packages, even though the
227 implementations will vary from architecture to architecture."
228 }
229
230 cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM {
231 display "Use minimum thread context"
232 parent CYGPKG_HAL_COMMON_CONTEXT
233 description "
234 The thread context switch code can exploit the calling conventions
235 defined for a given architecture to reduce the amount of state
236 that has to be saved during a context switch. Generally this
237 improves performance and reduces code size. However it can make
238 source-level debugging more difficult."
239 }
240
241 }}CFG_DATA */
242 #define CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM
243
244 /* {{CFG_DATA
245
246 # NOTE: The requirement for kernel exception support is bogus in that
247 # the user can supply a deliver_exception function herself. In that
248 # case, however, it is easy to force the kernel option off while leaving
249 # this one on. Having the requirement prevents accidental invalid
250 # configurations of the kernel.
251 cdl_option CYGPKG_HAL_EXCEPTIONS {
252 display "HAL exception support"
253 parent CYGPKG_HAL_COMMON
254 requires CYGPKG_KERNEL_EXCEPTIONS
255 description "
256 When a processor exception occurs, for example an attempt to
257 execute an illegal instruction or to perform a divide by
258 zero, this exception may be handled in a number of different
259 ways. If the target system has gdb support then typically
260 the exception will be handled by gdb code. Otherwise if the
261 HAL exception support is enabled then the HAL will invoke a
262 routine deliver_exception(). Typically this routine will be
263 provided by the eCos kernel, but it is possible for
264 application code to provide its own implementation. If the
265 HAL exception support is not enabled and a processor
266 exception occurs then the behaviour of the system is
267 undefined.
268 "
269 }
270
271 }}CFG_DATA */
272 #define CYGPKG_HAL_EXCEPTIONS
273
274
275 /* ---------------------------------------------------------------------
276 * Options related to source-level debugging and diagnostics.
277
278 {{CFG_DATA
279
280 cdl_component CYGPKG_HAL_DEBUG {
281 display "Source-level debugging support"
282 type dummy
283 parent CYGPKG_HAL
284 description "
285 If the source level debugger gdb is to be used for debugging
286 application code then it may be necessary to configure in support
287 for this in the HAL."
288 }
289
290 cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS {
291 display "Include GDB stubs in HAL"
292 parent CYGPKG_HAL_DEBUG
293 requires !CYGPKG_HAL_POWERPC_SIM
294 requires !CYGPKG_HAL_MN10300_SIM
295 requires !CYGPKG_HAL_TX39_SIM
296 requires !CYGPKG_HAL_MN10300_STDEVAL1
297 description "
298 This option causes a set of GDB stubs to be included into the
299 system. On some target systems the GDB support will be
300 provided by other means, for example by a ROM monitor. On
301 other targets, especially when building a ROM-booting system,
302 the necessary support has to go into the target library
303 itself."
304 }
305
306 cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT {
307 display "Include GDB multi-threading debug support"
308 parent CYGPKG_HAL_DEBUG
309 requires CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
310 description "
311 This option enables some extra HAL code which is needed
312 to support multi-threaded source level debugging."
313 }
314
315 cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT {
316 display "Include GDB external break support"
317 parent CYGPKG_HAL_DEBUG
318 requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
319 description "
320 This option causes the GDB stub to add a serial interrupt handler
321 which will listen for GDB break packets. This lets you stop the
322 target asynchronously when using GDB, usually by hitting Control+C
323 or pressing the STOP button."
324 }
325
326
327 }}CFG_DATA */
328
329 #undef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
330 #undef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
331
332 #define CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
333
334 /*
335 * NOTE:
336 *
337 * Right now there is no easy way to express the ROM monitor options
338 * in CDL. The problem is that the default values depend on the
339 * target platform and on the desired start-up. It is possible to
340 * produce something that will work correctly in a clean world, but
341 * not something more general.
342 *
343 * One possibility is to duplicate the relevant options in the various
344 * platform HAL packages, renaming them to avoid collisions. This appears
345 * to be feasible with the current sources because the rom monitor options
346 * are only referenced in the HAL packages. It is not clear whether or not
347 * this will continue to be the case. */
348
349 /*
350 * Some development boards come with a ROM monitor that provides
351 * download and debug facilities. Such ROMs may also supply interrupt
352 * redirection and IO facilities. The following option causes the HAL
353 * to integrate with the ROM monitor present on the configured
354 * platform. If this option is not defined, the monitor will not be
355 * used. Where there is more than one ROM monitor for a specific
356 * platform, a subsidiary define should identify the appropriate monitor
357 * type.
358 */
359
360 //#define CYG_HAL_USE_ROM_MONITOR
361
362 #if defined(CYG_HAL_TX39_JMR3904) && defined(CYG_HAL_STARTUP_RAM)
363 #define CYG_HAL_USE_ROM_MONITOR
364 #define CYG_HAL_USE_ROM_MONITOR_CYGMON
365 #endif
366 #if defined(CYG_HAL_MN10300_STDEVAL1) && defined(CYG_HAL_STARTUP_RAM)
367 #define CYG_HAL_USE_ROM_MONITOR
368 #define CYG_HAL_USE_ROM_MONITOR_CYGMON
369 #endif
370
371 #ifdef CYG_HAL_USE_ROM_MONITOR
372
373 //#define CYG_HAL_USE_ROM_MONITOR_SLOAD
374 //#define CYG_HAL_USE_ROM_MONITOR_GDB_STUBS
375 //#define CYG_HAL_USE_ROM_MONITOR_CYGMON
376
377 #endif
378
379 /* ---------------------------------------------------------------------
380 *
381 * The section below deals with some inferences about package/feature
382 * presence that are not yet supported by the full external configuration
383 * tool; they are NOT user configuration, and you should NOT edit them.
384 */
385
386 /*
387 * Initialization options.
388 *
389 * WARNING: this option should not be enabled by end users. It
390 * makes use of an experimental facility in g++ which has not been
391 * generally distributed.
392 *
393 * The USE_INIT_PRIORITY option enables the use of the g++ init_priority
394 * attribute which allows the order of execution of constructors of
395 * static objects to be controlled. This option is not yet required by
396 * the current kernel, but it will be required by future versions.
397 */
398
399 #undef CYG_KERNEL_USE_INIT_PRIORITY
400
401 #ifdef CYG_HAL_TX39
402 #define CYG_KERNEL_USE_INIT_PRIORITY
403 #endif
404 #ifdef CYG_HAL_MN10300
405 #define CYG_KERNEL_USE_INIT_PRIORITY
406 #endif
407 #ifdef CYG_HAL_POWERPC
408 #define CYG_KERNEL_USE_INIT_PRIORITY
409 #endif
410
411 /*
412 * CYG_HAL_<TARGET> and CYG_HAL_<TARGET>_<PLATFORM> are generated by
413 * pkgconf, using the information from the targets file.
414 *
415 * NOTE: Currently the code also needs these #defines.
416 */
417 #ifdef CYG_HAL_MN10300_STDEVAL1
418 # define CYG_HAL_MN10300_MN103002
419 #endif
420 #ifdef CYG_HAL_MN10300_SIM
421 # define CYG_HAL_MN10300_MN103002
422 #endif
423
424 #ifdef CYG_HAL_POWERPC_COGENT
425 # define CYG_HAL_POWERPC_MP860
426 #endif
427 #ifdef CYG_HAL_POWERPC_SIM
428 # define CYG_HAL_POWERPC_MP860
429 #endif
430
431 #ifdef CYG_HAL_TX39_JMR3904
432 # define CYG_HAL_MIPS
433 # define CYG_HAL_MIPS_TX39
434 # define CYG_HAL_MIPS_TX3904
435 # define CYG_HAL_MIPS_JMR3904
436 #endif
437 #ifdef CYG_HAL_TX39_SIM
438 # define CYG_HAL_MIPS
439 # define CYG_HAL_MIPS_TX39
440 # define CYG_HAL_MIPS_SIM
441 #endif
442
443 /* -------------------------------------------------------------------*/
444 #endif /* CYGONCE_PKGCONF_HAL_H */
445 /* EOF hal.h */