linux/arch/um/include/asm/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
  17#include <linux/prefetch.h>
  18
  19struct mm_struct;
  20
  21struct thread_struct {
  22        struct task_struct *saved_task;
  23        struct pt_regs regs;
  24        int singlestep_syscall;
  25        void *fault_addr;
  26        jmp_buf *fault_catcher;
  27        struct task_struct *prev_sched;
  28        unsigned long temp_stack;
  29        jmp_buf *exec_buf;
  30        struct arch_thread arch;
  31        jmp_buf switch_buf;
  32        int mm_count;
  33        struct {
  34                int op;
  35                union {
  36                        struct {
  37                                int pid;
  38                        } fork, exec;
  39                        struct {
  40                                int (*proc)(void *);
  41                                void *arg;
  42                        } thread;
  43                        struct {
  44                                void (*proc)(void *);
  45                                void *arg;
  46                        } cb;
  47                } u;
  48        } request;
  49};
  50
  51#define INIT_THREAD \
  52{ \
  53        .regs                   = EMPTY_REGS,   \
  54        .fault_addr             = NULL, \
  55        .prev_sched             = NULL, \
  56        .temp_stack             = 0, \
  57        .exec_buf               = NULL, \
  58        .arch                   = INIT_ARCH_THREAD, \
  59        .request                = { 0 } \
  60}
  61
  62static inline void release_thread(struct task_struct *task)
  63{
  64}
  65
  66extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
  67
  68extern unsigned long thread_saved_pc(struct task_struct *t);
  69
  70static inline void mm_copy_segments(struct mm_struct *from_mm,
  71                                    struct mm_struct *new_mm)
  72{
  73}
  74
  75#define init_stack      (init_thread_union.stack)
  76
  77/*
  78 * User space process size: 3GB (default).
  79 */
  80extern unsigned long task_size;
  81
  82#define TASK_SIZE (task_size)
  83
  84#undef STACK_TOP
  85#undef STACK_TOP_MAX
  86
  87extern unsigned long stacksizelim;
  88
  89#define STACK_ROOM      (stacksizelim)
  90#define STACK_TOP       (TASK_SIZE - 2 * PAGE_SIZE)
  91#define STACK_TOP_MAX   STACK_TOP
  92
  93/* This decides where the kernel will search for a free chunk of vm
  94 * space during mmap's.
  95 */
  96#define TASK_UNMAPPED_BASE      (0x40000000)
  97
  98extern void start_thread(struct pt_regs *regs, unsigned long entry, 
  99                         unsigned long stack);
 100
 101struct cpuinfo_um {
 102        unsigned long loops_per_jiffy;
 103        int ipi_pipe[2];
 104};
 105
 106extern struct cpuinfo_um boot_cpu_data;
 107
 108#define my_cpu_data             cpu_data[smp_processor_id()]
 109
 110#ifdef CONFIG_SMP
 111extern struct cpuinfo_um cpu_data[];
 112#define current_cpu_data cpu_data[smp_processor_id()]
 113#else
 114#define cpu_data (&boot_cpu_data)
 115#define current_cpu_data boot_cpu_data
 116#endif
 117
 118
 119#define KSTK_REG(tsk, reg) get_thread_reg(reg, &tsk->thread.switch_buf)
 120extern unsigned long get_wchan(struct task_struct *p);
 121
 122#endif
 123