guess some code for SUN_PROC_POINT

This commit is contained in:
Love Hornquist Astrand
2012-09-24 21:28:04 -07:00
parent db85d0998e
commit 9ba23d7da8

View File

@@ -65,6 +65,32 @@ struct devdata {
#define VIOC_SYSCALL_DEV_OPENAFS _IOWR('C', 1, struct devdata)
#endif
#ifdef _IOW
#ifdef _ILP32
struct sundevdata {
uint32_t param6;
uint32_t param5;
uint32_t param4;
uint32_t param3;
uint32_t param2;
uint32_t param1;
uint32_t syscall;
};
#define VIOC_SUN_SYSCALL_DEV _IOW('C', 2, struct sundevdata)
#else
struct sundevdata {
uint64_t param6;
uint64_t param5;
uint64_t param4;
uint64_t param3;
uint64_t param2;
uint64_t param1;
uint64_t syscall;
};
#define VIOC_SUN_SYSCALL_DEV _IOW('C', 1, struct sundevdata)
#endif
#endif /* _IOW */
int _kafs_debug; /* this should be done in a better way */
@@ -77,6 +103,7 @@ int _kafs_debug; /* this should be done in a better way */
#define LINUX_PROC_POINT 5
#define AIX_ENTRY_POINTS 6
#define MACOS_DEV_POINT 7
#define SUN_PROC_POINT 8
static int afs_entry_point = UNKNOWN_ENTRY_POINT;
static int afs_syscalls[2];
@@ -192,6 +219,12 @@ try_ioctlpath(const char *path, unsigned long ioctlnum, int entrypoint)
ret = ioctl(fd, ioctlnum, &data);
break;
}
case SUN_PROC_POINT: {
struct sundevdata data = { 0, 0, 0, 0, 0, 0, AFSCALL_PIOCTL };
data.param2 = (unsigned long)VIOCGETTOK;
ret = ioctl(fd, ioctlnum, &data);
break;
}
default:
abort();
}
@@ -273,6 +306,14 @@ k_pioctl(char *a_path,
return data.retval;
}
case SUN_PROC_POINT: {
struct sundevdata data = { 0, 0, 0, 0, 0, 0, AFSCALL_PIOCTL };
data.param1 = (unsigned long)a_path;
data.param2 = (unsigned long)o_opcode;
data.param3 = (unsigned long)a_paramsP;
data.param4 = (unsigned long)a_followSymlinks;
return do_ioctl(&data);
}
#ifdef _AIX
case AIX_ENTRY_POINTS:
return Pioctl(a_path, o_opcode, a_paramsP, a_followSymlinks);
@@ -331,6 +372,10 @@ k_setpag(void)
return ret;
return data.retval;
}
case SUN_PROC_POINT: {
struct sundevdata data = { 0, 0, 0, 0, 0, 0, AFSCALL_SETPAG };
return do_ioctl(&data);
}
#ifdef _AIX
case AIX_ENTRY_POINTS:
return Setpag();
@@ -478,6 +523,12 @@ k_hasafs(void)
if (ret == 0)
goto done;
#endif
#ifdef VIOC_SUN_SYSCALL_DEV
ret = try_ioctlpath("/dev/afs", VIOC_SUN_SYSCALL_DEV, SUN_PROC_POINT);
if (ret == 0)
goto done;
#endif
#if defined(AFS_SYSCALL) || defined(AFS_SYSCALL2) || defined(AFS_SYSCALL3)
{