Commit | Line | Data |
---|---|---|
4511ec15 | 1 | /* |
5233806d MS |
2 | * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu> |
3 | * Copyright (C) 2008-2009 PetaLogix | |
4511ec15 MS |
4 | * Copyright (C) 2006 Atmark Techno, Inc. |
5 | * | |
6 | * This file is subject to the terms and conditions of the GNU General Public | |
7 | * License. See the file "COPYING" in the main directory of this archive | |
8 | * for more details. | |
9 | */ | |
10 | ||
11 | #ifndef _ASM_MICROBLAZE_PROCESSOR_H | |
12 | #define _ASM_MICROBLAZE_PROCESSOR_H | |
13 | ||
14 | #include <asm/ptrace.h> | |
15 | #include <asm/setup.h> | |
16 | #include <asm/registers.h> | |
2921e2bd MS |
17 | #include <asm/entry.h> |
18 | #include <asm/current.h> | |
4511ec15 MS |
19 | |
20 | # ifndef __ASSEMBLY__ | |
21 | /* from kernel/cpu/mb.c */ | |
22 | extern const struct seq_operations cpuinfo_op; | |
23 | ||
24 | # define cpu_relax() barrier() | |
25 | # define cpu_sleep() do {} while (0) | |
4511ec15 | 26 | |
2eba318e MS |
27 | #define task_pt_regs(tsk) \ |
28 | (((struct pt_regs *)(THREAD_SIZE + task_stack_page(tsk))) - 1) | |
29 | ||
e1c4bd08 MS |
30 | /* Do necessary setup to start up a newly executed thread. */ |
31 | void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long usp); | |
32 | ||
0dd90aa9 MS |
33 | extern void ret_from_fork(void); |
34 | ||
5233806d MS |
35 | # endif /* __ASSEMBLY__ */ |
36 | ||
37 | # ifndef CONFIG_MMU | |
4511ec15 MS |
38 | /* |
39 | * User space process size: memory size | |
40 | * | |
41 | * TASK_SIZE on MMU cpu is usually 1GB. However, on no-MMU arch, both | |
42 | * user processes and the kernel is on the same memory region. They | |
43 | * both share the memory space and that is limited by the amount of | |
44 | * physical memory. thus, we set TASK_SIZE == amount of total memory. | |
45 | */ | |
46 | # define TASK_SIZE (0x81000000 - 0x80000000) | |
47 | ||
48 | /* | |
49 | * Default implementation of macro that returns current | |
50 | * instruction pointer ("program counter"). | |
51 | */ | |
52 | # define current_text_addr() ({ __label__ _l; _l: &&_l; }) | |
53 | ||
54 | /* | |
55 | * This decides where the kernel will search for a free chunk of vm | |
56 | * space during mmap's. We won't be using it | |
57 | */ | |
58 | # define TASK_UNMAPPED_BASE 0 | |
59 | ||
60 | /* definition in include/linux/sched.h */ | |
61 | struct task_struct; | |
62 | ||
63 | /* thread_struct is gone. use thread_info instead. */ | |
64 | struct thread_struct { }; | |
65 | # define INIT_THREAD { } | |
66 | ||
4511ec15 MS |
67 | /* Free all resources held by a thread. */ |
68 | static inline void release_thread(struct task_struct *dead_task) | |
69 | { | |
70 | } | |
71 | ||
72 | /* Free all resources held by a thread. */ | |
73 | static inline void exit_thread(void) | |
74 | { | |
75 | } | |
76 | ||
77 | extern unsigned long thread_saved_pc(struct task_struct *t); | |
78 | ||
79 | extern unsigned long get_wchan(struct task_struct *p); | |
80 | ||
81 | /* | |
82 | * create a kernel thread without removing it from tasklists | |
83 | */ | |
84 | extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); | |
85 | ||
4511ec15 MS |
86 | # define KSTK_EIP(tsk) (0) |
87 | # define KSTK_ESP(tsk) (0) | |
88 | ||
5233806d MS |
89 | # else /* CONFIG_MMU */ |
90 | ||
91 | /* | |
92 | * This is used to define STACK_TOP, and with MMU it must be below | |
93 | * kernel base to select the correct PGD when handling MMU exceptions. | |
94 | */ | |
95 | # define TASK_SIZE (CONFIG_KERNEL_START) | |
96 | ||
97 | /* | |
98 | * This decides where the kernel will search for a free chunk of vm | |
99 | * space during mmap's. | |
100 | */ | |
101 | # define TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3) | |
102 | ||
103 | # define THREAD_KSP 0 | |
104 | ||
105 | # ifndef __ASSEMBLY__ | |
106 | ||
107 | /* | |
108 | * Default implementation of macro that returns current | |
109 | * instruction pointer ("program counter"). | |
110 | */ | |
111 | # define current_text_addr() ({ __label__ _l; _l: &&_l; }) | |
112 | ||
113 | /* If you change this, you must change the associated assembly-languages | |
114 | * constants defined below, THREAD_*. | |
115 | */ | |
116 | struct thread_struct { | |
117 | /* kernel stack pointer (must be first field in structure) */ | |
118 | unsigned long ksp; | |
119 | unsigned long ksp_limit; /* if ksp <= ksp_limit stack overflow */ | |
120 | void *pgdir; /* root of page-table tree */ | |
121 | struct pt_regs *regs; /* Pointer to saved register state */ | |
122 | }; | |
123 | ||
124 | # define INIT_THREAD { \ | |
125 | .ksp = sizeof init_stack + (unsigned long)init_stack, \ | |
126 | .pgdir = swapper_pg_dir, \ | |
127 | } | |
128 | ||
5233806d MS |
129 | /* Free all resources held by a thread. */ |
130 | extern inline void release_thread(struct task_struct *dead_task) | |
131 | { | |
132 | } | |
133 | ||
134 | extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); | |
135 | ||
136 | /* Free current thread data structures etc. */ | |
137 | static inline void exit_thread(void) | |
138 | { | |
139 | } | |
140 | ||
141 | /* Return saved (kernel) PC of a blocked thread. */ | |
142 | # define thread_saved_pc(tsk) \ | |
143 | ((tsk)->thread.regs ? (tsk)->thread.regs->r15 : 0) | |
144 | ||
145 | unsigned long get_wchan(struct task_struct *p); | |
146 | ||
147 | /* The size allocated for kernel stacks. This _must_ be a power of two! */ | |
148 | # define KERNEL_STACK_SIZE 0x2000 | |
149 | ||
150 | /* Return some info about the user process TASK. */ | |
151 | # define task_tos(task) ((unsigned long)(task) + KERNEL_STACK_SIZE) | |
152 | # define task_regs(task) ((struct pt_regs *)task_tos(task) - 1) | |
153 | ||
154 | # define task_pt_regs_plus_args(tsk) \ | |
6e83557c | 155 | ((void *)task_pt_regs(tsk)) |
5233806d MS |
156 | |
157 | # define task_sp(task) (task_regs(task)->r1) | |
158 | # define task_pc(task) (task_regs(task)->pc) | |
159 | /* Grotty old names for some. */ | |
160 | # define KSTK_EIP(task) (task_pc(task)) | |
161 | # define KSTK_ESP(task) (task_sp(task)) | |
162 | ||
163 | /* FIXME */ | |
164 | # define deactivate_mm(tsk, mm) do { } while (0) | |
165 | ||
166 | # define STACK_TOP TASK_SIZE | |
167 | # define STACK_TOP_MAX STACK_TOP | |
168 | ||
c40d04df DH |
169 | void disable_hlt(void); |
170 | void enable_hlt(void); | |
171 | void default_idle(void); | |
172 | ||
173 | #ifdef CONFIG_DEBUG_FS | |
174 | extern struct dentry *of_debugfs_root; | |
175 | #endif | |
176 | ||
5233806d MS |
177 | # endif /* __ASSEMBLY__ */ |
178 | # endif /* CONFIG_MMU */ | |
4511ec15 | 179 | #endif /* _ASM_MICROBLAZE_PROCESSOR_H */ |