Module Name:    src
Committed By:   riastradh
Date:           Wed Apr 29 11:25:36 UTC 2015

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/via: via_video.c
Added Files:
        src/sys/external/bsd/drm2/via: via_module.c via_pci.c

Log Message:
Add the missing viadrm files omitted last night.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/dist/drm/via/via_video.c
cvs rdiff -u -r0 -r1.1 src/sys/external/bsd/drm2/via/via_module.c \
    src/sys/external/bsd/drm2/via/via_pci.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/via/via_video.c
diff -u src/sys/external/bsd/drm2/dist/drm/via/via_video.c:1.4 src/sys/external/bsd/drm2/dist/drm/via/via_video.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/via/via_video.c:1.4	Sat Feb 28 18:25:39 2015
+++ src/sys/external/bsd/drm2/dist/drm/via/via_video.c	Wed Apr 29 11:25:36 2015
@@ -116,10 +116,10 @@ int via_decoder_futex(struct drm_device 
 		return ret;
 	case VIA_FUTEX_WAKE:
 #ifdef __NetBSD__
-		mutex_lock(&dev_priv->decoder_lock[fx->lock]);
-		DRM_WAKEUP_ALL(&dev_priv->decoder_queue[fx->lock],
+		spin_lock(&dev_priv->decoder_lock[fx->lock]);
+		DRM_SPIN_WAKEUP_ALL(&dev_priv->decoder_queue[fx->lock],
 		    &dev_priv->decoder_lock[fx->lock]);
-		mutex_unlock(&dev_priv->decoder_lock[fx->lock]);
+		spin_unlock(&dev_priv->decoder_lock[fx->lock]);
 #else
 		wake_up(&(dev_priv->decoder_queue[fx->lock]));
 #endif

Added files:

Index: src/sys/external/bsd/drm2/via/via_module.c
diff -u /dev/null src/sys/external/bsd/drm2/via/via_module.c:1.1
--- /dev/null	Wed Apr 29 11:25:36 2015
+++ src/sys/external/bsd/drm2/via/via_module.c	Wed Apr 29 11:25:36 2015
@@ -0,0 +1,139 @@
+/*	$NetBSD: via_module.c,v 1.1 2015/04/29 11:25:36 riastradh Exp $	*/
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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: via_module.c,v 1.1 2015/04/29 11:25:36 riastradh Exp $");
+
+#include <sys/types.h>
+#include <sys/module.h>
+#include <sys/once.h>
+
+#include <drm/drmP.h>
+#include <drm/via_drm.h>
+
+#include "via_drv.h"
+
+MODULE(MODULE_CLASS_DRIVER, viadrmums, "drmkms,drmkms_pci");
+
+#ifdef _MODULE
+#include "ioconf.c"
+#endif
+
+extern struct drm_driver *const via_drm_driver; /* XXX */
+
+static int
+viadrm_init(void)
+{
+	extern int drm_guarantee_initialized(void);
+	int error;
+
+	via_init_command_verifier(); /* idempotent, no unwind needed */
+
+	error = drm_guarantee_initialized();
+	if (error)
+		return error;
+
+	error = drm_pci_init(via_drm_driver, NULL);
+	if (error) {
+		aprint_error("i915drmkms: failed to init pci: %d\n",
+		    error);
+		return error;
+	}
+
+	return 0;
+}
+
+int	viadrm_guarantee_initialized(void); /* XXX */
+int
+viadrm_guarantee_initialized(void)
+{
+#ifdef _MODULE
+	return 0;
+#else
+	static ONCE_DECL(viadrm_init_once);
+
+	return RUN_ONCE(&viadrm_init_once, &viadrm_init);
+#endif
+}
+
+static void
+viadrm_fini(void)
+{
+
+	drm_pci_exit(via_drm_driver, NULL);
+}
+
+static int
+viadrmums_modcmd(modcmd_t cmd, void *arg __unused)
+{
+	int error;
+
+	switch (cmd) {
+	case MODULE_CMD_INIT:
+#ifdef _MODULE
+		error = viadrm_init();
+#else
+		error = viadrm_guarantee_initialized();
+#endif
+		if (error) {
+			aprint_error("viadrmums: failed to initialize: %d\n",
+			    error);
+			return error;
+		}
+#ifdef _MODULE
+		error = config_init_component(cfdriver_ioconf_viadrmums,
+		    cfattach_ioconf_viadrmums, cfdata_ioconf_viadrmums);
+		if (error) {
+			aprint_error("viadrmums: failed to init component"
+			    ": %d\n", error);
+			viadrm_fini();
+			return error;
+		}
+#endif
+		return 0;
+
+	case MODULE_CMD_FINI:
+#ifdef _MODULE
+		error = config_fini_component(cfdriver_ioconf_viadrmums,
+		    cfattach_ioconf_viadrmums, cfdata_ioconf_viadrmums);
+		if (error) {
+			aprint_error("viadrmums: failed to fini component"
+			    ": %d\n", error);
+			return error;
+		}
+#endif
+		viadrm_fini();
+		return 0;
+
+	default:
+		return ENOTTY;
+	}
+}
Index: src/sys/external/bsd/drm2/via/via_pci.c
diff -u /dev/null src/sys/external/bsd/drm2/via/via_pci.c:1.1
--- /dev/null	Wed Apr 29 11:25:36 2015
+++ src/sys/external/bsd/drm2/via/via_pci.c	Wed Apr 29 11:25:36 2015
@@ -0,0 +1,141 @@
+/*	$NetBSD: via_pci.c,v 1.1 2015/04/29 11:25:36 riastradh Exp $	*/
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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: via_pci.c,v 1.1 2015/04/29 11:25:36 riastradh Exp $");
+
+#include <sys/types.h>
+#include <sys/device.h>
+#include <sys/systm.h>
+
+#include <linux/pci.h>
+
+#include <drm/drmP.h>
+#include <drm/drm_pciids.h>
+#include <drm/via_drm.h>
+
+#include "via_drv.h"
+
+struct viadrm_softc {
+	device_t		sc_dev;
+	struct pci_dev		sc_pci_dev;
+	struct drm_device	*sc_drm_dev;
+};
+
+static int	viadrm_match(device_t, cfdata_t, void *);
+static void	viadrm_attach(device_t, device_t, void *);
+static int	viadrm_detach(device_t, int);
+
+extern struct drm_driver *const via_drm_driver; /* XXX */
+
+CFATTACH_DECL_NEW(viadrmums, sizeof(struct viadrm_softc),
+    viadrm_match, viadrm_attach, viadrm_detach, NULL);
+
+static const struct pci_device_id viadrm_pci_ids[] = {
+	viadrv_PCI_IDS
+};
+
+static const unsigned long *
+viadrm_lookup(const struct pci_attach_args *pa)
+{
+	unsigned i;
+
+	for (i = 0; i < __arraycount(viadrm_pci_ids); i++) {
+		KASSERT(viadrm_pci_ids[i].subvendor == PCI_ANY_ID);
+		KASSERT(viadrm_pci_ids[i].subdevice == PCI_ANY_ID);
+		KASSERT(viadrm_pci_ids[i].class == 0);
+		KASSERT(viadrm_pci_ids[i].class_mask == 0);
+		if (PCI_VENDOR(pa->pa_id) != viadrm_pci_ids[i].vendor)
+			continue;
+		if (PCI_PRODUCT(pa->pa_id) != viadrm_pci_ids[i].device)
+			continue;
+		return &viadrm_pci_ids[i].driver_data;
+	}
+
+	return NULL;
+}
+
+static int
+viadrm_match(device_t parent, cfdata_t match, void *aux)
+{
+	extern int viadrm_guarantee_initialized(void);
+	const struct pci_attach_args *const pa = aux;
+	int error;
+
+	error = viadrm_guarantee_initialized();
+	if (error) {
+		aprint_error("viadrm: failed to initialize: %d\n", error);
+		return 0;
+	}
+
+	if (viadrm_lookup(pa) == NULL)
+		return 0;
+
+	return 1;
+}
+
+static void
+viadrm_attach(device_t parent, device_t self, void *aux)
+{
+	struct viadrm_softc *const sc = device_private(self);
+	const struct pci_attach_args *const pa = aux;
+	const unsigned long *const cookiep = viadrm_lookup(pa);
+	int error;
+
+	KASSERT(cookiep != NULL);
+
+	/* XXX errno Linux->NetBSD */
+	error = -drm_pci_attach(self, pa, &sc->sc_pci_dev, via_drm_driver,
+	    *cookiep, &sc->sc_drm_dev);
+	if (error) {
+		aprint_error_dev(self, "unable to attach drm: %d\n", error);
+		return;
+	}
+}
+
+static int
+viadrm_detach(device_t self, int flags)
+{
+	struct viadrm_softc *const sc = device_private(self);
+	int error;
+
+	error = config_detach_children(self, flags);
+	if (error)
+		return error;
+	if (sc->sc_drm_dev == NULL)
+		goto out;
+	/* XXX errno Linux->NetBSD */
+	error = -drm_pci_detach(sc->sc_drm_dev, flags);
+	if (error)
+		return error;
+	sc->sc_drm_dev = NULL;
+out:	return 0;
+}

Reply via email to