processor-generic.h 2.3 KB

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