Rev 1128 | Rev 1392 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1128 | Rev 1129 | ||
---|---|---|---|
Line 29... | Line 29... | ||
29 | #ifndef __LIBC__PSTHREAD_H__ |
29 | #ifndef __LIBC__PSTHREAD_H__ |
30 | #define __LIBC__PSTHREAD_H__ |
30 | #define __LIBC__PSTHREAD_H__ |
31 | 31 | ||
32 | #include <libarch/psthread.h> |
32 | #include <libarch/psthread.h> |
33 | #include <libadt/list.h> |
33 | #include <libadt/list.h> |
- | 34 | #include <libarch/thread.h> |
|
34 | 35 | ||
35 | #ifndef context_set |
36 | #ifndef context_set |
36 | #define context_set(c, _pc, stack, size, ptls) \ |
37 | #define context_set(c, _pc, stack, size, ptls) \ |
37 | (c)->pc = (sysarg_t) (_pc); \ |
38 | (c)->pc = (sysarg_t) (_pc); \ |
38 | (c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; \ |
39 | (c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; \ |
Line 40... | Line 41... | ||
40 | #endif /* context_set */ |
41 | #endif /* context_set */ |
41 | 42 | ||
42 | typedef sysarg_t pstid_t; |
43 | typedef sysarg_t pstid_t; |
43 | 44 | ||
44 | struct psthread_data { |
45 | struct psthread_data { |
45 | struct psthread_data *self; /* ia32, amd64 needs to get self address */ |
- | |
46 | - | ||
47 | link_t link; |
46 | link_t link; |
48 | context_t ctx; |
47 | context_t ctx; |
49 | void *stack; |
48 | void *stack; |
50 | void *arg; |
49 | void *arg; |
51 | int (*func)(void *); |
50 | int (*func)(void *); |
- | 51 | tcb_t *tcb; |
|
52 | 52 | ||
53 | struct psthread_data *waiter; |
53 | struct psthread_data *waiter; |
54 | int finished; |
54 | int finished; |
55 | int retval; |
55 | int retval; |
56 | int flags; |
56 | int flags; |
Line 61... | Line 61... | ||
61 | extern void context_restore(context_t *c) __attribute__ ((noreturn)); |
61 | extern void context_restore(context_t *c) __attribute__ ((noreturn)); |
62 | 62 | ||
63 | pstid_t psthread_create(int (*func)(void *), void *arg); |
63 | pstid_t psthread_create(int (*func)(void *), void *arg); |
64 | int psthread_schedule_next(void); |
64 | int psthread_schedule_next(void); |
65 | int psthread_join(pstid_t psthrid); |
65 | int psthread_join(pstid_t psthrid); |
- | 66 | psthread_data_t * psthread_setup(tcb_t *tcb); |
|
- | 67 | void psthread_teardown(psthread_data_t *pt); |
|
- | 68 | ||
66 | 69 | ||
67 | #endif |
70 | #endif |