18ede0bdbSAl Viro /* 28ede0bdbSAl Viro * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 38ede0bdbSAl Viro * Licensed under the GPL 48ede0bdbSAl Viro */ 58ede0bdbSAl Viro 68ede0bdbSAl Viro #ifndef __UM_PROCESSOR_GENERIC_H 78ede0bdbSAl Viro #define __UM_PROCESSOR_GENERIC_H 88ede0bdbSAl Viro 98ede0bdbSAl Viro struct pt_regs; 108ede0bdbSAl Viro 118ede0bdbSAl Viro struct task_struct; 128ede0bdbSAl Viro 13*37185b33SAl Viro #include <asm/ptrace.h> 14*37185b33SAl Viro #include <registers.h> 15*37185b33SAl Viro #include <sysdep/archsetjmp.h> 168ede0bdbSAl Viro 17607647abSRichard Weinberger #include <linux/prefetch.h> 18607647abSRichard Weinberger 198ede0bdbSAl Viro struct mm_struct; 208ede0bdbSAl Viro 218ede0bdbSAl Viro struct thread_struct { 228ede0bdbSAl Viro struct task_struct *saved_task; 238ede0bdbSAl Viro struct pt_regs regs; 248ede0bdbSAl Viro int singlestep_syscall; 258ede0bdbSAl Viro void *fault_addr; 268ede0bdbSAl Viro jmp_buf *fault_catcher; 278ede0bdbSAl Viro struct task_struct *prev_sched; 288ede0bdbSAl Viro unsigned long temp_stack; 298ede0bdbSAl Viro jmp_buf *exec_buf; 308ede0bdbSAl Viro struct arch_thread arch; 318ede0bdbSAl Viro jmp_buf switch_buf; 328ede0bdbSAl Viro int mm_count; 338ede0bdbSAl Viro struct { 348ede0bdbSAl Viro int op; 358ede0bdbSAl Viro union { 368ede0bdbSAl Viro struct { 378ede0bdbSAl Viro int pid; 388ede0bdbSAl Viro } fork, exec; 398ede0bdbSAl Viro struct { 408ede0bdbSAl Viro int (*proc)(void *); 418ede0bdbSAl Viro void *arg; 428ede0bdbSAl Viro } thread; 438ede0bdbSAl Viro struct { 448ede0bdbSAl Viro void (*proc)(void *); 458ede0bdbSAl Viro void *arg; 468ede0bdbSAl Viro } cb; 478ede0bdbSAl Viro } u; 488ede0bdbSAl Viro } request; 498ede0bdbSAl Viro }; 508ede0bdbSAl Viro 518ede0bdbSAl Viro #define INIT_THREAD \ 528ede0bdbSAl Viro { \ 538ede0bdbSAl Viro .regs = EMPTY_REGS, \ 548ede0bdbSAl Viro .fault_addr = NULL, \ 558ede0bdbSAl Viro .prev_sched = NULL, \ 568ede0bdbSAl Viro .temp_stack = 0, \ 578ede0bdbSAl Viro .exec_buf = NULL, \ 588ede0bdbSAl Viro .arch = INIT_ARCH_THREAD, \ 598ede0bdbSAl Viro .request = { 0 } \ 608ede0bdbSAl Viro } 618ede0bdbSAl Viro 628ede0bdbSAl Viro static inline void release_thread(struct task_struct *task) 638ede0bdbSAl Viro { 648ede0bdbSAl Viro } 658ede0bdbSAl Viro 668ede0bdbSAl Viro extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); 678ede0bdbSAl Viro 688ede0bdbSAl Viro extern unsigned long thread_saved_pc(struct task_struct *t); 698ede0bdbSAl Viro 708ede0bdbSAl Viro static inline void mm_copy_segments(struct mm_struct *from_mm, 718ede0bdbSAl Viro struct mm_struct *new_mm) 728ede0bdbSAl Viro { 738ede0bdbSAl Viro } 748ede0bdbSAl Viro 758ede0bdbSAl Viro #define init_stack (init_thread_union.stack) 768ede0bdbSAl Viro 778ede0bdbSAl Viro /* 788ede0bdbSAl Viro * User space process size: 3GB (default). 798ede0bdbSAl Viro */ 808ede0bdbSAl Viro extern unsigned long task_size; 818ede0bdbSAl Viro 828ede0bdbSAl Viro #define TASK_SIZE (task_size) 838ede0bdbSAl Viro 848ede0bdbSAl Viro #undef STACK_TOP 858ede0bdbSAl Viro #undef STACK_TOP_MAX 868ede0bdbSAl Viro 878ede0bdbSAl Viro extern unsigned long stacksizelim; 888ede0bdbSAl Viro 898ede0bdbSAl Viro #define STACK_ROOM (stacksizelim) 908ede0bdbSAl Viro #define STACK_TOP (TASK_SIZE - 2 * PAGE_SIZE) 918ede0bdbSAl Viro #define STACK_TOP_MAX STACK_TOP 928ede0bdbSAl Viro 938ede0bdbSAl Viro /* This decides where the kernel will search for a free chunk of vm 948ede0bdbSAl Viro * space during mmap's. 958ede0bdbSAl Viro */ 968ede0bdbSAl Viro #define TASK_UNMAPPED_BASE (0x40000000) 978ede0bdbSAl Viro 988ede0bdbSAl Viro extern void start_thread(struct pt_regs *regs, unsigned long entry, 998ede0bdbSAl Viro unsigned long stack); 1008ede0bdbSAl Viro 1018ede0bdbSAl Viro struct cpuinfo_um { 1028ede0bdbSAl Viro unsigned long loops_per_jiffy; 1038ede0bdbSAl Viro int ipi_pipe[2]; 1048ede0bdbSAl Viro }; 1058ede0bdbSAl Viro 1068ede0bdbSAl Viro extern struct cpuinfo_um boot_cpu_data; 1078ede0bdbSAl Viro 1088ede0bdbSAl Viro #define my_cpu_data cpu_data[smp_processor_id()] 1098ede0bdbSAl Viro 1108ede0bdbSAl Viro #ifdef CONFIG_SMP 1118ede0bdbSAl Viro extern struct cpuinfo_um cpu_data[]; 1128ede0bdbSAl Viro #define current_cpu_data cpu_data[smp_processor_id()] 1138ede0bdbSAl Viro #else 1148ede0bdbSAl Viro #define cpu_data (&boot_cpu_data) 1158ede0bdbSAl Viro #define current_cpu_data boot_cpu_data 1168ede0bdbSAl Viro #endif 1178ede0bdbSAl Viro 1188ede0bdbSAl Viro 1198ede0bdbSAl Viro #define KSTK_REG(tsk, reg) get_thread_reg(reg, &tsk->thread.switch_buf) 1208ede0bdbSAl Viro extern unsigned long get_wchan(struct task_struct *p); 1218ede0bdbSAl Viro 1228ede0bdbSAl Viro #endif 123