summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/include/rtems/posix/pthread.h
blob: 9a5ff9692364a0fbca87ff8a9c7ad7f1db7af622 (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
/*  rtems/posix/pthread.h
 *
 *  This include file contains all the private support information for
 *  POSIX threads.
 *
 *  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_POSIX_THREADS_h
#define __RTEMS_POSIX_THREADS_h

#ifdef __cplusplus
extern "C" {
#endif

#include <rtems/posix/config.h>
#include <rtems/posix/threadsup.h>

#define PTHREAD_MINIMUM_STACK_SIZE (STACK_MINIMUM_SIZE * 2)

/*
 *  The following defines the information control block used to manage
 *  this class of objects.
 */

POSIX_EXTERN Objects_Information  _POSIX_Threads_Information;

/*
 *  These are used to manage the user initialization threads.
 */

POSIX_EXTERN posix_initialization_threads_table
                   *_POSIX_Threads_User_initialization_threads;
POSIX_EXTERN uint32_t     _POSIX_Threads_Number_of_initialization_threads;

extern const pthread_attr_t _POSIX_Threads_Default_attributes;

/*
 *  _POSIX_Threads_Manager_initialization
 *
 *  DESCRIPTION:
 *
 *  This routine performs the initialization necessary for this manager.
 */

void _POSIX_Threads_Manager_initialization(
  uint32_t                            maximum_pthreads,
  uint32_t                            number_of_initialization_threads,
  posix_initialization_threads_table *user_threads
);

/*
 *  _POSIX_Threads_Allocate
 *
 *  DESCRIPTION:
 *
 *  This function allocates a pthread control block from
 *  the inactive chain of free pthread control blocks.
 */

RTEMS_INLINE_ROUTINE Thread_Control *_POSIX_Threads_Allocate( void );

/*
 *  _POSIX_Threads_Free
 *
 *  DESCRIPTION:
 *
 *  This routine frees a pthread control block to the
 *  inactive chain of free pthread control blocks.
 */

RTEMS_INLINE_ROUTINE void _POSIX_Threads_Free(
  Thread_Control *the_pthread
);

/*
 *  _POSIX_Threads_Get
 *
 *  DESCRIPTION:
 *
 *  This function maps pthread IDs to pthread control blocks.
 *  If ID corresponds to a local pthread, then it returns
 *  the_pthread control pointer which maps to ID and location
 *  is set to OBJECTS_LOCAL.  if the pthread ID is global and
 *  resides on a remote node, then location is set to OBJECTS_REMOTE,
 *  and the_pthread is undefined.  Otherwise, location is set
 *  to OBJECTS_ERROR and the_pthread is undefined.
 */

RTEMS_INLINE_ROUTINE Thread_Control *_POSIX_Threads_Get(
  pthread_t          id,
  Objects_Locations *location
);

/*
 *  _POSIX_Threads_Is_null
 *
 *  DESCRIPTION:
 *
 *  This function returns TRUE if the_pthread is NULL and FALSE otherwise.
 */

RTEMS_INLINE_ROUTINE boolean _POSIX_Threads_Is_null(
  Thread_Control *the_pthread
);

/*
 *  _POSIX_Threads_Sporadic_budget_callout
 *
 *  DESCRIPTION:
 *
 *  This routine handles the sporadic scheduling algorithm.
 */

void _POSIX_Threads_Sporadic_budget_callout(
  Thread_Control *the_thread
);

/*
 *  _POSIX_Threads_Sporadic_budget_TSR
 *
 *  DESCRIPTION:
 *
 *  This routine supports the sporadic scheduling algorithm.
 */

void _POSIX_Threads_Sporadic_budget_TSR(
  Objects_Id      id,
  void           *argument
);

#include <rtems/posix/pthread.inl>
#if defined(RTEMS_MULTIPROCESSING)
#include <rtems/posix/pthreadmp.h>
#endif

#ifdef __cplusplus
}
#endif

#endif
/*  end of include file */