diff options
author | Amar Takhar <amar@rtems.org> | 2014-12-28 17:17:16 -0500 |
---|---|---|
committer | Amar Takhar <amar@rtems.org> | 2015-12-13 14:12:21 -0500 |
commit | 9216d4e8abc689ad1b7f60476338ec12e90c29f5 (patch) | |
tree | e9b88285732dad9ffe56226d27c68e9a713920bd /cpukit | |
parent | 0d53be8e9f84b329e6e021d07e1a54a0770d15f7 (diff) |
Move the score MP headers.
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/score/include/rtems/score/mpci.h | 135 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/mppkt.h | 121 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/objectmp.h | 228 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/threadmp.h | 127 |
4 files changed, 0 insertions, 611 deletions
diff --git a/cpukit/score/include/rtems/score/mpci.h b/cpukit/score/include/rtems/score/mpci.h deleted file mode 100644 index c20b45c3e1..0000000000 --- a/cpukit/score/include/rtems/score/mpci.h +++ /dev/null @@ -1,135 +0,0 @@ -/** - * @file - * - * @ingroup ScoreMPCI - * - * @brief MPCI Layer API - */ - -/* - * COPYRIGHT (c) 1989-2009. - * On-Line Applications Research Corporation (OAR). - * - * 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_MPCI_H -#define _RTEMS_SCORE_MPCI_H - -#include <rtems/score/mppkt.h> -#include <rtems/score/thread.h> -#include <rtems/score/threadq.h> -#include <rtems/score/watchdog.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @defgroup ScoreMPCI MPCI Handler - * - * @ingroup Score - * - * The MPCI Handler encapsulates functionality which is related to the - * generation, receipt, and processing of remote operations in a - * multiprocessor system. This handler contains the message passing - * support for making remote service calls as well as the server thread - * which processes requests from remote nodes. -*/ -/**@{*/ - -/** - * The following defines the node number used when a broadcast is desired. - */ -#define MPCI_ALL_NODES 0 - -/** - * This type is returned by all user provided MPCI routines. - */ -typedef void MPCI_Entry; - -/** - * This type defines the prototype for the initization entry point - * in an Multiprocessor Communications Interface. - */ -typedef MPCI_Entry ( *MPCI_initialization_entry )( void ); - -/** - * This type defines the prototype for the get packet entry point - * in an Multiprocessor Communications Interface. The single - * parameter will point to the packet allocated. - */ -typedef MPCI_Entry ( *MPCI_get_packet_entry )( - MP_packet_Prefix ** - ); - -/** - * This type defines the prototype for the return packet entry point - * in an Multiprocessor Communications Interface. The single - * parameter will point to a packet previously allocated by the - * get packet MPCI entry. - */ -typedef MPCI_Entry ( *MPCI_return_packet_entry )( - MP_packet_Prefix * - ); - -/** - * This type defines the prototype for send get packet entry point - * in an Multiprocessor Communications Interface. The single - * parameter will point to a packet previously allocated by the - * get packet entry point that has been filled in by the caller. - */ -typedef MPCI_Entry ( *MPCI_send_entry )( - uint32_t, - MP_packet_Prefix * - ); - -/** - * This type defines the prototype for the receive packet entry point - * in an Multiprocessor Communications Interface. The single - * parameter will point to a packet allocated and filled in by the - * receive packet handler. The caller will block until a packet is - * received. - */ -typedef MPCI_Entry ( *MPCI_receive_entry )( - MP_packet_Prefix ** - ); - -/** - * This type defines the Multiprocessor Communications - * Interface (MPCI) Table. This table defines the user-provided - * MPCI which is a required part of a multiprocessor system. - * - * For non-blocking local operations that become remote operations, - * we need a timeout. This is a per-driver timeout: default_timeout - */ -typedef struct { - /** This fields contains the timeout for MPCI operations in ticks. */ - uint32_t default_timeout; - /** This field contains the maximum size of a packet supported by this - * MPCI layer. This size places a limit on the size of a message - * which can be transmitted over this interface. - **/ - size_t maximum_packet_size; - /** This field points to the MPCI initialization entry point. */ - MPCI_initialization_entry initialization; - /** This field points to the MPCI get packet entry point. */ - MPCI_get_packet_entry get_packet; - /** This field points to the MPCI return packet entry point. */ - MPCI_return_packet_entry return_packet; - /** This field points to the MPCI send packet entry point. */ - MPCI_send_entry send_packet; - /** This field points to the MPCI receive packet entry point. */ - MPCI_receive_entry receive_packet; -} MPCI_Control; - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif -/* end of include file */ diff --git a/cpukit/score/include/rtems/score/mppkt.h b/cpukit/score/include/rtems/score/mppkt.h deleted file mode 100644 index cd1d9b9cb2..0000000000 --- a/cpukit/score/include/rtems/score/mppkt.h +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @file rtems/score/mppkt.h - * - * @brief Specification for the Packet Handler - * - * This package is the specification for the Packet Handler. - * This handler defines the basic packet and provides - * mechanisms to utilize packets based on this prefix. - * Packets are the fundamental basis for messages passed between - * nodes in an MP system. - */ - -/* - * COPYRIGHT (c) 1989-2011. - * On-Line Applications Research Corporation (OAR). - * - * 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_MPPKT_H -#define _RTEMS_SCORE_MPPKT_H - -#include <rtems/score/object.h> -#include <rtems/score/priority.h> -#include <rtems/score/watchdog.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @defgroup ScoreMPPacket MP Packet Handler - * - * @ingroup Score - * - * This handler encapsulates the primary definition of MPCI packets. This - * handler defines the part of the packet that is common to all remote - * operations. - */ -/**@{*/ - -/** - * The following enumerated type defines the packet classes. - * - * @note In general, each class corresponds to a manager - * which supports global operations. Each manager - * defines the set of supported operations. - */ -typedef enum { - MP_PACKET_MPCI_INTERNAL = 0, - MP_PACKET_TASKS = 1, - MP_PACKET_MESSAGE_QUEUE = 2, - MP_PACKET_SEMAPHORE = 3, - MP_PACKET_PARTITION = 4, - MP_PACKET_REGION = 5, - MP_PACKET_EVENT = 6, - MP_PACKET_SIGNAL = 7 -} MP_packet_Classes; - -/** - * This constant defines the first entry in the MP_packet_Classes enumeration. - */ -#define MP_PACKET_CLASSES_FIRST MP_PACKET_MPCI_INTERNAL - -/** - * This constant defines the last entry in the MP_packet_Classes enumeration. - */ -#define MP_PACKET_CLASSES_LAST MP_PACKET_SIGNAL - -/** - * The following record contains the prefix for every packet - * passed between nodes in an MP system. - * - * @note This structure is padded to ensure that anything following it - * is on a 16 byte boundary. This is the most stringent structure - * alignment rule encountered yet. - */ -typedef struct { - /** This field indicates the API class of the operation being performed. */ - MP_packet_Classes the_class; - /** This field is the id of the object to be acted upon. */ - Objects_Id id; - /** This field is the ID of the originating thread. */ - Objects_Id source_tid; - /** This field is the priority of the originating thread. */ - Priority_Control source_priority; - /** This field is where the status of the operation will be returned. */ - uint32_t return_code; - /** This field is the length of the data following the prefix. */ - uint32_t length; - /** This field is the length of the data which required network conversion. */ - uint32_t to_convert; - /** This field is the requested timeout for this operation. */ - Watchdog_Interval timeout; -} MP_packet_Prefix; - -/** - * An MPCI must support packets of at least this size. - */ -#define MP_PACKET_MINIMUM_PACKET_SIZE 64 - -/** - * The following constant defines the number of uint32_t's - * in a packet which must be converted to native format in a - * heterogeneous system. In packets longer than - * MP_PACKET_MINIMUN_HETERO_CONVERSION uint32_t's, some of the "extra" data - * may a user message buffer which is not automatically endian swapped. - */ -#define MP_PACKET_MINIMUN_HETERO_CONVERSION \ - ( sizeof( MP_packet_Prefix ) / sizeof( uint32_t ) ) - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif -/* end of include file */ diff --git a/cpukit/score/include/rtems/score/objectmp.h b/cpukit/score/include/rtems/score/objectmp.h deleted file mode 100644 index 934b3981ef..0000000000 --- a/cpukit/score/include/rtems/score/objectmp.h +++ /dev/null @@ -1,228 +0,0 @@ -/** - * @file rtems/score/objectmp.h - * - * @brief Data Associated with the Manipulation of Global RTEMS Objects - * - * This include file contains all the constants and structures associated - * with the manipulation of Global RTEMS Objects. - */ - -/* - * COPYRIGHT (c) 1989-2009. - * On-Line Applications Research Corporation (OAR). - * - * 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_OBJECTMP_H -#define _RTEMS_SCORE_OBJECTMP_H - -#ifndef _RTEMS_SCORE_OBJECTIMPL_H -# error "Never use <rtems/rtems/objectmp.h> directly; include <rtems/rtems/objectimpl.h> instead." -#endif - -#include <rtems/score/chainimpl.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @defgroup ScoreObjectMP Object Handler Multiprocessing Support - * - * @ingroup Score - * - * This handler encapsulates functionality which is used to manage - * objects which have been declared to be globally visible. This handler - * knows objects from all of the nodes in the system. - */ -/**@{*/ - -/** - * @brief Intializes the inactive global object chain - * based on the maximum number of global objects configured. - * - * This routine intializes the inactive global object chain - * based on the maximum number of global objects configured. - */ -void _Objects_MP_Handler_initialization(void); - -/** - * @brief Intializes the global object node number - * used in the ID field of all objects. - * - * This routine intializes the global object node number - * used in the ID field of all objects. - */ -void _Objects_MP_Handler_early_initialization(void); - -/** - * @brief Place the specified global object in the - * specified information table. - * - * This routine place the specified global object in the - * specified information table. - * - * @param[in] information points to the object information table for this - * object class. - * @param[in] the_global_object points to the object being opened. - * @param[in] the_name is the name of the object being opened. - * @param[in] the_id is the Id of the object being opened. - * - * @todo This method only works for object types with 4 byte object names. - * It does not support variable length object names. - */ -void _Objects_MP_Open ( - Objects_Information *information, - Objects_MP_Control *the_global_object, - uint32_t the_name, - Objects_Id the_id -); - -/** - * @brief Allocates a global object control block - * and places it in the specified information table. - * - * This routine allocates a global object control block - * and places it in the specified information table. If the - * allocation fails, then is_fatal_error determines the - * error processing actions taken. - * - * @param[in] information points to the object information table for this - * object class. - * @param[in] the_name is the name of the object being opened. - * @param[in] the_id is the Id of the object being opened. - * @param[in] is_fatal_error is true if not being able to allocate the - * object is considered a fatal error. - * - * @todo This method only works for object types with 4 byte object names. - * It does not support variable length object names. - */ -bool _Objects_MP_Allocate_and_open ( - Objects_Information *information, - uint32_t the_name, - Objects_Id the_id, - bool is_fatal_error -); - -/** - * @brief Removes a global object from the specified information table. - * - * This routine removes a global object from the specified - * information table and deallocates the global object control block. - */ -void _Objects_MP_Close ( - Objects_Information *information, - Objects_Id the_id -); - -/** - * @brief Look for the object with the_name in the global - * object tables indicated by information. - * - * This routine looks for the object with the_name in the global - * object tables indicated by information. It returns the ID of the - * object with that name if one is found. - * - * @param[in] information points to the object information table for this - * object class. - * @param[in] the_name is the name of the object being searched for. - * @param[in] nodes_to_search indicates the set of nodes to search. - * @param[in] the_id will contain the Id of the object if found. - * - * @retval This method returns one of the - * @ref Objects_Name_or_id_lookup_errors. If successful, @a the_id - * will contain the Id of the object. - */ -Objects_Name_or_id_lookup_errors _Objects_MP_Global_name_search ( - Objects_Information *information, - Objects_Name the_name, - uint32_t nodes_to_search, - Objects_Id *the_id -); - -/** - * @brief Searches the Global Object Table managed - * by information for the object indicated by ID. - * - * This function searches the Global Object Table managed - * by information for the object indicated by ID. If the object - * is found, then location is set to objects_remote, otherwise - * location is set to objects_error. In both cases, the_object - * is undefined. - * - * @param[in] information points to the object information table for this - * object class. - * @param[in] the_id is the Id of the object being opened. - * @param[in] location will contain the location of the object. - * @param[in] the_object will contain a pointer to the object. - * - * @retval This method fills in @a location to indicate successful location - * of the object or error. On success, @a the_object will be - * filled in. - */ -void _Objects_MP_Is_remote ( - Objects_Information *information, - Objects_Id the_id, - Objects_Locations *location, - Objects_Control **the_object -); - -/** - * This is the maximum number of global objects configured. - */ -SCORE_EXTERN uint32_t _Objects_MP_Maximum_global_objects; - -/** - * The following chain header is used to manage the set of - * inactive global object control blocks. - */ -SCORE_EXTERN Chain_Control _Objects_MP_Inactive_global_objects; - -/** - * This function allocates a Global Object control block. - */ - -RTEMS_INLINE_ROUTINE Objects_MP_Control *_Objects_MP_Allocate_global_object ( - void -) -{ - return (Objects_MP_Control *) - _Chain_Get( &_Objects_MP_Inactive_global_objects ); -} - -/** - * This routine deallocates a Global Object control block. - */ - -RTEMS_INLINE_ROUTINE void _Objects_MP_Free_global_object ( - Objects_MP_Control *the_object -) -{ - _Chain_Append( - &_Objects_MP_Inactive_global_objects, - &the_object->Object.Node - ); -} - -/** - * This function returns whether the global object is NULL or not. - */ - -RTEMS_INLINE_ROUTINE bool _Objects_MP_Is_null_global_object ( - Objects_MP_Control *the_object -) -{ - return( the_object == NULL ); -} - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif -/* end of include file */ diff --git a/cpukit/score/include/rtems/score/threadmp.h b/cpukit/score/include/rtems/score/threadmp.h deleted file mode 100644 index 27b6989893..0000000000 --- a/cpukit/score/include/rtems/score/threadmp.h +++ /dev/null @@ -1,127 +0,0 @@ -/** - * @file rtems/score/threadmp.h - * - * @brief Multiprocessing Portion of the Thread Package - * - * This include file contains the specification for all routines - * and data specific to the multiprocessing portion of the thread package. - */ - -/* - * COPYRIGHT (c) 1989-2009. - * On-Line Applications Research Corporation (OAR). - * - * 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_THREADMP_H -#define _RTEMS_SCORE_THREADMP_H - -#ifndef _RTEMS_SCORE_THREADIMPL_H -# error "Never use <rtems/score/threadmp.h> directly; include <rtems/score/threadimpl.h> instead." -#endif - -#include <rtems/score/mpciimpl.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @defgroup ScoreThreadMP Thread Handler Multiprocessing Support - * - * @ingroup Score - * - * This handler encapsulates functionality which is related to managing - * threads in a multiprocessor system configuration. This handler must - * manage proxies which represent remote threads blocking on local - * operations. - */ -/**@{*/ - -/** - * @brief Initialize MP thread handler. - * - * This routine initializes the multiprocessing portion of the Thread Handler. - */ -void _Thread_MP_Handler_initialization ( - uint32_t maximum_proxies -); - -/** - * @brief Allocate a MP proxy control block from - * the inactive chain of free proxy control blocks. - * - * This allocates a proxy control block from - * the inactive chain of free proxy control blocks. - * - * @note This function returns a thread control pointer - * because proxies are substitutes for remote threads. - */ -Thread_Control *_Thread_MP_Allocate_proxy ( - States_Control the_state -); - -/** - * @brief Removes the MP proxy control block for the specified - * id from the active chain of proxy control blocks. - * - * This function removes the proxy control block for the specified - * id from the active chain of proxy control blocks. - */ -Thread_Control *_Thread_MP_Find_proxy ( - Objects_Id the_id -); - -/** - * @brief Manage the active set MP proxies. - * - * The following chain is used to manage the active set proxies. - */ -SCORE_EXTERN Chain_Control _Thread_MP_Active_proxies; - -/** - * @brief Manage the inactive set of MP proxies. - * - * The following chain is used to manage the inactive set of proxies. - */ -SCORE_EXTERN Chain_Control _Thread_MP_Inactive_proxies; - -/** - * This function returns true if the thread in question is the - * multiprocessing receive thread. - * - * @note This is a macro to avoid needing a prototype for - * _MPCI_Receive_server_tcb until it is used. - */ -#define _Thread_MP_Is_receive(_the_thread) \ - ((_the_thread) == _MPCI_Receive_server_tcb) - -/** - * This routine frees a proxy control block to the - * inactive chain of free proxy control blocks. - */ - -RTEMS_INLINE_ROUTINE void _Thread_MP_Free_proxy ( - Thread_Control *the_thread -) -{ - Thread_Proxy_control *the_proxy; - - the_proxy = (Thread_Proxy_control *) the_thread; - - _Chain_Extract( &the_proxy->Active ); - - _Chain_Append( &_Thread_MP_Inactive_proxies, &the_thread->Object.Node ); -} - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif -/* end of include file */ |