source: ssp_rpi3/trunk/arch/arm64_gcc/common/arm64.h@ 384

Last change on this file since 384 was 384, checked in by nmir-saito, 5 years ago

add target dependent files of ssp for rpi3

  • Property svn:keywords set to Id
File size: 5.4 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 * Copyright (C) 2018,2019 by Naoki Saito
8 * Nagoya Municipal Industrial Research Institute, JAPAN
9 *
10 * 上記著作権者
11は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再é…
14å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再é…
20å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
21å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
22 * 者
23マニュアルなど)に,上記の著作権表示,この利用条件および下記
24 * の無保証規定を掲載すること.
25 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
26 * 用できない形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
28 * と.
29 * (a) 再é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
31マニュアルなど)に,上記の著
32 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
33 * (b) 再é…
34å¸ƒã®å½¢æ…
35‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
36 * 報告すること.
37 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
38 * 害からも,上記著作権者
39およびTOPPERSプロジェクトをå…
40è²¬ã™ã‚‹ã“と.
41 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
42 * 由に基づく請求からも,上記著作権者
43およびTOPPERSプロジェクトを
44 * å…
45è²¬ã™ã‚‹ã“と.
46 *
47 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
48お
49 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
50 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
51 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
52 * の責任を負わない.
53 *
54 * $Id: arm64.h 384 2019-04-16 11:01:09Z nmir-saito $
55 */
56#ifndef TOPPERS_ARM64_H
57#define TOPPERS_ARM64_H
58
59/*
60 * PSTATE
61 */
62#define AARCH64_PSTATE_N (1 << 31)
63#define AARCH64_PSTATE_Z (1 << 30)
64#define AARCH64_PSTATE_C (1 << 29)
65#define AARCH64_PSTATE_V (1 << 28)
66#define AARCH64_PSTATE_SS (1 << 21)
67#define AARCH64_PSTATE_IL (1 << 20)
68#define AARCH64_PSTATE_D (1 << 9)
69#define AARCH64_PSTATE_A (1 << 8)
70#define AARCH64_PSTATE_I (1 << 7)
71#define AARCH64_PSTATE_F (1 << 6)
72#define AARCH64_PSTATE_MODE4 (1 << 4)
73#define AARCH64_PSTATE_MODE_MASK (AARCH64_PSTATE_MODE4 - 1)
74
75/*
76 * DAIF
77 */
78#define AARCH64_DAIF_FIQ UINT64_C(1)
79#define AARCH64_DAIF_IRQ UINT64_C(2)
80#define AARCH64_DAIF_SERR UINT64_C(4)
81#define AARCH64_DAIF_DBG UINT64_C(8)
82#define AARCH64_DAIF_ALL (AARCH64_DAIF_DBG|AARCH64_DAIF_SERR|AARCH64_DAIF_IRQ|AARCH64_DAIF_FIQ)
83
84#ifndef TOPPERS_MACRO_ONLY
85
86/*
87 * DAIFの設定および状æ…
88‹å‚ç…
89§
90 */
91Inline uint32_t
92aarch64_get_daif(void){
93 uint32_t daif;
94 Asm ("mrs %0, daif\n\t":"=r"(daif): : "memory");
95 return daif;
96}
97
98Inline void
99aarch64_set_daif(uint32_t daif) {
100
101 Asm ("msr daif, %0\n\t" : : "r"(daif): "cc", "memory");
102}
103
104/*
105 * DAIF.I のセット/クリア
106 */
107Inline void
108aarch64_set_daif_i(void) {
109 Asm ("msr daifset, %0\n\t"::"i"(AARCH64_DAIF_IRQ): "cc", "memory");
110}
111
112Inline void
113aarch64_clear_daif_i(void) {
114 Asm ("msr daifclr, %0\n\t"::"i"(AARCH64_DAIF_IRQ): "cc", "memory");
115}
116
117/*
118 * DAIF.F のセット/クリア
119 */
120Inline void
121aarch64_set_daif_f(void) {
122 Asm ("msr daifset, %0\n\t"::"i"(AARCH64_DAIF_FIQ): "cc", "memory");
123}
124
125Inline void
126aarch64_clear_daif_f(void) {
127 Asm ("msr daifclr, %0\n\t"::"i"(AARCH64_DAIF_FIQ): "cc", "memory");
128}
129
130/*
131 * DAIF.F および DAIF.I の同時セット/クリア
132 */
133Inline void
134aarch64_set_daif_if(void) {
135 Asm ("msr daifset, %0\n\t"::"i"(AARCH64_DAIF_IRQ | AARCH64_DAIF_FIQ): "cc", "memory");
136}
137
138Inline void
139aarch64_clear_daif_if(void) {
140 Asm ("msr daifclr, %0\n\t"::"i"(AARCH64_DAIF_IRQ | AARCH64_DAIF_FIQ): "cc", "memory");
141}
142
143/*
144 * DAIF.I の状æ…
145‹å‚ç…
146§
147 */
148Inline bool_t
149aarch64_sense_daif_irq(void) {
150 uint32_t daif;
151 bool_t state;
152
153 daif = aarch64_get_daif();
154
155 if(daif & AARCH64_PSTATE_I) {
156 state = true;
157 }
158 else {
159 state = false;
160 }
161
162 return state;
163}
164
165/*
166 * DAIF.F の状æ…
167‹å‚ç…
168§
169 */
170Inline bool_t
171aarch64_sense_daif_fiq(void) {
172 uint32_t daif;
173 bool_t state;
174
175 daif = aarch64_get_daif();
176
177 if(daif & AARCH64_PSTATE_F) {
178 state = true;
179 }
180 else {
181 state = false;
182 }
183
184 return state;
185}
186
187/*
188 * クリティカル処理の出口(最適化防止)
189 */
190Inline void
191aarch64_exit_critical(void)
192{
193 Asm("":::"memory");
194}
195
196#endif /* TOPPERS_MACRO_ONLY */
197#endif /* TOPPERS_ARM64_H */
Note: See TracBrowser for help on using the repository browser.