2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
9 * This file contains any necessary C glue to allow programs to communicate
10 * with the AFS kernel module. The necessary lower-level glue is defined in
14 #include <afsconfig.h>
15 #include <afs/param.h>
19 #include <afs/afs_args.h>
21 #include "afssyscalls.h"
23 #ifdef AFS_LINUX20_ENV
24 int proc_afs_syscall(long syscall
, long param1
, long param2
, long param3
,
25 long param4
, int *rval
) {
26 struct afsprocdata syscall_data
;
27 int fd
= open(PROC_SYSCALL_FNAME
, O_RDONLY
);
29 fd
= open(PROC_SYSCALL_ARLA_FNAME
, O_RDONLY
);
33 syscall_data
.syscall
= syscall
;
34 syscall_data
.param1
= param1
;
35 syscall_data
.param2
= param2
;
36 syscall_data
.param3
= param3
;
37 syscall_data
.param4
= param4
;
39 *rval
= ioctl(fd
, VIOC_SYSCALL
, &syscall_data
);
47 #if defined(AFS_DARWIN80_ENV)
48 int ioctl_afs_syscall(long syscall
, long param1
, long param2
, long param3
,
49 long param4
, long param5
, long param6
, int *rval
) {
50 struct afssysargs syscall_data
;
53 int fd
= open(SYSCALL_DEV_FNAME
, O_RDONLY
);
55 #ifdef AFS_DARWIN100_ENV
56 struct afssysargs64 syscall64_data
;
57 if (sizeof(param1
) == 8) {
58 syscallnum
= VIOC_SYSCALL64
;
59 ioctldata
= &syscall64_data
;
60 syscall64_data
.syscall
= (int)syscall
;
61 syscall64_data
.param1
= param1
;
62 syscall64_data
.param2
= param2
;
63 syscall64_data
.param3
= param3
;
64 syscall64_data
.param4
= param4
;
65 syscall64_data
.param5
= param5
;
66 syscall64_data
.param6
= param6
;
69 syscallnum
= VIOC_SYSCALL
;
70 ioctldata
= &syscall_data
;
71 syscall_data
.syscall
= syscall
;
72 syscall_data
.param1
= param1
;
73 syscall_data
.param2
= param2
;
74 syscall_data
.param3
= param3
;
75 syscall_data
.param4
= param4
;
76 syscall_data
.param5
= param5
;
77 syscall_data
.param6
= param6
;
78 #ifdef AFS_DARWIN100_ENV
82 code
= ioctl(fd
, syscallnum
, ioctldata
);
89 #ifdef AFS_DARWIN100_ENV
90 if (sizeof(param1
) == 8)
91 *rval
=syscall64_data
.retval
;
94 *rval
=syscall_data
.retval
;
101 ioctl_sun_afs_syscall(long syscall
, uintptr_t param1
, uintptr_t param2
,
102 uintptr_t param3
, uintptr_t param4
, uintptr_t param5
,
103 uintptr_t param6
, int *error
)
110 struct afssysargs32 sargs32
;
111 sargs32
.syscall
= syscall
;
112 sargs32
.param1
= param1
;
113 sargs32
.param2
= param2
;
114 sargs32
.param3
= param3
;
115 sargs32
.param4
= param4
;
116 sargs32
.param5
= param5
;
117 sargs32
.param6
= param6
;
119 ioctldata
= &sargs32
;
120 callnum
= VIOC_SYSCALL32
;
122 struct afssysargs sargs
;
123 sargs
.syscall
= syscall
;
124 sargs
.param1
= param1
;
125 sargs
.param2
= param2
;
126 sargs
.param3
= param3
;
127 sargs
.param4
= param4
;
128 sargs
.param5
= param5
;
129 sargs
.param6
= param6
;
132 callnum
= VIOC_SYSCALL
;
133 # endif /* !_ILP32 */
135 fd
= open(SYSCALL_DEV_FNAME
, O_RDONLY
);
140 *error
= ioctl(fd
, callnum
, ioctldata
);
145 #endif /* AFS_SUN511_ENV */