割り込みコントローラ

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_INTC_UnRegister

int SOLID_INTC_UnRegister(SOLID_INTC_HANDLER *pHandler)

割り込み用のハンドラの登録を解除します

パラメータ:

pHandler -- 登録を解除するハンドラ

戻り値:

ソフトウェア割り込み通知先用マクロ

SOLID_INTC_CPUBITS_ALL
SOLID_INTC_CPUBITS_OTHERS
SOLID_INTC_CPUBITS_SELF

定数

名前

説明

SOLID_INTC_CPUBITS_ALL

-1UL

全てのCPUに対してソフトウェア割り込みを通知します。

SOLID_INTC_CPUBITS_OTHERS

-2UL

自CPU以外のCPUに対してソフトウェア割り込みを通知します。

SOLID_INTC_CPUBITS_SELF

-3UL

自CPUに対してソフトウェア割り込みを通知します。

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_INTC_Disable

int SOLID_INTC_Disable(int intno)

指定された割り込みの通知を禁止状態にします

パラメータ:

intno -- 割り込み番号

戻り値:

SOLID_INTC_Enable

int SOLID_INTC_Enable(int intno)

指定された割り込みの通知を許可状態にします

パラメータ:

intno -- 割り込み番号

戻り値:

SOLID_INTC_GetStatus

int SOLID_INTC_GetStatus(int intno, unsigned long *pStatus)

指定された割り込みの状態を取得します

param intno:

割り込み番号

param pStatus:

状態を格納するバッファ (SOLID_INTC_STATUS_XXX がOR状態で入ります)

return:

SOLID_INTC_SetPriorityMask

int SOLID_INTC_SetPriorityMask(int threshold)

割り込みコントローラの割り込みマスク設定を変更します。

パラメータ:

threshold -- 割り込みマスク

戻り値:

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_INTC_SetIntPriority

int SOLID_INTC_SetIntPriority(int intno, int priority)

指定された割り込みの優先度を変更します。

パラメータ:
  • intno -- 割り込み番号

  • priority -- 優先度

戻り値:

SOLID_INTC_GetIntConfig

int SOLID_INTC_GetIntConfig(int intno, int *pConfig)

指定された割り込みのConfigを取得します。

パラメータ:
  • intno -- 割り込み番号

  • pConfig -- Configを格納するバッファ

戻り値:

SOLID_INTC_SetIntConfig

int SOLID_INTC_SetIntConfig(int intno, int config)

指定された割り込みのConfigを変更します。

パラメータ:
  • intno -- 割り込み番号

  • config -- Config値(下位2ビットのみ有効)

戻り値:

SOLID_INTC_ClearPending

int SOLID_INTC_ClearPending(int intno)

指定された割り込みのPendingビット(割り込み待ち状態)をクリアします。

GICがv1かつintnoがSGI(0-15)の場合、ハードウェアの制限としてクリアできません。

パラメータ:

intno -- 割り込み番号

戻り値:

SMP用API

SOLID_INTC_RegisterWithTargetProcess

int SOLID_INTC_RegisterWithTargetProcess(SOLID_INTC_HANDLER *pHandler, char mask)

割り込み通知先CPUを指定して割り込み用ハンドラを登録します。

パラメータ:
  • pHandler -- 登録するハンドラ

  • mask -- 通知先CPU(bit0:CP0,bit1:CPU1,...)

戻り値:

SOLID_INTC_SetTargetProcess

int SOLID_INTC_SetTargetProcess(int intno, char mask)

指定された割り込みの割り込み通知先CPUを変更します。

パラメータ:
  • intno -- 割り込み番号

  • mask -- 通知先CPU(bit0:CP0,bit1:CPU1,...)

戻り値:

SOLID_INTC_SetTargetProcess

int SOLID_INTC_GetTargetProcess(int intno, char *pMask)

指定された割り込みの割り込み通知先CPUを取得します。

パラメータ:
  • intno -- 割り込み番号

  • pMask -- 通知先CPU(bit0:CP0,bit1:CPU1,...)を格納するバッファ

戻り値: