XINU
system
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
*/
9
syscall
control
(
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
}
dentry::dvcntl
devcall(* dvcntl)(struct dentry *, int32, int32, int32)
Definition:
conf.h:18
restore
void restore(intmask)
xinu.h
全てのシステムヘッダファイルをインクルードする。
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
dentry
Definition:
conf.h:6
devtab
struct dentry devtab[]
Definition:
conf.c:11
intmask
uint32 intmask
保存された割り込みマスク
Definition:
kernel.h:38
int32
int int32
符号あり32ビット整数(int)
Definition:
kernel.h:11
isbaddev
#define isbaddev(f)
デバイスIDを検証するマクロ。
Definition:
device.h:15
did32
int32 did32
デバイスID
Definition:
kernel.h:28
control
syscall control(did32 descrp, int32 func, int32 arg1, int32 arg2)
Definition:
control.c:9
syscall
int32 syscall
システムコール関数 返り値の型
Definition:
kernel.h:47
disable
intmask disable(void)
割り込み禁止(intr.Sに定義がある)
Generated by
1.8.13