123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /*
- * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
- * Licensed under the GPL
- */
- #ifndef __UM_PROCESSOR_GENERIC_H
- #define __UM_PROCESSOR_GENERIC_H
- struct pt_regs;
- struct task_struct;
- #include "asm/ptrace.h"
- #include "choose-mode.h"
- #include "registers.h"
- #include "sysdep/archsetjmp.h"
- struct mm_struct;
- struct thread_struct {
- /* This flag is set to 1 before calling do_fork (and analyzed in
- * copy_thread) to mark that we are begin called from userspace (fork /
- * vfork / clone), and reset to 0 after. It is left to 0 when called
- * from kernelspace (i.e. kernel_thread() or fork_idle(), as of 2.6.11). */
- struct task_struct *saved_task;
- int forking;
- int nsyscalls;
- struct pt_regs regs;
- int singlestep_syscall;
- void *fault_addr;
- void *fault_catcher;
- struct task_struct *prev_sched;
- unsigned long temp_stack;
- void *exec_buf;
- struct arch_thread arch;
- union {
- #ifdef CONFIG_MODE_TT
- struct {
- int extern_pid;
- int tracing;
- int switch_pipe[2];
- int vm_seq;
- } tt;
- #endif
- #ifdef CONFIG_MODE_SKAS
- struct {
- jmp_buf switch_buf;
- int mm_count;
- } skas;
- #endif
- } mode;
- struct {
- int op;
- union {
- struct {
- int pid;
- } fork, exec;
- struct {
- int (*proc)(void *);
- void *arg;
- } thread;
- struct {
- void (*proc)(void *);
- void *arg;
- } cb;
- } u;
- } request;
- };
- #define INIT_THREAD \
- { \
- .forking = 0, \
- .nsyscalls = 0, \
- .regs = EMPTY_REGS, \
- .fault_addr = NULL, \
- .prev_sched = NULL, \
- .temp_stack = 0, \
- .exec_buf = NULL, \
- .arch = INIT_ARCH_THREAD, \
- .request = { 0 } \
- }
- typedef struct {
- unsigned long seg;
- } mm_segment_t;
- extern struct task_struct *alloc_task_struct(void);
- extern void release_thread(struct task_struct *);
- extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
- static inline void prepare_to_copy(struct task_struct *tsk)
- {
- }
- extern unsigned long thread_saved_pc(struct task_struct *t);
- static inline void mm_copy_segments(struct mm_struct *from_mm,
- struct mm_struct *new_mm)
- {
- }
- #define init_stack (init_thread_union.stack)
- /*
- * User space process size: 3GB (default).
- */
- extern unsigned long task_size;
- #define TASK_SIZE (task_size)
- /* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
- #define TASK_UNMAPPED_BASE (0x40000000)
- extern void start_thread(struct pt_regs *regs, unsigned long entry,
- unsigned long stack);
- struct cpuinfo_um {
- unsigned long loops_per_jiffy;
- int ipi_pipe[2];
- };
- extern struct cpuinfo_um boot_cpu_data;
- #define my_cpu_data cpu_data[smp_processor_id()]
- #ifdef CONFIG_SMP
- extern struct cpuinfo_um cpu_data[];
- #define current_cpu_data cpu_data[smp_processor_id()]
- #else
- #define cpu_data (&boot_cpu_data)
- #define current_cpu_data boot_cpu_data
- #endif
- #ifdef CONFIG_MODE_SKAS
- #define KSTK_REG(tsk, reg) \
- get_thread_reg(reg, &tsk->thread.mode.skas.switch_buf)
- #else
- #define KSTK_REG(tsk, reg) (0xbadbabe)
- #endif
- #define get_wchan(p) (0)
- #endif
|