summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoryar <yar@FreeBSD.org>2006-03-03 21:37:38 +0000
committeryar <yar@FreeBSD.org>2006-03-03 21:37:38 +0000
commit0ac62e02bddc3f1147599efe9997fc4b09f1d642 (patch)
treeb7e59bc8adbf6c361ddff54ef270aeb9ea0797a1 /sys
parentd8eb71788e7982c0eaa5e7cd8dfa13fe8d89f563 (diff)
downloadFreeBSD-src-0ac62e02bddc3f1147599efe9997fc4b09f1d642.zip
FreeBSD-src-0ac62e02bddc3f1147599efe9997fc4b09f1d642.tar.gz
Take the functionality contained in the former "options TDFX_LINUX"
into a separate module. Accordingly, convert the option into a device named similarly. Note for MFC: Perhaps the option should stay in RELENG_6 for POLA reasons. Suggested by: scottl Reviewed by: cokane MFC after: 5 days
Diffstat (limited to 'sys')
-rw-r--r--sys/conf/files1
-rw-r--r--sys/conf/options1
-rw-r--r--sys/dev/tdfx/tdfx_linux.c87
-rw-r--r--sys/dev/tdfx/tdfx_pci.c39
-rw-r--r--sys/i386/conf/NOTES5
-rw-r--r--sys/modules/3dfx/Makefile13
-rw-r--r--sys/modules/3dfx_linux/Makefile8
-rw-r--r--sys/modules/Makefile2
8 files changed, 102 insertions, 54 deletions
diff --git a/sys/conf/files b/sys/conf/files
index d3c14c1..df356e9 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -914,6 +914,7 @@ dev/syscons/rain/rain_saver.c optional rain_saver
dev/syscons/snake/snake_saver.c optional snake_saver
dev/syscons/star/star_saver.c optional star_saver
dev/syscons/warp/warp_saver.c optional warp_saver
+dev/tdfx/tdfx_linux.c optional tdfx_linux tdfx compat_linux
dev/tdfx/tdfx_pci.c optional tdfx pci
dev/ti/if_ti.c optional ti pci
dev/trm/trm.c optional trm
diff --git a/sys/conf/options b/sys/conf/options
index c22912c..52c6ec8 100644
--- a/sys/conf/options
+++ b/sys/conf/options
@@ -598,7 +598,6 @@ ROOTDEVNAME
FDC_DEBUG opt_fdc.h
PCFCLOCK_VERBOSE opt_pcfclock.h
PCFCLOCK_MAX_RETRIES opt_pcfclock.h
-TDFX_LINUX opt_tdfx.h
KTR opt_global.h
KTR_ALQ opt_ktr.h
diff --git a/sys/dev/tdfx/tdfx_linux.c b/sys/dev/tdfx/tdfx_linux.c
new file mode 100644
index 0000000..2e877f6
--- /dev/null
+++ b/sys/dev/tdfx/tdfx_linux.c
@@ -0,0 +1,87 @@
+/*-
+ * Copyright (c) 2006 The FreeBSD Project
+ * 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>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/file.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/proc.h>
+#include <sys/systm.h>
+
+#include <dev/tdfx/tdfx_linux.h>
+
+LINUX_IOCTL_SET(tdfx, LINUX_IOCTL_TDFX_MIN, LINUX_IOCTL_TDFX_MAX);
+
+/*
+ * Linux emulation IOCTL for /dev/tdfx
+ */
+static int
+linux_ioctl_tdfx(struct thread *td, struct linux_ioctl_args* args)
+{
+ int error = 0;
+ u_long cmd = args->cmd & 0xffff;
+
+ /* The structure passed to ioctl has two shorts, one int
+ and one void*. */
+ char d_pio[2*sizeof(short) + sizeof(int) + sizeof(void*)];
+
+ struct file *fp;
+
+ if ((error = fget(td, args->fd, &fp)) != 0)
+ return (error);
+ /* We simply copy the data and send it right to ioctl */
+ copyin((caddr_t)args->arg, &d_pio, sizeof(d_pio));
+ error = fo_ioctl(fp, cmd, (caddr_t)&d_pio, td->td_ucred, td);
+ fdrop(fp, td);
+ return error;
+}
+
+static int
+tdfx_linux_modevent(struct module *mod __unused, int what, void *arg __unused)
+{
+
+ switch (what) {
+ case MOD_LOAD:
+ case MOD_UNLOAD:
+ return (0);
+ }
+ return (EOPNOTSUPP);
+}
+
+static moduledata_t tdfx_linux_mod = {
+ "tdfx_linux",
+ tdfx_linux_modevent,
+ 0
+};
+
+/* As in SYSCALL_MODULE */
+DECLARE_MODULE(tdfx_linux, tdfx_linux_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE);
+MODULE_VERSION(tdfx_linux, 1);
+MODULE_DEPEND(tdfx_linux, tdfx, 1, 1, 1);
+MODULE_DEPEND(tdfx_linux, linux, 1, 1, 1);
diff --git a/sys/dev/tdfx/tdfx_pci.c b/sys/dev/tdfx/tdfx_pci.c
index 5d07354..6c7a832 100644
--- a/sys/dev/tdfx/tdfx_pci.c
+++ b/sys/dev/tdfx/tdfx_pci.c
@@ -70,12 +70,6 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
#include <sys/rman.h>
-/* This must come first */
-#include "opt_tdfx.h"
-#ifdef TDFX_LINUX
-#include <dev/tdfx/tdfx_linux.h>
-#endif
-
#include <dev/tdfx/tdfx_io.h>
#include <dev/tdfx/tdfx_vars.h>
#include <dev/tdfx/tdfx_pci.h>
@@ -98,11 +92,6 @@ static device_method_t tdfx_methods[] = {
MALLOC_DEFINE(M_TDFX,"tdfx_driver","3DFX Graphics[/2D]/3D Accelerator(s)");
-#ifdef TDFX_LINUX
-MODULE_DEPEND(tdfx, linux, 1, 1, 1);
-LINUX_IOCTL_SET(tdfx, LINUX_IOCTL_TDFX_MIN, LINUX_IOCTL_TDFX_MAX);
-#endif
-
/* Char. Dev. file operations structure */
static struct cdevsw tdfx_cdev = {
.d_version = D_VERSION,
@@ -822,33 +811,6 @@ tdfx_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *
return 0;
}
-#ifdef TDFX_LINUX
-/*
- * Linux emulation IOCTL for /dev/tdfx
- */
-static int
-linux_ioctl_tdfx(struct thread *td, struct linux_ioctl_args* args)
-{
- int error = 0;
- u_long cmd = args->cmd & 0xffff;
-
- /* The structure passed to ioctl has two shorts, one int
- and one void*. */
- char d_pio[2*sizeof(short) + sizeof(int) + sizeof(void*)];
-
- struct file *fp;
-
- if ((error = fget(td, args->fd, &fp)) != 0)
- return (error);
- /* We simply copy the data and send it right to ioctl */
- copyin((caddr_t)args->arg, &d_pio, sizeof(d_pio));
- error = fo_ioctl(fp, cmd, (caddr_t)&d_pio, td->td_ucred, td);
- fdrop(fp, td);
- return error;
-}
-#endif /* TDFX_LINUX */
-
-
/* This is the device driver struct. This is sent to the driver subsystem to
* register the method structure and the info strcut space for this particular
* instance of the driver.
@@ -861,3 +823,4 @@ static driver_t tdfx_driver = {
/* Tell Mr. Kernel about us! */
DRIVER_MODULE(tdfx, pci, tdfx_driver, tdfx_devclass, 0, 0);
+MODULE_VERSION(tdfx, 1);
diff --git a/sys/i386/conf/NOTES b/sys/i386/conf/NOTES
index 099c390..6b1aecf 100644
--- a/sys/i386/conf/NOTES
+++ b/sys/i386/conf/NOTES
@@ -415,11 +415,10 @@ hint.npx.0.irq="13"
# the tdfx DRI module from XFree86 and is completely unrelated.
#
# To enable Linuxulator support, one must also include COMPAT_LINUX in the
-# config as well, or you will not have the dependencies. The other option
-# is to load both as modules.
+# config as well. The other option is to load both as modules.
device tdfx # Enable 3Dfx Voodoo support
-options TDFX_LINUX # Enable Linuxulator support
+device tdfx_linux # Enable Linuxulator support
#
# ACPI support using the Intel ACPI Component Architecture reference
diff --git a/sys/modules/3dfx/Makefile b/sys/modules/3dfx/Makefile
index 208e9a7..ac7730b 100644
--- a/sys/modules/3dfx/Makefile
+++ b/sys/modules/3dfx/Makefile
@@ -5,22 +5,11 @@ MAINTAINER= cokane@FreeBSD.org
.PATH: $(.CURDIR)/../../dev/tdfx
KMOD= 3dfx
-SRCS= opt_tdfx.h bus_if.h pci_if.h device_if.h tdfx_pci.h tdfx_io.h\
+SRCS= bus_if.h pci_if.h device_if.h tdfx_pci.h tdfx_io.h\
tdfx_vars.h tdfx_pci.c
INCSRC= ../../sys
-.if ${MACHINE_ARCH} == "i386"
-# This line enables linux ioctl handling by default
-# comment out if you don't want it
-TDFX_OPTS= "\#define TDFX_LINUX"
-.endif
-
# Uncomment this for debugging messages
#CFLAGS+= -DDEBUG
-.if !defined(KERNBUILDDIR)
-opt_tdfx.h:
- echo $(TDFX_OPTS) > opt_tdfx.h
-.endif
-
.include <bsd.kmod.mk>
diff --git a/sys/modules/3dfx_linux/Makefile b/sys/modules/3dfx_linux/Makefile
new file mode 100644
index 0000000..8376037
--- /dev/null
+++ b/sys/modules/3dfx_linux/Makefile
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+.PATH: ${.CURDIR}/../../dev/tdfx
+
+KMOD= 3dfx_linux
+SRCS= tdfx_linux.c
+
+.include <bsd.kmod.mk>
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index 030e51e..5462624 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -1,6 +1,7 @@
# $FreeBSD$
SUBDIR= ${_3dfx} \
+ ${_3dfx_linux} \
${_aac} \
accf_data \
accf_http \
@@ -317,6 +318,7 @@ _pflog= pflog
# XXX some of these can move to the general case when de-i386'ed
# XXX some of these can move now, but are untested on other architectures.
_3dfx= 3dfx
+_3dfx_linux= 3dfx_linux
_agp= agp
_aic= aic
_amd= amd
OpenPOWER on IntegriCloud