source: ssp_aarch64/trunk/arm64_gcc/gic_support.S@ 356

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

set svn:mime-type to files

  • Property svn:mime-type set to text/plain; charset=utf-8
File size: 4.6 KB
Line 
1/*
2 * TOPPERS/SSP Kernel
3 * Smallest Set Profile Kernel
4 *
5 * Copyright (C) 2018 by Naoki Saito
6 * Nagoya Municipal Industrial Research Institute, JAPAN
7 *
8 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13 * スコード中に含まれていること.
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17 * の無保証規定を掲載すること.
18 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20 * と.
21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24 * 報告すること.
25 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29 * 免責すること.
30 *
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
35 * の責任を負わない.
36 *
37 */
38
39/*
40 * プロセッサ依存モジュール アセンブリ言語部(GIC)
41 */
42
43#define TOPPERS_MACRO_ONLY
44#define UINT_C(val) (val) /* uint_t型の定数を作るマクロ */
45#define ULONG_C(val) (val) /* ulong_t型の定数を作るマクロ */
46#define CAST(type, val) (val) /* 型キャストを行うマクロ */
47
48#define GIC_REG(base, offset) ((base) + (offset))
49
50#include "kernel_impl.h"
51
52/*
53 * 例外入口のGIC操作
54 * x22: 例外番号(0..7)
55 */
56 .text
57 .align 2
58 .global gic_exc_entry
59gic_exc_entry:
60 mov x0, sp // 割込み優先度マスクの保存
61 ldr x9, =GICC_PMR
62 ldr x9, [x9]
63 str x9, [x0, #0]
64
65 str x22, [x0, #8] // 例外番号の保存
66
67 mov x1, x22 // 引数をセットして call_exc_handler 呼び出し
68 ldr x30, =gic_ret_int
69 b call_exc_handler
70
71/*
72 * 割込み入口のGIC操作
73 */
74 .text
75 .align 2
76 .global gic_int_entry
77gic_int_entry:
78 mov x0, sp
79 /*
80 * 割込みコントローラ操作
81 */
82 ldr x9, =GICC_IAR // 割込み要因を保存
83 ldr w9, [x9]
84 str w9, [x0, #8]
85
86 ldr x10, =GICC_RPR // 割込み要因の優先度を割込み優先度マスクにセット
87 ldr w10, [x10]
88
89 ldr x11, =GICC_PMR
90 ldr w12, [x11] // 割込み発生前のマスクの値を取り出しておく
91 str w10, [x11]
92
93 dsb sy // 割込み優先度マスクがセットされるのを待つ
94
95 str w12, [x0, #0] // 割込み発生前の優先度マスクを保存
96 ldr x11, =GICC_EOIR // EOIの発行
97 str w9, [x11]
98
99 mov w0, w9 // 引数をセットして call_int_handler 呼び出し
100 ldr x30, =gic_ret_int
101 b call_int_handler
102
103
104/*
105 * 割込み出口のGIC操作
106 */
107 .text
108 .align 2
109gic_ret_int:
110 mov x0, sp
111 ldr w9, [x0, #0] // 割込み優先度マスクを元に戻す
112 ldr x10, =GICC_PMR
113 str w9, [x10]
114
115 dsb sy // 割込み優先度マスクがセットされるのを待つ
116
117 b ret_int
Note: See TracBrowser for help on using the repository browser.