processor-generic.h 2.7 KB

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