Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
icsr.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: Copyright The Zephyr Project Contributors
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
10
11#ifndef ZEPHYR_INCLUDE_ARCH_RISCV_ICSR_H_
12#define ZEPHYR_INCLUDE_ARCH_RISCV_ICSR_H_
13
15#include <zephyr/irq.h>
16
17#ifdef CONFIG_RISCV_ISA_EXT_SMCSRIND
18
24static inline unsigned long micsr_read(unsigned int index)
25{
26 unsigned int key = irq_lock();
27
28 csr_write(MISELECT, index);
29 unsigned long val = csr_read(MIREG);
30
31 irq_unlock(key);
32 return val;
33}
34
40static inline void micsr_write(unsigned int index, unsigned long value)
41{
42 unsigned int key = irq_lock();
43
44 csr_write(MISELECT, index);
45 csr_write(MIREG, value);
46
47 irq_unlock(key);
48}
49
55static inline void micsr_set(unsigned int index, unsigned long mask)
56{
57 unsigned int key = irq_lock();
58
59 csr_write(MISELECT, index);
60 csr_set(MIREG, mask);
61
62 irq_unlock(key);
63}
64
70static inline void micsr_clear(unsigned int index, unsigned long mask)
71{
72 unsigned int key = irq_lock();
73
74 csr_write(MISELECT, index);
75 csr_clear(MIREG, mask);
76
77 irq_unlock(key);
78}
79
86static inline unsigned long micsr_read_set(unsigned int index, unsigned long mask)
87{
88 unsigned int key = irq_lock();
89
90 csr_write(MISELECT, index);
91 unsigned long val = csr_read_set(MIREG, mask);
92
93 irq_unlock(key);
94 return val;
95}
96
103static inline unsigned long micsr_read_clear(unsigned int index, unsigned long mask)
104{
105 unsigned int key = irq_lock();
106
107 csr_write(MISELECT, index);
108 unsigned long val = csr_read_clear(MIREG, mask);
109
110 irq_unlock(key);
111 return val;
112}
113
119static inline unsigned long micsr2_read(unsigned int index)
120{
121 unsigned int key = irq_lock();
122
123 csr_write(MISELECT, index);
124 unsigned long val = csr_read(MIREG2);
125
126 irq_unlock(key);
127 return val;
128}
129
135static inline void micsr2_write(unsigned int index, unsigned long value)
136{
137 unsigned int key = irq_lock();
138
139 csr_write(MISELECT, index);
140 csr_write(MIREG2, value);
141
142 irq_unlock(key);
143}
144
150static inline void micsr2_set(unsigned int index, unsigned long mask)
151{
152 unsigned int key = irq_lock();
153
154 csr_write(MISELECT, index);
155 csr_set(MIREG2, mask);
156
157 irq_unlock(key);
158}
159
165static inline void micsr2_clear(unsigned int index, unsigned long mask)
166{
167 unsigned int key = irq_lock();
168
169 csr_write(MISELECT, index);
170 csr_clear(MIREG2, mask);
171
172 irq_unlock(key);
173}
174
181static inline unsigned long micsr2_read_set(unsigned int index, unsigned long mask)
182{
183 unsigned int key = irq_lock();
184
185 csr_write(MISELECT, index);
186 unsigned long val = csr_read_set(MIREG2, mask);
187
188 irq_unlock(key);
189 return val;
190}
191
198static inline unsigned long micsr2_read_clear(unsigned int index, unsigned long mask)
199{
200 unsigned int key = irq_lock();
201
202 csr_write(MISELECT, index);
203 unsigned long val = csr_read_clear(MIREG2, mask);
204
205 irq_unlock(key);
206 return val;
207}
208
209#endif /* CONFIG_RISCV_ISA_EXT_SMCSRIND */
210
211#endif /* ZEPHYR_INCLUDE_ARCH_RISCV_ICSR_H_ */
#define csr_read(csr)
Definition csr.h:210
#define csr_clear(csr, val)
Definition csr.h:255
#define csr_set(csr, val)
Definition csr.h:237
#define csr_read_clear(csr, val)
Definition csr.h:246
#define csr_read_set(csr, val)
Definition csr.h:228
#define csr_write(csr, val)
Definition csr.h:218
#define irq_lock()
Lock interrupts.
Definition irq.h:259
#define irq_unlock(key)
Unlock interrupts.
Definition irq.h:287
Public interface for configuring interrupts.