This source file includes following definitions.
- release_thread
- cpu_relax
- wait_for_interrupt
1
2
3
4
5
6 #ifndef _ASM_RISCV_PROCESSOR_H
7 #define _ASM_RISCV_PROCESSOR_H
8
9 #include <linux/const.h>
10
11 #include <asm/ptrace.h>
12
13
14
15
16
17 #define TASK_UNMAPPED_BASE PAGE_ALIGN(TASK_SIZE / 3)
18
19 #define STACK_TOP TASK_SIZE
20 #define STACK_TOP_MAX STACK_TOP
21 #define STACK_ALIGN 16
22
23 #ifndef __ASSEMBLY__
24
25 struct task_struct;
26 struct pt_regs;
27
28
29 struct thread_struct {
30
31 unsigned long ra;
32 unsigned long sp;
33 unsigned long s[12];
34 struct __riscv_d_ext_state fstate;
35 };
36
37 #define INIT_THREAD { \
38 .sp = sizeof(init_stack) + (long)&init_stack, \
39 }
40
41 #define task_pt_regs(tsk) \
42 ((struct pt_regs *)(task_stack_page(tsk) + THREAD_SIZE \
43 - ALIGN(sizeof(struct pt_regs), STACK_ALIGN)))
44
45 #define KSTK_EIP(tsk) (task_pt_regs(tsk)->sepc)
46 #define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp)
47
48
49
50 extern void start_thread(struct pt_regs *regs,
51 unsigned long pc, unsigned long sp);
52
53
54 static inline void release_thread(struct task_struct *dead_task)
55 {
56 }
57
58 extern unsigned long get_wchan(struct task_struct *p);
59
60
61 static inline void cpu_relax(void)
62 {
63 #ifdef __riscv_muldiv
64 int dummy;
65
66 __asm__ __volatile__ ("div %0, %0, zero" : "=r" (dummy));
67 #endif
68 barrier();
69 }
70
71 static inline void wait_for_interrupt(void)
72 {
73 __asm__ __volatile__ ("wfi");
74 }
75
76 struct device_node;
77 int riscv_of_processor_hartid(struct device_node *node);
78
79 extern void riscv_fill_hwcap(void);
80
81 #endif
82
83 #endif