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