I/Oリソースマネージャ
SOLID-OSはリソースマネージャにIOを登録することにより、自動的に仮想アドレスを割り付けます。
割り付けられた仮想アドレスは、キャッシュなし、バッファありの属性となっているため、IOに書き込み 処理をした後、その結果を確実に反映させるためには、DMB命令を使用する必要があります。
IOリソースの登録は、通常は 要実装関数 IMPL_IORES_GetConfig
を使って行います。
API
IOリソース関連のAPIを使用するには、solid_iores.h
をインクルードしてください。
#include "solid_iores.h"
SOLID_IORES_REGINFO
-
typedef struct _SOLID_IORES_REGINFO_ SOLID_IORES_REGINFO
SOLID_IORES_INFO
-
typedef struct _SOLID_IORES_INFO_ SOLID_IORES_INFO
-
struct _SOLID_IORES_INFO_
説明
IOリソース情報取得用構造体
定義
typedef struct _SOLID_IORES_INFO_ { SOLID_ADDRESS addr; size_t width; int extra; } SOLID_IORES_INFO;
メンバー
-
SOLID_ADDRESS addr
IOを割り当てた仮想アドレス
-
size_t width
IOのある範囲
-
int extra
intNo, bitNo等を格納
-
SOLID_ADDRESS addr
SOLID_IORES_Register
-
int SOLID_IORES_Register(SOLID_IORES_REGINFO *pInfo)
IOリソース管理にIO情報を登録します
- パラメータ:
pInfo -- 登録するIO情報 (この情報は、関数呼び出し後も保持したままとしてください)
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_IORES_CheckInfo
-
SOLID_IORES_REGINFO *SOLID_IORES_CheckInfo(const char *pName)
IOリソース管理に登録されているIO情報を取得します
- パラメータ:
pName -- 取得するIOリソース情報の名前(文字列, NULL終端)
- 戻り値:
NULL以外: IO情報へのポインタ
NULL: 該当する情報なし
SOLID_IORES_Use
-
int SOLID_IORES_Use(const char *pName)
IOリソースの使用開始を宣言します
これにより、IOが仮想アドレスにマップされます
- パラメータ:
pName -- 使用を開始するIOリソース情報の名前(文字列, NULL終端)
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_IORES_Unuse
-
int SOLID_IORES_Unuse(const char *pName)
IOリソースの使用終了を宣言します
これにより、IOが仮想アドレスからアンマップされます
- パラメータ:
pName -- 使用を終了するIOリソース情報の名前(文字列, NULL終端)
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_IORES_GetInfo
-
int SOLID_IORES_GetInfo(const char *pName, SOLID_IORES_INFO *pInfo)
IOリソースの割り当て状況を確認します
- パラメータ:
pName -- IOリソース情報の名前(文字列, NULL終端)
pInfo -- 取得したIO情報
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
要実装関数
IOリソース関連の要実装関数の定義は、impl_iores.h
にあります。
#include "impl_iores.h"
IMPL_IORES_GetConfig
-
void IMPL_IORES_GetConfig(SOLID_IORES_REGINFO **ppInfo, int *pNum)
SOLIDで使用するデバイスの物理アドレス等を取得する
この関数で取得されたデバイスは、SOLIDで自動的に仮想アドレスを割り付けます
- パラメータ:
ppInfo -- デバイス設定
pNum -- デバイス設定の個数
予約されたI/Oリソース名
一部のI/Oリソース名は、コアサービス内で予約されており、コアサービス内で使用します。
予約されたリソース名は、solid_iores.h
にマクロが定義されています。
-
SOLID_IORES_NAME_GICD
-
SOLID_IORES_NAME_GICC
-
SOLID_IORES_NAME_PL310
定数
名前
値
説明
extraの意味
SOLID_IORES_NAME_GICD
"ARM_GICD"
ARM GIC (PL390,GIC400) Distributor
使用可能な割り込み番号の最大値(32~1023)
SOLID_IORES_NAME_GICC
"ARM_GICC"
ARM GIC (PL390,GIC400) CPU Interface
割り込み優先度のレベル(2~256)
SOLID_IORES_NAME_PL310
"ARM_PL310"
ARM Level 2 Cache Controller (PL310, L2C-310)
なし