ata_mem

概要

メモリ・オブジェクトの登録

C言語形式

 ER      ata_mem ( T_AMEM *pk_amem , ACVCT *p_acvct );
パラメータ

I/O

パラメータ

説明

I

 T_AMEM  *pk_amem;
メモリ・オブジェクト登録情報を格納した領域へのポインタ

I

 ACVCT   *p_acvct;
アクセス許可ベクタを格納した領域へのポインタ



【 メモリ・オブジェクト登録情報T_AMEMの構造 】

 typedef struct  t_amem {
         ATR     mematr;         /*メモリ・オブジェクト属性*/
         VP      base;           /*メモリ・オブジェクトの先頭アドレス*/
         SIZE    size;           /*メモリ・オブジェクトのサイズ(バイト数)*/
 } T_AMEM;


【 アクセス許可ベクタACVCTの構造 】

 typedef struct  acvct {
         ACPTN   acptn1;         /*オペランド・リード・アクセス許可パターン*/
         ACPTN   acptn2;         /*オペランド・ライト・アクセス許可パターン*/
         ACPTN   acptn3;         /*実行アクセス許可パターン*/
 } ACVCT;


機能

本サービス・コールは,信頼されたドメインに所属するタスクからのみ呼び出せます。

baseで示されたアドレスからsizeバイトの領域を,p_acvctで指定されたアクセス許可ベクタを持つメモリ・オブジェクトとして登録します。

アクセス許可パターンは,ビットN-1がドメインID#Nに所属するタスクからのアクセス許可を示し,1が許可,0が禁止を示します。

指定するメモリ・オブジェクト領域は,以下を満たす必要があります。

A ) 先頭アドレス(base)は16バイト境界であること。そうでない場合はE_PARエラーを返します。

B ) サイズ(size)は16の整数倍であること。そうでない場合はE_PARエラーを返します。

C ) ユーザ・スタックおよびメモリ・オブジェクトと重なっていないこと。そうでない場合,エラーは検出されず,システムの正常な動作は保証されません。

備考1 アクセス許可ベクタを設定するマクロとして,以下が用意されています。

- TACT_SRW
すべてのアクセスがすべてのドメインに許可されることを示すアクセス許可ベクタを返します。初期代入文の右辺にのみ記述可能。

- TACT_SRO
オペランド・ライト・アクセスはすべてのドメインに禁止され,オペランド・リードアクセスおよび実行アクセスはすべてのドメインに許可されていることを示すアクセス許可ベクタを返します。初期代入文の右辺にのみ記述可能。

- ACVCT TACT_PRW( ID domid )
すべてのアクセス(オペランド・リード,オペランド・ライト,実行)が,domidで指定されたドメインにのみ許可されていることを示すアクセス許可ベクタを返します。初期代入文の右辺にのみ記述可能。

- ACVCT TACT_PRO( ID domid )
オペランド・リード・アクセスおよび実行アクセスがdomidで指定されたドメインにのみ許可され,オペランド・ライト・アクセスがすべてのドメインに禁止されていることを示すアクセス許可ベクタを返します。初期代入文の右辺にのみ記述可能。

- ACVCT TACT_SRPW( ID domid )
オペランド・リード・アクセスおよび実行アクセスがすべてのドメインにのみ許可され,オペランド・ライト・アクセスがdomidで指定されたドメインにのみ許可されていることを示すアクセス許可ベクタを返します。初期代入文の右辺にのみ記述可能。

備考2 アクセス許可パターンを設定するマクロとして,以下が用意されています。

- TACP_SHARED
すべてのドメインがアクセスできることを示すアクセス許可パターンを返します。

- ACPTN TACP( ID domid )
domidで指定されたドメインからのみアクセス可能であることを示すアクセス許可パターンを返します。

備考3 メモリ・オブジェクト属性(mematr)は,単に無視されます。

戻り値

マクロ

数値

意味

E_OK

0

正常終了

E_PAR

-17

パラメータ・エラー

- pk_amem == NULL

- baseが16バイト境界でない。

- sizeが16の整数倍でない。

- p_acvct == NULL

- acptn1 == acptn2 == acptn3 == 0

- acptn1acptn2,またはacptn3の最大ドメインID(VTMAX_DOMAIN)より大きなドメインIDに対応するビットが1。

- size == 0

- base + size > 0x100000000

E_CTX

-25

コンテキスト・エラー

- CPUロック状態から本サービス・コールを発行した。

- 非タスクから本サービス・コールを発行した。

- 「PSW.IPL > カーネル割り込みマスクレベル」の状態から本サービス・コールを発行した。

E_MACV

-26

メモリ・アクセス違反

- スタック・ポインタが呼出しタスクのユーザ・スタック領域の範囲外を指している。

- 呼び出しタスクからのpk_amemが示す領域に対するオペランド・リード・アクセス許可がない。

- 呼び出しタスクからのp_acvctが示す領域に対するオペランド・リード・アクセス許可がない。

E_OACV

-27

オブジェクト・アクセス違反

- 呼出しタスクは,信頼されたドメインに所属していない。

- あるドメインにアクセス許可されるメモリ・オブジェクトが7個を超える。

E_OBJ

-41

オブジェクト状態不正

- 既にbaseが同じメモリ・オブジェクトが登録されている。