[PATCH 2/7] score: Add <rtems/score/freechainimpl.h>

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Aug 21 11:50:58 UTC 2020


Hide implementation details.

Update #3959.
---
 cpukit/headers.am                          |   1 +
 cpukit/include/rtems/posix/keyimpl.h       |   2 +-
 cpukit/include/rtems/score/freechain.h     | 124 +---------------
 cpukit/include/rtems/score/freechainimpl.h | 161 +++++++++++++++++++++
 cpukit/score/src/freechain.c               |   2 +-
 cpukit/score/src/thread.c                  |   1 +
 cpukit/score/src/threadallocateunlimited.c |   1 +
 cpukit/score/src/threadinitialize.c        |   1 +
 cpukit/score/src/threadrestart.c           |   1 +
 testsuites/sptests/spfreechain01/init.c    |   2 +-
 10 files changed, 170 insertions(+), 126 deletions(-)
 create mode 100644 cpukit/include/rtems/score/freechainimpl.h

diff --git a/cpukit/headers.am b/cpukit/headers.am
index e1d450a99d..77df5ecb4c 100644
--- a/cpukit/headers.am
+++ b/cpukit/headers.am
@@ -343,6 +343,7 @@ include_rtems_score_HEADERS += include/rtems/score/coresem.h
 include_rtems_score_HEADERS += include/rtems/score/coresemimpl.h
 include_rtems_score_HEADERS += include/rtems/score/cpustdatomic.h
 include_rtems_score_HEADERS += include/rtems/score/freechain.h
+include_rtems_score_HEADERS += include/rtems/score/freechainimpl.h
 include_rtems_score_HEADERS += include/rtems/score/heap.h
 include_rtems_score_HEADERS += include/rtems/score/heapimpl.h
 include_rtems_score_HEADERS += include/rtems/score/heapinfo.h
diff --git a/cpukit/include/rtems/posix/keyimpl.h b/cpukit/include/rtems/posix/keyimpl.h
index d27244fe81..eed5d3fed2 100644
--- a/cpukit/include/rtems/posix/keyimpl.h
+++ b/cpukit/include/rtems/posix/keyimpl.h
@@ -19,7 +19,7 @@
 
 #include <rtems/posix/key.h>
 #include <rtems/score/chainimpl.h>
-#include <rtems/score/freechain.h>
+#include <rtems/score/freechainimpl.h>
 #include <rtems/score/objectimpl.h>
 #include <rtems/score/percpu.h>
 
diff --git a/cpukit/include/rtems/score/freechain.h b/cpukit/include/rtems/score/freechain.h
index ab1e8150da..7db1101cff 100644
--- a/cpukit/include/rtems/score/freechain.h
+++ b/cpukit/include/rtems/score/freechain.h
@@ -16,8 +16,7 @@
 #ifndef _RTEMS_SCORE_FREECHAIN_H
 #define _RTEMS_SCORE_FREECHAIN_H
 
