version 1.1.1.1, 2008/06/03 10:38:45 |
version 1.1.1.1.2.1, 2008/08/13 17:12:31 |
|
|
/*- |
/*- |
* Copyright (c) 2005-2007, Kohsuke Ohtani |
* Copyright (c) 2005-2008, Kohsuke Ohtani |
* All rights reserved. |
* All rights reserved. |
* |
* |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
|
|
int state; /* thread state */ |
int state; /* thread state */ |
int policy; /* scheduling policy */ |
int policy; /* scheduling policy */ |
int prio; /* current priority */ |
int prio; /* current priority */ |
int base_prio; /* base priority */ |
int baseprio; /* base priority */ |
int ticks_left; /* remaining ticks to run */ |
int timeleft; /* remaining ticks to run */ |
u_int total_ticks; /* total running ticks */ |
u_int time; /* total running time */ |
int need_resched; /* true if rescheduling is needed */ |
int resched; /* true if rescheduling is needed */ |
int lock_count; /* schedule lock counter */ |
int locks; /* schedule lock counter */ |
int suspend_count; /* suspend counter */ |
int suscnt; /* suspend counter */ |
struct event *sleep_event; /* sleep event */ |
struct event *slpevt; /* sleep event */ |
int sleep_result; /* sleep result */ |
int slpret; /* sleep result code */ |
struct timer timeout; /* thread timer */ |
struct timer timeout; /* thread timer */ |
struct timer *periodic; /* pointer to periodic timer */ |
struct timer *periodic; /* pointer to periodic timer */ |
|
uint32_t excbits; /* bitmap of pending exceptions */ |
struct queue ipc_link; /* linkage on IPC queue */ |
struct queue ipc_link; /* linkage on IPC queue */ |
void *msg_addr; /* kernel address of IPC message */ |
void *msgaddr; /* kernel address of IPC message */ |
size_t msg_size; /* size of IPC message */ |
size_t msgsize; /* size of IPC message */ |
struct thread *sender; /* thread that sends IPC message */ |
thread_t sender; /* thread that sends IPC message */ |
struct thread *receiver; /* thread that receives IPC message */ |
thread_t receiver; /* thread that receives IPC message */ |
object_t send_obj; /* IPC object sending to */ |
object_t sendobj; /* IPC object sending to */ |
object_t recv_obj; /* IPC object receiving from */ |
object_t recvobj; /* IPC object receiving from */ |
uint32_t exc_bitmap; /* bitmap of pending exceptions */ |
|
struct list mutexes; /* mutexes locked by this thread */ |
struct list mutexes; /* mutexes locked by this thread */ |
struct mutex *wait_mutex; /* mutex pointer currently waiting */ |
struct mutex *wait_mutex; /* mutex pointer currently waiting */ |
void *kstack; /* base address of kernel stack */ |
void *kstack; /* base address of kernel stack */ |
struct context context; /* machine specific context */ |
struct context ctx; /* machine specific context */ |
}; |
}; |
|
|
#define thread_valid(th) (kern_area(th) && ((th)->magic == THREAD_MAGIC)) |
#define thread_valid(th) (kern_area(th) && ((th)->magic == THREAD_MAGIC)) |
|
|
|
|
/* |
/* |
* Priorities |
* Priorities |
|
* Probably should not be altered too much. |
*/ |
*/ |
#define PRIO_TIMER 15 /* priority for timer thread */ |
#define PRIO_TIMER 15 /* priority for timer thread */ |
#define PRIO_IST 16 /* top priority for interrupt threads */ |
#define PRIO_IST 16 /* top priority for interrupt threads */ |
|
|
|
|
#define MAX_PRIO 0 |
#define MAX_PRIO 0 |
#define MIN_PRIO 255 |
#define MIN_PRIO 255 |
#define NR_PRIOS 256 /* number of thread priority */ |
#define NPRIO 256 /* number of thread priority */ |
|
|
/* |
/* |
* Scheduling operations for thread_schedparam(). |
* Scheduling operations for thread_schedparam(). |
|
|
|
|
extern int thread_create(task_t, thread_t *); |
extern int thread_create(task_t, thread_t *); |
extern int thread_terminate(thread_t); |
extern int thread_terminate(thread_t); |
extern int thread_kill(thread_t); |
|
extern int thread_load(thread_t, void (*)(void), void *); |
extern int thread_load(thread_t, void (*)(void), void *); |
extern thread_t thread_self(void); |
extern thread_t thread_self(void); |
extern void thread_yield(void); |
extern void thread_yield(void); |
|
|
extern int thread_schedparam(thread_t, int, int *); |
extern int thread_schedparam(thread_t, int, int *); |
extern void thread_idle(void); |
extern void thread_idle(void); |
extern int thread_info(struct info_thread *); |
extern int thread_info(struct info_thread *); |
extern thread_t kernel_thread(int, void (*)(u_long), u_long); |
|
extern void thread_dump(void); |
extern void thread_dump(void); |
extern void thread_init(void); |
extern void thread_init(void); |
|
|
|
/* for kernel thread */ |
|
extern thread_t kthread_create(void (*)(void *), void *, int); |
|
extern void kthread_terminate(thread_t); |
|
|
#endif /* !_THREAD_H */ |
#endif /* !_THREAD_H */ |