Mercurial > ecos-v2_0-branch
diff packages/kernel/current/cdl/counters.cdl @ 76:435cced73e2f ecos-v1_3_1-release
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
| author | jlarmour |
|---|---|
| date | Tue, 28 Mar 2000 14:10:45 +0000 |
| parents | |
| children | 6736c52df507 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/packages/kernel/current/cdl/counters.cdl @@ -0,0 +1,241 @@ +# ==================================================================== +# +# counters.cdl +# +# configuration data related to the kernel counters and clocks +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): jskov +# Original data: nickg +# Contributors: +# Date: 1999-07-05 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_option CYGVAR_KERNEL_COUNTERS_CLOCK { + display "Provide real-time clock" + requires CYGIMP_KERNEL_INTERRUPTS_DSRS + default_value 1 + description " + On all current target systems the kernel can provide a + real-time clock. This clock serves two purposes. First it is + necessary to support clock and alarm related functions. + Second it is needed to implement timeslicing in some of the + schedulers including the mlqueue scheduler. If the + application does not require any of these facilities then it + is possible to disable the real time clock support + completely." +} + +cdl_component CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE { + display "Override default clock settings" + requires CYGVAR_KERNEL_COUNTERS_CLOCK + default_value 0 + description " + The kernel has default settings for the clock interrupt + frequency. These settings will vary from platform to + platform, but typically there will be a 100 clock interrupts + every second. It is possible to change this frequency, but + it requires some knowledge of the target hardware." + + cdl_option CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_PERIOD { + display "Clock hardware initialization value" + flavor data + legal_values 1 to 0x7fffffff + default_value 9999 + description " + During system initialization this value is used to initialize + the clock hardware. The exact meaning of the value and the + range of legal values therefore depends on the target hardware, + and the hardware documentation should be consulted for further + details. In addition the clock resolution numerator and + denominator values should be updated. Typical values for + this option would be 150000 on the MN10300 stdeval1 board, + 15625 on the tx39 jmr3904 board, and 20833 on the powerpc + cogent board." + } + + cdl_option CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_NUMERATOR { + display "Clock resolution numerator" + flavor data + legal_values 1 to 0x7fffffff + default_value 1000000000 + description " + If a non-default clock interrupt frequency is used then it + is necessary to specify the clock resolution explicitly. + This resolution involves two separate values, the numerator + and the denominator. The result of dividing the numerator by + the denominator should correspond to the number of + nanoseconds between clock interrupts. For example a + numerator of 1000000000 and a denominator of 100 means that + there are 10000000 nanoseconds (or 10 milliseconds) between + clock interrupts. Expressing the resolution as a fraction + should minimize clock drift even for frequencies that cannot + be expressed as a simple integer. For example a frequency of + 60Hz corresponds to a clock resolution of 16666666.66... + nanoseconds. This can be expressed accurately as 1000000000 + over 60." + } + + cdl_option CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_DENOMINATOR { + display "Clock resolution denominator" + flavor data + legal_values 1 to 0x7fffffff + default_value 100 + description " + If a non-default clock interrupt frequency is used then it + is necessary to specify the clock resolution explicitly. + This resolution involves two separate values, the numerator + and the denominator. The result of dividing the numerator by + the denominator should correspond to the number of + nanoseconds between clock interrupts. For example a + numerator of 1000000000 and a denominator of 100 means that + there are 10000000 nanoseconds (or 10 milliseconds) between + clock interrupts. Expressing the resolution as a fraction + should minimize clock drift even for frequencies that cannot + be expressed as a simple integer. For example a frequency of + 60Hz corresponds to a clock resolution of 16666666.66... + nanoseconds. This can be expressed accurately as 1000000000 + over 60." + } +} + +cdl_interface CYGINT_KERNEL_COUNTERS { + requires 1 == CYGINT_KERNEL_COUNTERS +} + +# NOTE: these option should really be a single enum. +cdl_option CYGIMP_KERNEL_COUNTERS_SINGLE_LIST { + display "Implement counters using a single list" + default_value 1 + implements CYGINT_KERNEL_COUNTERS + description " + There are two different implementations of the counter + objects. The first implementation stores all alarms in a + single linked list. The alternative implementation uses a + table of linked lists. A single list is more efficient in + terms of memory usage and is generally adequate when the + application only makes use of a small number of alarms." +} + +cdl_component CYGIMP_KERNEL_COUNTERS_MULTI_LIST { + display "Implement counters using a table of lists" + default_value 0 + implements CYGINT_KERNEL_COUNTERS + description " + There are two different implementations of the counter + objects. The first implementation stores all alarms in a + single linked list. The alternative implementation uses a + table of linked lists, with the size of the table being a + separate configurable option. For more complicated + operations it is better to have a table of lists since this + reduces the amount of computation whenever the timer goes + off. Assuming a table size of 8 (the default value) on + average the timer code will only need to check 1/8 of the + pending alarms instead of all of them." + + cdl_option CYGNUM_KERNEL_COUNTERS_MULTI_LIST_SIZE { + display "Size of counter list table" + flavor data + legal_values 1 to 1024 + default_value 8 + description " + If counters are implemented using an array of linked lists + then this option controls the size of the array. A larger + size reduces the amount of computation that needs to take + place whenever the timer goes off, but requires extra + memory." + } +} + +cdl_option CYGIMP_KERNEL_COUNTERS_SORT_LIST { + display "Sort the counter list" + default_value 0 + description " + Sorting the counter lists reduces the amount of work that + has to be done when a counter tick is processed, since the + next alarm to expire is always at the front of the list. + However, it makes adding an alarm to the list more expensive + since a search must be done for the correct place to put it. + Many alarms are used to implement timeouts, which seldom trigger, + so it is worthwhile optimizing this case. For this reason + sorted list are disabled by default." +} + +cdl_option CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY { + display "Measure real-time \[clock\] interrupt latency" + requires CYGVAR_KERNEL_COUNTERS_CLOCK + default_value 0 + description " + Measure the interrupt latency as seen by the real-time clock + timer interrupt. This requires hardware support, defined by + the HAL_CLOCK_LATENCY() macro." +} + +cdl_option CYGVAR_KERNEL_COUNTERS_CLOCK_DSR_LATENCY { + display "Measure real-time \[clock\] DSR latency" + requires CYGVAR_KERNEL_COUNTERS_CLOCK + requires CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY + default_value 0 + description " + Measure the DSR latency as seen by the real-time clock + timer interrupt. This requires hardware support, defined by + the HAL_CLOCK_LATENCY() macro." +} + +cdl_option CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION { + display "RTC resolution" + flavor data + calculated { CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE ? \ + "{CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_NUMERATOR, \ + CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_DENOMINATOR}" \ + : "{CYGNUM_HAL_RTC_NUMERATOR, CYGNUM_HAL_RTC_DENOMINATOR}"} + description " + This option automatically defines the tuple which is used to + initialize the RTC resolution, consisting of a numerator and + denominator. For more information, see the option to + override default clock settings + (CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE) and associated options." +} + +cdl_option CYGNUM_KERNEL_COUNTERS_RTC_PERIOD { + display "RTC period" + flavor data + calculated { CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE ? \ + "CYGNUM_KERNEL_COUNTERS_CLOCK_OVERRIDE_PERIOD" \ + : "CYGNUM_HAL_RTC_PERIOD"} + description " + This option automatically defines the RTC period to be used in + setting the system clock hardware. For more information, see the + option to override default clock settings + (CYGPKG_KERNEL_COUNTERS_CLOCK_OVERRIDE) and associated options." +} +
