summaryrefslogtreecommitdiffstats
path: root/sys/dev/ciss/ciss.c
diff options
context:
space:
mode:
authorps <ps@FreeBSD.org>2005-05-18 05:31:34 +0000
committerps <ps@FreeBSD.org>2005-05-18 05:31:34 +0000
commite04ec83e806222d865bbf9be744c8460bf43e184 (patch)
treee6987f10e45de5c8fe2409ddad9a8d68e7700d32 /sys/dev/ciss/ciss.c
parentdbfc528c1e7eaa7e1f6d285bff1c5a048f62112e (diff)
downloadFreeBSD-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.c18
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:
OpenPOWER on IntegriCloud