summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/objectmp.h
blob: 947b03c59d4ef475ebdfde1f8a1348facbb182d9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*  objectmp.h
 *
 *  This include file contains all the constants and structures associated
 *  with the manipulation of Global RTEMS Objects.
 *
 *  COPYRIGHT (c) 1989-1999.
 *  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.com/license/LICENSE.
 *
 *  $Id$
 */

#ifndef __RTEMS_OBJECTS_MP_h
#define __RTEMS_OBJECTS_MP_h

#ifdef __cplusplus
extern "C" {
#endif

/*
 *  This defines the Global Object Control Block used to manage
 *  objects resident on other nodes.
 */

typedef struct {
  Objects_Control Object;
  uint32_t        name;     /* XXX broken but works */
  /* XXX If any API is MP with variable length names .. BOOM!!!! */
}   Objects_MP_Control;

/*
 *  _Objects_MP_Handler_initialization
 *
 *  DESCRIPTION:
 *
 *  This routine intializes the inactive global object chain
 *  based on the maximum number of global objects configured.
 */

void _Objects_MP_Handler_initialization (
  uint32_t   node,
  uint32_t   maximum_nodes,
  uint32_t   maximum_global_objects
);

/*PAGE
 *
 *  _Objects_MP_Open
 *
 *  DESCRIPTION:
 *
 *  This routine place the specified global object in the
 *  specified information table.
 */

void _Objects_MP_Open (
  Objects_Information *information,
  Objects_MP_Control  *the_global_object,
  uint32_t             the_name,      /* XXX -- wrong for variable */
  Objects_Id           the_id
);

/*
 *  _Objects_MP_Allocate_and_open
 *
 *  DESCRIPTION:
 *
 *  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.
 */

boolean _Objects_MP_Allocate_and_open (
  Objects_Information *information,
  uint32_t             the_name,     /* XXX -- wrong for variable length */
  Objects_Id           the_id,
  boolean              is_fatal_error
);

/*
 *  _Objects_MP_Close
 *
 *  DESCRIPTION:
 *
 *  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
);

/*
 *  _Objects_MP_Global_name_search
 *
 *  DESCRIPTION:
 *
 *  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.
 */

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
);

/*
 *  _Objects_MP_Is_remote
 *
 *  DESCRIPTION:
 *
 *  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.
 */

void _Objects_MP_Is_remote (
  Objects_Information  *information,
  Objects_Id            the_id,
  Objects_Locations    *location,
  Objects_Control     **the_object
);

/*
 *  The following chain header is used to manage the set of
 *  inactive global object control blocks.
 */

SCORE_EXTERN uint32_t       _Objects_MP_Maximum_global_objects;
SCORE_EXTERN Chain_Control  _Objects_MP_Inactive_global_objects;

#ifndef __RTEMS_APPLICATION__
#include <rtems/score/objectmp.inl>
#endif

#ifdef __cplusplus
}
#endif

#endif
/* end of include file */