Subversion Repositories HelenOS

Rev

Rev 2188 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2188 Rev 2216
Line 122... Line 122...
122
 * stack and userspace argument structure for it.
122
 * stack and userspace argument structure for it.
123
 *
123
 *
124
 * @param function Function implementing the thread.
124
 * @param function Function implementing the thread.
125
 * @param arg Argument to be passed to thread.
125
 * @param arg Argument to be passed to thread.
126
 * @param name Symbolic name of the thread.
126
 * @param name Symbolic name of the thread.
-
 
127
 * @param tid Thread ID of the newly created thread.
127
 *
128
 *
128
 * @return TID of the new thread on success or -1 on failure.
129
 * @return Zero on success or a code from @ref errno.h on failure.
129
 */
130
 */
130
int thread_create(void (* function)(void *), void *arg, char *name)
131
int thread_create(void (* function)(void *), void *arg, char *name, thread_id_t *tid)
131
{
132
{
132
    char *stack;
133
    char *stack;
133
    uspace_arg_t *uarg;
134
    uspace_arg_t *uarg;
134
 
135
 
135
    stack = (char *) malloc(getpagesize() * THREAD_INITIAL_STACK_PAGES_NO);
136
    stack = (char *) malloc(getpagesize() * THREAD_INITIAL_STACK_PAGES_NO);
Line 146... Line 147...
146
    uarg->uspace_stack = (void *) stack;
147
    uarg->uspace_stack = (void *) stack;
147
    uarg->uspace_thread_function = function;
148
    uarg->uspace_thread_function = function;
148
    uarg->uspace_thread_arg = arg;
149
    uarg->uspace_thread_arg = arg;
149
    uarg->uspace_uarg = uarg;
150
    uarg->uspace_uarg = uarg;
150
   
151
   
151
    return __SYSCALL2(SYS_THREAD_CREATE, (sysarg_t) uarg, (sysarg_t) name);
152
    return __SYSCALL3(SYS_THREAD_CREATE, (sysarg_t) uarg, (sysarg_t) name, (sysarg_t) tid);
152
}
153
}
153
 
154
 
154
/** Terminate current thread.
155
/** Terminate current thread.
155
 *
156
 *
156
 * @param status Exit status. Currently not used.
157
 * @param status Exit status. Currently not used.
Line 164... Line 165...
164
 *
165
 *
165
 * Currently not implemented.
166
 * Currently not implemented.
166
 *
167
 *
167
 * @param thread TID.
168
 * @param thread TID.
168
 */
169
 */
169
void thread_detach(int thread)
170
void thread_detach(thread_id_t thread)
170
{
171
{
171
}
172
}
172
 
173
 
173
/** Join thread.
174
/** Join thread.
174
 *
175
 *
Line 176... Line 177...
176
 *
177
 *
177
 * @param thread TID.
178
 * @param thread TID.
178
 *
179
 *
179
 * @return Thread exit status.
180
 * @return Thread exit status.
180
 */
181
 */
181
int thread_join(int thread)
182
int thread_join(thread_id_t thread)
182
{
183
{
183
}
184
}
184
 
185
 
185
/** Get current thread ID.
186
/** Get current thread ID.
186
 *
187
 *
187
 * @return Current thread ID.
188
 * @return Current thread ID.
188
 */
189
 */
189
int thread_get_id(void)
190
thread_id_t thread_get_id(void)
190
{
191
{
-
 
192
    thread_id_t thread_id;
-
 
193
 
191
    return __SYSCALL0(SYS_THREAD_GET_ID);
194
    (void) __SYSCALL1(SYS_THREAD_GET_ID, (sysarg_t) &thread_id);
-
 
195
 
-
 
196
    return thread_id;
192
}
197
}
193
 
198
 
194
/** @}
199
/** @}
195
 */
200
 */