XINU
control.c
Go to the documentation of this file.
1 /* control.c - control */
2 
3 #include <xinu.h>
4 
5 /*------------------------------------------------------------------------
6  * control - Control a device or a driver (e.g., set the driver mode)
7  *------------------------------------------------------------------------
8  */
10  did32 descrp, /* Descriptor for device */
11  int32 func, /* Specific control function */
12  int32 arg1, /* Specific argument for func */
13  int32 arg2 /* Specific argument for func */
14  )
15 {
16  intmask mask; /* Saved interrupt mask */
17  struct dentry *devptr; /* Entry in device switch table */
18  int32 retval; /* Value to return to caller */
19 
20  mask = disable();
21  if (isbaddev(descrp)) {
22  restore(mask);
23  return SYSERR;
24  }
25  devptr = (struct dentry *) &devtab[descrp];
26  retval = (*devptr->dvcntl) (devptr, func, arg1, arg2);
27  restore(mask);
28  return retval;
29 }
devcall(* dvcntl)(struct dentry *, int32, int32, int32)
Definition: conf.h:18
void restore(intmask)
全てのシステムヘッダファイルをインクルードする。
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
Definition: conf.h:6
struct dentry devtab[]
Definition: conf.c:11
uint32 intmask
保存された割り込みマスク
Definition: kernel.h:38
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11
#define isbaddev(f)
デバイスIDを検証するマクロ。
Definition: device.h:15
int32 did32
デバイスID
Definition: kernel.h:28
syscall control(did32 descrp, int32 func, int32 arg1, int32 arg2)
Definition: control.c:9
int32 syscall
システムコール関数 返り値の型
Definition: kernel.h:47
intmask disable(void)
割り込み禁止(intr.Sに定義がある)