processor-generic.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /*
  2. * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
  3. * Licensed under the GPL
  4. */
  5. #ifndef __UM_PROCESSOR_GENERIC_H
  6. #define __UM_PROCESSOR_GENERIC_H
  7. struct pt_regs;
  8. struct task_struct;
  9. #include "linux/config.h"
  10. #include "asm/ptrace.h"
  11. #include "choose-mode.h"
  12. struct mm_struct;
  13. struct thread_struct {
  14. int forking;
  15. int nsyscalls;
  16. struct pt_regs regs;
  17. unsigned long cr2;
  18. int err;
  19. unsigned long trap_no;
  20. int singlestep_syscall;
  21. void *fault_addr;
  22. void *fault_catcher;
  23. struct task_struct *prev_sched;
  24. unsigned long temp_stack;
  25. void *exec_buf;
  26. struct arch_thread arch;
  27. union {
  28. #ifdef CONFIG_MODE_TT
  29. struct {
  30. int extern_pid;
  31. int tracing;
  32. int switch_pipe[2];
  33. int vm_seq;
  34. } tt;
  35. #endif
  36. #ifdef CONFIG_MODE_SKAS
  37. struct {
  38. void *switch_buf;
  39. void *fork_buf;
  40. int mm_count;
  41. } skas;
  42. #endif
  43. } mode;
  44. struct {
  45. int op;
  46. union {
  47. struct {
  48. int pid;
  49. } fork, exec;
  50. struct {
  51. int (*proc)(void *);
  52. void *arg;
  53. } thread;
  54. struct {
  55. void (*proc)(void *);
  56. void *arg;
  57. } cb;
  58. } u;
  59. } request;
  60. };
  61. #define INIT_THREAD \
  62. { \
  63. .forking = 0, \
  64. .nsyscalls = 0, \
  65. .regs = EMPTY_REGS, \
  66. .cr2 = 0, \
  67. .err = 0, \
  68. .fault_addr = NULL, \
  69. .prev_sched = NULL, \
  70. .temp_stack = 0, \
  71. .exec_buf = NULL, \
  72. .arch = INIT_ARCH_THREAD, \
  73. .request = { 0 } \
  74. }
  75. typedef struct {
  76. unsigned long seg;
  77. } mm_segment_t;
  78. extern struct task_struct *alloc_task_struct(void);
  79. extern void release_thread(struct task_struct *);
  80. extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
  81. extern void dump_thread(struct pt_regs *regs, struct user *u);
  82. extern void prepare_to_copy(struct task_struct *tsk);
  83. extern unsigned long thread_saved_pc(struct task_struct *t);
  84. static inline void mm_copy_segments(struct mm_struct *from_mm,
  85. struct mm_struct *new_mm)
  86. {
  87. }
  88. #define init_stack (init_thread_union.stack)
  89. /*
  90. * User space process size: 3GB (default).
  91. */
  92. extern unsigned long task_size;
  93. #define TASK_SIZE (task_size)
  94. /* This decides where the kernel will search for a free chunk of vm
  95. * space during mmap's.
  96. */
  97. #define TASK_UNMAPPED_BASE (0x40000000)
  98. extern void start_thread(struct pt_regs *regs, unsigned long entry,
  99. unsigned long stack);
  100. struct cpuinfo_um {
  101. unsigned long loops_per_jiffy;
  102. int ipi_pipe[2];
  103. };
  104. extern struct cpuinfo_um boot_cpu_data;
  105. #define my_cpu_data cpu_data[smp_processor_id()]
  106. #ifdef CONFIG_SMP
  107. extern 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. #define KSTK_EIP(tsk) (PT_REGS_IP(&tsk->thread.regs))
  114. #define KSTK_ESP(tsk) (PT_REGS_SP(&tsk->thread.regs))
  115. #define get_wchan(p) (0)
  116. #endif
  117. /*
  118. * Overrides for Emacs so that we follow Linus's tabbing style.
  119. * Emacs will notice this stuff at the end of the file and automatically
  120. * adjust the settings for this buffer only. This must remain at the end
  121. * of the file.
  122. * ---------------------------------------------------------------------------
  123. * Local variables:
  124. * c-file-style: "linux"
  125. * End:
  126. */