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
struct _SOLID_IORES_REGINFO_

説明

IOリソース登録用構造体

定義

typedef struct _SOLID_IORES_REGINFO_ {
    const char* pName;
    SOLID_PHYADDRESS addr;
    size_t width;
    int extra;
} SOLID_IORES_REGINFO;

メンバー

const char *pName

IO名称

SOLID_PHYADDRESS addr

IOのある物理アドレス

size_t width

IOのある範囲

int extra

intNo, bitNo等を格納

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_IORES_Register

int SOLID_IORES_Register(SOLID_IORES_REGINFO *pInfo)

IOリソース管理にIO情報を登録します

パラメータ:
  • pInfo -- 登録するIO情報 (この情報は、関数呼び出し後も保持したままとしてください)

戻り値:

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_IORES_Unuse

int SOLID_IORES_Unuse(const char *pName)

IOリソースの使用終了を宣言します

これにより、IOが仮想アドレスからアンマップされます

パラメータ:
  • pName -- 使用を終了するIOリソース情報の名前(文字列, NULL終端)

戻り値:

SOLID_IORES_GetInfo

int SOLID_IORES_GetInfo(const char *pName, SOLID_IORES_INFO *pInfo)

IOリソースの割り当て状況を確認します

パラメータ:
  • pName -- IOリソース情報の名前(文字列, NULL終端)

  • pInfo -- 取得したIO情報

戻り値:

要実装関数

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)

なし