Ignore:
Timestamp:
Jun 8, 2018, 11:24:32 AM (6 years ago)
Author:
nmir-saito
Message:

set svn:mime-type to files

Location:
ssp_aarch64/trunk/arm64_gcc
Files:
25 edited

Legend:

Unmodified
Added
Removed
  • ssp_aarch64/trunk/arm64_gcc/MANIFEST

    • Property svn:mime-type set to text/plain; charset=utf-8
  • ssp_aarch64/trunk/arm64_gcc/Makefile.prc

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    44
    55#
    6 #               Makefile のプロセッサ依存部(ARM64用)
     6#               Makefile のプロセッサ依存部(ARM64用)
    77#
    88
     
    1010
    1111#
    12 ã‚³ãƒ³ãƒ‘イルオプション
     12コンパイルオプション
    1313#
    1414COPTS := $(COPTS)
     
    1919
    2020#
    21 ã‚«ãƒ¼ãƒãƒ«ã«é–¢ã™ã‚‹å®šç¾©
     21カーネルに関する定義
    2222#
    2323KERNEL_DIRS := $(KERNEL_DIRS) $(PRCDIR)
     
    2727
    2828#
    29 ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿é–¢ä¿‚の変数の定義
     29コンフィギュレータ関係の変数の定義
    3030#
    3131CFG_TABS := $(CFG_TABS) --symval-table $(PRCDIR)/prc_sym.def
     
    3535
    3636#
    37 ä¾å­˜é–¢ä¿‚の定義
     37依存関係の定義
    3838#
    3939cfg1_out.c: $(PRCDIR)/prc_sym.def
     
    4242
    4343#
    44 ãã®ä»–
     44その他
    4545#
    4646CLEAN_FILES := $(CLEAN_FILES)
  • ssp_aarch64/trunk/arm64_gcc/arm64.h

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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 *      免責すること.
    4632 *
    47  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    48 ãŠ
    49  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    50  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    51  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    52  *  の責任を負わない.
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  $Id: arm64.h 714 2018-05-29 05:52:19Z saito $
     
    8267
    8368/*
    84  *  DAIFの設定および状æ
    85 ‹å‚ç
    86 §
     69 *  DAIFの設定および状態参照
    8770 */
    8871Inline uint32_t
     
    10083
    10184/*
    102  *  DAIF.F および DAIF.I のセット/クリア
     85 *  DAIF.F および DAIF.I のセット/クリア
    10386 */
    10487Inline void
     
    11396
    11497/*
    115  *  DAIF.I の状æ
    116 ‹å‚ç
    117 §
     98 *  DAIF.I の状態参照
    11899 */
    119100Inline bool_t
     
    135116
    136117/*
    137  *  DAIF.F の状æ
    138 ‹å‚ç
    139 §
     118 *  DAIF.F の状態参照
    140119 */
    141120Inline bool_t
  • ssp_aarch64/trunk/arm64_gcc/gic_config.c

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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 *      免責すること.
    4632 *
    47  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    48 ãŠ
    49  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    50  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    51  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    52  *  の責任を負わない.
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  $Id: gic_kernel_impl.c 714 2016-03-31 05:52:19Z ertl-hiro $
    5540 */
    5641/*
    57  *  GIC依存処理(ARM64用)
     42 *  GIC依存処理(ARM64用)
    5843 */
    5944#include "kernel_impl.h"
    6045
    6146/*
    62  *  CPUインタフェースの操作
     47 *  CPUインタフェースの操作
    6348 */
    6449
    6550/*
    66  *  CPUインタフェースの初期化
     51 *  CPUインタフェースの初期化
    6752 */
    6853void
     
    7055{
    7156        /*
    72          *  CPUインタフェースからプロセッサへの割込み信号送出を無効にする
     57         *  CPUインタフェースからプロセッサへの割込み信号送出を無効にする
    7358         */
    7459        sil_wrw_mem(GICC_CTLR, GICC_CTLR_DISABLE);
    7560
    7661        /*
    77          *  割込み優å
    78 ˆåº¦ãƒžã‚¹ã‚¯ã‚’最低優å
    79 ˆåº¦ã«è¨­å®š
     62         *  割込み優先度マスクを最低優先度に設定
    8063         */
    8164        gicc_set_priority((GIC_PRI_LEVEL - 1) << GIC_PRI_SHIFT);
    8265
    8366        /*
    84          *  割込み優å
    85 ˆåº¦ã®å
    86 ¨ãƒ“ット有効に
     67         *  割込み優先度の全ビット有効に
    8768         */
    8869        sil_wrw_mem(GICC_BPR, 0U);
    8970
    9071        /*
    91          *  アクティブな割込みがあれば,EOIによりクリアする
     72         *  アクティブな割込みがあれば,EOIによりクリアする
    9273         */
    9374        sil_wrw_mem(GICC_EOIR, sil_rew_mem(GICC_IAR));
    9475
    9576        /*
    96          *  CPUインタフェースをイネーブル
     77         *  CPUインタフェースをイネーブル
    9778         */
    9879        sil_wrw_mem(GICC_CTLR, GICC_CTLR_ENABLE);
     
    10081
    10182/*
    102  *  CPUインタフェースの終了処理
     83 *  CPUインタフェースの終了処理
    10384 */
    10485void
     
    10990
    11091/*
    111  *  ディストリビュータの操作
     92 *  ディストリビュータの操作
    11293 */
    11394
    11495/*
    115  *  ディストリビュータの初期化
     96 *  ディストリビュータの初期化
    11697 */
    11798void
     
    121102
    122103        /*
    123          *  ディストリビュータを無効にして転送を停止
     104         *  ディストリビュータを無効にして転送を停止
    124105         */
    125106        sil_wrw_mem(GICD_CTLR, GICD_CTLR_DISABLE);
    126107
    127108        /*
    128          *  すべての割込みの転送を禁止
     109         *  すべての割込みの転送を禁止
    129110         */
    130111        for (i = 0; i < (GIC_TNUM_INTNO + 31) / 32; i++) {
     
    133114
    134115        /*
    135          *  すべての割込み割込み保留状æ
    136 ‹ã‚’クリア
     116         *  すべての割込み割込み保留状態をクリア
    137117         */
    138118        for (i = 0; i < (GIC_TNUM_INTNO + 31) / 32; i++) {
     
    141121
    142122        /*
    143          *  すべての割込みを最低優å
    144 ˆåº¦ã«è¨­å®š
     123         *  すべての割込みを最低優先度に設定
    145124         */
    146125        for (i = 0; i < (GIC_TNUM_INTNO + 3) / 4; i++){
     
    148127        }
    149128        /*
    150          *  すべてのå
    151 ±æœ‰ãƒšãƒªãƒ•ã‚§ãƒ©ãƒ«å‰²è¾¼ã¿ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’プロセッサ0に設定
     129         *  すべての共有ペリフェラル割込みのターゲットをプロセッサ0に設定
    152130         */
    153131        for (i = GIC_INTNO_SPI0 / 4; i < (GIC_TNUM_INTNO + 3) / 4; i++) {
     
    156134
    157135        /*
    158          *  すべてのペリフェラル割込みをレベルトリガに設定
     136         *  すべてのペリフェラル割込みをレベルトリガに設定
    159137         */
    160138        for (i = GIC_INTNO_PPI0 / 16; i < (GIC_TNUM_INTNO + 15) / 16; i++) {
     
    162140        }
    163141        /*
    164          *  ディストリビュータを有効にして優å
    165 ˆåº¦è¦å‰‡ã«ã‚ˆã‚‹å‰²è¾¼ã¿ã®è»¢é€ã‚’開始
     142         *  ディストリビュータを有効にして優先度規則による割込みの転送を開始
    166143         */
    167144        sil_wrw_mem(GICD_CTLR, GICD_CTLR_ENABLE);
     
    169146
    170147/*
    171  *  ディストリビュータの終了処理
     148 *  ディストリビュータの終了処理
    172149 */
    173150void
  • ssp_aarch64/trunk/arm64_gcc/gic_config.h

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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  *  の責任を負わない.
     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 *      免責すること.
     32 *
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  $Id: gic_config.h 714 2018-05-29 05:52:19Z saito $
     
    5641
    5742/*
    58  *              カーネルの割込みコントローラ依存部(GIC用)
    59  *
    60  *  このヘッダファイルは,target_config.h(または,そこからインクルード
    61  *  されるファイル)のみからインクルードされる.
    62  *  他のファイルから直接インクルードしてはならない.
     43 *              カーネルの割込みコントローラ依存部(GIC用)
     44 *
     45 *  このヘッダファイルは,target_config.h(または,そこからインクルード
     46 *  されるファイル)のみからインクルードされる.
     47 *  他のファイルから直接インクルードしてはならない.
    6348 */
    6449
     
    7055
    7156/*
    72  *  割込み番号の定義
     57 *  割込み番号の定義
    7358 */
    7459#define GIC_INTNO_PPI0          16U
     
    7661
    7762/*
    78  *  割込み優å
    79 ˆåº¦ã®æ“ä½œ
    80  *
    81  *  割込み優å
    82 ˆåº¦ã®å†
    83 éƒ¨è¡¨ç¾ã¯ï¼Œuint_t型で表し,0が最高優å
    84 ˆåº¦ã§ï¼Œå€¤ãŒå¤§ã
    85  *  いほど優å
    86 ˆåº¦ãŒä¸‹ãŒã‚‹ã‚‚のとする.GICのレジスタ構成と整合させるために,
    87  *  優å
    88 ˆåº¦ã®æ®µæ•°ãŒ256段階の時にあわせて表す.
     63 *  割込み優先度の操作
     64 *
     65 *  割込み優先度の内部表現は,uint_t型で表し,0が最高優先度で,値が大き
     66 *  いほど優先度が下がるものとする.GICのレジスタ構成と整合させるために,
     67 *  優先度の段数が256段階の時にあわせて表す.
    8968 */
    9069#define GIC_PRI_LEVEL           (TMAX_INTPRI - TMIN_INTPRI + 2)
     
    10988#endif /* GIC_PRI_LEVEL == 16 */
    11089
    111 /* 外部表現への変換 */
     90/* 外部表現への変換 */
    11291#define EXT_IPM(pri) \
    11392                        (((PRI)((pri) >> GIC_PRI_SHIFT)) - (GIC_PRI_LEVEL - 1))
    11493
    115 /* å†
    116 éƒ¨è¡¨ç¾ã¸ã®å¤‰æ› */
     94/* 内部表現への変換 */
    11795#define INT_IPM(ipm) \
    11896                        (((uint_t)((ipm) + (GIC_PRI_LEVEL - 1))) << GIC_PRI_SHIFT)
    11997
    12098/*
    121  *  GICレジスタのアドレスを定義するためのマクロ
    122  *
    123  *  GICレジスタのアドレスを,アセンブリ言語からも参ç
    124 §ã§ãã‚‹ã‚ˆã†ã«ã™ã‚‹ãŸ
    125  *  めのマクロ.
     99 *  GICレジスタのアドレスを定義するためのマクロ
     100 *
     101 *  GICレジスタのアドレスを,アセンブリ言語からも参照できるようにするた
     102 *  めのマクロ.
    126103 */
    127104#ifndef GIC_REG
     
    130107
    131108/*
    132  *  CPUインタフェース関連の定義
     109 *  CPUインタフェース関連の定義
    133110 */
    134111#define GICC_CTLR               GIC_REG(GICC_BASE, 0x00)
     
    141118
    142119/*
    143  *  CPUインタフェース制御レジスタ(GICC_CTLR)の設定値
    144  *  (GICv1でセキュリティ拡張がない場合)
     120 *  CPUインタフェース制御レジスタ(GICC_CTLR)の設定値
     121 *  (GICv1でセキュリティ拡張がない場合)
    145122 */
    146123#define GICC_CTLR_DISABLE               UINT_C(0x00)
     
    148125
    149126/*
    150  *  ディストリビュータ関連の定義
     127 *  ディストリビュータ関連の定義
    151128 */
    152129#define GICD_CTLR               GIC_REG(GICD_BASE, 0x000)
     
    169146
    170147/*
    171  *  ディストリビュータ制御レジスタ(GICD_CTLR)の設定値
     148 *  ディストリビュータ制御レジスタ(GICD_CTLR)の設定値
    172149 */
    173150#define GICD_CTLR_DISABLE       UINT_C(0x00)
     
    175152
    176153/*
    177  *  割込みコンフィギュレーションレジスタ(GICD_ICFGRn)の設定値
     154 *  割込みコンフィギュレーションレジスタ(GICD_ICFGRn)の設定値
    178155 */
    179156#define GICD_ICFGRn_LEVEL       UINT_C(0x00)
     
    183160
    184161/*
    185  *  CPUインタフェースの操作
    186  */
    187 
    188 /*
    189  *  割込み優å
    190 ˆåº¦ãƒžã‚¹ã‚¯ã‚’設定(priはå†
    191 éƒ¨è¡¨ç¾ï¼‰
     162 *  CPUインタフェースの操作
     163 */
     164
     165/*
     166 *  割込み優先度マスクを設定(priは内部表現)
    192167 */
    193168Inline void
     
    198173
    199174/*
    200  *  割込み優å
    201 ˆåº¦ãƒžã‚¹ã‚¯ã‚’取得(å†
    202 éƒ¨è¡¨ç¾ã§è¿”す)
     175 *  割込み優先度マスクを取得(内部表現で返す)
    203176 */
    204177Inline uint_t
     
    209182
    210183/*
    211  *  CPUインタフェースの初期化
     184 *  CPUインタフェースの初期化
    212185 */
    213186extern void gicc_initialize(void);
    214187
    215188/*
    216  *  CPUインタフェースの終了
     189 *  CPUインタフェースの終了
    217190 */
    218191extern void gicc_terminate(void);
    219192
    220193/*
    221  *  ディストリビュータの操作
    222  */
    223 
    224 /*
    225  *  割込み禁止(割込みイネーブルのクリア)
     194 *  ディストリビュータの操作
     195 */
     196
     197/*
     198 *  割込み禁止(割込みイネーブルのクリア)
    226199 */
    227200Inline void
     
    232205
    233206/*
    234  *  割込み許可(割込みイネーブルのセット)
     207 *  割込み許可(割込みイネーブルのセット)
    235208 */
    236209Inline void
     
    241214
    242215/*
    243  *  割込みペンディングのクリア
     216 *  割込みペンディングのクリア
    244217 */
    245218Inline void
     
    250223
    251224/*
    252  *  割込みペンディングのセット
     225 *  割込みペンディングのセット
    253226 */
    254227Inline void
     
    259232
    260233/*
    261  *  割込みペンディングのチェック
     234 *  割込みペンディングのチェック
    262235 */
    263236Inline bool_t
     
    268241
    269242/*
    270  *  割込みのコンフィグレーション
     243 *  割込みのコンフィグレーション
    271244 */
    272245Inline void
     
    283256
    284257/*
    285  *  割込み要求ラインに対する割込み優å
    286 ˆåº¦ã®è¨­å®šï¼ˆpriはå†
    287 éƒ¨è¡¨ç¾ï¼‰
     258 *  割込み要求ラインに対する割込み優先度の設定(priは内部表現)
    288259 */
    289260Inline void
     
    300271
    301272/*
    302  *  割込みターゲットプロセッサの設定
    303  *
    304  *  prcsは,ターゲットとするプロセッサを表すビットのビット毎論理和で指
    305  *  定する.
    306  *              プロセッサ0 : 0x01
    307  *              プロセッサ1 : 0x02
    308  *              プロセッサ2 : 0x04
    309  *              プロセッサ3 : 0x08
     273 *  割込みターゲットプロセッサの設定
     274 *
     275 *  prcsは,ターゲットとするプロセッサを表すビットのビット毎論理和で指
     276 *  定する.
     277 *              プロセッサ0 : 0x01
     278 *              プロセッサ1 : 0x02
     279 *              プロセッサ2 : 0x04
     280 *              プロセッサ3 : 0x08
    310281 */
    311282Inline void
     
    322293
    323294/*
    324  *  ディストリビュータの初期化
     295 *  ディストリビュータの初期化
    325296 */
    326297extern void gicd_initialize(void);
    327298
    328299/*
    329  *  ディストリビュータの終了
     300 *  ディストリビュータの終了
    330301 */
    331302extern void gicd_terminate(void);
    332303
    333304/*
    334  *  例外å
    335 ¥å£ã®GIC操作(gic_support.S)
     305 *  例外入口のGIC操作(gic_support.S)
    336306 */
    337307extern void gic_exc_entry(void);
    338308
    339309/*
    340  *  割込みå
    341 ¥å£ã®GIC操作(gic_support.S)
     310 *  割込み入口のGIC操作(gic_support.S)
    342311 */
    343312extern void gic_int_entry(void);
  • ssp_aarch64/trunk/arm64_gcc/gic_support.S

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    66 *             Nagoya Municipal Industrial Research Institute, JAPAN
    77 *
    8  *  上記著作権è€
    9 ã¯ï¼Œä»¥ä¸‹ã®(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
    10  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
    11  *  変・再é
    12 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    13  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    14  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    15  *      スコード中に含まれていること.
    16  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    17  *      用できる形で再é
    18 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    19 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    20  *      è€
    21 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    22  *      の無保証規定を掲載すること.
    23  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    24  *      用できない形で再é
    25 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    26  *      と.
    27  *    (a) 再é
    28 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    29 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    30  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    31  *    (b) 再é
    32 å¸ƒã®å½¢æ
    33 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    34  *        報告すること.
    35  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    36  *      害からも,上記著作権è€
    37 ãŠã‚ˆã³TOPPERSプロジェクトをå
    38 è²¬ã™ã‚‹ã“と.
    39  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
    40  *      由に基づく請求からも,上記著作権è€
    41 ãŠã‚ˆã³TOPPERSプロジェクトを
    42  *      å
    43 è²¬ã™ã‚‹ã“と.
     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 *      免責すること.
    4430 *
    45  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    46 ãŠ
    47  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    48  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    49  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    50  *  の責任を負わない.
     31 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     33 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     34 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     35 *  の責任を負わない.
    5136 *
    5237 */
    5338
    5439/*
    55  *  プロセッサ依存モジュール アセンブリ言語部(GIC)
     40 *  プロセッサ依存モジュール アセンブリ言語部(GIC)
    5641 */
    5742
    5843#define TOPPERS_MACRO_ONLY
    59 #define UINT_C(val)     (val)           /* uint_t型の定数を作るマクロ */
    60 #define ULONG_C(val)    (val)           /* ulong_t型の定数を作るマクロ */
    61 #define CAST(type, val) (val)           /* 型キャストを行うマクロ */
     44#define UINT_C(val)     (val)           /* uint_t型の定数を作るマクロ */
     45#define ULONG_C(val)    (val)           /* ulong_t型の定数を作るマクロ */
     46#define CAST(type, val) (val)           /* 型キャストを行うマクロ */
    6247
    6348#define GIC_REG(base, offset)   ((base) + (offset))
     
    6651
    6752/*
    68  *  例外å
    69 ¥å£ã®GIC操作
    70  *    x22: 例外番号(0..7)
     53 *  例外入口のGIC操作
     54 *    x22: 例外番号(0..7)
    7155 */
    7256    .text
     
    7458    .global gic_exc_entry
    7559gic_exc_entry:
    76     mov    x0, sp             // 割込み優å
    77 ˆåº¦ãƒžã‚¹ã‚¯ã®ä¿å­˜
     60    mov    x0, sp             // 割込み優先度マスクの保存
    7861    ldr    x9, =GICC_PMR
    7962    ldr    x9, [x9]
    8063    str    x9, [x0, #0]
    8164
    82     str    x22, [x0, #8]      // 例外番号の保存
     65    str    x22, [x0, #8]      // 例外番号の保存
    8366
    84     mov    x1, x22            // 引数をセットして call_exc_handler 呼び出し
     67    mov    x1, x22            // 引数をセットして call_exc_handler 呼び出し
    8568    ldr    x30, =gic_ret_int
    8669    b      call_exc_handler
    8770
    8871/*
    89  *  割込みå
    90 ¥å£ã®GIC操作
     72 *  割込み入口のGIC操作
    9173 */
    9274    .text
     
    9678    mov    x0,    sp
    9779    /*
    98      * 割込みコントローラ操作
     80     * 割込みコントローラ操作
    9981     */
    100     ldr    x9, =GICC_IAR      //  割込み要因を保存
     82    ldr    x9, =GICC_IAR      //  割込み要因を保存
    10183    ldr    w9, [x9]
    10284    str    w9, [x0, #8]
    10385
    104     ldr    x10, =GICC_RPR     //  割込み要因の優å
    105 ˆåº¦ã‚’割込み優å
    106 ˆåº¦ãƒžã‚¹ã‚¯ã«ã‚»ãƒƒãƒˆ
     86    ldr    x10, =GICC_RPR     //  割込み要因の優先度を割込み優先度マスクにセット
    10787    ldr    w10, [x10]
    10888
    10989    ldr    x11, =GICC_PMR
    110     ldr    w12, [x11]         //  割込み発生前のマスクの値を取り出しておく
     90    ldr    w12, [x11]         //  割込み発生前のマスクの値を取り出しておく
    11191    str    w10, [x11]
    11292
    113     dsb    sy                 // 割込み優å
    114 ˆåº¦ãƒžã‚¹ã‚¯ãŒã‚»ãƒƒãƒˆã•ã‚Œã‚‹ã®ã‚’å¾
    115 ã¤
     93    dsb    sy                 // 割込み優先度マスクがセットされるのを待つ
    11694
    117     str    w12, [x0, #0]      //  割込み発生前の優å
    118 ˆåº¦ãƒžã‚¹ã‚¯ã‚’保存
    119     ldr    x11, =GICC_EOIR    //  EOIの発行
     95    str    w12, [x0, #0]      //  割込み発生前の優先度マスクを保存
     96    ldr    x11, =GICC_EOIR    //  EOIの発行
    12097    str    w9, [x11]
    12198
    122     mov    w0, w9             // 引数をセットして call_int_handler 呼び出し
     99    mov    w0, w9             // 引数をセットして call_int_handler 呼び出し
    123100    ldr    x30, =gic_ret_int
    124101    b     call_int_handler
     
    126103
    127104/*
    128  *  割込み出口のGIC操作
     105 *  割込み出口のGIC操作
    129106 */
    130107    .text
     
    132109gic_ret_int:
    133110    mov    x0, sp
    134     ldr    w9, [x0, #0]       // 割込み優å
    135 ˆåº¦ãƒžã‚¹ã‚¯ã‚’å
    136 ƒã«æˆ»ã™
     111    ldr    w9, [x0, #0]       // 割込み優先度マスクを元に戻す
    137112    ldr    x10, =GICC_PMR
    138113    str    w9, [x10]
    139114
    140     dsb    sy                 // 割込み優å
    141 ˆåº¦ãƒžã‚¹ã‚¯ãŒã‚»ãƒƒãƒˆã•ã‚Œã‚‹ã®ã‚’å¾
    142 ã¤
     115    dsb    sy                 // 割込み優先度マスクがセットされるのを待つ
    143116
    144117    b      ret_int
  • ssp_aarch64/trunk/arm64_gcc/prc_cfg1_out.h

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    44
    55/*
    6  *              cfg1_out.cをリンクするためにå¿
    7 è¦ãªã‚¹ã‚¿ãƒ–の定義
     6 *              cfg1_out.cをリンクするために必要なスタブの定義
    87 */
    98
  • ssp_aarch64/trunk/arm64_gcc/prc_check.trb

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    11# -*- coding: utf-8 -*-
    22#
    3 #               ãƒ‘ス3の生成スクリプトのコア依存部(ARM用)
     3#               パス3の生成スクリプトのコア依存部(ARM用)
    44#
    55#  $Id: core_check.trb 730 2016-04-03 02:04:52Z ertl-hiro $
     
    77
    88#
    9 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆéžä¾å­˜éƒ¨ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰
     9ターゲット非依存部のインクルード
    1010#
    1111IncludeTrb("kernel/kernel_check.trb")
    1212
    1313#
    14 å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ†ãƒ¼ãƒ–ルに関するチェック
     14割込みハンドラテーブルに関するチェック
    1515#
    16 # DEF_INHで登録した割込みハンドラのみチェックする.逆に言うと,コンフィ
    17 # ギュレータで生成した割込みハンドラや,default_int_handlerのチェックは
    18 # 行わない.
     16# DEF_INHで登録した割込みハンドラのみチェックする.逆に言うと,コンフィ
     17# ギュレータで生成した割込みハンドラや,default_int_handlerのチェックは
     18# 行わない.
    1919#
    2020inhinib_entry = SYMBOL("_kernel_inhinib_entry")
     
    2222  inthdr = PEEK(inhinib_entry, $sizeof_FP)
    2323
    24   #     å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã®å
    25 ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯
     24  #     割込みハンドラの先頭番地のチェック
    2625  if (inthdr & ($CHECK_FUNC_ALIGN - 1)) != 0
    2726    error_wrong_id("E_PAR", params, :inthdr, :inhno, "not aligned")
     
    3534
    3635#
    37 #  CPU例外ハンドラテーブルに関するチェック
     36#  CPU例外ハンドラテーブルに関するチェック
    3837#
    39 # DEF_EXCで登録したCPU例外ハンドラのみチェックする.逆に言うと,
    40 # default_exc_handlerのチェックは行わない.
     38# DEF_EXCで登録したCPU例外ハンドラのみチェックする.逆に言うと,
     39# default_exc_handlerのチェックは行わない.
    4140#
    4241excinib_entry = SYMBOL("_kernel_excinib_entry")
     
    4443  exchdr = PEEK(excinib_entry, $sizeof_FP)
    4544
    46   # CPU例外ハンドラのå
    47 ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯
     45  # CPU例外ハンドラの先頭番地のチェック
    4846  if (exchdr & ($CHECK_FUNC_ALIGN - 1)) != 0
    4947    error_wrong_id("E_PAR", params, :exchdr, :excno, "not aligned")
  • ssp_aarch64/trunk/arm64_gcc/prc_config.c

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    99 *             Nagoya Municipal Industrial Research Institute, JAPAN
    1010 *
    11  *  上記著作権è€
    12 ã¯ï¼Œä»¥ä¸‹ã®(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
    13  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
    14  *  変・再é
    15 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    16  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    17  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    18  *      スコード中に含まれていること.
    19  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    20  *      用できる形で再é
    21 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    22 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    23  *      è€
    24 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    25  *      の無保証規定を掲載すること.
    26  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    27  *      用できない形で再é
    28 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    29  *      と.
    30  *    (a) 再é
    31 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    32 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    33  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    34  *    (b) 再é
    35 å¸ƒã®å½¢æ
    36 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    37  *        報告すること.
    38  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    39  *      害からも,上記著作権è€
    40 ãŠã‚ˆã³TOPPERSプロジェクトをå
    41 è²¬ã™ã‚‹ã“と.
    42  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
    43  *      由に基づく請求からも,上記著作権è€
    44 ãŠã‚ˆã³TOPPERSプロジェクトを
    45  *      å
    46 è²¬ã™ã‚‹ã“と.
    47  *
    48  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    49 ãŠ
    50  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    51  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    52  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    53  *  の責任を負わない.
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
     33 *
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    5439 *
    5540 *  @(#) $Id: prc_config.c 1304 2008-08-27 07:28:36Z ertl-honda $
     
    5742
    5843/*
    59  *              プロセッサ依存モジュール(ARM64用)
     44 *              プロセッサ依存モジュール(ARM64用)
    6045 */
    6146
     
    6348#include <t_syslog.h>
    6449
    65 /* 割込みネスト数の管理 */
     50/* 割込みネスト数の管理 */
    6651uint8_t intnest;
    6752
    6853/*
    69  *  プロセッサ依存の初期化
     54 *  プロセッサ依存の初期化
    7055 */
    7156void
    7257prc_initialize(void)
    7358{
    74         /* 割込みネスト数の初期化 */
     59        /* 割込みネスト数の初期化 */
    7560        intnest = 0u;
    7661
    7762        /*
    78          *  GICの設定
     63         *  GICの設定
    7964         */
    8065        gicd_initialize();
     
    8368
    8469/*
    85  *  プロセッサ依存の終了処理
     70 *  プロセッサ依存の終了処理
    8671 */
    8772void
     
    9378
    9479/*
    95  *  割込み要求ライン属性の設定
     80 *  割込み要求ライン属性の設定
    9681 */
    9782void
     
    10287
    10388        /*
    104          *  割込みを禁止
     89         *  割込みを禁止
    10590         *
    106          *  割込みを受け付けたまま,レベルトリガ/エッジトリガの設定や,割
    107          *  込み優å
    108 ˆåº¦ã®è¨­å®šã‚’行うのは危険なため,割込み属性にかかわらず,
    109          *  一旦マスクする.
     91         *  割込みを受け付けたまま,レベルトリガ/エッジトリガの設定や,割
     92         *  込み優先度の設定を行うのは危険なため,割込み属性にかかわらず,
     93         *  一旦マスクする.
    11094         */
    11195        x_disable_int(intno);
    11296
    11397        /*
    114          *  割込みをコンフィギュレーション
     98         *  割込みをコンフィギュレーション
    11599         */
    116100
     
    124108
    125109        /*
    126          *  割込み優å
    127 ˆåº¦ã¨ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ—ロセッサを設定
     110         *  割込み優先度とターゲットプロセッサを設定
    128111         */
    129112        gicd_set_priority(intno, INT_IPM(intpri));
     
    131114
    132115        /*
    133          * 割込みを許可
     116         * 割込みを許可
    134117         */
    135118        if ((intatr & TA_ENAINT) != 0U) {
     
    140123#ifndef OMIT_DEFAULT_EXC_HANDLER
    141124/*
    142  *  登録されていない例外が発生すると呼び出される
     125 *  登録されていない例外が発生すると呼び出される
    143126 */
    144127void
     
    147130    uint64_t gicc_pmr = *(((uint64_t*)p_excinf) + 0);
    148131    uint64_t excno    = *(((uint64_t*)p_excinf) + 1);
    149     // スタックポインタの調整量
     132    // スタックポインタの調整量
    150133    uint64_t adj      = *(((uint64_t*)p_excinf) + 3) >> 3;
    151134    uint64_t esr, pc, spsr, sp;
     
    169152#ifndef OMIT_DEFAULT_INT_HANDLER
    170153/*
    171  *  未登録の割込みが発生した場合に呼び出される
     154 *  未登録の割込みが発生した場合に呼び出される
    172155 */
    173156void
     
    181164
    182165/*
    183  *  割込みハンドラの呼び出し
     166 *  割込みハンドラの呼び出し
    184167 */
    185168void
     
    190173    i_unlock_cpu();
    191174
    192     // ハンドラの呼び出し
     175    // ハンドラの呼び出し
    193176    inh_table[intno]();
    194177
     
    199182
    200183/*
    201  *  CPU例外ハンドラの呼び出し
     184 *  CPU例外ハンドラの呼び出し
    202185 */
    203186void
     
    206189    intnest++;
    207190
    208     // CPU例外発生時はCPUロックフラグを操作しない
    209 
    210     // ハンドラの呼び出し
     191    // CPU例外発生時はCPUロックフラグを操作しない
     192
     193    // ハンドラの呼び出し
    211194    exc_table[excno](p_excinf);
    212195
  • ssp_aarch64/trunk/arm64_gcc/prc_config.h

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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  *  の責任を負わない.
     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 *      免責すること.
     32 *
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  @(#) $Id: prc_config.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    5641
    5742/*
    58  *              プロセッサ依存モジュール(ARM64用)
    59  *
    60  *  このインクルードファイルは,target_config.h(または,そこからインク
    61  *  ルードされるファイル)のみからインクルードされる.他のファイルから
    62  *  直接インクルードしてはならない.
     43 *              プロセッサ依存モジュール(ARM64用)
     44 *
     45 *  このインクルードファイルは,target_config.h(または,そこからインク
     46 *  ルードされるファイル)のみからインクルードされる.他のファイルから
     47 *  直接インクルードしてはならない.
    6348 */
    6449
     
    7156
    7257/*
    73  *  非タスクコンテキスト用のスタック初期値
     58 *  非タスクコンテキスト用のスタック初期値
    7459 */
    7560#define TOPPERS_ISTKPT(istk, istksz) ((STK_T *)((char *)(istk) + (istksz)))
    7661
    7762/*
    78  *  割込みネスト数
     63 *  割込みネスト数
    7964 */
    8065extern uint8_t intnest;
    8166
    8267/*
    83  *  コンテキストの参ç
    84 §
     68 *  コンテキストの参照
    8569 *
    8670 */
     
    10387
    10488/*
    105  *  TOPPERS標準割込み処理モデルの実現
    106  *
    107  *  å
    108 ¨å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯ãƒ•ãƒ©ã‚°ã¨ã—て PSTATE.F および PSTATE.I を用いる
    109  *  CPUロックフラグとして PSTATE.I を用いる
    110  *  割込み優å
    111 ˆåº¦ãƒžã‚¹ã‚¯ã¨ã—て GICC_PMR レジスタを用いる.
    112  */
    113 
    114 /*
    115  *  TIPM_ENAALL(割込み優å
    116 ˆåº¦ãƒžã‚¹ã‚¯å
    117 ¨è§£é™¤ï¼‰ã®å†
    118 éƒ¨è¡¨ç¾
     89 *  TOPPERS標準割込み処理モデルの実現
     90 *
     91 *  全割込みロックフラグとして PSTATE.F および PSTATE.I を用いる
     92 *  CPUロックフラグとして PSTATE.I を用いる
     93 *  割込み優先度マスクとして GICC_PMR レジスタを用いる.
     94 */
     95
     96/*
     97 *  TIPM_ENAALL(割込み優先度マスク全解除)の内部表現
    11998 */
    12099#define IIPM_ENAALL  (0)
     
    124103
    125104/*
    126  *  CPUロック状æ
    127 ‹ã¸ã®ç§»è¡Œ
     105 *  CPUロック状態への移行
    128106 */
    129107Inline void
     
    137115
    138116/*
    139  *  CPUロック状æ
    140 ‹ã®è§£é™¤
     117 *  CPUロック状態の解除
    141118 */
    142119Inline void
     
    150127
    151128/*
    152  *  CPUロック状æ
    153 ‹ã®å‚ç
    154 §
     129 *  CPUロック状態の参照
    155130 */
    156131Inline bool_t
     
    174149
    175150/*
    176  * (モデル上の)割込み優å
    177 ˆåº¦ãƒžã‚¹ã‚¯ã®è¨­å®š
    178  *
    179  *  CPUロックフラグがクリアされている時は,ハードウェアの割込み優å
    180 ˆåº¦ãƒž
    181  *  スクを設定する.CPUロックフラグがセットされている時は,saved_iipm
    182  *  を設定し,さらに,ハードウェアの割込み優å
    183 ˆåº¦ãƒžã‚¹ã‚¯ã‚’,設定しようと
    184  *  した(モデル上の)割込み優å
    185 ˆåº¦ãƒžã‚¹ã‚¯ã¨TIPM_LOCKの高い方に設定する.
     151 * (モデル上の)割込み優先度マスクの設定
     152 *
     153 *  CPUロックフラグがクリアされている時は,ハードウェアの割込み優先度マ
     154 *  スクを設定する.CPUロックフラグがセットされている時は,saved_iipm
     155 *  を設定し,さらに,ハードウェアの割込み優先度マスクを,設定しようと
     156 *  した(モデル上の)割込み優先度マスクとTIPM_LOCKの高い方に設定する.
    186157 */
    187158Inline void
     
    195166
    196167/*
    197  * (モデル上の)割込み優å
    198 ˆåº¦ãƒžã‚¹ã‚¯ã®å‚ç
    199 §
    200  *
    201  *  CPUロックフラグがクリアされている時はハードウェアの割込み優å
    202 ˆåº¦ãƒž
    203  *  スクを,セットされている時はsaved_iipmを参ç
    204 §ã™ã‚‹ï¼Ž
     168 * (モデル上の)割込み優先度マスクの参照
     169 *
     170 *  CPUロックフラグがクリアされている時はハードウェアの割込み優先度マ
     171 *  スクを,セットされている時はsaved_iipmを参照する.
    205172 */
    206173Inline PRI
     
    214181
    215182/*
    216  *  ディスパッチャの動作開始(prc_support.S)
    217  *
    218  *  start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込
    219  *  みを禁止した状æ
    220 ‹ï¼ˆå‰²è¾¼ã¿ãƒ­ãƒƒã‚¯çŠ¶æ
    221 ‹ã¨åŒç­‰ã®çŠ¶æ
    222 ‹ï¼‰ã§å‘¼ã³å‡ºã•ãªã‘れば
    223  *  ならない.
     183 *  ディスパッチャの動作開始(prc_support.S)
     184 *
     185 *  start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込
     186 *  みを禁止した状態(割込みロック状態と同等の状態)で呼び出さなければ
     187 *  ならない.
    224188 */
    225189extern void start_dispatch(void) NoReturn;
     
    227191
    228192/*
    229  *  カーネルの終了処理の呼出し(prc_support.S)
    230  *
    231  *  call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク
    232  *  コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出
    233  *  す.
     193 *  カーネルの終了処理の呼出し(prc_support.S)
     194 *
     195 *  call_exit_kernelは,カーネルの終了時に呼び出すべきもので,非タスク
     196 *  コンテキストに切り換えて,カーネルの終了処理(exit_kernel)を呼び出
     197 *  す.
    234198 */
    235199extern void call_exit_kernel(void) NoReturn;
    236200
    237201/*
    238  *  アイドルループの実è£
    239 
    240  *
    241  *  単にCPUロック状æ
    242 ‹ã¨CPUロック解除状æ
    243 ‹ã‚’呼び出す実è£
    244 ã¨ã™ã‚‹ï¼Ž
    245  *  スリープモードにå
    246 ¥ã‚Œã‚‹å ´åˆã¯æœ¬å‡¦ç†ã‚’wfi命令を用いて書き換えれば良い.
     202 *  アイドルループの実装
     203 *
     204 *  単にCPUロック状態とCPUロック解除状態を呼び出す実装とする.
     205 *  スリープモードに入れる場合は本処理をwfi命令を用いて書き換えれば良い.
    247206 */
    248207Inline void
     
    250209{
    251210    x_unlock_cpu();
    252     /* CPUアンロック => CPUロック  */
     211    /* CPUアンロック => CPUロック  */
    253212    x_lock_cpu();
    254213}
    255214
    256215/*
    257  *  割込み番号・割込みハンドラ番号
    258  *
    259  *  割込みハンドラ番号(inhno)と割込み番号(intno)は,
    260  *  割り込み発生時にGICC_IAR に設定される例外番号とする.
    261  */
    262 
    263 /*
    264  *  割込み番号の範囲の判定
     216 *  割込み番号・割込みハンドラ番号
     217 *
     218 *  割込みハンドラ番号(inhno)と割込み番号(intno)は,
     219 *  割り込み発生時にGICC_IAR に設定される例外番号とする.
     220 */
     221
     222/*
     223 *  割込み番号の範囲の判定
    265224 */
    266225#define VALID_INTNO(intno)           ((TMIN_INTNO <= (intno)) && ((intno) <= TMAX_INTNO))
     
    269228
    270229/*
    271  *  割込みハンドラの設定
     230 *  割込みハンドラの設定
    272231 */
    273232Inline void
     
    277236
    278237/*
    279  *  割込みハンドラの出å
    280 ¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
     238 *  割込みハンドラの出入口処理の生成マクロ
    281239 *
    282240 */
     
    285243
    286244/*
    287  *  割込み要求禁止フラグ
    288  */
    289 
    290 /*
    291  *  割込み要求ライン設定テーブル(kernel_cfg.c)
    292  *
    293  *  割込み属性が設定されているかを判別するためのテーブル(kernel_cfg.c)
    294  *  割込み要求ラインに対して割込み属性が設定されていれば1,設定されてい
    295  *  なければ0を保持するテーブル.
     245 *  割込み要求禁止フラグ
     246 */
     247
     248/*
     249 *  割込み要求ライン設定テーブル(kernel_cfg.c)
     250 *
     251 *  割込み属性が設定されているかを判別するためのテーブル(kernel_cfg.c)
     252 *  割込み要求ラインに対して割込み属性が設定されていれば1,設定されてい
     253 *  なければ0を保持するテーブル.
    296254 */
    297255extern const uint8_t intcfg_table[];
     
    299257
    300258/*
    301  *  割込み要求禁止フラグのセット
    302  *
    303  *  intnoで指定された割込み要求ラインに対する割込み要求禁止フラグのセッ
    304  *  トし,割込みを禁止する.割込み属性が設定されていない割込み要求ライ
    305  *  ンが指定された場合には,falseを返す.
     259 *  割込み要求禁止フラグのセット
     260 *
     261 *  intnoで指定された割込み要求ラインに対する割込み要求禁止フラグのセッ
     262 *  トし,割込みを禁止する.割込み属性が設定されていない割込み要求ライ
     263 *  ンが指定された場合には,falseを返す.
    306264 */
    307265Inline bool_t
     
    320278
    321279/*
    322  *  割込み要求禁止フラグのクリア
    323  *
    324  *  intnoで指定された割込み要求ラインに対する割込み要求禁止フラグのクリ
    325  *  アし,割込みを許可する.割込み属性が設定されていない割込み要求ライ
    326  *  ンが指定された場合には,falseを返す.
     280 *  割込み要求禁止フラグのクリア
     281 *
     282 *  intnoで指定された割込み要求ラインに対する割込み要求禁止フラグのクリ
     283 *  アし,割込みを許可する.割込み属性が設定されていない割込み要求ライ
     284 *  ンが指定された場合には,falseを返す.
    327285 */
    328286Inline bool_t
     
    341299
    342300/*
    343  *  割込み要求のクリア
     301 *  割込み要求のクリア
    344302 */
    345303Inline void
     
    350308
    351309/*
    352  *  割込み要求のチェック
     310 *  割込み要求のチェック
    353311 */
    354312Inline bool_t
     
    360318
    361319/*
    362  *  割込み要求ラインの属性の設定
     320 *  割込み要求ラインの属性の設定
    363321 */
    364322extern void x_config_int(INTNO intno, ATR intatr, PRI intpri);
    365323
    366324/*
    367  *  割込みハンドラå
    368 ¥å£ã§å¿
    369 è¦ãªIRC操作
     325 *  割込みハンドラ入口で必要なIRC操作
    370326 */
    371327Inline void
     
    375331
    376332/*
    377  *  割込みハンドラの出口でå¿
    378 è¦ãªIRC操作
     333 *  割込みハンドラの出口で必要なIRC操作
    379334 */
    380335Inline void
     
    384339
    385340/*
    386  *  CPU例外ハンドラ関連
    387  */
    388 
    389 /*
    390  *  CPU例外ハンドラ番号
     341 *  CPU例外ハンドラ関連
     342 */
     343
     344/*
     345 *  CPU例外ハンドラ番号
    391346 */
    392347#define VALID_EXCNO_DEFEXC(excno)    (TMIN_EXCNO <= (excno) && (excno) <= TMAX_EXCNO)
    393348
    394349/*
    395  *  CPU例外ハンドラの設定
     350 *  CPU例外ハンドラの設定
    396351 */
    397352Inline void
     
    401356
    402357/*
    403  *  CPU例外ハンドラのå
    404 ¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
     358 *  CPU例外ハンドラの入口処理の生成マクロ
    405359 */
    406360#define EXC_ENTRY(excno, exchdr)    exchdr
     
    408362
    409363/*
    410  *  プロセッサ依存の初期化
     364 *  プロセッサ依存の初期化
    411365 */
    412366extern void prc_initialize(void);
    413367
    414368/*
    415  *  プロセッサ依存の終了時処理
     369 *  プロセッサ依存の終了時処理
    416370 */
    417371extern void prc_terminate(void) NoReturn;
    418372
    419373/*
    420  * 登録されていない例外が発生すると呼び出される
     374 * 登録されていない例外が発生すると呼び出される
    421375 */
    422376extern void default_exc_handler(void *p_excinf);
    423377
    424378/*
    425  * 未登録の割込みが発生した場合に呼び出される
     379 * 未登録の割込みが発生した場合に呼び出される
    426380 */
    427381extern void default_int_handler(void);
    428382
    429383/*
    430  *  割込み/例外ハンドラテーブル(kernel_cfg.c)
     384 *  割込み/例外ハンドラテーブル(kernel_cfg.c)
    431385 */
    432386extern const INTHDR inh_table[];
     
    434388
    435389/*
    436  *  割込みハンドラの呼び出し
     390 *  割込みハンドラの呼び出し
    437391 */
    438392extern void call_int_handler(uint32_t intno);
    439393
    440394/*
    441  *  CPU例外ハンドラの呼び出し
     395 *  CPU例外ハンドラの呼び出し
    442396 */
    443397extern void call_exc_handler(void *p_excinf, uint32_t excno);
  • ssp_aarch64/trunk/arm64_gcc/prc_design.txt

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    11=====================================================================
    2                          ARM64プロセッサ依存部設計メモ
     2                         ARM64プロセッサ依存部設計メモ
    33                                  Last Modified: 5 Jun 2018
    44=====================================================================
    55
    6 â—‹ã“のドキュメントの位置づけ
    7 
    8 ã“のドキュメントは,TOPPERS/SSPカーネルをARMv8-Aプロセッサに移植する際
    9 ã®è¨­è¨ˆãƒ¡ãƒ¢ã§ã‚る.
    10 
    11 
    12 â—‹ARMv8-Aの仕様まとめ
    13 
    14 ARMv8-Aの仕様のうち,カーネルの設計に関係する事é 
    15 ã«ã¤ã„てまとめる.
    16 
    17 â—ãƒ¬ã‚¸ã‚¹ã‚¿
    18 
    19 æ±Žç”¨ãƒ¬ã‚¸ã‚¹ã‚¿ã¯r0〜r30 (特に64ビットレジスタはX0..X30で表現)の31種類からなる.
    20 ï¼ˆå‚考)「Procedure Call Standard for the ARM 64-bit Architecture」
    21 
    22 r0...r7    Parameter/result registers(引数および返値の受け渡し用)
    23 r8         Indirect result location register (大きなデータ構造を
    24            è¿”値として返す場合など,呼び出し側が結果を取り出すために
    25            é–“接アドレッシングを多用する際,そのベースアドレスを受け渡し
    26            ã™ã‚‹ãŸã‚ã«ä½¿ã‚ã‚Œã‚‹)
    27 r9..r15    Caller-saved Temporary registers(呼び出し側で保存すべきレジスタ)
     6○このドキュメントの位置づけ
     7
     8このドキュメントは,TOPPERS/SSPカーネルをARMv8-Aプロセッサに移植する際
     9の設計メモである.
     10
     11
     12○ARMv8-Aの仕様まとめ
     13
     14ARMv8-Aの仕様のうち,カーネルの設計に関係する事項についてまとめる.
     15
     16●レジスタ
     17
     18汎用レジスタはr0〜r30 (特に64ビットレジスタはX0..X30で表現)の31種類からなる.
     19(参考)「Procedure Call Standard for the ARM 64-bit Architecture」
     20
     21r0...r7    Parameter/result registers(引数および返値の受け渡し用)
     22r8         Indirect result location register (大きなデータ構造を
     23           返値として返す場合など,呼び出し側が結果を取り出すために
     24           間接アドレッシングを多用する際,そのベースアドレスを受け渡し
     25           するために使われる)
     26r9..r15    Caller-saved Temporary registers(呼び出し側で保存すべきレジスタ)
    2827r16(IP0)   The first intra-procedure-call scratch register
    29            ãƒªãƒ³ã‚«ã«ã‚ˆã£ã¦ veneer(注1) および PLT(Procedure Linkage Table,注2) コード
    30            ã®å‘¼ã³å‡ºã—で使われる.それ以外の時はテンポラリレジスタとして使われることもある.
    31            (注1)リンカによって挿å
    32 ¥ã•ã‚Œã‚‹å°ã•ãªã‚³ãƒ¼ãƒ‰ç‰‡ã§ï¼Œ
    33                 分岐命令のターゲットが範囲外の場合などに使われる
    34            (注2)å
    35 ±æœ‰ãƒ©ã‚¤ãƒ–ラリの呼び出しでシンボル解決を行うために使用される
    36                 関数テーブル
    37 r17(IP1)   The second intra-procedure-call temporary register(r16と役割は同じ)
    38 r18        The Platform Register(プラットフォームABIで使用されるレジスタ.
    39            ABIで使われない場合はテンポラリレジスタとして使われる)
    40 r19..r28   Callee-saved registers(呼び出された側で保存して使うレジスタ)
    41 r29(FP)    The Frame Pointer(フレームポインタ)
    42 r30(LR)    The Link Register(リンクレジスタ)
    43 
    44 SSPカーネルのアセンブラによる実è£
    45 ã§ã¯r8, r16...r18は使用していない.
    46 
    47 
    48 â—ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚³ãƒ³ãƒ™ãƒ³ã‚·ãƒ§ãƒ³
    49 
    50 r0...R7 が引数および返値に使われる.
    51 ARMにより規定されているため,コンパイラに依存せずこのルールとなる
    52 
    53 â—PSTATE
    54 
    55 AArch64ではプロセッサの状æ
    56 ‹ã‚’表すフラグの集まりをまとめてPSTATEと呼び,
    57 ãã‚Œãžã‚Œã®ãƒ•ãƒ©ã‚°ã¸åˆ¥ã€
    58 ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ç‰¹åˆ¥ãªãƒ¬ã‚¸ã‚¹ã‚¿åãŒå®šç¾©ã•ã‚Œã¦ã„る.
    59 
    60 PSTATEの詳細は,ARM Architecture Reference Manual
    61 ARMv8, for ARMv8-A architecture profile の D1.7 などを参ç
    62 §ã®ã“と.
    63 
    64 ãƒ»spsel
    65 EL1より上の例外レベルでは,spsel という特別な名称のレジスタにアクセスし,
    66 PSTATE.SPフラグの値をセットして使用スタックの切り替えを行う.
    67 
    68 ãƒ»daif
    69 daif という名称のレジスタを使用してPSTATEのD,A,I,Fビットを操作し,
    70 å„種例外および割込みの禁止/許可を制御する
    71 
    72 
    73 SSPカーネルの実è£
    74 ã§ã¯ï¼Œã‚¹ã‚¿ãƒƒã‚¯ã¯SP_EL1のみを使用する.
    75 ã¾ãŸï¼ŒCPUロック状æ
    76 ‹ãŠã‚ˆã³å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯çŠ¶æ
    77 ‹ã®å®Ÿè£
    78 ã«PSTATEのIおよびFフラグを
    79 åˆ©ç”¨ã—ている.
    80 
    81 
    82 â—å‰²è¾¼ã¿ãƒ™ã‚¯ã‚¿
    83 
    84 ãƒ™ã‚¯ã‚¿ãƒ†ãƒ¼ãƒ–ルのアドレスはリセット時に,システムレジスタの一つVector Base
    85 Address Register(VBAR, システムレジスタ)にアドレスをセットすることで,
    86 2048バイト境界の任意のアドレスにé
    87 ç½®å¯èƒ½ã§ã‚る.
    88 
    89 SSPカーネルの実è£
    90 ã§ã¯ã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒƒãƒ—ルーチンで設定している.
    91 
    92 
    93 â—å‰²è¾¼ã¿å„ªå
    94 ˆåº¦
    95 
    96 è¨­å®šå€¤ã®å°ã•ã„方が高優å
    97 ˆåº¦ã¨ãªã‚‹ï¼Ž
    98 
    99ʌ㻌
    100 ˆåº¦ã¯æœ€å¤§8bitであり,SoC毎に実è£
    101 ã•ã‚Œã¦ã„るビットå¹
    102 ãŒç•°ãªã‚‹ï¼Žå®Ÿè£
    103 ã•
    104 ã‚Œã‚‹ãƒ“ットが8bit以下の場合は,LSBから無効になる.例えば,実è£
    105 ã•ã‚Œã¦ã„
    106 ã‚‹ãƒ“ットå¹
    107 ãŒ7bitの場合は,ビット0が無効となる.
    108 
    109ʌ㻌
    110 ˆåº¦ã®ãƒ“ットフィールドのLSBから数ビットをサブ優å
    111 ˆåº¦ã¨å‘¼ã¶ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰
    112 ã«è¨­å®šã™ã‚‹ã“とが可能である.残りの上位ビットをプリエンプション優å
    113 ˆåº¦ã¨
    114 å‘¼ã¶ï¼Žãƒ—リエンプション優å
    115 ˆåº¦ãŒåŒã˜ã§ï¼Œã‚µãƒ–優å
    116 ˆåº¦ãŒç•°ãªã‚‹å„ªå
    117 ˆåº¦ã®ã‚°ãƒ«ãƒ¼
    118 ãƒ—は,お互いをプリエンプトすることができない.
    119 
    120 ä¾‹ã¨ã—て,QEMU Virtボード向けSSPの実è£
    121 ã§ã¯ Cortex-A53プロセッサを
    122 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¨ã—ており,優å
    123 ˆåº¦ã¯16段階(4bit)でビット0から3が無効である.
    124 
    125 â—CPUモード
    126 
    127 ãƒ—ロセッサは,EL0からEL3までの例外レベルのいずれかで動作する.
    128 ã¾ãŸãã‚Œãžã‚Œã®ãƒ¬ãƒ™ãƒ«ã§64ビットモード(AArch64) または32ビットモード(AArch32)を
    129 é¸æŠžã™ã‚‹ã“とができる.ただし,ある例外レベルが32ビットモードで動作する場合は
    130 ãã‚Œã‚ˆã‚Šä½Žã„例外レベルでは64ビットモードを選択することができない.
    131 
    132 ã¾ãŸï¼Œã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£æ‹¡å¼µæ©Ÿèƒ½ã‚’搭載するプロセッサではセキュアモードおよび
    133 éžã‚»ã‚­ãƒ¥ã‚¢ãƒ¢ãƒ¼ãƒ‰ã‚’選択することができる.
    134 
    135 SSPの実è£
    136 ã§ã¯ï¼Œ64ビットモード(AArch64),非セキュア,例外レベル1(EL1) で動作する.
    137 
    138 
    139 â—ãƒªã‚»ãƒƒãƒˆæ™‚の状æ
    140 ‹
    141 
    142 ãƒªã‚»ãƒƒãƒˆæ™‚はプロセッサチップがサポートする最大の例外レベルおよびそのレベルの
    143 ã‚¹ã‚¿ãƒƒã‚¯(SP_ELx)が有効となっている.
    144 
    145 ä¾‹ã¨ã—てQEMU向けVirtボード(Cortex-A53) では,既定でEL1が最大例外レベルのため
    146 ãƒªã‚»ãƒƒãƒˆç›´å¾Œã¯SP_EL1が有効となっている.
    147 
    148 â—å‰²è¾¼ã¿/例外の受付
    149 
    150 å‰²è¾¼ã¿ã‚’受け付けると受け付けた割込みの番号が,GICC_IARにセットされる.
    151 å‰²è¾¼ã¿ç•ªå·ã¯ã“のレジスタにセットされる値を使用する.
    152 
    153 ä¾‹å¤–番号は,例外発生時のプロセッサ状æ
    154 ‹ã«å¿œã˜ã¦æ±ºå®šã•ã‚Œã‚‹ï¼Œãƒ™ã‚¯ã‚¿ãƒ†ãƒ¼ãƒ–ル中の
    155 ã‚¸ãƒ£ãƒ³ãƒ—å
    156 ˆã‚ªãƒ•ã‚»ãƒƒãƒˆæ¯Žã«ç•°ãªã‚‹ç•ªå·ã‚’割り振ることにしている.
    157 
    158   例外発生時の状æ
    159 ‹             ä¾‹å¤–の種類      例外番号  例外ベクタå
    160 ˆé ­ã‹ã‚‰ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆ
     28           リンカによって veneer(注1) および PLT(Procedure Linkage Table,注2) コード
     29           の呼び出しで使われる.それ以外の時はテンポラリレジスタとして使われることもある.
     30           (注1)リンカによって挿入される小さなコード片で,
     31                分岐命令のターゲットが範囲外の場合などに使われる
     32           (注2)共有ライブラリの呼び出しでシンボル解決を行うために使用される
     33                関数テーブル
     34r17(IP1)   The second intra-procedure-call temporary register(r16と役割は同じ)
     35r18        The Platform Register(プラットフォームABIで使用されるレジスタ.
     36           ABIで使われない場合はテンポラリレジスタとして使われる)
     37r19..r28   Callee-saved registers(呼び出された側で保存して使うレジスタ)
     38r29(FP)    The Frame Pointer(フレームポインタ)
     39r30(LR)    The Link Register(リンクレジスタ)
     40
     41SSPカーネルのアセンブラによる実装ではr8, r16...r18は使用していない.
     42
     43
     44●コーリングコンベンション
     45
     46r0...R7 が引数および返値に使われる.
     47ARMにより規定されているため,コンパイラに依存せずこのルールとなる
     48
     49●PSTATE
     50
     51AArch64ではプロセッサの状態を表すフラグの集まりをまとめてPSTATEと呼び,
     52それぞれのフラグへ別々にアクセスするための特別なレジスタ名が定義されている.
     53
     54PSTATEの詳細は,ARM Architecture Reference Manual
     55ARMv8, for ARMv8-A architecture profile の D1.7 などを参照のこと.
     56
     57・spsel
     58EL1より上の例外レベルでは,spsel という特別な名称のレジスタにアクセスし,
     59PSTATE.SPフラグの値をセットして使用スタックの切り替えを行う.
     60
     61・daif
     62daif という名称のレジスタを使用してPSTATEのD,A,I,Fビットを操作し,
     63各種例外および割込みの禁止/許可を制御する
     64
     65
     66SSPカーネルの実装では,スタックはSP_EL1のみを使用する.
     67また,CPUロック状態および割込みロック状態の実装にPSTATEのIおよびFフラグを
     68利用している.
     69
     70
     71●割込みベクタ
     72
     73ベクタテーブルのアドレスはリセット時に,システムレジスタの一つVector Base
     74Address Register(VBAR, システムレジスタ)にアドレスをセットすることで,
     752048バイト境界の任意のアドレスに配置可能である.
     76
     77SSPカーネルの実装ではスタートアップルーチンで設定している.
     78
     79
     80●割込み優先度
     81
     82設定値の小さい方が高優先度となる.
     83
     84優先度は最大8bitであり,SoC毎に実装されているビット幅が異なる.実装さ
     85れるビットが8bit以下の場合は,LSBから無効になる.例えば,実装されてい
     86るビット幅が7bitの場合は,ビット0が無効となる.
     87
     88優先度のビットフィールドのLSBから数ビットをサブ優先度と呼ぶフィールド
     89に設定することが可能である.残りの上位ビットをプリエンプション優先度と
     90呼ぶ.プリエンプション優先度が同じで,サブ優先度が異なる優先度のグルー
     91プは,お互いをプリエンプトすることができない.
     92
     93例として,QEMU Virtボード向けSSPの実装では Cortex-A53プロセッサを
     94ターゲットとしており,優先度は16段階(4bit)でビット0から3が無効である.
     95
     96●CPUモード
     97
     98プロセッサは,EL0からEL3までの例外レベルのいずれかで動作する.
     99またそれぞれのレベルで64ビットモード(AArch64) または32ビットモード(AArch32)を
     100選択することができる.ただし,ある例外レベルが32ビットモードで動作する場合は
     101それより低い例外レベルでは64ビットモードを選択することができない.
     102
     103また,セキュリティ拡張機能を搭載するプロセッサではセキュアモードおよび
     104非セキュアモードを選択することができる.
     105
     106SSPの実装では,64ビットモード(AArch64),非セキュア,例外レベル1(EL1) で動作する.
     107
     108
     109●リセット時の状態
     110
     111リセット時はプロセッサチップがサポートする最大の例外レベルおよびそのレベルの
     112スタック(SP_ELx)が有効となっている.
     113
     114例としてQEMU向けVirtボード(Cortex-A53) では,既定でEL1が最大例外レベルのため
     115リセット直後はSP_EL1が有効となっている.
     116
     117●割込み/例外の受付
     118
     119割込みを受け付けると受け付けた割込みの番号が,GICC_IARにセットされる.
     120割込み番号はこのレジスタにセットされる値を使用する.
     121
     122例外番号は,例外発生時のプロセッサ状態に応じて決定される,ベクタテーブル中の
     123ジャンプ先オフセット毎に異なる番号を割り振ることにしている.
     124
     125  例外発生時の状態             例外の種類      例外番号  例外ベクタ先頭からのオフセット
    161126  AArch64, EL1t(EL1, SP_EL0)  Synchronous         0        0x0000
    162127  AArch64, EL1t(EL1, SP_EL0)  SError              1        0x0180
     
    168133  AArch32, EL0 (EL0, SP_EL0)  SError              7        0x0780
    169134
    170 å‰²è¾¼ã¿ã‚’受け付けた際,受け付けた割込みに設定された優å
    171 ˆåº¦ã‚ˆã‚Šä½Žã„割込みを
    172 ç¦æ­¢ã™ã‚‹ãŸã‚ï¼ŒGICC_RPRから取得した割込み要因の割込み優å
    173 ˆåº¦ã‚’ GICC_PMRへ
    174 ã‚»ãƒƒãƒˆã—ている.そしてハンドラ終了後に割込み発生前の割り込み優å
    175 ˆåº¦ã«æˆ»ã™ï¼Ž
    176 
    177 â— スタックポインタ(SP_EL0とSP_ELx)
    178 
    179 ã‚¹ã‚¿ãƒƒã‚¯ãƒã‚¤ãƒ³ã‚¿ã¯ï¼Œä¾‹å¤–レベル0のスタックポインタ(SP_EL0)および実行中の
    180 ä¾‹å¤–レベルのスタックポインタ(SP_ELx)が選択可能である.
    181 ã‚¹ã‚¿ãƒƒã‚¯ã®é¸æŠžã¯spselレジスタへ1を設定するとSP_ELxを,0を設定すると
    182 SP_EL0 を選択する.
    183 
    184 SSPの実è£
    185 ã§ã¯ï¼ŒEL1 で SP_EL1 のみを使用して動作する.
    186 
    187 â—ä¾‹å¤–レベルの遷移
    188 
    189 ä¾‹å¤–レベル(EL)の遷移は割込み/例外の受付および例外リターン命令(eret)により行う.
    190 
    191 å‰²è¾¼ã¿ãŠã‚ˆã³ä¾‹å¤–を受け付けることで発生前と同じまたはより高い例外レベルへ遷移する.
    192 ä¸€æ–¹ï¼ŒåŒã˜ã¾ãŸã¯ã‚ˆã‚Šä½Žã„例外レベルへの遷移は例外リターン命令(eret)により行う.
    193 
    194 å—付時の遷移å
    195 ˆã¨ãªã‚‹ä¾‹å¤–レベルの指定はシステムレジスタにより設定することで行う.
    196 å‰²è¾¼ã¿/例外リターン時の遷移å
    197 ˆã¨ãªã‚‹ä¾‹å¤–レベルは,SPSR_ELxのビット2および3で
    198 æŒ‡å®šã™ã‚‹ï¼Žå‰²è¾¼ã¿/例外受付時,PSTATEの状æ
    199 ‹ãŒSPSR_ELxに,リターンアドレスがELR_ELxに,
    200 ãã‚Œãžã‚Œä¿å­˜ã•ã‚Œeret命令の実行によりその格納値が復帰されるため,eret実行前に
    201 ã‚らかじめSPSR_ELxにセットしておくことで指定した例外レベルへ遷移することが可能である.
    202 åŒã˜ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã§ä½¿ç”¨ã‚¹ã‚¿ãƒƒã‚¯ã‚„64ビット/32ビットモードの指定も行うことができる.
    203 
    204 QEMU Virt向けSSPの実è£
    205 ã§ã¯EL1のみを使用するため,例外レベル間の遷移処理は行っていない.
    206 
    207 â—ä¾‹å¤–レベルの判定
    208 
    209 ç¾çŠ¶ã®ä¾‹å¤–レベルを判定するには,CPSRのビット2およびビット3の値を使用する.
    210 bit[3:2]の値が
    211     '11'の場合:EL3
    212     '10'の場合:EL2
    213     '01'の場合:EL1
    214     '00'の場合:EL0
    215 
    216 â—GICC_PMRレジスタ
    217 
    218 è¨­å®šã—た優å
    219 ˆåº¦ä»¥ä¸‹(値としては以上)の優å
    220 ˆåº¦ã®å‰²è¾¼ã¿ã®å—付を禁止する.
    221 è¨­å®šå¯èƒ½ãªæœ€å¤§å€¤ã‚’設定すると,å
    222 ¨ã¦ã®å‰²è¾¼ã¿ã‚’許可する.
    223 ä¾‹ãˆã°å„ªå
    224 ˆåº¦ãŒ16段階の場合は0xf0(=0x0f << 4)をセットするとすべての割込み許可
    225 ã¨ãªã‚‹ï¼Žå€¤ã¯ä¾‹å¤–/割込みの受付とリターンにより変化しないため,受け付けた割込み
    226 ã®å„ªå
    227 ˆåº¦ã‚’割込みのå
    228 ¥å£å‡¦ç†ã§è¨­å®šã™ã‚‹å¿
    229 è¦ãŒã‚る.
    230 
    231 â—ä¾‹å¤–/割込みの受付
    232 
    233 ãƒ»ä¾‹å¤–/割込みを受付けると,受付け時にアクティブなスタック上に以下のコ
    234   ンテキストを保存する.
     135割込みを受け付けた際,受け付けた割込みに設定された優先度より低い割込みを
     136禁止するため,GICC_RPRから取得した割込み要因の割込み優先度を GICC_PMRへ
     137セットしている.そしてハンドラ終了後に割込み発生前の割り込み優先度に戻す.
     138
     139● スタックポインタ(SP_EL0とSP_ELx)
     140
     141スタックポインタは,例外レベル0のスタックポインタ(SP_EL0)および実行中の
     142例外レベルのスタックポインタ(SP_ELx)が選択可能である.
     143スタックの選択はspselレジスタへ1を設定するとSP_ELxを,0を設定すると
     144SP_EL0 を選択する.
     145
     146SSPの実装では,EL1 で SP_EL1 のみを使用して動作する.
     147
     148●例外レベルの遷移
     149
     150例外レベル(EL)の遷移は割込み/例外の受付および例外リターン命令(eret)により行う.
     151
     152割込みおよび例外を受け付けることで発生前と同じまたはより高い例外レベルへ遷移する.
     153一方,同じまたはより低い例外レベルへの遷移は例外リターン命令(eret)により行う.
     154
     155受付時の遷移先となる例外レベルの指定はシステムレジスタにより設定することで行う.
     156割込み/例外リターン時の遷移先となる例外レベルは,SPSR_ELxのビット2および3で
     157指定する.割込み/例外受付時,PSTATEの状態がSPSR_ELxに,リターンアドレスがELR_ELxに,
     158それぞれ保存されeret命令の実行によりその格納値が復帰されるため,eret実行前に
     159あらかじめSPSR_ELxにセットしておくことで指定した例外レベルへ遷移することが可能である.
     160同じタイミングで使用スタックや64ビット/32ビットモードの指定も行うことができる.
     161
     162QEMU Virt向けSSPの実装ではEL1のみを使用するため,例外レベル間の遷移処理は行っていない.
     163
     164●例外レベルの判定
     165
     166現状の例外レベルを判定するには,CPSRのビット2およびビット3の値を使用する.
     167bit[3:2]の値が
     168    '11'の場合:EL3
     169    '10'の場合:EL2
     170    '01'の場合:EL1
     171    '00'の場合:EL0
     172
     173●GICC_PMRレジスタ
     174
     175設定した優先度以下(値としては以上)の優先度の割込みの受付を禁止する.
     176設定可能な最大値を設定すると,全ての割込みを許可する.
     177例えば優先度が16段階の場合は0xf0(=0x0f << 4)をセットするとすべての割込み許可
     178となる.値は例外/割込みの受付とリターンにより変化しないため,受け付けた割込み
     179の優先度を割込みの入口処理で設定する必要がある.
     180
     181●例外/割込みの受付
     182
     183・例外/割込みを受付けると,受付け時にアクティブなスタック上に以下のコ
     184  ンテキストを保存する.
    235185
    236186   ---------------
    237187  |   GICC_PMR     |  <- new SP
    238188   ----------------
    239   | 割込み/例外番号|
    240    ----------------
    241   |    ダミー(0)   |
    242    ----------------
    243   | 調整量(0 or 8) |
    244    ----------------
    245   |調整領域(å¿
    246 è¦æ™‚)| (*)アライメント調整がå¿
    247 è¦ãªã¨ãã®ã¿
     189  | 割込み/例外番号|
     190   ----------------
     191  |    ダミー(0)   |
     192   ----------------
     193  | 調整量(0 or 8) |
     194   ----------------
     195  |調整領域(必要時)| (*)アライメント調整が必要なときのみ
    248196   ----------------
    249197  |    ESR_ELx     |
     
    257205  |      X29       |
    258206   ----------------
    259   |      :        |
    260   |      :        |
     207  |              |
     208  |              |
    261209   ----------------
    262210  |      X1        |
     
    267215
    268216
    269 å‰²è¾¼ã¿/例外発生時の主なシーケンスは次のようになる(遷移å
    270 ˆã®ä¾‹å¤–レベルをELxと表現する)
    271 
    272 ï¼ˆãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®å‡¦ç†ï¼‰
    273   ・PSTATEをSPSR_ELxに保存する
    274   ・リターンアドレスをELR_ELxに保存する
    275   ・PSTATE.{D,A,I,F}を1にセットする
    276   ・同期例外およびSError割込みのとき,例外要因æƒ
    277 å ±ã‚’ESR_ELxに保存する
    278   ・スタックポインタをSP_ELxに切り替える
    279   ・ELxへ遷移する
    280 
    281 ï¼ˆã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã§ã®å‡¦ç†ï¼‰
    282   ・(発生時にSP_EL0を使用していた場合)スタックを割込み発生前(SP_EL0)に戻す
    283   ・汎用レジスタ(X0-X30)をスタックに保存
    284   ・SPSR_ELx, ESR_ELx, ELR_ELxをスタックに保存
    285   ・スタックポインタのアライメントを調整
    286   ・割込み番号(GICC_IARから取得),例外番号(オフセット毎に定義した値)をスタックに保存
    287   ・割込み発生前の割込み優å
    288 ˆåº¦ãƒžã‚¹ã‚¯ã‚’スタックに保存
    289   ・GICC_PMRに受け付けた割込みの割込み優å
    290 ˆåº¦ã‚’セット
    291   ・割込み/例外ネストカウンタのインクリメント
    292   ・(割込みの場合)CPUロック解除
    293   ・ベクタテーブルを読み込みハンドラを実行する
    294 
    295 â—ä¾‹å¤–/割込みからのリターン
    296 
    297 ï¼ˆã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã§ã®å‡¦ç†ï¼‰
    298   ・CPUロック状æ
    299 ‹ã¸ç§»è¡Œ
    300   ・割込み/例外ネスとカウンタのデクリメント
    301   ・GICC_PMRに割込み発生前の優å
    302 ˆåº¦ãƒžã‚¹ã‚¯ã‚’戻す
    303   ・スタックポインタのアライメント調整分を戻す
    304   ・戻りå
    305 ˆã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚„システム状æ
    306 ‹ã«å¿œã˜ã¦å‰²è¾¼ã¿/例外発生å
    307 ƒã¸ãƒªã‚¿ãƒ¼ãƒ³
    308     またはé
    309 å»¶ãƒ‡ã‚£ã‚¹ãƒ‘ッチを実行する
    310   ・ELR_ELxに戻りå
    311 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ï¼ŒSPSR_ELxにプロセッサ状æ
    312 ‹ãŒãã‚Œãžã‚Œ
    313     セットされている状æ
    314 ‹ã§eret命令を実行し,割込み/例外からリターン
    315 
    316 â—ã‚¹ã‚¿ãƒƒã‚¯ãƒã‚¤ãƒ³ã‚¿ã®ã‚¢ãƒ©ã‚¤ãƒ¡ãƒ³ãƒˆèª¿æ•´
    317 
    318 AArch64では,外部インタフェースにおいてスタックポインタは16バイト境界に
    319 ã‚¢ãƒ©ã‚¤ãƒ³ã•ã›ã‚‹å¿
    320 è¦ãŒã‚る.しかし例外発生時にそれが満たされているとは限らないため,
    321 å‰²è¾¼ã¿/CPU例外のå
    322 ¥å£å‡¦ç†ã§ï¼Œã‚¹ã‚¿ãƒƒã‚¯ãƒã‚¤ãƒ³ã‚¿ãŒã‚¢ãƒ©ã‚¤ãƒ¡ãƒ³ãƒˆæ¡ä»¶ã‚’満たしていない場合には,
    323 ã‚¹ã‚¿ãƒƒã‚¯ãƒã‚¤ãƒ³ã‚¿ã‚’調整する.また,出口処理でスタックポインタをå
    324 ƒã«æˆ»ã›ã‚‹ã‚ˆã†ã«ï¼Œèª¿æ•´é‡ã‚’保存する.
    325 
    326 
    327 â—‹OSの実è£
    328 
    329 
    330 1.プロセッサ依存部名称: arm64
    331 
    332 ARMv8 では,64ビットモード(AArch64)および32ビットモード(AArch32)の両方をサポートするが
    333 æœ¬å®Ÿè£
    334 ã¯64ビットモードのみをサポートすることを明示するためプロセッサ依存部名称を arm64 とした
    335 
    336 2. 例外モードの使い分け
    337 
    338 æœ¬å®Ÿè£
    339 ã§ã¯ã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆï¼Œéžã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã„ずれも例外レベル1(EL1)で動作する.
    340 ã‚¿ã‚¹ã‚¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’EL0で動作する案も考えられる.その場合は割込み/例外の出口処理において
    341 é
    342 å»¶ãƒ‡ã‚£ã‚¹ãƒ‘ッチの前に例外レベルの切り替えがå¿
    343 è¦ã¨ãªã‚‹ï¼Ž
    344 
    345 3.ディスパッチャの実行モード
    346 
    347 æœ¬å®Ÿè£
    348 ã§ã¯ã™ã¹ã¦ä¾‹å¤–レベル1で動作するため,ディスパッチャは例外レベル1(EL1)で動作する.
    349 
    350 
    351 4.スタックの使い分け
    352 
    353 SSPではタスクコンテキスト,非タスクコンテキストå
    354 ±ã«ä¸€ã¤ã®ã‚¹ã‚¿ãƒƒã‚¯ã‚’å
    355 ±ç”¨ã™ã‚‹ï¼Ž
    356 æœ¬å®Ÿè£
    357 ã§ã¯SP_ELxを使用している.
    358 ã“の他にSP_EL0を使用する実è£
    359 ã‚‚考えられる.その場合は割込み/例外のå
    360 ¥å£å‡¦ç†ã«ã¦
    361 ãƒ¬ã‚¸ã‚¹ã‚¿ã‚’保存する前にSP_EL0へのスタック切り替えを行う.
    362 
    363 5.コンテキストの判定
    364 
    365 å‰²è¾¼ã¿/例外のネスト回数を保持する変数(intnest)が0ならタスクタスクコンテキスト,
    366 1以上なら非タスクコンテキストとする.
    367 ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆæ¯Žã«ä¾‹å¤–レベルを分ける実è£
    368 ã‚’取る場合はPSTATEのビット2および3で
    369 ä¾‹å¤–レベルを読み出すことにより判別するという方法も考えられる.
    370 æœ¬å®Ÿè£
    371 ã§ã¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã«ã‚ˆã‚‰ãšåŒã˜ä¾‹å¤–レベルを使用し,プロセッサの
    372 ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒ¬ã‚¸ã‚¹ã‚¿ã§ã¯åˆ¤åˆ¥ãŒã§ããªã„ため変数で判別する.
    373 
    374 6. CPUロック
    375 
    376 CPUロックPSTATE.IおよびPSTATE.FによりCPUロックを実現する.
    377 
    378 7. 割込みロックとCPU例外の関係
    379 
    380 ã‚«ãƒ¼ãƒãƒ«ç®¡ç†å¤–の割込みはサポートしないため,割込みロックとCPUロックがマスクする
    381 å‰²è¾¼ã¿ã®ç¯„囲は同じとする.ただし,フラグ自体はお互いに独立させるため,
    382 å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯çŠ¶æ
    383 ‹ã®è¨­å®š/解除の際は,ロック前にCPUロックフラグの状æ
    384 ‹ã‚’保存し,
    385 è§£é™¤å‰ã«å
    386 ƒã®çŠ¶æ
    387 ‹ã«æˆ»ã™ã‚ˆã†ã«ã—ている.
    388 
    389 8. 外部優å
    390 ˆåº¦ã¨å†
    391 éƒ¨å„ªå
    392 ˆåº¦
    393 
    394 å¤–部優å
    395 ˆåº¦ã¨ã¯APIで指定する割込み優å
    396 ˆåº¦(PRI型)のことであり,値が小さい
    397 ã»ã©å„ªå
    398 ˆåº¦ãŒé«˜ã„.割込みハンドラには,-1から連続した負の値を設定可能で
    399 ã‚る.å†
    400 éƒ¨å„ªå
    401 ˆåº¦ã¯ï¼ŒGICC_PMRレジスタに設定する値である.
    402 å¤–部優å
    403 ˆåº¦ã¨å†
    404 éƒ¨å„ªå
    405 ˆåº¦ã®å¤‰æ›ã¯ä»¥ä¸‹ã®ãƒžã‚¯ãƒ­ã§è¡¨ç¾ã•ã‚Œã‚‹ï¼Ž
    406 
    407 /* 外部表現への変換 */
     217割込み/例外発生時の主なシーケンスは次のようになる(遷移先の例外レベルをELxと表現する)
     218
     219(ハードウェアの処理)
     220  ・PSTATEをSPSR_ELxに保存する
     221  ・リターンアドレスをELR_ELxに保存する
     222  ・PSTATE.{D,A,I,F}を1にセットする
     223  ・同期例外およびSError割込みのとき,例外要因情報をESR_ELxに保存する
     224  ・スタックポインタをSP_ELxに切り替える
     225  ・ELxへ遷移する
     226
     227(ソフトウェアでの処理)
     228  ・(発生時にSP_EL0を使用していた場合)スタックを割込み発生前(SP_EL0)に戻す
     229  ・汎用レジスタ(X0-X30)をスタックに保存
     230  ・SPSR_ELx, ESR_ELx, ELR_ELxをスタックに保存
     231  ・スタックポインタのアライメントを調整
     232  ・割込み番号(GICC_IARから取得),例外番号(オフセット毎に定義した値)をスタックに保存
     233  ・割込み発生前の割込み優先度マスクをスタックに保存
     234  ・GICC_PMRに受け付けた割込みの割込み優先度をセット
     235  ・割込み/例外ネストカウンタのインクリメント
     236  ・(割込みの場合)CPUロック解除
     237  ・ベクタテーブルを読み込みハンドラを実行する
     238
     239●例外/割込みからのリターン
     240
     241(ソフトウェアでの処理)
     242  ・CPUロック状態へ移行
     243  ・割込み/例外ネスとカウンタのデクリメント
     244  ・GICC_PMRに割込み発生前の優先度マスクを戻す
     245  ・スタックポインタのアライメント調整分を戻す
     246  ・戻り先のコンテキストやシステム状態に応じて割込み/例外発生元へリターン
     247    または遅延ディスパッチを実行する
     248  ・ELR_ELxに戻り先アドレス,SPSR_ELxにプロセッサ状態がそれぞれ
     249    セットされている状態でeret命令を実行し,割込み/例外からリターン
     250
     251●スタックポインタのアライメント調整
     252
     253AArch64では,外部インタフェースにおいてスタックポインタは16バイト境界に
     254アラインさせる必要がある.しかし例外発生時にそれが満たされているとは限らないため,
     255割込み/CPU例外の入口処理で,スタックポインタがアライメント条件を満たしていない場合には,
     256スタックポインタを調整する.また,出口処理でスタックポインタを元に戻せるように,調整量を保存する.
     257
     258
     259○OSの実装
     260
     2611.プロセッサ依存部名称: arm64
     262
     263ARMv8 では,64ビットモード(AArch64)および32ビットモード(AArch32)の両方をサポートするが
     264本実装は64ビットモードのみをサポートすることを明示するためプロセッサ依存部名称を arm64 とした
     265
     2662. 例外モードの使い分け
     267
     268本実装ではタスクコンテキスト,非タスクコンテキストいずれも例外レベル1(EL1)で動作する.
     269タスクコンテキストをEL0で動作する案も考えられる.その場合は割込み/例外の出口処理において
     270遅延ディスパッチの前に例外レベルの切り替えが必要となる.
     271
     2723.ディスパッチャの実行モード
     273
     274本実装ではすべて例外レベル1で動作するため,ディスパッチャは例外レベル1(EL1)で動作する.
     275
     276
     2774.スタックの使い分け
     278
     279SSPではタスクコンテキスト,非タスクコンテキスト共に一つのスタックを共用する.
     280本実装ではSP_ELxを使用している.
     281この他にSP_EL0を使用する実装も考えられる.その場合は割込み/例外の入口処理にて
     282レジスタを保存する前にSP_EL0へのスタック切り替えを行う.
     283
     2845.コンテキストの判定
     285
     286割込み/例外のネスト回数を保持する変数(intnest)が0ならタスクタスクコンテキスト,
     2871以上なら非タスクコンテキストとする.
     288コンテキスト毎に例外レベルを分ける実装を取る場合はPSTATEのビット2および3で
     289例外レベルを読み出すことにより判別するという方法も考えられる.
     290本実装ではコンテキストによらず同じ例外レベルを使用し,プロセッサの
     291ステータスレジスタでは判別ができないため変数で判別する.
     292
     2936. CPUロック
     294
     295CPUロックPSTATE.IおよびPSTATE.FによりCPUロックを実現する.
     296
     2977. 割込みロックとCPU例外の関係
     298
     299カーネル管理外の割込みはサポートしないため,割込みロックとCPUロックがマスクする
     300割込みの範囲は同じとする.ただし,フラグ自体はお互いに独立させるため,
     301割込みロック状態の設定/解除の際は,ロック前にCPUロックフラグの状態を保存し,
     302解除前に元の状態に戻すようにしている.
     303
     3048. 外部優先度と内部優先度
     305
     306外部優先度とはAPIで指定する割込み優先度(PRI型)のことであり,値が小さい
     307ほど優先度が高い.割込みハンドラには,-1から連続した負の値を設定可能で
     308ある.内部優先度は,GICC_PMRレジスタに設定する値である.
     309外部優先度と内部優先度の変換は以下のマクロで表現される.
     310
     311/* 外部表現への変換 */
    408312#define EXT_IPM(pri) \
    409313                        (((PRI)((pri) >> GIC_PRI_SHIFT)) - (GIC_PRI_LEVEL - 1))
    410314
    411 /* å†
    412 éƒ¨è¡¨ç¾ã¸ã®å¤‰æ› */
     315/* 内部表現への変換 */
    413316#define INT_IPM(ipm) \
    414317                        (((uint_t)((ipm) + (GIC_PRI_LEVEL - 1))) << GIC_PRI_SHIFT)
    415318
    416 ã“こでGIC_PRI_LEVELはサポートする割込み優å
    417 ˆåº¦ã®æ•°ï¼ŒGIC_PRI_SHIFTはGICC_PMRレジスタå†
    418 
    419 ã®ï¼Œå†
    420 éƒ¨å„ªå
    421 ˆåº¦ã®å€¤ãŒæ ¼ç´ã•ã‚Œã‚‹ä½ç½®ï¼ˆãƒ“ット0からのオフセット)を表す.
    422 
    423 
    424 9. カーネル管理å†
    425 ã®æœ€é«˜å„ªå
    426 ˆåº¦(CPUロック状æ
    427 ‹ã§ã®å„ªå
    428 ˆåº¦ãƒžã‚¹ã‚¯)
    429 
    430 ã‚«ãƒ¼ãƒãƒ«ç®¡ç†å†
    431 ã®å‰²è¾¼ã¿ã®æœ€é«˜å„ªå
    432 ˆåº¦ã¯è¨­å®šå¯èƒ½ãªå¤–部優å
    433 ˆåº¦ã®æœ€é«˜å€¤ã¨åŒã˜ã¨ã™ã‚‹ï¼Ž
    434 
    435 
    436 ä»¥ä¸Šï¼Ž
     319ここでGIC_PRI_LEVELはサポートする割込み優先度の数,GIC_PRI_SHIFTはGICC_PMRレジスタ内
     320の,内部優先度の値が格納される位置(ビット0からのオフセット)を表す.
     321
     322
     3239. カーネル管理内の最高優先度(CPUロック状態での優先度マスク)
     324
     325カーネル管理内の割込みの最高優先度は設定可能な外部優先度の最高値と同じとする.
     326
     327
     328以上.
  • ssp_aarch64/trunk/arm64_gcc/prc_kernel.h

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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 *      免責すること.
    4632 *
    47  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    48 ãŠ
    49  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    50  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    51  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    52  *  の責任を負わない.
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  @(#) $Id: prc_kernel.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    5641
    5742/*
    58  *              kernel.hのプロセッサ依存部(ARM64用)
     43 *              kernel.hのプロセッサ依存部(ARM64用)
    5944 *
    60  *  このインクルードファイルは,target_kernel.h(または,そこからインク
    61  *  ルードされるファイル)のみからインクルードされる.他のファイルから
    62  *  直接インクルードしてはならない.
     45 *  このインクルードファイルは,target_kernel.h(または,そこからインク
     46 *  ルードされるファイル)のみからインクルードされる.他のファイルから
     47 *  直接インクルードしてはならない.
    6348 */
    6449
     
    6752
    6853/*
    69  *  サポートする機能の定義
     54 *  サポートする機能の定義
    7055 */
    71 #define TOPPERS_TARGET_SUPPORT_DIS_INT            /* dis_intをサポートする */
    72 #define TOPPERS_TARGET_SUPPORT_ENA_INT            /* ena_intをサポートする */
     56#define TOPPERS_TARGET_SUPPORT_DIS_INT            /* dis_intをサポートする */
     57#define TOPPERS_TARGET_SUPPORT_ENA_INT            /* ena_intをサポートする */
    7358
    7459#ifndef TOPPERS_MACRO_ONLY
    7560
    7661/*
    77  *  スタックの型
    78  *    スタックポインタのアライメントはポインタサイズの倍にするå¿
    79 è¦ãŒã‚ã‚‹
     62 *  スタックの型
     63 *    スタックポインタのアライメントはポインタサイズの倍にする必要がある
    8064 */
    8165#define TOPPERS_STK_T  uint128_t
  • ssp_aarch64/trunk/arm64_gcc/prc_kernel.trb

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    1212#
    1313#
    14 #   ä¸Šè¨˜è‘—作権è€
    15 ã¯ï¼Œä»¥ä¸‹ã®(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
    16 #   ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
    17 #   å¤‰ãƒ»å†é
    18 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    19 #   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    20 #       æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
    21 #       ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
    22 #   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    23 #       ç”¨ã§ãã‚‹å½¢ã§å†é
    24 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    25 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    26 #       è€
    27 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    28 #       ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
    29 #   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    30 #       ç”¨ã§ããªã„形で再é
    31 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    32 #       ã¨ï¼Ž
    33 #     (a) 再é
    34 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    35 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    36 #         ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
    37 #     (b) 再é
    38 å¸ƒã®å½¢æ
    39 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    40 #         å ±å‘Šã™ã‚‹ã“と.
    41 #   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    42 #       å®³ã‹ã‚‰ã‚‚,上記著作権è€
    43 ãŠã‚ˆã³TOPPERSプロジェクトをå
    44 è²¬ã™ã‚‹ã“と.
    45 #       ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
    46 #       ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
    47 ãŠã‚ˆã³TOPPERSプロジェクトを
    48 #       å
    49 è²¬ã™ã‚‹ã“と.
     14#   上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     15#   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     16#   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     17#   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     18#       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     19#       スコード中に含まれていること.
     20#   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     21#       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     22#       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     23#       の無保証規定を掲載すること.
     24#   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     25#       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     26#       と.
     27#     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     28#         作権表示,この利用条件および下記の無保証規定を掲載すること.
     29#     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     30#         報告すること.
     31#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     32#       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     33#       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     34#       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     35#       免責すること.
    5036#
    51 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    52 ãŠ
    53 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    54 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    55 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    56 #   ã®è²¬ä»»ã‚’負わない.
     37#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     38#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     39#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     40#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     41#   の責任を負わない.
    5742#
    5843#   $Id: core_kernel.trb 662 2016-02-27 02:33:51Z ertl-hiro $
     
    6045
    6146#
    62 #               ãƒ‘ス2の生成スクリプトのコア依存部(ARM用)
     47#               パス2の生成スクリプトのコア依存部(ARM用)
    6348#
    6449
    6550#
    66 æœ‰åŠ¹ãªå‰²è¾¼ã¿ç•ªå·ï¼Œå‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ç•ªå·
     51有効な割込み番号,割込みハンドラ番号
    6752#
    6853$INTNO_VALID = [ *(0..63) ]
     
    7055
    7156#
    72 æœ‰åŠ¹ãªCPU例外ハンドラ番号
     57有効なCPU例外ハンドラ番号
    7358#
    7459$EXCNO_VALID = [ *(0..7) ]
    7560
    7661#
    77 #  ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
     62#  ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
    7863#
    7964$INTNO_ATTISR_VALID = $INTNO_VALID
     
    8166
    8267#
    83 #  DEF_INT/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
     68#  DEF_INT/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
    8469#
    8570$INHNO_DEFINH_VALID = $INHNO_VALID
     
    8772
    8873#
    89 ãƒã‚§ãƒƒã‚¯æ–¹æ³•ã®æŒ‡å®š
     74チェック方法の指定
    9075#
    9176$CHECK_STKSZ_ALIGN = 16
    9277
    9378#
    94 #  CFG_INTで使用できる割込み番号と割込み優å
    95 ˆåº¦
     79#  CFG_INTで使用できる割込み番号と割込み優先度
    9680#
    9781$INTNO_CFGINT_VALID = $INTNO_VALID
     
    9983
    10084#
    101 å‰²è¾¼ã¿å±žæ€§ä¸­ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜ã«ç”¨ã„るビット
     85割込み属性中のターゲット依存に用いるビット
    10286#
    10387#$TARGET_INTATR =
    10488
    10589#
    106 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆéžä¾å­˜éƒ¨ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰
     90ターゲット非依存部のインクルード
    10791#
    10892IncludeTrb("kernel/kernel.trb")
     
    11195
    11296#
    113 å‰²è¾¼ã¿è¦æ±‚ライン設定テーブル
     97割込み要求ライン設定テーブル
    11498#
    11599
     
    132116
    133117#
    134 å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ†ãƒ¼ãƒ–ル
     118割込みハンドラテーブル
    135119#
    136120$kernelCfgC.comment_header("Interrupt Handler Table")
     
    150134
    151135#
    152 #  CPU例外ハンドラテーブル
     136#  CPU例外ハンドラテーブル
    153137#
    154138$kernelCfgC.comment_header("CPU Exception Handler Table")
  • ssp_aarch64/trunk/arm64_gcc/prc_rename.def

    • Property svn:mime-type set to text/plain; charset=utf-8
  • ssp_aarch64/trunk/arm64_gcc/prc_rename.h

    • Property svn:mime-type set to text/plain; charset=utf-8
  • ssp_aarch64/trunk/arm64_gcc/prc_sil.h

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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 *      免責すること.
    4632 *
    47  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    48 ãŠ
    49  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    50  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    51  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    52  *  の責任を負わない.
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  @(#) $Id: prc_sil.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    5641
    5742/*
    58  *   sil.hのプロセッサ依存部(ARM64用)
     43 *   sil.hのプロセッサ依存部(ARM64用)
    5944 */
    6045
     
    6752
    6853/*
    69  *  å
    70 ¨å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯ãƒ•ãƒ©ã‚°ã®ã‚»ãƒƒãƒˆ(NMIを除くすべての割込みの禁止)
     54 *  全割込みロックフラグのセット(NMIを除くすべての割込みの禁止)
    7155 */
    7256Inline bool_t
     
    8771
    8872/*
    89  *  å
    90 ¨å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯ãƒ•ãƒ©ã‚°ã®è§£é™¤
     73 *  全割込みロックフラグの解除
    9174 */
    9275Inline void
     
    9982
    10083/*
    101  *  å
    102 ¨å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯çŠ¶æ
    103 ‹ã®åˆ¶å¾¡
     84 *  全割込みロック状態の制御
    10485 */
    10586#define SIL_PRE_LOC      bool_t  TOPPERS_locked
     
    10889
    10990/*
    110  *  エンディアンの定義
     91 *  エンディアンの定義
    11192 */
    11293
  • ssp_aarch64/trunk/arm64_gcc/prc_stddef.h

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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 *      免責すること.
    4632 *
    47  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    48 ãŠ
    49  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    50  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    51  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    52  *  の責任を負わない.
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  @(#) $Id: prc_stddef.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    5641
    5742/*
    58  *  t_stddef.hのプロセッサ依存部(ARM64用)
     43 *  t_stddef.hのプロセッサ依存部(ARM64用)
    5944 *
    60  *  このインクルードファイルは,target_stddef.h(または,そこからインク
    61  *  ルードされるファイル)のみからインクルードされる.他のファイルから
    62  *  直接インクルードしてはならない.
     45 *  このインクルードファイルは,target_stddef.h(または,そこからインク
     46 *  ルードされるファイル)のみからインクルードされる.他のファイルから
     47 *  直接インクルードしてはならない.
    6348 */
    6449
     
    6752
    6853/*
    69  *  ターゲットを識別するためのマクロの定義
     54 *  ターゲットを識別するためのマクロの定義
    7055 */
    71 #define TOPPERS_ARM64           /* プロセッサ略称 */
     56#define TOPPERS_ARM64           /* プロセッサ略称 */
    7257
    7358#ifndef TOPPERS_MACRO_ONLY
    7459
    7560/*
    76  *  データ型の定義
     61 *  データ型の定義
    7762 */
    7863typedef __int128_t    int128_t;
  • ssp_aarch64/trunk/arm64_gcc/prc_support.S

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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  */
    55 
    56 /*
    57  *  プロセッサ依存モジュール アセンブリ言語部(ARM64用)
     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 *      免責すること.
     32 *
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
     38 *
     39 */
     40
     41/*
     42 *  プロセッサ依存モジュール アセンブリ言語部(ARM64用)
    5843 */
    5944
    6045#define TOPPERS_MACRO_ONLY
    61 #define UINT_C(val)     (val)           /* uint_t型の定数を作るマクロ */
    62 #define ULONG_C(val)    (val)           /* ulong_t型の定数を作るマクロ */
    63 #define CAST(type, val) (val)           /* 型キャストを行うマクロ */
     46#define UINT_C(val)     (val)           /* uint_t型の定数を作るマクロ */
     47#define ULONG_C(val)    (val)           /* ulong_t型の定数を作るマクロ */
     48#define CAST(type, val) (val)           /* 型キャストを行うマクロ */
    6449
    6550#include "kernel_impl.h"
    6651
    6752/*
    68  *  ディスパッチャの動作開始
     53 *  ディスパッチャの動作開始
    6954 */
    7055    .text
     
    7459start_dispatch:
    7560    /*
    76      *  このルーチンは,カーネル起動時に,すべての割込みを禁止した状æ
    77 ‹
    78      * (割込みロック状æ
    79 ‹ã¨åŒç­‰ï¼‰ã§å‘¼ã³å‡ºã•ã‚Œã‚‹ï¼Ž
     61     *  このルーチンは,カーネル起動時に,すべての割込みを禁止した状態
     62     * (割込みロック状態と同等)で呼び出される.
    8063     *
    81      *  ここでは dispatcher を呼び出す前の初期設定を行う.
    82      *  (1) システム状æ
    83 ‹ã®åˆæœŸåŒ–.以下の状æ
    84 ‹ã¸ç§»è¡Œã™ã‚‹ï¼Ž
    85      *    ・å
    86 ¨å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯è§£é™¤çŠ¶æ
    87 ‹(カーネル管理外の割込み許可)
    88      *    ・CPUロック状æ
    89 ‹(カーネル管理の割込み禁止)
    90      *    ・割込み優å
    91 ˆåº¦ãƒžã‚¹ã‚¯å
    92 ¨è§£é™¤çŠ¶æ
    93 ‹
    94      *    ・ディスパッチ許可状æ
    95 ‹
     64     *  ここでは dispatcher を呼び出す前の初期設定を行う.
     65     *  (1) システム状態の初期化.以下の状態へ移行する.
     66     *    ・全割込みロック解除状態(カーネル管理外の割込み許可)
     67     *    ・CPUロック状態(カーネル管理の割込み禁止)
     68     *    ・割込み優先度マスク全解除状態
     69     *    ・ディスパッチ許可状態
    9670     *
    97      *    (1-1) 割込み優å
    98 ˆåº¦ãƒžã‚¹ã‚¯ã¯ gicc_initializeで,GICC_PMR を初期化することにより
    99      *          すでに(モデル上の)割込み優å
    100 ˆåº¦ãƒžã‚¹ã‚¯å
    101 ¨è§£é™¤çŠ¶æ
    102 ‹ã«ãªã£ã¦ã„る.
    103      *    (1-2) ディスパッチ禁止フラグは task_initialize で disdsp を false に初期化しているため
    104      *          すでにディスパッチ許可状æ
    105 ‹ã«ãªã£ã¦ã„る.
    106      *    (1-3) ここではカーネル管理の割込みを禁止する.
     71     *    (1-1) 割込み優先度マスクは gicc_initializeで,GICC_PMR を初期化することにより
     72     *          すでに(モデル上の)割込み優先度マスク全解除状態になっている.
     73     *    (1-2) ディスパッチ禁止フラグは task_initialize で disdsp を false に初期化しているため
     74     *          すでにディスパッチ許可状態になっている.
     75     *    (1-3) ここではカーネル管理の割込みを禁止する.
    10776     *
    108      *  (2) スタックポインタの初期化
    109      *      start_dispatch が呼び出されるとここに戻ってくることはないため
    110      *      スタックポインタをここで初期化する.
     77     *  (2) スタックポインタの初期化
     78     *      start_dispatch が呼び出されるとここに戻ってくることはないため
     79     *      スタックポインタをここで初期化する.
    11180     */
    11281    ldr x0, =_kernel_istkpt // setup stack
     
    11483    mov sp, x0
    11584
    116     // カーネル管理å†
    117 ã®å‰²è¾¼ã¿ç¦æ­¢
     85    // カーネル管理内の割込み禁止
    11886    msr    daifset, #3
    11987
    120     // dispatcher呼び出し
     88    // dispatcher呼び出し
    12189    b      dispatcher
    12290
    12391/*
    124  *  カーネルの終了処理の呼出し
    125  *
    126  *  スタックを非タスクコンテキスト用に切り替え.
     92 *  カーネルの終了処理の呼出し
     93 *
     94 *  スタックを非タスクコンテキスト用に切り替え.
    12795 *
    12896 */
     
    133101call_exit_kernel:
    134102    /*
    135      *  スタックポインタの初期化
     103     *  スタックポインタの初期化
    136104     */
    137105    ldr    x0, =_kernel_istkpt
     
    139107    mov    sp, x0
    140108
    141     b      exit_kernel       /* カーネルの終了処理を呼ぶ */
    142 
    143 
    144 /*
    145  * 割込み/例外コンテキスト保存処理
     109    b      exit_kernel       /* カーネルの終了処理を呼ぶ */
     110
     111
     112/*
     113 * 割込み/例外コンテキスト保存処理
    146114 */
    147115.macro __save_context
    148116    /*
    149      *  x0 - x29 の保存(x0,x1ペアからx28, x29まで)
     117     *  x0 - x29 の保存(x0,x1ペアからx28, x29まで)
    150118     */
    151119    stp    x1, x0, [sp, #-16]!
     
    166134
    167135    /*
    168      * spsr_el1, x30をペアで保存
     136     * spsr_el1, x30をペアで保存
    169137     */
    170138    mrs    x21, spsr_el1
     
    172140
    173141    /*
    174      * esr_el1, elr_el1 をペアで保存
     142     * esr_el1, elr_el1 をペアで保存
    175143     */
    176144    mrs    x21, esr_el1
     
    179147
    180148    /*
    181      *  SPの調整(16ビットアライメントにする)
     149     *  SPの調整(16ビットアライメントにする)
    182150     */
    183151    mov    x1, #8
    184152    mov    x2, sp
    185     and    x1, x2, x1    // 調整量の計算(0 or 8)
    186     sub    sp, sp, x1    // SPの調整
    187     stp    xzr, x1, [sp, #-16]!  // 調整量を保存
    188 
    189     /*
    190      * 追加の格納領域を確保するため,SPを減算しておく
     153    and    x1, x2, x1    // 調整量の計算(0 or 8)
     154    sub    sp, sp, x1    // SPの調整
     155    stp    xzr, x1, [sp, #-16]!  // 調整量を保存
     156
     157    /*
     158     * 追加の格納領域を確保するため,SPを減算しておく
    191159     */
    192160    sub     sp, sp, #16
     
    194162
    195163/*
    196  * コンテキスト復帰処理
     164 * コンテキスト復帰処理
    197165 */
    198166.macro __restore_context
    199167    /*
    200      * スタックに保存した一部データの破棄(アライメント調整分を考æ
    201 ®)
     168     * スタックに保存した一部データの破棄(アライメント調整分を考慮)
    202169     */
    203170    mov    x1, #40
     
    206173    add    sp, sp, x1
    207174    /*
    208      * ELR/SPSR の復å
    209 ƒ
     175     * ELR/SPSR の復元
    210176     */
    211177    ldp    x21, x22, [sp], #16
     
    213179    msr    spsr_el1, x22
    214180    /*
    215      * x0 - x30 の復å
    216 ƒ
     181     * x0 - x30 の復元
    217182     */
    218183    ldr    x30, [sp], #8
     
    235200
    236201/*
    237  *  割込み/例外の出口処理
    238  *    前提:CPUロック状æ
    239 ‹, ネストカウンタデクリメント済み
     202 *  割込み/例外の出口処理
     203 *    前提:CPUロック状態, ネストカウンタデクリメント済み
    240204 */
    241205    .text
     
    243207    .global ret_int
    244208ret_int:
    245     // 戻りå
    246 ˆã®ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚’確認し,多段割込みならリターン
     209    // 戻り先のコンテキストを確認し,多段割込みならリターン
    247210    ldr    x1, =_kernel_intnest
    248211    ldrb   w3, [x1]
    249212    cbnz   w3, int_return
    250213
    251 ret_int_2:        // 初段の割込みの場合
    252     // reqflg が false なら呼び出しå
    253 ƒã¸æˆ»ã‚‹
     214ret_int_2:        // 初段の割込みの場合
     215    // reqflg が false なら呼び出し元へ戻る
    254216    ldr    x0, =reqflg
    255217    ldr    w1, [x0]
    256218    cbz    w1, int_return
    257219
    258 ret_int_3:        // reqflg が true の場合
     220ret_int_3:        // reqflg が true の場合
    259221    mov    w1, #0        // reqflg = false
    260222    str    w1, [x0]
    261223
    262     // ディスパッチ禁止なら呼び出しå
    263 ƒã¸æˆ»ã‚‹
     224    // ディスパッチ禁止なら呼び出し元へ戻る
    264225    ldr    x0, =disdsp
    265226    ldr    w1, [x0]
     
    267228
    268229    /*
    269      *  é
    270 å»¶ãƒ‡ã‚£ã‚¹ãƒ‘ッチ
    271      *    search_schedtsk の返値(x0)を引数として run_task を呼び出す
     230     *  遅延ディスパッチ
     231     *    search_schedtsk の返値(x0)を引数として run_task を呼び出す
    272232     */
    273233    bl    search_schedtsk
     
    275235
    276236    /*
    277      *  呼び出しå
    278 ƒã¸ãƒªã‚¿ãƒ¼ãƒ³
     237     *  呼び出し元へリターン
    279238     */
    280239int_return:
    281     __restore_context    // レジスタ復帰
     240    __restore_context    // レジスタ復帰
    282241    eret
    283242
    284243/*
    285  *  割込みベクタ
    286  *    最初に割込み発生前のスタックに戻してからレジスタを保存する
    287  *    ハードウェアによってPSTATE.{I,F} がセット済であることを前提とする
     244 *  割込みベクタ
     245 *    最初に割込み発生前のスタックに戻してからレジスタを保存する
     246 *    ハードウェアによってPSTATE.{I,F} がセット済であることを前提とする
    288247 */
    289248    .text
     
    296255
    297256    // Sync EL1
    298     msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
    299     __save_context
    300     mov    x22, #0                  // 例外番号をx22にセット
     257    msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
     258    __save_context
     259    mov    x22, #0                  // 例外番号をx22にセット
    301260    b      gic_exc_entry
    302261
    303262    // IRQ EL1
    304263    .align 7
    305     msr    spsel,   #0              // 例外発生前のスタック(SP_EL0)に戻す
     264    msr    spsel,   #0              // 例外発生前のスタック(SP_EL0)に戻す
    306265    __save_context
    307266    b      gic_int_entry
     
    309268    // FIQ EL1
    310269    .align 7
    311     msr    spsel, #0                // 例外発生前のスタック(SP_EL0)へ戻す
     270    msr    spsel, #0                // 例外発生前のスタック(SP_EL0)へ戻す
    312271    __save_context
    313272    b      gic_int_entry
     
    315274    // SError EL1
    316275    .align 7
    317     msr    spsel, #0                // 例外発生前のスタック(SP_EL0)へ戻す
    318     __save_context
    319     mov    x22, #1                  // 例外番号をx22にセット
     276    msr    spsel, #0                // 例外発生前のスタック(SP_EL0)へ戻す
     277    __save_context
     278    mov    x22, #1                  // 例外番号をx22にセット
    320279    b      gic_exc_entry
    321280
     
    327286    .align 7
    328287    __save_context
    329     mov    x22, #2                  // 例外番号をx22にセット
     288    mov    x22, #2                  // 例外番号をx22にセット
    330289    b      gic_exc_entry
    331290
     
    343302    .align 7
    344303    __save_context
    345     mov    x22, #3                  // 例外番号をx22にセット
     304    mov    x22, #3                  // 例外番号をx22にセット
    346305    b      gic_exc_entry
    347306
     
    352311    // Sync EL0
    353312    .align 7
    354     msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
    355     __save_context
    356     mov    x22, #4                  // 例外番号をx22にセット
     313    msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
     314    __save_context
     315    mov    x22, #4                  // 例外番号をx22にセット
    357316    b      gic_exc_entry
    358317
    359318   // IRQ EL0
    360319    .align 7
    361     msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
     320    msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
    362321    __save_context
    363322    b      gic_int_entry
     
    365324    // FIQ EL0
    366325    .align 7
    367     msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
     326    msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
    368327    __save_context
    369328    b      gic_int_entry
     
    371330    // Error EL0
    372331    .align 7
    373     msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
    374     __save_context
    375     mov    x22, #5                  // 例外番号をx22にセット
     332    msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
     333    __save_context
     334    mov    x22, #5                  // 例外番号をx22にセット
    376335    b      gic_exc_entry
    377336
     
    382341    // AArch32 sync
    383342    .align 7
    384     msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
    385     __save_context
    386     mov    x22, #6                  // 例外番号をx22にセット
     343    msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
     344    __save_context
     345    mov    x22, #6                  // 例外番号をx22にセット
    387346    b      gic_exc_entry
    388347
    389348    // AArch32 IRQ
    390349    .align 7
    391     msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
     350    msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
    392351    __save_context
    393352    b      gic_int_entry
     
    395354    // AArch32 FIQ
    396355    .align 7
    397     msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
     356    msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
    398357    __save_context
    399358    b      gic_int_entry
     
    401360    // AArch32 Error
    402361    .align 7
    403     msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
    404     __save_context
    405     mov    x22, #7                  // 例外番号をx22にセット
    406     b      gic_exc_entry
     362    msr    spsel,  #0               // 例外発生前のスタック(SP_EL0)に戻す
     363    __save_context
     364    mov    x22, #7                  // 例外番号をx22にセット
     365    b      gic_exc_entry
  • ssp_aarch64/trunk/arm64_gcc/prc_sym.def

    • Property svn:mime-type set to text/plain; charset=utf-8
  • ssp_aarch64/trunk/arm64_gcc/prc_test.h

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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 *      免責すること.
    4632 *
    47  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    48 ãŠ
    49  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    50  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    51  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    52  *  の責任を負わない.
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  @(#) $Id: prc_test.h 1304 2008-08-27 07:28:36Z ertl-honda $
     
    5641
    5742/*
    58  *              テストプログラムのチップ依存定義(ARM64用)
     43 *              テストプログラムのチップ依存定義(ARM64用)
    5944 */
    6045
     
    6348
    6449/*
    65  *  チップでå
    66 ±é€šãªå®šç¾©
     50 *  チップで共通な定義
    6751 */
    6852
  • ssp_aarch64/trunk/arm64_gcc/prc_timer.c

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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  *  の責任を負わない.
     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 *      免責すること.
     32 *
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  $Id$
     
    5641
    5742/*
    58  *  タイマドライバ(Generic Timer)
     43 *  タイマドライバ(Generic Timer)
    5944 */
    6045#include "kernel_impl.h"
     
    6449
    6550/*
    66  *  仮想タイマの制御レジスタからの読み出し
     51 *  仮想タイマの制御レジスタからの読み出し
    6752 */
    6853Inline uint64_t
     
    7762
    7863/*
    79  *  仮想タイマの制御レジスタへの書き込み
     64 *  仮想タイマの制御レジスタへの書き込み
    8065 */
    8166Inline void
     
    8873
    8974/*
    90  *  仮想タイマ(フリーカウンタ)のカウント値の読み出し
     75 *  仮想タイマ(フリーカウンタ)のカウント値の読み出し
    9176 */
    9277Inline uint64_t
     
    10085
    10186/*
    102  *  仮想タイマの値の読み出し
     87 *  仮想タイマの値の読み出し
    10388 */
    10489Inline uint64_t
     
    11297
    11398/*
    114  *  仮想タイマの値の書き込み
     99 *  仮想タイマの値の書き込み
    115100 */
    116101Inline void
     
    122107
    123108/*
    124  *  システムカウンタのクロック周波数の取得
     109 *  システムカウンタのクロック周波数の取得
    125110 */
    126111Inline uint64_t
     
    133118
    134119/*
    135  *  タイマの開始
     120 *  タイマの開始
    136121 */
    137122static void
     
    147132
    148133/*
    149  *  タイマの停止
     134 *  タイマの停止
    150135 */
    151136static void
     
    161146
    162147/*
    163  *  タイマ割込み要求のクリア
     148 *  タイマ割込み要求のクリア
    164149 */
    165150static void
     
    170155
    171156/*
    172  *  次のタイマ割込み発生までのオフセット
     157 *  次のタイマ割込み発生までのオフセット
    173158 */
    174159static uint64_t next_tval;
    175160
    176161/*
    177  *  タイマの起動処理
     162 *  タイマの起動処理
    178163 */
    179164void
     
    183168    target_timer_int_clear();
    184169
    185     // 次回のタイマ割込み発生までのオフセット算出
     170    // 次回のタイマ割込み発生までのオフセット算出
    186171    next_tval = get_timer_freq() * 1000 / 1000000UL;  /* 1ms */
    187172    clock_write_tval(next_tval);
     
    191176
    192177/*
    193  *  タイマの停止処理
     178 *  タイマの停止処理
    194179 */
    195180void
     
    200185
    201186/*
    202  *  タイマ割込みハンドラ
     187 *  タイマ割込みハンドラ
    203188 */
    204189void
     
    207192    target_timer_stop();
    208193    target_timer_int_clear();
    209     clock_write_tval(next_tval);    // 次回の割込み
     194    clock_write_tval(next_tval);    // 次回の割込み
    210195    target_timer_start();
    211196
  • ssp_aarch64/trunk/arm64_gcc/prc_timer.cfg

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    44
    55/*
    6  *              タイマドライバのコンフィギュレーションファイル
     6 *              タイマドライバのコンフィギュレーションファイル
    77 */
    88ATT_INI({ TA_NULL, 0, target_timer_initialize });
  • ssp_aarch64/trunk/arm64_gcc/prc_timer.h

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    88 *             Nagoya Municipal Industrial Research Institute, JAPAN
    99 *
    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 *      免責すること.
    4632 *
    47  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    48 ãŠ
    49  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    50  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    51  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    52  *  の責任を負わない.
     33 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37 *  の責任を負わない.
    5338 *
    5439 *  $Id$
     
    5641
    5742/*
    58  *  タイマドライバ(Generic Timer)
     43 *  タイマドライバ(Generic Timer)
    5944 */
    6045
     
    6348
    6449/*
    65  *  タイマ割込みハンドラ登録のための定数
     50 *  タイマ割込みハンドラ登録のための定数
    6651 */
    67 #define INTNO_TIMER     TINTNO_TIMER  /* 割込み番号 */
    68 #define INHNO_TIMER     INTNO_TIMER   /* 割込みハンドラ番号 */
     52#define INTNO_TIMER     TINTNO_TIMER  /* 割込み番号 */
     53#define INHNO_TIMER     INTNO_TIMER   /* 割込みハンドラ番号 */
    6954
    7055#define CNTV_CTL_ENABLE  (1 << 0)
     
    7560
    7661/*
    77  *  タイマ値のå†
    78 éƒ¨è¡¨ç¾ã®åž‹
     62 *  タイマ値の内部表現の型
    7963 */
    8064typedef uint64_t    CLOCK;
    8165
    8266/*
    83  *  タイマ値のå†
    84 éƒ¨è¡¨ç¾ã¨ãƒŸãƒªç§’・μ秒単位との変換
     67 *  タイマ値の内部表現とミリ秒・μ秒単位との変換
    8568 *
    8669 */
     
    8972
    9073/*
    91  *  タイマの起動処理
     74 *  タイマの起動処理
    9275 *
    93  *  タイマを初期化し,周期的なタイマ割込み要求を発生させる.
     76 *  タイマを初期化し,周期的なタイマ割込み要求を発生させる.
    9477 */
    9578extern void target_timer_initialize(intptr_t exinf);
    9679
    9780/*
    98  *  タイマの停止処理
     81 *  タイマの停止処理
    9982 *
    100  *  タイマの動作を停止させる.
     83 *  タイマの動作を停止させる.
    10184 */
    10285extern void target_timer_terminate(intptr_t exinf);
    10386
    10487/*
    105  *  タイマの現在値の読出し
     88 *  タイマの現在値の読出し
    10689 */
    10790Inline CLOCK
     
    11699
    117100/*
    118  *  タイマ割込みハンドラ
     101 *  タイマ割込みハンドラ
    119102 */
    120103extern void target_timer_handler(void);
  • ssp_aarch64/trunk/arm64_gcc/prc_unrename.h

    • Property svn:mime-type set to text/plain; charset=utf-8
  • ssp_aarch64/trunk/arm64_gcc/prc_user.txt

    • Property svn:mime-type set to text/plain; charset=utf-8
    r353 r356  
    11=====================================================================
    2                          ARM64プロセッサ依存部
     2                         ARM64プロセッサ依存部
    33                                  Last Modified: '18/05/29
    44=====================================================================
    55
    66
    7 (1) 対応しているターゲットシステムの種類・構成
     7(1) 対応しているターゲットシステムの種類・構成
    88
    9 ARM64依存部は,ARMv8-A アーキテクチャをターゲットとしている.ARMv8-A は
    10 64ビットアーキテクチャであり命令セットレベルでもARMとは異なるため,
    11 ARM依存部と分けている.
     9ARM64依存部は,ARMv8-A アーキテクチャをターゲットとしている.ARMv8-A は
     1064ビットアーキテクチャであり命令セットレベルでもARMとは異なるため,
     11ARM依存部と分けている.
    1212
    13 (2) 使用する開発環境と動作検証した条件(バージョン,オプション等)
     13(2) 使用する開発環境と動作検証した条件(バージョン,オプション等)
    1414
    15 ã‚«ãƒ¼ãƒãƒ«ã¯GCCを用いてコンパイルする.動作確認したバージョンは各ターゲ
    16 ãƒƒãƒˆä¾å­˜éƒ¨ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«è¨˜è¼‰ã™ã‚‹ï¼Ž
     15カーネルはGCCを用いてコンパイルする.動作確認したバージョンは各ターゲ
     16ット依存部のドキュメントに記載する.
    1717
    18 (3) ターゲット定義事é 
    19 ã®è¦å®š
     18(3) ターゲット定義事項の規定
    2019
    21 (3-1) データ型に関する規定
     20(3-1) データ型に関する規定
    2221
    23 ãƒ‡ãƒ¼ã‚¿åž‹ã¯ arch/gcc/tool_stddef.h で定義されているå†
    24 å®¹ã§ï¼Œfloat型と
    25 double型は,それぞれIEEE754準拠の単精度浮動小数点数と倍精度浮動小数点
    26 æ•°ã§ã‚る.
     22データ型は arch/gcc/tool_stddef.h で定義されている内容で,float型と
     23double型は,それぞれIEEE754準拠の単精度浮動小数点数と倍精度浮動小数点
     24数である.
    2725
    28 (3-2) 割込み処理に関する規定
     26(3-2) 割込み処理に関する規定
    2927
    30 â—‹å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ç•ªå·ã¨å‰²è¾¼ã¿ç•ªå·ã®å‰²å½“て,両è€
    31 ã®å¯¾å¿œ
     28○割込みハンドラ番号と割込み番号の割当て,両者の対応
    3229
    33 IRQ および FIQ をカーネル管理の割込みとする.
    34 å‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ç•ªå·ã¨å‰²è¾¼ã¿ç•ªå·ã¯ï¼Œä¾‹å¤–発生時にGICC_IAR にセットされる例外番
    35 å·ã‚’用いる.Generic Timer は27番で,割込みは0番からの番号が割り付けられ
    36 ã¦ã„る.
     30IRQ および FIQ をカーネル管理の割込みとする.
     31割込みハンドラ番号と割込み番号は,例外発生時にGICC_IAR にセットされる例外番
     32号を用いる.Generic Timer は27番で,割込みは0番からの番号が割り付けられ
     33ている.
    3734
    38 â—‹å‰²è¾¼ã¿å„ªå
    39 ˆåº¦ã®æ®µéšŽæ•°ï¼ˆTMIN_INTPRIの値),その設定方法
     35○割込み優先度の段階数(TMIN_INTPRIの値),その設定方法
    4036
    41 å‰²è¾¼ã¿å„ªå
    42 ˆåº¦ã®æ®µéšŽæ•°ã¯ï¼Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨æ¯Žã«ç•°ãªã‚‹ï¼Ž
    43 ã‚«ãƒ¼ãƒãƒ«ç®¡ç†å†
    44 ã®å‰²è¾¼ã¿ã®æœ€é«˜å„ªå
    45 ˆåº¦ï¼ˆTMIN_INTPRI)はターゲット依存部で設定する.
     37割込み優先度の段階数は,ターゲット依存部毎に異なる.
     38カーネル管理内の割込みの最高優先度(TMIN_INTPRI)はターゲット依存部で設定する.
    4639
    47 å„割込みの割込み優å
    48 ˆåº¦ã¯ï¼ŒCFG_INT で TMIN_INTPRI 以上の値を指定する.
     40各割込みの割込み優先度は,CFG_INT で TMIN_INTPRI 以上の値を指定する.
    4941
    50 â—‹dis_intとena_intのサポートの有無,その制限事é 
     42○dis_intとena_intのサポートの有無,その制限事項
     43
     44dis_intとena_intをサポートする.制限事項は特にない.
     45
     46○CFG_INTの制限事項と拡張(ターゲット定義で使用できる割込み属性)
     47
     48CFG_INTの制限事項はなく,ターゲット定義で使用可能な割込み属性は特にな
     49い.
     50
     51○カーネル管理外の割込み
     52
     53カーネル管理外の割込みはサポートしない.
     54IRQ,FIQ共にカーネル管理の割込みとして扱う.
    5155
    5256
    53 dis_intとena_intをサポートする.制限事é 
    54 ã¯ç‰¹ã«ãªã„.
     57(3-3) CPU例外処理に関する規定
    5558
    56 â—‹CFG_INTの制限事é 
    57 ã¨æ‹¡å¼µï¼ˆã‚¿ãƒ¼ã‚²ãƒƒãƒˆå®šç¾©ã§ä½¿ç”¨ã§ãã‚‹å‰²è¾¼ã¿å±žæ€§ï¼‰
     59○CPU例外ハンドラ番号
    5860
    59 CFG_INTの制限事é 
    60 ã¯ãªãï¼Œã‚¿ãƒ¼ã‚²ãƒƒãƒˆå®šç¾©ã§ä½¿ç”¨å¯èƒ½ãªå‰²è¾¼ã¿å±žæ€§ã¯ç‰¹ã«ãª
    61 ã„.
     61ARMv8では,例外発生時の例外レベル(EL),使用スタック,実行状態(AArch32 or AArch64),
     62発生した例外の種類により,ジャンプ先となる例外ベクタ中のオフセットアドレスが異なる.
     63CPU例外ハンドラはこのジャンプ先のオフセットアドレスで区別することにし,
     64それぞれ異なるCPU例外ハンドラ番号を割り当てる.
    6265
    63 â—‹ã‚«ãƒ¼ãƒãƒ«ç®¡ç†å¤–の割込み
    64 
    65 ã‚«ãƒ¼ãƒãƒ«ç®¡ç†å¤–の割込みはサポートしない.
    66 IRQ,FIQå
    67 ±ã«ã‚«ãƒ¼ãƒãƒ«ç®¡ç†ã®å‰²è¾¼ã¿ã¨ã—て扱う.
    68 
    69 
    70 (3-3) CPU例外処理に関する規定
    71 
    72 â—‹CPU例外ハンドラ番号
    73 
    74 ARMv8では,例外発生時の例外レベル(EL),使用スタック,実行状æ
    75 ‹(AArch32 or AArch64),
    76 ç™ºç”Ÿã—た例外の種類により,ジャンプå
    77 ˆã¨ãªã‚‹ä¾‹å¤–ベクタ中のオフセットアドレスが異なる.
    78 CPU例外ハンドラはこのジャンプå
    79 ˆã®ã‚ªãƒ•ã‚»ãƒƒãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã§åŒºåˆ¥ã™ã‚‹ã“とにし,
    80 ãã‚Œãžã‚Œç•°ãªã‚‹CPU例外ハンドラ番号を割り当てる.
    81 
    82   例外発生時の状æ
    83 ‹             ä¾‹å¤–の種類      例外番号  例外ベクタå
    84 ˆé ­ã‹ã‚‰ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆ
     66  例外発生時の状態             例外の種類      例外番号  例外ベクタ先頭からのオフセット
    8567  AArch64, EL1t(EL1, SP_EL0)  Synchronous         0        0x0000
    8668  AArch64, EL1t(EL1, SP_EL0)  SError              1        0x0180
     
    9274  AArch32, EL0 (EL0, SP_EL0)  SError              7        0x0780
    9375
    94 (3-4) CPUロック・割込みロック
     76(3-4) CPUロック・割込みロック
    9577
    96 CPUロックは,PSTATE.I および PSTATE.F をå
    97 ±ã« 1 にすることで実現する.
    98 ã‚«ãƒ¼ãƒãƒ«ç®¡ç†å¤–の割込みをサポートしないため,å
    99 ¨å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯ãƒ•ãƒ©ã‚°ã‚‚
    100 CPUロックと同様の実è£
    101 ã§ã‚る.ただし CPUロックフラグとは独立したフラグ
    102 ã¨ã—てå
    103 ¨å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯ãƒ•ãƒ©ã‚°ã‚’サポートする.å
    104 ·ä½“的にはSIL_LOC_INT呼び出し
    105 æ™‚にIおよびFフラグの状æ
    106 ‹ã‚’記憶しておき,SIL_UNL_INT でå
    107 ƒã®çŠ¶æ
    108 ‹ã«
    109 æˆ»ã—ている.
     78CPUロックは,PSTATE.I および PSTATE.F を共に 1 にすることで実現する.
     79カーネル管理外の割込みをサポートしないため,全割込みロックフラグも
     80CPUロックと同様の実装である.ただし CPUロックフラグとは独立したフラグ
     81として全割込みロックフラグをサポートする.具体的にはSIL_LOC_INT呼び出し
     82時にIおよびFフラグの状態を記憶しておき,SIL_UNL_INT で元の状態に
     83戻している.
    11084
    111 (3-5) 性能評価用システム時刻の参ç
    112 §ã«é–¢ã™ã‚‹è¦å®š
     85(3-5) 性能評価用システム時刻の参照に関する規定
    11386
    114 get_utmをサポートしない.
     87get_utmをサポートしない.
    11588
    11689
    117 (3-6) スタートアップルーチンでの初期化å†
    118 å®¹
     90(3-6) スタートアップルーチンでの初期化内容
    11991
    120 ã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒƒãƒ—ルーチンが前提とするプロセッサの状æ
    121 ‹ã¯ãƒ—ロセッサにより異なるため,
    122 ã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒƒãƒ—ルーチンはターゲット依存部にé
    123 ç½®ã—ている.
     92スタートアップルーチンが前提とするプロセッサの状態はプロセッサにより異なるため,
     93スタートアップルーチンはターゲット依存部に配置している.
    12494
    125 ä¾‹ã¨ã—てQEMU VIRT ボードの場合は以下のようになっている.
    126 ãƒ»ä¾‹å¤–レベルは既定でEL1
    127 ãƒ»ä½¿ç”¨ã‚¹ã‚¿ãƒƒã‚¯ã¯(EL1の場合,) SP_EL1
    128 ãƒ»èµ·å‹•ç›´å¾Œã¯PSTATEのFおよびIは1(IRQ,FIQ禁止)
     95例としてQEMU VIRT ボードの場合は以下のようになっている.
     96・例外レベルは既定でEL1
     97・使用スタックは(EL1の場合,) SP_EL1
     98・起動直後はPSTATEのFおよびIは1(IRQ,FIQ禁止)
    12999
    130 ã‚¹ã‚¿ãƒ¼ãƒˆã‚¢ãƒƒãƒ—ルーチンではスタックポインタの初期化,ベクタテーブルアドレスの設定,
    131 ãƒ¡ãƒ¢ãƒªã®åˆæœŸåŒ–などのå¿
    132 è¦ãªå‡¦ç†ã‚’行い,sta_ker を呼び出す.
     100スタートアップルーチンではスタックポインタの初期化,ベクタテーブルアドレスの設定,
     101メモリの初期化などの必要な処理を行い,sta_ker を呼び出す.
    133102
    134103
    135 (4) タイマドライバ関連のæƒ
    136 å ±
     104(4) タイマドライバ関連の情報
    137105
    138 ã‚«ãƒ¼ãƒãƒ«ã®ã‚¿ã‚¤ãƒ ãƒ†ã‚£ãƒƒã‚¯ã¨ã—て,Generic Timer を使用する,
    139 ãƒ†ã‚£ãƒƒã‚¯å‘¨æœŸã¯1msecとする.
     106カーネルのタイムティックとして,Generic Timer を使用する,
     107ティック周期は1msecとする.
    140108
    141109
    142 (5) ターゲット依存部での設定é 
    143 ç›®
     110(5) ターゲット依存部での設定項目
    144111
    145 ã‚¿ãƒ¼ã‚²ãƒƒãƒˆä¾å­˜éƒ¨ã§ã¯ä»¥ä¸‹ã®ãƒžã‚¯ãƒ­ã‚’定義するå¿
    146 è¦ãŒã‚る.
     112ターゲット依存部では以下のマクロを定義する必要がある.
    147113
    148    ãƒ»TMAX_INTNO     : 割込み番号の最大値(通常の割込み番号 + 15)
    149    ãƒ»TMIN_INTPRI    : 割込み優å
    150 ˆåº¦ã®æœ€å°å€¤ï¼ˆæœ€é«˜å€¤ï¼‰
    151    ãƒ»TIC_NUME       : タイムティックの周期の分子
    152    ãƒ»TIC_DENO       : タイムティックの周期の分母
    153    ãƒ»INTPRI_TIMER   : タイマ割込み割込み優å
    154 ˆåº¦
    155    ãƒ»INTATR_TIMER   : タイマ割込みの割込み属性
    156    ãƒ»DEFAULT_ISTKSZ : スタックサイズ(16byte単位で指定)
     114   ・TMAX_INTNO     : 割込み番号の最大値(通常の割込み番号 + 15)
     115   ・TMIN_INTPRI    : 割込み優先度の最小値(最高値)
     116   ・TIC_NUME       : タイムティックの周期の分子
     117   ・TIC_DENO       : タイムティックの周期の分母
     118   ・INTPRI_TIMER   : タイマ割込み割込み優先度
     119   ・INTATR_TIMER   : タイマ割込みの割込み属性
     120   ・DEFAULT_ISTKSZ : スタックサイズ(16byte単位で指定)
    157121
    158122
    159 (6) ディレクトリ構成・ファイル構成
     123(6) ディレクトリ構成・ファイル構成
    160124  ./arch/arm64/
    161125    ./MANIFEST
     
    185149    ./prc_user.txt
    186150
    187 (12) バージョン履歴
     151(12) バージョン履歴
    188152
    1891532018/05/30
    190  ãƒ»æœ€åˆã®ãƒªãƒªãƒ¼ã‚¹
     154 ・最初のリリース
Note: See TracChangeset for help on using the changeset viewer.