summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-12-13 15:29:20 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-12-13 15:29:20 +0000
commit7d91d722baf1f1ff275fd31500526bb2fd6df632 (patch)
tree4200d45e53e783ea350265ba4267083b51566523 /cpukit/rtems
parentCorrected order of output. (diff)
downloadrtems-7d91d722baf1f1ff275fd31500526bb2fd6df632.tar.bz2
First attempt at adding simple binary semaphore in addition to the current
"mutex" and counting semaphore. This is at the request of Eric Norum and his EPICS porting effort.
Diffstat (limited to 'cpukit/rtems')
-rw-r--r--cpukit/rtems/include/rtems/rtems/attr.h6
-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/semcreate.c9
-rw-r--r--cpukit/rtems/src/semtranslatereturncode.c2
5 files changed, 38 insertions, 5 deletions
diff --git a/cpukit/rtems/include/rtems/rtems/attr.h b/cpukit/rtems/include/rtems/rtems/attr.h
index cf9b073360..20d8eebe01 100644
--- a/cpukit/rtems/include/rtems/rtems/attr.h
+++ b/cpukit/rtems/include/rtems/rtems/attr.h
@@ -46,8 +46,12 @@ typedef unsigned32 rtems_attribute;
#define RTEMS_NO_PRIORITY_CEILING 0x00000000
#define RTEMS_PRIORITY_CEILING 0x00000040
+#define RTEMS_NESTING_ALLOWED 0x00000000
+#define RTEMS_NO_NESTING_ALLOWED 0x00000080
+
#define RTEMS_APPLICATION_TASK 0x00000000
-#define RTEMS_SYSTEM_TASK 0x00000080
+#define RTEMS_SYSTEM_TASK 0x00000100
+
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#define ATTRIBUTES_NOT_SUPPORTED 0
diff --git a/cpukit/rtems/inline/rtems/rtems/attr.inl b/cpukit/rtems/inline/rtems/rtems/attr.inl
index 0f9e3bbbf9..94a8052648 100644
--- a/cpukit/rtems/inline/rtems/rtems/attr.inl
+++ b/cpukit/rtems/inline/rtems/rtems/attr.inl
@@ -158,6 +158,23 @@ RTEMS_INLINE_ROUTINE boolean _Attributes_Is_priority_ceiling(
/*PAGE
*
+ * _Attributes_Is_nesting_allowed
+ *
+ * DESCRIPTION:
+ *
+ * This function returns TRUE if the nesting allowed attribute
+ * is enabled in the attribute_set and FALSE otherwise.
+ */
+
+RTEMS_INLINE_ROUTINE boolean _Attributes_Is_nesting_allowed(
+ rtems_attribute attribute_set
+)
+{
+ return ( !(attribute_set & RTEMS_NO_NESTING_ALLOWED) );
+}
+
+/*PAGE
+ *
* _Attributes_Is_system_task
*
* DESCRIPTION:
diff --git a/cpukit/rtems/macros/rtems/rtems/attr.inl b/cpukit/rtems/macros/rtems/rtems/attr.inl
index 035a6b8bc5..516752b7d1 100644
--- a/cpukit/rtems/macros/rtems/rtems/attr.inl
+++ b/cpukit/rtems/macros/rtems/rtems/attr.inl
@@ -90,6 +90,15 @@
/*PAGE
*
+ * _Attributes_Is_nesting_allowed
+ *
+ */
+
+#define _Attributes_Is_nesting_allowed( _attribute_set ) \
+ ( !((_attribute_set) & RTEMS_NO_NESTING_ALLOWED) )
+
+/*PAGE
+ *
* _Attributes_Is_system_task
*
*/
diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c
index 84a960f5b2..a63814acfe 100644
--- a/cpukit/rtems/src/semcreate.c
+++ b/cpukit/rtems/src/semcreate.c
@@ -129,14 +129,17 @@ rtems_status_code rtems_semaphore_create(
if ( _Attributes_Is_binary_semaphore( attribute_set ) ) {
if ( _Attributes_Is_inherit_priority( attribute_set ) )
the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_INHERIT;
- else if (_Attributes_Is_priority_ceiling( attribute_set ) )
+ else if ( _Attributes_Is_priority_ceiling( attribute_set ) )
the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY_CEILING;
- else if (_Attributes_Is_priority( attribute_set ) )
+ else if ( _Attributes_Is_priority( attribute_set ) )
the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_PRIORITY;
else
the_mutex_attributes.discipline = CORE_MUTEX_DISCIPLINES_FIFO;
- the_mutex_attributes.allow_nesting = TRUE;
+ if ( _Attributes_Is_nesting_allowed( attribute_set ) )
+ the_mutex_attributes.allow_nesting = TRUE;
+ else
+ the_mutex_attributes.allow_nesting = FALSE;
/* Add priority ceiling code here ????? */
diff --git a/cpukit/rtems/src/semtranslatereturncode.c b/cpukit/rtems/src/semtranslatereturncode.c
index 0f9bf7d3f5..adae1df600 100644
--- a/cpukit/rtems/src/semtranslatereturncode.c
+++ b/cpukit/rtems/src/semtranslatereturncode.c
@@ -67,7 +67,7 @@ rtems_status_code _Semaphore_Translate_core_mutex_return_code (
case CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT:
return RTEMS_UNSATISFIED;
case CORE_MUTEX_STATUS_NESTING_NOT_ALLOWED:
- return RTEMS_INTERNAL_ERROR;
+ return RTEMS_UNSATISFIED;
case CORE_MUTEX_STATUS_NOT_OWNER_OF_RESOURCE:
return RTEMS_NOT_OWNER_OF_RESOURCE;
case CORE_MUTEX_WAS_DELETED: