|
RTEMS CPU Kit with SuperCore
4.10.99.0
|
The Chain Handler is used to manage sets of entities. More...
|
Data Structures | |
| struct | Chain_Node_struct |
| This is used to manage each element (node) which is placed on a chain. More... | |
| struct | Chain_Control |
| This is used to manage a chain. More... | |
Files | |
| file | chain.h |
Chain Handler API. | |
Defines | |
| #define | CHAIN_INITIALIZER_EMPTY(name) { { { &(name).Tail.Node, NULL }, &(name).Head.Node } } |
| Chain initializer for an empty chain with designator name. | |
| #define | CHAIN_DEFINE_EMPTY(name) Chain_Control name = CHAIN_INITIALIZER_EMPTY(name) |
| Chain definition for an empty chain with designator name. | |
Typedefs | |
| typedef struct Chain_Node_struct | Chain_Node |
| This type definition promotes the name for the Chain Node used by all RTEMS code. | |
Functions | |
| void | _Chain_Initialize (Chain_Control *the_chain, void *starting_address, size_t number_nodes, size_t node_size) |
| Initialize a chain header. | |
| void | _Chain_Extract (Chain_Node *the_node) |
| Extract the specified node from a chain. | |
| Chain_Node * | _Chain_Get (Chain_Control *the_chain) |
| Obtain the first node on a chain. | |
| void | _Chain_Insert (Chain_Node *after_node, Chain_Node *the_node) |
| Insert a node on a chain. | |
| void | _Chain_Append (Chain_Control *the_chain, Chain_Node *the_node) |
| Append a node on the end of a chain. | |
| bool | _Chain_Append_with_empty_check (Chain_Control *the_chain, Chain_Node *the_node) |
| Append a node and check if the chain was empty before. | |
| bool | _Chain_Prepend_with_empty_check (Chain_Control *the_chain, Chain_Node *the_node) |
| Prepend a node and check if the chain was empty before. | |
| bool | _Chain_Get_with_empty_check (Chain_Control *the_chain, Chain_Node **the_node) |
| Get the first node and check if the chain is empty afterwards. | |
| size_t | _Chain_Node_count_unprotected (const Chain_Control *chain) |
| Returns the node count of the chain. | |
| RTEMS_INLINE_ROUTINE void | _Chain_Set_off_chain (Chain_Node *node) |
| Set off chain. | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Is_node_off_chain (const Chain_Node *node) |
| Is the node off chain. | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Are_nodes_equal (const Chain_Node *left, const Chain_Node *right) |
| Are two nodes equal. | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Is_null (const Chain_Control *the_chain) |
| Is this chain control pointer NULL. | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Is_null_node (const Chain_Node *the_node) |
| Is the chain node pointer NULL. | |
| RTEMS_INLINE_ROUTINE Chain_Node * | _Chain_Head (Chain_Control *the_chain) |
| Return pointer to chain head. | |
| RTEMS_INLINE_ROUTINE const Chain_Node * | _Chain_Immutable_head (const Chain_Control *the_chain) |
| Return pointer to immutable chain head. | |
| RTEMS_INLINE_ROUTINE Chain_Node * | _Chain_Tail (Chain_Control *the_chain) |
| Return pointer to chain tail. | |
| RTEMS_INLINE_ROUTINE const Chain_Node * | _Chain_Immutable_tail (const Chain_Control *the_chain) |
| Return pointer to immutable chain tail. | |
| RTEMS_INLINE_ROUTINE Chain_Node * | _Chain_First (Chain_Control *the_chain) |
| Return pointer to chain's first node. | |
| RTEMS_INLINE_ROUTINE const Chain_Node * | _Chain_Immutable_first (const Chain_Control *the_chain) |
| Return pointer to immutable chain's first node. | |
| RTEMS_INLINE_ROUTINE Chain_Node * | _Chain_Last (Chain_Control *the_chain) |
| Return pointer to chain's last node. | |
| RTEMS_INLINE_ROUTINE const Chain_Node * | _Chain_Immutable_last (const Chain_Control *the_chain) |
| Return pointer to immutable chain's last node. | |
| RTEMS_INLINE_ROUTINE Chain_Node * | _Chain_Next (Chain_Node *the_node) |
| Return pointer the next node from this node. | |
| RTEMS_INLINE_ROUTINE const Chain_Node * | _Chain_Immutable_next (const Chain_Node *the_node) |
| Return pointer the immutable next node from this node. | |
| RTEMS_INLINE_ROUTINE Chain_Node * | _Chain_Previous (Chain_Node *the_node) |
| Return pointer the previous node from this node. | |
| RTEMS_INLINE_ROUTINE const Chain_Node * | _Chain_Immutable_previous (const Chain_Node *the_node) |
| Return pointer the immutable previous node from this node. | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Is_empty (const Chain_Control *the_chain) |
| Is the chain empty. | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Is_first (const Chain_Node *the_node) |
| Is this the first node on the chain. | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Is_last (const Chain_Node *the_node) |
| Is this the last node on the chain. | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Has_only_one_node (const Chain_Control *the_chain) |
| Does this chain have only one node. | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Is_head (const Chain_Control *the_chain, const Chain_Node *the_node) |
| Is this node the chain head. | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Is_tail (const Chain_Control *the_chain, const Chain_Node *the_node) |
| Is this node the chail tail. | |
| RTEMS_INLINE_ROUTINE void | _Chain_Initialize_empty (Chain_Control *the_chain) |
| Initialize this chain as empty. | |
| RTEMS_INLINE_ROUTINE void | _Chain_Extract_unprotected (Chain_Node *the_node) |
| Extract this node (unprotected). | |
| RTEMS_INLINE_ROUTINE Chain_Node * | _Chain_Get_first_unprotected (Chain_Control *the_chain) |
| Get the first node (unprotected). | |
| RTEMS_INLINE_ROUTINE Chain_Node * | _Chain_Get_unprotected (Chain_Control *the_chain) |
| Get the first node (unprotected). | |
| RTEMS_INLINE_ROUTINE void | _Chain_Insert_unprotected (Chain_Node *after_node, Chain_Node *the_node) |
| Insert a node (unprotected). | |
| RTEMS_INLINE_ROUTINE void | _Chain_Append_unprotected (Chain_Control *the_chain, Chain_Node *the_node) |
| Append a node (unprotected). | |
| RTEMS_INLINE_ROUTINE void | _Chain_Append_if_is_off_chain_unprotected (Chain_Control *the_chain, Chain_Node *the_node) |
| Append a node on the end of a chain if the node is in the off chain state (unprotected). | |
| RTEMS_INLINE_ROUTINE void | _Chain_Prepend_unprotected (Chain_Control *the_chain, Chain_Node *the_node) |
| Prepend a node (unprotected). | |
| RTEMS_INLINE_ROUTINE void | _Chain_Prepend (Chain_Control *the_chain, Chain_Node *the_node) |
| Prepend a node (protected). | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Append_with_empty_check_unprotected (Chain_Control *the_chain, Chain_Node *the_node) |
| Append a node and check if the chain was empty before (unprotected). | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Prepend_with_empty_check_unprotected (Chain_Control *the_chain, Chain_Node *the_node) |
| Prepend a node and check if the chain was empty before (unprotected). | |
| RTEMS_INLINE_ROUTINE bool | _Chain_Get_with_empty_check_unprotected (Chain_Control *the_chain, Chain_Node **the_node) |
| Get the first node and check if the chain is empty afterwards (unprotected). | |
The Chain Handler is used to manage sets of entities.
This handler provides two data structures. The Chain Node data structure is included as the first part of every data structure that will be placed on a chain. The second data structure is Chain Control which is used to manage a set of Chain Nodes.
This type definition promotes the name for the Chain Node used by all RTEMS code.
It is a separate type definition because a forward reference is required to define it. See Chain_Node_struct for detailed information.
| void _Chain_Append | ( | Chain_Control * | the_chain, |
| Chain_Node * | the_node | ||
| ) |
Append a node on the end of a chain.
This routine appends the_node onto the end of the_chain.
Referenced by rtems_chain_append(), _Partition_Free_buffer(), _CORE_message_queue_Free_message_buffer(), _Objects_MP_Free_global_object(), and _Thread_MP_Free_proxy().
| RTEMS_INLINE_ROUTINE void _Chain_Append_if_is_off_chain_unprotected | ( | Chain_Control * | the_chain, |
| Chain_Node * | the_node | ||
| ) |
Append a node on the end of a chain if the node is in the off chain state (unprotected).
References _Chain_Is_node_off_chain(), and _Chain_Append_unprotected().
| RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected | ( | Chain_Control * | the_chain, |
| Chain_Node * | the_node | ||
| ) |
Append a node (unprotected).
This routine appends the_node onto the end of the_chain.
| [in] | the_chain | is the chain to be operated upon. |
| [in] | the_node | is the node to be appended. |
References _Chain_Tail(), Chain_Node_struct::previous, and Chain_Node_struct::next.
Referenced by rtems_chain_append_unprotected(), _Chain_Append_if_is_off_chain_unprotected(), _Chain_Append_with_empty_check_unprotected(), _CORE_message_queue_Append_unprotected(), _Scheduler_priority_Ready_queue_enqueue(), and _Scheduler_priority_Ready_queue_requeue().
| bool _Chain_Append_with_empty_check | ( | Chain_Control * | the_chain, |
| Chain_Node * | the_node | ||
| ) |
Append a node and check if the chain was empty before.
This routine appends the_node onto the end of the_chain.
| [in] | the_chain | is the chain to be operated upon. |
| [in] | the_node | is the node to be appended. |
| true | The chain was empty before. |
| false | The chain contained at least one node before. |
Referenced by rtems_chain_append_with_empty_check().
| RTEMS_INLINE_ROUTINE bool _Chain_Append_with_empty_check_unprotected | ( | Chain_Control * | the_chain, |
| Chain_Node * | the_node | ||
| ) |
Append a node and check if the chain was empty before (unprotected).
This routine appends the_node onto the end of the_chain.
| [in] | the_chain | is the chain to be operated upon. |
| [in] | the_node | is the node to be appended. |
| true | The chain was empty before. |
| false | The chain contained at least one node before. |
References _Chain_Is_empty(), and _Chain_Append_unprotected().
| RTEMS_INLINE_ROUTINE bool _Chain_Are_nodes_equal | ( | const Chain_Node * | left, |
| const Chain_Node * | right | ||
| ) |
Are two nodes equal.
This function returns true if left and right are equal, and false otherwise.
| [in] | left | is the node on the left hand side of the comparison. |
| [in] | right | is the node on the left hand side of the comparison. |
| true | left and right are equal. |
| false | left and right are not equal. |
Referenced by rtems_chain_are_nodes_equal().
| void _Chain_Extract | ( | Chain_Node * | the_node | ) |
Extract the specified node from a chain.
This routine extracts the_node from the chain on which it resides. It disables interrupts to ensure the atomicity of the extract operation.
| [in] | the_node | is the node to be extracted |
Referenced by rtems_chain_extract(), and _Thread_MP_Free_proxy().
| RTEMS_INLINE_ROUTINE void _Chain_Extract_unprotected | ( | Chain_Node * | the_node | ) |
Extract this node (unprotected).
This routine extracts the_node from the chain on which it resides. It does NOT disable interrupts to ensure the atomicity of the extract operation.
| [in] | the_node | is the node to be extracted. |
References Chain_Node_struct::next, and Chain_Node_struct::previous.
Referenced by rtems_chain_extract_unprotected(), _Scheduler_priority_Ready_queue_extract(), _Scheduler_priority_Ready_queue_requeue(), and _Scheduler_simple_Ready_queue_requeue().
| RTEMS_INLINE_ROUTINE Chain_Node* _Chain_First | ( | Chain_Control * | the_chain | ) |
Return pointer to chain's first node.
This function returns a pointer to the first node on the chain after the head.
| [in] | the_chain | is the chain to be operated upon. |
References _Chain_Head(), and Chain_Node_struct::next.
Referenced by rtems_chain_first(), _Scheduler_priority_Ready_queue_first(), and _Watchdog_First().
| Chain_Node* _Chain_Get | ( | Chain_Control * | the_chain | ) |
Obtain the first node on a chain.
This function removes the first node from the_chain and returns a pointer to that node. If the_chain is empty, then NULL is returned.
| This | method returns a pointer a node. If a node was removed, then a pointer to that node is returned. If the_chain was empty, then NULL is returned. |
Referenced by rtems_chain_get(), _Partition_Allocate_buffer(), _CORE_message_queue_Allocate_message_buffer(), and _Objects_MP_Allocate_global_object().
| RTEMS_INLINE_ROUTINE Chain_Node* _Chain_Get_first_unprotected | ( | Chain_Control * | the_chain | ) |
Get the first node (unprotected).
This function removes the first node from the_chain and returns a pointer to that node. It does NOT disable interrupts to ensure the atomicity of the get operation.
| [in] | the_chain | is the chain to attempt to get the first node from. |
References _Chain_Head(), Chain_Node_struct::next, and Chain_Node_struct::previous.
Referenced by _Chain_Get_unprotected().
| RTEMS_INLINE_ROUTINE Chain_Node* _Chain_Get_unprotected | ( | Chain_Control * | the_chain | ) |
Get the first node (unprotected).
This function removes the first node from the_chain and returns a pointer to that node. If the_chain is empty, then NULL is returned.
| [in] | the_chain | is the chain to attempt to get the first node from. |
References _Chain_Is_empty(), and _Chain_Get_first_unprotected().
Referenced by rtems_chain_get_unprotected(), and _CORE_message_queue_Get_pending_message().
| bool _Chain_Get_with_empty_check | ( | Chain_Control * | the_chain, |
| Chain_Node ** | the_node | ||
| ) |
Get the first node and check if the chain is empty afterwards.
This function removes the first node from the_chain and returns a pointer to that node in the_node. If the_chain is empty, then NULL is returned.
| [in] | the_chain | is the chain to attempt to get the first node from. |
| [out] | the_node | is the first node on the chain or NULL if the chain is empty. |
| true | The chain is empty now. |
| false | The chain contains at least one node now. |
Referenced by rtems_chain_get_with_empty_check().
| RTEMS_INLINE_ROUTINE bool _Chain_Get_with_empty_check_unprotected | ( | Chain_Control * | the_chain, |
| Chain_Node ** | the_node | ||
| ) |
Get the first node and check if the chain is empty afterwards (unprotected).
This function removes the first node from the_chain and returns a pointer to that node in the_node. If the_chain is empty, then NULL is returned.
| [in] | the_chain | is the chain to attempt to get the first node from. |
| [out] | the_node | is the first node on the chain or NULL if the chain is empty. |
| true | The chain is empty now. |
| false | The chain contains at least one node now. |
References _Chain_Head(), _Chain_Tail(), Chain_Node_struct::next, and Chain_Node_struct::previous.
| RTEMS_INLINE_ROUTINE bool _Chain_Has_only_one_node | ( | const Chain_Control * | the_chain | ) |
Does this chain have only one node.
This function returns true if there is only one node on the_chain and false otherwise.
| [in] | the_chain | is the chain to be operated upon. |
| true | There is only one node on the_chain. |
| false | There is more than one node on the_chain. |
References _Chain_Immutable_first(), and _Chain_Immutable_last().
Referenced by rtems_chain_has_only_one_node(), _Scheduler_priority_Ready_queue_extract(), and _Scheduler_priority_Ready_queue_requeue().
| RTEMS_INLINE_ROUTINE Chain_Node* _Chain_Head | ( | Chain_Control * | the_chain | ) |
Return pointer to chain head.
This function returns a pointer to the head node on the chain.
| [in] | the_chain | is the chain to be operated upon. |
Referenced by rtems_chain_head(), _Chain_First(), _Chain_Initialize_empty(), _Chain_Get_first_unprotected(), _Chain_Prepend_unprotected(), _Chain_Prepend(), and _Chain_Get_with_empty_check_unprotected().
| RTEMS_INLINE_ROUTINE const Chain_Node* _Chain_Immutable_first | ( | const Chain_Control * | the_chain | ) |
Return pointer to immutable chain's first node.
This function returns a pointer to the first node on the chain after the head.
| [in] | the_chain | is the chain to be operated upon. |
References _Chain_Immutable_head(), and Chain_Node_struct::next.
Referenced by rtems_chain_immutable_first(), _Chain_Is_empty(), and _Chain_Has_only_one_node().
| RTEMS_INLINE_ROUTINE const Chain_Node* _Chain_Immutable_head | ( | const Chain_Control * | the_chain | ) |
Return pointer to immutable chain head.
This function returns a pointer to the head node on the chain.
| [in] | the_chain | is the chain to be operated upon. |
Referenced by rtems_chain_immutable_head(), _Chain_Immutable_first(), and _Chain_Is_head().
| RTEMS_INLINE_ROUTINE const Chain_Node* _Chain_Immutable_last | ( | const Chain_Control * | the_chain | ) |
Return pointer to immutable chain's last node.
This function returns a pointer to the last node on the chain just before the tail.
| [in] | the_chain | is the chain to be operated upon. |
References _Chain_Immutable_tail(), and Chain_Node_struct::previous.
Referenced by rtems_chain_immutable_last(), and _Chain_Has_only_one_node().
| RTEMS_INLINE_ROUTINE const Chain_Node* _Chain_Immutable_next | ( | const Chain_Node * | the_node | ) |
Return pointer the immutable next node from this node.
This function returns a pointer to the next node after this node.
| [in] | the_node | is the node to be operated upon. |
References Chain_Node_struct::next.
Referenced by rtems_chain_immutable_next().
| RTEMS_INLINE_ROUTINE const Chain_Node* _Chain_Immutable_previous | ( | const Chain_Node * | the_node | ) |
Return pointer the immutable previous node from this node.
This function returns a pointer to the previous node on this chain.
| [in] | the_node | is the node to be operated upon. |
References Chain_Node_struct::previous.
Referenced by rtems_chain_immutable_previous().
| RTEMS_INLINE_ROUTINE const Chain_Node* _Chain_Immutable_tail | ( | const Chain_Control * | the_chain | ) |
Return pointer to immutable chain tail.
This function returns a pointer to the tail node on the chain.
| [in] | the_chain | is the chain to be operated upon. |
Referenced by rtems_chain_immutable_tail(), _Chain_Immutable_last(), _Chain_Is_empty(), and _Chain_Is_tail().
| void _Chain_Initialize | ( | Chain_Control * | the_chain, |
| void * | starting_address, | ||
| size_t | number_nodes, | ||
| size_t | node_size | ||
| ) |
Initialize a chain header.
This routine initializes the_chain structure to manage the contiguous array of number_nodes nodes which starts at starting_address. Each node is of node_size bytes.
| [in] | the_chain | specifies the chain to initialize |
| [in] | starting_address | is the starting address of the array of elements |
| [in] | number_nodes | is the numebr of nodes that will be in the chain |
| [in] | node_size | is the size of each node |
Referenced by rtems_chain_initialize().
| RTEMS_INLINE_ROUTINE void _Chain_Initialize_empty | ( | Chain_Control * | the_chain | ) |
Initialize this chain as empty.
This routine initializes the specified chain to contain zero nodes.
| [in] | the_chain | is the chain to be initialized. |
References _Chain_Head(), _Chain_Tail(), Chain_Node_struct::next, and Chain_Node_struct::previous.
Referenced by rtems_chain_initialize_empty(), _Scheduler_priority_Ready_queue_initialize(), and _Scheduler_priority_Ready_queue_extract().
| void _Chain_Insert | ( | Chain_Node * | after_node, |
| Chain_Node * | the_node | ||
| ) |
Insert a node on a chain.
This routine inserts the_node on a chain immediately following after_node.
| [in] | after_node | is the pointer to the node in chain to be inserted after |
| [in] | the_node | is the pointer to the node to be inserted |
Referenced by rtems_chain_insert(), and _Chain_Prepend().
| RTEMS_INLINE_ROUTINE void _Chain_Insert_unprotected | ( | Chain_Node * | after_node, |
| Chain_Node * | the_node | ||
| ) |
Insert a node (unprotected).
This routine inserts the_node on a chain immediately following after_node.
| [in] | after_node | is the node which will precede the_node on the chain. |
| [in] | the_node | is the node to be inserted. |
References Chain_Node_struct::previous, and Chain_Node_struct::next.
Referenced by rtems_chain_insert_unprotected(), and _Chain_Prepend_unprotected().
| RTEMS_INLINE_ROUTINE bool _Chain_Is_empty | ( | const Chain_Control * | the_chain | ) |
Is the chain empty.
This function returns true if there a no nodes on the_chain and false otherwise.
| [in] | the_chain | is the chain to be operated upon. |
| true | There are no nodes on the_chain. |
| false | There are nodes on the_chain. |
References _Chain_Immutable_first(), and _Chain_Immutable_tail().
Referenced by rtems_chain_is_empty(), _Chain_Get_unprotected(), _Chain_Append_with_empty_check_unprotected(), _Chain_Prepend_with_empty_check_unprotected(), and _Scheduler_priority_Ready_queue_first().
| RTEMS_INLINE_ROUTINE bool _Chain_Is_first | ( | const Chain_Node * | the_node | ) |
Is this the first node on the chain.
This function returns true if the_node is the first node on a chain and false otherwise.
| [in] | the_node | is the node the caller wants to know if it is the first node on a chain. |
| true | the_node is the first node on a chain. |
| false | the_node is not the first node on a chain. |
References Chain_Node_struct::previous.
Referenced by rtems_chain_is_first().
| RTEMS_INLINE_ROUTINE bool _Chain_Is_head | ( | const Chain_Control * | the_chain, |
| const Chain_Node * | the_node | ||
| ) |
Is this node the chain head.
This function returns true if the_node is the head of the_chain and false otherwise.
| [in] | the_chain | is the chain to be operated upon. |
| [in] | the_node | is the node to check for being the Chain Head. |
| true | the_node is the head of the_chain. |
| false | the_node is not the head of the_chain. |
References _Chain_Immutable_head().
Referenced by rtems_chain_is_head().
| RTEMS_INLINE_ROUTINE bool _Chain_Is_last | ( | const Chain_Node * | the_node | ) |
Is this the last node on the chain.
This function returns true if the_node is the last node on a chain and false otherwise.
| [in] | the_node | is the node to check as the last node. |
| true | the_node is the last node on a chain. |
| false | the_node is not the last node on a chain. |
References Chain_Node_struct::next.
Referenced by rtems_chain_is_last().
| RTEMS_INLINE_ROUTINE bool _Chain_Is_node_off_chain | ( | const Chain_Node * | node | ) |
Is the node off chain.
This function returns true if the node is not on a chain. A node is off chain if the next and previous fields are set to NULL.
| [in] | node | is the node off chain. |
| true | The node is off chain. |
| false | The node is not off chain. |
References Chain_Node_struct::next, and Chain_Node_struct::previous.
Referenced by rtems_chain_is_node_off_chain(), and _Chain_Append_if_is_off_chain_unprotected().
| RTEMS_INLINE_ROUTINE bool _Chain_Is_null | ( | const Chain_Control * | the_chain | ) |
Is this chain control pointer NULL.
This function returns true if the_chain is NULL and false otherwise.
| [in] | the_chain | is the chain to be checked for empty status. |
| true | the_chain is NULL. |
| false | the_chain is not NULL. |
| RTEMS_INLINE_ROUTINE bool _Chain_Is_null_node | ( | const Chain_Node * | the_node | ) |
Is the chain node pointer NULL.
This function returns true if the_node is NULL and false otherwise.
| [in] | the_node | is the node pointer to check. |
| true | the_node is NULL. |
| false | the_node is not NULL. |
Referenced by rtems_chain_is_null_node().
| RTEMS_INLINE_ROUTINE bool _Chain_Is_tail | ( | const Chain_Control * | the_chain, |
| const Chain_Node * | the_node | ||
| ) |
Is this node the chail tail.
This function returns true if the_node is the tail of the_chain and false otherwise.
| [in] | the_chain | is the chain to be operated upon. |
| [in] | the_node | is the node to check for being the Chain Tail. |
| true | the_node is the tail of the_chain. |
| false | the_node is not the tail of the_chain. |
References _Chain_Immutable_tail().
Referenced by rtems_chain_is_tail().
| RTEMS_INLINE_ROUTINE Chain_Node* _Chain_Last | ( | Chain_Control * | the_chain | ) |
Return pointer to chain's last node.
This function returns a pointer to the last node on the chain just before the tail.
| [in] | the_chain | is the chain to be operated upon. |
References _Chain_Tail(), and Chain_Node_struct::previous.
Referenced by rtems_chain_last(), and _Watchdog_Last().
| RTEMS_INLINE_ROUTINE Chain_Node* _Chain_Next | ( | Chain_Node * | the_node | ) |
Return pointer the next node from this node.
This function returns a pointer to the next node after this node.
| [in] | the_node | is the node to be operated upon. |
References Chain_Node_struct::next.
Referenced by rtems_chain_next().
| size_t _Chain_Node_count_unprotected | ( | const Chain_Control * | chain | ) |
Returns the node count of the chain.
| [in] | chain | The chain. |
| The | node count of the chain. |
Referenced by rtems_chain_node_count_unprotected().
| RTEMS_INLINE_ROUTINE void _Chain_Prepend | ( | Chain_Control * | the_chain, |
| Chain_Node * | the_node | ||
| ) |
Prepend a node (protected).
This routine prepends the_node onto the front of the_chain.
| [in] | the_chain | is the chain to be operated upon. |
| [in] | the_node | is the node to be prepended. |
References _Chain_Insert(), and _Chain_Head().
Referenced by rtems_chain_prepend().
| RTEMS_INLINE_ROUTINE void _Chain_Prepend_unprotected | ( | Chain_Control * | the_chain, |
| Chain_Node * | the_node | ||
| ) |
Prepend a node (unprotected).
This routine prepends the_node onto the front of the_chain.
| [in] | the_chain | is the chain to be operated upon. |
| [in] | the_node | is the node to be prepended. |
References _Chain_Insert_unprotected(), and _Chain_Head().
Referenced by rtems_chain_prepend_unprotected(), _Chain_Prepend_with_empty_check_unprotected(), _CORE_message_queue_Prepend_unprotected(), _CORE_mutex_Seize_interrupt_trylock_body(), and _Scheduler_priority_Ready_queue_enqueue_first().
| bool _Chain_Prepend_with_empty_check | ( | Chain_Control * | the_chain, |
| Chain_Node * | the_node | ||
| ) |
Prepend a node and check if the chain was empty before.
This routine prepends the_node onto the front of the_chain.
| [in] | the_chain | is the chain to be operated upon. |
| [in] | the_node | is the node to be prepended. |
| true | The chain was empty before. |
| false | The chain contained at least one node before. |
Referenced by rtems_chain_prepend_with_empty_check().
| RTEMS_INLINE_ROUTINE bool _Chain_Prepend_with_empty_check_unprotected | ( | Chain_Control * | the_chain, |
| Chain_Node * | the_node | ||
| ) |
Prepend a node and check if the chain was empty before (unprotected).
This routine prepends the_node onto the front of the_chain.
| [in] | the_chain | is the chain to be operated upon. |
| [in] | the_node | is the node to be prepended. |
| true | The chain was empty before. |
| false | The chain contained at least one node before. |
References _Chain_Is_empty(), and _Chain_Prepend_unprotected().
| RTEMS_INLINE_ROUTINE Chain_Node* _Chain_Previous | ( | Chain_Node * | the_node | ) |
Return pointer the previous node from this node.
This function returns a pointer to the previous node on this chain.
| [in] | the_node | is the node to be operated upon. |
References Chain_Node_struct::previous.
Referenced by rtems_chain_previous().
| RTEMS_INLINE_ROUTINE void _Chain_Set_off_chain | ( | Chain_Node * | node | ) |
Set off chain.
This function sets the next and previous fields of the node to NULL indicating the node is not part of a chain.
| [in] | node | the node set to off chain. |
References Chain_Node_struct::next, and Chain_Node_struct::previous.
Referenced by rtems_chain_set_off_chain().
| RTEMS_INLINE_ROUTINE Chain_Node* _Chain_Tail | ( | Chain_Control * | the_chain | ) |
Return pointer to chain tail.
This function returns a pointer to the tail node on the chain.
| [in] | the_chain | is the chain to be operated upon. |
Referenced by rtems_chain_tail(), _Chain_Last(), _Chain_Initialize_empty(), _Chain_Append_unprotected(), and _Chain_Get_with_empty_check_unprotected().
1.7.5