linux/include/asm-um/processor-generic.h
<<
>>
Prefs
   1/* 
   2 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
   3 * Licensed under the GPL
   4 */
   5
   6#ifndef __UM_PROCESSOR_GENERIC_H
   7#define __UM_PROCESSOR_GENERIC_H
   8
   9struct pt_regs;
  10
  11struct task_struct;
  12
  13#include "asm/ptrace.h"
  14#include "registers.h"
  15#include "sysdep/archsetjmp.h"
  16
  17struct mm_struct;
  18
  19struct thread_struct {
  20        struct task_struct *saved_task;
  21        /*
  22         * This flag is set to 1 before calling do_fork (and analyzed in
  23         * copy_thread) to mark that we are begin called from userspace (fork /
  24         * vfork / clone), and reset to 0 after. It is left to 0 when called
  25         * from kernelspace (i.e. kernel_thread() or fork_idle(),
  26         * as of 2.6.11).
  27         */
  28        int forking;
  29        int nsyscalls;
  30        struct pt_regs regs;
  31        int singlestep_syscall;
  32        void *fault_addr;
  33        jmp_buf *fault_catcher;
  34        struct task_struct *prev_sched;
  35        unsigned long temp_stack;
  36        jmp_buf *exec_buf;
  37        struct arch_thread arch;
  38        jmp_buf switch_buf;
  39        int mm_count;
  40        struct {
  41                int op;
  42                union {
  43                        struct {
  44                                int pid;
  45                        } fork, exec;
  46                        struct {
  47                                int (*proc)(void *);
  48                                void *arg;
  49                        } thread;
  50                        struct {
  51                                void (*proc)(void *);
  52                                void *arg;
  53                        } cb;
  54                } u;
  55        } request;
  56};
  57
  58#define INIT_THREAD \
  59{ \
  60        .forking                = 0, \
  61        .nsyscalls              = 0, \
  62        .regs                   = EMPTY_REGS,   \
  63        .fault_addr             = NULL, \
  64        .prev_sched             = NULL, \
  65        .temp_stack             = 0, \
  66        .exec_buf               = NULL, \
  67        .arch                   = INIT_ARCH_THREAD, \
  68        .request                = { 0 } \
  69}
  70
  71typedef struct {
  72        unsigned long seg;
  73} mm_segment_t;
  74
  75extern struct task_struct *alloc_task_struct(void);
  76
  77static inline void release_thread(struct task_struct *task)
  78{
  79}
  80
  81extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
  82
  83static inline void prepare_to_copy(struct task_struct *tsk)
  84{
  85}
  86
  87
  88extern unsigned long thread_saved_pc(struct task_struct *t);
  89
  90static inline void mm_copy_segments(struct mm_struct *from_mm,
  91                                    struct mm_struct *new_mm)
  92{
  93}
  94
  95#define init_stack      (init_thread_union.stack)
  96
  97/*
  98 * User space process size: 3GB (default).
  99 */
 100extern unsigned long task_size;
 101
 102#define TASK_SIZE       (task_size)
 103
 104/* This decides where the kernel will search for a free chunk of vm
 105 * space during mmap's.
 106 */
 107#define TASK_UNMAPPED_BASE      (0x40000000)
 108
 109extern void start_thread(struct pt_regs *regs, unsigned long entry, 
 110                         unsigned long stack);
 111
 112struct cpuinfo_um {
 113        unsigned long loops_per_jiffy;
 114        int ipi_pipe[2];
 115};
 116
 117extern struct cpuinfo_um boot_cpu_data;
 118
 119#define my_cpu_data             cpu_data[smp_processor_id()]
 120
 121#ifdef CONFIG_SMP
 122extern struct cpuinfo_um cpu_data[];
 123#define current_cpu_data cpu_data[smp_processor_id()]
 124#else
 125#define cpu_data (&boot_cpu_data)
 126#define current_cpu_data boot_cpu_data
 127#endif
 128
 129
 130#define KSTK_REG(tsk, reg) get_thread_reg(reg, &tsk->thread.switch_buf)
 131#define get_wchan(p) (0)
 132
 133#endif
 134