diff options
Diffstat (limited to 'spec/rtems/task')
43 files changed, 2041 insertions, 0 deletions
diff --git a/spec/rtems/task/if/argument.yml b/spec/rtems/task/if/argument.yml new file mode 100644 index 00000000..86662e35 --- /dev/null +++ b/spec/rtems/task/if/argument.yml @@ -0,0 +1,21 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This type is used to represent task argument values. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: ${/score/cpu/if/uint32ptr:/name} ${.:/name} + variants: [] +description: null +enabled-by: true +interface-type: typedef +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_argument +notes: | + The type is an architecture-specific unsigned integer type which is large + enough to represent pointer values and 32-bit unsigned integers. +type: interface diff --git a/spec/rtems/task/if/config.yml b/spec/rtems/task/if/config.yml new file mode 100644 index 00000000..b2016fb3 --- /dev/null +++ b/spec/rtems/task/if/config.yml @@ -0,0 +1,109 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This structure defines the configuration of a task constructed by + ${construct:/name}. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +definition: +- default: + brief: | + This member defines the name of the task. + definition: ${../../type/if/name:/name} ${.:name} + description: null + kind: member + name: name + variants: [] +- default: + brief: | + This member defines the initial priority of the task. + definition: ${priority:/name} ${.:name} + description: null + kind: member + name: initial_priority + variants: [] +- default: + brief: | + This member shall point to the task storage area begin. + definition: void *${.:name} + description: | + The task storage area will contain the task stack, the thread-local + storage, and the floating-point context on architectures with a separate + floating-point context. + + The task storage area begin address and size should be aligned by + ${storage-alignment:/name}. To avoid memory waste, use + ${../../basedefs/if/aligned:/name} and ${storage-alignment:/name} to enforce + the recommended alignment of a statically allocated task storage area. + kind: member + name: storage_area + variants: [] +- default: + brief: | + This member defines size of the task storage area in bytes. + definition: ${/c/if/size_t:/name} ${.:name} + description: | + Use the ${storage-size:/name} macro to determine the recommended task + storage area size. + kind: member + name: storage_size + variants: [] +- default: + brief: | + This member defines the maximum thread-local storage size supported by the + task storage area. + definition: ${/c/if/size_t:/name} ${.:name} + description: | + Use ${../../basedefs/if/align-up:/name} and ${storage-alignment:/name} to + adjust the size to meet the minimum alignment requirement of a + thread-local storage area used to construct a task. + + If the value is less than the actual thread-local storage size, then the + task construction by ${construct:/name} fails. + + If the is less than the task storage area size, then the task + construction by ${construct:/name} fails. + kind: member + name: maximum_thread_local_storage_size + variants: [] +- default: + brief: | + This member defines the optional handler to free the task storage area. + definition: void ( *${.:name} )( void * ) + description: | + It is called on exactly two mutually exclusive occasions. Firstly, when + the task construction aborts due to a failed task create extension, or + secondly, when the task is deleted. It is called from task context under + protection of the object allocator lock. It is allowed to call free() in + this handler. If handler is ${/c/if/null:/name}, then no action will + be performed. + kind: member + name: storage_free + variants: [] +- default: + brief: | + This member defines the initial modes of the task. + definition: ${../../mode/if/mode:/name} ${.:name} + description: null + kind: member + name: initial_modes + variants: [] +- default: + brief: | + This member defines the attributes of the task. + definition: ${../../attr/if/attribute:/name} ${.:name} + description: null + kind: member + name: attributes + variants: [] +definition-kind: typedef-only +description: null +enabled-by: true +interface-type: struct +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_config +notes: null +type: interface diff --git a/spec/rtems/task/if/configured-minimum-stack-size.yml b/spec/rtems/task/if/configured-minimum-stack-size.yml new file mode 100644 index 00000000..24696bc9 --- /dev/null +++ b/spec/rtems/task/if/configured-minimum-stack-size.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR) +definition: + default: '0' + variants: [] +description: null +enabled-by: true +interface-type: define +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_CONFIGURED_MINIMUM_STACK_SIZE +notes: null +type: interface diff --git a/spec/rtems/task/if/construct.yml b/spec/rtems/task/if/construct.yml new file mode 100644 index 00000000..d5168070 --- /dev/null +++ b/spec/rtems/task/if/construct.yml @@ -0,0 +1,91 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Creates a task from the specified the task configuration. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + body: null + params: + - const ${config:/name} *${.:/params[0]/name} + - ${../../type/if/id:/name} *${.:/params[1]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_construct +notes: | + In contrast to tasks created by ${create:/name}, the tasks constructed by + this directive use a user-provided task storage area. The task storage area + contains the task stack, the thread-local storage, and the floating-point + context on architectures with a separate floating-point context. + + It is not recommended to mix ${create:/name} and ${.:/name} in an + application. This directive is intended for applications which do not want + to use the RTEMS Workspace and instead statically allocate all operating + system resources. The stack space estimate done by <rtems/confdefs.h> + assumes that all tasks are created by ${create:/name}. The estimate can be + adjusted to take user-provided task storage areas into account through the + ${/acfg/if/min-tasks-with-user-provided-storage:/name} application + configuration option. +params: +- description: is the task configuration. + dir: null + name: config +- description: | + is the pointer to an object identifier variable. The identifier of the + constructed task object will be stored in this variable, in case of a + successful operation. + dir: out + name: id +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + The ${.:/params[1]/name} parameter was ${/c/if/null:/name}. + value: ${../../status/if/invalid-address:/name} + - description: | + The task name was invalid. + value: ${../../status/if/invalid-name:/name} + - description: | + The initial task priority was invalid. + value: ${../../status/if/invalid-priority:/name} + - description: | + The thread-local storage size is greater than the maximum thread-local + storage size specified in the task configuration. The thread-local + storage size is determined by the thread-local variables used by the + application and ${/acfg/if/max-thread-local-storage-size:/name}. + value: ${../../status/if/invalid-size:/name} + - description: | + The task storage area was too small to provide a task stack of the + configured minimum size, see ${/acfg/if/min-task-stack-size:/name}. + The task storage area contains the task stack, the thread-local storage, + and the floating-point context on architectures with a separate + floating-point context. + value: ${../../status/if/invalid-size:/name} + - description: | + There was no inactive task object available to construct a task. + value: ${../../status/if/too-many:/name} + - description: | + In multiprocessing configurations, there was no inactive global object + available to construct a global task. + value: ${../../status/if/too-many:/name} + - description: | + One of the task create extensions failed during the task construction. + value: ${../../status/if/unsatisfied:/name} + - description: | + In SMP configurations, the non-preemption mode was not supported. + value: ${../../status/if/unsatisfied:/name} + - description: | + In SMP configurations, the interrupt level mode was not supported. + value: ${../../status/if/unsatisfied:/name} +type: interface diff --git a/spec/rtems/task/if/create.yml b/spec/rtems/task/if/create.yml new file mode 100644 index 00000000..7baea120 --- /dev/null +++ b/spec/rtems/task/if/create.yml @@ -0,0 +1,101 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Creates a task object. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/name:/name} ${.:/params[0]/name} + - ${priority:/name} ${.:/params[1]/name} + - ${/c/if/size_t:/name} ${.:/params[2]/name} + - ${../../mode/if/mode:/name} ${.:/params[3]/name} + - ${../../attr/if/attribute:/name} ${.:/params[4]/name} + - ${../../type/if/id:/name} *${.:/params[5]/name} + return: ${../../status/if/code:/name} + variants: [] +description: | + This directive creates a task which resides on the local node. It allocates + and initializes a TCB, a stack, and an optional floating point context area. + The mode parameter contains values which sets the task’s initial execution + mode. The RTEMS_FLOATING_POINT attribute should be specified if the created + task is to use a numeric coprocessor. For performance reasons, it is + recommended that tasks not using the numeric coprocessor should specify the + RTEMS_NO_FLOATING_POINT attribute. If the RTEMS_GLOBAL attribute is + specified, the task can be accessed from remote nodes. The task id, returned + in id, is used in other task related directives to access the task. When + created, a task is placed in the dormant state and can only be made ready to + execute using the directive rtems_task_start(). +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_create +notes: null +params: +- description: is the user-defined task name. + dir: null + name: name +- description: is the initial task priority. + dir: null + name: initial_priority +- description: is the task stack size in bytes. + dir: null + name: stack_size +- description: is the initial task mode. + dir: null + name: initial_modes +- description: is the task attribute set. + dir: null + name: attribute_set +- description: | + is the pointer to an object identifier variable. The object identifier of + the new task will be stored in this variable, in case of a successful + operation. + dir: out + name: id +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + The ${.:/params[5]/name} parameter was ${/c/if/null:/name}. + value: ${../../status/if/invalid-address:/name} + - description: | + The task name was invalid. + value: ${../../status/if/invalid-name:/name} + - description: | + The initial task priority was invalid. + value: ${../../status/if/invalid-priority:/name} + - description: | + The multiprocessing support was not configured. + value: ${../../status/if/mp-not-configured:/name} + - description: | + There was no inactive task object available to create a new task. + value: ${../../status/if/too-many:/name} + - description: | + In multiprocessing configurations, there was no inactive global object + available to create a new global task. + value: ${../../status/if/too-many:/name} + - description: | + There was not enough memory to allocate the task storage area. The task + storage area contains the task stack, the thread-local storage, and the + floating point context. + value: ${../../status/if/unsatisfied:/name} + - description: | + One of the task create extensions failed to create the new task. + value: ${../../status/if/unsatisfied:/name} + - description: | + In SMP configurations, the non-preemption mode was not supported. + value: ${../../status/if/unsatisfied:/name} + - description: | + In SMP configurations, the interrupt level mode was not supported. + value: ${../../status/if/unsatisfied:/name} +type: interface diff --git a/spec/rtems/task/if/current-priority.yml b/spec/rtems/task/if/current-priority.yml new file mode 100644 index 00000000..9dac3e14 --- /dev/null +++ b/spec/rtems/task/if/current-priority.yml @@ -0,0 +1,21 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This constant is passed to {set-priority:/name}() when the caller wants to + obtain the current priority. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: '0' + variants: [] +description: null +enabled-by: true +interface-type: define +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_CURRENT_PRIORITY +notes: null +type: interface diff --git a/spec/rtems/task/if/delete.yml b/spec/rtems/task/if/delete.yml new file mode 100644 index 00000000..7700116a --- /dev/null +++ b/spec/rtems/task/if/delete.yml @@ -0,0 +1,30 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_delete +notes: null +params: +- description: '%' + dir: null + name: id +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/entry.yml b/spec/rtems/task/if/entry.yml new file mode 100644 index 00000000..66a3c4d2 --- /dev/null +++ b/spec/rtems/task/if/entry.yml @@ -0,0 +1,20 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This type defines the entry point of an RTEMS task. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: ${task:/name} ( *${entry:/name} )( ${argument:/name} ) + variants: [] +description: null +enabled-by: true +interface-type: typedef +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_entry +notes: null +type: interface diff --git a/spec/rtems/task/if/exit.yml b/spec/rtems/task/if/exit.yml new file mode 100644 index 00000000..fbfe49b5 --- /dev/null +++ b/spec/rtems/task/if/exit.yml @@ -0,0 +1,26 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: [] + return: ${../../basedefs/if/no-return:/name} void + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_exit +notes: null +params: [] +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/get-affinity.yml b/spec/rtems/task/if/get-affinity.yml new file mode 100644 index 00000000..ab0a6a70 --- /dev/null +++ b/spec/rtems/task/if/get-affinity.yml @@ -0,0 +1,38 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + - ${/c/if/size_t:/name} ${.:/params[1]/name} + - ${/c/if/cpu_set_t:/name} *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_get_affinity +notes: null +params: +- description: '%' + dir: null + name: id +- description: '%' + dir: null + name: cpusetsize +- description: '%' + dir: null + name: cpuset +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/get-priority.yml b/spec/rtems/task/if/get-priority.yml new file mode 100644 index 00000000..e89e982d --- /dev/null +++ b/spec/rtems/task/if/get-priority.yml @@ -0,0 +1,38 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + - ${../../type/if/id:/name} ${.:/params[1]/name} + - ${priority:/name} *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_get_priority +notes: null +params: +- description: '%' + dir: null + name: task_id +- description: '%' + dir: null + name: scheduler_id +- description: '%' + dir: null + name: priority +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/get-scheduler.yml b/spec/rtems/task/if/get-scheduler.yml new file mode 100644 index 00000000..4dd97d97 --- /dev/null +++ b/spec/rtems/task/if/get-scheduler.yml @@ -0,0 +1,34 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + - ${../../type/if/id:/name} *${.:/params[1]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_get_scheduler +notes: null +params: +- description: '%' + dir: null + name: task_id +- description: '%' + dir: null + name: scheduler_id +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/group.yml b/spec/rtems/task/if/group.yml new file mode 100644 index 00000000..b9993172 --- /dev/null +++ b/spec/rtems/task/if/group.yml @@ -0,0 +1,20 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + The Task Manager provides a comprehensive set of directives to create, + delete, and administer tasks. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR) +description: null +enabled-by: true +identifier: RTEMSAPIClassicTasks +interface-type: group +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: ../../if/group +name: Task Manager +text: | + The Classic API shall provide an interface to the Task Manager. +type: interface diff --git a/spec/rtems/task/if/header.yml b/spec/rtems/task/if/header.yml new file mode 100644 index 00000000..3cf3b456 --- /dev/null +++ b/spec/rtems/task/if/header.yml @@ -0,0 +1,12 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: This header file defines the main parts of the Tasks Manager API. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +interface-type: header-file +links: +- role: interface-placement + uid: /if/domain +path: rtems/rtems/tasks.h +prefix: cpukit/include +type: interface diff --git a/spec/rtems/task/if/ident.yml b/spec/rtems/task/if/ident.yml new file mode 100644 index 00000000..1bf657c8 --- /dev/null +++ b/spec/rtems/task/if/ident.yml @@ -0,0 +1,85 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Identifies a task object by the specified object name. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/name:/name} ${.:/params[0]/name} + - ${/c/if/uint32_t:/name} ${.:/params[1]/name} + - ${../../type/if/id:/name} *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: | + This directive obtains the task identifier associated with the task name + specified in ``${.:/params[0]/name}``. + + A task may obtain its own identifier by specifying ${self-define:/name} for + the name. + + The node to search is specified in ``${.:/params[1]/name}``. It shall be + + * a valid node number, + + * the constant ${../../object/if/search-all-nodes:/name} to search in all nodes, + + * the constant ${../../object/if/search-local-node:/name} to search in the local + node only, or + + * the constant ${../../object/if/search-other-nodes:/name} to search in all nodes + except the local node. +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_ident +notes: | + If the task name is not unique, then the task identifier will match the first + task with that name in the search order. However, this task identifier is + not guaranteed to correspond to the desired task. The task identifier is + used with other task related directives to access the task. + + If node is ${../../object/if/search-all-nodes:/name}, all nodes are searched with + the local node being searched first. All other nodes are searched with the + lowest numbered node searched first. + + If node is a valid node number which does not represent the local node, then + only the tasks exported by the designated node are searched. + + This directive does not generate activity on remote nodes. It accesses only + the local copy of the global object table. +params: +- description: is the object name to look up. + dir: null + name: name +- description: is the node or node set to search for a matching object. + dir: null + name: node +- description: | + is the pointer to an object identifier variable. The object identifier of + an object with the specified name will be stored in this variable, in case + of a successful operation. + dir: out + name: id +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + The ${.:/params[2]/name} parameter was ${/c/if/null:/name}. + value: ${../../status/if/invalid-address:/name} + - description: | + There was no object with the specified name on the specified nodes. + value: ${../../status/if/invalid-name:/name} + - description: | + In multiprocessing configurations, the specified node was invalid. + value: ${../../status/if/invalid-node:/name} +type: interface diff --git a/spec/rtems/task/if/initialization-table.yml b/spec/rtems/task/if/initialization-table.yml new file mode 100644 index 00000000..71f463e0 --- /dev/null +++ b/spec/rtems/task/if/initialization-table.yml @@ -0,0 +1,67 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: +- default: + brief: '%' + definition: ${../../type/if/name:/name} ${.:name} + description: '%' + kind: member + name: name + variants: [] +- default: + brief: '%' + definition: ${/c/if/size_t:/name} ${.:name} + description: '%' + kind: member + name: stack_size + variants: [] +- default: + brief: '%' + definition: ${priority:/name} ${.:name} + description: '%' + kind: member + name: initial_priority + variants: [] +- default: + brief: '%' + definition: ${../../attr/if/attribute:/name} ${.:name} + description: '%' + kind: member + name: attribute_set + variants: [] +- default: + brief: '%' + definition: ${entry:/name} ${.:name} + description: '%' + kind: member + name: entry_point + variants: [] +- default: + brief: '%' + definition: ${../../mode/if/mode:/name} ${.:name} + description: '%' + kind: member + name: mode_set + variants: [] +- default: + brief: '%' + definition: ${argument:/name} ${.:name} + description: '%' + kind: member + name: argument + variants: [] +definition-kind: typedef-only +description: null +enabled-by: true +interface-type: struct +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_initialization_tasks_table +notes: null +type: interface diff --git a/spec/rtems/task/if/is-suspended.yml b/spec/rtems/task/if/is-suspended.yml new file mode 100644 index 00000000..67f1d731 --- /dev/null +++ b/spec/rtems/task/if/is-suspended.yml @@ -0,0 +1,30 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_is_suspended +notes: null +params: +- description: '%' + dir: null + name: id +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/iterate.yml b/spec/rtems/task/if/iterate.yml new file mode 100644 index 00000000..a28c0042 --- /dev/null +++ b/spec/rtems/task/if/iterate.yml @@ -0,0 +1,34 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${visitor:/name} ${.:/params[0]/name} + - void *${.:/params[1]/name} + return: void + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_iterate +notes: null +params: +- description: '%' + dir: null + name: visitor +- description: '%' + dir: null + name: arg +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/maximum-priority.yml b/spec/rtems/task/if/maximum-priority.yml new file mode 100644 index 00000000..9f96e3f9 --- /dev/null +++ b/spec/rtems/task/if/maximum-priority.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: ${/score/if/maximum-priority:/name}() + variants: [] +description: null +enabled-by: true +interface-type: define +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_MAXIMUM_PRIORITY +notes: null +type: interface diff --git a/spec/rtems/task/if/minimum-priority.yml b/spec/rtems/task/if/minimum-priority.yml new file mode 100644 index 00000000..89511f09 --- /dev/null +++ b/spec/rtems/task/if/minimum-priority.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: '1' + variants: [] +description: null +enabled-by: true +interface-type: define +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_MINIMUM_PRIORITY +notes: null +type: interface diff --git a/spec/rtems/task/if/minimum-stack-size.yml b/spec/rtems/task/if/minimum-stack-size.yml new file mode 100644 index 00000000..216100da --- /dev/null +++ b/spec/rtems/task/if/minimum-stack-size.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR) +definition: + default: ${/score/stack/if/minimum-size:/name} + variants: [] +description: null +enabled-by: true +interface-type: define +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_MINIMUM_STACK_SIZE +notes: null +type: interface diff --git a/spec/rtems/task/if/mode.yml b/spec/rtems/task/if/mode.yml new file mode 100644 index 00000000..181d6866 --- /dev/null +++ b/spec/rtems/task/if/mode.yml @@ -0,0 +1,38 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../mode/if/mode:/name} ${.:/params[0]/name} + - ${../../mode/if/mode:/name} ${.:/params[1]/name} + - ${../../mode/if/mode:/name} *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_mode +notes: null +params: +- description: '%' + dir: null + name: mode_set +- description: '%' + dir: null + name: mask +- description: '%' + dir: null + name: previous_mode_set +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/no-priority.yml b/spec/rtems/task/if/no-priority.yml new file mode 100644 index 00000000..8b6f0668 --- /dev/null +++ b/spec/rtems/task/if/no-priority.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: ${current-priority:/name} + variants: [] +description: null +enabled-by: true +interface-type: define +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_NO_PRIORITY +notes: null +type: interface diff --git a/spec/rtems/task/if/priority.yml b/spec/rtems/task/if/priority.yml new file mode 100644 index 00000000..2f1e7ef6 --- /dev/null +++ b/spec/rtems/task/if/priority.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: ${/c/if/uint32_t:/name} ${.:/name} + variants: [] +description: null +enabled-by: true +interface-type: typedef +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_priority +notes: null +type: interface diff --git a/spec/rtems/task/if/restart.yml b/spec/rtems/task/if/restart.yml new file mode 100644 index 00000000..08642b0d --- /dev/null +++ b/spec/rtems/task/if/restart.yml @@ -0,0 +1,34 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + - ${argument:/name} ${.:/params[1]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_restart +notes: null +params: +- description: '%' + dir: null + name: id +- description: '%' + dir: null + name: argument +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/resume.yml b/spec/rtems/task/if/resume.yml new file mode 100644 index 00000000..8b24c3e6 --- /dev/null +++ b/spec/rtems/task/if/resume.yml @@ -0,0 +1,30 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_resume +notes: null +params: +- description: '%' + dir: null + name: id +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/self-define.yml b/spec/rtems/task/if/self-define.yml new file mode 100644 index 00000000..0b6ad3d7 --- /dev/null +++ b/spec/rtems/task/if/self-define.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: ${/score/object/if/id-of-self:/name} + variants: [] +description: null +enabled-by: true +interface-type: define +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_SELF +notes: null +type: interface diff --git a/spec/rtems/task/if/self.yml b/spec/rtems/task/if/self.yml new file mode 100644 index 00000000..e213058c --- /dev/null +++ b/spec/rtems/task/if/self.yml @@ -0,0 +1,26 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: [] + return: ${../../type/if/id:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_self +notes: null +params: [] +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/set-affinity.yml b/spec/rtems/task/if/set-affinity.yml new file mode 100644 index 00000000..e97621db --- /dev/null +++ b/spec/rtems/task/if/set-affinity.yml @@ -0,0 +1,38 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + - ${/c/if/size_t:/name} ${.:/params[1]/name} + - const ${/c/if/cpu_set_t:/name} *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_set_affinity +notes: null +params: +- description: '%' + dir: null + name: id +- description: '%' + dir: null + name: cpusetsize +- description: '%' + dir: null + name: cpuset +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/set-priority.yml b/spec/rtems/task/if/set-priority.yml new file mode 100644 index 00000000..31504781 --- /dev/null +++ b/spec/rtems/task/if/set-priority.yml @@ -0,0 +1,38 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + - ${priority:/name} ${.:/params[1]/name} + - ${priority:/name} *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_set_priority +notes: null +params: +- description: '%' + dir: null + name: id +- description: '%' + dir: null + name: new_priority +- description: '%' + dir: null + name: old_priority +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/set-scheduler.yml b/spec/rtems/task/if/set-scheduler.yml new file mode 100644 index 00000000..cbfb45d2 --- /dev/null +++ b/spec/rtems/task/if/set-scheduler.yml @@ -0,0 +1,38 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + - ${../../type/if/id:/name} ${.:/params[1]/name} + - ${priority:/name} ${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_set_scheduler +notes: null +params: +- description: '%' + dir: null + name: task_id +- description: '%' + dir: null + name: scheduler_id +- description: '%' + dir: null + name: priority +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/start.yml b/spec/rtems/task/if/start.yml new file mode 100644 index 00000000..54d757fc --- /dev/null +++ b/spec/rtems/task/if/start.yml @@ -0,0 +1,38 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + - ${entry:/name} ${.:/params[1]/name} + - ${argument:/name} ${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_start +notes: null +params: +- description: '%' + dir: null + name: id +- description: '%' + dir: null + name: entry_point +- description: '%' + dir: null + name: argument +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/storage-alignment.yml b/spec/rtems/task/if/storage-alignment.yml new file mode 100644 index 00000000..d6ae3593 --- /dev/null +++ b/spec/rtems/task/if/storage-alignment.yml @@ -0,0 +1,22 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This constant defines the recommended alignment of a task storage area in + bytes. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: ${/score/cpu/if/heap-alignment:/name} + variants: [] +description: null +enabled-by: true +interface-type: define +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_TASK_STORAGE_ALIGNMENT +notes: | + Use it with ${../../basedefs/if/aligned:/name} to define the alignment of a + statically allocated task storage area. +type: interface diff --git a/spec/rtems/task/if/storage-size.yml b/spec/rtems/task/if/storage-size.yml new file mode 100644 index 00000000..5bc137a8 --- /dev/null +++ b/spec/rtems/task/if/storage-size.yml @@ -0,0 +1,41 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Returns the recommended task storage area size for the specified size and task + attributes. +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: | + ( ( ${.:/params[0]/name} ) + + ( ( ( ${.:/params[1]/name} ) & ${../../attr/if/floating-point:/name} ) != 0 ? + ${/score/context/if/fp-size:/name} : 0 ) ) + variants: + - definition: | + ( ( ${.:/params[0]/name} ) + ${/score/context/if/fp-size:/name} ) + enabled-by: + - ${/score/cpu/if/all-tasks-are-fp:/name} == ${../../basedefs/if/true:/name} +description: null +enabled-by: true +interface-type: macro +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_TASK_STORAGE_SIZE +notes: null +params: +- description: | + is the size dedicated to the task stack and thread-local storage in bytes. + dir: null + name: _size +- description: | + is the attribute set of the task using the storage area. + dir: null + name: _attributes +return: + return: | + The recommended task storage area size calculated from the input parameters + is returned. + return-values: [] +type: interface diff --git a/spec/rtems/task/if/suspend.yml b/spec/rtems/task/if/suspend.yml new file mode 100644 index 00000000..06d15212 --- /dev/null +++ b/spec/rtems/task/if/suspend.yml @@ -0,0 +1,30 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/id:/name} ${.:/params[0]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_suspend +notes: null +params: +- description: '%' + dir: null + name: id +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/task.yml b/spec/rtems/task/if/task.yml new file mode 100644 index 00000000..fabc40ac --- /dev/null +++ b/spec/rtems/task/if/task.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: void ${.:/name} + variants: [] +description: null +enabled-by: true +interface-type: typedef +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task +notes: null +type: interface diff --git a/spec/rtems/task/if/tcb.yml b/spec/rtems/task/if/tcb.yml new file mode 100644 index 00000000..2da894cd --- /dev/null +++ b/spec/rtems/task/if/tcb.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: struct _Thread_Control ${.:/name} + variants: [] +description: null +enabled-by: true +interface-type: typedef +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_tcb +notes: null +type: interface diff --git a/spec/rtems/task/if/visitor.yml b/spec/rtems/task/if/visitor.yml new file mode 100644 index 00000000..3d5b3aac --- /dev/null +++ b/spec/rtems/task/if/visitor.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: ${/c/if/bool:/name}( *${.:/name} )( ${tcb:/name} *, void * ) + variants: [] +description: null +enabled-by: true +interface-type: typedef +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_visitor +notes: null +type: interface diff --git a/spec/rtems/task/if/wake-after.yml b/spec/rtems/task/if/wake-after.yml new file mode 100644 index 00000000..10a83a37 --- /dev/null +++ b/spec/rtems/task/if/wake-after.yml @@ -0,0 +1,30 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/interval:/name} ${.:/params[0]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_wake_after +notes: null +params: +- description: '%' + dir: null + name: ticks +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/wake-when.yml b/spec/rtems/task/if/wake-when.yml new file mode 100644 index 00000000..3eb88c61 --- /dev/null +++ b/spec/rtems/task/if/wake-when.yml @@ -0,0 +1,30 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: + body: null + params: + - ${../../type/if/time-of-day:/name} *${.:/params[0]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +interface-type: function +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: rtems_task_wake_when +notes: null +params: +- description: '%' + dir: null + name: time_buffer +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/task/if/yield-processor.yml b/spec/rtems/task/if/yield-processor.yml new file mode 100644 index 00000000..ab5aaaf9 --- /dev/null +++ b/spec/rtems/task/if/yield-processor.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: '%' +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +- Copyright (C) 1988, 2017 On-Line Applications Research Corporation (OAR) +definition: + default: ${/score/watchdog/if/no-timeout:/name} + variants: [] +description: null +enabled-by: true +interface-type: define +links: +- role: interface-placement + uid: header +- role: interface-ingroup + uid: group +name: RTEMS_YIELD_PROCESSOR +notes: null +type: interface diff --git a/spec/rtems/task/req/construct-errors.yml b/spec/rtems/task/req/construct-errors.yml new file mode 100644 index 00000000..e912671d --- /dev/null +++ b/spec/rtems/task/req/construct-errors.yml @@ -0,0 +1,499 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +functional-type: action +links: +- role: interface-function + uid: /rtems/task/if/construct +post-conditions: +- name: Status + states: + - name: Ok + test-code: | + T_rsc_success( ctx->status ); + T_eq_ptr( ctx->id, &ctx->id_value ); + T_ne_u32( ctx->id_value, 0xffffffff ); + + sc = rtems_task_delete( ctx->id_value ); + T_rsc_success( sc ); + text: | + The status shall be RTEMS_SUCCESSFUL. The value of the object identifier + referenced by the id parameter shall identify the constructed task. + - name: InvAddress + test-code: | + T_rsc( ctx->status, RTEMS_INVALID_ADDRESS ); + T_null( ctx->id ); + T_eq_u32( ctx->id_value, 0xffffffff ); + text: | + The status shall be RTEMS_INVALID_ADDRESS. + - name: InvName + test-code: | + T_rsc( ctx->status, RTEMS_INVALID_NAME ); + T_eq_u32( ctx->id_value, 0xffffffff ); + text: | + The status shall be RTEMS_INVALID_NAME. If the id parameter is not NULL, + then the value of the object identifier referenced by the id parameter + shall be unchanged. + - name: InvPrio + test-code: | + T_rsc( ctx->status, RTEMS_INVALID_PRIORITY ); + T_eq_u32( ctx->id_value, 0xffffffff ); + text: | + The status shall be RTEMS_INVALID_PRIORITY. If the id parameter is not + NULL, then the value of the object identifier referenced by the id + parameter shall be unchanged. + - name: InvSize + test-code: | + T_rsc( ctx->status, RTEMS_INVALID_SIZE ); + T_eq_u32( ctx->id_value, 0xffffffff ); + text: | + The status shall be RTEMS_INVALID_SIZE. If the id parameter is not NULL, + then the value of the object identifier referenced by the id parameter + shall be unchanged. + - name: TooMany + test-code: | + T_rsc( ctx->status, RTEMS_TOO_MANY ); + T_eq_u32( ctx->id_value, 0xffffffff ); + text: | + The status shall be RTEMS_TOO_MANY. If the id parameter is not NULL, + then the value of the object identifier referenced by the id parameter + shall be unchanged. + - name: Unsatisfied + test-code: | + T_rsc( ctx->status, RTEMS_UNSATISFIED ); + T_eq_u32( ctx->id_value, 0xffffffff ); + text: | + The status shall be RTEMS_UNSATISFIED. If the id parameter is not NULL, + then the value of the object identifier referenced by the id parameter + shall be unchanged. + test-epilogue: null + test-prologue: | + rtems_status_code sc; +pre-conditions: +- name: Id + states: + - name: Id + test-code: | + ctx->id = &ctx->id_value; + text: | + The id parameter shall reference an object identifier value. + - name: 'Null' + test-code: | + ctx->id = NULL; + text: | + The id parameter shall be NULL. + test-epilogue: null + test-prologue: null +- name: Name + states: + - name: Valid + test-code: | + ctx->config.name = rtems_build_name( 'N', 'A', 'M', 'E' ); + text: | + The name of the task configuration shall be valid. + - name: Inv + test-code: | + ctx->config.name = 0; + text: | + The name of the task configuration shall be invalid. + test-epilogue: null + test-prologue: null +- name: Prio + states: + - name: Valid + test-code: | + ctx->config.initial_priority = 254; + text: | + The initial priority of the task configuration shall be valid. + - name: Zero + test-code: | + ctx->config.initial_priority = 0; + text: | + The initial priority of the task configuration shall be zero. + - name: Inv + test-code: | + ctx->config.initial_priority = 0xffffffff; + text: | + The initial priority of the task configuration shall be invalid. + test-epilogue: null + test-prologue: null +- name: Tasks + states: + - name: Avail + test-code: | + /* Nothing to do */ + text: | + There shall be at least one inactive task object available. + - name: None + test-code: | + create_extension_status = ctx->create_extension_status; + ctx->create_extension_status = true; + + while ( true ) { + rtems_status_code sc; + rtems_id id; + + sc = rtems_task_construct( &valid_task_config, &id ); + + if ( sc == RTEMS_SUCCESSFUL ) { + Objects_Control *obj; + const Objects_Information *info; + + info = _Objects_Get_information_id( id ); + T_quiet_assert_not_null( info ); + obj = _Objects_Get_no_protection( id, info ); + T_quiet_assert_not_null( obj ); + _Chain_Append_unprotected( &ctx->tasks, &obj->Node ); + } else { + T_quiet_rsc( sc, RTEMS_TOO_MANY ); + break; + } + } + + ctx->create_extension_status = create_extension_status; + text: | + There shall be no inactive task object available. + test-epilogue: null + test-prologue: | + bool create_extension_status; +- name: TLS + states: + - name: Enough + test-code: | + ctx->config.maximum_thread_local_storage_size = MAX_TLS_SIZE; + text: | + The maximum thread-local storage size of the task configuration shall be + greater than or equal to the thread-local storage size. + - name: Small + test-code: | + ctx->config.maximum_thread_local_storage_size = 0; + text: | + The maximum thread-local storage size of the task configuration shall be + less than the thread-local storage size. + test-epilogue: null + test-prologue: null +- name: Stack + states: + - name: Enough + test-code: | + ctx->stack_size = RTEMS_MINIMUM_STACK_SIZE; + text: | + The task stack size of the task configuration shall be greater than or + equal to the configured minimum size. + - name: Small + test-code: | + ctx->stack_size = 0; + text: | + The task stack size of the task configuration shall be less than to the + configured minimum size. + test-epilogue: null + test-prologue: null +- name: Ext + states: + - name: Ok + test-code: | + ctx->create_extension_status = true; + text: | + None of the task create extensions shall fail. + - name: Err + test-code: | + ctx->create_extension_status = false; + text: | + At least one of the task create extensions shall fail. + test-epilogue: null + test-prologue: null +- name: Preempt + states: + - name: 'Yes' + test-code: | + ctx->config.initial_modes &= ~RTEMS_PREEMPT_MASK; + ctx->config.initial_modes |= RTEMS_PREEMPT; + text: | + The preemptible mode in the initial modes of the task configuration shall + be set to preemptible. + - name: 'No' + test-code: | + ctx->config.initial_modes &= ~RTEMS_PREEMPT_MASK; + ctx->config.initial_modes |= RTEMS_NO_PREEMPT; + text: | + The preemptible mode in the initial modes of the task configuration shall + be set to non-preemptible. + test-epilogue: null + test-prologue: null +rationale: null +references: [] +requirement-type: functional +skip-reasons: {} +test-action: | + ctx->config.storage_size = RTEMS_TASK_STORAGE_SIZE( + ctx->config.maximum_thread_local_storage_size + ctx->stack_size, + ctx->config.attributes + ); + ctx->status = rtems_task_construct( &ctx->config, ctx->id ); +test-brief: null +test-cleanup: | + Chain_Node *node; + + while ( ( node = _Chain_Get_unprotected( &ctx->tasks ) ) ) { + Objects_Control *obj; + rtems_status_code sc; + + obj = (Objects_Control *) node; + sc = rtems_task_delete( obj->id ); + T_quiet_rsc_success( sc ); + } +test-context: +- brief: null + description: null + member: rtems_status_code status +- brief: null + description: null + member: rtems_task_config config +- brief: null + description: null + member: rtems_id *id +- brief: null + description: null + member: rtems_id id_value +- brief: null + description: null + member: bool create_extension_status +- brief: null + description: null + member: size_t stack_size +- brief: null + description: null + member: rtems_id extension_id +- brief: null + description: null + member: Chain_Control tasks +test-context-support: null +test-description: null +test-header: null +test-includes: +- rtems.h +- rtems/score/chainimpl.h +- rtems/score/objectimpl.h +- string.h +test-local-includes: [] +test-prepare: | + ctx->id_value = 0xffffffff; + memset( &ctx->config, 0, sizeof( ctx->config ) ); +test-setup: + brief: null + code: | + rtems_status_code sc; + int var; + + var = tls_variable; + RTEMS_OBFUSCATE_VARIABLE( var ); + tls_variable = var; + + sc = rtems_extension_create( + rtems_build_name( 'T', 'C', 'F', 'C' ), + &extensions, + &ctx->extension_id + ); + T_rsc_success( sc ); + + _Chain_Initialize_empty( &ctx->tasks ); + description: null +test-stop: null +test-support: | + static _Thread_local int tls_variable; + + #define MAX_TLS_SIZE RTEMS_ALIGN_UP( 128, RTEMS_TASK_STORAGE_ALIGNMENT ) + + RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT ) static char task_storage[ + RTEMS_TASK_STORAGE_SIZE( + MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_FLOATING_POINT + ) + ]; + + static const rtems_task_config valid_task_config = { + .name = rtems_build_name( 'T', 'A', 'S', 'K' ), + .initial_priority = 1, + .storage_area = task_storage, + .storage_size = sizeof( task_storage ), + .maximum_thread_local_storage_size = MAX_TLS_SIZE, + .initial_modes = RTEMS_DEFAULT_MODES, + .attributes = RTEMS_DEFAULT_MODES + }; + + static bool ThreadCreate( rtems_tcb *executing, rtems_tcb *created ) + { + (void) executing; + (void) created; + + return RtemsTaskReqConstructErrors_Instance.create_extension_status; + } + + static const rtems_extensions_table extensions = { + .thread_create = ThreadCreate + }; +test-target: testsuites/validation/tc-task-construct-errors.c +test-teardown: + brief: null + code: | + rtems_status_code sc; + + sc = rtems_extension_delete( ctx->extension_id ); + T_rsc_success( sc ); + description: null +text: ${.:text-template} +transition-map: +- enabled-by: true + post-conditions: + Status: Ok + pre-conditions: + Id: + - Id + Name: + - Valid + Prio: + - Valid + Tasks: + - Avail + TLS: + - Enough + Stack: + - Enough + Ext: + - Ok + Preempt: all +- enabled-by: true + post-conditions: + Status: InvAddress + pre-conditions: + Id: + - 'Null' + Name: all + Prio: all + Tasks: all + TLS: all + Stack: all + Ext: all + Preempt: all +- enabled-by: true + post-conditions: + Status: InvName + pre-conditions: + Id: + - Id + Name: + - Inv + Prio: all + Tasks: all + TLS: all + Stack: all + Ext: all + Preempt: all +- enabled-by: true + post-conditions: + Status: InvPrio + pre-conditions: + Id: + - Id + Name: + - Valid + Prio: + - Zero + - Inv + Tasks: all + TLS: all + Stack: all + Ext: all + Preempt: all +- enabled-by: true + post-conditions: + Status: TooMany + pre-conditions: + Id: + - Id + Name: + - Valid + Prio: + - Valid + Tasks: + - None + TLS: all + Stack: all + Ext: all + Preempt: all +- enabled-by: true + post-conditions: + Status: InvSize + pre-conditions: + Id: + - Id + Name: + - Valid + Prio: + - Valid + Tasks: + - Avail + TLS: + - Small + Stack: all + Ext: all + Preempt: all +- enabled-by: true + post-conditions: + Status: InvSize + pre-conditions: + Id: + - Id + Name: + - Valid + Prio: + - Valid + Tasks: + - Avail + TLS: + - Enough + Stack: + - Small + Ext: all + Preempt: all +- enabled-by: true + post-conditions: + Status: Unsatisfied + pre-conditions: + Id: + - Id + Name: + - Valid + Prio: + - Valid + Tasks: + - Avail + TLS: + - Enough + Stack: + - Enough + Ext: + - Err + Preempt: all +- enabled-by: RTEMS_SMP + post-conditions: + Status: Unsatisfied + pre-conditions: + Id: + - Id + Name: + - Valid + Prio: + - Valid + Tasks: + - Avail + TLS: + - Enough + Stack: + - Enough + Ext: + - Ok + Preempt: + - 'No' +type: requirement diff --git a/spec/rtems/task/req/ident.yml b/spec/rtems/task/req/ident.yml new file mode 100644 index 00000000..0fbfd0dc --- /dev/null +++ b/spec/rtems/task/req/ident.yml @@ -0,0 +1,123 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +functional-type: action +links: +- role: interface-function + uid: /rtems/task/if/ident +post-conditions: +- name: Post + states: + - name: OkAndSelfId + test-code: | + T_rsc(ctx->status, RTEMS_SUCCESSFUL); + T_eq_ptr(ctx->id, &ctx->id_value); + T_eq_u32(ctx->id_value, rtems_task_self()); + text: | + The status shall be RTEMS_SUCCESSFUL. The value of the object identifier + referenced by the id parameter shall be the identifier of the executing + thread. + - name: Generic + test-code: | + /* Checks performed by ${../req/ident:/test-run}() */ + text: | + The post-condition status shall be specified by ${../req/ident}. + test-epilogue: null + test-prologue: null +pre-conditions: +- name: Pre + states: + - name: Self + test-code: | + ctx->id_value = 0xffffffff; + ctx->id = &ctx->id_value; + text: | + The name parameter shall be RTEMS_SELF. + - name: Generic + test-code: | + ctx->id = NULL; + /* Preparation performed by ${../req/ident:/test-run}() */ + text: | + The pre-condition status shall be specified by ${../req/ident}. + test-epilogue: null + test-prologue: null +rationale: null +references: [] +requirement-type: functional +skip-reasons: {} +test-action: | + if ( ctx->id != NULL ) { + ctx->status = rtems_task_ident( RTEMS_SELF, 0xdeadbeef, ctx->id ); + } else { + ${../req/ident:/test-run}( + ctx->id_local_object, + ClassicTaskIdentAction + ); + } +test-brief: null +test-cleanup: null +test-context: +- brief: null + description: null + member: rtems_status_code status +- brief: null + description: null + member: rtems_id *id +- brief: null + description: null + member: rtems_id id_value +- brief: null + description: null + member: rtems_id id_local_object +test-context-support: null +test-description: null +test-header: null +test-includes: [] +test-local-includes: +- tr-object-ident.h +test-prepare: null +test-setup: + brief: null + code: | + static char task_storage[ RTEMS_MINIMUM_STACK_SIZE ]; + static const rtems_task_config task_config = { + .name = ClassicObjectIdentName, + .initial_priority = 1, + .storage_area = task_storage, + .storage_size = sizeof( task_storage ), + .initial_modes = RTEMS_DEFAULT_MODES, + .attributes = RTEMS_DEFAULT_ATTRIBUTES + }; + rtems_status_code sc; + + sc = rtems_task_build( &task_config, &ctx->id_local_object ); + T_assert_rsc_success( sc ); + description: null +test-stop: null +test-support: | + static rtems_status_code ClassicTaskIdentAction( + rtems_name name, + uint32_t node, + rtems_id *id + ) + { + return rtems_task_ident( name, node, id ); + } +test-target: testsuites/validation/tc-task-ident.c +test-teardown: null +text: ${.:text-template} +transition-map: +- enabled-by: true + post-conditions: + Post: OkAndSelfId + pre-conditions: + Pre: + - Self +- enabled-by: true + post-conditions: + Post: Generic + pre-conditions: + Pre: + - Generic +type: requirement |