summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-08-21 16:54:17 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-08-21 16:54:17 +0000
commit7a035ebcc006d0195c660b71cc92609c99d635ba (patch)
tree6f69564a306d2f356a83f9711ff057d3abde2c10 /cpukit
parentPatch from Eric Valette <valette@crf.canon.fr>: (diff)
downloadrtems-7a035ebcc006d0195c660b71cc92609c99d635ba.tar.bz2
Added system task attribute to allow one to create a task with "0" priority
via the user api.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/rtems/include/rtems/rtems/attr.h3
-rw-r--r--cpukit/rtems/inline/rtems/rtems/attr.inl17
-rw-r--r--cpukit/rtems/macros/rtems/rtems/attr.inl9
-rw-r--r--cpukit/rtems/src/tasks.c20
4 files changed, 40 insertions, 9 deletions
diff --git a/cpukit/rtems/include/rtems/rtems/attr.h b/cpukit/rtems/include/rtems/rtems/attr.h
index c5376540af..215b27f9a0 100644
--- a/cpukit/rtems/include/rtems/rtems/attr.h
+++ b/cpukit/rtems/include/rtems/rtems/attr.h
@@ -47,6 +47,9 @@ typedef unsigned32 rtems_attribute;
#define RTEMS_NO_PRIORITY_CEILING 0x00000000
#define RTEMS_PRIORITY_CEILING 0x00000040
+#define RTEMS_APPLICATION_TASK 0x00000000
+#define RTEMS_SYSTEM_TASK 0x00000080
+
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#define ATTRIBUTES_NOT_SUPPORTED 0
#else
diff --git a/cpukit/rtems/inline/rtems/rtems/attr.inl b/cpukit/rtems/inline/rtems/rtems/attr.inl
index f8f890ae04..3cec1edd3b 100644
--- a/cpukit/rtems/inline/rtems/rtems/attr.inl
+++ b/cpukit/rtems/inline/rtems/rtems/attr.inl
@@ -155,5 +155,22 @@ RTEMS_INLINE_ROUTINE boolean _Attributes_Is_priority_ceiling(
return ( attribute_set & RTEMS_PRIORITY_CEILING );
}
+/*PAGE
+ *
+ * _Attributes_Is_system_task
+ *
+ * DESCRIPTION:
+ *
+ * This function returns TRUE if the system task attribute
+ * is enabled in the attribute_set and FALSE otherwise.
+ */
+
+RTEMS_INLINE_ROUTINE boolean _Attributes_Is_system_task(
+ rtems_attribute attribute_set
+)
+{
+ return ( attribute_set & RTEMS_PRIORITY_CEILING );
+}
+
#endif
/* end of include file */
diff --git a/cpukit/rtems/macros/rtems/rtems/attr.inl b/cpukit/rtems/macros/rtems/rtems/attr.inl
index 844ac4f012..290e7f7870 100644
--- a/cpukit/rtems/macros/rtems/rtems/attr.inl
+++ b/cpukit/rtems/macros/rtems/rtems/attr.inl
@@ -87,5 +87,14 @@
#define _Attributes_Is_priority_ceiling( _attribute_set ) \
( (_attribute_set) & RTEMS_PRIORITY_CEILING )
+/*PAGE
+ *
+ * _Attributes_Is_system_task
+ *
+ */
+
+#define _Attributes_Is_system_task( _attribute_set ) \
+ ( (_attribute_set) & RTEMS_SYSTEM_TASK )
+
#endif
/* end of include file */
diff --git a/cpukit/rtems/src/tasks.c b/cpukit/rtems/src/tasks.c
index 81955cd305..723a769836 100644
--- a/cpukit/rtems/src/tasks.c
+++ b/cpukit/rtems/src/tasks.c
@@ -269,15 +269,6 @@ rtems_status_code rtems_task_create(
#endif
/*
- * Validate the RTEMS API priority and convert it to the core priority range.
- */
-
- if ( !_RTEMS_tasks_Priority_is_valid( initial_priority ) )
- return RTEMS_INVALID_PRIORITY;
-
- core_priority = _RTEMS_tasks_Priority_to_Core( initial_priority );
-
- /*
* Fix the attribute set to match the attributes which
* this processor (1) requires and (2) is able to support.
* First add in the required flags for attribute_set
@@ -295,6 +286,17 @@ rtems_status_code rtems_task_create(
else
is_fp = FALSE;
+ /*
+ * Validate the RTEMS API priority and convert it to the core priority range.
+ */
+
+ if ( !_Attributes_Is_system_task( the_attribute_set ) ) {
+ if ( !_RTEMS_tasks_Priority_is_valid( initial_priority ) )
+ return RTEMS_INVALID_PRIORITY;
+ }
+
+ core_priority = _RTEMS_tasks_Priority_to_Core( initial_priority );
+
if ( _Attributes_Is_global( the_attribute_set ) ) {
is_global = TRUE;