| 1 |
|
| 2 |
|
| 3 | #ifndef __ASM_CSKY_PROCESSOR_H
|
| 4 | #define __ASM_CSKY_PROCESSOR_H
|
| 5 |
|
| 6 | #include <linux/bitops.h>
|
| 7 | #include <linux/cache.h>
|
| 8 | #include <asm/ptrace.h>
|
| 9 | #include <asm/current.h>
|
| 10 | #include <abi/reg_ops.h>
|
| 11 | #include <abi/regdef.h>
|
| 12 | #include <abi/switch_context.h>
|
| 13 | #ifdef CONFIG_CPU_HAS_FPU
|
| 14 | #include <abi/fpu.h>
|
| 15 | #endif
|
| 16 |
|
| 17 | struct cpuinfo_csky {
|
| 18 | unsigned long asid_cache;
|
| 19 | } __aligned(SMP_CACHE_BYTES);
|
| 20 |
|
| 21 | extern struct cpuinfo_csky cpu_data[];
|
| 22 |
|
| 23 | |
| 24 | * User space process size: 2GB. This is hardcoded into a few places,
|
| 25 | * so don't change it unless you know what you are doing. TASK_SIZE
|
| 26 | * for a 64 bit kernel expandable to 8192EB, of which the current CSKY
|
| 27 | * implementations will "only" be able to use 1TB ...
|
| 28 |
|
| 29 | #define TASK_SIZE (PAGE_OFFSET - (PAGE_SIZE * 8))
|
| 30 |
|
| 31 | #ifdef __KERNEL__
|
| 32 | #define STACK_TOP TASK_SIZE
|
| 33 | #define STACK_TOP_MAX STACK_TOP
|
| 34 | #endif
|
| 35 |
|
| 36 | |
| 37 | * space during mmap's.
|
| 38 |
|
| 39 | #define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
|
| 40 |
|
| 41 | struct thread_struct {
|
| 42 | unsigned long sp;
|
| 43 | unsigned long trap_no;
|
| 44 |
|
| 45 |
|
| 46 | struct user_fp __aligned(16) user_fp;
|
| 47 | };
|
| 48 |
|
| 49 | #define INIT_THREAD { \
|
| 50 | .sp = sizeof(init_stack) + (unsigned long) &init_stack, \
|
| 51 | }
|
| 52 |
|
| 53 | |
| 54 | * Do necessary setup to start up a newly executed thread.
|
| 55 | *
|
| 56 | * pass the data segment into user programs if it exists,
|
| 57 | * it can't hurt anything as far as I can tell
|
| 58 |
|
| 59 | #define start_thread(_regs, _pc, _usp) \
|
| 60 | do { \
|
| 61 | (_regs)->pc = (_pc); \
|
| 62 | (_regs)->regs[1] = 0; \
|
| 63 | (_regs)->regs[2] = 0; \
|
| 64 | (_regs)->regs[3] = 0; \
|
| 65 | (_regs)->sr &= ~PS_S; \
|
| 66 | (_regs)->usp = (_usp); \
|
| 67 | } while (0)
|
| 68 |
|
| 69 |
|
| 70 | struct task_struct;
|
| 71 |
|
| 72 |
|
| 73 | #define prepare_to_copy(tsk) do { } while (0)
|
| 74 |
|
| 75 | unsigned long __get_wchan(struct task_struct *p);
|
| 76 |
|
| 77 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc)
|
| 78 | #define KSTK_ESP(tsk) (task_pt_regs(tsk)->usp)
|
| 79 |
|
| 80 | #define task_pt_regs(p) \
|
| 81 | ((struct pt_regs *)(THREAD_SIZE + task_stack_page(p)) - 1)
|
| 82 |
|
| 83 | #define cpu_relax() barrier()
|
| 84 |
|
| 85 | register unsigned long current_stack_pointer __asm__("sp");
|
| 86 |
|
| 87 | #endif
|