Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/compat/linux Emulate basic mtio ioctls.
details: https://anonhg.NetBSD.org/src/rev/de7b1d8a0223
branches: trunk
changeset: 574461:de7b1d8a0223
user: soren <soren%NetBSD.org@localhost>
date: Mon Feb 28 22:11:31 2005 +0000
description:
Emulate basic mtio ioctls.
diffstat:
sys/compat/linux/common/linux_ioctl.c | 9 +-
sys/compat/linux/common/linux_ioctl.h | 4 +-
sys/compat/linux/common/linux_mtio.c | 130 ++++++++++++++++++++++++++++++++++
sys/compat/linux/common/linux_mtio.h | 88 +++++++++++++++++++++++
sys/compat/linux/files.linux | 3 +-
5 files changed, 229 insertions(+), 5 deletions(-)
diffs (298 lines):
diff -r 420ac38b4f40 -r de7b1d8a0223 sys/compat/linux/common/linux_ioctl.c
--- a/sys/compat/linux/common/linux_ioctl.c Mon Feb 28 22:10:46 2005 +0000
+++ b/sys/compat/linux/common/linux_ioctl.c Mon Feb 28 22:11:31 2005 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_ioctl.c,v 1.41 2005/02/26 23:10:19 perry Exp $ */
+/* $NetBSD: linux_ioctl.c,v 1.42 2005/02/28 22:11:32 soren Exp $ */
/*-
* Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_ioctl.c,v 1.41 2005/02/26 23:10:19 perry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_ioctl.c,v 1.42 2005/02/28 22:11:32 soren Exp $");
#if defined(_KERNEL_OPT)
#include "sequencer.h"
@@ -110,6 +110,9 @@
case 'f':
error = linux_ioctl_termios(p, uap, retval);
break;
+ case 'm':
+ error = linux_ioctl_mtio(p, uap, retval);
+ break;
case 'T':
{
#if NSEQUENCER > 0
@@ -169,7 +172,7 @@
if (error == EPASSTHROUGH) {
/*
* linux returns EINVAL or ENOTTY for not supported ioctls.
- */
+ */
error = EINVAL;
}
diff -r 420ac38b4f40 -r de7b1d8a0223 sys/compat/linux/common/linux_ioctl.h
--- a/sys/compat/linux/common/linux_ioctl.h Mon Feb 28 22:10:46 2005 +0000
+++ b/sys/compat/linux/common/linux_ioctl.h Mon Feb 28 22:11:31 2005 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_ioctl.h,v 1.20 2005/02/26 23:10:19 perry Exp $ */
+/* $NetBSD: linux_ioctl.h,v 1.21 2005/02/28 22:11:32 soren Exp $ */
/*-
* Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
@@ -58,6 +58,8 @@
register_t *retval));
int linux_ioctl_sg __P((struct proc *p, struct linux_sys_ioctl_args *uap,
register_t *retval));
+int linux_ioctl_mtio __P((struct proc *p, struct linux_sys_ioctl_args *uap,
+ register_t *retval));
__END_DECLS
#endif /* !_KERNEL */
diff -r 420ac38b4f40 -r de7b1d8a0223 sys/compat/linux/common/linux_mtio.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/compat/linux/common/linux_mtio.c Mon Feb 28 22:11:31 2005 +0000
@@ -0,0 +1,130 @@
+/* $NetBSD: linux_mtio.c,v 1.1 2005/02/28 22:11:32 soren Exp $ */
+
+/*
+ * Copyright (c) 2005 Soren S. Jorvang. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: linux_mtio.c,v 1.1 2005/02/28 22:11:32 soren Exp $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/ioctl.h>
+#include <sys/file.h>
+#include <sys/filedesc.h>
+#include <sys/mount.h>
+#include <sys/proc.h>
+
+#include <sys/mtio.h>
+
+#include <sys/sa.h>
+#include <sys/syscallargs.h>
+
+#include <compat/linux/common/linux_types.h>
+#include <compat/linux/common/linux_ioctl.h>
+#include <compat/linux/common/linux_signal.h>
+#include <compat/linux/common/linux_mtio.h>
+
+#include <compat/linux/linux_syscallargs.h>
+
+static const struct mtop_mapping {
+ short lop;
+ short op;
+} mtop_map[] = {
+ { LINUX_MTFSF, MTFSF },
+ { LINUX_MTBSF, MTBSF },
+ { LINUX_MTFSR, MTFSR },
+ { LINUX_MTBSR, MTBSR },
+ { LINUX_MTWEOF, MTWEOF },
+ { LINUX_MTREW, MTREW },
+ { LINUX_MTOFFL, MTOFFL },
+ { LINUX_MTNOP, MTNOP },
+ { LINUX_MTRETEN, MTRETEN },
+ { LINUX_MTEOM, MTEOM },
+ { LINUX_MTERASE, MTERASE },
+ { LINUX_MTSETBLK, MTSETBSIZ },
+ { LINUX_MTSETDENSITY, MTSETDNSTY },
+ { LINUX_MTCOMPRESSION, MTCMPRESS },
+ { -1, -1 }
+};
+
+int
+linux_ioctl_mtio(struct proc *p, struct linux_sys_ioctl_args *uap,
+ register_t *retval)
+{
+ struct file *fp;
+ struct filedesc *fdp;
+ u_long com = SCARG(uap, com);
+ int i, error = 0;
+ int (*ioctlf)(struct file *, u_long, void *, struct proc *);
+ struct linux_mtop lmtop;
+ struct linux_mtget lmtget;
+ struct mtop mt;
+
+ fdp = p->p_fd;
+ if ((fp = fd_getfile(fdp, SCARG(uap, fd))) == NULL)
+ return EBADF;
+
+ FILE_USE(fp);
+ ioctlf = fp->f_ops->fo_ioctl;
+
+ *retval = 0;
+ switch (com) {
+ case LINUX_MTIOCTOP:
+ error = copyin(SCARG(uap, data), &lmtop, sizeof lmtop);
+ for (i = 0; mtop_map[i].lop >= 0; i++) {
+ if (mtop_map[i].lop == lmtop.mt_op)
+ break;
+ }
+
+ if (mtop_map[i].lop == -1) {
+ error = EINVAL;
+ break;
+ }
+
+ mt.mt_op = mtop_map[i].op;
+ mt.mt_count = lmtop.mt_count;
+ error = ioctlf(fp, MTIOCTOP, (caddr_t)&mt, p);
+ break;
+ case LINUX_MTIOCGET:
+ lmtget.mt_type = LINUX_MT_ISUNKNOWN;
+ lmtget.mt_resid = 0;
+ lmtget.mt_dsreg = 0;
+ lmtget.mt_gstat = 0;
+ lmtget.mt_erreg = 0;
+ lmtget.mt_fileno = 0;
+ lmtget.mt_blkno = 0;
+ error = copyout(&lmtget, SCARG(uap, data), sizeof lmtget);
+ break;
+ case LINUX_MTIOCPOS:
+ default:
+ printf("linux_mtio unsupported ioctl 0x%lx\n", com);
+ error = ENODEV;
+ break;
+ }
+
+ FILE_UNUSE(fp, p);
+
+ return error;
+}
diff -r 420ac38b4f40 -r de7b1d8a0223 sys/compat/linux/common/linux_mtio.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/compat/linux/common/linux_mtio.h Mon Feb 28 22:11:31 2005 +0000
@@ -0,0 +1,88 @@
+/* $NetBSD: linux_mtio.h,v 1.1 2005/02/28 22:11:32 soren Exp $ */
+
+/*
+ * Copyright (c) 2005 Soren S. Jorvang. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _LINUX_MTIO_H
+#define _LINUX_MTIO_H
+
+#define LINUX_MTIOCTOP _LINUX_IOW('m', 1, struct linux_mtop)
+#define LINUX_MTIOCGET _LINUX_IOR('m', 2, struct linux_mtget)
+#define LINUX_MTIOCPOS _LINUX_IOR('m', 3, struct linux_mtpos)
+
+struct linux_mtop {
+ short mt_op;
+ int mt_count;
+};
+
+#define LINUX_MTRESET 0
+#define LINUX_MTFSF 1
+#define LINUX_MTBSF 2
+#define LINUX_MTFSR 3
+#define LINUX_MTBSR 4
+#define LINUX_MTWEOF 5
+#define LINUX_MTREW 6
+#define LINUX_MTOFFL 7
+#define LINUX_MTNOP 8
+#define LINUX_MTRETEN 9
+#define LINUX_MTBSFM 10
+#define LINUX_MTFSFM 11
+#define LINUX_MTEOM 12
+#define LINUX_MTERASE 13
+#define LINUX_MTRAS1 14
+#define LINUX_MTRAS2 15
+#define LINUX_MTRAS3 16
+#define LINUX_MTSETBLK 20
+#define LINUX_MTSETDENSITY 21
+#define LINUX_MTSEEK 22
+#define LINUX_MTTELL 23
+#define LINUX_MTSETDRVBUFFER 24
+#define LINUX_MTFSS 25
+#define LINUX_MTBSS 26
+#define LINUX_MTWSM 27
+#define LINUX_MTLOCK 28
+#define LINUX_MTUNLOCK 29
+#define LINUX_MTLOAD 30
+#define LINUX_MTUNLOAD 31
+#define LINUX_MTCOMPRESSION 32
+#define LINUX_MTSETPART 33
+#define LINUX_MTMKPART 34
+
+struct linux_mtget {
+#define LINUX_MT_ISUNKNOWN 0x01
+ long mt_type;
+ long mt_resid;
+ long mt_dsreg;
+ long mt_gstat;
+ long mt_erreg;
+ daddr_t mt_fileno;
+ daddr_t mt_blkno;
+};
+
+struct linux_mtpos {
+ long mt_blkno;
+};
+
+#endif /* !_LINUX_MTIO_H */
diff -r 420ac38b4f40 -r de7b1d8a0223 sys/compat/linux/files.linux
--- a/sys/compat/linux/files.linux Mon Feb 28 22:10:46 2005 +0000
+++ b/sys/compat/linux/files.linux Mon Feb 28 22:11:31 2005 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files.linux,v 1.17 2005/02/03 00:09:30 christos Exp $
+# $NetBSD: files.linux,v 1.18 2005/02/28 22:11:31 soren Exp $
#
# Config file description for machine-independent Linux compat code.
# Included by ports that need it.
@@ -19,6 +19,7 @@
file compat/linux/common/linux_ioctl.c compat_linux
file compat/linux/common/linux_ipc.c compat_linux
file compat/linux/common/linux_misc.c compat_linux
+file compat/linux/common/linux_mtio.c compat_linux
file compat/linux/common/linux_sched.c compat_linux
file compat/linux/common/linux_sg.c compat_linux
file compat/linux/common/linux_signal.c compat_linux
Home |
Main Index |
Thread Index |
Old Index