割り込みコントローラ
SOLID-OSでは、割り込み要求発生時に、登録した関数を呼び出すことができます。
関数は、コアサービスが内部で所有しているスタックを使用して、SVCモードで呼び出されます。
割り込みコントローラ関連のAPIを使用するには、solid_intc.h をインクルードしてください。
#include "solid_intc.h"
API
SOLID_INTC_HANDLER
-
typedef struct _SOLID_INTC_HANDLER_ SOLID_INTC_HANDLER
説明
割り込みハンドラ登録用構造体
定義
typedef struct _SOLID_INTC_HANDLER_ { int intno; int priority; int config; int (*func)(void*, SOLID_CPU_CONTEXT*); void* param; } SOLID_INTC_HANDLER;
メンバー
- intno
割り込み番号
- 0-15:
SGI (CallSGIで生成)
- 16-31:
PPI (各コア個別の割り込み)
- 31-255:
SPI (通常の割り込み)
- priority
処理優先度 0: 高 - 255: 低
- config
割り込み設定(ICFGR) 2bitのみ有効
- SGI:
無効
- PPI:
実装依存
- SPI:
0X/レベルトリガ 1X:エッジトリガ
- func
割り込み発生時に呼び出される関数
- param
割り込み発生時に関数に引き渡される第一引数
割り込み状態
-
SOLID_INTC_STATUS_ENABLED
-
SOLID_INTC_STATUS_PENDING
-
SOLID_INTC_STATUS_ACTIVE
定数
名前
値
説明
SOLID_INTC_STATUS_ENABLED
0x00000001
割り込みが有効になっていることを示します。
SOLID_INTC_STATUS_PENDING
0x00000002
割り込みが発生しているが、処理待ちであることを示します。
SOLID_INTC_STATUS_ACTIVE
0x00000004
割り込み処理を実行中であることを示します。 ただし、SOLIDでは多重割り込みに対応するため、割り込み処理を受け付けた時点で実行中をクリアします。
SOLID_INTC_Register
-
int SOLID_INTC_Register(SOLID_INTC_HANDLER *pHandler)
割り込み用のハンドラを登録します
ハンドラを登録した割り込みはDisable状態のままですので、使用する前に
SOLID_INTC_Enable()
を呼び出してください。- パラメータ:
pHandler -- 登録するハンドラ
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_UnRegister
-
int SOLID_INTC_UnRegister(SOLID_INTC_HANDLER *pHandler)
割り込み用のハンドラの登録を解除します
- パラメータ:
pHandler -- 登録を解除するハンドラ
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
ソフトウェア割り込み通知先用マクロ
SOLID_INTC_CallSGI
-
int SOLID_INTC_CallSGI(int id, unsigned long cpuBits)
ソフトウェア割り込み(SGI)を発生させます
割り込みコントローラの機能であり、ソフトウェア割り込み命令(SWI)とは異なります
- パラメータ:
id -- 割り込み番号(0-31)
cpuBits -- 発生させるCPUマスク (SOLID_INTC_CPUBITS_XXX, またはbit0:CPU0, bit1:CPU1,...)
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_Disable
-
int SOLID_INTC_Disable(int intno)
指定された割り込みの通知を禁止状態にします
- パラメータ:
intno -- 割り込み番号
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_Enable
-
int SOLID_INTC_Enable(int intno)
指定された割り込みの通知を許可状態にします
- パラメータ:
intno -- 割り込み番号
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_GetStatus
-
int SOLID_INTC_GetStatus(int intno, unsigned long *pStatus)
指定された割り込みの状態を取得します
- param intno:
割り込み番号
- param pStatus:
状態を格納するバッファ (SOLID_INTC_STATUS_XXX がOR状態で入ります)
- return:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_SetPriorityMask
-
int SOLID_INTC_SetPriorityMask(int threshold)
割り込みコントローラの割り込みマスク設定を変更します。
- パラメータ:
threshold -- 割り込みマスク
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_GetPriorityMask
-
int SOLID_INTC_GetPriorityMask(void)
割り込みコントローラの割り込みマスク設定を取得します。
- 戻り値:
現在の割り込みマスク値
SOLID_INTC_GetPriorityLevel
-
int SOLID_INTC_GetPriorityLevel(void)
割り込みコントローラの割り込み優先度の最大レベルを取得します。
- 戻り値:
最大レベル値
SOLID_INTC_GetMinIntNo
-
int SOLID_INTC_GetMinIntNo(void)
割り込みコントローラの割り込み番号の最小値を取得します。
- 戻り値:
最小値
SOLID_INTC_GetMaxIntNo
-
int SOLID_INTC_GetMaxIntNo(void)
割り込みコントローラの割り込み番号の最大値を取得します。
- 戻り値:
最大値
SOLID_INTC_GetIntPriority
-
int SOLID_INTC_GetIntPriority(int intno, int *pPriority)
指定された割り込みの優先度を取得します。
- パラメータ:
intno -- 割り込み番号
pPriority -- 優先度を格納するバッファ
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_SetIntPriority
-
int SOLID_INTC_SetIntPriority(int intno, int priority)
指定された割り込みの優先度を変更します。
- パラメータ:
intno -- 割り込み番号
priority -- 優先度
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_GetIntConfig
-
int SOLID_INTC_GetIntConfig(int intno, int *pConfig)
指定された割り込みのConfigを取得します。
- パラメータ:
intno -- 割り込み番号
pConfig -- Configを格納するバッファ
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_SetIntConfig
-
int SOLID_INTC_SetIntConfig(int intno, int config)
指定された割り込みのConfigを変更します。
- パラメータ:
intno -- 割り込み番号
config -- Config値(下位2ビットのみ有効)
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_ClearPending
-
int SOLID_INTC_ClearPending(int intno)
指定された割り込みのPendingビット(割り込み待ち状態)をクリアします。
GICがv1かつintnoがSGI(0-15)の場合、ハードウェアの制限としてクリアできません。
- パラメータ:
intno -- 割り込み番号
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SMP用API
SOLID_INTC_RegisterWithTargetProcess
-
int SOLID_INTC_RegisterWithTargetProcess(SOLID_INTC_HANDLER *pHandler, char mask)
割り込み通知先CPUを指定して割り込み用ハンドラを登録します。
- パラメータ:
pHandler -- 登録するハンドラ
mask -- 通知先CPU(bit0:CP0,bit1:CPU1,...)
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_SetTargetProcess
-
int SOLID_INTC_SetTargetProcess(int intno, char mask)
指定された割り込みの割り込み通知先CPUを変更します。
- パラメータ:
intno -- 割り込み番号
mask -- 通知先CPU(bit0:CP0,bit1:CPU1,...)
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_INTC_SetTargetProcess
-
int SOLID_INTC_GetTargetProcess(int intno, char *pMask)
指定された割り込みの割り込み通知先CPUを取得します。
- パラメータ:
intno -- 割り込み番号
pMask -- 通知先CPU(bit0:CP0,bit1:CPU1,...)を格納するバッファ
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー