diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-06-24 14:00:08 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-07-01 08:24:31 +0200 |
commit | fdb45d6b26b6e31ab168f817d25a847f1847d4a1 (patch) | |
tree | dab5ed17112f010299fe6e000cbf42263fd84315 /cpukit/score/include/rtems/score/freechain.h | |
parent | doc: Fix interrupt level ARM documentation (diff) | |
download | rtems-fdb45d6b26b6e31ab168f817d25a847f1847d4a1.tar.bz2 |
score: Freechain handler API changes
Replace the extend function with an allocator since this fits better
to the current use case.
Diffstat (limited to 'cpukit/score/include/rtems/score/freechain.h')
-rw-r--r-- | cpukit/score/include/rtems/score/freechain.h | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/cpukit/score/include/rtems/score/freechain.h b/cpukit/score/include/rtems/score/freechain.h index d68a1f7c8c..7fa580a4e1 100644 --- a/cpukit/score/include/rtems/score/freechain.h +++ b/cpukit/score/include/rtems/score/freechain.h @@ -16,8 +16,7 @@ #ifndef _RTEMS_SCORE_FREECHAIN_H #define _RTEMS_SCORE_FREECHAIN_H -#include <stdbool.h> - +#include <rtems/score/basedefs.h> #include <rtems/score/chain.h> #ifdef __cplusplus @@ -36,27 +35,20 @@ extern "C" { * @{ */ -typedef struct Freechain_Control Freechain_Control; - /** - * @brief Extends the freechain. - * - * @param[in] freechain The freechain control. - * - * @retval true The freechain contains now at least one node. - * @retval false Otherwise. + * @brief Allocator function. */ -typedef bool ( *Freechain_Extend )( Freechain_Control *freechain ); +typedef void *( *Freechain_Allocator )( size_t size ); /** - * @typedef Freechain_Control - * - * This is used to manage freechain's nodes. + * @brief The freechain control. */ -struct Freechain_Control { - Chain_Control Freechain; - Freechain_Extend extend; -}; +typedef struct { + /** + * @brief Chain of free nodes. + */ + Chain_Control Free; +} Freechain_Control; /** * @brief Initializes a freechain. @@ -65,32 +57,42 @@ struct Freechain_Control { * of nodes. In case the freechain is empty the extend handler is called to * get more nodes. * - * @param[in,out] freechain The freechain control to initialize. - * @param[in] extend The extend handler. It is called by _Freechain_Get() in - * case the freechain is empty. + * @param[in] freechain The freechain control to initialize. + * @param[in] allocator The allocator function. + * @param[in] number_nodes The initial number of nodes. + * @param[in] node_size The node size. */ void _Freechain_Initialize( - Freechain_Control *freechain, - Freechain_Extend extend + Freechain_Control *freechain, + Freechain_Allocator allocator, + size_t number_nodes, + size_t node_size ); /** * @brief Gets a node from the freechain. * - * @param[in,out] freechain The freechain control. + * @param[in] freechain The freechain control. + * @param[in] allocator The allocator function. + * @param[in] number_nodes_to_extend The number of nodes in 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 otherwise Pointer to a node. The node ownership passes to the * caller. */ void *_Freechain_Get( - Freechain_Control *freechain + 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[in] freechain The freechain control. * @param[in] node The node to put back. */ void _Freechain_Put( |