diff options
author | ps <ps@FreeBSD.org> | 2005-05-18 05:31:34 +0000 |
---|---|---|
committer | ps <ps@FreeBSD.org> | 2005-05-18 05:31:34 +0000 |
commit | e04ec83e806222d865bbf9be744c8460bf43e184 (patch) | |
tree | e6987f10e45de5c8fe2409ddad9a8d68e7700d32 /sys/dev/ciss/ciss.c | |
parent | dbfc528c1e7eaa7e1f6d285bff1c5a048f62112e (diff) | |
download | FreeBSD-src-e04ec83e806222d865bbf9be744c8460bf43e184.zip FreeBSD-src-e04ec83e806222d865bbf9be744c8460bf43e184.tar.gz |
Support passthru ioctl commands from 32bit binaries.
Diffstat (limited to 'sys/dev/ciss/ciss.c')
-rw-r--r-- | sys/dev/ciss/ciss.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/sys/dev/ciss/ciss.c b/sys/dev/ciss/ciss.c index abb31f9..0b23fbf 100644 --- a/sys/dev/ciss/ciss.c +++ b/sys/dev/ciss/ciss.c @@ -4055,6 +4055,11 @@ static int ciss_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, int32_t flag, d_thread_t *p) { struct ciss_softc *sc; + IOCTL_Command_struct *ioc = (IOCTL_Command_struct *)addr; +#ifdef __amd64__ + IOCTL_Command_struct32 *ioc32 = (IOCTL_Command_struct32 *)addr; + IOCTL_Command_struct ioc_swab; +#endif int error; debug_called(1); @@ -4146,8 +4151,19 @@ ciss_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, int32_t flag, d_thread_t */ break; +#ifdef __amd64__ + case CCISS_PASSTHRU32: + ioc_swab.LUN_info = ioc32->LUN_info; + ioc_swab.Request = ioc32->Request; + ioc_swab.error_info = ioc32->error_info; + ioc_swab.buf_size = ioc32->buf_size; + ioc_swab.buf = (u_int8_t *)(uintptr_t)ioc32->buf; + ioc = &ioc_swab; + /* FALLTHROUGH */ +#endif + case CCISS_PASSTHRU: - error = ciss_user_command(sc, (IOCTL_Command_struct *)addr); + error = ciss_user_command(sc, ioc); break; default: |