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>
18 #include <afs/afs_args.h>
20 #include <sys/ioctl.h>
27 #include "afssyscalls.h"
29 #ifdef AFS_LINUX20_ENV
30 int proc_afs_syscall(long syscall, long param1, long param2, long param3,
31 long param4, int *rval) {
32 struct afsprocdata syscall_data;
33 int fd = open(PROC_SYSCALL_FNAME, O_RDWR);
35 fd = open(PROC_SYSCALL_ARLA_FNAME, O_RDWR);
39 syscall_data.syscall = syscall;
40 syscall_data.param1 = param1;
41 syscall_data.param2 = param2;
42 syscall_data.param3 = param3;
43 syscall_data.param4 = param4;
45 *rval = ioctl(fd, VIOC_SYSCALL, &syscall_data);
49 /* Callers expect us to emulate a syscall - return -1 on error, set errno */
58 #if defined(AFS_DARWIN80_ENV)
59 int ioctl_afs_syscall(long syscall, long param1, long param2, long param3,
60 long param4, long param5, long param6, int *rval) {
61 struct afssysargs syscall_data;
64 int fd = open(SYSCALL_DEV_FNAME, O_RDWR);
66 #ifdef AFS_DARWIN100_ENV
67 struct afssysargs64 syscall64_data;
68 if (sizeof(param1) == 8) {
69 syscallnum = VIOC_SYSCALL64;
70 ioctldata = &syscall64_data;
71 syscall64_data.syscall = (int)syscall;
72 syscall64_data.param1 = param1;
73 syscall64_data.param2 = param2;
74 syscall64_data.param3 = param3;
75 syscall64_data.param4 = param4;
76 syscall64_data.param5 = param5;
77 syscall64_data.param6 = param6;
80 syscallnum = VIOC_SYSCALL;
81 ioctldata = &syscall_data;
82 syscall_data.syscall = syscall;
83 syscall_data.param1 = param1;
84 syscall_data.param2 = param2;
85 syscall_data.param3 = param3;
86 syscall_data.param4 = param4;
87 syscall_data.param5 = param5;
88 syscall_data.param6 = param6;
89 #ifdef AFS_DARWIN100_ENV
93 code = ioctl(fd, syscallnum, ioctldata);
100 #ifdef AFS_DARWIN100_ENV
101 if (sizeof(param1) == 8)
102 *rval=syscall64_data.retval;
105 *rval=syscall_data.retval;