source: rtems/cpukit/include/rtems/rtems/partmp.h @ 21275b58

Last change on this file since 21275b58 was 21275b58, checked in by Sebastian Huber <sebastian.huber@…>, on Nov 22, 2018 at 6:14:51 PM

score: Static Objects_Information initialization

Statically allocate the objects information together with the initial
set of objects either via <rtems/confdefs.h>. Provide default object
informations with zero objects via librtemscpu.a. This greatly
simplifies the workspace size estimate. RTEMS applications which do not
use the unlimited objects option are easier to debug since all objects
reside now in statically allocated objects of the right types.

Close #3621.

  • Property mode set to 100644
File size: 3.2 KB
Line 
1/**
2 * @file rtems/rtems/partmp.h
3 *
4 * @brief MP Support in Partition Manager
5 *
6 * This include file contains all the constants and structures associated
7 * with the Multiprocessing Support in the Partition Manager.
8 */
9
10/* COPYRIGHT (c) 1989-2013.
11 * On-Line Applications Research Corporation (OAR).
12 *
13 * The license and distribution terms for this file may be
14 * found in the file LICENSE in this distribution or at
15 * http://www.rtems.org/license/LICENSE.
16 */
17
18#ifndef _RTEMS_RTEMS_PARTMP_H
19#define _RTEMS_RTEMS_PARTMP_H
20
21#ifndef _RTEMS_RTEMS_PARTIMPL_H
22# error "Never use <rtems/rtems/partmp.h> directly; include <rtems/rtems/partimpl.h> instead."
23#endif
24
25#include <rtems/score/mpciimpl.h>
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31/**
32 *  @defgroup ClassicPartMP Partition MP Support
33 *
34 *  @ingroup ClassicMP
35 *
36 *  This encapsulates functionality related to the transparent multiprocessing
37 *  support within the Classic API Partition Manager.
38 */
39/*{*/
40
41/**
42 *  The following enumerated type defines the list of
43 *  remote partition operations.
44 */
45typedef enum {
46  PARTITION_MP_ANNOUNCE_CREATE        =  0,
47  PARTITION_MP_ANNOUNCE_DELETE        =  1,
48  PARTITION_MP_EXTRACT_PROXY          =  2,
49  PARTITION_MP_GET_BUFFER_REQUEST     =  3,
50  PARTITION_MP_GET_BUFFER_RESPONSE    =  4,
51  PARTITION_MP_RETURN_BUFFER_REQUEST  =  5,
52  PARTITION_MP_RETURN_BUFFER_RESPONSE =  6
53}   Partition_MP_Remote_operations;
54
55/**
56 *  The following data structure defines the packet used to perform
57 *  remote partition operations.
58 */
59typedef struct {
60  rtems_packet_prefix             Prefix;
61  Partition_MP_Remote_operations  operation;
62  rtems_name                      name;
63  void                           *buffer;
64  Objects_Id                      proxy_id;
65}   Partition_MP_Packet;
66
67RTEMS_INLINE_ROUTINE bool _Partition_MP_Is_remote( Objects_Id id )
68{
69  return _Objects_MP_Is_remote( id, &_Partition_Information );
70}
71
72/**
73 *  @brief Partition_MP_Send_process_packet
74 *
75 *  Multiprocessing Support for the Partition Manager
76 *
77 *  This routine performs a remote procedure call so that a
78 *  process operation can be performed on another node.
79 */
80void _Partition_MP_Send_process_packet (
81  Partition_MP_Remote_operations operation,
82  Objects_Id                     partition_id,
83  rtems_name                     name,
84  Objects_Id                     proxy_id
85);
86
87/**
88 * @brief Issues a remote rtems_partition_get_buffer() request.
89 */
90rtems_status_code _Partition_MP_Get_buffer(
91  rtems_id   id,
92  void     **buffer
93);
94
95/**
96 * @brief Issues a remote rtems_partition_return_buffer() request.
97 */
98rtems_status_code _Partition_MP_Return_buffer(
99  rtems_id  id,
100  void     *buffer
101);
102
103/**
104 *
105 *  @brief Partition_MP_Process_packet
106 *
107 *  This routine performs the actions specific to this package for
108 *  the request from another node.
109 */
110void _Partition_MP_Process_packet (
111  rtems_packet_prefix *the_packet_prefix
112);
113
114/*
115 *  @brief Partition_MP_Send_object_was_deleted
116 *
117 *  This routine is invoked indirectly by the thread queue
118 *  when a proxy has been removed from the thread queue and
119 *  the remote node must be informed of this.
120 *
121 *  This routine is not needed by the Partition since a partition
122 *  cannot be deleted when buffers are in use.
123 */
124
125#ifdef __cplusplus
126}
127#endif
128
129/**@}*/
130
131#endif
132/* end of file */
Note: See TracBrowser for help on using the repository browser.