Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/microblaze/include/asm/processor.h
26442 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
/*
3
* Copyright (C) 2008-2009 Michal Simek <[email protected]>
4
* Copyright (C) 2008-2009 PetaLogix
5
* Copyright (C) 2006 Atmark Techno, Inc.
6
*/
7
8
#ifndef _ASM_MICROBLAZE_PROCESSOR_H
9
#define _ASM_MICROBLAZE_PROCESSOR_H
10
11
#include <asm/ptrace.h>
12
#include <asm/setup.h>
13
#include <asm/registers.h>
14
#include <asm/entry.h>
15
#include <asm/current.h>
16
17
# ifndef __ASSEMBLY__
18
/* from kernel/cpu/mb.c */
19
extern const struct seq_operations cpuinfo_op;
20
21
# define cpu_relax() barrier()
22
23
#define task_pt_regs(tsk) \
24
(((struct pt_regs *)(THREAD_SIZE + task_stack_page(tsk))) - 1)
25
26
/* Do necessary setup to start up a newly executed thread. */
27
void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long usp);
28
29
extern void ret_from_fork(void);
30
extern void ret_from_kernel_thread(void);
31
32
# endif /* __ASSEMBLY__ */
33
34
/*
35
* This is used to define STACK_TOP, and with MMU it must be below
36
* kernel base to select the correct PGD when handling MMU exceptions.
37
*/
38
# define TASK_SIZE (CONFIG_KERNEL_START)
39
40
/*
41
* This decides where the kernel will search for a free chunk of vm
42
* space during mmap's.
43
*/
44
# define TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3)
45
46
# define THREAD_KSP 0
47
48
# ifndef __ASSEMBLY__
49
50
/* If you change this, you must change the associated assembly-languages
51
* constants defined below, THREAD_*.
52
*/
53
struct thread_struct {
54
/* kernel stack pointer (must be first field in structure) */
55
unsigned long ksp;
56
unsigned long ksp_limit; /* if ksp <= ksp_limit stack overflow */
57
void *pgdir; /* root of page-table tree */
58
struct pt_regs *regs; /* Pointer to saved register state */
59
};
60
61
# define INIT_THREAD { \
62
.ksp = sizeof init_stack + (unsigned long)init_stack, \
63
.pgdir = swapper_pg_dir, \
64
}
65
66
unsigned long __get_wchan(struct task_struct *p);
67
68
/* The size allocated for kernel stacks. This _must_ be a power of two! */
69
# define KERNEL_STACK_SIZE 0x2000
70
71
/* Return some info about the user process TASK. */
72
# define task_tos(task) ((unsigned long)(task) + KERNEL_STACK_SIZE)
73
# define task_regs(task) ((struct pt_regs *)task_tos(task) - 1)
74
75
# define task_pt_regs_plus_args(tsk) \
76
((void *)task_pt_regs(tsk))
77
78
# define task_sp(task) (task_regs(task)->r1)
79
# define task_pc(task) (task_regs(task)->pc)
80
/* Grotty old names for some. */
81
# define KSTK_EIP(task) (task_pc(task))
82
# define KSTK_ESP(task) (task_sp(task))
83
84
# define STACK_TOP TASK_SIZE
85
# define STACK_TOP_MAX STACK_TOP
86
87
#ifdef CONFIG_DEBUG_FS
88
extern struct dentry *of_debugfs_root;
89
#endif
90
91
# endif /* __ASSEMBLY__ */
92
#endif /* _ASM_MICROBLAZE_PROCESSOR_H */
93
94