ntr_bootrom/trunk/IrisMainp/include/IrisOS.h

1222 lines
39 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//====================================================================
// IrisOS.h
// OSライブラリ
//
// Copyright (C) 2003-2004 NINTENDO Co.,Ltd.
//====================================================================
#ifndef _IRIS_OS_H
#define _IRIS_OS_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdlib.h>
#include <IrisTarget.h>
#include <IrisTypes.h>
//======================================================================
// ロック変数
//
//・カード/カートリッジ/CPU間共有内部ワークRAM/VRAM-C/D
// などのCPU間での共有リスースや、CPU間送信FIFO 等の専有リソース
// の排他制御ためにこの関数をご使用下さい。
//======================================================================
// ロックID
#define OS_UNLOCK_ID 0 // ロック変数がロックされていない場合のID
#define OS_MAINP_LOCKED_FLAG 0x40 // メインプロセッサによるロック確認フラグ
#define OS_MAINP_LOCK_ID_START 0x40 // メインプロセッサ用ロックIDの割り当て開始番号
#define OS_MAINP_LOCK_ID_END 0x6f // 割り当て終了番号
#define OS_MAINP_DBG_LOCK_ID 0x70 // デバッガ予約番号
#define OS_MAINP_SYSTEM_LOCK_ID 0x7f // システム予約番号
#define OS_SUBP_LOCKED_FLAG 0x80 // サブプロセッサによるロック確認フラグ
#define OS_SUBP_LOCK_ID_START 0x80 // サブプロセッサ用ロックIDの割り当て開始番号
#define OS_SUBP_LOCK_ID_END 0xaf // 割り当て終了番号
#define OS_SUBP_DBG_LOCK_ID 0xb0 // デバッガ予約番号
#define OS_SUBP_SYSTEM_LOCK_ID 0xbf // システム予約番号
#define OS_LOCK_SUCCESS 0 // ロック成功
#define OS_LOCK_ERROR -1 // ロックエラー
#define OS_UNLOCK_SUCCESS 0 // ロック解除成功
#define OS_UNLOCK_ERROR -2 // ロック解除エラー
#define OS_LOCK_FREE 0 // ロック解除中
#define OS_LOCK_ID_ERROR -3 // ロックIDエラー
// ロック変数構造体
typedef struct {
u32 lockFlag; // ロックフラグ試行モジュールID格納
u16 ownerID; // 取得モジュールID
u16 extension; // 拡張情報
} LockWord;
typedef vl LockWord vLockWord;
typedef struct {
u8 lockFlag; // ロックフラグ試行モジュールID格納
u8 ownerID; // 取得モジュールID
} LockByte;
typedef vl LockByte vLockByte;
//----------------------------------------------------------------------
// システムロック変数と共有リソース・アクセス権の初期化
//
//・システムロック変数を初期化し、共有リソースのデフォルトのアクセス権を
// サブプロセッサに渡します。
//
//・引数: なし
//
//・戻り値:なし
//
//※カートリッジ排他制御領域はデバッガも使用するためクリアされません。
//----------------------------------------------------------------------
void OS_InitLock(void);
//----------------------------------------------------------------------
// ロックIDの獲得
//
//・ロック変数へ設定するIDを獲得します。
//
//・引数: なし
//
//・戻り値:
// 0x40 0x6f ロックID
// OS_LOCK_ID_ERROR ロックID獲得失敗
//
//※IDは48種類までしか割り当てることができません。
// モジュール内にて複数のロック変数を制御する場合は
// できるだけ1つのIDを使用するようにして下さい。
//----------------------------------------------------------------------
s32 OS_GetLockID(void);
//----------------------------------------------------------------------
// スピンロック(ワード/バイト)
//
//・プロセッサ間やモジュール間で共有リソースを排他制御するための
// ロック変数のスピンロックを行います。
//・ロックが成功するまで試行し続けます。
//・プロセッサ間の共有リソースは必ずロック後に使用して下さい。
//・プロセッサ専有のリソースはタイミング的に調整できるのであれば
// ロックしなくても構いません。
// 専有リソースはデバッグ時に限定してロックすることもできます。
//
//・引数:
// lockID ロックID
// lockp ロック変数のポインタ
// CtrlFuncp リソース制御関数のポインタ
//
//・戻り値:
// OS_LOCK_SUCCESS ロック成功
// OS_LOCK_ID_ERROR ロックIDエラー
//
//※但し、メインメモリに対してはキャッシュ経由でなければ
// バイトアクセスはできないことに注意して下さい。
// ですので、メインメモリ上では基本的に OS_LockWord() を使用して下さい。
//----------------------------------------------------------------------
s32 OS_LockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void));
s32 OS_LockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void));
s32 OS_LockCard(u32 lockID); // カード
s32 OS_LockCartridge(u32 lockID); // カートリッジ
s32 OS_LockWramBlock0(u32 lockID); // CPU内部ワークRAM・ブロック0
s32 OS_LockWramBlock1(u32 lockID); // CPU内部ワークRAM・ブロック1
s32 OS_LockVramC(u32 lockID); //
s32 OS_LockVramD(u32 lockID); //
s32 OS_LockSendFifo(u32 lockID); // CPU間送信FIFO
s32 OS_LockDma0(u32 lockID); //
s32 OS_LockDma1(u32 lockID); //
s32 OS_LockDma2(u32 lockID); //
s32 OS_LockDma3(u32 lockID); //
s32 OS_LockTimer0(u32 lockID); // タイマー0
s32 OS_LockTimer1(u32 lockID); // タイマー1
s32 OS_LockTimer2(u32 lockID); // タイマー2
s32 OS_LockTimer3(u32 lockID); // タイマー3
//----------------------------------------------------------------------
// ロックの解除(ワード/バイト)
//
//・ロックを解除し、共有リソースのアクセス権をサブプロセッサに渡します。
//・ロックしていないモジュールが実行した場合には解除されず、
// OS_UNLOCK_ERROR が返されます。
//
//・引数:
// lockID ロックID
// lockp ロック変数のポインタ
// CtrlFuncp リソース制御関数のポインタ
//
//・戻り値:
// 正 ロック中直前に格納されていたID
// OS_UNLOCK_ERROR ロック解除エラー
// OS_LOCK_ID_ERROR ロックIDエラー
//
//※但し、メインメモリに対してはキャッシュ経由でなければ
// バイトアクセスはできないことに注意して下さい。
// ですので、メインメモリ上では基本的に OS_UnLockWord() を使用して下さい。
//----------------------------------------------------------------------
s32 OS_UnLockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void));
s32 OS_UnLockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void));
s32 OS_UnLockCard(u32 lockID); // カード
s32 OS_UnLockCartridge(u32 lockID); // カートリッジ
s32 OS_UnLockWramBlock0(u32 lockID); // CPU内部ワークRAM・ブロック0
s32 OS_UnLockWramBlock1(u32 lockID); // CPU内部ワークRAM・ブロック1
s32 OS_UnLockVramC(u32 lockID); //
s32 OS_UnLockVramD(u32 lockID); //
s32 OS_UnLockSendFifo(u32 lockID); // CPU間送信FIFO
s32 OS_UnLockDma0(u32 lockID); //
s32 OS_UnLockDma1(u32 lockID); //
s32 OS_UnLockDma2(u32 lockID); //
s32 OS_UnLockDma3(u32 lockID); //
s32 OS_UnLockTimer0(u32 lockID); // タイマー0
s32 OS_UnLockTimer1(u32 lockID); // タイマー1
s32 OS_UnLockTimer2(u32 lockID); // タイマー2
s32 OS_UnLockTimer3(u32 lockID); // タイマー3
//----------------------------------------------------------------------
// ロックの試行(ワード/バイト)
//
//・1回だけスピンロックを試行します。
//・プロセッサ間の共有リソースは必ずロック後に使用して下さい。
//・プロセッサ専有のリソースはタイミング的に調整できるのであれば
// ロックしなくても構いません。
// 専有リソースはデバッグ時に限定してロックすることもできます。
//
//・引数:
// lockID ロックID
// lockp ロック変数のポインタ
// CtrlFuncp リソース制御関数のポインタ
//
//・戻り値:
// 正 ロック中直前に格納されていたID
// OS_LOCK_SUCCESS ロック成功
// OS_LOCK_ID_ERROR ロックIDエラー
//
//※但し、メインメモリに対してはキャッシュ経由でなければ
// バイトアクセスはできないことに注意して下さい。
// ですので、メインメモリ上では基本的に OS_TryLockWord() を使用して下さい。
//----------------------------------------------------------------------
s32 OS_TryLockWord(u32 lockID, volatile LockWord *lockp, void (*CtrlFuncp)(void));
s32 OS_TryLockByte(u32 lockID, volatile LockByte *lockp, void (*CtrlFuncp)(void));
s32 OS_TryLockCard(u32 lockID); // カード
s32 OS_TryLockCartridge(u32 lockID); // カートリッジ
s32 OS_TryLockWramBlock0(u32 lockID); // CPU内部ワークRAM・ブロック0
s32 OS_TryLockWramBlock1(u32 lockID); // CPU内部ワークRAM・ブロック1
s32 OS_TryLockVramC(u32 lockID); //
s32 OS_TryLockVramD(u32 lockID); //
s32 OS_TryLockSendFifo(u32 lockID); // CPU間送信FIFO
s32 OS_TryLockDma0(u32 lockID); //
s32 OS_TryLockDma1(u32 lockID); //
s32 OS_TryLockDma2(u32 lockID); //
s32 OS_TryLockDma3(u32 lockID); //
s32 OS_TryLockTimer0(u32 lockID); // タイマー0
s32 OS_TryLockTimer1(u32 lockID); // タイマー1
s32 OS_TryLockTimer2(u32 lockID); // タイマー2
s32 OS_TryLockTimer3(u32 lockID); // タイマー3
//----------------------------------------------------------------------
// ロックフラグの読み込み(ワード/バイト)
//
//・ロックフラグを読み込みます。
//・ロック変数が解除されているかどうかを確認することができます。
//
//・引数:
// lockp ロック変数のポインタ
//
//・戻り値:
// 非0 ロック中直前に格納されていたID
// OS_LOCK_FREE ロック解除中
//
//※但し、メインメモリに対してはキャッシュ経由でなければ
// バイトアクセスはできないことに注意して下さい。
// ですので、メインメモリ上では基本的に OS_ReadLockWord() を使用して下さい。
//----------------------------------------------------------------------
s32 OS_ReadLockWord(volatile LockWord *lockp);
s32 OS_ReadLockByte(volatile LockByte *lockp);
// カード
#ifdef IRIS_TS
#define OS_ReadLockCard() OS_ReadLockWord((LockWord *)(CARD_LOCK_BUF))
#else
#define OS_ReadLockCard() OS_ReadLockCartridge() // カートリッジで代用
#endif
// カートリッジ
#define OS_ReadLockCartridge() OS_ReadLockWord((LockWord *)(CARTRIDGE_LOCK_BUF))
// CPU内部ワークRAM・ブロック0
#define OS_ReadLockWramBlock0() OS_ReadLockWord((LockWord *)(WRAM_BLOCK0_LOCK_BUF))
// CPU内部ワークRAM・ブロック1
#define OS_ReadLockWramBlock1() OS_ReadLockWord((LockWord *)(WRAM_BLOCK1_LOCK_BUF))
//
#define OS_ReadLockVramC() OS_ReadLockWord((LockWord *)(VRAM_C_LOCK_BUF))
//
#define OS_ReadLockVramD() OS_ReadLockWord((LockWord *)(VRAM_D_LOCK_BUF))
// CPU間送信FIFO
#define OS_ReadLockSendFifo() OS_ReadLockByte((LockByte *)(SEND_FIFO_LOCK_BUF))
//
#define OS_ReadLockDma0() OS_ReadLockByte((LockByte *)(DMA0_LOCK_BUF))
//
#define OS_ReadLockDma1() OS_ReadLockByte((LockByte *)(DMA1_LOCK_BUF))
//
#define OS_ReadLockDma2() OS_ReadLockByte((LockByte *)(DMA2_LOCK_BUF))
//
#define OS_ReadLockDma3() OS_ReadLockByte((LockByte *)(DMA3_LOCK_BUF))
// タイマー0
#define OS_ReadLockTimer0() OS_ReadLockByte((LockByte *)(TIMER0_LOCK_BUF))
// タイマー1
#define OS_ReadLockTimer1() OS_ReadLockByte((LockByte *)(TIMER1_LOCK_BUF))
// タイマー2
#define OS_ReadLockTimer2() OS_ReadLockByte((LockByte *)(TIMER2_LOCK_BUF))
// タイマー3
#define OS_ReadLockTimer3() OS_ReadLockByte((LockByte *)(TIMER3_LOCK_BUF))
//----------------------------------------------------------------------
// ロック変数の所有モジュールIDの読み込みワードバイト
//
//・ロック変数の所有モジュールID を読み込みます。
//・モジュールID が非0 の場合はその時点でどちらのプロセッサ側が
// 所有権を持っているのかを確認できます。
//・共有リソースの場合は「メインプロセッサ側が所有権を持っている状態」
// のみを割り込みを禁止することによって維持することができます。
// その他の状態はサブプロセッサが変化させてしまう可能性があります。
//・所有モジュールID が 0 であってもロック変数が解除されているとは限りません。
//
//・引数:
// lockp ロック変数のポインタ
//
//・戻り値: 所有モジュールID
//
//※但し、メインメモリに対してはキャッシュ経由でなければ
// バイトアクセスはできないことに注意して下さい。
// ですので、メインメモリ上では基本的に OS_ReadOwnerOfLockWord() を使用して下さい。
//----------------------------------------------------------------------
s32 OS_ReadOwnerOfLockWord(volatile LockWord *lockp);
s32 OS_ReadOwnerOfLockByte(volatile LockByte *lockp);
// カード
#ifdef IRIS_TS
#define OS_ReadOwnerOfLockCard() OS_ReadOwnerOfLockWord((LockWord *)(CARD_LOCK_BUF))
#else
#define OS_ReadOwnerOfLockCard() OS_ReadOwnerOfLockCartridge() // カートリッジで代用
#endif
// カートリッジ
#define OS_ReadOwnerOfLockCartridge() OS_ReadOwnerOfLockWord((LockWord *)(CARTRIDGE_LOCK_BUF))
// CPU内部ワークRAM・ブロック0
#define OS_ReadOwnerOfLockWramBlock0() OS_ReadOwnerOfLockWord((LockWord *)(WRAM_BLOCK0_LOCK_BUF))
// CPU内部ワークRAM・ブロック1
#define OS_ReadOwnerOfLockWramBlock1() OS_ReadOwnerOfLockWord((LockWord *)(WRAM_BLOCK1_LOCK_BUF))
//
#define OS_ReadOwnerOfLockVramC() OS_ReadOwnerOfLockWord((LockWord *)(VRAM_C_LOCK_BUF))
//
#define OS_ReadOwnerOfLockVramD() OS_ReadOwnerOfLockWord((LockWord *)(VRAM_D_LOCK_BUF))
// CPU間送信FIFO
#define OS_ReadOwnerOfLockSendFifo() OS_ReadOwnerOfLockByte((LockByte *)(SEND_FIFO_LOCK_BUF))
//
#define OS_ReadOwnerOfLockDma0() OS_ReadOwnerOfLockByte((LockByte *)(DMA0_LOCK_BUF))
//
#define OS_ReadOwnerOfLockDma1() OS_ReadOwnerOfLockByte((LockByte *)(DMA1_LOCK_BUF))
//
#define OS_ReadOwnerOfLockDma2() OS_ReadOwnerOfLockByte((LockByte *)(DMA2_LOCK_BUF))
//
#define OS_ReadOwnerOfLockDma3() OS_ReadOwnerOfLockByte((LockByte *)(DMA3_LOCK_BUF))
// タイマー0
#define OS_ReadOwnerOfLockTimer0() OS_ReadOwnerOfLockByte((LockByte *)(TIMER0_LOCK_BUF))
// タイマー1
#define OS_ReadOwnerOfLockTimer1() OS_ReadOwnerOfLockByte((LockByte *)(TIMER1_LOCK_BUF))
// タイマー2
#define OS_ReadOwnerOfLockTimer2() OS_ReadOwnerOfLockByte((LockByte *)(TIMER2_LOCK_BUF))
// タイマー3
#define OS_ReadOwnerOfLockTimer3() OS_ReadOwnerOfLockByte((LockByte *)(TIMER3_LOCK_BUF))
//----------------------------------------------------------------------
// ホールト
//
//・ARM946E-Sコアのみ停止させます。
//・該当する割り込みが許可IEにセットされている
// 割り込み要求IFセットにて復帰します。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_Halt() ((void) 0)
#else
void OS_Halt(void);
#endif
//======================================================================
// プログラムステータスレジスタ
//======================================================================
//----------------------------------------------------------------------
// カレント・プログラムステータスレジスタ セット
//
//・カレント・プログラムステータスレジスタに値をセットします。
//
//・引数: セットするカレント・プログラムステータスレジスタの値
//
//・戻り値:なし
//----------------------------------------------------------------------
void OS_SetCpsr(u32 param);
//----------------------------------------------------------------------
// カレント・プログラムステータスレジスタ値 獲得
//
//・カレント・プログラムステータスレジスタの値を獲得します。
//
//・引数: なし
//
//・戻り値:カレント・プログラムステータスレジスタの値
//----------------------------------------------------------------------
u32 OS_GetCpsr(void);
//----------------------------------------------------------------------
// イネーブル/ディセーブル
//
//・カレント・プログラムステータスレジスタのIRQを
// イネーブル/ディセーブルにします。
//
//・引数: なし
//
//・戻り値:変更前のカレント・プログラムステータスレジスタの値
//----------------------------------------------------------------------
u32 OS_EnableCpsrIRQ(void);
u32 OS_DisableCpsrIRQ(void);
//----------------------------------------------------------------------
// イネーブル/ディセーブル
//
//・カレント・プログラムステータスレジスタのFIQ&IRQを
// イネーブル/ディセーブルにします。
//
//・引数: なし
//
//・戻り値:変更前のカレント・プログラムステータスレジスタの値
//----------------------------------------------------------------------
u32 OS_EnableCpsrFIQ_IRQ(void);
u32 OS_DisableCpsrFIQ_IRQ(void);
//======================================================================
// 例外ベクタ
//======================================================================
//----------------------------------------------------------------------
// 例外ベクタを上位/下位アドレスへ移動
//
//・例外ベクタを上位アドレスまたは下位アドレスへ移動します。
//・上位アドレス領域にはシステムROM、下位アドレス領域には命令TCMが
// マッピングされています。
//・デフォルトではシステムROMに設定されていますが、命令TCMへ移動する
// ことによって、DMAとの衝突を避けることができます。
//・命令TCMへ移動する場合はあらかじめ適切なプログラムを転送しておく
// 必要があります。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_UpperExceptionVector() ((void) 0)
#define OS_LowerExceptionVector() ((void) 0)
#else
void OS_UpperExceptionVector(void);
void OS_LowerExceptionVector(void);
#endif
//======================================================================
// プロテクションユニット
//======================================================================
//----------------------------------------------------------------------
// プロテクションユニット イネーブル/ディセーブル
//
//・プロテクションユニットをイネーブル/ディセーブルにします。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_EnableProtectUnit() ((void) 0)
#define OS_DisableProtectUnit() ((void) 0)
#else
void OS_EnableProtectUnit(void);
void OS_DisableProtectUnit(void);
#endif
//======================================================================
// 命令キャッシュ
//======================================================================
//----------------------------------------------------------------------
// 命令キャッシュ イネーブル/ディセーブル
//
//・命令キャッシュをイネーブル/ディセーブルにします。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_EnableICache() ((void) 0)
#define OS_DisableICache() ((void) 0)
#else
void OS_EnableICache(void);
void OS_DisableICache(void);
#endif
//----------------------------------------------------------------------
// 命令キャッシュ 無効化
//
//・命令キャッシュを無効化します。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_InvalidateICache() ((void) 0)
#else
void OS_InvalidateICache(void);
#endif
//----------------------------------------------------------------------
// 命令キャッシュラインのアドレスによる無効化
//
//・指定アドレス範囲が命令キャッシュに存在する場合に
// そのラインを無効化します。
//
//・引数:
// addr 指定アドレス
// startp スタートアドレス
// size サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_InvalidateICacheAddr(addr) ((void) 0)
#define OS_InvalidateICacheAddrs(startp, size) ((void) 0)
#else
void OS_InvalidateICacheAddr(void *addr);
void OS_InvalidateICacheAddrs(void *startp, u32 size);
#endif
//----------------------------------------------------------------------
// 命令キャッシュラインのアドレスによるプリフェッチ
//
//・指定アドレス範囲が命令キャッシュに存在しない場合に
// そのラインのプリフェッチを行います。
//
//・引数:
// addr 指定アドレス
// startp スタートアドレス
// size サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_PrefetchICacheAddr(addr) ((void) 0)
#define OS_PrefetchICacheAddrs(startp, size) ((void) 0)
#else
void OS_PrefetchICacheAddr(void *addr);
void OS_PrefetchICacheAddrs(void *startp, u32 size);
#endif
//----------------------------------------------------------------------
// 命令キャッシュ ロックダウン
//
//・指定アドレス範囲を命令キャッシュ内にロックダウンします。
//
//・引数:
// startp スタートアドレス
// size サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_LockdownICache(addr) ((void) 0)
#else
void OS_LockdownICache(void *startp, u32 size);
#endif
//======================================================================
// データキャッシュ
//======================================================================
//----------------------------------------------------------------------
// データキャッシュ イネーブル/ディセーブル
//
//・データキャッシュをイネーブル/ディセーブルにします。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_EnableDCache() ((void) 0)
#define OS_DisableDCache() ((void) 0)
#else
void OS_EnableDCache(void);
void OS_DisableDCache(void);
#endif
//----------------------------------------------------------------------
// データキャッシュ 無効化
//
//・データキャッシュを無効化します。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_InvalidateDCache() ((void) 0)
#else
void OS_InvalidateDCache(void);
#endif
//----------------------------------------------------------------------
// データキャッシュラインのアドレスによる無効化
//
//・指定アドレス範囲がデータキャッシュに存在する場合に
// そのラインを無効化します。
//
//・引数:
// addr 指定アドレス
// startp スタートアドレス
// size サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_InvalidateDCacheAddr(addr) ((void) 0)
#define OS_InvalidateDCacheAddrs(startp, size) ((void) 0)
#else
void OS_InvalidateDCacheAddr(void *addr);
void OS_InvalidateDCacheAddrs(void *startp, u32 size);
#endif
//----------------------------------------------------------------------
// データキャッシュ クリーン
//
//・データキャッシュ上のデータを実メモリへ出力してクリーンにします。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_CleanDCache() ((void) 0)
#else
void OS_CleanDCache(void);
#endif
//----------------------------------------------------------------------
// データキャッシュラインのアドレスによるクリーン
//
//・指定アドレス範囲のデータキャッシュ上のデータを実メモリへ出力して
// そのラインをクリーンにします。
//
//・引数:
// addr 指定アドレス
// startp スタートアドレス
// size サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_CleanDCacheAddr(addr) ((void) 0)
#define OS_CleanDCacheAddrs(startp, size) ((void) 0)
#else
void OS_CleanDCacheAddr(void *addr);
void OS_CleanDCacheAddrs(void *startp, u32 size);
#endif
//----------------------------------------------------------------------
// データキャッシュラインのインデックスによるクリーン
//
//・指定インデックス範囲のデータキャッシュ上のデータを実メモリへ出力して
// そのラインをクリーンにします。
//
//・引数:
// param パラメータ
// size サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_CleanDCacheIndex(param) ((void) 0)
#define OS_CleanDCacheIndices(param, size) ((void) 0)
#else
void OS_CleanDCacheIndex(u32 param);
void OS_CleanDCacheIndices(u32 param, u32 size);
#endif
//----------------------------------------------------------------------
// データキャッシュ クリーン&無効化
//
//・データキャッシュ上のデータを実メモリへ出力してクリーンした後で
// 無効化します。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_Clean2InvalidateDCache() ((void) 0)
#else
void OS_Clean2InvalidateDCache(void);
#endif
//----------------------------------------------------------------------
// データキャッシュラインのアドレスによるクリーン&無効化
//
//・指定アドレス範囲のデータキャッシュ上のデータを実メモリへ出力して
// そのラインをクリーンにした後に無効化します。
//
//・引数:
// addr 指定アドレス
// startp スタートアドレス
// size サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_Clean2InvalidateDCacheAddr(addr) ((void) 0)
#define OS_Clean2InvalidateDCacheAddrs(startp, size) ((void) 0)
#else
void OS_Clean2InvalidateDCacheAddr(void *addr);
void OS_Clean2InvalidateDCacheAddrs(void *startp, u32 size);
#endif
//----------------------------------------------------------------------
// データキャッシュラインのインデックスによるクリーン&無効化
//
//・指定インデックス範囲のデータキャッシュ上のデータを実メモリへ出力して
// そのラインをクリーンにした後に無効化します。
//
//・引数:
// param パラメータ
// size サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_Clean2InvalidateDCacheIndex(param) ((void) 0)
#define OS_Clean2InvalidateDCacheIndices(param, size) ((void) 0)
#else
void OS_Clean2InvalidateDCacheIndex(u32 param);
void OS_Clean2InvalidateDCacheIndices(u32 param, u32 size);
#endif
//----------------------------------------------------------------------
// データキャッシュラインのアドレスによるプリロード
//
//・指定アドレス範囲がデータキャッシュに存在しない場合に
// そのラインのプリロードを行います。
//
//・引数:
// addr 指定アドレス
// startp スタートアドレス
// size サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_PreloadDCacheAddr(addr) ((void) 0)
#define OS_PreloadDCacheAddrs(startp, size) ((void) 0)
#else
void OS_PreloadDCacheAddr(void *addr);
void OS_PreloadDCacheAddrs(void *startp, u32 size);
#endif
//----------------------------------------------------------------------
// データキャッシュ ロックダウン
//
//・指定アドレス範囲をデータキャッシュ内にロックダウンします。
//
//・引数:
// startp スタートアドレス
// size サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_LockdownDCache(startp, size) ((void) 0)
#else
void OS_LockdownDCache(void *startp, u32 size);
#endif
//======================================================================
// ライトバッファ
//======================================================================
//----------------------------------------------------------------------
// ライトバッファ エンプティ待ち
//
//・ライトバッファがエンプティになるまで待ちます。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_WaitWriteBufferEmpty() ((void) 0)
#else
void OS_WaitWriteBufferEmpty(void);
#endif
//======================================================================
// 命令TCM
//======================================================================
//----------------------------------------------------------------------
// 命令TCM イネーブル/ディセーブル
//
//・命令TCMをイネーブル/ディセーブルにします。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_EnableITCM() ((void) 0)
#define OS_DisableITCM() ((void) 0)
#else
void OS_EnableITCM(void);
void OS_DisableITCM(void);
#endif
//----------------------------------------------------------------------
// 命令TCMパラメータ セット
//
//・命令TCMの有効エリアサイズをセットします。
//
//・引数:
// param 有効エリアサイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_SetParamITCM(param) ((void) 0)
#else
void OS_SetParamITCM(u32 param);
#endif
//----------------------------------------------------------------------
// 命令TCMパラメータ 獲得
//
//・命令TCMの有効エリアサイズを獲得します。
//
//・引数: なし
//
//・戻り値:有効エリアサイズ
//----------------------------------------------------------------------
#ifdef IRIS_BB
#else
u32 OS_GetParamITCM(void);
#endif
//======================================================================
// データTCM
//======================================================================
//----------------------------------------------------------------------
// データTCM イネーブル/ディセーブル
//
//・データTCMをイネーブル/ディセーブルにします。
//
//・引数: なし
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_EnableDTCM() ((void) 0)
#define OS_DisableDTCM() ((void) 0)
#else
void OS_EnableDTCM(void);
void OS_DisableDTCM(void);
#endif
//----------------------------------------------------------------------
// データTCMパラメータ セット
//
//・データTCMのベースアドレスと有効エリアサイズをセットします。
//
//・引数:
// param ベースアドレス&有効エリアサイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_SetParamDTCM() ((void) 0)
#else
void OS_SetParamDTCM(u32 param);
#endif
//----------------------------------------------------------------------
// データTCMパラメータ 獲得
//
//・データTCMのベースアドレスと有効エリアサイズを獲得します。
//
//・引数: なし
//
//・戻り値:ベースアドレス&有効エリアサイズ
//----------------------------------------------------------------------
#ifdef IRIS_BB
#else
u32 OS_GetParamDTCM(void);
#endif
//======================================================================
// プロテクションリージョン
//======================================================================
//----------------------------------------------------------------------
// プロテクションリージョン毎の命令キャッシュ イネーブル/ディセーブル
//
//・プロテクションリージョン毎に命令キャッシュをイネーブル/ディセーブルにします。
//
//・引数:
// flags フラグ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_EnableICache4PR() ((void) 0)
#define OS_DisableICache4PR() ((void) 0)
#else
void OS_EnableICache4PR(u32 flags);
void OS_DisableICache4PR(u32 flags);
#endif
//----------------------------------------------------------------------
// プロテクションリージョン毎のデータキャッシュ イネーブル/ディセーブル
//
//・プロテクションリージョン毎にデータキャッシュをイネーブル/ディセーブルにします。
//
//・引数:
// flags フラグ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_EnableDCache4PR() ((void) 0)
#define OS_DisableDCache4PR() ((void) 0)
#else
void OS_EnableDCache4PR(u32 flags);
void OS_DisableDCache4PR(u32 flags);
#endif
//----------------------------------------------------------------------
// プロテクションリージョン毎のライトバッファ イネーブル/ディセーブル
//
//・プロテクションリージョン毎にライトバッファをイネーブル/ディセーブルにします。
//
//・引数:
// flags フラグ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_EnableWriteBuffer4PR(flags) ((void) 0)
#define OS_DisableWriteBuffer4PR(flags) ((void) 0)
#else
void OS_EnableWriteBuffer4PR(u32 flags);
void OS_DisableWriteBuffer4PR(u32 flags);
#endif
//----------------------------------------------------------------------
// プロテクションリージョン毎の命令キャッシュ イネーブルフラグ獲得
//
//・プロテクションリージョン毎に命令キャッシュがイネーブルかどうかを返します。
//
//・引数: なし
//
//・戻り値:(各プロテクションリージョンに対応するビットに対して)
// 1 イネーブル
// 0 ディセーブル
//----------------------------------------------------------------------
#ifdef IRIS_BB
#else
u8 OS_GetICacheEnableFlags4PR(void);
#endif
//----------------------------------------------------------------------
// プロテクションリージョン毎のデータキャッシュ イネーブルフラグ獲得
//
//・プロテクションリージョン毎にデータキャッシュがイネーブルかどうかを返します。
//
//・引数: なし
//
//・戻り値:(各プロテクションリージョンに対応するビットに対して)
// 1 イネーブル
// 0 ディセーブル
//----------------------------------------------------------------------
#ifdef IRIS_BB
#else
u8 OS_GetDCacheEnableFlags4PR(void);
#endif
//----------------------------------------------------------------------
// プロテクションリージョン毎のライトバッファ・イネーブルフラグ 獲得
//
//・プロテクションリージョン毎にライトバッファがイネーブルかどうかを返します。
//
//・引数: なし
//
//・戻り値:(各プロテクションリージョンに対応するビットに対して)
// 1 イネーブル
// 0 ディセーブル
//----------------------------------------------------------------------
#ifdef IRIS_BB
#else
u8 OS_GetWriteBufferEnableFlags4PR(void);
#endif
//----------------------------------------------------------------------
// プロテクションリージョン毎の命令アクセス制限 セット
//
//・プロテクションリージョン毎の命令アクセス制限をセットします。
//
//・引数:
// setMask セットマスク
// flags フラグ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_SetIPermissions4PR(setMask, flags) ((void) 0)
#else
void OS_SetIPermissions4PR(u32 setMask, u32 flags);
#endif
//----------------------------------------------------------------------
// プロテクションリージョン毎のデータアクセス制限 セット
//
//・プロテクションリージョン毎のデータアクセス制限をセットします。
//
//・引数:
// setMask セットマスク
// flags フラグ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_SetDPermissions4PR(setMask, flags) ((void) 0)
#else
void OS_SetDPermissions4PR(u32 setMask, u32 flags);
#endif
//----------------------------------------------------------------------
// プロテクションリージョン毎の命令アクセス制限 獲得
//
//・プロテクションリージョン毎の命令アクセス制限を獲得します。
//
//・引数: なし
//
//・戻り値:(各プロテクションリージョンに対応するビットに対して)
// C5_PERMIT_NA アクセス不許可
// C5_PERMIT_RW リードライト許可
// C5_PERMIT_RO リードオンリー許可
//----------------------------------------------------------------------
#ifdef IRIS_BB
#else
u32 OS_GetIPermissions4PR(void);
#endif
//----------------------------------------------------------------------
// プロテクションリージョン毎のデータアクセス制限 獲得
//
//・プロテクションリージョン毎のデータアクセス制限を獲得します。
//
//・引数: なし
//
//・戻り値:(各プロテクションリージョンに対応するビットに対して)
// C5_PERMIT_NA アクセス不許可
// C5_PERMIT_RW リードライト許可
// C5_PERMIT_RO リードオンリー許可
//----------------------------------------------------------------------
#ifdef IRIS_BB
#else
u32 OS_GetDPermissions4PR(void);
#endif
//----------------------------------------------------------------------
// 各プロテクションリージョンのパラメータ セット
//
//・プロテクションリージョン毎のベースアドレスとサイズをセットします。
//
//・引数:
// regionNo リージョンNo
// param ベースアドレス&サイズ
//
//・戻り値:なし
//----------------------------------------------------------------------
#ifdef IRIS_BB
#define OS_SetProtectRegion(regionNo, param) ((void) 0)
#else
#define OS_SetProtectRegion(regionNo, param) OS_SetProtectRegionPriv(regionNo, param)
void OS_SetProtectRegion0(u32 param);
void OS_SetProtectRegion1(u32 param);
void OS_SetProtectRegion2(u32 param);
void OS_SetProtectRegion3(u32 param);
void OS_SetProtectRegion4(u32 param);
void OS_SetProtectRegion5(u32 param);
void OS_SetProtectRegion6(u32 param);
void OS_SetProtectRegion7(u32 param);
// 中間マクロ(下記のマクロは直接使用しないで下さい)
#define OS_SetProtectRegionPriv(regionNo, param) OS_SetProtectRegion##regionNo##(param)
#endif
//----------------------------------------------------------------------
// 各プロテクションリージョンのパラメータ 獲得
//
//・プロテクションリージョン毎のベースアドレスとサイズを獲得します。
//
//・引数:
// regionNo リージョンNo
//
//・戻り値:各プロテクションリージョンのベースアドレス&サイズ
//----------------------------------------------------------------------
#ifdef IRIS_BB
#else
#define OS_GetProtectRegion(regionNo) OS_GetProtectRegionPriv(regionNo)
u32 OS_GetProtectRegion0(void);
u32 OS_GetProtectRegion1(void);
u32 OS_GetProtectRegion2(void);
u32 OS_GetProtectRegion3(void);
u32 OS_GetProtectRegion4(void);
u32 OS_GetProtectRegion5(void);
u32 OS_GetProtectRegion6(void);
u32 OS_GetProtectRegion7(void);
// 中間マクロ(下記のマクロは直接使用しないで下さい)
#define OS_GetProtectRegionPriv(regionNo, param) OS_GetProtectRegion##regionNo##()
#endif
#ifdef __cplusplus
}
#endif
#endif // _IRIS_OS_H