- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/gic_support.S
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain;charset=UTF-8
r279 r321 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 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 責ãããã¨ï¼ 10 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 46 32 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 53 38 * 54 39 * $Id$ … … 56 41 57 42 /* 58 * ã«ã¼ãã«ã®å²è¾¼ã¿ã³ã³ããã¼ã©ä¾åé¨ã®ã¢ã»ã³ããªè¨èªé¨ï¼GICç¨ï¼43 * カーネルの割込みコントローラ依存部のアセンブリ言語部(GIC用) 59 44 */ 60 45 61 46 #define TOPPERS_MACRO_ONLY 62 47 #define TOPPERS_ASM_MACRO 63 #define UINT_C(val) (val) /* uint_t åã®å®æ°ãä½ããã¯ã*/64 #define ULONG_C(val) (val) /* ulong_t åã®å®æ°ãä½ããã¯ã*/65 #define CAST(type, val) (val) /* åãã£ã¹ããè¡ããã¯ã*/48 #define UINT_C(val) (val) /* uint_t型の定数を作るマクロ */ 49 #define ULONG_C(val) (val) /* ulong_t型の定数を作るマクロ */ 50 #define CAST(type, val) (val) /* 型キャストを行うマクロ */ 66 51 #define GIC_REG(base, offset) ((base) + (offset)) 67 52 #include "kernel_impl.h" … … 73 58 74 59 /* 75 * å²è¾¼ã¿ãã³ãã©å¼åºãåã®å²è¾¼ã¿ã³ã³ããã¼ã©æä½60 * 割込みハンドラ呼出し前の割込みコントローラ操作 76 61 * 77 * r4ã«å²è¾¼ã¿çªå·ãè¿ãï¼irc_end_intã§ç¨ããæ 78 å ±ï¼å²è¾¼ã¿çºçåã®å²è¾¼ã¿ 79 * åªå 80 度ãã¹ã¯ï¼ãï¼ã¹ã¿ãã¯ã®å 81 é ã«ä¿åããï¼ 62 * r4に割込み番号を返す.irc_end_intで用いる情報(割込み発生前の割込み 63 * 優先度マスク)を,スタックの先頭に保存する. 82 64 */ 83 65 ATEXT … … 86 68 ALABEL(irc_begin_int) 87 69 /* 88 * å²è¾¼ã¿è¦å ãåå¾ããï¼70 * 割込み要因を取得する. 89 71 */ 90 72 ldr r1, =GICC_IAR … … 92 74 93 75 /* 94 * å²è¾¼ã¿çªå·ãæ±ããï¼76 * 割込み番号を求める. 95 77 */ 96 lsl r4, r3, #22 /* ä¸ä½10ããããåãåºã*/78 lsl r4, r3, #22 /* 下位10ビットを取り出す */ 97 79 lsr r4, r4, #22 98 80 99 81 /* 100 * å²è¾¼ã¿è¦æ±ãã¯ãªã¢ããï¼82 * 割込み要求をクリアする. 101 83 */ 102 84 and r0, r4, #31 … … 108 90 109 91 /* 110 * å²è¾¼ã¿è¦å ã®å²è¾¼ã¿åªå 111 度ãæ±ãï¼å²è¾¼ã¿åªå 112 度ãã¹ã¯ã«è¨å®ããï¼ 92 * 割込み要因の割込み優先度を求め,割込み優先度マスクに設定する. 113 93 */ 114 ldr r1, =GICC_RPR /* åãä»ããå²è¾¼ã¿ã®å²è¾¼ã¿åªå 115 度ãåå¾ */ 94 ldr r1, =GICC_RPR /* 受け付けた割込みの割込み優先度を取得 */ 116 95 ldr r0, [r1] 117 ldr r1, =GICC_PMR /* å²è¾¼ã¿çºçåã®å²è¾¼ã¿åªå 118 度ãåå¾ */ 96 ldr r1, =GICC_PMR /* 割込み発生前の割込み優先度を取得 */ 119 97 ldr r2, [r1] 120 str r0, [r1] /* æ°ããå²è¾¼ã¿åªå 121 度ãã¹ã¯ãã»ãããã */ 122 asm_data_sync_barrier r0 /* å²è¾¼ã¿åªå 123 度ãã¹ã¯ãã»ãããããã®ãå¾ 124 㤠*/ 125 str r2, [sp] /* irc_end_intã§ç¨ããæ 126 å ±ãä¿å */ 98 str r0, [r1] /* 新しい割込み優先度マスクをセットする */ 99 asm_data_sync_barrier r0 /* 割込み優先度マスクがセットされるのを待つ */ 100 str r2, [sp] /* irc_end_intで用いる情報を保存 */ 127 101 128 102 /* 129 * EOI ãçºè¡ããï¼103 * EOIを発行する. 130 104 */ 131 ldr r1, =GICC_EOIR /* EOI ã¬ã¸ã¹ã¿ã¸ã®æ¸è¾¼ã¿*/105 ldr r1, =GICC_EOIR /* EOIレジスタへの書込み */ 132 106 str r3, [r1] 133 107 134 108 /* 135 * å²è¾¼ã¿çªå·ãè¿å¤ã¨ãã¦ãªã¿ã¼ã³ããï¼109 * 割込み番号を返値としてリターンする. 136 110 */ 137 111 bx lr 138 112 139 113 /* 140 * å²è¾¼ã¿ãã³ãã©å¼åºãå¾ã®å²è¾¼ã¿ã³ã³ããã¼ã©æä½114 * 割込みハンドラ呼出し後の割込みコントローラ操作 141 115 */ 142 116 ATEXT … … 145 119 ALABEL(irc_end_int) 146 120 /* 147 * å²è¾¼ã¿åªå 148 度ãã¹ã¯ãå 149 ã«æ»ãï¼ 121 * 割込み優先度マスクを元に戻す. 150 122 */ 151 ldr r2, [sp] /* irc_begin_intã§ä¿åããæ 152 å ±ã復帰 */ 153 ldr r1, =GICC_PMR /* å²è¾¼ã¿åªå 154 度ãã¹ã¯ãå 155 ã«æ»ã */ 123 ldr r2, [sp] /* irc_begin_intで保存した情報を復帰 */ 124 ldr r1, =GICC_PMR /* 割込み優先度マスクを元に戻す */ 156 125 str r2, [r1] 157 126 bx lr 158 127 159 128 /* 160 * CPUä¾å¤çºçåã®å²è¾¼ã¿åªå 161 度ã®åå¾ 129 * CPU例外発生前の割込み優先度の取得 162 130 * 163 * CPUä¾å¤ã®çºçã§å²è¾¼ã¿åªå 164 度ãå¤ãããã¨ã¯ãªãããï¼ç¾å¨ã®å²è¾¼ã¿åªå 165 166 * 度ãè¿ãï¼ 131 * CPU例外の発生で割込み優先度が変わることはないため,現在の割込み優先 132 * 度を返す. 167 133 */ 168 134 ATEXT … … 171 137 ALABEL(irc_get_intpri) 172 138 /* 173 * å²è¾¼ã¿åªå 174 度ãã¹ã¯ãå¤é¨è¡¨ç¾ã«å¤æãã¦è¿ãï¼ 139 * 割込み優先度マスクを外部表現に変換して返す. 175 140 */ 176 141 ldr r1, =GICC_PMR … … 181 146 182 147 /* 183 * CPU ä¾å¤ãã³ãã©å¼åºãåã®å²è¾¼ã¿ã³ã³ããã¼ã©æä½148 * CPU例外ハンドラ呼出し前の割込みコントローラ操作 184 149 * 185 * irc_end_excã§ç¨ããæ 186 å ±ï¼CPUä¾å¤çºçåã®å²è¾¼ã¿åªå 187 度ãã¹ã¯ï¼ãï¼ã¹ã¿ã 188 * ã¯ã®å 189 é ã«ä¿åããï¼ 150 * irc_end_excで用いる情報(CPU例外発生前の割込み優先度マスク)を,スタッ 151 * クの先頭に保存する. 190 152 */ 191 153 ATEXT … … 194 156 ALABEL(irc_begin_exc) 195 157 /* 196 * å²è¾¼ã¿åªå 197 度ãã¹ã¯ãä¿åããï¼ 158 * 割込み優先度マスクを保存する. 198 159 */ 199 ldr r1, =GICC_PMR /* ç¾å¨ã®å²è¾¼ã¿åªå 200 度ãåå¾ */ 160 ldr r1, =GICC_PMR /* 現在の割込み優先度を取得 */ 201 161 ldr r2, [r1] 202 str r2, [sp] /* irc_end_excã§ç¨ããæ 203 å ±ãä¿å */ 162 str r2, [sp] /* irc_end_excで用いる情報を保存 */ 204 163 bx lr 205 164 206 165 /* 207 * CPU ä¾å¤ãã³ãã©å¼åºãå¾ã®å²è¾¼ã¿ã³ã³ããã¼ã©æä½166 * CPU例外ハンドラ呼出し後の割込みコントローラ操作 208 167 */ 209 168 ATEXT … … 212 171 ALABEL(irc_end_exc) 213 172 /* 214 * å²è¾¼ã¿åªå 215 度ãã¹ã¯ãå 216 ã«æ»ãï¼ 173 * 割込み優先度マスクを元に戻す. 217 174 */ 218 ldr r2, [sp] /* irc_begin_excã§ä¿åããæ 219 å ±ã復帰 */ 220 ldr r1, =GICC_PMR /* å²è¾¼ã¿åªå 221 度ãã¹ã¯ãå 222 ã«æ»ã */ 175 ldr r2, [sp] /* irc_begin_excで保存した情報を復帰 */ 176 ldr r1, =GICC_PMR /* 割込み優先度マスクを元に戻す */ 223 177 str r2, [r1] 224 178 bx lr
Note:
See TracChangeset
for help on using the changeset viewer.