daily update
[external/binutils.git] / gdb / osf-share / cma_attr.h
1 /* 
2  * (c) Copyright 1990-1996 OPEN SOFTWARE FOUNDATION, INC.
3  * (c) Copyright 1990-1996 HEWLETT-PACKARD COMPANY
4  * (c) Copyright 1990-1996 DIGITAL EQUIPMENT CORPORATION
5  * (c) Copyright 1991, 1992 Siemens-Nixdorf Information Systems
6  * To anyone who acknowledges that this file is provided "AS IS" without
7  * any express or implied warranty: permission to use, copy, modify, and
8  * distribute this file for any purpose is hereby granted without fee,
9  * provided that the above copyright notices and this notice appears in
10  * all source code copies, and that none of the names listed above be used
11  * in advertising or publicity pertaining to distribution of the software
12  * without specific, written prior permission.  None of these organizations
13  * makes any representations about the suitability of this software for
14  * any purpose.
15  */
16 /*
17  *      Header file for attributes object
18  */
19
20 #ifndef CMA_ATTR
21 #define CMA_ATTR
22
23 /*
24  *  INCLUDE FILES
25  */
26
27 #include <cma_defs.h>
28 #include <cma_queue.h>
29 #ifdef __hpux
30 # include <sys/param.h>
31 #endif
32 #if _CMA_UNIX_TYPE == _CMA__SVR4
33 #include <sys/unistd.h>
34 #endif
35 /*
36  * CONSTANTS AND MACROS
37  */
38
39 \f
40 /*
41  *  FUNCTIONAL DESCRIPTION:
42  *
43  *      cma__int_attr_get_priority -  Performs the work of cma_attr_get_priority
44  *
45  *  FORMAL PARAMETERS:
46  *
47  *      cma_t_attr          *_att_      - Attribute object to get from
48  *      cma_t_priority      *_setting_  - Current setting
49  *
50  *  IMPLICIT INPUTS:
51  *
52  *      none
53  *
54  *  IMPLICIT OUTPUTS:
55  *
56  *      priority
57  *
58  *  FUNCTION VALUE:
59  *
60  *      none
61  *
62  *  SIDE EFFECTS:
63  *
64  *      none
65  */
66 #define cma__int_attr_get_priority(_att_,_setting_) { \
67     cma__t_int_attr     *_int_att_; \
68     (_int_att_) = cma__validate_default_attr (_att_); \
69     cma__int_lock ((_int_att_)->mutex); \
70     (*(_setting_)) = (_int_att_)->priority; \
71     cma__int_unlock ((_int_att_)->mutex); \
72     }
73
74 \f
75 /*
76  *  FUNCTIONAL DESCRIPTION:
77  *
78  *      cma__int_attr_get_sched - Performs work of cma_attr_get_sched
79  *
80  *  FORMAL PARAMETERS:
81  *
82  *      cma_t_attr          *_att_      _ Attributes object used
83  *      cma_t_sched_policy  *_setting_  - Current setting
84  *
85  *  IMPLICIT INPUTS:
86  *
87  *      none
88  *
89  *  IMPLICIT OUTPUTS:
90  *
91  *      scheduling policy
92  *
93  *  FUNCTION VALUE:
94  *
95  *      none
96  *
97  *  SIDE EFFECTS:
98  *
99  *      none
100  */
101 #define cma__int_attr_get_sched(_att_,_setting_) { \
102     cma__t_int_attr     *_int_att_; \
103     (_int_att_) = cma__validate_default_attr (_att_); \
104     cma__int_lock ((_int_att_)->mutex); \
105     (*(_setting_)) = (_int_att_)->policy; \
106     cma__int_unlock ((_int_att_)->mutex); \
107     }
108
109 \f
110 /*
111  *  FUNCTIONAL DESCRIPTION:
112  *
113  *      cma__int_attr_get_inherit_sched - Performs work of 
114  *      cma_attr_get_inherit_sched
115  *
116  *  FORMAL PARAMETERS:
117  *
118  *      cma_t_attr          *_att_      - Attributes object to use
119  *      cma_t_sched_inherit *_setting_  - Current setting
120  *
121  *  IMPLICIT INPUTS:
122  *
123  *      none
124  *
125  *  IMPLICIT OUTPUTS:
126  *
127  *      Inheritable scheduling policy
128  *
129  *  FUNCTION VALUE:
130  *
131  *      none
132  *
133  *  SIDE EFFECTS:
134  *
135  *      none
136  */
137 #define cma__int_attr_get_inherit_sched(_att_,_setting_) { \
138     cma__t_int_attr     *_int_att_; \
139     (_int_att_) = cma__validate_default_attr (_att_); \
140     cma__int_lock ((_int_att_)->mutex); \
141     (*(_setting_)) \
142         = ((_int_att_)->inherit_sched ? cma_c_sched_inherit : cma_c_sched_use_default); \
143     cma__int_unlock ((_int_att_)->mutex); \
144     }
145 \f
146 /*
147  *  FUNCTIONAL DESCRIPTION:
148  *
149  *      cma__int_attr_set_stacksize - Performs work for cma_attr_set_stacksize
150  *
151  *  FORMAL PARAMETERS:
152  *
153  *      cma_t_attr          *_att_      - Attributes object to use
154  *      cma_t_natural       _setting_   - Setting
155  *
156  *  IMPLICIT INPUTS:
157  *
158  *      none
159  *
160  *  IMPLICIT OUTPUTS:
161  *
162  *      none
163  *
164  *  FUNCTION VALUE:
165  *
166  *      none
167  *
168  *  SIDE EFFECTS:
169  *
170  *      Change attribute objects stack size setting
171  */
172 #define cma__int_attr_set_stacksize(_att_,_setting_) { \
173     cma__t_int_attr     *_int_att_; \
174     if ((_setting_) <= 0) \
175         cma__error (cma_s_badparam); \
176     _int_att_ = cma__validate_attr (_att_); \
177     cma__int_lock ((_int_att_)->mutex); \
178     _int_att_->stack_size = cma__roundup_chunksize(_setting_); \
179     cma__free_cache (_int_att_, cma__c_obj_tcb); \
180     _int_att_->cache[cma__c_obj_tcb].revision++; \
181     _int_att_->cache[cma__c_obj_stack].revision++; \
182     cma__int_unlock (_int_att_->mutex); \
183     }
184 \f
185 /*
186  *  FUNCTIONAL DESCRIPTION:
187  *
188  *      cma__int_attr_get_stacksize - Performs work of cma_attr_get_stacksize
189  *
190  *  FORMAL PARAMETERS:
191  *
192  *      cma_t_attr          *_att_      - Attributes object to use
193  *      cma_t_natural       *_setting_  - Current setting
194  *
195  *  IMPLICIT INPUTS:
196  *
197  *      none
198  *
199  *  IMPLICIT OUTPUTS:
200  *
201  *      Attribute objects stack size setting
202  *
203  *  FUNCTION VALUE:
204  *
205  *      none
206  *
207  *  SIDE EFFECTS:
208  *
209  *      none
210  */
211 #define cma__int_attr_get_stacksize(_att_,_setting_) { \
212     cma__t_int_attr     *_int_att_; \
213     (_int_att_) = cma__validate_default_attr (_att_); \
214     cma__int_lock ((_int_att_)->mutex); \
215     (*(_setting_)) = (_int_att_)->stack_size; \
216     cma__int_unlock ((_int_att_)->mutex); \
217     }
218
219 \f
220 /*
221  *  FUNCTIONAL DESCRIPTION:
222  *
223  *      cma__int_attr_set_guardsize - Performs work for cma_attr_set_guardsize
224  *
225  *  FORMAL PARAMETERS:
226  *
227  *      cma_t_attr          *_att_      - Attributes object to use
228  *      cma_t_natural       _setting_   - Setting
229  *
230  *  IMPLICIT INPUTS:
231  *
232  *      none
233  *
234  *  IMPLICIT OUTPUTS:
235  *
236  *      none
237  *
238  *  FUNCTION VALUE:
239  *
240  *      none
241  *
242  *  SIDE EFFECTS:
243  *
244  *      Change attribute objects guard size setting
245  */
246 #define cma__int_attr_set_guardsize(_att_,_setting_) { \
247     cma__t_int_attr     *_int_att_; \
248     _int_att_ = cma__validate_attr (_att_); \
249     cma__int_lock ((_int_att_)->mutex); \
250     _int_att_->guard_size = cma__roundup_chunksize(_setting_); \
251     cma__free_cache (_int_att_, cma__c_obj_tcb); \
252     _int_att_->cache[cma__c_obj_tcb].revision++; \
253     _int_att_->cache[cma__c_obj_stack].revision++; \
254     cma__int_unlock (_int_att_->mutex); \
255     }
256 \f
257 /*
258  *  FUNCTIONAL DESCRIPTION:
259  *
260  *      cma__int_attr_get_guardsize - Performs work of cma_attr_get_guardsize
261  *
262  *  FORMAL PARAMETERS:
263  *
264  *      cma_t_attr          *_att_      - Attributes object to use
265  *      cma_t_natural       *_setting_  - Current setting
266  *
267  *  IMPLICIT INPUTS:
268  *
269  *      none
270  *
271  *  IMPLICIT OUTPUTS:
272  *
273  *      Attribute objects guard size setting
274  *
275  *  FUNCTION VALUE:
276  *
277  *      none
278  *
279  *  SIDE EFFECTS:
280  *
281  *      none
282  */
283 #define cma__int_attr_get_guardsize(_att_,_setting_) { \
284     cma__t_int_attr     *_int_att_; \
285     (_int_att_) = cma__validate_default_attr (_att_); \
286     cma__int_lock ((_int_att_)->mutex); \
287     (*(_setting_)) = (_int_att_)->guard_size; \
288     cma__int_unlock ((_int_att_)->mutex); \
289     }
290
291 /*
292  * TYPEDEFS
293  */
294 #ifndef __STDC__
295 struct CMA__T_INT_MUTEX;                /* Avoid circular dependency */
296 #endif
297
298 typedef struct CMA__T_CACHE {
299     cma_t_natural               revision;       /* Revisions */
300     cma_t_natural               count;
301     cma__t_queue                queue;  /* Cache headers */
302     } cma__t_cache;
303
304 typedef struct CMA__T_INT_ATTR {
305     cma__t_object               header;         /* Common header */
306     struct CMA__T_INT_ATTR      *attributes;    /* Point to controlling attr */
307     struct CMA__T_INT_MUTEX     *mutex;         /* Serialize access to object */
308     cma_t_priority              priority;       /* Priority of new thread */
309     cma_t_sched_policy          policy;         /* Sched policy of thread */
310     cma_t_boolean               inherit_sched;  /* Is scheduling inherited? */
311     cma_t_natural               stack_size;     /* Size of stack (bytes) */
312     cma_t_natural               guard_size;     /* Size of guard (bytes) */
313     cma_t_mutex_kind            mutex_kind;     /* Mutex kind */
314     cma__t_cache                cache[cma__c_obj_num];  /* Cache information */
315     cma_t_boolean               delete_pending; /* attr. obj. is deleted */
316     cma_t_natural               refcnt; /* Number of objects using attr. obj */
317     } cma__t_int_attr;
318
319 /*
320  *  GLOBAL DATA
321  */
322
323 extern cma__t_int_attr  cma__g_def_attr;
324
325 /*
326  * INTERNAL INTERFACES
327  */
328
329 extern void cma__destroy_attributes  (cma__t_int_attr *);
330
331 extern void cma__free_attributes  (cma__t_int_attr      *);
332
333 extern void cma__free_cache  (cma__t_int_attr *,cma_t_natural );
334
335 extern cma__t_int_attr *cma__get_attributes  (cma__t_int_attr   *);
336
337 extern void cma__init_attr  (void);
338
339 extern void cma__reinit_attr  (cma_t_integer);
340
341 #endif