1f2f4bf5aSAlex Dewar /* SPDX-License-Identifier: GPL-2.0 */ 28ede0bdbSAl Viro /* 38ede0bdbSAl Viro * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 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 1337185b33SAl Viro #include <asm/ptrace.h> 1437185b33SAl Viro #include <registers.h> 1537185b33SAl Viro #include <sysdep/archsetjmp.h> 168ede0bdbSAl Viro 17607647abSRichard Weinberger #include <linux/prefetch.h> 18607647abSRichard Weinberger 19*d8fb32f4SAnton Ivanov #include <asm/cpufeatures.h> 20*d8fb32f4SAnton Ivanov 218ede0bdbSAl Viro struct mm_struct; 228ede0bdbSAl Viro 238ede0bdbSAl Viro struct thread_struct { 248ede0bdbSAl Viro struct pt_regs regs; 25f72c22e4SRichard Weinberger struct pt_regs *segv_regs; 268ede0bdbSAl Viro int singlestep_syscall; 278ede0bdbSAl Viro void *fault_addr; 288ede0bdbSAl Viro jmp_buf *fault_catcher; 298ede0bdbSAl Viro struct task_struct *prev_sched; 308ede0bdbSAl Viro struct arch_thread arch; 318ede0bdbSAl Viro jmp_buf switch_buf; 328ede0bdbSAl Viro struct { 338ede0bdbSAl Viro int op; 348ede0bdbSAl Viro union { 358ede0bdbSAl Viro struct { 368ede0bdbSAl Viro int pid; 378ede0bdbSAl Viro } fork, exec; 388ede0bdbSAl Viro struct { 398ede0bdbSAl Viro int (*proc)(void *); 408ede0bdbSAl Viro void *arg; 418ede0bdbSAl Viro } thread; 428ede0bdbSAl Viro struct { 438ede0bdbSAl Viro void (*proc)(void *); 448ede0bdbSAl Viro void *arg; 458ede0bdbSAl Viro } cb; 468ede0bdbSAl Viro } u; 478ede0bdbSAl Viro } request; 488ede0bdbSAl Viro }; 498ede0bdbSAl Viro 508ede0bdbSAl Viro #define INIT_THREAD \ 518ede0bdbSAl Viro { \ 528ede0bdbSAl Viro .regs = EMPTY_REGS, \ 538ede0bdbSAl Viro .fault_addr = NULL, \ 548ede0bdbSAl Viro .prev_sched = NULL, \ 558ede0bdbSAl Viro .arch = INIT_ARCH_THREAD, \ 568ede0bdbSAl Viro .request = { 0 } \ 578ede0bdbSAl Viro } 588ede0bdbSAl Viro 598ede0bdbSAl Viro static inline void release_thread(struct task_struct *task) 608ede0bdbSAl Viro { 618ede0bdbSAl Viro } 628ede0bdbSAl Viro 630500871fSDavid Howells static inline void mm_copy_segments(struct mm_struct *from_mm, 640500871fSDavid Howells struct mm_struct *new_mm) 650500871fSDavid Howells { 660500871fSDavid Howells } 678ede0bdbSAl Viro 688ede0bdbSAl Viro /* 698ede0bdbSAl Viro * User space process size: 3GB (default). 708ede0bdbSAl Viro */ 718ede0bdbSAl Viro extern unsigned long task_size; 728ede0bdbSAl Viro 738ede0bdbSAl Viro #define TASK_SIZE (task_size) 748ede0bdbSAl Viro 758ede0bdbSAl Viro #undef STACK_TOP 768ede0bdbSAl Viro #undef STACK_TOP_MAX 778ede0bdbSAl Viro 788ede0bdbSAl Viro extern unsigned long stacksizelim; 798ede0bdbSAl Viro 808ede0bdbSAl Viro #define STACK_ROOM (stacksizelim) 818ede0bdbSAl Viro #define STACK_TOP (TASK_SIZE - 2 * PAGE_SIZE) 828ede0bdbSAl Viro #define STACK_TOP_MAX STACK_TOP 838ede0bdbSAl Viro 848ede0bdbSAl Viro /* This decides where the kernel will search for a free chunk of vm 858ede0bdbSAl Viro * space during mmap's. 868ede0bdbSAl Viro */ 878ede0bdbSAl Viro #define TASK_UNMAPPED_BASE (0x40000000) 888ede0bdbSAl Viro 898ede0bdbSAl Viro extern void start_thread(struct pt_regs *regs, unsigned long entry, 908ede0bdbSAl Viro unsigned long stack); 918ede0bdbSAl Viro 928ede0bdbSAl Viro struct cpuinfo_um { 938ede0bdbSAl Viro unsigned long loops_per_jiffy; 948ede0bdbSAl Viro int ipi_pipe[2]; 95*d8fb32f4SAnton Ivanov int cache_alignment; 96*d8fb32f4SAnton Ivanov union { 97*d8fb32f4SAnton Ivanov __u32 x86_capability[NCAPINTS + NBUGINTS]; 98*d8fb32f4SAnton Ivanov unsigned long x86_capability_alignment; 99*d8fb32f4SAnton Ivanov }; 1008ede0bdbSAl Viro }; 1018ede0bdbSAl Viro 1028ede0bdbSAl Viro extern struct cpuinfo_um boot_cpu_data; 1038ede0bdbSAl Viro 1048ede0bdbSAl Viro #define cpu_data (&boot_cpu_data) 1058ede0bdbSAl Viro #define current_cpu_data boot_cpu_data 106*d8fb32f4SAnton Ivanov #define cache_line_size() (boot_cpu_data.cache_alignment) 1078ede0bdbSAl Viro 1088ede0bdbSAl Viro #define KSTK_REG(tsk, reg) get_thread_reg(reg, &tsk->thread.switch_buf) 1098ede0bdbSAl Viro extern unsigned long get_wchan(struct task_struct *p); 1108ede0bdbSAl Viro 1118ede0bdbSAl Viro #endif 112