-#include <rtems/score/basedefs.h>
-#include <rtems/score/chainimpl.h>
+#include <rtems/score/chain.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -37,11 +36,6 @@ extern "C" {
  * @{
  */
 
-/**
- * @brief Allocator function.
- */
-typedef void *( *Freechain_Allocator )( size_t size );
-
 /**
  * @brief The freechain control.
  */
@@ -52,122 +46,6 @@ typedef struct {
   Chain_Control Free;
 } Freechain_Control;
 
-/**
- * @brief Initializes a freechain.
- *
- * This routine initializes the freechain control structure to manage a chain
- * of nodes.  In the case the freechain is empty the extend handler is called to
- * get more nodes.
- *
- * @param[out] freechain The freechain control to initialize.
- * @param[out] initial_nodes Array with the initial nodes.
- * @param number_nodes The initial number of nodes.
- * @param node_size The node size.
- */
-RTEMS_INLINE_ROUTINE void _Freechain_Initialize(
-  Freechain_Control   *freechain,
-  void                *initial_nodes,
-  size_t               number_nodes,
-  size_t               node_size
-)
-{
-  _Chain_Initialize(
-    &freechain->Free,
-    initial_nodes,
-    number_nodes,
-    node_size
-  );
-}
-
-/**
- * @brief Return true if the freechain is empty, otherwise false
- *
- * @param freechain The freechain control.
- */
-RTEMS_INLINE_ROUTINE bool _Freechain_Is_empty(
-  const Freechain_Control *freechain
-)
-{
-  return _Chain_Is_empty( &freechain->Free );
-}
-
-/**
- * @brief Pops a node from the freechain.
- *
- * The freechain shall not be empty.
- *
- * @param freechain The freechain control.
- */
-RTEMS_INLINE_ROUTINE void *_Freechain_Pop( Freechain_Control *freechain )
-{
-  return _Chain_Get_first_unprotected( &freechain->Free );
-}
-
-/**
- * @brief Pushes a node back to the freechain.
- *
- * @param freechain The freechain control.
- * @param node The node to push back.  The node shall not be @c NULL.
- */
-void RTEMS_INLINE_ROUTINE _Freechain_Push(
-  Freechain_Control *freechain,
-  void              *node
-)
-{
-  _Chain_Initialize_node( node );
-  _Chain_Prepend_unprotected( &freechain->Free, node );
-}
-
-/**
- * @brief Extend the freechain with new nodes.
- *
- * @param freechain The freechain control.
- * @param allocator The allocator function.
- * @param number_nodes_to_extend The number of nodes to extend.
- * @param node_size The node size.
- *
- * @retval NULL The extend operation failed.
- * @retval nodes Pointer to the new nodes.
- */
-void *_Freechain_Extend(
-  Freechain_Control   *freechain,
-  Freechain_Allocator  allocator,
-  size_t               number_nodes_to_extend,
-  size_t               node_size
-);
-
-/**
- * @brief Gets a node from the freechain.
- *
- * @param[in, out] freechain The freechain control.
- * @param allocator The allocator function.
- * @param number_nodes_to_extend The number of nodes in the case an extend is
- *   necessary due to an empty freechain.
- * @param[in] node_size The node size.
- *
- * @retval NULL The freechain is empty and the extend operation failed.
- * @retval pointer Pointer to a node.  The node ownership passes to the
- * caller.
- */
-void *_Freechain_Get(
-  Freechain_Control   *freechain,
-  Freechain_Allocator  allocator,
-  size_t               number_nodes_to_extend,
-  size_t               node_size
-);
-
-/**
- * @brief Puts a node back onto the freechain.
- *
- * @param[in, out] freechain The freechain control.
- * @param[out] node The node to put back.  The node may be @c NULL, in this case
- *   the function does nothing.
- */
-void _Freechain_Put(
-  Freechain_Control *freechain,
-  void              *node
-);
-
 /** @} */
 
 #ifdef __cplusplus
diff --git a/cpukit/include/rtems/score/freechainimpl.h b/cpukit/include/rtems/score/freechainimpl.h
new file mode 100644
index 0000000000..25660003ff
--- /dev/null
+++ b/cpukit/include/rtems/score/freechainimpl.h
@@ -0,0 +1,161 @@
+/**
+ * @file
+ *
+ * @ingroup RTEMSScoreFreechain
+ *
+ * @brief Freechain Handler API
+ */
+/*
+ * Copyright (c) 2013 Gedare Bloom.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef _RTEMS_SCORE_FREECHAINIMPL_H
+#define _RTEMS_SCORE_FREECHAINIMPL_H
+
+#include <rtems/score/freechain.h>
+#include <rtems/score/basedefs.h>
+#include <rtems/score/chainimpl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup RTEMSScoreFreechain
+ *
+ * @{
+ */
+
+/**
+ * @brief Allocator function.
+ */
+typedef void *( *Freechain_Allocator )( size_t size );
+
+/**
+ * @brief Initializes a freechain.
+ *
+ * This routine initializes the freechain control structure to manage a chain
+ * of nodes.  In the case the freechain is empty the extend handler is called to
+ * get more nodes.
+ *
+ * @param[out] freechain The freechain control to initialize.
+ * @param[out] initial_nodes Array with the initial nodes.
+ * @param number_nodes The initial number of nodes.
+ * @param node_size The node size.
+ */
+RTEMS_INLINE_ROUTINE void _Freechain_Initialize(
+  Freechain_Control   *freechain,
+  void                *initial_nodes,
+  size_t               number_nodes,
+  size_t               node_size
+)
+{
+  _Chain_Initialize(
+    &freechain->Free,
+    initial_nodes,
+    number_nodes,
+    node_size
+  );
+}
+
+/**
+ * @brief Return true if the freechain is empty, otherwise false
+ *
+ * @param freechain The freechain control.
+ */
+RTEMS_INLINE_ROUTINE bool _Freechain_Is_empty(
+  const Freechain_Control *freechain
+)
+{
+  return _Chain_Is_empty( &freechain->Free );
+}
+
+/**
+ * @brief Pops a node from the freechain.
+ *
+ * The freechain shall not be empty.
+ *
+ * @param freechain The freechain control.
+ */
+RTEMS_INLINE_ROUTINE void *_Freechain_Pop( Freechain_Control *freechain )
+{
+  return _Chain_Get_first_unprotected( &freechain->Free );
+}
+
+/**
+ * @brief Pushes a node back to the freechain.
+ *
+ * @param freechain The freechain control.
+ * @param node The node to push back.  The node shall not be @c NULL.
+ */
+void RTEMS_INLINE_ROUTINE _Freechain_Push(
+  Freechain_Control *freechain,
+  void              *node
+)
+{
+  _Chain_Initialize_node( node );
+  _Chain_Prepend_unprotected( &freechain->Free, node );
+}
+
+/**
+ * @brief Extend the freechain with new nodes.
+ *
+ * @param freechain The freechain control.
+ * @param allocator The allocator function.
+ * @param number_nodes_to_extend The number of nodes to extend.
+ * @param node_size The node size.
+ *
+ * @retval NULL The extend operation failed.
+ * @retval nodes Pointer to the new nodes.
+ */
+void *_Freechain_Extend(
+  Freechain_Control   *freechain,
+  Freechain_Allocator  allocator,
+  size_t               number_nodes_to_extend,
+  size_t               node_size
+);
+
+/**
+ * @brief Gets a node from the freechain.
+ *
+ * @param[in, out] freechain The freechain control.
+ * @param allocator The allocator function.
+ * @param number_nodes_to_extend The number of nodes in the case an extend is
+ *   necessary due to an empty freechain.
+ * @param[in] node_size The node size.
+ *
+ * @retval NULL The freechain is empty and the extend operation failed.
+ * @retval pointer Pointer to a node.  The node ownership passes to the
+ * caller.
+ */
+void *_Freechain_Get(
+  Freechain_Control   *freechain,
+  Freechain_Allocator  allocator,
+  size_t               number_nodes_to_extend,
+  size_t               node_size
+);
+
+/**
+ * @brief Puts a node back onto the freechain.
+ *
+ * @param[in, out] freechain The freechain control.
+ * @param[out] node The node to put back.  The node may be @c NULL, in this case
+ *   the function does nothing.
+ */
+void _Freechain_Put(
+  Freechain_Control *freechain,
+  void              *node
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
diff --git a/cpukit/score/src/freechain.c b/cpukit/score/src/freechain.c
index 209a2b780d..e5b1f84a63 100644
--- a/cpukit/score/src/freechain.c
+++ b/cpukit/score/src/freechain.c
@@ -18,7 +18,7 @@
 #include "config.h"
 #endif
 
-#include <rtems/score/freechain.h>
+#include <rtems/score/freechainimpl.h>
 #include <rtems/score/assert.h>
 
 void *_Freechain_Extend(
diff --git a/cpukit/score/src/thread.c b/cpukit/score/src/thread.c
index 69bfcf66e7..a491753836 100644
--- a/cpukit/score/src/thread.c
+++ b/cpukit/score/src/thread.c
@@ -19,6 +19,7 @@
 #endif
 
 #include <rtems/score/threadimpl.h>
+#include <rtems/score/freechainimpl.h>
 #include <rtems/score/interr.h>
 #include <rtems/score/objectimpl.h>
 #include <rtems/score/scheduler.h>
diff --git a/cpukit/score/src/threadallocateunlimited.c b/cpukit/score/src/threadallocateunlimited.c
index 463a0ecb5d..6f2dec7388 100644
--- a/cpukit/score/src/threadallocateunlimited.c
+++ b/cpukit/score/src/threadallocateunlimited.c
@@ -36,6 +36,7 @@
 #endif
 
 #include <rtems/score/thread.h>
+#include <rtems/score/freechainimpl.h>
 #include <rtems/score/objectimpl.h>
 #include <rtems/score/wkspace.h>
 
diff --git a/cpukit/score/src/threadinitialize.c b/cpukit/score/src/threadinitialize.c
index 691f56388e..d85615e4b9 100644
--- a/cpukit/score/src/threadinitialize.c
+++ b/cpukit/score/src/threadinitialize.c
@@ -19,6 +19,7 @@
 #endif
 
 #include <rtems/score/threadimpl.h>
+#include <rtems/score/freechainimpl.h>
 #include <rtems/score/schedulerimpl.h>
 #include <rtems/score/stackimpl.h>
 #include <rtems/score/tls.h>
diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c
index 4e892f75f1..d51a22032c 100644
--- a/cpukit/score/src/threadrestart.c
+++ b/cpukit/score/src/threadrestart.c
@@ -25,6 +25,7 @@
 #include <rtems/score/apimutex.h>
 #include <rtems/score/assert.h>
 #include <rtems/score/chainimpl.h>
+#include <rtems/score/freechainimpl.h>
 #include <rtems/score/isrlock.h>
 #include <rtems/score/schedulerimpl.h>
 #include <rtems/score/stackimpl.h>
diff --git a/testsuites/sptests/spfreechain01/init.c b/testsuites/sptests/spfreechain01/init.c
index 72cd7920c5..8132757031 100644
--- a/testsuites/sptests/spfreechain01/init.c
+++ b/testsuites/sptests/spfreechain01/init.c
@@ -12,7 +12,7 @@
 
 #include <tmacros.h>
 #include <rtems/score/chainimpl.h>
-#include <rtems/score/freechain.h>
+#include <rtems/score/freechainimpl.h>
 
 const char rtems_test_name[] = "SPFREECHAIN 1";
 
-- 
2.26.2



More information about the devel mailing list