XINU
Functions
ptreset.c File Reference

ポートをリセットを行う。 More...

#include <xinu.h>
Include dependency graph for ptreset.c:

Go to the source code of this file.

Functions

syscall ptreset (int32 portid, int32(*disp)(int32))
 ポートをリセットを行う。 More...
 

Detailed Description

ポートをリセットを行う。

待機中のプロセスとメッセージを解放した後、ポートを再利用できるようにする。

Definition in file ptreset.c.

Function Documentation

◆ ptreset()

syscall ptreset ( int32  portid,
int32(*)(int32 disp 
)

ポートをリセットを行う。

待機中のプロセスとメッセージを解放した後、ポートを再利用できるようにする。
Step1. 割り込みを禁止する。
Step2. ポートIDが不正、もしくはポートがALLOC状態でなければ割り込み状態を復元し、処理を終了する。
Step3. ポートを用いたメッセージと待機中プロセスを解放し、セマフォはリセットする。
Step4. 割り込み状態を復元する。

Parameters
[in]portid削除対象のポート
[in]disp待機メッセージ処分用の関数ポインタ
Returns
成功時はOK、ポートIDが不正もしくはポートがALLOC状態以外の場合はSYSERRを返す。

Definition at line 21 of file ptreset.c.

References _ptclear(), disable(), isbadport, OK, porttab, PT_ALLOC, ptentry::ptstate, restore(), and SYSERR.

22 {
23  intmask mask; /* Saved interrupt mask */
24  struct ptentry *ptptr; /* Pointer to port table entry */
25 
26  mask = disable();
27  if (isbadport(portid) ||
28  (ptptr = &porttab[portid])->ptstate != PT_ALLOC)
29  {
30  restore(mask);
31  return SYSERR;
32  }
33  _ptclear(ptptr, PT_ALLOC, disp);
34  restore(mask);
35  return OK;
36 }
void _ptclear(struct ptentry *, uint16, int32(*)(int32))
ポートを用いたメッセージと待機中プロセスを解放する。
Definition: ptclear.c:24
void restore(intmask)
ポートテーブルエントリ
Definition: ports.h:33
#define isbadport(portid)
ポートIDが不正値かどうかを確認する。
Definition: ports.h:64
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
#define PT_ALLOC
ポートが割り当てられた
Definition: ports.h:15
#define OK
処理が成功した場合
Definition: kernel.h:77
struct ptentry porttab[]
ポートテーブルエントリのextern宣言
Definition: ptinit.c:10
uint16 ptstate
ポート状態(FREE/LIMBO/ALLOC)
Definition: ports.h:40
uint32 intmask
保存された割り込みマスク
Definition: kernel.h:38
intmask disable(void)
割り込み禁止(intr.Sに定義がある)
Here is the call graph for this function: