1/*
2 * Copyright 2003-2004, Axel D��rfler, axeld@pinc-software.de.
3 * Copyright 2019, Adrien Destugues, pulkomandy@pulkomandy.tk.
4 * Distributed under the terms of the MIT License.
5 */
6#ifndef _KERNEL_ARCH_RISCV64_CPU_H
7#define _KERNEL_ARCH_RISCV64_CPU_H
8
9
10#include <arch/riscv64/arch_thread_types.h>
11#include <arch_cpu_defs.h>
12#include <kernel.h>
13
14
15#define CPU_MAX_CACHE_LEVEL	8
16#define CACHE_LINE_SIZE		64
17
18
19static inline bool
20get_ac()
21{
22	return SstatusReg{.val = Sstatus()}.sum;
23}
24
25
26static inline void
27set_ac()
28{
29	SetBitsSstatus(SstatusReg{.sum = 1}.val);
30}
31
32
33static inline void
34clear_ac()
35{
36	ClearBitsSstatus(SstatusReg{.sum = 1}.val);
37}
38
39
40typedef struct arch_cpu_info {
41	uint64 hartId;
42} arch_cpu_info;
43
44
45#ifdef __cplusplus
46extern "C" {
47#endif
48
49
50void __riscv64_setup_system_time(uint64 conversionFactor);
51
52
53static inline void
54arch_cpu_pause(void)
55{
56	// TODO: CPU pause
57}
58
59
60static inline void
61arch_cpu_idle(void)
62{
63	Wfi();
64}
65
66
67#ifdef __cplusplus
68}
69#endif
70
71
72#endif	/* _KERNEL_ARCH_RISCV64_CPU_H */
73