linux/arch/um/include/asm/processor-generic.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/* 
   3 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
   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
  19#include <asm/cpufeatures.h>
  20
  21struct mm_struct;
  22
  23struct thread_struct {
  24        struct pt_regs regs;
  25        struct pt_regs *segv_regs;
  26        int singlestep_syscall;
  27        void *fault_addr;
  28        jmp_buf *fault_catcher;
  29        struct task_struct *prev_sched;
  30        struct arch_thread arch;
  31        jmp_buf switch_buf;
  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        .arch                   = INIT_ARCH_THREAD, \
  56        .request                = { 0 } \
  57}
  58
  59static inline void release_thread(struct task_struct *task)
  60{
  61}
  62
  63static inline void mm_copy_segments(struct mm_struct *from_mm,
  64                                    struct mm_struct *new_mm)
  65{
  66}
  67
  68/*
  69 * User space process size: 3GB (default).
  70 */
  71extern unsigned long task_size;
  72
  73#define TASK_SIZE (task_size)
  74
  75#undef STACK_TOP
  76#undef STACK_TOP_MAX
  77
  78extern unsigned long stacksizelim;
  79
  80#define STACK_ROOM      (stacksizelim)
  81#define STACK_TOP       (TASK_SIZE - 2 * PAGE_SIZE)
  82#define STACK_TOP_MAX   STACK_TOP
  83
  84/* This decides where the kernel will search for a free chunk of vm
  85 * space during mmap's.
  86 */
  87#define TASK_UNMAPPED_BASE      (0x40000000)
  88
  89extern void start_thread(struct pt_regs *regs, unsigned long entry, 
  90                         unsigned long stack);
  91
  92struct cpuinfo_um {
  93        unsigned long loops_per_jiffy;
  94        int ipi_pipe[2];
  95        int cache_alignment;
  96        union {
  97                __u32           x86_capability[NCAPINTS + NBUGINTS];
  98                unsigned long   x86_capability_alignment;
  99        };
 100};
 101
 102extern struct cpuinfo_um boot_cpu_data;
 103
 104#define cpu_data (&boot_cpu_data)
 105#define current_cpu_data boot_cpu_data
 106#define cache_line_size()       (boot_cpu_data.cache_alignment)
 107
 108#define KSTK_REG(tsk, reg) get_thread_reg(reg, &tsk->thread.switch_buf)
 109extern unsigned long get_wchan(struct task_struct *p);
 110
 111#endif
 112