summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c-user/clock/directives.rst835
-rw-r--r--c-user/clock/introduction.rst81
-rw-r--r--c-user/config/bdbuf.rst509
-rw-r--r--c-user/config/bsp-related.rst332
-rw-r--r--c-user/config/classic-api.rst724
-rw-r--r--c-user/config/classic-init-task.rst391
-rw-r--r--c-user/config/device-driver.rst868
-rw-r--r--c-user/config/event-record.rst176
-rw-r--r--c-user/config/filesystem.rst952
-rw-r--r--c-user/config/general.rst1187
-rw-r--r--c-user/config/idle-task.rst159
-rw-r--r--c-user/config/mpci.rst343
-rw-r--r--c-user/config/posix-api.rst575
-rw-r--r--c-user/config/posix-init-thread.rst127
-rw-r--r--c-user/config/scheduler-general.rst725
-rw-r--r--c-user/config/task-stack-alloc.rst266
-rw-r--r--c-user/glossary.rst36
-rw-r--r--c-user/message/directives.rst4
-rw-r--r--c-user/rate-monotonic/directives.rst9
-rw-r--r--c-user/scheduling-concepts/directives.rst9
-rw-r--r--c-user/task/directives.rst4
-rw-r--r--common/coverpage/static/js/jquery.min.js7
-rw-r--r--cpu-supplement/aarch64.rst6
-rw-r--r--cpu-supplement/sparc.rst101
-rw-r--r--user/hosts/posix.rst7
-rw-r--r--user/testing/configuration.rst84
-rw-r--r--user/testing/tftp.rst12
27 files changed, 5465 insertions, 3064 deletions
diff --git a/c-user/clock/directives.rst b/c-user/clock/directives.rst
index 1a65abf..080968e 100644
--- a/c-user/clock/directives.rst
+++ b/c-user/clock/directives.rst
@@ -220,6 +220,841 @@ The following constraints apply to this directive:
* The directive requires a :term:`Clock Driver`.
+.. Generated from spec:/rtems/clock/if/get-realtime
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_realtime()
+
+.. _InterfaceRtemsClockGetRealtime:
+
+rtems_clock_get_realtime()
+--------------------------
+
+Gets the time elapsed since the :term:`Unix epoch` measured using
+:term:`CLOCK_REALTIME` in seconds and nanoseconds format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_realtime( struct timespec *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a `struct timespec
+ <https://en.cppreference.com/w/c/chrono/timespec>`_ object. The time
+ elapsed since the :term:`Unix epoch` measured using the
+ :term:`CLOCK_REALTIME` at some time point during the directive call will be
+ stored in this object. Calling the directive with a pointer equal to `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_ is undefined behaviour.
+
+.. rubric:: NOTES:
+
+The directive accesses a device provided by the :term:`Clock Driver` to get the
+time in the highest resolution available to the system. Alternatively, the
+:ref:`InterfaceRtemsClockGetRealtimeCoarse` directive may be used to get the
+time in a lower resolution and with less runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetRealtimeBintime` and
+:ref:`InterfaceRtemsClockGetRealtimeTimeval` to get the time in alternative
+formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-realtime-bintime
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_realtime_bintime()
+
+.. _InterfaceRtemsClockGetRealtimeBintime:
+
+rtems_clock_get_realtime_bintime()
+----------------------------------
+
+Gets the time elapsed since the :term:`Unix epoch` measured using
+:term:`CLOCK_REALTIME` in binary time format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_realtime_bintime( struct bintime *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a :c:type:`bintime` object. The time
+ elapsed since the :term:`Unix epoch` measured using the
+ :term:`CLOCK_REALTIME` at some time point during the directive call will be
+ stored in this object. Calling the directive with a pointer equal to `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_ is undefined behaviour.
+
+.. rubric:: NOTES:
+
+The directive accesses a device provided by the :term:`Clock Driver` to get the
+time in the highest resolution available to the system. Alternatively, the
+:ref:`InterfaceRtemsClockGetRealtimeCoarseBintime` directive may be used to get
+the time in a lower resolution and with less runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetRealtime` and
+:ref:`InterfaceRtemsClockGetRealtimeTimeval` to get the time in alternative
+formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-realtime-timeval
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_realtime_timeval()
+
+.. _InterfaceRtemsClockGetRealtimeTimeval:
+
+rtems_clock_get_realtime_timeval()
+----------------------------------
+
+Gets the time elapsed since the :term:`Unix epoch` measured using
+:term:`CLOCK_REALTIME` in seconds and microseconds format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_realtime_timeval( struct timeval *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a `struct timeval
+ <https://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/time.h.html>`_
+ object. The time elapsed since the :term:`Unix epoch` measured using the
+ :term:`CLOCK_REALTIME` at some time point during the directive call will be
+ stored in this object. Calling the directive with a pointer equal to `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_ is undefined behaviour.
+
+.. rubric:: NOTES:
+
+The directive accesses a device provided by the :term:`Clock Driver` to get the
+time in the highest resolution available to the system. Alternatively, the
+:ref:`InterfaceRtemsClockGetRealtimeCoarseTimeval` directive may be used to get
+the time in a lower resolution and with less runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetRealtime` and
+:ref:`InterfaceRtemsClockGetRealtimeBintime` to get the time in alternative
+formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-realtime-coarse
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_realtime_coarse()
+
+.. _InterfaceRtemsClockGetRealtimeCoarse:
+
+rtems_clock_get_realtime_coarse()
+---------------------------------
+
+Gets the time elapsed since the :term:`Unix epoch` measured using
+:term:`CLOCK_REALTIME` in coarse resolution in seconds and nanoseconds format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_realtime_coarse( struct timespec *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a `struct timespec
+ <https://en.cppreference.com/w/c/chrono/timespec>`_ object. The time
+ elapsed since the :term:`Unix epoch` measured using the
+ :term:`CLOCK_REALTIME` at some time point close to the directive call will
+ be stored in this object. Calling the directive with a pointer equal to
+ `NULL <https://en.cppreference.com/w/c/types/NULL>`_ is undefined
+ behaviour.
+
+.. rubric:: NOTES:
+
+The directive does not access a device to get the time. It uses a recent
+snapshot provided by the :term:`Clock Driver`. Alternatively, the
+:ref:`InterfaceRtemsClockGetRealtime` directive may be used to get the time in
+a higher resolution and with a higher runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetRealtimeCoarseBintime` and
+:ref:`InterfaceRtemsClockGetRealtimeCoarseTimeval` to get the time in
+alternative formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-realtime-coarse-bintime
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_realtime_coarse_bintime()
+
+.. _InterfaceRtemsClockGetRealtimeCoarseBintime:
+
+rtems_clock_get_realtime_coarse_bintime()
+-----------------------------------------
+
+Gets the time elapsed since the :term:`Unix epoch` measured using
+:term:`CLOCK_REALTIME` in coarse resolution in binary time format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_realtime_coarse_bintime( struct bintime *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a :c:type:`bintime` object. The time
+ elapsed since the :term:`Unix epoch` measured using the
+ :term:`CLOCK_REALTIME` at some time point close to the directive call will
+ be stored in this object. Calling the directive with a pointer equal to
+ `NULL <https://en.cppreference.com/w/c/types/NULL>`_ is undefined
+ behaviour.
+
+.. rubric:: NOTES:
+
+The directive does not access a device to get the time. It uses a recent
+snapshot provided by the :term:`Clock Driver`. Alternatively, the
+:ref:`InterfaceRtemsClockGetRealtimeBintime` directive may be used to get the
+time in a higher resolution and with a higher runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetRealtimeCoarse` and
+:ref:`InterfaceRtemsClockGetRealtimeCoarseTimeval` to get the time in
+alternative formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-realtime-coarse-timeval
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_realtime_coarse_timeval()
+
+.. _InterfaceRtemsClockGetRealtimeCoarseTimeval:
+
+rtems_clock_get_realtime_coarse_timeval()
+-----------------------------------------
+
+Gets the time elapsed since the :term:`Unix epoch` measured using
+:term:`CLOCK_REALTIME` in coarse resolution in seconds and microseconds format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_realtime_coarse_timeval( struct timeval *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a `struct timeval
+ <https://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/time.h.html>`_
+ object. The time elapsed since the :term:`Unix epoch` measured using the
+ :term:`CLOCK_REALTIME` at some time point close to the directive call will
+ be stored in this object. Calling the directive with a pointer equal to
+ `NULL <https://en.cppreference.com/w/c/types/NULL>`_ is undefined
+ behaviour.
+
+.. rubric:: NOTES:
+
+The directive does not access a device to get the time. It uses a recent
+snapshot provided by the :term:`Clock Driver`. Alternatively, the
+:ref:`InterfaceRtemsClockGetRealtimeTimeval` directive may be used to get the
+time in a higher resolution and with a higher runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetRealtimeCoarse` and
+:ref:`InterfaceRtemsClockGetRealtimeCoarseTimeval` to get the time in
+alternative formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-monotonic
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_monotonic()
+
+.. _InterfaceRtemsClockGetMonotonic:
+
+rtems_clock_get_monotonic()
+---------------------------
+
+Gets the time elapsed since some fixed time point in the past measured using
+the :term:`CLOCK_MONOTONIC` in seconds and nanoseconds format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_monotonic( struct timespec *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a :c:type:`bintime` object. The time
+ elapsed since some fixed time point in the past measured using the
+ :term:`CLOCK_MONOTONIC` at some time point during the directive call will
+ be stored in this object. Calling the directive with a pointer equal to
+ `NULL <https://en.cppreference.com/w/c/types/NULL>`_ is undefined
+ behaviour.
+
+.. rubric:: NOTES:
+
+The directive accesses a device provided by the :term:`Clock Driver` to get the
+time in the highest resolution available to the system. Alternatively, the
+:ref:`InterfaceRtemsClockGetMonotonicCoarse` directive may be used to get the
+time with in a lower resolution and with less runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetMonotonicBintime`,
+:ref:`InterfaceRtemsClockGetMonotonicSbintime`, and
+:ref:`InterfaceRtemsClockGetMonotonicTimeval` to get the time in alternative
+formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-monotonic-bintime
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_monotonic_bintime()
+
+.. _InterfaceRtemsClockGetMonotonicBintime:
+
+rtems_clock_get_monotonic_bintime()
+-----------------------------------
+
+Gets the time elapsed since some fixed time point in the past measured using
+the :term:`CLOCK_MONOTONIC` in binary time format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_monotonic_bintime( struct bintime *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a :c:type:`bintime` object. The time
+ elapsed since some fixed time point in the past measured using the
+ :term:`CLOCK_MONOTONIC` at some time point during the directive call will
+ be stored in this object. Calling the directive with a pointer equal to
+ `NULL <https://en.cppreference.com/w/c/types/NULL>`_ is undefined
+ behaviour.
+
+.. rubric:: NOTES:
+
+The directive accesses a device provided by the :term:`Clock Driver` to get the
+time in the highest resolution available to the system. Alternatively, the
+:ref:`InterfaceRtemsClockGetMonotonicCoarseBintime` directive may be used to
+get the time in a lower resolution and with less runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetMonotonic`,
+:ref:`InterfaceRtemsClockGetMonotonicSbintime`, and
+:ref:`InterfaceRtemsClockGetMonotonicTimeval` to get the time in alternative
+formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-monotonic-sbintime
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_monotonic_sbintime()
+
+.. _InterfaceRtemsClockGetMonotonicSbintime:
+
+rtems_clock_get_monotonic_sbintime()
+------------------------------------
+
+Gets the time elapsed since some fixed time point in the past measured using
+the :term:`CLOCK_MONOTONIC` in signed binary time format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ int64_t rtems_clock_get_monotonic_sbintime( void );
+
+.. rubric:: RETURN VALUES:
+
+Returns the time elapsed since some fixed time point in the past measured using
+the :term:`CLOCK_MONOTONIC` at some time point during the directive call.
+
+.. rubric:: NOTES:
+
+The directive accesses a device provided by the :term:`Clock Driver` to get the
+time in the highest resolution available to the system.
+
+See :ref:`InterfaceRtemsClockGetMonotonic`,
+:ref:`InterfaceRtemsClockGetMonotonicBintime`, and
+:ref:`InterfaceRtemsClockGetMonotonicTimeval` to get the time in alternative
+formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-monotonic-timeval
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_monotonic_timeval()
+
+.. _InterfaceRtemsClockGetMonotonicTimeval:
+
+rtems_clock_get_monotonic_timeval()
+-----------------------------------
+
+Gets the time elapsed since some fixed time point in the past measured using
+the :term:`CLOCK_MONOTONIC` in seconds and microseconds format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_monotonic_timeval( struct timeval *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a :c:type:`bintime` object. The time
+ elapsed since some fixed time point in the past measured using the
+ :term:`CLOCK_MONOTONIC` at some time point during the directive call will
+ be stored in this object. Calling the directive with a pointer equal to
+ `NULL <https://en.cppreference.com/w/c/types/NULL>`_ is undefined
+ behaviour.
+
+.. rubric:: NOTES:
+
+The directive accesses a device provided by the :term:`Clock Driver` to get the
+time in the highest resolution available to the system. Alternatively, the
+:ref:`InterfaceRtemsClockGetMonotonicCoarseTimeval` directive may be used to
+get the time in a lower resolution and with less runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetMonotonic`,
+:ref:`InterfaceRtemsClockGetMonotonicBintime`, and
+:ref:`InterfaceRtemsClockGetMonotonicSbintime` to get the time in alternative
+formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-monotonic-coarse
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_monotonic_coarse()
+
+.. _InterfaceRtemsClockGetMonotonicCoarse:
+
+rtems_clock_get_monotonic_coarse()
+----------------------------------
+
+Gets the time elapsed since some fixed time point in the past measured using
+the :term:`CLOCK_MONOTONIC` in coarse resolution in seconds and nanoseconds
+format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_monotonic_coarse( struct timespec *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a :c:type:`bintime` object. The time
+ elapsed since some fixed time point in the past measured using the
+ :term:`CLOCK_MONOTONIC` at some time point close to the directive call will
+ be stored in this object. Calling the directive with a pointer equal to
+ `NULL <https://en.cppreference.com/w/c/types/NULL>`_ is undefined
+ behaviour.
+
+.. rubric:: NOTES:
+
+The directive does not access a device to get the time. It uses a recent
+snapshot provided by the :term:`Clock Driver`. Alternatively, the
+:ref:`InterfaceRtemsClockGetMonotonic` directive may be used to get the time in
+a higher resolution and with a higher runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetMonotonicCoarseBintime` and
+:ref:`InterfaceRtemsClockGetMonotonicCoarseTimeval` to get the time in
+alternative formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-monotonic-coarse-bintime
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_monotonic_coarse_bintime()
+
+.. _InterfaceRtemsClockGetMonotonicCoarseBintime:
+
+rtems_clock_get_monotonic_coarse_bintime()
+------------------------------------------
+
+Gets the time elapsed since some fixed time point in the past measured using
+the :term:`CLOCK_MONOTONIC` in coarse resolution in binary time format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_monotonic_coarse_bintime( struct bintime *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a :c:type:`bintime` object. The time
+ elapsed since some fixed time point in the past measured using the
+ :term:`CLOCK_MONOTONIC` at some time point close to the directive call will
+ be stored in this object. Calling the directive with a pointer equal to
+ `NULL <https://en.cppreference.com/w/c/types/NULL>`_ is undefined
+ behaviour.
+
+.. rubric:: NOTES:
+
+The directive does not access a device to get the time. It uses a recent
+snapshot provided by the :term:`Clock Driver`. Alternatively, the
+:ref:`InterfaceRtemsClockGetMonotonicBintime` directive may be used to get the
+time in a higher resolution and with a higher runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetMonotonicCoarse` and
+:ref:`InterfaceRtemsClockGetMonotonicCoarseTimeval` to get the time in
+alternative formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-monotonic-coarse-timeval
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_monotonic_coarse_timeval()
+
+.. _InterfaceRtemsClockGetMonotonicCoarseTimeval:
+
+rtems_clock_get_monotonic_coarse_timeval()
+------------------------------------------
+
+Gets the time elapsed since some fixed time point in the past measured using
+the :term:`CLOCK_MONOTONIC` in coarse resolution in seconds and microseconds
+format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_monotonic_coarse_timeval( struct timeval *time_snapshot );
+
+.. rubric:: PARAMETERS:
+
+``time_snapshot``
+ This parameter is the pointer to a :c:type:`bintime` object. The time
+ elapsed since some fixed time point in the past measured using the
+ :term:`CLOCK_MONOTONIC` at some time point close to the directive call will
+ be stored in this object. Calling the directive with a pointer equal to
+ `NULL <https://en.cppreference.com/w/c/types/NULL>`_ is undefined
+ behaviour.
+
+.. rubric:: NOTES:
+
+The directive does not access a device to get the time. It uses a recent
+snapshot provided by the :term:`Clock Driver`. Alternatively, the
+:ref:`InterfaceRtemsClockGetMonotonicTimeval` directive may be used to get the
+time in a higher resolution and with a higher runtime overhead.
+
+See :ref:`InterfaceRtemsClockGetMonotonicCoarse` and
+:ref:`InterfaceRtemsClockGetMonotonicCoarseBintime` to get the time in
+alternative formats.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-boot-time
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_boot_time()
+
+.. _InterfaceRtemsClockGetBootTime:
+
+rtems_clock_get_boot_time()
+---------------------------
+
+Gets the time elapsed since the :term:`Unix epoch` at some time point during
+system initialization in seconds and nanoseconds format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_boot_time( struct timespec *boot_time );
+
+.. rubric:: PARAMETERS:
+
+``boot_time``
+ This parameter is the pointer to a `struct timespec
+ <https://en.cppreference.com/w/c/chrono/timespec>`_ object. The time
+ elapsed since the :term:`Unix epoch` at some time point during system
+ initialization call will be stored in this object. Calling the directive
+ with a pointer equal to `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_ is undefined behaviour.
+
+.. rubric:: NOTES:
+
+See :ref:`InterfaceRtemsClockGetBootTimeBintime` and
+:ref:`InterfaceRtemsClockGetBootTimeTimeval` to get the boot time in
+alternative formats. Setting the :term:`CLOCK_REALTIME` will also set the boot
+time.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-boot-time-bintime
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_boot_time_bintime()
+
+.. _InterfaceRtemsClockGetBootTimeBintime:
+
+rtems_clock_get_boot_time_bintime()
+-----------------------------------
+
+Gets the time elapsed since the :term:`Unix epoch` at some time point during
+system initialization in binary time format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_boot_time_bintime( struct bintime *boot_time );
+
+.. rubric:: PARAMETERS:
+
+``boot_time``
+ This parameter is the pointer to a :c:type:`bintime` object. The time
+ elapsed since the :term:`Unix epoch` at some time point during system
+ initialization call will be stored in this object. Calling the directive
+ with a pointer equal to `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_ is undefined behaviour.
+
+.. rubric:: NOTES:
+
+See :ref:`InterfaceRtemsClockGetBootTime` and
+:ref:`InterfaceRtemsClockGetBootTimeTimeval` to get the boot time in
+alternative formats. Setting the :term:`CLOCK_REALTIME` will also set the boot
+time.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
+.. Generated from spec:/rtems/clock/if/get-boot-time-timeval
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_clock_get_boot_time_timeval()
+
+.. _InterfaceRtemsClockGetBootTimeTimeval:
+
+rtems_clock_get_boot_time_timeval()
+-----------------------------------
+
+Gets the time elapsed since the :term:`Unix epoch` at some time point during
+system initialization in seconds and microseconds format.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_clock_get_boot_time_timeval( struct timeval *boot_time );
+
+.. rubric:: PARAMETERS:
+
+``boot_time``
+ This parameter is the pointer to a `struct timeval
+ <https://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/time.h.html>`_
+ object. The time elapsed since the :term:`Unix epoch` at some time point
+ during system initialization call will be stored in this object. Calling
+ the directive with a pointer equal to `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_ is undefined behaviour.
+
+.. rubric:: NOTES:
+
+See :ref:`InterfaceRtemsClockGetBootTime` and
+:ref:`InterfaceRtemsClockGetBootTimeBintime` to get the boot time in
+alternative formats. Setting the :term:`CLOCK_REALTIME` will also set the boot
+time.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The directive requires a :term:`Clock Driver`.
+
.. Generated from spec:/rtems/clock/if/get-seconds-since-epoch
.. raw:: latex
diff --git a/c-user/clock/introduction.rst b/c-user/clock/introduction.rst
index ad4b14c..13be673 100644
--- a/c-user/clock/introduction.rst
+++ b/c-user/clock/introduction.rst
@@ -29,6 +29,22 @@ Introduction
.. spec:/rtems/clock/if/set
.. spec:/rtems/clock/if/get-tod
.. spec:/rtems/clock/if/get-tod-timeval
+.. spec:/rtems/clock/if/get-realtime
+.. spec:/rtems/clock/if/get-realtime-bintime
+.. spec:/rtems/clock/if/get-realtime-timeval
+.. spec:/rtems/clock/if/get-realtime-coarse
+.. spec:/rtems/clock/if/get-realtime-coarse-bintime
+.. spec:/rtems/clock/if/get-realtime-coarse-timeval
+.. spec:/rtems/clock/if/get-monotonic
+.. spec:/rtems/clock/if/get-monotonic-bintime
+.. spec:/rtems/clock/if/get-monotonic-sbintime
+.. spec:/rtems/clock/if/get-monotonic-timeval
+.. spec:/rtems/clock/if/get-monotonic-coarse
+.. spec:/rtems/clock/if/get-monotonic-coarse-bintime
+.. spec:/rtems/clock/if/get-monotonic-coarse-timeval
+.. spec:/rtems/clock/if/get-boot-time
+.. spec:/rtems/clock/if/get-boot-time-bintime
+.. spec:/rtems/clock/if/get-boot-time-timeval
.. spec:/rtems/clock/if/get-seconds-since-epoch
.. spec:/rtems/clock/if/get-ticks-per-second
.. spec:/rtems/clock/if/get-ticks-since-boot
@@ -52,6 +68,71 @@ capabilities. The directives provided by the Clock Manager are:
* :ref:`InterfaceRtemsClockGetTodTimeval` - Gets the seconds and microseconds
elapsed since the :term:`Unix epoch` and the current :term:`CLOCK_REALTIME`.
+* :ref:`InterfaceRtemsClockGetRealtime` - Gets the time elapsed since the
+ :term:`Unix epoch` measured using :term:`CLOCK_REALTIME` in seconds and
+ nanoseconds format.
+
+* :ref:`InterfaceRtemsClockGetRealtimeBintime` - Gets the time elapsed since
+ the :term:`Unix epoch` measured using :term:`CLOCK_REALTIME` in binary time
+ format.
+
+* :ref:`InterfaceRtemsClockGetRealtimeTimeval` - Gets the time elapsed since
+ the :term:`Unix epoch` measured using :term:`CLOCK_REALTIME` in seconds and
+ microseconds format.
+
+* :ref:`InterfaceRtemsClockGetRealtimeCoarse` - Gets the time elapsed since the
+ :term:`Unix epoch` measured using :term:`CLOCK_REALTIME` in coarse resolution
+ in seconds and nanoseconds format.
+
+* :ref:`InterfaceRtemsClockGetRealtimeCoarseBintime` - Gets the time elapsed
+ since the :term:`Unix epoch` measured using :term:`CLOCK_REALTIME` in coarse
+ resolution in binary time format.
+
+* :ref:`InterfaceRtemsClockGetRealtimeCoarseTimeval` - Gets the time elapsed
+ since the :term:`Unix epoch` measured using :term:`CLOCK_REALTIME` in coarse
+ resolution in seconds and microseconds format.
+
+* :ref:`InterfaceRtemsClockGetMonotonic` - Gets the time elapsed since some
+ fixed time point in the past measured using the :term:`CLOCK_MONOTONIC` in
+ seconds and nanoseconds format.
+
+* :ref:`InterfaceRtemsClockGetMonotonicBintime` - Gets the time elapsed since
+ some fixed time point in the past measured using the :term:`CLOCK_MONOTONIC`
+ in binary time format.
+
+* :ref:`InterfaceRtemsClockGetMonotonicSbintime` - Gets the time elapsed since
+ some fixed time point in the past measured using the :term:`CLOCK_MONOTONIC`
+ in signed binary time format.
+
+* :ref:`InterfaceRtemsClockGetMonotonicTimeval` - Gets the time elapsed since
+ some fixed time point in the past measured using the :term:`CLOCK_MONOTONIC`
+ in seconds and microseconds format.
+
+* :ref:`InterfaceRtemsClockGetMonotonicCoarse` - Gets the time elapsed since
+ some fixed time point in the past measured using the :term:`CLOCK_MONOTONIC`
+ in coarse resolution in seconds and nanoseconds format.
+
+* :ref:`InterfaceRtemsClockGetMonotonicCoarseBintime` - Gets the time elapsed
+ since some fixed time point in the past measured using the
+ :term:`CLOCK_MONOTONIC` in coarse resolution in binary time format.
+
+* :ref:`InterfaceRtemsClockGetMonotonicCoarseTimeval` - Gets the time elapsed
+ since some fixed time point in the past measured using the
+ :term:`CLOCK_MONOTONIC` in coarse resolution in seconds and microseconds
+ format.
+
+* :ref:`InterfaceRtemsClockGetBootTime` - Gets the time elapsed since the
+ :term:`Unix epoch` at some time point during system initialization in seconds
+ and nanoseconds format.
+
+* :ref:`InterfaceRtemsClockGetBootTimeBintime` - Gets the time elapsed since
+ the :term:`Unix epoch` at some time point during system initialization in
+ binary time format.
+
+* :ref:`InterfaceRtemsClockGetBootTimeTimeval` - Gets the time elapsed since
+ the :term:`Unix epoch` at some time point during system initialization in
+ seconds and microseconds format.
+
* :ref:`InterfaceRtemsClockGetSecondsSinceEpoch` - Gets the seconds elapsed
since the :term:`RTEMS epoch` and the current :term:`CLOCK_REALTIME`.
diff --git a/c-user/config/bdbuf.rst b/c-user/config/bdbuf.rst
index c5381e1..a897fa9 100644
--- a/c-user/config/bdbuf.rst
+++ b/c-user/config/bdbuf.rst
@@ -28,6 +28,10 @@ This section describes configuration options related to the Block Device Cache
.. Generated from spec:/acfg/if/appl-needs-libblock
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
.. _CONFIGURE_APPLICATION_NEEDS_LIBBLOCK:
@@ -35,27 +39,36 @@ This section describes configuration options related to the Block Device Cache
CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_LIBBLOCK``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_LIBBLOCK``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- In case this configuration option is defined, then the Block Device Cache is
- initialized during system initialization.
+In case this configuration option is defined, then the Block Device Cache is
+initialized during system initialization.
-NOTES:
- Each option of the Block Device Cache (bdbuf) configuration can be explicitly
- set by the user with the configuration options below. The Block Device Cache
- is used for example by the RFS and DOSFS filesystems.
+.. rubric:: NOTES:
+
+Each option of the Block Device Cache (bdbuf) configuration can be explicitly
+set by the user with the configuration options below. The Block Device Cache
+is used for example by the RFS and DOSFS filesystems.
.. Generated from spec:/acfg/if/bdbuf-buffer-max-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_BDBUF_BUFFER_MAX_SIZE
.. _CONFIGURE_BDBUF_BUFFER_MAX_SIZE:
@@ -63,33 +76,38 @@ NOTES:
CONFIGURE_BDBUF_BUFFER_MAX_SIZE
-------------------------------
-CONSTANT:
- ``CONFIGURE_BDBUF_BUFFER_MAX_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_BDBUF_BUFFER_MAX_SIZE``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is 4096.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value is 4096.
- * It shall be greater than or equal to zero.
+.. rubric:: DESCRIPTION:
- * It shall be an integral multiple of
- :ref:`CONFIGURE_BDBUF_BUFFER_MIN_SIZE`.
+The value of this configuration option defines the maximum size of a buffer
+in bytes.
-DESCRIPTION:
- The value of this configuration option defines the maximum size of a buffer
- in bytes.
+.. rubric:: CONSTRAINTS:
-NOTES:
- None.
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be an integral multiple of
+ :ref:`CONFIGURE_BDBUF_BUFFER_MIN_SIZE`.
.. Generated from spec:/acfg/if/bdbuf-buffer-min-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_BDBUF_BUFFER_MIN_SIZE
.. _CONFIGURE_BDBUF_BUFFER_MIN_SIZE:
@@ -97,33 +115,38 @@ NOTES:
CONFIGURE_BDBUF_BUFFER_MIN_SIZE
-------------------------------
-CONSTANT:
- ``CONFIGURE_BDBUF_BUFFER_MIN_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_BDBUF_BUFFER_MIN_SIZE``
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: OPTION TYPE:
-DEFAULT VALUE:
- The default value is 512.
+This configuration option is an integer define.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DEFAULT VALUE:
- * It shall be greater than or equal to zero.
+The default value is 512.
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- The value of this configuration option defines the minimum size of a buffer
- in bytes.
+The value of this configuration option defines the minimum size of a buffer
+in bytes.
-NOTES:
- None.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/bdbuf-cache-memory-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
.. _CONFIGURE_BDBUF_CACHE_MEMORY_SIZE:
@@ -131,33 +154,38 @@ NOTES:
CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
---------------------------------
-CONSTANT:
- ``CONFIGURE_BDBUF_CACHE_MEMORY_SIZE``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is an integer define.
+``CONFIGURE_BDBUF_CACHE_MEMORY_SIZE``
-DEFAULT VALUE:
- The default value is 32768.
+.. rubric:: OPTION TYPE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This configuration option is an integer define.
- * It shall be greater than or equal to zero.
+.. rubric:: DEFAULT VALUE:
- * It shall be less than or equal to `SIZE_MAX
- <https://en.cppreference.com/w/c/types/limits>`_.
+The default value is 32768.
-DESCRIPTION:
- The value of this configuration option defines the size of the cache memory
- in bytes.
+.. rubric:: DESCRIPTION:
-NOTES:
- None.
+The value of this configuration option defines the size of the cache memory
+in bytes.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `SIZE_MAX <https://en.cppreference.com/w/c/types/limits>`_.
.. Generated from spec:/acfg/if/bdbuf-max-read-ahead-blocks
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
.. _CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS:
@@ -165,35 +193,44 @@ NOTES:
CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
-------------------------------------
-CONSTANT:
- ``CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is 0.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the maximum blocks per
+read-ahead request.
- * It shall be greater than or equal to zero.
+.. rubric:: NOTES:
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+A value of 0 disables the read-ahead task (default). The read-ahead task
+will issue speculative read transfers if a sequential access pattern is
+detected. This can improve the performance on some systems.
-DESCRIPTION:
- The value of this configuration option defines the maximum blocks per
- read-ahead request.
+.. rubric:: CONSTRAINTS:
-NOTES:
- A value of 0 disables the read-ahead task (default). The read-ahead task
- will issue speculative read transfers if a sequential access pattern is
- detected. This can improve the performance on some systems.
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/bdbuf-max-write-blocks
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
.. _CONFIGURE_BDBUF_MAX_WRITE_BLOCKS:
@@ -201,33 +238,38 @@ NOTES:
CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
--------------------------------
-CONSTANT:
- ``CONFIGURE_BDBUF_MAX_WRITE_BLOCKS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_BDBUF_MAX_WRITE_BLOCKS``
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: OPTION TYPE:
-DEFAULT VALUE:
- The default value is 16.
+This configuration option is an integer define.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DEFAULT VALUE:
- * It shall be greater than or equal to zero.
+The default value is 16.
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- The value of this configuration option defines the maximum blocks per write
- request.
+The value of this configuration option defines the maximum blocks per write
+request.
-NOTES:
- None.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/bdbuf-read-ahead-task-priority
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
.. _CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY:
@@ -235,28 +277,34 @@ NOTES:
CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
----------------------------------------
-CONSTANT:
- ``CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is an integer define.
+``CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY``
-DEFAULT VALUE:
- The default value is 15.
+.. rubric:: OPTION TYPE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a valid Classic API task
- priority. The set of valid task priorities depends on the scheduler
- configuration.
+This configuration option is an integer define.
-DESCRIPTION:
- The value of this configuration option defines the read-ahead task priority.
+.. rubric:: DEFAULT VALUE:
-NOTES:
- None.
+The default value is 15.
+
+.. rubric:: DESCRIPTION:
+
+The value of this configuration option defines the read-ahead task priority.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a valid Classic API task
+priority. The set of valid task priorities depends on the scheduler
+configuration.
.. Generated from spec:/acfg/if/bdbuf-task-stack-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_BDBUF_TASK_STACK_SIZE
.. _CONFIGURE_BDBUF_TASK_STACK_SIZE:
@@ -264,39 +312,45 @@ NOTES:
CONFIGURE_BDBUF_TASK_STACK_SIZE
-------------------------------
-CONSTANT:
- ``CONFIGURE_BDBUF_TASK_STACK_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_BDBUF_TASK_STACK_SIZE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is :c:macro:`RTEMS_MINIMUM_STACK_SIZE`.
-DEFAULT VALUE:
- The default value is :c:macro:`RTEMS_MINIMUM_STACK_SIZE`.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the task stack size of the
+Block Device Cache tasks in bytes.
- * It shall be greater than or equal to
- :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+.. rubric:: CONSTRAINTS:
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+The following constraints apply to this configuration option:
- * It shall be small enough so that the task stack space calculation carried
- out by ``<rtems/confdefs.h>`` does not overflow an integer of type
- `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+* The value of the configuration option shall be greater than or equal to
+ :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
-DESCRIPTION:
- The value of this configuration option defines the task stack size of the
- Block Device Cache tasks in bytes.
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
-NOTES:
- None.
+* The value of the configuration option shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/bdbuf-swapout-block-hold
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SWAPOUT_BLOCK_HOLD
.. _CONFIGURE_SWAPOUT_BLOCK_HOLD:
@@ -304,33 +358,38 @@ NOTES:
CONFIGURE_SWAPOUT_BLOCK_HOLD
----------------------------
-CONSTANT:
- ``CONFIGURE_SWAPOUT_BLOCK_HOLD``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SWAPOUT_BLOCK_HOLD``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DEFAULT VALUE:
-DEFAULT VALUE:
- The default value is 1000.
+The default value is 1000.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DESCRIPTION:
- * It shall be greater than or equal to zero.
+The value of this configuration option defines the swapout task maximum block
+hold time in milliseconds.
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- The value of this configuration option defines the swapout task maximum block
- hold time in milliseconds.
+The following constraints apply to this configuration option:
-NOTES:
- None.
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/bdbuf-swapout-swap-period
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SWAPOUT_SWAP_PERIOD
.. _CONFIGURE_SWAPOUT_SWAP_PERIOD:
@@ -338,33 +397,38 @@ NOTES:
CONFIGURE_SWAPOUT_SWAP_PERIOD
-----------------------------
-CONSTANT:
- ``CONFIGURE_SWAPOUT_SWAP_PERIOD``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SWAPOUT_SWAP_PERIOD``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is 250.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value is 250.
- * It shall be greater than or equal to zero.
+.. rubric:: DESCRIPTION:
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+The value of this configuration option defines the swapout task swap period
+in milliseconds.
-DESCRIPTION:
- The value of this configuration option defines the swapout task swap period
- in milliseconds.
+.. rubric:: CONSTRAINTS:
-NOTES:
- None.
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/bdbuf-swapout-task-priority
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SWAPOUT_TASK_PRIORITY
.. _CONFIGURE_SWAPOUT_TASK_PRIORITY:
@@ -372,28 +436,34 @@ NOTES:
CONFIGURE_SWAPOUT_TASK_PRIORITY
-------------------------------
-CONSTANT:
- ``CONFIGURE_SWAPOUT_TASK_PRIORITY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SWAPOUT_TASK_PRIORITY``
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: OPTION TYPE:
-DEFAULT VALUE:
- The default value is 15.
+This configuration option is an integer define.
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a valid Classic API task
- priority. The set of valid task priorities depends on the scheduler
- configuration.
+.. rubric:: DEFAULT VALUE:
-DESCRIPTION:
- The value of this configuration option defines the swapout task priority.
+The default value is 15.
-NOTES:
- None.
+.. rubric:: DESCRIPTION:
+
+The value of this configuration option defines the swapout task priority.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a valid Classic API task
+priority. The set of valid task priorities depends on the scheduler
+configuration.
.. Generated from spec:/acfg/if/bdbuf-swapout-worker-tasks
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SWAPOUT_WORKER_TASKS
.. _CONFIGURE_SWAPOUT_WORKER_TASKS:
@@ -401,32 +471,37 @@ NOTES:
CONFIGURE_SWAPOUT_WORKER_TASKS
------------------------------
-CONSTANT:
- ``CONFIGURE_SWAPOUT_WORKER_TASKS``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is an integer define.
+``CONFIGURE_SWAPOUT_WORKER_TASKS``
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: OPTION TYPE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This configuration option is an integer define.
- * It shall be greater than or equal to zero.
+.. rubric:: DEFAULT VALUE:
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+The default value is 0.
-DESCRIPTION:
- The value of this configuration option defines the swapout worker task count.
+.. rubric:: DESCRIPTION:
-NOTES:
- None.
+The value of this configuration option defines the swapout worker task count.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/bdbuf-swapout-worker-taskp-riority
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
.. _CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY:
@@ -434,23 +509,25 @@ NOTES:
CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
--------------------------------------
-CONSTANT:
- ``CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is 15.
-DEFAULT VALUE:
- The default value is 15.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a valid Classic API task
- priority. The set of valid task priorities depends on the scheduler
- configuration.
+The value of this configuration option defines the swapout worker task
+priority.
-DESCRIPTION:
- The value of this configuration option defines the swapout worker task
- priority.
+.. rubric:: CONSTRAINTS:
-NOTES:
- None.
+The value of the configuration option shall be a valid Classic API task
+priority. The set of valid task priorities depends on the scheduler
+configuration.
diff --git a/c-user/config/bsp-related.rst b/c-user/config/bsp-related.rst
index 45f31a8..b13a91d 100644
--- a/c-user/config/bsp-related.rst
+++ b/c-user/config/bsp-related.rst
@@ -30,6 +30,10 @@ configuration options may have a BSP-specific setting which is defined by
.. Generated from spec:/acfg/if/bsp-idle-task-body
+.. raw:: latex
+
+ \clearpage
+
.. index:: BSP_IDLE_TASK_BODY
.. _BSP_IDLE_TASK_BODY:
@@ -37,36 +41,46 @@ configuration options may have a BSP-specific setting which is defined by
BSP_IDLE_TASK_BODY
------------------
-CONSTANT:
- ``BSP_IDLE_TASK_BODY``
+.. rubric:: CONSTANT:
+
+``BSP_IDLE_TASK_BODY``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an initializer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an initializer define.
+The default value is BSP-specific.
-DEFAULT VALUE:
- The default value is BSP-specific.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be defined to a valid function
- pointer of the type ``void *( *idle_body )( uintptr_t )``.
+If
-DESCRIPTION:
- If
+* this configuration option is defined by the BSP
- * this configuration option is defined by the BSP
+* and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
- * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+then the value of this configuration option defines the default value of
+:ref:`CONFIGURE_IDLE_TASK_BODY`.
- then the value of this configuration option defines the default value of
- :ref:`CONFIGURE_IDLE_TASK_BODY`.
+.. rubric:: NOTES:
-NOTES:
- As it has knowledge of the specific CPU model, system controller logic, and
- peripheral buses, a BSP-specific IDLE task may be capable of turning
- components off to save power during extended periods of no task activity.
+As it has knowledge of the specific CPU model, system controller logic, and
+peripheral buses, a BSP-specific IDLE task may be capable of turning
+components off to save power during extended periods of no task activity.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be defined to a valid function
+pointer of the type ``void *( *idle_body )( uintptr_t )``.
.. Generated from spec:/acfg/if/bsp-idle-task-stack-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: BSP_IDLE_TASK_STACK_SIZE
.. _BSP_IDLE_TASK_STACK_SIZE:
@@ -74,41 +88,47 @@ NOTES:
BSP_IDLE_TASK_STACK_SIZE
------------------------
-CONSTANT:
- ``BSP_IDLE_TASK_STACK_SIZE``
+.. rubric:: CONSTANT:
+
+``BSP_IDLE_TASK_STACK_SIZE``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is BSP-specific.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value is BSP-specific.
- * It shall be greater than or equal to a BSP-specific and
- application-specific minimum value.
+.. rubric:: DESCRIPTION:
- * It shall be small enough so that the IDLE task stack area calculation
- carried out by ``<rtems/confdefs.h>`` does not overflow an integer of
- type `size_t <https://en.cppreference.com/w/c/types/size_t>`_.
+If
-DESCRIPTION:
- If
+* this configuration option is defined by the BSP
- * this configuration option is defined by the BSP
+* and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
- * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+then the value of this configuration option defines the default value of
+:ref:`CONFIGURE_IDLE_TASK_STACK_SIZE`.
- then the value of this configuration option defines the default value of
- :ref:`CONFIGURE_IDLE_TASK_STACK_SIZE`.
+.. rubric:: CONSTRAINTS:
-NOTES:
- None.
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
+
+* The value of the configuration option shall be small enough so that the IDLE
+ task stack area calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `size_t
+ <https://en.cppreference.com/w/c/types/size_t>`_.
.. Generated from spec:/acfg/if/bsp-initial-extension
+.. raw:: latex
+
+ \clearpage
+
.. index:: BSP_INITIAL_EXTENSION
.. _BSP_INITIAL_EXTENSION:
@@ -116,35 +136,45 @@ NOTES:
BSP_INITIAL_EXTENSION
---------------------
-CONSTANT:
- ``BSP_INITIAL_EXTENSION``
+.. rubric:: CONSTANT:
+
+``BSP_INITIAL_EXTENSION``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an initializer define.
+This configuration option is an initializer define.
-DEFAULT VALUE:
- The default value is BSP-specific.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a list of initializers for
- structures of type :c:type:`rtems_extensions_table`.
+The default value is BSP-specific.
-DESCRIPTION:
- If
+.. rubric:: DESCRIPTION:
- * this configuration option is defined by the BSP
+If
- * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+* this configuration option is defined by the BSP
- then the value of this configuration option is used to initialize the table
- of initial user extensions.
+* and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
-NOTES:
- The value of this configuration option is placed after the entries of all
- other initial user extensions.
+then the value of this configuration option is used to initialize the table
+of initial user extensions.
+
+.. rubric:: NOTES:
+
+The value of this configuration option is placed after the entries of all
+other initial user extensions.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a list of initializers for
+structures of type :c:type:`rtems_extensions_table`.
.. Generated from spec:/acfg/if/bsp-interrupt-stack-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: BSP_INTERRUPT_STACK_SIZE
.. _BSP_INTERRUPT_STACK_SIZE:
@@ -152,44 +182,50 @@ NOTES:
BSP_INTERRUPT_STACK_SIZE
------------------------
-CONSTANT:
- ``BSP_INTERRUPT_STACK_SIZE``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is an integer define.
+``BSP_INTERRUPT_STACK_SIZE``
-DEFAULT VALUE:
- The default value is BSP-specific.
+.. rubric:: OPTION TYPE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This configuration option is an integer define.
- * It shall be greater than or equal to a BSP-specific and
- application-specific minimum value.
+.. rubric:: DEFAULT VALUE:
- * It shall be small enough so that the interrupt stack area calculation
- carried out by ``<rtems/confdefs.h>`` does not overflow an integer of
- type `size_t <https://en.cppreference.com/w/c/types/size_t>`_.
+The default value is BSP-specific.
- * It shall be aligned according to
- :c:macro:`CPU_INTERRUPT_STACK_ALIGNMENT`.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- If
+If
- * this configuration option is defined by the BSP
+* this configuration option is defined by the BSP
- * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+* and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
- then the value of this configuration option defines the default value of
- :ref:`CONFIGURE_INTERRUPT_STACK_SIZE`.
+then the value of this configuration option defines the default value of
+:ref:`CONFIGURE_INTERRUPT_STACK_SIZE`.
-NOTES:
- None.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
+
+* The value of the configuration option shall be small enough so that the
+ interrupt stack area calculation carried out by ``<rtems/confdefs.h>`` does
+ not overflow an integer of type `size_t
+ <https://en.cppreference.com/w/c/types/size_t>`_.
+
+* The value of the configuration option shall be aligned according to
+ :c:macro:`CPU_INTERRUPT_STACK_ALIGNMENT`.
.. Generated from spec:/acfg/if/bsp-prerequisite-drivers
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_BSP_PREREQUISITE_DRIVERS
.. _CONFIGURE_BSP_PREREQUISITE_DRIVERS:
@@ -197,36 +233,46 @@ NOTES:
CONFIGURE_BSP_PREREQUISITE_DRIVERS
----------------------------------
-CONSTANT:
- ``CONFIGURE_BSP_PREREQUISITE_DRIVERS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_BSP_PREREQUISITE_DRIVERS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an initializer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is BSP-specific.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an initializer define.
+If
-DEFAULT VALUE:
- The default value is BSP-specific.
+* this configuration option is defined by the BSP
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a list of initializers for
- structures of type :c:type:`rtems_extensions_table`.
+* and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
-DESCRIPTION:
- If
+then the value of this configuration option is used to add BSP-provided
+prerequisite drivers to the Device Driver Table.
- * this configuration option is defined by the BSP
+.. rubric:: NOTES:
- * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+The value of this configuration option is placed before the entries of all
+other initial user extensions (including
+:ref:`CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`).
- then the value of this configuration option is used to add BSP-provided
- prerequisite drivers to the Device Driver Table.
+.. rubric:: CONSTRAINTS:
-NOTES:
- The value of this configuration option is placed before the entries of all
- other initial user extensions (including
- :ref:`CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`).
+The value of the configuration option shall be a list of initializers for
+structures of type :c:type:`rtems_extensions_table`.
.. Generated from spec:/acfg/if/disable-bsp-settings
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_DISABLE_BSP_SETTINGS
.. _CONFIGURE_DISABLE_BSP_SETTINGS:
@@ -234,37 +280,42 @@ NOTES:
CONFIGURE_DISABLE_BSP_SETTINGS
------------------------------
-CONSTANT:
- ``CONFIGURE_DISABLE_BSP_SETTINGS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_DISABLE_BSP_SETTINGS``
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: OPTION TYPE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+This configuration option is a boolean feature define.
-DESCRIPTION:
- In case this configuration option is defined, then the following BSP related
- configuration options are undefined:
+.. rubric:: DEFAULT CONFIGURATION:
- * :ref:`BSP_IDLE_TASK_BODY`
+If this configuration option is undefined, then the described feature is not
+enabled.
- * :ref:`BSP_IDLE_TASK_STACK_SIZE`
+.. rubric:: DESCRIPTION:
- * :ref:`BSP_INITIAL_EXTENSION`
+In case this configuration option is defined, then the following BSP related
+configuration options are undefined:
- * :ref:`BSP_INTERRUPT_STACK_SIZE`
+* :ref:`BSP_IDLE_TASK_BODY`
- * :ref:`CONFIGURE_BSP_PREREQUISITE_DRIVERS`
+* :ref:`BSP_IDLE_TASK_STACK_SIZE`
- * :ref:`CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK`
+* :ref:`BSP_INITIAL_EXTENSION`
-NOTES:
- None.
+* :ref:`BSP_INTERRUPT_STACK_SIZE`
+
+* :ref:`CONFIGURE_BSP_PREREQUISITE_DRIVERS`
+
+* :ref:`CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK`
.. Generated from spec:/acfg/if/malloc-bsp-supports-sbrk
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
.. _CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK:
@@ -272,28 +323,33 @@ NOTES:
CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
----------------------------------
-CONSTANT:
- ``CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DESCRIPTION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+If
-DESCRIPTION:
- If
+* this configuration option is defined by the BSP
- * this configuration option is defined by the BSP
+* and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
- * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+then not all memory is made available to the C Program Heap immediately at
+system initialization time. When :c:func:`malloc` or other standard
+memory allocation functions are unable to allocate memory, they will call the
+BSP supplied :c:func:`sbrk` function to obtain more memory.
- then not all memory is made available to the C Program Heap immediately at
- system initialization time. When :c:func:`malloc` or other standard
- memory allocation functions are unable to allocate memory, they will call the
- BSP supplied :c:func:`sbrk` function to obtain more memory.
+.. rubric:: NOTES:
-NOTES:
- This option should not be defined by the application. Only the BSP knows how
- it allocates memory to the C Program Heap.
+This option should not be defined by the application. Only the BSP knows how
+it allocates memory to the C Program Heap.
diff --git a/c-user/config/classic-api.rst b/c-user/config/classic-api.rst
index 4643572..4981918 100644
--- a/c-user/config/classic-api.rst
+++ b/c-user/config/classic-api.rst
@@ -27,6 +27,10 @@ This section describes configuration options related to the Classic API.
.. Generated from spec:/acfg/if/max-barriers
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_BARRIERS
.. _CONFIGURE_MAXIMUM_BARRIERS:
@@ -34,42 +38,51 @@ This section describes configuration options related to the Classic API.
CONFIGURE_MAXIMUM_BARRIERS
--------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_BARRIERS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_BARRIERS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is 0.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the maximum number of Classic
+API Barriers that can be concurrently active.
- * It shall be greater than or equal to zero.
+.. rubric:: NOTES:
- * It shall be less than or equal to 65535.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: CONSTRAINTS:
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+The following constraints apply to this configuration option:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of Classic
- API Barriers that can be concurrently active.
+* The value of the configuration option shall be greater than or equal to zero.
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-message-queues
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_MESSAGE_QUEUES
.. _CONFIGURE_MAXIMUM_MESSAGE_QUEUES:
@@ -77,44 +90,53 @@ NOTES:
CONFIGURE_MAXIMUM_MESSAGE_QUEUES
--------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value is 0.
- * It shall be greater than or equal to zero.
+.. rubric:: DESCRIPTION:
- * It shall be less than or equal to 65535.
+The value of this configuration option defines the maximum number of Classic
+API Message Queues that can be concurrently active.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: NOTES:
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`. You have to account for the memory used to
+store the messages of each message queue, see
+:ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
-DESCRIPTION:
- The value of this configuration option defines the maximum number of Classic
- API Message Queues that can be concurrently active.
+.. rubric:: CONSTRAINTS:
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`. You have to account for the memory used to
- store the messages of each message queue, see
- :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-partitions
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_PARTITIONS
.. _CONFIGURE_MAXIMUM_PARTITIONS:
@@ -122,42 +144,51 @@ NOTES:
CONFIGURE_MAXIMUM_PARTITIONS
----------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_PARTITIONS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_PARTITIONS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 0.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an integer define.
+The value of this configuration option defines the maximum number of Classic
+API Partitions that can be concurrently active.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It shall be greater than or equal to zero.
+.. rubric:: CONSTRAINTS:
- * It shall be less than or equal to 65535.
+The following constraints apply to this configuration option:
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+* The value of the configuration option shall be greater than or equal to zero.
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+* The value of the configuration option shall be less than or equal to 65535.
-DESCRIPTION:
- The value of this configuration option defines the maximum number of Classic
- API Partitions that can be concurrently active.
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-periods
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_PERIODS
.. _CONFIGURE_MAXIMUM_PERIODS:
@@ -165,42 +196,51 @@ NOTES:
CONFIGURE_MAXIMUM_PERIODS
-------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_PERIODS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_PERIODS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is 0.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the maximum number of Classic
+API Periods that can be concurrently active.
- * It shall be greater than or equal to zero.
+.. rubric:: NOTES:
- * It shall be less than or equal to 65535.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: CONSTRAINTS:
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+The following constraints apply to this configuration option:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of Classic
- API Periods that can be concurrently active.
+* The value of the configuration option shall be greater than or equal to zero.
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-ports
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_PORTS
.. _CONFIGURE_MAXIMUM_PORTS:
@@ -208,42 +248,51 @@ NOTES:
CONFIGURE_MAXIMUM_PORTS
-----------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_PORTS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_PORTS``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value is 0.
- * It shall be greater than or equal to zero.
+.. rubric:: DESCRIPTION:
- * It shall be less than or equal to 65535.
+The value of this configuration option defines the maximum number of Classic
+API Ports that can be concurrently active.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: NOTES:
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
-DESCRIPTION:
- The value of this configuration option defines the maximum number of Classic
- API Ports that can be concurrently active.
+.. rubric:: CONSTRAINTS:
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-regions
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_REGIONS
.. _CONFIGURE_MAXIMUM_REGIONS:
@@ -251,42 +300,51 @@ NOTES:
CONFIGURE_MAXIMUM_REGIONS
-------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_REGIONS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_REGIONS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 0.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an integer define.
+The value of this configuration option defines the maximum number of Classic
+API Regions that can be concurrently active.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It shall be greater than or equal to zero.
+.. rubric:: CONSTRAINTS:
- * It shall be less than or equal to 65535.
+The following constraints apply to this configuration option:
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+* The value of the configuration option shall be greater than or equal to zero.
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+* The value of the configuration option shall be less than or equal to 65535.
-DESCRIPTION:
- The value of this configuration option defines the maximum number of Classic
- API Regions that can be concurrently active.
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-semaphores
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_SEMAPHORES
.. _CONFIGURE_MAXIMUM_SEMAPHORES:
@@ -294,46 +352,55 @@ NOTES:
CONFIGURE_MAXIMUM_SEMAPHORES
----------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_SEMAPHORES``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_SEMAPHORES``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is 0.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the maximum number of Classic
+API Semaphore that can be concurrently active.
- * It shall be greater than or equal to zero.
+.. rubric:: NOTES:
- * It shall be less than or equal to 65535.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+In SMP configurations, the size of a Semaphore Control Block depends on the
+scheduler count (see :ref:`ConfigurationSchedulerTable`). The semaphores
+using the :ref:`MrsP` need a ceiling priority per scheduler.
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of Classic
- API Semaphore that can be concurrently active.
+The following constraints apply to this configuration option:
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+* The value of the configuration option shall be greater than or equal to zero.
- In SMP configurations, the size of a Semaphore Control Block depends on the
- scheduler count (see :ref:`ConfigurationSchedulerTable`). The semaphores
- using the :ref:`MrsP` need a ceiling priority per scheduler.
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-tasks
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_TASKS
.. _CONFIGURE_MAXIMUM_TASKS:
@@ -341,59 +408,69 @@ NOTES:
CONFIGURE_MAXIMUM_TASKS
-----------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_TASKS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_TASKS``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value is 0.
- * It shall be greater than or equal to zero.
+.. rubric:: DESCRIPTION:
- * It shall be less than or equal to 65535.
+The value of this configuration option defines the maximum number of Classic
+API Tasks that can be concurrently active.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: NOTES:
- * It shall be small enough so that the task stack space calculation carried
- out by ``<rtems/confdefs.h>`` does not overflow an integer of type
- `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+The calculations for the required memory in the RTEMS Workspace for tasks
+assume that each task has a minimum stack size and has floating point
+support enabled. The configuration option :ref:`CONFIGURE_EXTRA_TASK_STACKS` is used
+to specify task stack requirements *above* the minimum size required.
-DESCRIPTION:
- The value of this configuration option defines the maximum number of Classic
- API Tasks that can be concurrently active.
+The maximum number of POSIX threads is specified by
+:ref:`CONFIGURE_MAXIMUM_POSIX_THREADS`.
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+A future enhancement to ``<rtems/confdefs.h>`` could be to eliminate the
+assumption that all tasks have floating point enabled. This would require
+the addition of a new configuration parameter to specify the number of
+tasks which enable floating point support.
- The calculations for the required memory in the RTEMS Workspace for tasks
- assume that each task has a minimum stack size and has floating point
- support enabled. The configuration option :ref:`CONFIGURE_EXTRA_TASK_STACKS` is used
- to specify task stack requirements *above* the minimum size required.
+.. rubric:: CONSTRAINTS:
- The maximum number of POSIX threads is specified by
- :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS`.
+The following constraints apply to this configuration option:
- A future enhancement to ``<rtems/confdefs.h>`` could be to eliminate the
- assumption that all tasks have floating point enabled. This would require
- the addition of a new configuration parameter to specify the number of
- tasks which enable floating point support.
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-thread-local-storage-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE
.. _CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE:
@@ -401,53 +478,62 @@ NOTES:
CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE
-------------------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 0.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an integer define.
+If the value of this configuration option is greater than zero, then it
+defines the maximum thread-local storage size, otherwise the thread-local
+storage size is defined by the linker depending on the thread-local storage
+objects used by the application in the statically-linked executable.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This configuration option can be used to reserve space for the dynamic linking
+of modules with thread-local storage objects.
- * It shall be greater than or equal to zero.
+If the thread-local storage size defined by the thread-local storage
+objects used by the application in the statically-linked executable is greater
+than a non-zero value of this configuration option, then a fatal error will
+occur during system initialization.
- * It shall be less than or equal to `SIZE_MAX
- <https://en.cppreference.com/w/c/types/limits>`_.
+Use :c:func:`RTEMS_ALIGN_UP` and
+:c:macro:`RTEMS_TASK_STORAGE_ALIGNMENT` to adjust the size to meet the
+minimum alignment requirement of a thread-local storage area.
- * It shall be an integral multiple of
- :c:macro:`RTEMS_TASK_STORAGE_ALIGNMENT`.
+The actual thread-local storage size is determined when the application
+executable is linked. The ``rtems-exeinfo`` command line tool included in
+the RTEMS Tools can be used to obtain the thread-local storage size and
+alignment of an application executable.
-DESCRIPTION:
- If the value of this configuration option is greater than zero, then it
- defines the maximum thread-local storage size, otherwise the thread-local
- storage size is defined by the linker depending on the thread-local storage
- objects used by the application in the statically-linked executable.
+.. rubric:: CONSTRAINTS:
-NOTES:
- This configuration option can be used to reserve space for the dynamic linking
- of modules with thread-local storage objects.
+The following constraints apply to this configuration option:
- If the thread-local storage size defined by the thread-local storage
- objects used by the application in the statically-linked executable is greater
- than a non-zero value of this configuration option, then a fatal error will
- occur during system initialization.
+* The value of the configuration option shall be greater than or equal to zero.
- Use :c:func:`RTEMS_ALIGN_UP` and
- :c:macro:`RTEMS_TASK_STORAGE_ALIGNMENT` to adjust the size to meet the
- minimum alignment requirement of a thread-local storage area.
+* The value of the configuration option shall be less than or equal to
+ `SIZE_MAX <https://en.cppreference.com/w/c/types/limits>`_.
- The actual thread-local storage size is determined when the application
- executable is linked. The ``rtems-exeinfo`` command line tool included in
- the RTEMS Tools can be used to obtain the thread-local storage size and
- alignment of an application executable.
+* The value of the configuration option shall be an integral multiple of
+ :c:macro:`RTEMS_TASK_STORAGE_ALIGNMENT`.
.. Generated from spec:/acfg/if/max-timers
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_TIMERS
.. _CONFIGURE_MAXIMUM_TIMERS:
@@ -455,42 +541,51 @@ NOTES:
CONFIGURE_MAXIMUM_TIMERS
------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_TIMERS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_TIMERS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is 0.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the maximum number of Classic
+API Timers that can be concurrently active.
- * It shall be greater than or equal to zero.
+.. rubric:: NOTES:
- * It shall be less than or equal to 65535.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: CONSTRAINTS:
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+The following constraints apply to this configuration option:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of Classic
- API Timers that can be concurrently active.
+* The value of the configuration option shall be greater than or equal to zero.
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-user-extensions
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_USER_EXTENSIONS
.. _CONFIGURE_MAXIMUM_USER_EXTENSIONS:
@@ -498,36 +593,45 @@ NOTES:
CONFIGURE_MAXIMUM_USER_EXTENSIONS
---------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_USER_EXTENSIONS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_USER_EXTENSIONS``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value is 0.
- * It shall be greater than or equal to zero.
+.. rubric:: DESCRIPTION:
- * It shall be less than or equal to 65535.
+The value of this configuration option defines the maximum number of Classic
+API User Extensions that can be concurrently active.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: NOTES:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of Classic
- API User Extensions that can be concurrently active.
+This object class cannot be configured in unlimited allocation mode.
-NOTES:
- This object class cannot be configured in unlimited allocation mode.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
.. Generated from spec:/acfg/if/min-tasks-with-user-provided-storage
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE
.. _CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE:
@@ -535,31 +639,37 @@ NOTES:
CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE
--------------------------------------------------
-CONSTANT:
- ``CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 0.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an integer define.
+The value of this configuration option defines the minimum count of Classic
+API Tasks which are constructed by :c:func:`rtems_task_construct`.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+By default, the calculation for the required memory in the RTEMS Workspace
+for tasks assumes that all Classic API Tasks are created by
+:c:func:`rtems_task_create`. This configuration option can be used to
+reduce the required memory for the system-provided task storage areas since
+tasks constructed by :c:func:`rtems_task_construct` use a user-provided
+task storage area.
- * It shall be greater than or equal to zero.
+.. rubric:: CONSTRAINTS:
- * It shall be less than or equal to :ref:`CONFIGURE_MAXIMUM_TASKS`.
+The following constraints apply to this configuration option:
-DESCRIPTION:
- The value of this configuration option defines the minimum count of Classic
- API Tasks which are constructed by :c:func:`rtems_task_construct`.
+* The value of the configuration option shall be greater than or equal to zero.
-NOTES:
- By default, the calculation for the required memory in the RTEMS Workspace
- for tasks assumes that all Classic API Tasks are created by
- :c:func:`rtems_task_create`. This configuration option can be used to
- reduce the required memory for the system-provided task storage areas since
- tasks constructed by :c:func:`rtems_task_construct` use a user-provided
- task storage area.
+* The value of the configuration option shall be less than or equal to
+ :ref:`CONFIGURE_MAXIMUM_TASKS`.
diff --git a/c-user/config/classic-init-task.rst b/c-user/config/classic-init-task.rst
index 9c0435b..0cc400d 100644
--- a/c-user/config/classic-init-task.rst
+++ b/c-user/config/classic-init-task.rst
@@ -28,6 +28,10 @@ initialization task.
.. Generated from spec:/acfg/if/init-task-arguments
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_INIT_TASK_ARGUMENTS
.. _CONFIGURE_INIT_TASK_ARGUMENTS:
@@ -35,28 +39,34 @@ initialization task.
CONFIGURE_INIT_TASK_ARGUMENTS
-----------------------------
-CONSTANT:
- ``CONFIGURE_INIT_TASK_ARGUMENTS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_INIT_TASK_ARGUMENTS``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be convertible to an integer
- of type :c:type:`rtems_task_argument`.
+The default value is 0.
-DESCRIPTION:
- The value of this configuration option defines task argument of the Classic
- API initialization task.
+.. rubric:: DESCRIPTION:
-NOTES:
- None.
+The value of this configuration option defines task argument of the Classic
+API initialization task.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be convertible to an integer of
+type :c:type:`rtems_task_argument`.
.. Generated from spec:/acfg/if/init-task-attributes
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_INIT_TASK_ATTRIBUTES
.. _CONFIGURE_INIT_TASK_ATTRIBUTES:
@@ -64,27 +74,33 @@ NOTES:
CONFIGURE_INIT_TASK_ATTRIBUTES
------------------------------
-CONSTANT:
- ``CONFIGURE_INIT_TASK_ATTRIBUTES``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is an integer define.
+``CONFIGURE_INIT_TASK_ATTRIBUTES``
-DEFAULT VALUE:
- The default value is :c:macro:`RTEMS_DEFAULT_ATTRIBUTES`.
+.. rubric:: OPTION TYPE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a valid task attribute set.
+This configuration option is an integer define.
-DESCRIPTION:
- The value of this configuration option defines the task attributes of the
- Classic API initialization task.
+.. rubric:: DEFAULT VALUE:
-NOTES:
- None.
+The default value is :c:macro:`RTEMS_DEFAULT_ATTRIBUTES`.
+
+.. rubric:: DESCRIPTION:
+
+The value of this configuration option defines the task attributes of the
+Classic API initialization task.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a valid task attribute set.
.. Generated from spec:/acfg/if/init-task-construct-storage-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE
.. _CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE:
@@ -92,60 +108,70 @@ NOTES:
CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE
------------------------------------------
-CONSTANT:
- ``CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- This configuration option has no default value. If it is not specified, then
- the Classic API initialization task will be created with the stack size
- defined by the :ref:`CONFIGURE_INIT_TASK_STACK_SIZE` configuration option.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This configuration option has no default value. If it is not specified, then
+the Classic API initialization task will be created with the stack size
+defined by the :ref:`CONFIGURE_INIT_TASK_STACK_SIZE` configuration option.
- * It shall be greater than or equal to
- :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+.. rubric:: DESCRIPTION:
- * It shall be defined using :c:func:`RTEMS_TASK_STORAGE_SIZE`.
+The value of this configuration option defines the task storage size of the
+Classic API initialization task.
-DESCRIPTION:
- The value of this configuration option defines the task storage size of the
- Classic API initialization task.
+.. rubric:: NOTES:
-NOTES:
- If this configuration option is specified, then
+If this configuration option is specified, then
- * a task storage area of the specified size is statically allocated by
- ``<rtems/confdefs.h>`` for the Classic API initialization task,
+* a task storage area of the specified size is statically allocated by
+ ``<rtems/confdefs.h>`` for the Classic API initialization task,
- * the Classic API initialization task is constructed by
- :c:func:`rtems_task_construct` instead of using
- :c:func:`rtems_task_create`,
+* the Classic API initialization task is constructed by
+ :c:func:`rtems_task_construct` instead of using
+ :c:func:`rtems_task_create`,
- * the maximum thread-local storage size defined by
- :ref:`CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE` is used for the Classic API
- initialization task,
+* the maximum thread-local storage size defined by
+ :ref:`CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE` is used for the Classic API
+ initialization task,
- * the Classic API initialization task should be accounted for in
- :ref:`CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE`, and
+* the Classic API initialization task should be accounted for in
+ :ref:`CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE`, and
- * the task storage area used for the Classic API initialization task is not
- reclaimed by the system if the task is deleted.
+* the task storage area used for the Classic API initialization task is not
+ reclaimed by the system if the task is deleted.
- The
+The
- * :ref:`CONFIGURE_INIT_TASK_STACK_SIZE` and
+* :ref:`CONFIGURE_INIT_TASK_STACK_SIZE` and
- * ``CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE``
+* ``CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE``
- configuration options are mutually exclusive.
+configuration options are mutually exclusive.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to
+ :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+* The value of the configuration option shall be defined using
+ :c:func:`RTEMS_TASK_STORAGE_SIZE`.
.. Generated from spec:/acfg/if/init-task-entrypoint
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_INIT_TASK_ENTRY_POINT
.. _CONFIGURE_INIT_TASK_ENTRY_POINT:
@@ -153,29 +179,39 @@ NOTES:
CONFIGURE_INIT_TASK_ENTRY_POINT
-------------------------------
-CONSTANT:
- ``CONFIGURE_INIT_TASK_ENTRY_POINT``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_INIT_TASK_ENTRY_POINT``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an initializer define.
+This configuration option is an initializer define.
-DEFAULT VALUE:
- The default value is ``Init``.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be defined to a valid function
- pointer of the type ``void ( *entry_point )( rtems_task_argument )``.
+The default value is ``Init``.
-DESCRIPTION:
- The value of this configuration option initializes the entry point of the
- Classic API initialization task.
+.. rubric:: DESCRIPTION:
-NOTES:
- The application shall provide the function referenced by this configuration
- option.
+The value of this configuration option initializes the entry point of the
+Classic API initialization task.
+
+.. rubric:: NOTES:
+
+The application shall provide the function referenced by this configuration
+option.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be defined to a valid function
+pointer of the type ``void ( *entry_point )( rtems_task_argument )``.
.. Generated from spec:/acfg/if/init-task-initial-modes
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_INIT_TASK_INITIAL_MODES
.. _CONFIGURE_INIT_TASK_INITIAL_MODES:
@@ -183,28 +219,34 @@ NOTES:
CONFIGURE_INIT_TASK_INITIAL_MODES
---------------------------------
-CONSTANT:
- ``CONFIGURE_INIT_TASK_INITIAL_MODES``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_INIT_TASK_INITIAL_MODES``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- In SMP configurations, the default value is :c:macro:`RTEMS_DEFAULT_MODES`
- otherwise the default value is :c:macro:`RTEMS_NO_PREEMPT`.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a valid task mode set.
+In SMP configurations, the default value is :c:macro:`RTEMS_DEFAULT_MODES`
+otherwise the default value is :c:macro:`RTEMS_NO_PREEMPT`.
-DESCRIPTION:
- The value of this configuration option defines the initial execution mode of
- the Classic API initialization task.
+.. rubric:: DESCRIPTION:
-NOTES:
- None.
+The value of this configuration option defines the initial execution mode of
+the Classic API initialization task.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a valid task mode set.
.. Generated from spec:/acfg/if/init-task-name
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_INIT_TASK_NAME
.. _CONFIGURE_INIT_TASK_NAME:
@@ -212,28 +254,38 @@ NOTES:
CONFIGURE_INIT_TASK_NAME
------------------------
-CONSTANT:
- ``CONFIGURE_INIT_TASK_NAME``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_INIT_TASK_NAME``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
-DEFAULT VALUE:
- The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be convertible to an integer
- of type :c:type:`rtems_name`.
+The value of this configuration option defines the name of the Classic API
+initialization task.
+
+.. rubric:: NOTES:
-DESCRIPTION:
- The value of this configuration option defines the name of the Classic API
- initialization task.
+Use :c:func:`rtems_build_name` to define the task name.
-NOTES:
- Use :c:func:`rtems_build_name` to define the task name.
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be convertible to an integer of
+type :c:type:`rtems_name`.
.. Generated from spec:/acfg/if/init-task-priority
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_INIT_TASK_PRIORITY
.. _CONFIGURE_INIT_TASK_PRIORITY:
@@ -241,29 +293,35 @@ NOTES:
CONFIGURE_INIT_TASK_PRIORITY
----------------------------
-CONSTANT:
- ``CONFIGURE_INIT_TASK_PRIORITY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_INIT_TASK_PRIORITY``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DEFAULT VALUE:
-DEFAULT VALUE:
- The default value is 1.
+The default value is 1.
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a valid Classic API task
- priority. The set of valid task priorities depends on the scheduler
- configuration.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- The value of this configuration option defines the initial priority of the
- Classic API initialization task.
+The value of this configuration option defines the initial priority of the
+Classic API initialization task.
-NOTES:
- None.
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a valid Classic API task
+priority. The set of valid task priorities depends on the scheduler
+configuration.
.. Generated from spec:/acfg/if/init-task-stack-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_INIT_TASK_STACK_SIZE
.. _CONFIGURE_INIT_TASK_STACK_SIZE:
@@ -271,41 +329,51 @@ NOTES:
CONFIGURE_INIT_TASK_STACK_SIZE
------------------------------
-CONSTANT:
- ``CONFIGURE_INIT_TASK_STACK_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_INIT_TASK_STACK_SIZE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DESCRIPTION:
-DEFAULT VALUE:
- The default value is :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+The value of this configuration option defines the task stack size of the
+Classic API initialization task.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: NOTES:
- * It shall be greater than or equal to
- :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+The
- * It shall be small enough so that the task stack space calculation carried
- out by ``<rtems/confdefs.h>`` does not overflow an integer of type
- `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+* ``CONFIGURE_INIT_TASK_STACK_SIZE`` and
-DESCRIPTION:
- The value of this configuration option defines the task stack size of the
- Classic API initialization task.
+* :ref:`CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE`
-NOTES:
- The
+configuration options are mutually exclusive.
- * ``CONFIGURE_INIT_TASK_STACK_SIZE`` and
+.. rubric:: CONSTRAINTS:
- * :ref:`CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE`
+The following constraints apply to this configuration option:
- configuration options are mutually exclusive.
+* The value of the configuration option shall be greater than or equal to
+ :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+* The value of the configuration option shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/rtems-init-tasks-table
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_RTEMS_INIT_TASKS_TABLE
.. _CONFIGURE_RTEMS_INIT_TASKS_TABLE:
@@ -313,28 +381,33 @@ NOTES:
CONFIGURE_RTEMS_INIT_TASKS_TABLE
--------------------------------
-CONSTANT:
- ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_RTEMS_INIT_TASKS_TABLE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DESCRIPTION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+In case this configuration option is defined, then exactly one Classic API
+initialization task is configured.
-DESCRIPTION:
- In case this configuration option is defined, then exactly one Classic API
- initialization task is configured.
+.. rubric:: NOTES:
-NOTES:
- The application shall define exactly one of the following configuration
- options
+The application shall define exactly one of the following configuration
+options
- * ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``,
+* ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``,
- * :ref:`CONFIGURE_POSIX_INIT_THREAD_TABLE`, or
+* :ref:`CONFIGURE_POSIX_INIT_THREAD_TABLE`, or
- * :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`
+* :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`
- otherwise a compile time error in the configuration file will occur.
+otherwise a compile time error in the configuration file will occur.
diff --git a/c-user/config/device-driver.rst b/c-user/config/device-driver.rst
index 22002f9..d84da0a 100644
--- a/c-user/config/device-driver.rst
+++ b/c-user/config/device-driver.rst
@@ -1,7 +1,7 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
.. Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
-.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+.. Copyright (C) 1988, 2021 On-Line Applications Research Corporation (OAR)
.. This file is part of the RTEMS quality process and was automatically
.. generated. If you find something that needs to be fixed or
@@ -28,6 +28,10 @@ Note that network device drivers are not covered by the following options.
.. Generated from spec:/acfg/if/appl-does-not-need-clock-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
.. _CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER:
@@ -35,37 +39,46 @@ Note that network device drivers are not covered by the following options.
CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
------------------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then a Clock Driver may be
- initialized during system initialization.
+If this configuration option is undefined, then a Clock Driver may be
+initialized during system initialization.
-DESCRIPTION:
- In case this configuration option is defined, then **no** Clock Driver is
- initialized during system initialization.
+.. rubric:: DESCRIPTION:
-NOTES:
- This configuration parameter is intended to prevent the common user error
- of using the Hello World example as the baseline for an application and
- leaving out a clock tick source.
+In case this configuration option is defined, then **no** Clock Driver is
+initialized during system initialization.
- The application shall define exactly one of the following configuration options
+.. rubric:: NOTES:
- * :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`,
+This configuration parameter is intended to prevent the common user error
+of using the Hello World example as the baseline for an application and
+leaving out a clock tick source.
- * ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``, or
+The application shall define exactly one of the following configuration options
- * :ref:`CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`,
+* :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`,
- otherwise a compile time error in the configuration file will occur.
+* ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``, or
+
+* :ref:`CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`,
+
+otherwise a compile time error in the configuration file will occur.
.. Generated from spec:/acfg/if/appl-extra-drivers
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_EXTRA_DRIVERS
.. _CONFIGURE_APPLICATION_EXTRA_DRIVERS:
@@ -73,32 +86,42 @@ NOTES:
CONFIGURE_APPLICATION_EXTRA_DRIVERS
-----------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_EXTRA_DRIVERS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_EXTRA_DRIVERS``
-OPTION TYPE:
- This configuration option is an initializer define.
+.. rubric:: OPTION TYPE:
-DEFAULT VALUE:
- The default value is the empty list.
+This configuration option is an initializer define.
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a list of initializers for
- structures of type :c:type:`rtems_driver_address_table`.
+.. rubric:: DEFAULT VALUE:
-DESCRIPTION:
- The value of this configuration option is used to initialize the Device
- Driver Table.
+The default value is the empty list.
-NOTES:
- The value of this configuration option is placed after the entries of other
- device driver configuration options.
+.. rubric:: DESCRIPTION:
- See :ref:`CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS` for an alternative
- placement of application device driver initializers.
+The value of this configuration option is used to initialize the Device
+Driver Table.
+
+.. rubric:: NOTES:
+
+The value of this configuration option is placed after the entries of other
+device driver configuration options.
+
+See :ref:`CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS` for an alternative
+placement of application device driver initializers.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a list of initializers for
+structures of type :c:type:`rtems_driver_address_table`.
.. Generated from spec:/acfg/if/appl-needs-ata-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER:
@@ -106,28 +129,37 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
--------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the ATA Driver is
- initialized during system initialization.
+If this configuration option is undefined, then the described feature is not
+enabled.
-NOTES:
- Most BSPs do not include support for an ATA Driver.
+.. rubric:: DESCRIPTION:
- If this option is defined and the BSP does not have this device driver, then
- the user will get a link time error for an undefined symbol.
+In case this configuration option is defined, then the ATA Driver is
+initialized during system initialization.
+
+.. rubric:: NOTES:
+
+Most BSPs do not include support for an ATA Driver.
+
+If this option is defined and the BSP does not have this device driver, then
+the user will get a link time error for an undefined symbol.
.. Generated from spec:/acfg/if/appl-needs-clock-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER:
@@ -135,36 +167,45 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
----------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- In case this configuration option is defined, then the Clock Driver is
- initialized during system initialization.
+In case this configuration option is defined, then the Clock Driver is
+initialized during system initialization.
-NOTES:
- The Clock Driver is responsible for providing a regular interrupt
- which invokes a clock tick directive.
+.. rubric:: NOTES:
- The application shall define exactly one of the following configuration options
+The Clock Driver is responsible for providing a regular interrupt
+which invokes a clock tick directive.
- * ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``,
+The application shall define exactly one of the following configuration options
- * :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`, or
+* ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``,
- * :ref:`CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`,
+* :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`, or
- otherwise a compile time error in the configuration file will occur.
+* :ref:`CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`,
+
+otherwise a compile time error in the configuration file will occur.
.. Generated from spec:/acfg/if/appl-needs-console-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER:
@@ -172,40 +213,49 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
------------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the Console Driver is
- initialized during system initialization.
+If this configuration option is undefined, then the described feature is not
+enabled.
-NOTES:
- The Console Driver is responsible for providing the :file:`/dev/console`
- device file. This device is used to initialize the standard input, output,
- and error file descriptors.
+.. rubric:: DESCRIPTION:
- BSPs should be constructed in a manner that allows :c:func:`printk` to work
- properly without the need for the Console Driver to be configured.
+In case this configuration option is defined, then the Console Driver is
+initialized during system initialization.
- The
+.. rubric:: NOTES:
- * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
+The Console Driver is responsible for providing the :file:`/dev/console`
+device file. This device is used to initialize the standard input, output,
+and error file descriptors.
- * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`, and
+BSPs should be constructed in a manner that allows :c:func:`printk` to work
+properly without the need for the Console Driver to be configured.
- * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`
+The
- configuration options are mutually exclusive.
+* ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
+
+* :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`, and
+
+* :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`
+
+configuration options are mutually exclusive.
.. Generated from spec:/acfg/if/appl-needs-framebuffer-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER:
@@ -213,29 +263,38 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
-----------------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- In case this configuration option is defined, then the Frame Buffer Driver is
- initialized during system initialization.
+In case this configuration option is defined, then the Frame Buffer Driver is
+initialized during system initialization.
-NOTES:
- Most BSPs do not include support for a Frame Buffer Driver. This is
- because many boards do not include the required hardware.
+.. rubric:: NOTES:
- If this option is defined and the BSP does not have this device driver, then
- the user will get a link time error for an undefined symbol.
+Most BSPs do not include support for a Frame Buffer Driver. This is
+because many boards do not include the required hardware.
+
+If this option is defined and the BSP does not have this device driver, then
+the user will get a link time error for an undefined symbol.
.. Generated from spec:/acfg/if/appl-needs-ide-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER:
@@ -243,28 +302,37 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
--------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the IDE Driver is
- initialized during system initialization.
+If this configuration option is undefined, then the described feature is not
+enabled.
-NOTES:
- Most BSPs do not include support for an IDE Driver.
+.. rubric:: DESCRIPTION:
- If this option is defined and the BSP does not have this device driver, then
- the user will get a link time error for an undefined symbol.
+In case this configuration option is defined, then the IDE Driver is
+initialized during system initialization.
+
+.. rubric:: NOTES:
+
+Most BSPs do not include support for an IDE Driver.
+
+If this option is defined and the BSP does not have this device driver, then
+the user will get a link time error for an undefined symbol.
.. Generated from spec:/acfg/if/appl-needs-null-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
.. index:: /dev/null
@@ -273,25 +341,34 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
---------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- In case this configuration option is defined, then the :file:`/dev/null`
- Driver is initialized during system initialization.
+In case this configuration option is defined, then the :file:`/dev/null`
+Driver is initialized during system initialization.
-NOTES:
- This device driver is supported by all BSPs.
+.. rubric:: NOTES:
+
+This device driver is supported by all BSPs.
.. Generated from spec:/acfg/if/appl-needs-rtc-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER:
@@ -299,29 +376,38 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
--------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the Real-Time Clock Driver
- is initialized during system initialization.
+If this configuration option is undefined, then the described feature is not
+enabled.
-NOTES:
- Most BSPs do not include support for a real-time clock (RTC). This is because
- many boards do not include the required hardware.
+.. rubric:: DESCRIPTION:
- If this is defined and the BSP does not have this device driver, then the
- user will get a link time error for an undefined symbol.
+In case this configuration option is defined, then the Real-Time Clock Driver
+is initialized during system initialization.
+
+.. rubric:: NOTES:
+
+Most BSPs do not include support for a real-time clock (RTC). This is because
+many boards do not include the required hardware.
+
+If this is defined and the BSP does not have this device driver, then the
+user will get a link time error for an undefined symbol.
.. Generated from spec:/acfg/if/appl-needs-simple-console-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER:
@@ -329,44 +415,53 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
-------------------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- In case this configuration option is defined, then the Simple Console Driver
- is initialized during system initialization.
+In case this configuration option is defined, then the Simple Console Driver
+is initialized during system initialization.
-NOTES:
- This device driver is responsible for providing the :file:`/dev/console`
- device file. This device is used to initialize the standard input, output,
- and error file descriptors.
+.. rubric:: NOTES:
- This device driver reads via :c:func:`getchark`.
+This device driver is responsible for providing the :file:`/dev/console`
+device file. This device is used to initialize the standard input, output,
+and error file descriptors.
- This device driver writes via :c:func:`rtems_putc`.
+This device driver reads via :c:func:`getchark`.
- The Termios framework is not used. There is no support to change device
- settings, e.g. baud, stop bits, parity, etc.
+This device driver writes via :c:func:`rtems_putc`.
- The
+The Termios framework is not used. There is no support to change device
+settings, e.g. baud, stop bits, parity, etc.
- * :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`,
+The
- * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
+* :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`,
- * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`
+* ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
- configuration options are mutually exclusive.
+* :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`
+
+configuration options are mutually exclusive.
.. Generated from spec:/acfg/if/appl-needs-simple-task-console-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER:
@@ -374,53 +469,62 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
------------------------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: OPTION TYPE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+This configuration option is a boolean feature define.
-DESCRIPTION:
- In case this configuration option is defined, then the Simple Task Console
- Driver is initialized during system initialization.
+.. rubric:: DEFAULT CONFIGURATION:
-NOTES:
- This device driver is responsible for providing the :file:`/dev/console`
- device file. This device is used to initialize the standard input, output,
- and error file descriptors.
+If this configuration option is undefined, then the described feature is not
+enabled.
- This device driver reads via :c:func:`getchark`.
+.. rubric:: DESCRIPTION:
- This device driver writes into a write buffer. The count of characters
- written into the write buffer is returned. It might be less than the
- requested count, in case the write buffer is full. The write is
- non-blocking and may be called from interrupt context. A dedicated task
- reads from the write buffer and outputs the characters via
- :c:func:`rtems_putc`. This task runs with the least important priority.
- The write buffer size is 2047 characters and it is not configurable.
+In case this configuration option is defined, then the Simple Task Console
+Driver is initialized during system initialization.
- Use ``fsync( STDOUT_FILENO )`` or ``fdatasync( STDOUT_FILENO )`` to drain the
- write buffer.
+.. rubric:: NOTES:
- The Termios framework is not used. There is no support to change device
- settings, e.g. baud, stop bits, parity, etc.
+This device driver is responsible for providing the :file:`/dev/console`
+device file. This device is used to initialize the standard input, output,
+and error file descriptors.
- The
+This device driver reads via :c:func:`getchark`.
- * :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`,
+This device driver writes into a write buffer. The count of characters
+written into the write buffer is returned. It might be less than the
+requested count, in case the write buffer is full. The write is
+non-blocking and may be called from interrupt context. A dedicated task
+reads from the write buffer and outputs the characters via
+:c:func:`rtems_putc`. This task runs with the least important priority.
+The write buffer size is 2047 characters and it is not configurable.
- * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`, and
+Use ``fsync( STDOUT_FILENO )`` or ``fdatasync( STDOUT_FILENO )`` to drain the
+write buffer.
- * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
+The Termios framework is not used. There is no support to change device
+settings, e.g. baud, stop bits, parity, etc.
- configuration options are mutually exclusive.
+The
+
+* :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`,
+
+* :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`, and
+
+* ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
+
+configuration options are mutually exclusive.
.. Generated from spec:/acfg/if/appl-needs-stub-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER:
@@ -428,26 +532,35 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
---------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- In case this configuration option is defined, then the Stub Driver is
- initialized during system initialization.
+In case this configuration option is defined, then the Stub Driver is
+initialized during system initialization.
-NOTES:
- This device driver simply provides entry points that return successful and
- is primarily a test fixture. It is supported by all BSPs.
+.. rubric:: NOTES:
+
+This device driver simply provides entry points that return successful and
+is primarily a test fixture. It is supported by all BSPs.
.. Generated from spec:/acfg/if/appl-needs-timer-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER:
@@ -455,36 +568,45 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
----------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the Benchmark Timer Driver is
- initialized during system initialization.
+If this configuration option is undefined, then the described feature is not
+enabled.
-NOTES:
- The Benchmark Timer Driver is intended for the benchmark tests of the RTEMS
- Testsuite. Applications should not use this driver.
+.. rubric:: DESCRIPTION:
- The application shall define exactly one of the following configuration options
+In case this configuration option is defined, then the Benchmark Timer Driver is
+initialized during system initialization.
- * :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`,
+.. rubric:: NOTES:
- * :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`, or
+The Benchmark Timer Driver is intended for the benchmark tests of the RTEMS
+Testsuite. Applications should not use this driver.
- * ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``,
+The application shall define exactly one of the following configuration options
- otherwise a compile time error will occur.
+* :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`,
+
+* :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`, or
+
+* ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``,
+
+otherwise a compile time error will occur.
.. Generated from spec:/acfg/if/appl-needs-watchdog-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
.. _CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER:
@@ -492,29 +614,38 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
-------------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- In case this configuration option is defined, then the Watchdog Driver is
- initialized during system initialization.
+In case this configuration option is defined, then the Watchdog Driver is
+initialized during system initialization.
-NOTES:
- Most BSPs do not include support for a watchdog device driver. This is
- because many boards do not include the required hardware.
+.. rubric:: NOTES:
- If this is defined and the BSP does not have this device driver, then the
- user will get a link time error for an undefined symbol.
+Most BSPs do not include support for a watchdog device driver. This is
+because many boards do not include the required hardware.
+
+If this is defined and the BSP does not have this device driver, then the
+user will get a link time error for an undefined symbol.
.. Generated from spec:/acfg/if/appl-needs-zero-driver
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
.. index:: /dev/zero
@@ -523,25 +654,34 @@ NOTES:
CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
---------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER``
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: OPTION TYPE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+This configuration option is a boolean feature define.
-DESCRIPTION:
- In case this configuration option is defined, then the :file:`/dev/zero`
- Driver is initialized during system initialization.
+.. rubric:: DEFAULT CONFIGURATION:
-NOTES:
- This device driver is supported by all BSPs.
+If this configuration option is undefined, then the described feature is not
+enabled.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the :file:`/dev/zero`
+Driver is initialized during system initialization.
+
+.. rubric:: NOTES:
+
+This device driver is supported by all BSPs.
.. Generated from spec:/acfg/if/appl-prerequisite-drivers
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
.. _CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS:
@@ -549,33 +689,43 @@ NOTES:
CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
------------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an initializer define.
-OPTION TYPE:
- This configuration option is an initializer define.
+.. rubric:: DEFAULT VALUE:
-DEFAULT VALUE:
- The default value is the empty list.
+The default value is the empty list.
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a list of initializers for
- structures of type :c:type:`rtems_driver_address_table`.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- The value of this configuration option is used to initialize the Device
- Driver Table.
+The value of this configuration option is used to initialize the Device
+Driver Table.
-NOTES:
- The value of this configuration option is placed after the entries defined by
- :ref:`CONFIGURE_BSP_PREREQUISITE_DRIVERS` and before all other device driver
- configuration options.
+.. rubric:: NOTES:
- See :ref:`CONFIGURE_APPLICATION_EXTRA_DRIVERS` for an alternative placement
- of application device driver initializers.
+The value of this configuration option is placed after the entries defined by
+:ref:`CONFIGURE_BSP_PREREQUISITE_DRIVERS` and before all other device driver
+configuration options.
+
+See :ref:`CONFIGURE_APPLICATION_EXTRA_DRIVERS` for an alternative placement
+of application device driver initializers.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a list of initializers for
+structures of type :c:type:`rtems_driver_address_table`.
.. Generated from spec:/acfg/if/ata-driver-task-priority
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_ATA_DRIVER_TASK_PRIORITY
.. _CONFIGURE_ATA_DRIVER_TASK_PRIORITY:
@@ -583,29 +733,78 @@ NOTES:
CONFIGURE_ATA_DRIVER_TASK_PRIORITY
----------------------------------
-CONSTANT:
- ``CONFIGURE_ATA_DRIVER_TASK_PRIORITY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_ATA_DRIVER_TASK_PRIORITY``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 140.
+
+.. rubric:: DESCRIPTION:
+
+The value of this configuration option defines the ATA task priority.
+
+.. rubric:: NOTES:
+
+This configuration option is only evaluated if the configuration option
+:ref:`CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER` is defined.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a valid Classic API task
+priority. The set of valid task priorities depends on the scheduler
+configuration.
+
+.. Generated from spec:/acfg/if/exception-to-signal-mapping
+
+.. raw:: latex
-OPTION TYPE:
- This configuration option is an integer define.
+ \clearpage
-DEFAULT VALUE:
- The default value is 140.
+.. index:: CONFIGURE_EXCEPTION_TO_SIGNAL_MAPPING
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a valid Classic API task
- priority. The set of valid task priorities depends on the scheduler
- configuration.
+.. _CONFIGURE_EXCEPTION_TO_SIGNAL_MAPPING:
-DESCRIPTION:
- The value of this configuration option defines the ATA task priority.
+CONFIGURE_EXCEPTION_TO_SIGNAL_MAPPING
+-------------------------------------
-NOTES:
- This configuration option is only evaluated if the configuration option
- :ref:`CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER` is defined.
+.. rubric:: CONSTANT:
+
+``CONFIGURE_EXCEPTION_TO_SIGNAL_MAPPING``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the machine exception to
+POSIX signal mapping is configured during system initialization.
+
+.. rubric:: NOTES:
+
+This device driver is responsible for setting up a mapping from machine
+exceptions to POSIX signals so that applications may consume them and alter
+task execution as necessary.
+
+This is especially useful for applications written in Ada or C++.
.. Generated from spec:/acfg/if/max-drivers
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_DRIVERS
.. _CONFIGURE_MAXIMUM_DRIVERS:
@@ -613,69 +812,74 @@ NOTES:
CONFIGURE_MAXIMUM_DRIVERS
-------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_DRIVERS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_DRIVERS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+This is computed by default, and is set to the number of statically
+configured device drivers configured using the following configuration
+options:
+
+* :ref:`CONFIGURE_APPLICATION_EXTRA_DRIVERS`
-OPTION TYPE:
- This configuration option is an integer define.
+* :ref:`CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER`
-DEFAULT VALUE:
- This is computed by default, and is set to the number of statically
- configured device drivers configured using the following configuration
- options:
+* :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_EXTRA_DRIVERS`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_LIBBLOCK`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_LIBBLOCK`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`
+* :ref:`CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER`
+* :ref:`CONFIGURE_BSP_PREREQUISITE_DRIVERS`
- * :ref:`CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER`
+.. rubric:: DESCRIPTION:
- * :ref:`CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`
+The value of this configuration option defines the number of device drivers.
- * :ref:`CONFIGURE_BSP_PREREQUISITE_DRIVERS`
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+If the application will dynamically install device drivers, then the
+configuration option value shall be larger than the number of statically
+configured device drivers.
- * It shall be less than or equal to `SIZE_MAX
- <https://en.cppreference.com/w/c/types/limits>`_.
+.. rubric:: CONSTRAINTS:
- * It shall be greater than or equal than the number of statically
- configured device drivers.
+The following constraints apply to this configuration option:
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+* The value of the configuration option shall be less than or equal to
+ `SIZE_MAX <https://en.cppreference.com/w/c/types/limits>`_.
-DESCRIPTION:
- The value of this configuration option defines the number of device drivers.
+* The value of the configuration option shall be greater than or equal than the
+ number of statically configured device drivers.
-NOTES:
- If the application will dynamically install device drivers, then the
- configuration option value shall be larger than the number of statically
- configured device drivers.
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
diff --git a/c-user/config/event-record.rst b/c-user/config/event-record.rst
index fa1d011..31a4fa9 100644
--- a/c-user/config/event-record.rst
+++ b/c-user/config/event-record.rst
@@ -26,6 +26,10 @@ This section describes configuration options related to the event recording.
.. Generated from spec:/acfg/if/record-extensions-enabled
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_RECORD_EXTENSIONS_ENABLED
.. _CONFIGURE_RECORD_EXTENSIONS_ENABLED:
@@ -33,31 +37,40 @@ This section describes configuration options related to the event recording.
CONFIGURE_RECORD_EXTENSIONS_ENABLED
-----------------------------------
-CONSTANT:
- ``CONFIGURE_RECORD_EXTENSIONS_ENABLED``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_RECORD_EXTENSIONS_ENABLED``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case
+If this configuration option is undefined, then the described feature is not
+enabled.
- * this configuration option is defined
+.. rubric:: DESCRIPTION:
- * and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly defined,
+In case
- then the event record extensions are enabled.
+* this configuration option is defined
-NOTES:
- The record extensions capture thread create, start, restart, delete, switch,
- begin, exitted and terminate events.
+* and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly defined,
+
+then the event record extensions are enabled.
+
+.. rubric:: NOTES:
+
+The record extensions capture thread create, start, restart, delete, switch,
+begin, exitted and terminate events.
.. Generated from spec:/acfg/if/record-fatal-dump-base64
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_RECORD_FATAL_DUMP_BASE64
.. _CONFIGURE_RECORD_FATAL_DUMP_BASE64:
@@ -65,33 +78,42 @@ NOTES:
CONFIGURE_RECORD_FATAL_DUMP_BASE64
----------------------------------
-CONSTANT:
- ``CONFIGURE_RECORD_FATAL_DUMP_BASE64``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_RECORD_FATAL_DUMP_BASE64``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DESCRIPTION:
- In case
+.. rubric:: DESCRIPTION:
- * this configuration option is defined
+In case
- * and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly defined,
+* this configuration option is defined
- * and :ref:`CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB` is undefined,
+* and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly defined,
- then the event records are dumped in Base64 encoding in a fatal error
- extension (see :ref:`Terminate`).
+* and :ref:`CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB` is undefined,
-NOTES:
- This extension can be used to produce crash dumps.
+then the event records are dumped in Base64 encoding in a fatal error
+extension (see :ref:`Terminate`).
+
+.. rubric:: NOTES:
+
+This extension can be used to produce crash dumps.
.. Generated from spec:/acfg/if/record-fatal-dump-base64-zlib
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB
.. _CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB:
@@ -99,32 +121,41 @@ NOTES:
CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB
---------------------------------------
-CONSTANT:
- ``CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DESCRIPTION:
- In case
+.. rubric:: DESCRIPTION:
- * this configuration option is defined
+In case
- * and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly defined,
+* this configuration option is defined
- then the event records are compressed by zlib and dumped in Base64 encoding
- in a fatal error extension (see :ref:`Terminate`).
+* and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly defined,
-NOTES:
- The zlib compression needs about 512KiB of RAM. This extension can be used
- to produce crash dumps.
+then the event records are compressed by zlib and dumped in Base64 encoding
+in a fatal error extension (see :ref:`Terminate`).
+
+.. rubric:: NOTES:
+
+The zlib compression needs about 512KiB of RAM. This extension can be used
+to produce crash dumps.
.. Generated from spec:/acfg/if/record-per-processor-items
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
.. _CONFIGURE_RECORD_PER_PROCESSOR_ITEMS:
@@ -132,35 +163,40 @@ NOTES:
CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
------------------------------------
-CONSTANT:
- ``CONFIGURE_RECORD_PER_PROCESSOR_ITEMS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_RECORD_PER_PROCESSOR_ITEMS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 0.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an integer define.
+The value of this configuration option defines the event record item count
+per processor.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The event record buffers are statically allocated for each configured
+processor (:ref:`CONFIGURE_MAXIMUM_PROCESSORS`). If the value of this
+configuration option is zero, then nothing is allocated.
- * It shall be greater than or equal to 16.
+.. rubric:: CONSTRAINTS:
- * It shall be less than or equal to `SIZE_MAX
- <https://en.cppreference.com/w/c/types/limits>`_.
+The following constraints apply to this configuration option:
- * It shall be a power of two.
+* The value of the configuration option shall be greater than or equal to 16.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+* The value of the configuration option shall be less than or equal to
+ `SIZE_MAX <https://en.cppreference.com/w/c/types/limits>`_.
-DESCRIPTION:
- The value of this configuration option defines the event record item count
- per processor.
+* The value of the configuration option shall be a power of two.
-NOTES:
- The event record buffers are statically allocated for each configured
- processor (:ref:`CONFIGURE_MAXIMUM_PROCESSORS`). If the value of this
- configuration option is zero, then nothing is allocated.
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
diff --git a/c-user/config/filesystem.rst b/c-user/config/filesystem.rst
index 05ca826..6e053f2 100644
--- a/c-user/config/filesystem.rst
+++ b/c-user/config/filesystem.rst
@@ -67,6 +67,10 @@ configuration options:
.. Generated from spec:/acfg/if/appl-disable-filesystem
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
.. _CONFIGURE_APPLICATION_DISABLE_FILESYSTEM:
@@ -74,28 +78,37 @@ configuration options:
CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
----------------------------------------
-CONSTANT:
- ``CONFIGURE_APPLICATION_DISABLE_FILESYSTEM``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_APPLICATION_DISABLE_FILESYSTEM``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then a base filesystem and the
- configured filesystems are initialized during system initialization.
+If this configuration option is undefined, then a base filesystem and the
+configured filesystems are initialized during system initialization.
-DESCRIPTION:
- In case this configuration option is defined, then **no base filesystem** is
- initialized during system initialization and **no filesystems** are
- configured.
+.. rubric:: DESCRIPTION:
-NOTES:
- Filesystems shall be initialized to support file descriptor based device
- drivers and basic input/output functions such as :c:func:`printf`.
- Filesystems can be disabled to reduce the memory footprint of an application.
+In case this configuration option is defined, then **no base filesystem** is
+initialized during system initialization and **no filesystems** are
+configured.
+
+.. rubric:: NOTES:
+
+Filesystems shall be initialized to support file descriptor based device
+drivers and basic input/output functions such as :c:func:`printf`.
+Filesystems can be disabled to reduce the memory footprint of an application.
.. Generated from spec:/acfg/if/filesystem-all
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_FILESYSTEM_ALL
.. _CONFIGURE_FILESYSTEM_ALL:
@@ -103,39 +116,44 @@ NOTES:
CONFIGURE_FILESYSTEM_ALL
------------------------
-CONSTANT:
- ``CONFIGURE_FILESYSTEM_ALL``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_FILESYSTEM_ALL``
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: OPTION TYPE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+This configuration option is a boolean feature define.
-DESCRIPTION:
- In case this configuration option is defined, then the following
- configuration options will be defined as well
+.. rubric:: DEFAULT CONFIGURATION:
- * :ref:`CONFIGURE_FILESYSTEM_DOSFS`,
+If this configuration option is undefined, then the described feature is not
+enabled.
- * :ref:`CONFIGURE_FILESYSTEM_FTPFS`,
+.. rubric:: DESCRIPTION:
- * :ref:`CONFIGURE_FILESYSTEM_IMFS`,
+In case this configuration option is defined, then the following
+configuration options will be defined as well
- * :ref:`CONFIGURE_FILESYSTEM_JFFS2`,
+* :ref:`CONFIGURE_FILESYSTEM_DOSFS`,
- * :ref:`CONFIGURE_FILESYSTEM_NFS`,
+* :ref:`CONFIGURE_FILESYSTEM_FTPFS`,
- * :ref:`CONFIGURE_FILESYSTEM_RFS`, and
+* :ref:`CONFIGURE_FILESYSTEM_IMFS`,
- * :ref:`CONFIGURE_FILESYSTEM_TFTPFS`.
+* :ref:`CONFIGURE_FILESYSTEM_JFFS2`,
-NOTES:
- None.
+* :ref:`CONFIGURE_FILESYSTEM_NFS`,
+
+* :ref:`CONFIGURE_FILESYSTEM_RFS`, and
+
+* :ref:`CONFIGURE_FILESYSTEM_TFTPFS`.
.. Generated from spec:/acfg/if/filesystem-dosfs
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_FILESYSTEM_DOSFS
.. _CONFIGURE_FILESYSTEM_DOSFS:
@@ -143,27 +161,36 @@ NOTES:
CONFIGURE_FILESYSTEM_DOSFS
--------------------------
-CONSTANT:
- ``CONFIGURE_FILESYSTEM_DOSFS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_FILESYSTEM_DOSFS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DESCRIPTION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+In case this configuration option is defined, then the DOS (FAT) filesystem
+is registered, so that instances of this filesystem can be mounted by the
+application.
-DESCRIPTION:
- In case this configuration option is defined, then the DOS (FAT) filesystem
- is registered, so that instances of this filesystem can be mounted by the
- application.
+.. rubric:: NOTES:
-NOTES:
- This filesystem requires a Block Device Cache configuration, see
- :ref:`CONFIGURE_APPLICATION_NEEDS_LIBBLOCK`.
+This filesystem requires a Block Device Cache configuration, see
+:ref:`CONFIGURE_APPLICATION_NEEDS_LIBBLOCK`.
.. Generated from spec:/acfg/if/filesystem-ftpfs
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_FILESYSTEM_FTPFS
.. _CONFIGURE_FILESYSTEM_FTPFS:
@@ -171,26 +198,31 @@ NOTES:
CONFIGURE_FILESYSTEM_FTPFS
--------------------------
-CONSTANT:
- ``CONFIGURE_FILESYSTEM_FTPFS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_FILESYSTEM_FTPFS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DESCRIPTION:
- In case this configuration option is defined, then the FTP filesystem (FTP
- client) is registered, so that instances of this filesystem
- can be mounted by the application.
+.. rubric:: DESCRIPTION:
-NOTES:
- None.
+In case this configuration option is defined, then the FTP filesystem (FTP
+client) is registered, so that instances of this filesystem
+can be mounted by the application.
.. Generated from spec:/acfg/if/filesystem-imfs
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_FILESYSTEM_IMFS
.. _CONFIGURE_FILESYSTEM_IMFS:
@@ -198,28 +230,37 @@ NOTES:
CONFIGURE_FILESYSTEM_IMFS
-------------------------
-CONSTANT:
- ``CONFIGURE_FILESYSTEM_IMFS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_FILESYSTEM_IMFS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DESCRIPTION:
- In case this configuration option is defined, then the In-Memory Filesystem
- (IMFS) is registered, so that instances of this filesystem can be mounted by
- the application.
+.. rubric:: DESCRIPTION:
-NOTES:
- Applications will rarely need this configuration option. This configuration
- option is intended for test programs. You do not need to define this
- configuration option for the base filesystem (also known as root filesystem).
+In case this configuration option is defined, then the In-Memory Filesystem
+(IMFS) is registered, so that instances of this filesystem can be mounted by
+the application.
+
+.. rubric:: NOTES:
+
+Applications will rarely need this configuration option. This configuration
+option is intended for test programs. You do not need to define this
+configuration option for the base filesystem (also known as root filesystem).
.. Generated from spec:/acfg/if/filesystem-jffs2
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_FILESYSTEM_JFFS2
.. _CONFIGURE_FILESYSTEM_JFFS2:
@@ -227,26 +268,31 @@ NOTES:
CONFIGURE_FILESYSTEM_JFFS2
--------------------------
-CONSTANT:
- ``CONFIGURE_FILESYSTEM_JFFS2``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_FILESYSTEM_JFFS2``
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: OPTION TYPE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+This configuration option is a boolean feature define.
-DESCRIPTION:
- In case this configuration option is defined, then the JFFS2 filesystem
- is registered, so that instances of this filesystem can be mounted by the
- application.
+.. rubric:: DEFAULT CONFIGURATION:
-NOTES:
- None.
+If this configuration option is undefined, then the described feature is not
+enabled.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the JFFS2 filesystem
+is registered, so that instances of this filesystem can be mounted by the
+application.
.. Generated from spec:/acfg/if/filesystem-nfs
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_FILESYSTEM_NFS
.. _CONFIGURE_FILESYSTEM_NFS:
@@ -254,26 +300,31 @@ NOTES:
CONFIGURE_FILESYSTEM_NFS
------------------------
-CONSTANT:
- ``CONFIGURE_FILESYSTEM_NFS``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+``CONFIGURE_FILESYSTEM_NFS``
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: OPTION TYPE:
-DESCRIPTION:
- In case this configuration option is defined, then the Network Filesystem
- (NFS) client is registered, so that instances of this filesystem can be
- mounted by the application.
+This configuration option is a boolean feature define.
-NOTES:
- None.
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the Network Filesystem
+(NFS) client is registered, so that instances of this filesystem can be
+mounted by the application.
.. Generated from spec:/acfg/if/filesystem-rfs
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_FILESYSTEM_RFS
.. _CONFIGURE_FILESYSTEM_RFS:
@@ -281,27 +332,36 @@ NOTES:
CONFIGURE_FILESYSTEM_RFS
------------------------
-CONSTANT:
- ``CONFIGURE_FILESYSTEM_RFS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_FILESYSTEM_RFS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DESCRIPTION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+In case this configuration option is defined, then the RTEMS Filesystem (RFS)
+is registered, so that instances of this filesystem can be mounted by the
+application.
-DESCRIPTION:
- In case this configuration option is defined, then the RTEMS Filesystem (RFS)
- is registered, so that instances of this filesystem can be mounted by the
- application.
+.. rubric:: NOTES:
-NOTES:
- This filesystem requires a Block Device Cache configuration, see
- :ref:`CONFIGURE_APPLICATION_NEEDS_LIBBLOCK`.
+This filesystem requires a Block Device Cache configuration, see
+:ref:`CONFIGURE_APPLICATION_NEEDS_LIBBLOCK`.
.. Generated from spec:/acfg/if/filesystem-tftpfs
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_FILESYSTEM_TFTPFS
.. _CONFIGURE_FILESYSTEM_TFTPFS:
@@ -309,26 +369,31 @@ NOTES:
CONFIGURE_FILESYSTEM_TFTPFS
---------------------------
-CONSTANT:
- ``CONFIGURE_FILESYSTEM_TFTPFS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_FILESYSTEM_TFTPFS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DESCRIPTION:
- In case this configuration option is defined, then the TFTP filesystem (TFTP
- client) is registered, so that instances of this filesystem can be mounted by
- the application.
+.. rubric:: DESCRIPTION:
-NOTES:
- None.
+In case this configuration option is defined, then the TFTP filesystem (TFTP
+client) is registered, so that instances of this filesystem can be mounted by
+the application.
.. Generated from spec:/acfg/if/imfs-disable-chmod
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_CHMOD
.. _CONFIGURE_IMFS_DISABLE_CHMOD:
@@ -336,25 +401,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_CHMOD
----------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_CHMOD``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_DISABLE_CHMOD``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports
- changing the mode of files.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support changing the mode of files (no support for :c:func:`chmod`).
+If this configuration option is undefined, then the root IMFS supports
+changing the mode of files.
-NOTES:
- None.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support changing the mode of files (no support for :c:func:`chmod`).
.. Generated from spec:/acfg/if/imfs-disable-chown
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_CHOWN
.. _CONFIGURE_IMFS_DISABLE_CHOWN:
@@ -362,25 +432,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_CHOWN
----------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_CHOWN``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_DISABLE_CHOWN``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports
- changing the ownership of files.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support changing the ownership of files (no support for :c:func:`chown`).
+If this configuration option is undefined, then the root IMFS supports
+changing the ownership of files.
-NOTES:
- None.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support changing the ownership of files (no support for :c:func:`chown`).
.. Generated from spec:/acfg/if/imfs-disable-link
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_LINK
.. _CONFIGURE_IMFS_DISABLE_LINK:
@@ -388,25 +463,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_LINK
---------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_LINK``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_DISABLE_LINK``
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: OPTION TYPE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports hard
- links.
+This configuration option is a boolean feature define.
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support hard links (no support for :c:func:`link`).
+.. rubric:: DEFAULT CONFIGURATION:
-NOTES:
- None.
+If this configuration option is undefined, then the root IMFS supports hard
+links.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support hard links (no support for :c:func:`link`).
.. Generated from spec:/acfg/if/imfs-disable-mknod
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_MKNOD
.. _CONFIGURE_IMFS_DISABLE_MKNOD:
@@ -414,25 +494,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_MKNOD
----------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_MKNOD``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_DISABLE_MKNOD``
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: OPTION TYPE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports making
- files.
+This configuration option is a boolean feature define.
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support making files (no support for :c:func:`mknod`).
+.. rubric:: DEFAULT CONFIGURATION:
-NOTES:
- None.
+If this configuration option is undefined, then the root IMFS supports making
+files.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support making files (no support for :c:func:`mknod`).
.. Generated from spec:/acfg/if/imfs-disable-mknod-device
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE
.. _CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE:
@@ -440,25 +525,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE
-----------------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+``CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE``
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports making
- device files.
+.. rubric:: OPTION TYPE:
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support making device files.
+This configuration option is a boolean feature define.
-NOTES:
- None.
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the root IMFS supports making
+device files.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support making device files.
.. Generated from spec:/acfg/if/imfs-disable-mknod-file
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_FILE
.. _CONFIGURE_IMFS_DISABLE_MKNOD_FILE:
@@ -466,25 +556,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_MKNOD_FILE
---------------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_MKNOD_FILE``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+``CONFIGURE_IMFS_DISABLE_MKNOD_FILE``
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports making
- regular files.
+.. rubric:: OPTION TYPE:
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support making regular files.
+This configuration option is a boolean feature define.
-NOTES:
- None.
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the root IMFS supports making
+regular files.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support making regular files.
.. Generated from spec:/acfg/if/imfs-disable-mount
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_MOUNT
.. _CONFIGURE_IMFS_DISABLE_MOUNT:
@@ -492,26 +587,31 @@ NOTES:
CONFIGURE_IMFS_DISABLE_MOUNT
----------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_MOUNT``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+``CONFIGURE_IMFS_DISABLE_MOUNT``
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports
- mounting other filesystems.
+.. rubric:: OPTION TYPE:
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support mounting other filesystems (no support for
- :c:func:`mount`).
+This configuration option is a boolean feature define.
-NOTES:
- None.
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the root IMFS supports
+mounting other filesystems.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support mounting other filesystems (no support for
+:c:func:`mount`).
.. Generated from spec:/acfg/if/imfs-disable-readdir
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_READDIR
.. _CONFIGURE_IMFS_DISABLE_READDIR:
@@ -519,26 +619,31 @@ NOTES:
CONFIGURE_IMFS_DISABLE_READDIR
------------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_READDIR``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+``CONFIGURE_IMFS_DISABLE_READDIR``
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports
- reading directories.
+.. rubric:: OPTION TYPE:
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support reading directories (no support for :c:func:`readdir`). It is
- still possible to open files in a directory.
+This configuration option is a boolean feature define.
-NOTES:
- None.
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the root IMFS supports
+reading directories.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support reading directories (no support for :c:func:`readdir`). It is
+still possible to open files in a directory.
.. Generated from spec:/acfg/if/imfs-disable-readlink
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_READLINK
.. _CONFIGURE_IMFS_DISABLE_READLINK:
@@ -546,25 +651,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_READLINK
-------------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_READLINK``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_DISABLE_READLINK``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports
- reading symbolic links.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support reading symbolic links (no support for :c:func:`readlink`).
+If this configuration option is undefined, then the root IMFS supports
+reading symbolic links.
-NOTES:
- None.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support reading symbolic links (no support for :c:func:`readlink`).
.. Generated from spec:/acfg/if/imfs-disable-rename
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_RENAME
.. _CONFIGURE_IMFS_DISABLE_RENAME:
@@ -572,25 +682,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_RENAME
-----------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_RENAME``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_DISABLE_RENAME``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports
- renaming files.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support renaming files (no support for :c:func:`rename`).
+If this configuration option is undefined, then the root IMFS supports
+renaming files.
-NOTES:
- None.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support renaming files (no support for :c:func:`rename`).
.. Generated from spec:/acfg/if/imfs-disable-rmnod
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_RMNOD
.. _CONFIGURE_IMFS_DISABLE_RMNOD:
@@ -598,25 +713,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_RMNOD
----------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_RMNOD``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_DISABLE_RMNOD``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports
- removing files.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support removing files (no support for :c:func:`rmnod`).
+If this configuration option is undefined, then the root IMFS supports
+removing files.
-NOTES:
- None.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the root IMFS does not
+support removing files (no support for :c:func:`rmnod`).
.. Generated from spec:/acfg/if/imfs-disable-symlink
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_SYMLINK
.. _CONFIGURE_IMFS_DISABLE_SYMLINK:
@@ -624,25 +744,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_SYMLINK
------------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_SYMLINK``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_DISABLE_SYMLINK``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports
- creating symbolic links.
+If this configuration option is undefined, then the root IMFS supports
+creating symbolic links.
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support creating symbolic links (no support for :c:func:`symlink`).
+.. rubric:: DESCRIPTION:
-NOTES:
- None.
+In case this configuration option is defined, then the root IMFS does not
+support creating symbolic links (no support for :c:func:`symlink`).
.. Generated from spec:/acfg/if/imfs-disable-unmount
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_UNMOUNT
.. _CONFIGURE_IMFS_DISABLE_UNMOUNT:
@@ -650,26 +775,31 @@ NOTES:
CONFIGURE_IMFS_DISABLE_UNMOUNT
------------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_UNMOUNT``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_DISABLE_UNMOUNT``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports
- unmounting other filesystems.
+If this configuration option is undefined, then the root IMFS supports
+unmounting other filesystems.
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support unmounting other filesystems (no support for
- :c:func:`unmount`).
+.. rubric:: DESCRIPTION:
-NOTES:
- None.
+In case this configuration option is defined, then the root IMFS does not
+support unmounting other filesystems (no support for
+:c:func:`unmount`).
.. Generated from spec:/acfg/if/imfs-disable-utime
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_DISABLE_UTIME
.. _CONFIGURE_IMFS_DISABLE_UTIME:
@@ -677,25 +807,30 @@ NOTES:
CONFIGURE_IMFS_DISABLE_UTIME
----------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_UTIME``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_DISABLE_UTIME``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS supports
- changing file times.
+If this configuration option is undefined, then the root IMFS supports
+changing file times.
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS does not
- support changing file times (no support for :c:func:`utime`).
+.. rubric:: DESCRIPTION:
-NOTES:
- None.
+In case this configuration option is defined, then the root IMFS does not
+support changing file times (no support for :c:func:`utime`).
.. Generated from spec:/acfg/if/imfs-enable-mkfifo
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_ENABLE_MKFIFO
.. _CONFIGURE_IMFS_ENABLE_MKFIFO:
@@ -703,25 +838,30 @@ NOTES:
CONFIGURE_IMFS_ENABLE_MKFIFO
----------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_ENABLE_MKFIFO``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_ENABLE_MKFIFO``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the root IMFS does not
- support making FIFOs (no support for :c:func:`mkfifo`).
+If this configuration option is undefined, then the root IMFS does not
+support making FIFOs (no support for :c:func:`mkfifo`).
-DESCRIPTION:
- In case this configuration option is defined, then the root IMFS supports
- making FIFOs.
+.. rubric:: DESCRIPTION:
-NOTES:
- None.
+In case this configuration option is defined, then the root IMFS supports
+making FIFOs.
.. Generated from spec:/acfg/if/imfs-memfile-bytes-per-block
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
.. _CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK:
@@ -729,52 +869,62 @@ NOTES:
CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
--------------------------------------
-CONSTANT:
- ``CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is 128.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be equal to 16, 32, 64, 128,
- 256, or 512.
+The default value is 128.
-DESCRIPTION:
- The value of this configuration option defines the block size for in-memory
- files managed by the IMFS.
+.. rubric:: DESCRIPTION:
-NOTES:
- The configured block size has two impacts. The first is the average amount of
- unused memory in the last block of each file. For example, when the block
- size is 512, on average one-half of the last block of each file will remain
- unused and the memory is wasted. In contrast, when the block size is 16, the
- average unused memory per file is only 8 bytes. However, it requires more
- allocations for the same size file and thus more overhead per block for the
- dynamic memory management.
+The value of this configuration option defines the block size for in-memory
+files managed by the IMFS.
- Second, the block size has an impact on the maximum size file that can be
- stored in the IMFS. With smaller block size, the maximum file size is
- correspondingly smaller. The following shows the maximum file size possible
- based on the configured block size:
+.. rubric:: NOTES:
- * when the block size is 16 bytes, the maximum file size is 1,328 bytes.
+The configured block size has two impacts. The first is the average amount of
+unused memory in the last block of each file. For example, when the block
+size is 512, on average one-half of the last block of each file will remain
+unused and the memory is wasted. In contrast, when the block size is 16, the
+average unused memory per file is only 8 bytes. However, it requires more
+allocations for the same size file and thus more overhead per block for the
+dynamic memory management.
- * when the block size is 32 bytes, the maximum file size is 18,656 bytes.
+Second, the block size has an impact on the maximum size file that can be
+stored in the IMFS. With smaller block size, the maximum file size is
+correspondingly smaller. The following shows the maximum file size possible
+based on the configured block size:
- * when the block size is 64 bytes, the maximum file size is 279,488 bytes.
+* when the block size is 16 bytes, the maximum file size is 1,328 bytes.
- * when the block size is 128 bytes, the maximum file size is 4,329,344 bytes.
+* when the block size is 32 bytes, the maximum file size is 18,656 bytes.
- * when the block size is 256 bytes, the maximum file size is 68,173,568 bytes.
+* when the block size is 64 bytes, the maximum file size is 279,488 bytes.
- * when the block size is 512 bytes, the maximum file size is 1,082,195,456
- bytes.
+* when the block size is 128 bytes, the maximum file size is 4,329,344 bytes.
+
+* when the block size is 256 bytes, the maximum file size is 68,173,568 bytes.
+
+* when the block size is 512 bytes, the maximum file size is 1,082,195,456
+ bytes.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be equal to 16, 32, 64, 128, 256,
+or 512.
.. Generated from spec:/acfg/if/use-devfs-as-base-filesystem
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
.. _CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM:
@@ -782,57 +932,66 @@ NOTES:
CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
--------------------------------------
-CONSTANT:
- ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DESCRIPTION:
- In case this configuration option is defined, then an IMFS with a reduced
- feature set will be the base filesystem (also known as root filesystem).
+.. rubric:: DESCRIPTION:
-NOTES:
- In case this configuration option is defined, then the following
- configuration options will be defined as well
+In case this configuration option is defined, then an IMFS with a reduced
+feature set will be the base filesystem (also known as root filesystem).
- * :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`,
+.. rubric:: NOTES:
- * :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`,
+In case this configuration option is defined, then the following
+configuration options will be defined as well
- * :ref:`CONFIGURE_IMFS_DISABLE_LINK`,
+* :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`,
- * :ref:`CONFIGURE_IMFS_DISABLE_MKNOD_FILE`,
+* :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`,
- * :ref:`CONFIGURE_IMFS_DISABLE_MOUNT`,
+* :ref:`CONFIGURE_IMFS_DISABLE_LINK`,
- * :ref:`CONFIGURE_IMFS_DISABLE_READDIR`,
+* :ref:`CONFIGURE_IMFS_DISABLE_MKNOD_FILE`,
- * :ref:`CONFIGURE_IMFS_DISABLE_READLINK`,
+* :ref:`CONFIGURE_IMFS_DISABLE_MOUNT`,
- * :ref:`CONFIGURE_IMFS_DISABLE_RENAME`,
+* :ref:`CONFIGURE_IMFS_DISABLE_READDIR`,
- * :ref:`CONFIGURE_IMFS_DISABLE_RMNOD`,
+* :ref:`CONFIGURE_IMFS_DISABLE_READLINK`,
- * :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`,
+* :ref:`CONFIGURE_IMFS_DISABLE_RENAME`,
- * :ref:`CONFIGURE_IMFS_DISABLE_UTIME`, and
+* :ref:`CONFIGURE_IMFS_DISABLE_RMNOD`,
- * :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`.
+* :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`,
- In addition, a simplified path evaluation is enabled. It allows only a look
- up of absolute paths.
+* :ref:`CONFIGURE_IMFS_DISABLE_UTIME`, and
- This configuration of the IMFS is basically a device-only filesystem. It is
- comparable in functionality to the pseudo-filesystem name space provided
- before RTEMS release 4.5.0.
+* :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`.
+
+In addition, a simplified path evaluation is enabled. It allows only a look
+up of absolute paths.
+
+This configuration of the IMFS is basically a device-only filesystem. It is
+comparable in functionality to the pseudo-filesystem name space provided
+before RTEMS release 4.5.0.
.. Generated from spec:/acfg/if/use-miniimfs-as-base-filesystem
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
.. _CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM:
@@ -840,36 +999,41 @@ NOTES:
CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
-----------------------------------------
-CONSTANT:
- ``CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DESCRIPTION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+In case this configuration option is defined, then an IMFS with a reduced
+feature set will be the base filesystem (also known as root filesystem).
-DESCRIPTION:
- In case this configuration option is defined, then an IMFS with a reduced
- feature set will be the base filesystem (also known as root filesystem).
+.. rubric:: NOTES:
-NOTES:
- In case this configuration option is defined, then the following
- configuration options will be defined as well
+In case this configuration option is defined, then the following
+configuration options will be defined as well
- * :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`,
+* :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`,
- * :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`,
+* :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`,
- * :ref:`CONFIGURE_IMFS_DISABLE_LINK`,
+* :ref:`CONFIGURE_IMFS_DISABLE_LINK`,
- * :ref:`CONFIGURE_IMFS_DISABLE_READLINK`,
+* :ref:`CONFIGURE_IMFS_DISABLE_READLINK`,
- * :ref:`CONFIGURE_IMFS_DISABLE_RENAME`,
+* :ref:`CONFIGURE_IMFS_DISABLE_RENAME`,
- * :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`,
+* :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`,
- * :ref:`CONFIGURE_IMFS_DISABLE_UTIME`, and
+* :ref:`CONFIGURE_IMFS_DISABLE_UTIME`, and
- * :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`.
+* :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`.
diff --git a/c-user/config/general.rst b/c-user/config/general.rst
index 1a43b03..a1f242a 100644
--- a/c-user/config/general.rst
+++ b/c-user/config/general.rst
@@ -27,6 +27,10 @@ This section describes general system configuration options.
.. Generated from spec:/acfg/if/dirty-memory
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_DIRTY_MEMORY
.. _CONFIGURE_DIRTY_MEMORY:
@@ -34,32 +38,41 @@ This section describes general system configuration options.
CONFIGURE_DIRTY_MEMORY
----------------------
-CONSTANT:
- ``CONFIGURE_DIRTY_MEMORY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_DIRTY_MEMORY``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- In case this configuration option is defined, then the memory areas used for
- the RTEMS Workspace and the C Program Heap are dirtied with a ``0xCF`` byte
- pattern during system initialization.
+In case this configuration option is defined, then the memory areas used for
+the RTEMS Workspace and the C Program Heap are dirtied with a ``0xCF`` byte
+pattern during system initialization.
-NOTES:
- Dirtying memory can add significantly to system initialization time. It may
- assist in finding code that incorrectly assumes the contents of free memory
- areas is cleared to zero during system initialization. In case
- :ref:`CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY` is also defined, then the
- memory is first dirtied and then zeroed.
+.. rubric:: NOTES:
- See also :ref:`CONFIGURE_MALLOC_DIRTY`.
+Dirtying memory can add significantly to system initialization time. It may
+assist in finding code that incorrectly assumes the contents of free memory
+areas is cleared to zero during system initialization. In case
+:ref:`CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY` is also defined, then the
+memory is first dirtied and then zeroed.
+
+See also :ref:`CONFIGURE_MALLOC_DIRTY`.
.. Generated from spec:/acfg/if/disable-newlib-reentrancy
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_DISABLE_NEWLIB_REENTRANCY
.. _CONFIGURE_DISABLE_NEWLIB_REENTRANCY:
@@ -67,28 +80,37 @@ NOTES:
CONFIGURE_DISABLE_NEWLIB_REENTRANCY
-----------------------------------
-CONSTANT:
- ``CONFIGURE_DISABLE_NEWLIB_REENTRANCY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_DISABLE_NEWLIB_REENTRANCY``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the Newlib reentrancy
- support per thread is disabled and a global reentrancy structure is used.
+If this configuration option is undefined, then the described feature is not
+enabled.
-NOTES:
- You can enable this option to reduce the size of the :term:`TCB`. Use this
- option with care, since it can lead to race conditions and undefined system
- behaviour. For example, :c:macro:`errno` is no longer a thread-local
- variable if this option is enabled.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the Newlib reentrancy
+support per thread is disabled and a global reentrancy structure is used.
+
+.. rubric:: NOTES:
+
+You can enable this option to reduce the size of the :term:`TCB`. Use this
+option with care, since it can lead to race conditions and undefined system
+behaviour. For example, :c:macro:`errno` is no longer a thread-local
+variable if this option is enabled.
.. Generated from spec:/acfg/if/executive-ram-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_EXECUTIVE_RAM_SIZE
.. _CONFIGURE_EXECUTIVE_RAM_SIZE:
@@ -96,40 +118,49 @@ NOTES:
CONFIGURE_EXECUTIVE_RAM_SIZE
----------------------------
-CONSTANT:
- ``CONFIGURE_EXECUTIVE_RAM_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_EXECUTIVE_RAM_SIZE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+If this configuration option is undefined, then the RTEMS Workspace and task
+stack space size is calculated by ``<rtems/confdefs.h>`` based on the values
+configuration options.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an integer define.
+The value of this configuration option defines the RTEMS Workspace size in
+bytes.
-DEFAULT VALUE:
- If this configuration option is undefined, then the RTEMS Workspace and task
- stack space size is calculated by ``<rtems/confdefs.h>`` based on the values
- configuration options.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This is an advanced configuration option. Use it only if you know exactly
+what you are doing.
- * It shall be greater than or equal to zero.
+.. rubric:: CONSTRAINTS:
- * It shall be less than or equal to `UINTPTR_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+The following constraints apply to this configuration option:
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+* The value of the configuration option shall be greater than or equal to zero.
-DESCRIPTION:
- The value of this configuration option defines the RTEMS Workspace size in
- bytes.
+* The value of the configuration option shall be less than or equal to
+ `UINTPTR_MAX <https://en.cppreference.com/w/c/types/integer>`_.
-NOTES:
- This is an advanced configuration option. Use it only if you know exactly
- what you are doing.
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
.. Generated from spec:/acfg/if/extra-task-stacks
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_EXTRA_TASK_STACKS
.. index:: memory for task tasks
@@ -138,37 +169,47 @@ NOTES:
CONFIGURE_EXTRA_TASK_STACKS
---------------------------
-CONSTANT:
- ``CONFIGURE_EXTRA_TASK_STACKS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_EXTRA_TASK_STACKS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is 0.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the number of bytes the
+applications wishes to add to the task stack requirements calculated by
+``<rtems/confdefs.h>``.
- * It shall be greater than or equal to zero.
+.. rubric:: NOTES:
- * It shall be small enough so that the task stack space calculation carried
- out by ``<rtems/confdefs.h>`` does not overflow an integer of type
- `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+This parameter is very important. If the application creates tasks with
+stacks larger then the minimum, then that memory is **not** accounted for by
+``<rtems/confdefs.h>``.
-DESCRIPTION:
- The value of this configuration option defines the number of bytes the
- applications wishes to add to the task stack requirements calculated by
- ``<rtems/confdefs.h>``.
+.. rubric:: CONSTRAINTS:
-NOTES:
- This parameter is very important. If the application creates tasks with
- stacks larger then the minimum, then that memory is **not** accounted for by
- ``<rtems/confdefs.h>``.
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/initial-extensions
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_INITIAL_EXTENSIONS
.. _CONFIGURE_INITIAL_EXTENSIONS:
@@ -176,30 +217,40 @@ NOTES:
CONFIGURE_INITIAL_EXTENSIONS
----------------------------
-CONSTANT:
- ``CONFIGURE_INITIAL_EXTENSIONS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_INITIAL_EXTENSIONS``
-OPTION TYPE:
- This configuration option is an initializer define.
+.. rubric:: OPTION TYPE:
-DEFAULT VALUE:
- The default value is the empty list.
+This configuration option is an initializer define.
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a list of initializers for
- structures of type :c:type:`rtems_extensions_table`.
+.. rubric:: DEFAULT VALUE:
-DESCRIPTION:
- The value of this configuration option is used to initialize the table of
- initial user extensions.
+The default value is the empty list.
-NOTES:
- The value of this configuration option is placed before the entries of
- :ref:`BSP_INITIAL_EXTENSION` and after the entries of all other initial
- user extensions.
+.. rubric:: DESCRIPTION:
+
+The value of this configuration option is used to initialize the table of
+initial user extensions.
+
+.. rubric:: NOTES:
+
+The value of this configuration option is placed before the entries of
+:ref:`BSP_INITIAL_EXTENSION` and after the entries of all other initial
+user extensions.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a list of initializers for
+structures of type :c:type:`rtems_extensions_table`.
.. Generated from spec:/acfg/if/interrupt-stack-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_INTERRUPT_STACK_SIZE
.. index:: interrupt stack size
@@ -208,54 +259,64 @@ NOTES:
CONFIGURE_INTERRUPT_STACK_SIZE
------------------------------
-CONSTANT:
- ``CONFIGURE_INTERRUPT_STACK_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_INTERRUPT_STACK_SIZE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is :ref:`BSP_INTERRUPT_STACK_SIZE` in case it is defined,
+otherwise the default value is :c:macro:`CPU_STACK_MINIMUM_SIZE`.
-DEFAULT VALUE:
- The default value is :ref:`BSP_INTERRUPT_STACK_SIZE` in case it is defined,
- otherwise the default value is :c:macro:`CPU_STACK_MINIMUM_SIZE`.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the size of an interrupt stack
+in bytes.
- * It shall be greater than or equal to a BSP-specific and
- application-specific minimum value.
+.. rubric:: NOTES:
- * It shall be small enough so that the interrupt stack area calculation
- carried out by ``<rtems/confdefs.h>`` does not overflow an integer of
- type `size_t <https://en.cppreference.com/w/c/types/size_t>`_.
+There is one interrupt stack available for each configured processor
+(:ref:`CONFIGURE_MAXIMUM_PROCESSORS`). The interrupt stack areas are
+statically allocated in a special linker section (``.rtemsstack.interrupt``).
+The placement of this linker section is BSP-specific.
- * It shall be aligned according to
- :c:macro:`CPU_INTERRUPT_STACK_ALIGNMENT`.
+Some BSPs use the interrupt stack as the initialization stack which is used
+to perform the sequential system initialization before the multithreading
+is started.
-DESCRIPTION:
- The value of this configuration option defines the size of an interrupt stack
- in bytes.
+The interrupt stacks are covered by the stack checker, see
+:ref:`CONFIGURE_STACK_CHECKER_ENABLED`. However, using a too small interrupt stack
+size may still result in undefined behaviour.
-NOTES:
- There is one interrupt stack available for each configured processor
- (:ref:`CONFIGURE_MAXIMUM_PROCESSORS`). The interrupt stack areas are
- statically allocated in a special linker section (``.rtemsstack.interrupt``).
- The placement of this linker section is BSP-specific.
+In releases before RTEMS 5.1 the default value was
+:ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE` instead of
+:c:macro:`CPU_STACK_MINIMUM_SIZE`.
- Some BSPs use the interrupt stack as the initialization stack which is used
- to perform the sequential system initialization before the multithreading
- is started.
+.. rubric:: CONSTRAINTS:
- The interrupt stacks are covered by the stack checker, see
- :ref:`CONFIGURE_STACK_CHECKER_ENABLED`. However, using a too small interrupt stack
- size may still result in undefined behaviour.
+The following constraints apply to this configuration option:
- In releases before RTEMS 5.1 the default value was
- :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE` instead of
- :c:macro:`CPU_STACK_MINIMUM_SIZE`.
+* The value of the configuration option shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
+
+* The value of the configuration option shall be small enough so that the
+ interrupt stack area calculation carried out by ``<rtems/confdefs.h>`` does
+ not overflow an integer of type `size_t
+ <https://en.cppreference.com/w/c/types/size_t>`_.
+
+* The value of the configuration option shall be aligned according to
+ :c:macro:`CPU_INTERRUPT_STACK_ALIGNMENT`.
.. Generated from spec:/acfg/if/malloc-dirty
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MALLOC_DIRTY
.. _CONFIGURE_MALLOC_DIRTY:
@@ -263,29 +324,38 @@ NOTES:
CONFIGURE_MALLOC_DIRTY
----------------------
-CONSTANT:
- ``CONFIGURE_MALLOC_DIRTY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MALLOC_DIRTY``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then each memory area returned
- by C Program Heap allocator functions such as :c:func:`malloc` is dirtied
- with a ``0xCF`` byte pattern before it is handed over to the application.
+If this configuration option is undefined, then the described feature is not
+enabled.
-NOTES:
- The dirtying performed by this option is carried out for each successful
- memory allocation from the C Program Heap in contrast to
- :ref:`CONFIGURE_DIRTY_MEMORY` which dirties the memory only once during the
- system initialization.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then each memory area returned
+by C Program Heap allocator functions such as :c:func:`malloc` is dirtied
+with a ``0xCF`` byte pattern before it is handed over to the application.
+
+.. rubric:: NOTES:
+
+The dirtying performed by this option is carried out for each successful
+memory allocation from the C Program Heap in contrast to
+:ref:`CONFIGURE_DIRTY_MEMORY` which dirties the memory only once during the
+system initialization.
.. Generated from spec:/acfg/if/max-file-descriptors
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
.. index:: maximum file descriptors
@@ -294,38 +364,47 @@ NOTES:
CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
----------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_FILE_DESCRIPTORS``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is an integer define.
+``CONFIGURE_MAXIMUM_FILE_DESCRIPTORS``
-DEFAULT VALUE:
- The default value is 3.
+.. rubric:: OPTION TYPE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This configuration option is an integer define.
- * It shall be greater than or equal to zero.
+.. rubric:: DEFAULT VALUE:
- * It shall be less than or equal to `SIZE_MAX
- <https://en.cppreference.com/w/c/types/limits>`_.
+The default value is 3.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of file
- like objects that can be concurrently open.
+The value of this configuration option defines the maximum number of file
+like objects that can be concurrently open.
-NOTES:
- The default value of three file descriptors allows RTEMS to support standard
- input, output, and error I/O streams on :file:`/dev/console`.
+.. rubric:: NOTES:
+
+The default value of three file descriptors allows RTEMS to support standard
+input, output, and error I/O streams on :file:`/dev/console`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `SIZE_MAX <https://en.cppreference.com/w/c/types/limits>`_.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
.. Generated from spec:/acfg/if/max-processors
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_PROCESSORS
.. _CONFIGURE_MAXIMUM_PROCESSORS:
@@ -333,40 +412,50 @@ NOTES:
CONFIGURE_MAXIMUM_PROCESSORS
----------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_PROCESSORS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_PROCESSORS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DEFAULT VALUE:
-DEFAULT VALUE:
- The default value is 1.
+The default value is 1.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DESCRIPTION:
- * It shall be greater than or equal to one.
+The value of this configuration option defines the maximum number of
+processors an application intends to use. The number of actually available
+processors depends on the hardware and may be less. It is recommended to use
+the smallest value suitable for the application in order to save memory.
+Each processor needs an IDLE task stack and interrupt stack for example.
- * It shall be less than or equal to :c:macro:`CPU_MAXIMUM_PROCESSORS`.
+.. rubric:: NOTES:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of
- processors an application intends to use. The number of actually available
- processors depends on the hardware and may be less. It is recommended to use
- the smallest value suitable for the application in order to save memory.
- Each processor needs an IDLE task stack and interrupt stack for example.
+If there are more processors available than configured, the rest will be
+ignored.
-NOTES:
- If there are more processors available than configured, the rest will be
- ignored.
+This configuration option is only evaluated in SMP configurations (e.g. RTEMS
+was built with the ``--enable-smp`` build configuration option). In all
+other configurations it has no effect.
- This configuration option is only evaluated in SMP configurations (e.g. RTEMS
- was built with the ``--enable-smp`` build configuration option). In all
- other configurations it has no effect.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to one.
+
+* The value of the configuration option shall be less than or equal to
+ :c:macro:`CPU_MAXIMUM_PROCESSORS`.
.. Generated from spec:/acfg/if/max-thread-name-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
.. index:: maximum thread name size
@@ -375,43 +464,52 @@ NOTES:
CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
----------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_THREAD_NAME_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_THREAD_NAME_SIZE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 16.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an integer define.
+The value of this configuration option defines the maximum thread name size
+including the terminating ``NUL`` character.
-DEFAULT VALUE:
- The default value is 16.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value was chosen for Linux compatibility, see
+`pthread_setname_np() <http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>`_.
- * It shall be greater than or equal to zero.
+The size of the thread control block is increased by the maximum thread name
+size.
- * It shall be less than or equal to `SIZE_MAX
- <https://en.cppreference.com/w/c/types/limits>`_.
+This configuration option is available since RTEMS 5.1.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- The value of this configuration option defines the maximum thread name size
- including the terminating ``NUL`` character.
+The following constraints apply to this configuration option:
-NOTES:
- The default value was chosen for Linux compatibility, see
- `pthread_setname_np() <http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>`_.
+* The value of the configuration option shall be greater than or equal to zero.
- The size of the thread control block is increased by the maximum thread name
- size.
+* The value of the configuration option shall be less than or equal to
+ `SIZE_MAX <https://en.cppreference.com/w/c/types/limits>`_.
- This configuration option is available since RTEMS 5.1.
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
.. Generated from spec:/acfg/if/memory-overhead
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MEMORY_OVERHEAD
.. _CONFIGURE_MEMORY_OVERHEAD:
@@ -419,43 +517,53 @@ NOTES:
CONFIGURE_MEMORY_OVERHEAD
-------------------------
-CONSTANT:
- ``CONFIGURE_MEMORY_OVERHEAD``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MEMORY_OVERHEAD``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is 0.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the number of kilobytes the
+application wishes to add to the RTEMS Workspace size calculated by
+``<rtems/confdefs.h>``.
- * It shall be greater than or equal to zero.
+.. rubric:: NOTES:
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+This configuration option should only be used when it is suspected that a bug
+in ``<rtems/confdefs.h>`` has resulted in an underestimation. Typically the
+memory allocation will be too low when an application does not account for
+all message queue buffers or task stacks, see
+:ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
- * It shall be small enough so that the RTEMS Workspace size calculation
- carried out by ``<rtems/confdefs.h>`` does not overflow an integer of
- type `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- The value of this configuration option defines the number of kilobytes the
- application wishes to add to the RTEMS Workspace size calculated by
- ``<rtems/confdefs.h>``.
+The following constraints apply to this configuration option:
-NOTES:
- This configuration option should only be used when it is suspected that a bug
- in ``<rtems/confdefs.h>`` has resulted in an underestimation. Typically the
- memory allocation will be too low when an application does not account for
- all message queue buffers or task stacks, see
- :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option shall be small enough so that the RTEMS
+ Workspace size calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/message-buffer-memory
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MESSAGE_BUFFER_MEMORY
.. index:: configure message queue buffer memory
.. index:: CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
@@ -466,82 +574,92 @@ NOTES:
CONFIGURE_MESSAGE_BUFFER_MEMORY
-------------------------------
-CONSTANT:
- ``CONFIGURE_MESSAGE_BUFFER_MEMORY``
-
-OPTION TYPE:
- This configuration option is an integer define.
-
-DEFAULT VALUE:
- The default value is 0.
-
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
-
- * It shall be greater than or equal to zero.
-
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
-
- * It shall be small enough so that the RTEMS Workspace size calculation
- carried out by ``<rtems/confdefs.h>`` does not overflow an integer of
- type `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
-
-DESCRIPTION:
- The value of this configuration option defines the number of bytes reserved
- for message queue buffers in the RTEMS Workspace.
-
-NOTES:
- The configuration options :ref:`CONFIGURE_MAXIMUM_MESSAGE_QUEUES` and
- :ref:`CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES` define only how many message
- queues can be created by the application. The memory for the message
- buffers is configured by this option. For each message queue you have to
- reserve some memory for the message buffers. The size depends on the
- maximum number of pending messages and the maximum size of the messages of
- a message queue. Use the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` macro
- to specify the message buffer memory for each message queue and sum them up
- to define the value for ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``.
-
- The interface for the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` help
- macro is as follows:
-
- .. code-block:: c
-
- CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( max_messages, max_msg_size )
-
- Where ``max_messages`` is the maximum number of pending messages and
- ``max_msg_size`` is the maximum size in bytes of the messages of the
- corresponding message queue. Both parameters shall be compile time
- constants. Not using this help macro (e.g. just using
- ``max_messages * max_msg_size``) may result in an underestimate of the
- RTEMS Workspace size.
-
- The following example illustrates how the
- ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` help macro can be used to assist in
- calculating the message buffer memory required. In this example, there are
- two message queues used in this application. The first message queue has a
- maximum of 24 pending messages with the message structure defined by the
- type ``one_message_type``. The other message queue has a maximum of 500
- pending messages with the message structure defined by the type
- ``other_message_type``.
-
- .. code-block:: c
-
- #define CONFIGURE_MESSAGE_BUFFER_MEMORY ( \
- CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
- 24, \
- sizeof( one_message_type ) \
- ) \
- + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
- 500, \
- sizeof( other_message_type ) \
- ) \
- )
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MESSAGE_BUFFER_MEMORY``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 0.
+
+.. rubric:: DESCRIPTION:
+
+The value of this configuration option defines the number of bytes reserved
+for message queue buffers in the RTEMS Workspace.
+
+.. rubric:: NOTES:
+
+The configuration options :ref:`CONFIGURE_MAXIMUM_MESSAGE_QUEUES` and
+:ref:`CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES` define only how many message
+queues can be created by the application. The memory for the message
+buffers is configured by this option. For each message queue you have to
+reserve some memory for the message buffers. The size depends on the
+maximum number of pending messages and the maximum size of the messages of
+a message queue. Use the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` macro
+to specify the message buffer memory for each message queue and sum them up
+to define the value for ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``.
+
+The interface for the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` help
+macro is as follows:
+
+.. code-block:: c
+
+ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( max_messages, max_msg_size )
+
+Where ``max_messages`` is the maximum number of pending messages and
+``max_msg_size`` is the maximum size in bytes of the messages of the
+corresponding message queue. Both parameters shall be compile time
+constants. Not using this help macro (e.g. just using
+``max_messages * max_msg_size``) may result in an underestimate of the
+RTEMS Workspace size.
+
+The following example illustrates how the
+``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` help macro can be used to assist in
+calculating the message buffer memory required. In this example, there are
+two message queues used in this application. The first message queue has a
+maximum of 24 pending messages with the message structure defined by the
+type ``one_message_type``. The other message queue has a maximum of 500
+pending messages with the message structure defined by the type
+``other_message_type``.
+
+.. code-block:: c
+
+ #define CONFIGURE_MESSAGE_BUFFER_MEMORY ( \
+ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
+ 24, \
+ sizeof( one_message_type ) \
+ ) \
+ + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
+ 500, \
+ sizeof( other_message_type ) \
+ ) \
+ )
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option shall be small enough so that the RTEMS
+ Workspace size calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/microseconds-per-tick
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MICROSECONDS_PER_TICK
.. index:: clock tick quantum
.. index:: tick quantum
@@ -551,55 +669,64 @@ NOTES:
CONFIGURE_MICROSECONDS_PER_TICK
-------------------------------
-CONSTANT:
- ``CONFIGURE_MICROSECONDS_PER_TICK``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is an integer define.
+``CONFIGURE_MICROSECONDS_PER_TICK``
-DEFAULT VALUE:
- The default value is 10000.
+.. rubric:: OPTION TYPE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This configuration option is an integer define.
- * It shall be greater than or equal to a value defined by the :term:`Clock
- Driver`.
+.. rubric:: DEFAULT VALUE:
- * It shall be less than or equal to a value defined by the :term:`Clock
- Driver`.
+The default value is 10000.
- * The resulting clock ticks per second should be an integer.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- The value of this configuration option defines the length of time in
- microseconds between clock ticks (clock tick quantum).
+The value of this configuration option defines the length of time in
+microseconds between clock ticks (clock tick quantum).
- When the clock tick quantum value is too low, the system will spend so much
- time processing clock ticks that it does not have processing time available
- to perform application work. In this case, the system will become
- unresponsive.
+When the clock tick quantum value is too low, the system will spend so much
+time processing clock ticks that it does not have processing time available
+to perform application work. In this case, the system will become
+unresponsive.
- The lowest practical time quantum varies widely based upon the speed of the
- target hardware and the architectural overhead associated with
- interrupts. In general terms, you do not want to configure it lower than is
- needed for the application.
+The lowest practical time quantum varies widely based upon the speed of the
+target hardware and the architectural overhead associated with
+interrupts. In general terms, you do not want to configure it lower than is
+needed for the application.
- The clock tick quantum should be selected such that it all blocking and
- delay times in the application are evenly divisible by it. Otherwise,
- rounding errors will be introduced which may negatively impact the
- application.
+The clock tick quantum should be selected such that it all blocking and
+delay times in the application are evenly divisible by it. Otherwise,
+rounding errors will be introduced which may negatively impact the
+application.
-NOTES:
- This configuration option has no impact if the Clock Driver is not
- configured, see :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`.
+.. rubric:: NOTES:
- There may be Clock Driver specific limits on the resolution or maximum value
- of a clock tick quantum.
+This configuration option has no impact if the Clock Driver is not
+configured, see :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`.
+
+There may be Clock Driver specific limits on the resolution or maximum value
+of a clock tick quantum.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to a
+ value defined by the :term:`Clock Driver`.
+
+* The value of the configuration option shall be less than or equal to a value
+ defined by the :term:`Clock Driver`.
+
+* The resulting clock ticks per second should be an integer.
.. Generated from spec:/acfg/if/min-task-stack-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MINIMUM_TASK_STACK_SIZE
.. index:: minimum task stack size
@@ -608,54 +735,64 @@ NOTES:
CONFIGURE_MINIMUM_TASK_STACK_SIZE
---------------------------------
-CONSTANT:
- ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DEFAULT VALUE:
-DEFAULT VALUE:
- The default value is :c:macro:`CPU_STACK_MINIMUM_SIZE`.
+The default value is :c:macro:`CPU_STACK_MINIMUM_SIZE`.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DESCRIPTION:
- * It shall be small enough so that the task stack space calculation carried
- out by ``<rtems/confdefs.h>`` does not overflow an integer of type
- `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+The value of this configuration option defines the minimum stack size in
+bytes for every user task or thread in the system.
- * It shall be greater than or equal to a BSP-specific and
- application-specific minimum value.
+.. rubric:: NOTES:
-DESCRIPTION:
- The value of this configuration option defines the minimum stack size in
- bytes for every user task or thread in the system.
+Adjusting this parameter should be done with caution. Examining the actual
+stack usage using the stack checker usage reporting facility is recommended
+(see also :ref:`CONFIGURE_STACK_CHECKER_ENABLED`).
-NOTES:
- Adjusting this parameter should be done with caution. Examining the actual
- stack usage using the stack checker usage reporting facility is recommended
- (see also :ref:`CONFIGURE_STACK_CHECKER_ENABLED`).
+This parameter can be used to lower the minimum from that recommended. This
+can be used in low memory systems to reduce memory consumption for
+stacks. However, this shall be done with caution as it could increase the
+possibility of a blown task stack.
- This parameter can be used to lower the minimum from that recommended. This
- can be used in low memory systems to reduce memory consumption for
- stacks. However, this shall be done with caution as it could increase the
- possibility of a blown task stack.
+This parameter can be used to increase the minimum from that
+recommended. This can be used in higher memory systems to reduce the risk
+of stack overflow without performing analysis on actual consumption.
- This parameter can be used to increase the minimum from that
- recommended. This can be used in higher memory systems to reduce the risk
- of stack overflow without performing analysis on actual consumption.
+By default, this configuration parameter defines also the minimum stack
+size of POSIX threads. This can be changed with the
+:ref:`CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE`
+configuration option.
- By default, this configuration parameter defines also the minimum stack
- size of POSIX threads. This can be changed with the
- :ref:`CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE`
- configuration option.
+In releases before RTEMS 5.1 the ``CONFIGURE_MINIMUM_TASK_STACK_SIZE`` was
+used to define the default value of :ref:`CONFIGURE_INTERRUPT_STACK_SIZE`.
- In releases before RTEMS 5.1 the ``CONFIGURE_MINIMUM_TASK_STACK_SIZE`` was
- used to define the default value of :ref:`CONFIGURE_INTERRUPT_STACK_SIZE`.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
+
+* The value of the configuration option shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
.. Generated from spec:/acfg/if/stack-checker-enabled
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_STACK_CHECKER_ENABLED
.. _CONFIGURE_STACK_CHECKER_ENABLED:
@@ -663,29 +800,38 @@ NOTES:
CONFIGURE_STACK_CHECKER_ENABLED
-------------------------------
-CONSTANT:
- ``CONFIGURE_STACK_CHECKER_ENABLED``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_STACK_CHECKER_ENABLED``
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: OPTION TYPE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+This configuration option is a boolean feature define.
-DESCRIPTION:
- In case this configuration option is defined, then the stack checker is
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-NOTES:
- The stack checker performs run-time stack bounds checking. This increases
- the time required to create tasks as well as adding overhead to each context
- switch.
+If this configuration option is undefined, then the described feature is not
+enabled.
- In 4.9 and older, this configuration option was named ``STACK_CHECKER_ON``.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the stack checker is
+enabled.
+
+.. rubric:: NOTES:
+
+The stack checker performs run-time stack bounds checking. This increases
+the time required to create tasks as well as adding overhead to each context
+switch.
+
+In 4.9 and older, this configuration option was named ``STACK_CHECKER_ON``.
.. Generated from spec:/acfg/if/ticks-per-time-slice
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_TICKS_PER_TIMESLICE
.. index:: ticks per timeslice
@@ -694,34 +840,43 @@ NOTES:
CONFIGURE_TICKS_PER_TIMESLICE
-----------------------------
-CONSTANT:
- ``CONFIGURE_TICKS_PER_TIMESLICE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_TICKS_PER_TIMESLICE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 50.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DESCRIPTION:
-DEFAULT VALUE:
- The default value is 50.
+The value of this configuration option defines the length of the timeslice
+quantum in ticks for each task.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: NOTES:
- * It shall be greater than or equal to zero.
+This configuration option has no impact if the Clock Driver is not
+configured, see :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`.
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- The value of this configuration option defines the length of the timeslice
- quantum in ticks for each task.
+The following constraints apply to this configuration option:
-NOTES:
- This configuration option has no impact if the Clock Driver is not
- configured, see :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`.
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/unified-work-areas
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_UNIFIED_WORK_AREAS
.. index:: unified work areas
.. index:: separate work areas
@@ -733,33 +888,42 @@ NOTES:
CONFIGURE_UNIFIED_WORK_AREAS
----------------------------
-CONSTANT:
- ``CONFIGURE_UNIFIED_WORK_AREAS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_UNIFIED_WORK_AREAS``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then there will be separate memory
- pools for the RTEMS Workspace and C Program Heap.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the RTEMS Workspace and
- the C Program Heap will be one pool of memory.
+If this configuration option is undefined, then there will be separate memory
+pools for the RTEMS Workspace and C Program Heap.
-NOTES:
- Having separate pools does have some advantages in the event a task blows a
- stack or writes outside its memory area. However, in low memory systems the
- overhead of the two pools plus the potential for unused memory in either
- pool is very undesirable.
+.. rubric:: DESCRIPTION:
- In high memory environments, this is desirable when you want to use the
- :ref:`ConfigUnlimitedObjects` option. You will be able to create objects
- until you run out of all available memory rather then just until you run out
- of RTEMS Workspace.
+In case this configuration option is defined, then the RTEMS Workspace and
+the C Program Heap will be one pool of memory.
+
+.. rubric:: NOTES:
+
+Having separate pools does have some advantages in the event a task blows a
+stack or writes outside its memory area. However, in low memory systems the
+overhead of the two pools plus the potential for unused memory in either
+pool is very undesirable.
+
+In high memory environments, this is desirable when you want to use the
+:ref:`ConfigUnlimitedObjects` option. You will be able to create objects
+until you run out of all available memory rather then just until you run out
+of RTEMS Workspace.
.. Generated from spec:/acfg/if/unlimited-allocation-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_UNLIMITED_ALLOCATION_SIZE
.. _CONFIGURE_UNLIMITED_ALLOCATION_SIZE:
@@ -767,34 +931,44 @@ NOTES:
CONFIGURE_UNLIMITED_ALLOCATION_SIZE
-----------------------------------
-CONSTANT:
- ``CONFIGURE_UNLIMITED_ALLOCATION_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_UNLIMITED_ALLOCATION_SIZE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 8.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an integer define.
+If :ref:`CONFIGURE_UNLIMITED_OBJECTS` is defined, then the value of this
+configuration option defines the default objects maximum of all object
+classes supporting :ref:`ConfigUnlimitedObjects` to
+``rtems_resource_unlimited( CONFIGURE_UNLIMITED_ALLOCATION_SIZE )``.
-DEFAULT VALUE:
- The default value is 8.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall meet the constraints of all
- object classes to which it is applied.
+By allowing users to declare all resources as being unlimited the user can
+avoid identifying and limiting the resources used.
-DESCRIPTION:
- If :ref:`CONFIGURE_UNLIMITED_OBJECTS` is defined, then the value of this
- configuration option defines the default objects maximum of all object
- classes supporting :ref:`ConfigUnlimitedObjects` to
- ``rtems_resource_unlimited( CONFIGURE_UNLIMITED_ALLOCATION_SIZE )``.
+The object maximum of each class can be configured also individually using
+the :c:func:`rtems_resource_unlimited` macro.
-NOTES:
- By allowing users to declare all resources as being unlimited the user can
- avoid identifying and limiting the resources used.
+.. rubric:: CONSTRAINTS:
- The object maximum of each class can be configured also individually using
- the :c:func:`rtems_resource_unlimited` macro.
+The value of the configuration option shall meet the constraints of all object
+classes to which it is applied.
.. Generated from spec:/acfg/if/unlimited-objects
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_UNLIMITED_OBJECTS
.. _CONFIGURE_UNLIMITED_OBJECTS:
@@ -802,32 +976,41 @@ NOTES:
CONFIGURE_UNLIMITED_OBJECTS
---------------------------
-CONSTANT:
- ``CONFIGURE_UNLIMITED_OBJECTS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_UNLIMITED_OBJECTS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- In case this configuration option is defined, then unlimited objects are used
- by default.
+In case this configuration option is defined, then unlimited objects are used
+by default.
-NOTES:
- When using unlimited objects, it is common practice to also specify
- :ref:`CONFIGURE_UNIFIED_WORK_AREAS` so the system operates with a single pool
- of memory for both RTEMS Workspace and C Program Heap.
+.. rubric:: NOTES:
- This option does not override an explicit configuration for a particular
- object class by the user.
+When using unlimited objects, it is common practice to also specify
+:ref:`CONFIGURE_UNIFIED_WORK_AREAS` so the system operates with a single pool
+of memory for both RTEMS Workspace and C Program Heap.
- See also :ref:`CONFIGURE_UNLIMITED_ALLOCATION_SIZE`.
+This option does not override an explicit configuration for a particular
+object class by the user.
+
+See also :ref:`CONFIGURE_UNLIMITED_ALLOCATION_SIZE`.
.. Generated from spec:/acfg/if/verbose-system-init
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
.. _CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION:
@@ -835,26 +1018,35 @@ NOTES:
CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
---------------------------------------
-CONSTANT:
- ``CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the system initialization
- is verbose.
+If this configuration option is undefined, then the described feature is not
+enabled.
-NOTES:
- You may use this feature to debug system initialization issues. The
- :c:func:`printk` function is used to print the information.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the system initialization
+is verbose.
+
+.. rubric:: NOTES:
+
+You may use this feature to debug system initialization issues. The
+:c:func:`printk` function is used to print the information.
.. Generated from spec:/acfg/if/zero-workspace-automatically
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
.. index:: clear C Program Heap
.. index:: clear RTEMS Workspace
@@ -866,23 +1058,28 @@ NOTES:
CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
--------------------------------------
-CONSTANT:
- ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DESCRIPTION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+In case this configuration option is defined, then the memory areas used for
+the RTEMS Workspace and the C Program Heap are zeroed with a ``0x00`` byte
+pattern during system initialization.
-DESCRIPTION:
- In case this configuration option is defined, then the memory areas used for
- the RTEMS Workspace and the C Program Heap are zeroed with a ``0x00`` byte
- pattern during system initialization.
+.. rubric:: NOTES:
-NOTES:
- Zeroing memory can add significantly to the system initialization time. It is
- not necessary for RTEMS but is often assumed by support libraries. In case
- :ref:`CONFIGURE_DIRTY_MEMORY` is also defined, then the memory is first
- dirtied and then zeroed.
+Zeroing memory can add significantly to the system initialization time. It is
+not necessary for RTEMS but is often assumed by support libraries. In case
+:ref:`CONFIGURE_DIRTY_MEMORY` is also defined, then the memory is first
+dirtied and then zeroed.
diff --git a/c-user/config/idle-task.rst b/c-user/config/idle-task.rst
index 1234f42..5cf8364 100644
--- a/c-user/config/idle-task.rst
+++ b/c-user/config/idle-task.rst
@@ -27,6 +27,10 @@ This section describes configuration options related to the idle tasks.
.. Generated from spec:/acfg/if/idle-task-body
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IDLE_TASK_BODY
.. _CONFIGURE_IDLE_TASK_BODY:
@@ -34,33 +38,43 @@ This section describes configuration options related to the idle tasks.
CONFIGURE_IDLE_TASK_BODY
------------------------
-CONSTANT:
- ``CONFIGURE_IDLE_TASK_BODY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IDLE_TASK_BODY``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an initializer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an initializer define.
+If :ref:`BSP_IDLE_TASK_BODY` is defined, then this will be the default value,
+otherwise the default value is ``_CPU_Thread_Idle_body``.
-DEFAULT VALUE:
- If :ref:`BSP_IDLE_TASK_BODY` is defined, then this will be the default value,
- otherwise the default value is ``_CPU_Thread_Idle_body``.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be defined to a valid function
- pointer of the type ``void *( *idle_body )( uintptr_t )``.
+The value of this configuration option initializes the IDLE thread body.
-DESCRIPTION:
- The value of this configuration option initializes the IDLE thread body.
+.. rubric:: NOTES:
-NOTES:
- IDLE threads shall not block. A blocking IDLE thread results in undefined
- system behaviour because the scheduler assume that at least one ready thread
- exists.
+IDLE threads shall not block. A blocking IDLE thread results in undefined
+system behaviour because the scheduler assume that at least one ready thread
+exists.
- IDLE threads can be used to initialize the application, see configuration
- option :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`.
+IDLE threads can be used to initialize the application, see configuration
+option :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be defined to a valid function
+pointer of the type ``void *( *idle_body )( uintptr_t )``.
.. Generated from spec:/acfg/if/idle-task-init-appl
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
.. _CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION:
@@ -68,47 +82,56 @@ NOTES:
CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
-------------------------------------------
-CONSTANT:
- ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the user is assumed to
- provide one or more initialization tasks.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- This configuration option is defined to indicate that the user has configured
- **no** user initialization tasks or threads and that the user provided IDLE
- task will perform application initialization and then transform itself into
- an IDLE task.
+If this configuration option is undefined, then the user is assumed to
+provide one or more initialization tasks.
-NOTES:
- If you use this option be careful, the user IDLE task **cannot** block at all
- during the initialization sequence. Further, once application
- initialization is complete, it shall make itself preemptible and enter an idle
- body loop.
+.. rubric:: DESCRIPTION:
- The IDLE task shall run at the lowest priority of all tasks in the system.
+This configuration option is defined to indicate that the user has configured
+**no** user initialization tasks or threads and that the user provided IDLE
+task will perform application initialization and then transform itself into
+an IDLE task.
- If this configuration option is defined, then it is mandatory to configure a
- user IDLE task with the :ref:`CONFIGURE_IDLE_TASK_BODY` configuration option,
- otherwise a compile time error in the configuration file will occur.
+.. rubric:: NOTES:
- The application shall define exactly one of the following configuration
- options
+If you use this option be careful, the user IDLE task **cannot** block at all
+during the initialization sequence. Further, once application
+initialization is complete, it shall make itself preemptible and enter an idle
+body loop.
- * :ref:`CONFIGURE_RTEMS_INIT_TASKS_TABLE`,
+The IDLE task shall run at the lowest priority of all tasks in the system.
- * :ref:`CONFIGURE_POSIX_INIT_THREAD_TABLE`, or
+If this configuration option is defined, then it is mandatory to configure a
+user IDLE task with the :ref:`CONFIGURE_IDLE_TASK_BODY` configuration option,
+otherwise a compile time error in the configuration file will occur.
- * ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
+The application shall define exactly one of the following configuration
+options
- otherwise a compile time error in the configuration file will occur.
+* :ref:`CONFIGURE_RTEMS_INIT_TASKS_TABLE`,
+
+* :ref:`CONFIGURE_POSIX_INIT_THREAD_TABLE`, or
+
+* ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
+
+otherwise a compile time error in the configuration file will occur.
.. Generated from spec:/acfg/if/idle-task-stack-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_IDLE_TASK_STACK_SIZE
.. _CONFIGURE_IDLE_TASK_STACK_SIZE:
@@ -116,30 +139,36 @@ NOTES:
CONFIGURE_IDLE_TASK_STACK_SIZE
------------------------------
-CONSTANT:
- ``CONFIGURE_IDLE_TASK_STACK_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_IDLE_TASK_STACK_SIZE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an integer define.
+The value of this configuration option defines the task stack size for an
+IDLE task.
-DEFAULT VALUE:
- The default value is :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+In SMP configurations, there is one IDLE task per configured processor, see
+:ref:`CONFIGURE_MAXIMUM_PROCESSORS`.
- * It shall be greater than or equal to a BSP-specific and
- application-specific minimum value.
+.. rubric:: CONSTRAINTS:
- * It shall be small enough so that the IDLE task stack area calculation
- carried out by ``<rtems/confdefs.h>`` does not overflow an integer of
- type `size_t <https://en.cppreference.com/w/c/types/size_t>`_.
+The following constraints apply to this configuration option:
-DESCRIPTION:
- The value of this configuration option defines the task stack size for an
- IDLE task.
+* The value of the configuration option shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
-NOTES:
- In SMP configurations, there is one IDLE task per configured processor, see
- :ref:`CONFIGURE_MAXIMUM_PROCESSORS`.
+* The value of the configuration option shall be small enough so that the IDLE
+ task stack area calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `size_t
+ <https://en.cppreference.com/w/c/types/size_t>`_.
diff --git a/c-user/config/mpci.rst b/c-user/config/mpci.rst
index 800aa30..09c541f 100644
--- a/c-user/config/mpci.rst
+++ b/c-user/config/mpci.rst
@@ -32,6 +32,10 @@ SMP support.
.. Generated from spec:/acfg/if/mp-extra-server-stack
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
.. _CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK:
@@ -39,39 +43,49 @@ SMP support.
CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
-----------------------------------------
-CONSTANT:
- ``CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is 0.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DESCRIPTION:
-DEFAULT VALUE:
- The default value is 0.
+The value of this configuration option defines the number of bytes the
+applications wishes to add to the MPCI task stack on top of
+:ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: NOTES:
- * It shall be greater than or equal to zero.
+This configuration option is only evaluated if
+:ref:`CONFIGURE_MP_APPLICATION` is defined.
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: CONSTRAINTS:
- * It shall be small enough so that the MPCI receive server stack area
- calculation carried out by ``<rtems/confdefs.h>`` does not overflow an
- integer of type `size_t <https://en.cppreference.com/w/c/types/size_t>`_.
+The following constraints apply to this configuration option:
-DESCRIPTION:
- The value of this configuration option defines the number of bytes the
- applications wishes to add to the MPCI task stack on top of
- :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+* The value of the configuration option shall be greater than or equal to zero.
-NOTES:
- This configuration option is only evaluated if
- :ref:`CONFIGURE_MP_APPLICATION` is defined.
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
+
+* The value of the configuration option shall be small enough so that the MPCI
+ receive server stack area calculation carried out by ``<rtems/confdefs.h>``
+ does not overflow an integer of type `size_t
+ <https://en.cppreference.com/w/c/types/size_t>`_.
.. Generated from spec:/acfg/if/mp-appl
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MP_APPLICATION
.. _CONFIGURE_MP_APPLICATION:
@@ -79,29 +93,38 @@ NOTES:
CONFIGURE_MP_APPLICATION
------------------------
-CONSTANT:
- ``CONFIGURE_MP_APPLICATION``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MP_APPLICATION``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+If this configuration option is undefined, then the multiprocessing services
+are not initialized.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the multiprocessing services
- are not initialized.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- This configuration option is defined to indicate that the application intends
- to be part of a multiprocessing configuration. Additional configuration
- options are assumed to be provided.
+This configuration option is defined to indicate that the application intends
+to be part of a multiprocessing configuration. Additional configuration
+options are assumed to be provided.
-NOTES:
- This configuration option shall be undefined if the multiprocessing support
- is not enabled (e.g. RTEMS was built without the ``--enable-multiprocessing``
- build configuration option). Otherwise a compile time error in the
- configuration file will occur.
+.. rubric:: NOTES:
+
+This configuration option shall be undefined if the multiprocessing support
+is not enabled (e.g. RTEMS was built without the ``--enable-multiprocessing``
+build configuration option). Otherwise a compile time error in the
+configuration file will occur.
.. Generated from spec:/acfg/if/mp-max-global-objects
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
.. _CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS:
@@ -109,37 +132,46 @@ NOTES:
CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
-----------------------------------
-CONSTANT:
- ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is 32.
-DEFAULT VALUE:
- The default value is 32.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the maximum number of
+concurrently active global objects in a multiprocessor system.
- * It shall be greater than or equal to zero.
+.. rubric:: NOTES:
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+This value corresponds to the total number of objects which can be created
+with the :c:macro:`RTEMS_GLOBAL` attribute.
-DESCRIPTION:
- The value of this configuration option defines the maximum number of
- concurrently active global objects in a multiprocessor system.
+This configuration option is only evaluated if
+:ref:`CONFIGURE_MP_APPLICATION` is defined.
-NOTES:
- This value corresponds to the total number of objects which can be created
- with the :c:macro:`RTEMS_GLOBAL` attribute.
+.. rubric:: CONSTRAINTS:
- This configuration option is only evaluated if
- :ref:`CONFIGURE_MP_APPLICATION` is defined.
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/mp-max-nodes
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MP_MAXIMUM_NODES
.. _CONFIGURE_MP_MAXIMUM_NODES:
@@ -147,34 +179,43 @@ NOTES:
CONFIGURE_MP_MAXIMUM_NODES
--------------------------
-CONSTANT:
- ``CONFIGURE_MP_MAXIMUM_NODES``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MP_MAXIMUM_NODES``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DEFAULT VALUE:
-DEFAULT VALUE:
- The default value is 2.
+The default value is 2.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DESCRIPTION:
- * It shall be greater than or equal to zero.
+The value of this configuration option defines the maximum number of nodes in
+a multiprocessor system.
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: NOTES:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of nodes in
- a multiprocessor system.
+This configuration option is only evaluated if
+:ref:`CONFIGURE_MP_APPLICATION` is defined.
-NOTES:
- This configuration option is only evaluated if
- :ref:`CONFIGURE_MP_APPLICATION` is defined.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/mp-max-proxies
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MP_MAXIMUM_PROXIES
.. _CONFIGURE_MP_MAXIMUM_PROXIES:
@@ -182,40 +223,49 @@ NOTES:
CONFIGURE_MP_MAXIMUM_PROXIES
----------------------------
-CONSTANT:
- ``CONFIGURE_MP_MAXIMUM_PROXIES``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MP_MAXIMUM_PROXIES``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is 32.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value is 32.
- * It shall be greater than or equal to zero.
+.. rubric:: DESCRIPTION:
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+The value of this configuration option defines the maximum number of
+concurrently active thread/task proxies on this node in a multiprocessor
+system.
-DESCRIPTION:
- The value of this configuration option defines the maximum number of
- concurrently active thread/task proxies on this node in a multiprocessor
- system.
+.. rubric:: NOTES:
-NOTES:
- Since a proxy is used to represent a remote task/thread which is blocking
- on this node. This configuration parameter reflects the maximum number of
- remote tasks/threads which can be blocked on objects on this node, see
- :ref:`MPCIProxies`.
+Since a proxy is used to represent a remote task/thread which is blocking
+on this node. This configuration parameter reflects the maximum number of
+remote tasks/threads which can be blocked on objects on this node, see
+:ref:`MPCIProxies`.
- This configuration option is only evaluated if
- :ref:`CONFIGURE_MP_APPLICATION` is defined.
+This configuration option is only evaluated if
+:ref:`CONFIGURE_MP_APPLICATION` is defined.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/mp-mpci-table-pointer
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MP_MPCI_TABLE_POINTER
.. _CONFIGURE_MP_MPCI_TABLE_POINTER:
@@ -223,33 +273,43 @@ NOTES:
CONFIGURE_MP_MPCI_TABLE_POINTER
-------------------------------
-CONSTANT:
- ``CONFIGURE_MP_MPCI_TABLE_POINTER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MP_MPCI_TABLE_POINTER``
-OPTION TYPE:
- This configuration option is an initializer define.
+.. rubric:: OPTION TYPE:
-DEFAULT VALUE:
- The default value is ``&MPCI_table``.
+This configuration option is an initializer define.
-VALUE CONSTRAINTS:
- The value of this configuration option shall be a pointer to
- :c:type:`rtems_mpci_table`.
+.. rubric:: DEFAULT VALUE:
-DESCRIPTION:
- The value of this configuration option initializes the MPCI Configuration
- Table.
+The default value is ``&MPCI_table``.
-NOTES:
- RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
- Multiprocessor System assuming the BSP provides the proper set of
- supporting methods.
+.. rubric:: DESCRIPTION:
- This configuration option is only evaluated if
- :ref:`CONFIGURE_MP_APPLICATION` is defined.
+The value of this configuration option initializes the MPCI Configuration
+Table.
+
+.. rubric:: NOTES:
+
+RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
+Multiprocessor System assuming the BSP provides the proper set of
+supporting methods.
+
+This configuration option is only evaluated if
+:ref:`CONFIGURE_MP_APPLICATION` is defined.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be a pointer to
+:c:type:`rtems_mpci_table`.
.. Generated from spec:/acfg/if/mp-node-number
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MP_NODE_NUMBER
.. _CONFIGURE_MP_NODE_NUMBER:
@@ -257,33 +317,38 @@ NOTES:
CONFIGURE_MP_NODE_NUMBER
------------------------
-CONSTANT:
- ``CONFIGURE_MP_NODE_NUMBER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MP_NODE_NUMBER``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is ``NODE_NUMBER``.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an integer define.
+The value of this configuration option defines the node number of this node
+in a multiprocessor system.
-DEFAULT VALUE:
- The default value is ``NODE_NUMBER``.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+In the RTEMS Multiprocessing Test Suite, the node number is derived from
+the Makefile variable ``NODE_NUMBER``. The same code is compiled with the
+``NODE_NUMBER`` set to different values. The test programs behave
+differently based upon their node number.
- * It shall be greater than or equal to zero.
+This configuration option is only evaluated if
+:ref:`CONFIGURE_MP_APPLICATION` is defined.
- * It shall be less than or equal to `UINT32_MAX
- <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- The value of this configuration option defines the node number of this node
- in a multiprocessor system.
+The following constraints apply to this configuration option:
-NOTES:
- In the RTEMS Multiprocessing Test Suite, the node number is derived from
- the Makefile variable ``NODE_NUMBER``. The same code is compiled with the
- ``NODE_NUMBER`` set to different values. The test programs behave
- differently based upon their node number.
+* The value of the configuration option shall be greater than or equal to zero.
- This configuration option is only evaluated if
- :ref:`CONFIGURE_MP_APPLICATION` is defined.
+* The value of the configuration option shall be less than or equal to
+ `UINT32_MAX <https://en.cppreference.com/w/c/types/integer>`_.
diff --git a/c-user/config/posix-api.rst b/c-user/config/posix-api.rst
index 3c2c8a2..12e6410 100644
--- a/c-user/config/posix-api.rst
+++ b/c-user/config/posix-api.rst
@@ -30,6 +30,10 @@ build configuration option.
.. Generated from spec:/acfg/if/max-posix-keys
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_POSIX_KEYS
.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
@@ -37,42 +41,51 @@ build configuration option.
CONFIGURE_MAXIMUM_POSIX_KEYS
----------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_KEYS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_POSIX_KEYS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DEFAULT VALUE:
-DEFAULT VALUE:
- The default value is 0.
+The default value is 0.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DESCRIPTION:
- * It shall be greater than or equal to zero.
+The value of this configuration option defines the maximum number of POSIX
+API Keys that can be concurrently active.
- * It shall be less than or equal to 65535.
+.. rubric:: NOTES:
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of POSIX
- API Keys that can be concurrently active.
+The following constraints apply to this configuration option:
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-posix-key-value-pairs
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
.. _CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS:
@@ -80,48 +93,57 @@ NOTES:
CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
---------------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is
+:ref:`CONFIGURE_MAXIMUM_POSIX_KEYS` *
+( :ref:`CONFIGURE_MAXIMUM_TASKS` +
+:ref:`CONFIGURE_MAXIMUM_POSIX_THREADS` ).
-DEFAULT VALUE:
- The default value is
- :ref:`CONFIGURE_MAXIMUM_POSIX_KEYS` *
- :ref:`CONFIGURE_MAXIMUM_TASKS` +
- :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS`.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the maximum number of key
+value pairs used by POSIX API Keys that can be concurrently active.
- * It shall be greater than or equal to zero.
+.. rubric:: NOTES:
- * It shall be less than or equal to 65535.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+A key value pair is created by :c:func:`pthread_setspecific` if the value
+is not `NULL <https://en.cppreference.com/w/c/types/NULL>`_, otherwise it is deleted.
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of key
- value pairs used by POSIX API Keys that can be concurrently active.
+The following constraints apply to this configuration option:
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+* The value of the configuration option shall be greater than or equal to zero.
- A key value pair is created by :c:func:`pthread_setspecific` if the value
- is not `NULL <https://en.cppreference.com/w/c/types/NULL>`_, otherwise it is deleted.
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-posix-message-queues
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
@@ -129,48 +151,58 @@ NOTES:
CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
--------------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is an integer define.
+``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: OPTION TYPE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+This configuration option is an integer define.
- * It shall be greater than or equal to zero.
+.. rubric:: DEFAULT VALUE:
- * It shall be less than or equal to 65535.
+The default value is 0.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: DESCRIPTION:
- * It shall be small enough so that the RTEMS Workspace size calculation
- carried out by ``<rtems/confdefs.h>`` does not overflow an integer of
- type `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+The value of this configuration option defines the maximum number of POSIX
+API Message Queues that can be concurrently active.
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+.. rubric:: NOTES:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of POSIX
- API Message Queues that can be concurrently active.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`. You have to account for the memory used to
+store the messages of each message queue, see
+:ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`. You have to account for the memory used to
- store the messages of each message queue, see
- :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option shall be small enough so that the RTEMS
+ Workspace size calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-posix-queued-signals
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
@@ -178,45 +210,56 @@ NOTES:
CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
--------------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: OPTION TYPE:
-DEFAULT VALUE:
- The default value is 0.
+This configuration option is an integer define.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DEFAULT VALUE:
- * It shall be greater than or equal to zero.
+The default value is 0.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: DESCRIPTION:
- * It shall be small enough so that the RTEMS Workspace size calculation
- carried out by ``<rtems/confdefs.h>`` does not overflow an integer of
- type `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+The value of this configuration option defines the maximum number of POSIX
+API Queued Signals that can be concurrently active.
- * It shall be zero if the POSIX API is not enabled (e.g. RTEMS was built
- without the ``RTEMS_POSIX_API = True`` build configuration option).
- Otherwise a compile time error in the configuration file will occur.
+.. rubric:: NOTES:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of POSIX
- API Queued Signals that can be concurrently active.
+Unlimited objects are not available for queued signals.
-NOTES:
- Unlimited objects are not available for queued signals.
+Queued signals are only available if RTEMS was built with the
+``--enable-posix`` build configuration option.
- Queued signals are only available if RTEMS was built with the
- ``--enable-posix`` build configuration option.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option shall be small enough so that the RTEMS
+ Workspace size calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
+
+* The value of the configuration option shall be zero if the POSIX API is not
+ enabled (e.g. RTEMS was built without the ``RTEMS_POSIX_API = True`` build
+ configuration option). Otherwise a compile time error in the configuration
+ file will occur.
.. Generated from spec:/acfg/if/max-posix-semaphores
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
@@ -224,51 +267,61 @@ NOTES:
CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
----------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: OPTION TYPE:
-DEFAULT VALUE:
- The default value is 0.
+This configuration option is an integer define.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DEFAULT VALUE:
- * It shall be greater than or equal to zero.
+The default value is 0.
- * It shall be less than or equal to 65535.
+.. rubric:: DESCRIPTION:
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+The value of this configuration option defines the maximum number of POSIX
+API Named Semaphores that can be concurrently active.
- * It shall be small enough so that the RTEMS Workspace size calculation
- carried out by ``<rtems/confdefs.h>`` does not overflow an integer of
- type `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: NOTES:
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
-DESCRIPTION:
- The value of this configuration option defines the maximum number of POSIX
- API Named Semaphores that can be concurrently active.
+Named semaphores are created with :c:func:`sem_open`. Semaphores
+initialized with :c:func:`sem_init` are not affected by this
+configuration option since the storage space for these semaphores is
+user-provided.
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+.. rubric:: CONSTRAINTS:
- Named semaphores are created with :c:func:`sem_open`. Semaphores
- initialized with :c:func:`sem_init` are not affected by this
- configuration option since the storage space for these semaphores is
- user-provided.
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option shall be small enough so that the RTEMS
+ Workspace size calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-posix-shms
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_POSIX_SHMS
.. _CONFIGURE_MAXIMUM_POSIX_SHMS:
@@ -276,46 +329,56 @@ NOTES:
CONFIGURE_MAXIMUM_POSIX_SHMS
----------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_SHMS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_POSIX_SHMS``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an integer define.
+This configuration option is an integer define.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value is 0.
- * It shall be greater than or equal to zero.
+.. rubric:: DESCRIPTION:
- * It shall be less than or equal to 65535.
+The value of this configuration option defines the maximum number of POSIX
+API Shared Memory objects that can be concurrently active.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+.. rubric:: NOTES:
- * It shall be small enough so that the RTEMS Workspace size calculation
- carried out by ``<rtems/confdefs.h>`` does not overflow an integer of
- type `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+.. rubric:: CONSTRAINTS:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of POSIX
- API Shared Memory objects that can be concurrently active.
+The following constraints apply to this configuration option:
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option shall be small enough so that the RTEMS
+ Workspace size calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
.. Generated from spec:/acfg/if/max-posix-threads
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
@@ -323,51 +386,61 @@ NOTES:
CONFIGURE_MAXIMUM_POSIX_THREADS
-------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_THREADS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_POSIX_THREADS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DEFAULT VALUE:
-DEFAULT VALUE:
- The default value is 0.
+The default value is 0.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DESCRIPTION:
- * It shall be greater than or equal to zero.
+The value of this configuration option defines the maximum number of POSIX
+API Threads that can be concurrently active.
- * It shall be less than or equal to 65535.
+.. rubric:: NOTES:
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It shall be small enough so that the task stack space calculation carried
- out by ``<rtems/confdefs.h>`` does not overflow an integer of type
- `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+This calculations for the required memory in the RTEMS Workspace for threads
+assume that each thread has a minimum stack size and has floating point
+support enabled. The configuration option :ref:`CONFIGURE_EXTRA_TASK_STACKS` is used
+to specify thread stack requirements **above** the minimum size required.
-DESCRIPTION:
- The value of this configuration option defines the maximum number of POSIX
- API Threads that can be concurrently active.
+The maximum number of Classic API Tasks is specified by
+:ref:`CONFIGURE_MAXIMUM_TASKS`.
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+All POSIX threads have floating point enabled.
- This calculations for the required memory in the RTEMS Workspace for threads
- assume that each thread has a minimum stack size and has floating point
- support enabled. The configuration option :ref:`CONFIGURE_EXTRA_TASK_STACKS` is used
- to specify thread stack requirements **above** the minimum size required.
+.. rubric:: CONSTRAINTS:
- The maximum number of Classic API Tasks is specified by
- :ref:`CONFIGURE_MAXIMUM_TASKS`.
+The following constraints apply to this configuration option:
- All POSIX threads have floating point enabled.
+* The value of the configuration option shall be greater than or equal to zero.
+
+* The value of the configuration option shall be less than or equal to 65535.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/max-posix-timers
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
@@ -375,49 +448,59 @@ NOTES:
CONFIGURE_MAXIMUM_POSIX_TIMERS
------------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_TIMERS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_POSIX_TIMERS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is 0.
-DEFAULT VALUE:
- The default value is 0.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the maximum number of POSIX
+API Timers that can be concurrently active.
- * It shall be greater than or equal to zero.
+.. rubric:: NOTES:
- * It shall be less than or equal to 65535.
+This object class can be configured in unlimited allocation mode, see
+:ref:`ConfigUnlimitedObjects`.
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+Timers are only available if RTEMS was built with the
+``--enable-posix`` build configuration option.
- * It may be defined through :c:func:`rtems_resource_unlimited` the enable
- unlimited objects for the object class, if the value passed to
- :c:func:`rtems_resource_unlimited` satisfies all other constraints of the
- configuration option.
+.. rubric:: CONSTRAINTS:
- * It shall be zero if the POSIX API is not enabled (e.g. RTEMS was built
- without the ``RTEMS_POSIX_API = True`` build configuration option).
- Otherwise a compile time error in the configuration file will occur.
+The following constraints apply to this configuration option:
-DESCRIPTION:
- The value of this configuration option defines the maximum number of POSIX
- API Timers that can be concurrently active.
+* The value of the configuration option shall be greater than or equal to zero.
-NOTES:
- This object class can be configured in unlimited allocation mode, see
- :ref:`ConfigUnlimitedObjects`.
+* The value of the configuration option shall be less than or equal to 65535.
- Timers are only available if RTEMS was built with the
- ``--enable-posix`` build configuration option.
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+* The value of the configuration option may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for the
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of the configuration option.
+
+* The value of the configuration option shall be zero if the POSIX API is not
+ enabled (e.g. RTEMS was built without the ``RTEMS_POSIX_API = True`` build
+ configuration option). Otherwise a compile time error in the configuration
+ file will occur.
.. Generated from spec:/acfg/if/min-posix-thread-stack-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
.. index:: minimum POSIX thread stack size
@@ -426,30 +509,32 @@ NOTES:
CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
-----------------------------------------
-CONSTANT:
- ``CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is two times the value of
+:ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
-DEFAULT VALUE:
- The default value is two times the value of
- :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The value of this configuration option defines the minimum stack size in
+bytes for every POSIX thread in the system.
- * It shall be small enough so that the task stack space calculation carried
- out by ``<rtems/confdefs.h>`` does not overflow an integer of type
- `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: CONSTRAINTS:
- * It shall be greater than or equal to a BSP-specific and
- application-specific minimum value.
+The following constraints apply to this configuration option:
-DESCRIPTION:
- The value of this configuration option defines the minimum stack size in
- bytes for every POSIX thread in the system.
+* The value of the configuration option shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
-NOTES:
- None.
+* The value of the configuration option shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
diff --git a/c-user/config/posix-init-thread.rst b/c-user/config/posix-init-thread.rst
index 8623f2c..c038ec8 100644
--- a/c-user/config/posix-init-thread.rst
+++ b/c-user/config/posix-init-thread.rst
@@ -28,6 +28,10 @@ initialization thread.
.. Generated from spec:/acfg/if/posix-init-thread-entry-point
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
@@ -35,29 +39,39 @@ initialization thread.
CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
---------------------------------------
-CONSTANT:
- ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an initializer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an initializer define.
+The default value is ``POSIX_Init``.
-DEFAULT VALUE:
- The default value is ``POSIX_Init``.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be defined to a valid function
- pointer of the type ``void *( *entry_point )( void * )``.
+The value of this configuration option initializes the entry point of the
+POSIX API initialization thread.
-DESCRIPTION:
- The value of this configuration option initializes the entry point of the
- POSIX API initialization thread.
+.. rubric:: NOTES:
-NOTES:
- The application shall provide the function referenced by this configuration
- option.
+The application shall provide the function referenced by this configuration
+option.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be defined to a valid function
+pointer of the type ``void *( *entry_point )( void * )``.
.. Generated from spec:/acfg/if/posix-init-thread-stack-size
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
@@ -65,35 +79,41 @@ NOTES:
CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
--------------------------------------
-CONSTANT:
- ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: OPTION TYPE:
-DEFAULT VALUE:
- The default value is :ref:`CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE`.
+This configuration option is an integer define.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: DEFAULT VALUE:
- * It shall be greater than or equal to
- :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+The default value is :ref:`CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE`.
- * It shall be small enough so that the task stack space calculation carried
- out by ``<rtems/confdefs.h>`` does not overflow an integer of type
- `uintptr_t <https://en.cppreference.com/w/c/types/integer>`_.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- The value of this configuration option defines the thread stack size of the
- POSIX API initialization thread.
+The value of this configuration option defines the thread stack size of the
+POSIX API initialization thread.
-NOTES:
- None.
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be greater than or equal to
+ :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+* The value of the configuration option shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type `uintptr_t
+ <https://en.cppreference.com/w/c/types/integer>`_.
.. Generated from spec:/acfg/if/posix-init-thread-table
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
@@ -101,28 +121,33 @@ NOTES:
CONFIGURE_POSIX_INIT_THREAD_TABLE
---------------------------------
-CONSTANT:
- ``CONFIGURE_POSIX_INIT_THREAD_TABLE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_POSIX_INIT_THREAD_TABLE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DESCRIPTION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+In case this configuration option is defined, then exactly one POSIX
+initialization thread is configured.
-DESCRIPTION:
- In case this configuration option is defined, then exactly one POSIX
- initialization thread is configured.
+.. rubric:: NOTES:
-NOTES:
- The application shall define exactly one of the following configuration
- options
+The application shall define exactly one of the following configuration
+options
- * :ref:`CONFIGURE_RTEMS_INIT_TASKS_TABLE`,
+* :ref:`CONFIGURE_RTEMS_INIT_TASKS_TABLE`,
- * ``CONFIGURE_POSIX_INIT_THREAD_TABLE``, or
+* ``CONFIGURE_POSIX_INIT_THREAD_TABLE``, or
- * :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`
+* :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`
- otherwise a compile time error in the configuration file will occur.
+otherwise a compile time error in the configuration file will occur.
diff --git a/c-user/config/scheduler-general.rst b/c-user/config/scheduler-general.rst
index d78b14a..7c42039 100644
--- a/c-user/config/scheduler-general.rst
+++ b/c-user/config/scheduler-general.rst
@@ -49,6 +49,10 @@ configuration option.
.. Generated from spec:/acfg/if/cbs-max-servers
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_CBS_MAXIMUM_SERVERS
.. _CONFIGURE_CBS_MAXIMUM_SERVERS:
@@ -56,38 +60,47 @@ configuration option.
CONFIGURE_CBS_MAXIMUM_SERVERS
-----------------------------
-CONSTANT:
- ``CONFIGURE_CBS_MAXIMUM_SERVERS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_CBS_MAXIMUM_SERVERS``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is :ref:`CONFIGURE_MAXIMUM_TASKS`.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DESCRIPTION:
-DEFAULT VALUE:
- The default value is :ref:`CONFIGURE_MAXIMUM_TASKS`.
+The value of this configuration option defines the maximum number Constant
+Bandwidth Servers that can be concurrently active.
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+.. rubric:: NOTES:
- * It shall be greater than or equal to zero.
+This configuration option is only evaluated if the configuration option
+:ref:`CONFIGURE_SCHEDULER_CBS` is defined.
- * It shall be less than or equal to `SIZE_MAX
- <https://en.cppreference.com/w/c/types/limits>`_.
+.. rubric:: CONSTRAINTS:
- * It shall be less than or equal to a BSP-specific and application-specific
- value which depends on the size of the memory available to the
- application.
+The following constraints apply to this configuration option:
-DESCRIPTION:
- The value of this configuration option defines the maximum number Constant
- Bandwidth Servers that can be concurrently active.
+* The value of the configuration option shall be greater than or equal to zero.
-NOTES:
- This configuration option is only evaluated if the configuration option
- :ref:`CONFIGURE_SCHEDULER_CBS` is defined.
+* The value of the configuration option shall be less than or equal to
+ `SIZE_MAX <https://en.cppreference.com/w/c/types/limits>`_.
+
+* The value of the configuration option shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
.. Generated from spec:/acfg/if/max-priority
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_MAXIMUM_PRIORITY
.. index:: maximum priority
.. index:: number of priority levels
@@ -97,57 +110,67 @@ NOTES:
CONFIGURE_MAXIMUM_PRIORITY
--------------------------
-CONSTANT:
- ``CONFIGURE_MAXIMUM_PRIORITY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_MAXIMUM_PRIORITY``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
-OPTION TYPE:
- This configuration option is an integer define.
+.. rubric:: DEFAULT VALUE:
-DEFAULT VALUE:
- The default value is 255.
+The default value is 255.
-VALUE CONSTRAINTS:
- The value of this configuration option shall be equal to 3, 7, 31, 63, 127,
- or 255.
+.. rubric:: DESCRIPTION:
-DESCRIPTION:
- For the following schedulers
+For the following schedulers
- * :ref:`SchedulerPriority`, which is the default in uniprocessor
- configurations and can be configured through the
- :ref:`CONFIGURE_SCHEDULER_PRIORITY` configuration option,
+* :ref:`SchedulerPriority`, which is the default in uniprocessor
+ configurations and can be configured through the
+ :ref:`CONFIGURE_SCHEDULER_PRIORITY` configuration option,
- * :ref:`SchedulerSMPPriority` which can be configured through the
- :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP` configuration option, and
+* :ref:`SchedulerSMPPriority` which can be configured through the
+ :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP` configuration option, and
- * :ref:`SchedulerSMPPriorityAffinity` which can be configured through the
- :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP` configuration option
+* :ref:`SchedulerSMPPriorityAffinity` which can be configured through the
+ :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP` configuration option
- this configuration option specifies the maximum numeric priority of any task
- for these schedulers and one less that the number of priority levels for
- these schedulers. For all other schedulers provided by RTEMS, this
- configuration option has no effect.
+this configuration option specifies the maximum numeric priority of any task
+for these schedulers and one less that the number of priority levels for
+these schedulers. For all other schedulers provided by RTEMS, this
+configuration option has no effect.
-NOTES:
- The numerically greatest priority is the logically lowest priority in the
- system and will thus be used by the IDLE task.
+.. rubric:: NOTES:
- Priority zero is reserved for internal use by RTEMS and is not available to
- applications.
+The numerically greatest priority is the logically lowest priority in the
+system and will thus be used by the IDLE task.
- Reducing the number of priorities through this configuration option reduces
- the amount of memory allocated by the schedulers listed above. These
- schedulers use a chain control structure per priority and this structure
- consists of three pointers. On a 32-bit architecture, the allocated memory
- is 12 bytes * (``CONFIGURE_MAXIMUM_PRIORITY`` + 1), e.g. 3072 bytes for 256
- priority levels (default), 48 bytes for 4 priority levels
- (``CONFIGURE_MAXIMUM_PRIORITY == 3``).
+Priority zero is reserved for internal use by RTEMS and is not available to
+applications.
- The default value is 255, because RTEMS shall support 256 priority levels to
- be compliant with various standards. These priorities range from 0 to 255.
+Reducing the number of priorities through this configuration option reduces
+the amount of memory allocated by the schedulers listed above. These
+schedulers use a chain control structure per priority and this structure
+consists of three pointers. On a 32-bit architecture, the allocated memory
+is 12 bytes * (``CONFIGURE_MAXIMUM_PRIORITY`` + 1), e.g. 3072 bytes for 256
+priority levels (default), 48 bytes for 4 priority levels
+(``CONFIGURE_MAXIMUM_PRIORITY == 3``).
+
+The default value is 255, because RTEMS shall support 256 priority levels to
+be compliant with various standards. These priorities range from 0 to 255.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be equal to 3, 7, 31, 63, 127, or
+255.
.. Generated from spec:/acfg/if/scheduler-assignments
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_ASSIGNMENTS
.. _CONFIGURE_SCHEDULER_ASSIGNMENTS:
@@ -155,41 +178,51 @@ NOTES:
CONFIGURE_SCHEDULER_ASSIGNMENTS
-------------------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_ASSIGNMENTS``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SCHEDULER_ASSIGNMENTS``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is an initializer define.
+This configuration option is an initializer define.
-DEFAULT VALUE:
- The default value of this configuration option is computed so that the
- default scheduler is assigned to each configured processor (up to 32).
+.. rubric:: DEFAULT VALUE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall satisfy all of the following
- constraints:
+The default value of this configuration option is computed so that the
+default scheduler is assigned to each configured processor (up to 32).
- * It shall be a list of the following macros:
+.. rubric:: DESCRIPTION:
- * ``RTEMS_SCHEDULER_ASSIGN( processor_index, attributes )``
+The value of this configuration option is used to initialize the initial
+scheduler to processor assignments.
- * ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
+.. rubric:: NOTES:
- * It shall be a list of exactly :ref:`CONFIGURE_MAXIMUM_PROCESSORS`
- elements.
+This configuration option is only evaluated in SMP configurations.
-DESCRIPTION:
- The value of this configuration option is used to initialize the initial
- scheduler to processor assignments.
+This is an advanced configuration option, see
+:ref:`ConfigurationSchedulersClustered`.
-NOTES:
- This configuration option is only evaluated in SMP configurations.
+.. rubric:: CONSTRAINTS:
- This is an advanced configuration option, see
- :ref:`ConfigurationSchedulersClustered`.
+The following constraints apply to this configuration option:
+
+* The value of the configuration option shall be a list of the following
+ macros:
+
+ * ``RTEMS_SCHEDULER_ASSIGN( processor_index, attributes )``
+
+ * ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
+
+* The value of the configuration option shall be a list of exactly
+ :ref:`CONFIGURE_MAXIMUM_PROCESSORS` elements.
.. Generated from spec:/acfg/if/scheduler-cbs
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_CBS
.. _CONFIGURE_SCHEDULER_CBS:
@@ -197,30 +230,39 @@ NOTES:
CONFIGURE_SCHEDULER_CBS
-----------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_CBS``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+``CONFIGURE_SCHEDULER_CBS``
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: OPTION TYPE:
-DESCRIPTION:
- In case this configuration option is defined, then the
- :ref:`SchedulerCBS`
- algorithm is made available to the application.
+This configuration option is a boolean feature define.
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+.. rubric:: DEFAULT CONFIGURATION:
- In case no explicit :ref:`ConfigurationSchedulersClustered`
- is present, then it is used as the scheduler for exactly one processor.
+If this configuration option is undefined, then the described feature is not
+enabled.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the
+:ref:`SchedulerCBS`
+algorithm is made available to the application.
+
+.. rubric:: NOTES:
+
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
+
+In case no explicit :ref:`ConfigurationSchedulersClustered`
+is present, then it is used as the scheduler for exactly one processor.
.. Generated from spec:/acfg/if/scheduler-edf
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_EDF
.. _CONFIGURE_SCHEDULER_EDF:
@@ -228,30 +270,39 @@ NOTES:
CONFIGURE_SCHEDULER_EDF
-----------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_EDF``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+``CONFIGURE_SCHEDULER_EDF``
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: OPTION TYPE:
-DESCRIPTION:
- In case this configuration option is defined, then the
- :ref:`SchedulerEDF`
- algorithm is made available to the application.
+This configuration option is a boolean feature define.
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+.. rubric:: DEFAULT CONFIGURATION:
- In case no explicit :ref:`ConfigurationSchedulersClustered`
- is present, then it is used as the scheduler for exactly one processor.
+If this configuration option is undefined, then the described feature is not
+enabled.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the
+:ref:`SchedulerEDF`
+algorithm is made available to the application.
+
+.. rubric:: NOTES:
+
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
+
+In case no explicit :ref:`ConfigurationSchedulersClustered`
+is present, then it is used as the scheduler for exactly one processor.
.. Generated from spec:/acfg/if/scheduler-edf-smp
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_EDF_SMP
.. _CONFIGURE_SCHEDULER_EDF_SMP:
@@ -259,37 +310,46 @@ NOTES:
CONFIGURE_SCHEDULER_EDF_SMP
---------------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_EDF_SMP``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SCHEDULER_EDF_SMP``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+If this configuration option is undefined, then the described feature is not
+enabled.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the
+:ref:`SchedulerSMPEDF`
+algorithm is made available to the application.
-DESCRIPTION:
- In case this configuration option is defined, then the
- :ref:`SchedulerSMPEDF`
- algorithm is made available to the application.
+.. rubric:: NOTES:
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
- This scheduler algorithm is only available when RTEMS is built with SMP
- support enabled.
+This scheduler algorithm is only available when RTEMS is built with SMP
+support enabled.
- In case no explicit :ref:`ConfigurationSchedulersClustered`
- is present, then it is used as the scheduler for up to 32 processors.
+In case no explicit :ref:`ConfigurationSchedulersClustered`
+is present, then it is used as the scheduler for up to 32 processors.
- This scheduler algorithm is the default in SMP configurations if
- :ref:`CONFIGURE_MAXIMUM_PROCESSORS` is
- greater than one.
+This scheduler algorithm is the default in SMP configurations if
+:ref:`CONFIGURE_MAXIMUM_PROCESSORS` is
+greater than one.
.. Generated from spec:/acfg/if/scheduler-name
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_NAME
.. _CONFIGURE_SCHEDULER_NAME:
@@ -297,49 +357,59 @@ NOTES:
CONFIGURE_SCHEDULER_NAME
------------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_NAME``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SCHEDULER_NAME``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an integer define.
+
+.. rubric:: DEFAULT VALUE:
-OPTION TYPE:
- This configuration option is an integer define.
+The default value is
-DEFAULT VALUE:
- The default value is
+* ``"MEDF"`` for the :ref:`SchedulerSMPEDF`,
- * ``"MEDF"`` for the :ref:`SchedulerSMPEDF`,
+* ``"MPA "`` for the :ref:`SchedulerSMPPriorityAffinity`,
- * ``"MPA "`` for the :ref:`SchedulerSMPPriorityAffinity`,
+* ``"MPD "`` for the :ref:`SchedulerSMPPriority`,
- * ``"MPD "`` for the :ref:`SchedulerSMPPriority`,
+* ``"MPS "`` for the :ref:`SchedulerSMPPrioritySimple`,
- * ``"MPS "`` for the :ref:`SchedulerSMPPrioritySimple`,
+* ``"UCBS"`` for the :ref:`SchedulerCBS`,
- * ``"UCBS"`` for the :ref:`SchedulerCBS`,
+* ``"UEDF"`` for the :ref:`SchedulerEDF`,
- * ``"UEDF"`` for the :ref:`SchedulerEDF`,
+* ``"UPD "`` for the :ref:`SchedulerPriority`, and
- * ``"UPD "`` for the :ref:`SchedulerPriority`, and
+* ``"UPS "`` for the :ref:`SchedulerPrioritySimple`.
- * ``"UPS "`` for the :ref:`SchedulerPrioritySimple`.
+.. rubric:: DESCRIPTION:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be convertible to an integer
- of type :c:type:`rtems_name`.
+The value of this configuration option defines the name of the default
+scheduler.
-DESCRIPTION:
- The value of this configuration option defines the name of the default
- scheduler.
+.. rubric:: NOTES:
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
- Schedulers can be identified via :c:func:`rtems_scheduler_ident`.
+Schedulers can be identified via :c:func:`rtems_scheduler_ident`.
- Use :c:func:`rtems_build_name` to define the scheduler name.
+Use :c:func:`rtems_build_name` to define the scheduler name.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be convertible to an integer of
+type :c:type:`rtems_name`.
.. Generated from spec:/acfg/if/scheduler-priority
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_PRIORITY
.. _CONFIGURE_SCHEDULER_PRIORITY:
@@ -347,37 +417,46 @@ NOTES:
CONFIGURE_SCHEDULER_PRIORITY
----------------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_PRIORITY``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SCHEDULER_PRIORITY``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT CONFIGURATION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+If this configuration option is undefined, then the described feature is not
+enabled.
-DESCRIPTION:
- In case this configuration option is defined, then the
- :ref:`SchedulerPriority`
- algorithm is made available to the application.
+.. rubric:: DESCRIPTION:
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+In case this configuration option is defined, then the
+:ref:`SchedulerPriority`
+algorithm is made available to the application.
- In case no explicit :ref:`ConfigurationSchedulersClustered`
- is present, then it is used as the scheduler for exactly one processor.
+.. rubric:: NOTES:
- This scheduler algorithm is the default when
- :ref:`CONFIGURE_MAXIMUM_PROCESSORS` is
- exactly one.
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
- The memory allocated for this scheduler depends on the
- :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
+In case no explicit :ref:`ConfigurationSchedulersClustered`
+is present, then it is used as the scheduler for exactly one processor.
+
+This scheduler algorithm is the default when
+:ref:`CONFIGURE_MAXIMUM_PROCESSORS` is
+exactly one.
+
+The memory allocated for this scheduler depends on the
+:ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
.. Generated from spec:/acfg/if/scheduler-priority-affinity-smp
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
.. _CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP:
@@ -385,36 +464,45 @@ NOTES:
CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
-----------------------------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the
- :ref:`SchedulerSMPPriorityAffinity`
- algorithm is made available to the application.
+If this configuration option is undefined, then the described feature is not
+enabled.
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+.. rubric:: DESCRIPTION:
- This scheduler algorithm is only available when RTEMS is built with SMP
- support enabled.
+In case this configuration option is defined, then the
+:ref:`SchedulerSMPPriorityAffinity`
+algorithm is made available to the application.
- In case no explicit :ref:`ConfigurationSchedulersClustered`
- is present, then it is used as the scheduler for up to 32 processors.
+.. rubric:: NOTES:
- The memory allocated for this scheduler depends on the
- :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
+
+This scheduler algorithm is only available when RTEMS is built with SMP
+support enabled.
+
+In case no explicit :ref:`ConfigurationSchedulersClustered`
+is present, then it is used as the scheduler for up to 32 processors.
+
+The memory allocated for this scheduler depends on the
+:ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
.. Generated from spec:/acfg/if/scheduler-priority-smp
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_PRIORITY_SMP
.. _CONFIGURE_SCHEDULER_PRIORITY_SMP:
@@ -422,36 +510,45 @@ NOTES:
CONFIGURE_SCHEDULER_PRIORITY_SMP
--------------------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_PRIORITY_SMP``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SCHEDULER_PRIORITY_SMP``
+
+.. rubric:: OPTION TYPE:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+This configuration option is a boolean feature define.
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: DEFAULT CONFIGURATION:
-DESCRIPTION:
- In case this configuration option is defined, then the
- :ref:`SchedulerSMPPriority`
- algorithm is made available to the application.
+If this configuration option is undefined, then the described feature is not
+enabled.
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+.. rubric:: DESCRIPTION:
- This scheduler algorithm is only available when RTEMS is built with SMP
- support enabled.
+In case this configuration option is defined, then the
+:ref:`SchedulerSMPPriority`
+algorithm is made available to the application.
- In case no explicit :ref:`ConfigurationSchedulersClustered`
- is present, then it is used as the scheduler for up to 32 processors.
+.. rubric:: NOTES:
- The memory allocated for this scheduler depends on the
- :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
+
+This scheduler algorithm is only available when RTEMS is built with SMP
+support enabled.
+
+In case no explicit :ref:`ConfigurationSchedulersClustered`
+is present, then it is used as the scheduler for up to 32 processors.
+
+The memory allocated for this scheduler depends on the
+:ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
.. Generated from spec:/acfg/if/scheduler-simple
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_SIMPLE
.. _CONFIGURE_SCHEDULER_SIMPLE:
@@ -459,30 +556,39 @@ NOTES:
CONFIGURE_SCHEDULER_SIMPLE
--------------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_SIMPLE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SCHEDULER_SIMPLE``
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: OPTION TYPE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+This configuration option is a boolean feature define.
-DESCRIPTION:
- In case this configuration option is defined, then the
- :ref:`SchedulerPrioritySimple`
- algorithm is made available to the application.
+.. rubric:: DEFAULT CONFIGURATION:
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+If this configuration option is undefined, then the described feature is not
+enabled.
- In case no explicit :ref:`ConfigurationSchedulersClustered`
- is present, then it is used as the scheduler for exactly one processor.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the
+:ref:`SchedulerPrioritySimple`
+algorithm is made available to the application.
+
+.. rubric:: NOTES:
+
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
+
+In case no explicit :ref:`ConfigurationSchedulersClustered`
+is present, then it is used as the scheduler for exactly one processor.
.. Generated from spec:/acfg/if/scheduler-simple-smp
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_SIMPLE_SMP
.. _CONFIGURE_SCHEDULER_SIMPLE_SMP:
@@ -490,33 +596,42 @@ NOTES:
CONFIGURE_SCHEDULER_SIMPLE_SMP
------------------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_SIMPLE_SMP``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SCHEDULER_SIMPLE_SMP``
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: OPTION TYPE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+This configuration option is a boolean feature define.
-DESCRIPTION:
- In case this configuration option is defined, then the
- :ref:`SchedulerSMPPrioritySimple`
- algorithm is made available to the application.
+.. rubric:: DEFAULT CONFIGURATION:
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+If this configuration option is undefined, then the described feature is not
+enabled.
- This scheduler algorithm is only available when RTEMS is built with SMP
- support enabled.
+.. rubric:: DESCRIPTION:
- In case no explicit :ref:`ConfigurationSchedulersClustered`
- is present, then it is used as the scheduler for up to 32 processors.
+In case this configuration option is defined, then the
+:ref:`SchedulerSMPPrioritySimple`
+algorithm is made available to the application.
+
+.. rubric:: NOTES:
+
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
+
+This scheduler algorithm is only available when RTEMS is built with SMP
+support enabled.
+
+In case no explicit :ref:`ConfigurationSchedulersClustered`
+is present, then it is used as the scheduler for up to 32 processors.
.. Generated from spec:/acfg/if/scheduler-strong-apa
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_STRONG_APA
.. _CONFIGURE_SCHEDULER_STRONG_APA:
@@ -524,31 +639,40 @@ NOTES:
CONFIGURE_SCHEDULER_STRONG_APA
------------------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_STRONG_APA``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is a boolean feature define.
+``CONFIGURE_SCHEDULER_STRONG_APA``
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+.. rubric:: OPTION TYPE:
-DESCRIPTION:
- In case this configuration option is defined, then the Strong APA algorithm
- is made available to the application.
+This configuration option is a boolean feature define.
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+.. rubric:: DEFAULT CONFIGURATION:
- This scheduler algorithm is only available when RTEMS is built with SMP
- support enabled.
+If this configuration option is undefined, then the described feature is not
+enabled.
- This scheduler algorithm is not correctly implemented. Do not use it.
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the Strong APA algorithm
+is made available to the application.
+
+.. rubric:: NOTES:
+
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
+
+This scheduler algorithm is only available when RTEMS is built with SMP
+support enabled.
+
+This scheduler algorithm is not correctly implemented. Do not use it.
.. Generated from spec:/acfg/if/scheduler-user
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_SCHEDULER_USER
.. _CONFIGURE_SCHEDULER_USER:
@@ -556,42 +680,47 @@ NOTES:
CONFIGURE_SCHEDULER_USER
------------------------
-CONSTANT:
- ``CONFIGURE_SCHEDULER_USER``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_SCHEDULER_USER``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DESCRIPTION:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+In case this configuration option is defined, then the user shall provide a
+scheduler algorithm to the application.
-DESCRIPTION:
- In case this configuration option is defined, then the user shall provide a
- scheduler algorithm to the application.
+.. rubric:: NOTES:
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
+This scheduler configuration option is an advanced configuration option.
+Think twice before you use it.
- RTEMS allows the application to provide its own task/thread scheduling
- algorithm. In order to do this, one shall define
- ``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
- scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
- following additional macros shall be defined:
+RTEMS allows the application to provide its own task/thread scheduling
+algorithm. In order to do this, one shall define
+``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
+scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
+following additional macros shall be defined:
- * ``CONFIGURE_SCHEDULER`` shall be defined to a static definition of
- the scheduler data structures of the user scheduler.
+* ``CONFIGURE_SCHEDULER`` shall be defined to a static definition of
+ the scheduler data structures of the user scheduler.
- * ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` shall be defined to a scheduler
- table entry initializer for the user scheduler.
+* ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` shall be defined to a scheduler
+ table entry initializer for the user scheduler.
- * ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` shall be defined to the type of
- the per-thread information of the user scheduler.
+* ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` shall be defined to the type of
+ the per-thread information of the user scheduler.
- At this time, the mechanics and requirements for writing a new scheduler
- are evolving and not fully documented. It is recommended that you look at
- the existing Deterministic Priority Scheduler in
- ``cpukit/score/src/schedulerpriority*.c`` for guidance. For guidance on
- the configuration macros, please examine ``cpukit/sapi/include/confdefs.h``
- for how these are defined for the Deterministic Priority Scheduler.
+At this time, the mechanics and requirements for writing a new scheduler
+are evolving and not fully documented. It is recommended that you look at
+the existing Deterministic Priority Scheduler in
+``cpukit/score/src/schedulerpriority*.c`` for guidance. For guidance on
+the configuration macros, please examine ``cpukit/sapi/include/confdefs.h``
+for how these are defined for the Deterministic Priority Scheduler.
diff --git a/c-user/config/task-stack-alloc.rst b/c-user/config/task-stack-alloc.rst
index 3f779ff..187bff5 100644
--- a/c-user/config/task-stack-alloc.rst
+++ b/c-user/config/task-stack-alloc.rst
@@ -1,7 +1,7 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
.. Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
-.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+.. Copyright (C) 1988, 2021 On-Line Applications Research Corporation (OAR)
.. This file is part of the RTEMS quality process and was automatically
.. generated. If you find something that needs to be fixed or
@@ -31,6 +31,10 @@ overflows are detected in hardware.
.. Generated from spec:/acfg/if/task-stack-allocator
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_TASK_STACK_ALLOCATOR
.. index:: task stack allocator
@@ -39,35 +43,45 @@ overflows are detected in hardware.
CONFIGURE_TASK_STACK_ALLOCATOR
------------------------------
-CONSTANT:
- ``CONFIGURE_TASK_STACK_ALLOCATOR``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_TASK_STACK_ALLOCATOR``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an initializer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is ``_Workspace_Allocate``, which indicates that task
+stacks will be allocated from the RTEMS Workspace.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an initializer define.
+The value of this configuration option initializes the stack allocator
+allocate handler.
-DEFAULT VALUE:
- The default value is ``_Workspace_Allocate``, which indicates that task
- stacks will be allocated from the RTEMS Workspace.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be defined to a valid function
- pointer of the type ``void *( *allocate )( size_t )``.
+A correctly configured system shall configure the following to be consistent:
-DESCRIPTION:
- The value of this configuration option initializes the stack allocator
- allocate handler.
+* :ref:`CONFIGURE_TASK_STACK_ALLOCATOR_INIT`
-NOTES:
- A correctly configured system shall configure the following to be consistent:
+* ``CONFIGURE_TASK_STACK_ALLOCATOR``
- * :ref:`CONFIGURE_TASK_STACK_ALLOCATOR_INIT`
+* :ref:`CONFIGURE_TASK_STACK_DEALLOCATOR`
- * ``CONFIGURE_TASK_STACK_ALLOCATOR``
+.. rubric:: CONSTRAINTS:
- * :ref:`CONFIGURE_TASK_STACK_DEALLOCATOR`
+The value of the configuration option shall be defined to a valid function
+pointer of the type ``void *( *allocate )( size_t )``.
.. Generated from spec:/acfg/if/task-stack-no-workspace
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
.. _CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE:
@@ -75,26 +89,81 @@ NOTES:
CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
------------------------------------------------
-CONSTANT:
- ``CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is a boolean feature define.
+
+.. rubric:: DEFAULT CONFIGURATION:
+
+If this configuration option is undefined, then the described feature is not
+enabled.
+
+.. rubric:: DESCRIPTION:
+
+In case this configuration option is defined, then the system is informed
+that the task stack allocator does not use the RTEMS Workspace.
+
+.. rubric:: NOTES:
+
+This configuration option may be used if a custom task stack allocator is
+configured, see :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`.
+
+.. Generated from spec:/acfg/if/task-stack-allocator-for-idle
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE
+.. index:: task stack allocator for IDLE tasks
+
+.. _CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE:
+
+CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE
+---------------------------------------
+
+.. rubric:: CONSTANT:
+
+``CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an initializer define.
-OPTION TYPE:
- This configuration option is a boolean feature define.
+.. rubric:: DEFAULT VALUE:
-DEFAULT CONFIGURATION:
- If this configuration option is undefined, then the described feature is not
- enabled.
+The default value is ``_Stack_Allocator_allocate_for_idle_default``, which
+indicates that IDLE task stacks will be allocated from an area statically
+allocated by ``<rtems/confdefs.h>``.
-DESCRIPTION:
- In case this configuration option is defined, then the system is informed
- that the task stack allocator does not use the RTEMS Workspace.
+.. rubric:: DESCRIPTION:
-NOTES:
- This configuration option may be used if a custom task stack allocator is
- configured, see :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`.
+The value of this configuration option is the address for the stack allocator
+allocate handler used to allocate the task stack of each
+:term:`IDLE task`.
+
+.. rubric:: NOTES:
+
+This configuration option is independent of the other thread stack allocator
+configuration options. It is assumed that any memory allocated for the stack
+of an :term:`IDLE task` will not be from the RTEMS Workspace or the
+memory statically allocated by default.
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be defined to a valid function
+pointer of the type ``void *( *allocate )( uint32_t, size_t )``.
.. Generated from spec:/acfg/if/task-stack-allocator-init
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_INIT
.. _CONFIGURE_TASK_STACK_ALLOCATOR_INIT:
@@ -102,35 +171,45 @@ NOTES:
CONFIGURE_TASK_STACK_ALLOCATOR_INIT
-----------------------------------
-CONSTANT:
- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
-OPTION TYPE:
- This configuration option is an initializer define.
+.. rubric:: OPTION TYPE:
-DEFAULT VALUE:
- The default value is `NULL <https://en.cppreference.com/w/c/types/NULL>`_.
+This configuration option is an initializer define.
-VALUE CONSTRAINTS:
- The value of this configuration option shall be defined to a valid function
- pointer of the type ``void ( *initialize )( size_t )`` or to `NULL
- <https://en.cppreference.com/w/c/types/NULL>`_.
+.. rubric:: DEFAULT VALUE:
-DESCRIPTION:
- The value of this configuration option initializes the stack allocator
- initialization handler.
+The default value is `NULL <https://en.cppreference.com/w/c/types/NULL>`_.
-NOTES:
- A correctly configured system shall configure the following to be consistent:
+.. rubric:: DESCRIPTION:
- * ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
+The value of this configuration option initializes the stack allocator
+initialization handler.
- * :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`
+.. rubric:: NOTES:
- * :ref:`CONFIGURE_TASK_STACK_DEALLOCATOR`
+A correctly configured system shall configure the following to be consistent:
+
+* ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
+
+* :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`
+
+* :ref:`CONFIGURE_TASK_STACK_DEALLOCATOR`
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be defined to a valid function
+pointer of the type ``void ( *initialize )( size_t )`` or to `NULL
+<https://en.cppreference.com/w/c/types/NULL>`_.
.. Generated from spec:/acfg/if/task-stack-deallocator
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_TASK_STACK_DEALLOCATOR
.. index:: task stack deallocator
@@ -139,35 +218,45 @@ NOTES:
CONFIGURE_TASK_STACK_DEALLOCATOR
--------------------------------
-CONSTANT:
- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
+.. rubric:: CONSTANT:
-OPTION TYPE:
- This configuration option is an initializer define.
+``CONFIGURE_TASK_STACK_DEALLOCATOR``
-DEFAULT VALUE:
- The default value is ``_Workspace_Free``, which indicates that task stacks
- will be allocated from the RTEMS Workspace.
+.. rubric:: OPTION TYPE:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be defined to a valid function
- pointer of the type ``void ( *deallocate )( void * )``.
+This configuration option is an initializer define.
-DESCRIPTION:
- The value of this configuration option initializes the stack allocator
- deallocate handler.
+.. rubric:: DEFAULT VALUE:
-NOTES:
- A correctly configured system shall configure the following to be consistent:
+The default value is ``_Workspace_Free``, which indicates that task stacks
+will be allocated from the RTEMS Workspace.
- * :ref:`CONFIGURE_TASK_STACK_ALLOCATOR_INIT`
+.. rubric:: DESCRIPTION:
- * :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`
+The value of this configuration option initializes the stack allocator
+deallocate handler.
- * ``CONFIGURE_TASK_STACK_DEALLOCATOR``
+.. rubric:: NOTES:
+
+A correctly configured system shall configure the following to be consistent:
+
+* :ref:`CONFIGURE_TASK_STACK_ALLOCATOR_INIT`
+
+* :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`
+
+* ``CONFIGURE_TASK_STACK_DEALLOCATOR``
+
+.. rubric:: CONSTRAINTS:
+
+The value of the configuration option shall be defined to a valid function
+pointer of the type ``void ( *deallocate )( void * )``.
.. Generated from spec:/acfg/if/task-stack-from-alloc
+.. raw:: latex
+
+ \clearpage
+
.. index:: CONFIGURE_TASK_STACK_FROM_ALLOCATOR
.. index:: task stack allocator
@@ -176,26 +265,31 @@ NOTES:
CONFIGURE_TASK_STACK_FROM_ALLOCATOR
-----------------------------------
-CONSTANT:
- ``CONFIGURE_TASK_STACK_FROM_ALLOCATOR``
+.. rubric:: CONSTANT:
+
+``CONFIGURE_TASK_STACK_FROM_ALLOCATOR``
+
+.. rubric:: OPTION TYPE:
+
+This configuration option is an initializer define.
+
+.. rubric:: DEFAULT VALUE:
+
+The default value is a macro which supports the system heap allocator.
+
+.. rubric:: DESCRIPTION:
-OPTION TYPE:
- This configuration option is an initializer define.
+The value of this configuration option is used to calculate the task stack
+space size.
-DEFAULT VALUE:
- The default value is a macro which supports the system heap allocator.
+.. rubric:: NOTES:
-VALUE CONSTRAINTS:
- The value of this configuration option shall be defined to a macro which
- accepts exactly one parameter and returns an unsigned integer. The
- parameter will be an allocation size and the macro shall return this size
- plus the overhead of the allocator to manage an allocation request for this
- size.
+This configuration option may be used if a custom task stack allocator is
+configured, see :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`.
-DESCRIPTION:
- The value of this configuration option is used to calculate the task stack
- space size.
+.. rubric:: CONSTRAINTS:
-NOTES:
- This configuration option may be used if a custom task stack allocator is
- configured, see :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`.
+The value of the configuration option shall be defined to a macro which accepts
+exactly one parameter and returns an unsigned integer. The parameter will be
+an allocation size and the macro shall return this size plus the overhead of
+the allocator to manage an allocation request for this size.
diff --git a/c-user/glossary.rst b/c-user/glossary.rst
index 9274cf3..4474848 100644
--- a/c-user/glossary.rst
+++ b/c-user/glossary.rst
@@ -101,9 +101,21 @@ Glossary
C++11
The standard ISO/IEC 14882:2011.
+ C++14
+ The standard ISO/IEC 14882:2014.
+
+ C++17
+ The standard ISO/IEC 14882:2017.
+
+ C++20
+ The standard ISO/IEC 14882:2020.
+
C11
The standard ISO/IEC 9899:2011.
+ C17
+ The standard ISO/IEC 9899:2018.
+
calling convention
The processor and compiler dependent rules which define the mechanism
used to invoke subroutines in a high-level language. These rules define
@@ -250,6 +262,9 @@ Glossary
EARS
This term is an acronym for Easy Approach to Requirements Syntax.
+ EDF
+ This term is an acronym for Earliest Deadline First.
+
ELF
This term is an acronym for
`Executable and Linkable Format <https://en.wikipedia.org/wiki/Executable_and_Linkable_Format>`_.
@@ -345,6 +360,14 @@ Glossary
freed
A resource that has been released by the application to RTEMS.
+ Futex
+ This term is an abbreviation for
+ `Fast User-Space Locking <https://man7.org/linux/man-pages/man2/futex.2.html>`_.
+ The futex support in RTEMS is provided for the barriers of the
+ :term:`OpenMP` library provided by :term:`GCC`. It could be used to
+ implement high performance :term:`SMP` synchronization primitives which
+ offer random-fairness.
+
GCC
This term is an acronym for `GNU Compiler Collection <https://gcc.gnu.org/>`_.
@@ -543,6 +566,9 @@ Glossary
This term is an acronym for
:term:`Multiprocessor Communications Interface Layer`.
+ MrsP
+ This term is an acronym for Multiprocessor Resource-Sharing Protocol.
+
multiprocessing
The simultaneous execution of two or more processes by a multiple
processor computer system.
@@ -600,6 +626,16 @@ Glossary
variety of entities. Object-oriented systems shield the application from
implementation details.
+ OMIP
+ This term is an acronym for O(m) Independence-Preserving Protocol. OMIP is a
+ generalization of the :term:`priority inheritance` locking protocol to
+ clustered scheduling. The ``m`` denotes the number of processors in the
+ system.
+
+ OpenMP
+ This term is an acronym for
+ `Open Multi-Processing <https://www.openmp.org/>`_.
+
operating system
The software which controls all the computer's resources and provides the
base upon which application programs can be written.
diff --git a/c-user/message/directives.rst b/c-user/message/directives.rst
index 7317eb4..70a22d3 100644
--- a/c-user/message/directives.rst
+++ b/c-user/message/directives.rst
@@ -1014,8 +1014,8 @@ Flushes all messages on the queue.
``count``
This parameter is the pointer to an `uint32_t
<https://en.cppreference.com/w/c/types/integer>`_ object. When the
- directive call is successful, the number of unblocked tasks will be stored
- in this object.
+ directive call is successful, the number of pending messages removed from
+ the queue will be stored in this object.
.. rubric:: DESCRIPTION:
diff --git a/c-user/rate-monotonic/directives.rst b/c-user/rate-monotonic/directives.rst
index 2e48aac..b7374ff 100644
--- a/c-user/rate-monotonic/directives.rst
+++ b/c-user/rate-monotonic/directives.rst
@@ -366,6 +366,11 @@ length of the period.
:c:macro:`RTEMS_TIMEOUT`
The rate monotonic period has expired.
+.. rubric:: NOTES:
+
+Resetting the processor usage time of tasks has no impact on the period status
+and statistics.
+
.. rubric:: CONSTRAINTS:
The following constraints apply to this directive:
@@ -448,10 +453,6 @@ members of the period status object referenced by ``status``:
The ``status`` parameter was `NULL
<https://en.cppreference.com/w/c/types/NULL>`_.
-:c:macro:`RTEMS_NOT_DEFINED`
- There was no status available due to a reset of the processor time usage of
- the owner task of the period.
-
.. rubric:: CONSTRAINTS:
The following constraints apply to this directive:
diff --git a/c-user/scheduling-concepts/directives.rst b/c-user/scheduling-concepts/directives.rst
index aa0300e..1827060 100644
--- a/c-user/scheduling-concepts/directives.rst
+++ b/c-user/scheduling-concepts/directives.rst
@@ -683,9 +683,12 @@ scheduler specified by ``scheduler_id``.
The processor was not owned by the scheduler.
:c:macro:`RTEMS_RESOURCE_IN_USE`
- The set of processors owned by the scheduler would have been empty after
- the processor removal and there was at least one non-idle task that used
- this scheduler as its :term:`home scheduler`.
+ The processor was required by at least one non-idle task that used the
+ scheduler as its :term:`home scheduler`.
+
+:c:macro:`RTEMS_RESOURCE_IN_USE`
+ The processor was the last processor owned by the scheduler and there was
+ at least one task that used the scheduler as a :term:`helping scheduler`.
.. rubric:: NOTES:
diff --git a/c-user/task/directives.rst b/c-user/task/directives.rst
index e544525..ce2013c 100644
--- a/c-user/task/directives.rst
+++ b/c-user/task/directives.rst
@@ -484,8 +484,8 @@ Identifies a task by the object name.
This directive obtains a task identifier associated with the task name
specified in ``name``.
-A task may obtain its own identifier by specifying :c:macro:`RTEMS_SELF` for
-the name.
+A task may obtain its own identifier by specifying :c:macro:`RTEMS_WHO_AM_I`
+for the name.
The node to search is specified in ``node``. It shall be
diff --git a/common/coverpage/static/js/jquery.min.js b/common/coverpage/static/js/jquery.min.js
index e836475..c4c6022 100644
--- a/common/coverpage/static/js/jquery.min.js
+++ b/common/coverpage/static/js/jquery.min.js
@@ -1,5 +1,2 @@
-/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
-}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
-marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
-padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
+/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
diff --git a/cpu-supplement/aarch64.rst b/cpu-supplement/aarch64.rst
index a102817..2b3d620 100644
--- a/cpu-supplement/aarch64.rst
+++ b/cpu-supplement/aarch64.rst
@@ -9,7 +9,7 @@ This chapter discusses the dependencies of the
*ARM AArch64 architecture*
(https://en.wikipedia.org/wiki/ARM_architecture#AArch64_features) in this port
of RTEMS. The ARMv8-A versions are supported by RTEMS. Processors with a MMU
-use a static configuration which is set up during system start. SMP is not
+use a static configuration which is set up during system start. SMP is
supported.
**Architecture Documents**
@@ -124,7 +124,9 @@ actions:
Symmetric Multiprocessing
=========================
-SMP is not currently supported on ARMv8-A.
+SMP is supported on ARMv8-A. Available platforms are:
+
+- Xilinx ZynqMP (QEMU and hardware using PSCI via ARM Trusted Firmware)
Thread-Local Storage
====================
diff --git a/cpu-supplement/sparc.rst b/cpu-supplement/sparc.rst
index f3851dc..11b63d9 100644
--- a/cpu-supplement/sparc.rst
+++ b/cpu-supplement/sparc.rst
@@ -1,5 +1,6 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
+.. Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
.. Copyright (C) 1988, 2002 On-Line Applications Research Corporation (OAR)
SPARC Specific Information
@@ -25,7 +26,7 @@ to that processor.
**SPARC Architecture Documents**
For information on the SPARC architecture, refer to the following documents
-available from SPARC International, Inc. (http://www.sparc.com):
+available from SPARC International, Inc. (`<https://sparc.org/>`_):
- SPARC Standard Version 7.
@@ -285,11 +286,11 @@ Special Registers
~~~~~~~~~~~~~~~~~
The SPARC architecture includes two special registers which are critical to the
-programming model: the Processor State Register (psr) and the Window Invalid
-Mask (wim). The psr contains the condition codes, processor interrupt level,
+programming model: the Processor State Register (``PSR``) and the Window Invalid
+Mask (``WIM``). The ``PSR`` contains the condition codes, processor interrupt level,
trap enable bit, supervisor mode and previous supervisor mode bits, version
information, floating point unit and coprocessor enable bits, and the current
-window pointer (cwp). The cwp field of the psr and wim register are used to
+window pointer (``CWP``). The ``CWP`` field of the ``PSR`` and ``WIM`` register are used to
manage the register windows in the SPARC architecture. The register windows
are discussed in more detail below.
@@ -330,15 +331,15 @@ underflow condition must be handled in software by a trap handler. The window
underflow trap handler is responsible for reloading the contents of the
register window requested by the restore instruction from the program stack.
-The Window Invalid Mask (wim) and the Current Window Pointer (cwp) field in the
-psr are used in conjunction to manage the finite set of register windows and
-detect the window overflow and underflow conditions. The cwp contains the
+The Window Invalid Mask (``WIM``) and the Current Window Pointer (``CWP``) field in the
+``PSR`` are used in conjunction to manage the finite set of register windows and
+detect the window overflow and underflow conditions. The ``CWP`` contains the
index of the register window currently in use. The save instruction decrements
-the cwp modulo the number of register windows. Similarly, the restore
-instruction increments the cwp modulo the number of register windows. Each bit
-in the wim represents represents whether a register window contains valid
+the ``CWP`` modulo the number of register windows. Similarly, the restore
+instruction increments the ``CWP`` modulo the number of register windows. Each bit
+in the ``WIM`` represents represents whether a register window contains valid
information. The value of 0 indicates the register window is valid and 1
-indicates it is invalid. When a save instruction causes the cwp to point to a
+indicates it is invalid. When a save instruction causes the ``CWP`` to point to a
register window which is marked as invalid, a window overflow condition
results. Conversely, the restore instruction may result in a window underflow
condition.
@@ -346,8 +347,8 @@ condition.
Other than the assumption that a register window is always available for trap
(i.e. interrupt) handlers, the SPARC architecture places no limits on the
number of register windows simultaneously marked as invalid (i.e. number of
-bits set in the wim). However, RTEMS assumes that only one register window is
-marked invalid at a time (i.e. only one bit set in the wim). This makes the
+bits set in the ``WIM``). However, RTEMS assumes that only one register window is
+marked invalid at a time (i.e. only one bit set in the ``WIM``). This makes the
maximum possible number of register windows available to the user while still
meeting the requirement that window overflow and underflow conditions can be
detected.
@@ -356,7 +357,7 @@ The window overflow and window underflow trap handlers are a critical part of
the run-time environment for a SPARC application. The SPARC architectural
specification allows for the number of register windows to be any power of two
less than or equal to 32. The most common choice for SPARC implementations
-appears to be 8 register windows. This results in the cwp ranging in value
+appears to be 8 register windows. This results in the ``CWP`` ranging in value
from 0 to 7 on most implementations.
The second complicating factor is the sharing of registers between adjacent
@@ -563,35 +564,52 @@ state changes occur in the processor itself. The return address reported by
the processor for synchronous traps is the instruction which caused the trap
and the following instruction.
+Trap Table
+----------
+
+A SPARC processor uses a trap table to execute the trap handler associated with
+a trap. The trap table location is defined by the Trap Base Register
+(``TBR``). The trap table has 256 entries. Each entry has space for four
+instructions (16 bytes). RTEMS uses a statically initialized trap table. The
+start address of the trap table is associated with the ``trap_table`` global
+symbol. The first action of the system initialization (entry points ``_start``
+and ``hard_reset``) is to set the ``TBR`` to ``trap_table``. The interrupt
+traps (trap numbers 16 to 31) are connected with the RTEMS interrupt handling.
+Some traps are connected to standard services defined by the SPARC
+architecture, for example the window overflow, underflow, and flush handling.
+Most traps are connected to a fatal error handler. The fatal error trap
+handler saves the processor context to an exception frame and starts the system
+termination procedure.
+
Vectoring of Interrupt Handler
------------------------------
-Upon receipt of an interrupt the SPARC automatically performs the following
-actions:
+Upon receipt of an interrupt a SPARC processor automatically performs the
+following actions:
-- disables traps (sets the ET bit of the psr to 0),
+- disables traps (sets the ``PSR.ET`` bit to 0 in the ``PSR``),
-- the S bit of the psr is copied into the Previous Supervisor Mode (PS) bit of
- the psr,
+- the ``PSR.S`` bit is copied into the Previous Supervisor Mode (``PSR.PS``)
+ bit in the ``PSR``,
-- the cwp is decremented by one (modulo the number of register windows) to
+- the ``CWP`` is decremented by one (modulo the number of register windows) to
activate a trap window,
-- the PC and nPC are loaded into local register 1 and 2 (l0 and l1),
+- the PC and nPC are loaded into local register 1 and 2 (``%l0`` and ``%l1``),
-- the trap type (tt) field of the Trap Base Register (TBR) is set to the
- appropriate value, and
+- the trap type (``tt``) field of the Trap Base Register (``TBR``) is set to
+ the appropriate value, and
- if the trap is not a reset, then the PC is written with the contents of the
- TBR and the nPC is written with TBR + 4. If the trap is a reset, then the PC
- is set to zero and the nPC is set to 4.
+ ``TBR`` and the nPC is written with ``TBR`` + 4. If the trap is a reset,
+ then the PC is set to zero and the nPC is set to 4.
Trap processing on the SPARC has two features which are noticeably different
-than interrupt processing on other architectures. First, the value of psr
+than interrupt processing on other architectures. First, the value of ``PSR``
register in effect immediately before the trap occurred is not explicitly
saved. Instead only reversible alterations are made to it. Second, the
-Processor Interrupt Level (pil) is not set to correspond to that of the
-interrupt being processed. When a trap occurs, ALL subsequent traps are
+Processor Interrupt Level (``PSR.PIL``) is not set to correspond to that of the
+interrupt being processed. When a trap occurs, **all** subsequent traps are
disabled. In order to safely invoke a subroutine during trap handling, traps
must be enabled to allow for the possibility of register window overflow and
underflow traps.
@@ -698,15 +716,16 @@ Interrupt Stack
The SPARC architecture does not provide for a dedicated interrupt stack. Thus
by default, trap handlers would execute on the stack of the RTEMS task which
they interrupted. This artificially inflates the stack requirements for each
-task since EVERY task stack would have to include enough space to account for
-the worst case interrupt stack requirements in addition to it's own worst case
-usage. RTEMS addresses this problem on the SPARC by providing a dedicated
+task since **every** task stack would have to include enough space to account
+for the worst case interrupt stack requirements in addition to it's own worst
+case usage. RTEMS addresses this problem on the SPARC by providing a dedicated
interrupt stack managed by software.
-During system initialization, RTEMS allocates the interrupt stack from the
-Workspace Area. The amount of memory allocated for the interrupt stack is
-determined by the interrupt_stack_size field in the CPU Configuration Table.
-As part of processing a non-nested interrupt, RTEMS will switch to the
+The interrupt stack is statically allocated by RTEMS. There is one interrupt
+stack for each configured processor. The interrupt stack is used to initialize
+the system. The amount of memory allocated for the interrupt stack is
+determined by the ``CONFIGURE_INTERRUPT_STACK_SIZE`` application configuration
+option. As part of processing a non-nested interrupt, RTEMS will switch to the
interrupt stack before invoking the installed handler.
Default Fatal Error Processing
@@ -764,27 +783,27 @@ An RTEMS based application is initiated or re-initiated when the SPARC
processor is reset. When the SPARC is reset, the processor performs the
following actions:
-- the enable trap (ET) of the psr is set to 0 to disable traps,
+- the enable trap (ET) of the ``PSR`` is set to 0 to disable traps,
-- the supervisor bit (S) of the psr is set to 1 to enter supervisor mode, and
+- the supervisor bit (S) of the ``PSR`` is set to 1 to enter supervisor mode, and
- the PC is set 0 and the nPC is set to 4.
The processor then begins to execute the code at location 0. It is important
-to note that all fields in the psr are not explicitly set by the above steps
+to note that all fields in the ``PSR`` are not explicitly set by the above steps
and all other registers retain their value from the previous execution mode.
-This is true even of the Trap Base Register (TBR) whose contents reflect the
+This is true even of the Trap Base Register (``TBR``) whose contents reflect the
last trap which occurred before the reset.
Processor Initialization
------------------------
It is the responsibility of the application's initialization code to initialize
-the TBR and install trap handlers for at least the register window overflow and
+the ``TBR`` and install trap handlers for at least the register window overflow and
register window underflow conditions. Traps should be enabled before invoking
any subroutines to allow for register window management. However, interrupts
should be disabled by setting the Processor Interrupt Level (pil) field of the
-psr to 15. RTEMS installs it's own Trap Table as part of initialization which
+``PSR`` to 15. RTEMS installs it's own Trap Table as part of initialization which
is initialized with the contents of the Trap Table in place when the
``rtems_initialize_executive`` directive was invoked. Upon completion of
executive initialization, interrupts are enabled.
diff --git a/user/hosts/posix.rst b/user/hosts/posix.rst
index 6686fc9..818eb25 100644
--- a/user/hosts/posix.rst
+++ b/user/hosts/posix.rst
@@ -195,6 +195,13 @@ The RTEMS Source Builder has been tested on FreeBSD 9.1, 10.3, 11 and
# pkg install -y python
# pkg install -y gsed
+For FreeBSD 13, you will need to install the packages listed above, as well as
+the following additional ones. They are:
+
+.. code-block:: none
+
+ # pkg install -y bison texinfo gmake binutils
+
FreeBSD's default C compiler is LLVM and installing the host's GCC compiler
package may break building GCC. We recommend you do not install the GCC
package and you use the default C compiler.
diff --git a/user/testing/configuration.rst b/user/testing/configuration.rst
index 9c65506..4d67482 100644
--- a/user/testing/configuration.rst
+++ b/user/testing/configuration.rst
@@ -1,6 +1,6 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
-.. Copyright (C) 2018 Chris Johns <chrisj@rtems.org>
+.. Copyright (C) 2018,2021 Chris Johns <chrisj@rtems.org>
Tester Configuration
--------------------
@@ -226,9 +226,10 @@ supported directives are:
- ``%execute``
- ``%gdb``
- ``%tftp``
+- ``%wait``
-.. _tester-config-console:
.. index:: Console, %console
+.. _tester-config-console:
Console
~~~~~~~
@@ -278,10 +279,12 @@ configuration script. If the ``%{console_stdio}`` is defined the console will
be ``stdio`` else the console will be the BSP console or ``%{bsp_tty_dev}``.
Telnet can be combined with the ``ser2net`` daemon to remotely access a
-target's physical serial UART interface.
+target's physical serial UART interface. The syntax is ``host:port``::
+
+ %define bsp_tty_dev 1.2.3.4:8989
-.. _tester-config-execute:
.. index:: Execute, %execute
+.. _tester-config-execute:
Execute
~~~~~~~
@@ -297,8 +300,8 @@ An example is::
%execute %{run_cmd} %{run_opts} %{test_executable} %{test_executable_opts}
-.. _tester-config-gdb:
.. index:: GDB, %gdb
+.. _tester-config-gdb:
GDB
~~~
@@ -313,8 +316,8 @@ An example is::
%gdb %{gdb_cmd} %{test_executable} %{gdb_script}
-.. _tester-config-tftp:
.. index:: TFTP, %tftp
+.. _tester-config-tftp:
TFTP
~~~~
@@ -328,3 +331,72 @@ board running the test.
An example is::
%tftp %{test_executable} %{tftp_port}
+
+The RTEMS Tester contains a TFTP server so an external TFTP is not
+needed. It is recommended a TFTP Proxy is set up to handle the TFTP
+sessions for your network. The internal TFTP server ignores the
+requrest file and serves the next executable. If the target requires
+the executable ne in a specific format provide a script via the
+``target_pretest_command`` option in your user configuration file.
+
+The RTEMS Tools provides a TFTP protocol proxy server. It takes a list
+of MAC addresses and proxies TFTP sessions for that MAC address to
+another IP address and port. A proxy provides the following benefits:
+
+1. The TFTP proxy server is the only software required to run as root
+
+2. All hardware targets can be configured to serve from a single
+ machine and the proxy can distribute the sessions out to developer
+ machines
+
+3. There is no need to provide a globally writable file system a
+ central TFTP server acceses
+
+If you have a central TFTP server refer to the ``%wait`` directive.
+
+.. index:: Wait, %wait
+.. _tester-config-wait:
+
+Wait
+~~~~
+
+The ``%wait`` directive waits the timeout period for a test to
+complete. The directive monitors the console output and resets the
+timeout timer if console output is seen. If the test runs for too long
+while outputing data an error is reported.
+
+The wait directive can be used in systems where there is an external
+mechanism being used to send the executable to the target hardware.
+
+An example is::
+
+ %wait
+
+Wait has no options. The timeouts are controlled in other ways.
+
+If you have an external system wide TFTP server with global access
+wait can used by providing a `` script that places the file in the
+location the TFTP server can see. This is done as the test start so if
+networking loading there is normally enough time to get the executable
+image in place before the transfer starts. The MVME2700
+(``powerpc/mvme2307``) is a BSP that supports the ``%wait`` directive.
+
+The following is an example user configuration file (see
+``--user-config``)::
+
+ #
+ # MVME2700 (mvme2307)
+ #
+ [mvme2307]
+ bsp_tty_dev = 1.2.3.4:5678
+ target_pretest_command = mk-mvme2307-img @EXE@ /tftp/cjohns/rtems.img
+ target_exe_filter = /\.exe/.exe.img/
+ target_on_command = pw-ctl 1.2.3.4 toggle-on 3 1
+ target_off_command = pw-ctl 1.2.3.4 off 3
+ target_reset_command = pw-ctl 1.2.3.4 toggle-on 3 1
+
+The script ``mk-mvme2307-img`` converts the RTEMS ELF executable into
+the PowerPC prep bootloader format and copies the file to the TFTP
+server's network wide location. The MVME2700 is configured to request
+``rtems.img`` from this location. The command ``pw-ctl`` is a command
+to control the power to the board.
diff --git a/user/testing/tftp.rst b/user/testing/tftp.rst
index ade8f9a..4cb16ef 100644
--- a/user/testing/tftp.rst
+++ b/user/testing/tftp.rst
@@ -10,10 +10,14 @@ TFTP and U-Boot
.. index:: TFTP, U-Boot, Testing
TFTP and U-Boot provides a simple way to test RTEMS on a network capable
-target. The RTEMS Tester starts a TFTP server for each test and the target's
-boot monitor, in this case U-Boot request a file, any file, which the TFTP
-server supplies. U-Boot loads the executable and boots it using a standard
-U-Boot script.
+target. The RTEMS Tester starts a TFTP server session for each test and the
+target's boot monitor, in this case U-Boot request a file, any file, which the
+TFTP server supplies. U-Boot loads the executable and boots it using a
+standard U-Boot script.
+
+The RTEMS Tester contains a TFTP server so no external TFTP server or
+configuration is required. If you have an external TFTP server and wish to use
+that resource the :ref:`tester-config-wait` directive can be used.
.. _fig-tester-tftp-u-boot: