Module Name:    src
Committed By:   riastradh
Date:           Mon Aug 27 07:03:26 UTC 2018

Modified Files:
        src/sys/external/bsd/drm2/dist/drm: drm_irq.c
        src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_drv.c
            amdgpu_irq.c
        src/sys/external/bsd/drm2/dist/drm/i915: i915_drv.c i915_irq.c
        src/sys/external/bsd/drm2/dist/drm/mga: mga_drv.c
        src/sys/external/bsd/drm2/dist/drm/nouveau: nouveau_drm.c
        src/sys/external/bsd/drm2/dist/drm/qxl: qxl_drv.c qxl_irq.c
        src/sys/external/bsd/drm2/dist/drm/r128: r128_drv.c
        src/sys/external/bsd/drm2/dist/drm/radeon: radeon_drv.c
            radeon_irq_kms.c
        src/sys/external/bsd/drm2/dist/drm/via: via_drv.c
        src/sys/external/bsd/drm2/dist/drm/vmwgfx: vmwgfx_drv.c
        src/sys/external/bsd/drm2/dist/include/drm: drmP.h
        src/sys/external/bsd/drm2/pci: drm_pci.c

Log Message:
struct drm_bus abstraction is no more.  Cope.

struct drm_driver now has the bus-specific intr establish routine
(called request_irq/free_irq to match Linux's style).


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/external/bsd/drm2/dist/drm/drm_irq.c
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_drv.c \
    src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_irq.c
cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c
cvs rdiff -u -r1.11 -r1.12 src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/dist/drm/mga/mga_drv.c
cvs rdiff -u -r1.9 -r1.10 \
    src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/dist/drm/qxl/qxl_drv.c \
    src/sys/external/bsd/drm2/dist/drm/qxl/qxl_irq.c
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/dist/drm/r128/r128_drv.c
cvs rdiff -u -r1.6 -r1.7 \
    src/sys/external/bsd/drm2/dist/drm/radeon/radeon_drv.c
cvs rdiff -u -r1.3 -r1.4 \
    src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/dist/drm/via/via_drv.c
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c
cvs rdiff -u -r1.21 -r1.22 src/sys/external/bsd/drm2/dist/include/drm/drmP.h
cvs rdiff -u -r1.21 -r1.22 src/sys/external/bsd/drm2/pci/drm_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/drm_irq.c
diff -u src/sys/external/bsd/drm2/dist/drm/drm_irq.c:1.10 src/sys/external/bsd/drm2/dist/drm/drm_irq.c:1.11
--- src/sys/external/bsd/drm2/dist/drm/drm_irq.c:1.10	Mon Aug 27 06:53:36 2018
+++ src/sys/external/bsd/drm2/dist/drm/drm_irq.c	Mon Aug 27 07:03:25 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_irq.c,v 1.10 2018/08/27 06:53:36 riastradh Exp $	*/
+/*	$NetBSD: drm_irq.c,v 1.11 2018/08/27 07:03:25 riastradh Exp $	*/
 
 /*
  * drm_irq.c IRQ and vblank support
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_irq.c,v 1.10 2018/08/27 06:53:36 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_irq.c,v 1.11 2018/08/27 07:03:25 riastradh Exp $");
 
 #include <drm/drmP.h>
 #include "drm_trace.h"
@@ -524,7 +524,11 @@ static void drm_irq_vgaarb_nokms(void *c
  * Returns:
  * Zero on success or a negative error code on failure.
  */
+#ifdef __NetBSD__
+int drm_irq_install(struct drm_device *dev)
+#else
 int drm_irq_install(struct drm_device *dev, int irq)
+#endif
 {
 	int ret;
 	unsigned long sh_flags = 0;
@@ -532,8 +536,10 @@ int drm_irq_install(struct drm_device *d
 	if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
 		return -EINVAL;
 
+#ifndef __NetBSD__
 	if (irq == 0)
 		return -EINVAL;
+#endif
 
 	/* Driver must have been initialized */
 	if (!dev->dev_private)
@@ -543,7 +549,9 @@ int drm_irq_install(struct drm_device *d
 		return -EBUSY;
 	dev->irq_enabled = true;
 
+#ifndef __NetBSD__
 	DRM_DEBUG("irq=%d\n", irq);
+#endif
 
 	/* Before installing handler */
 	if (dev->driver->irq_preinstall)
@@ -554,9 +562,7 @@ int drm_irq_install(struct drm_device *d
 		sh_flags = IRQF_SHARED;
 
 #ifdef __NetBSD__
-	ret = (*dev->driver->bus->irq_install)(dev, dev->driver->irq_handler,
-	    sh_flags, dev->devname ? dev->devname : dev->driver->name, dev,
-	    &dev->irq_cookie);
+	ret = (*dev->driver->request_irq)(dev, sh_flags);
 #else
 	ret = request_irq(irq, dev->driver->irq_handler,
 			  sh_flags, dev->driver->name, dev);
@@ -579,12 +585,14 @@ int drm_irq_install(struct drm_device *d
 		if (!drm_core_check_feature(dev, DRIVER_MODESET))
 			vga_client_register(dev->pdev, NULL, NULL, NULL);
 #ifdef __NetBSD__
-		(*dev->driver->bus->irq_uninstall)(dev, dev->irq_cookie);
+		(*dev->driver->free_irq)(dev);
 #else
 		free_irq(irq, dev);
 #endif
 	} else {
+#ifndef __NetBSD__
 		dev->irq = irq;
+#endif
 	}
 
 	return ret;
@@ -657,7 +665,7 @@ int drm_irq_uninstall(struct drm_device 
 		dev->driver->irq_uninstall(dev);
 
 #ifdef __NetBSD__
-	(*dev->driver->bus->irq_uninstall)(dev, dev->irq_cookie);
+	(*dev->driver->free_irq)(dev);
 #else
 	free_irq(dev->irq, dev);
 #endif
@@ -697,13 +705,21 @@ int drm_control(struct drm_device *dev, 
 
 	switch (ctl->func) {
 	case DRM_INST_HANDLER:
+#ifdef __NetBSD__
+		irq = ctl->irq;
+#else
 		irq = dev->pdev->irq;
+#endif
 
 		if (dev->if_version < DRM_IF_VERSION(1, 2) &&
 		    ctl->irq != irq)
 			return -EINVAL;
 		mutex_lock(&dev->struct_mutex);
+#ifdef __NetBSD__
+		ret = drm_irq_install(dev);
+#else
 		ret = drm_irq_install(dev, irq);
+#endif
 		mutex_unlock(&dev->struct_mutex);
 
 		return ret;

Index: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_drv.c:1.2 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_drv.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_drv.c:1.2	Mon Aug 27 04:58:19 2018
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_drv.c	Mon Aug 27 07:03:25 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_drv.c,v 1.2 2018/08/27 04:58:19 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_drv.c,v 1.3 2018/08/27 07:03:25 riastradh Exp $	*/
 
 /**
  * \file amdgpu_drv.c
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_drv.c,v 1.2 2018/08/27 04:58:19 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_drv.c,v 1.3 2018/08/27 07:03:25 riastradh Exp $");
 
 #include <drm/drmP.h>
 #include <drm/amdgpu_drm.h>
@@ -508,6 +508,10 @@ static struct drm_driver kms_driver = {
 	.irq_postinstall = amdgpu_irq_postinstall,
 	.irq_uninstall = amdgpu_irq_uninstall,
 	.irq_handler = amdgpu_irq_handler,
+#ifdef __NetBSD__
+	.request_irq = drm_pci_request_irq,
+	.free_irq = drm_pci_free_irq,
+#endif
 	.ioctls = amdgpu_ioctls_kms,
 	.gem_free_object = amdgpu_gem_object_free,
 	.gem_open_object = amdgpu_gem_object_open,
Index: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_irq.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_irq.c:1.2 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_irq.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_irq.c:1.2	Mon Aug 27 04:58:19 2018
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_irq.c	Mon Aug 27 07:03:25 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_irq.c,v 1.2 2018/08/27 04:58:19 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_irq.c,v 1.3 2018/08/27 07:03:25 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -28,7 +28,7 @@
  *          Jerome Glisse
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_irq.c,v 1.2 2018/08/27 04:58:19 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_irq.c,v 1.3 2018/08/27 07:03:25 riastradh Exp $");
 
 #include <linux/irq.h>
 #include <drm/drmP.h>
@@ -239,7 +239,11 @@ int amdgpu_irq_init(struct amdgpu_device
 	INIT_WORK(&adev->reset_work, amdgpu_irq_reset_work_func);
 
 	adev->irq.installed = true;
+#ifdef __NetBSD__
+	r = drm_irq_install(adev->ddev);
+#else
 	r = drm_irq_install(adev->ddev, adev->ddev->pdev->irq);
+#endif
 	if (r) {
 		adev->irq.installed = false;
 		flush_work(&adev->hotplug_work);

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c:1.8 src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c:1.9
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c:1.8	Mon Aug 27 06:18:30 2018
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c	Mon Aug 27 07:03:25 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_drv.c,v 1.8 2018/08/27 06:18:30 riastradh Exp $	*/
+/*	$NetBSD: i915_drv.c,v 1.9 2018/08/27 07:03:25 riastradh Exp $	*/
 
 /* i915_drv.c -- i830,i845,i855,i865,i915 driver -*- linux-c -*-
  */
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_drv.c,v 1.8 2018/08/27 06:18:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_drv.c,v 1.9 2018/08/27 07:03:25 riastradh Exp $");
 
 #include <linux/device.h>
 #include <linux/acpi.h>
@@ -1750,6 +1750,10 @@ static struct drm_driver driver = {
 	.preclose = i915_driver_preclose,
 	.postclose = i915_driver_postclose,
 	.set_busid = drm_pci_set_busid,
+#ifdef __NetBSD__
+	.request_irq = drm_pci_request_irq,
+	.free_irq = drm_pci_free_irq,
+#endif
 
 #if defined(CONFIG_DEBUG_FS)
 	.debugfs_init = i915_debugfs_init,

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.11 src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.12
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c:1.11	Mon Aug 27 04:58:23 2018
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_irq.c	Mon Aug 27 07:03:25 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_irq.c,v 1.11 2018/08/27 04:58:23 riastradh Exp $	*/
+/*	$NetBSD: i915_irq.c,v 1.12 2018/08/27 07:03:25 riastradh Exp $	*/
 
 /* i915_irq.c -- IRQ support for the I915 -*- linux-c -*-
  */
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_irq.c,v 1.11 2018/08/27 04:58:23 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_irq.c,v 1.12 2018/08/27 07:03:25 riastradh Exp $");
 
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
@@ -4607,7 +4607,11 @@ int intel_irq_install(struct drm_i915_pr
 	 */
 	dev_priv->pm.irqs_enabled = true;
 
+#ifdef __NetBSD__
+	return drm_irq_install(dev_priv->dev);
+#else
 	return drm_irq_install(dev_priv->dev, dev_priv->dev->pdev->irq);
+#endif
 }
 
 /**

Index: src/sys/external/bsd/drm2/dist/drm/mga/mga_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/mga/mga_drv.c:1.2 src/sys/external/bsd/drm2/dist/drm/mga/mga_drv.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/mga/mga_drv.c:1.2	Mon Aug 27 04:58:24 2018
+++ src/sys/external/bsd/drm2/dist/drm/mga/mga_drv.c	Mon Aug 27 07:03:25 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: mga_drv.c,v 1.2 2018/08/27 04:58:24 riastradh Exp $	*/
+/*	$NetBSD: mga_drv.c,v 1.3 2018/08/27 07:03:25 riastradh Exp $	*/
 
 /* mga_drv.c -- Matrox G200/G400 driver -*- linux-c -*-
  * Created: Mon Dec 13 01:56:22 1999 by [email protected]
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mga_drv.c,v 1.2 2018/08/27 04:58:24 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mga_drv.c,v 1.3 2018/08/27 07:03:25 riastradh Exp $");
 
 #include <linux/module.h>
 
@@ -79,6 +79,10 @@ static struct drm_driver driver = {
 	.irq_postinstall = mga_driver_irq_postinstall,
 	.irq_uninstall = mga_driver_irq_uninstall,
 	.irq_handler = mga_driver_irq_handler,
+#ifdef __NetBSD__
+	.request_irq = drm_pci_request_irq,
+	.free_irq = drm_pci_free_irq,
+#endif
 	.ioctls = mga_ioctls,
 	.dma_ioctl = mga_dma_buffers,
 	.fops = &mga_driver_fops,

Index: src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c:1.9 src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c:1.10
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c:1.9	Mon Aug 27 04:58:24 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nouveau_drm.c	Mon Aug 27 07:03:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_drm.c,v 1.9 2018/08/27 04:58:24 riastradh Exp $	*/
+/*	$NetBSD: nouveau_drm.c,v 1.10 2018/08/27 07:03:26 riastradh Exp $	*/
 
 /*
  * Copyright 2012 Red Hat Inc.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_drm.c,v 1.9 2018/08/27 04:58:24 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_drm.c,v 1.10 2018/08/27 07:03:26 riastradh Exp $");
 
 #include <linux/console.h>
 #include <linux/delay.h>
@@ -1154,8 +1154,15 @@ nouveau_drm_init(void)
 {
 	driver_pci = driver_stub;
 	driver_pci.set_busid = drm_pci_set_busid;
+#ifdef __NetBSD__
+	driver_pci.request_irq = drm_pci_request_irq;
+	driver_pci.free_irq = drm_pci_free_irq;
+#endif
 	driver_platform = driver_stub;
 	driver_platform.set_busid = drm_platform_set_busid;
+#ifdef __NetBSD__
+	/* XXX platform intr establish?  */
+#endif
 
 	nouveau_display_options();
 

Index: src/sys/external/bsd/drm2/dist/drm/qxl/qxl_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/qxl/qxl_drv.c:1.2 src/sys/external/bsd/drm2/dist/drm/qxl/qxl_drv.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/qxl/qxl_drv.c:1.2	Mon Aug 27 04:58:35 2018
+++ src/sys/external/bsd/drm2/dist/drm/qxl/qxl_drv.c	Mon Aug 27 07:03:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: qxl_drv.c,v 1.2 2018/08/27 04:58:35 riastradh Exp $	*/
+/*	$NetBSD: qxl_drv.c,v 1.3 2018/08/27 07:03:26 riastradh Exp $	*/
 
 /* vim: set ts=8 sw=8 tw=78 ai noexpandtab */
 /* qxl_drv.c -- QXL driver -*- linux-c -*-
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: qxl_drv.c,v 1.2 2018/08/27 04:58:35 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: qxl_drv.c,v 1.3 2018/08/27 07:03:26 riastradh Exp $");
 
 #include <linux/module.h>
 #include <linux/console.h>
@@ -267,6 +267,10 @@ static struct drm_driver qxl_driver = {
 	.fops = &qxl_fops,
 	.ioctls = qxl_ioctls,
 	.irq_handler = qxl_irq_handler,
+#ifdef __NetBSD__
+	.request_irq = drm_pci_request_irq,
+	.free_irq = drm_pci_free_irq,
+#endif
 	.name = DRIVER_NAME,
 	.desc = DRIVER_DESC,
 	.date = DRIVER_DATE,
Index: src/sys/external/bsd/drm2/dist/drm/qxl/qxl_irq.c
diff -u src/sys/external/bsd/drm2/dist/drm/qxl/qxl_irq.c:1.2 src/sys/external/bsd/drm2/dist/drm/qxl/qxl_irq.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/qxl/qxl_irq.c:1.2	Mon Aug 27 04:58:35 2018
+++ src/sys/external/bsd/drm2/dist/drm/qxl/qxl_irq.c	Mon Aug 27 07:03:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: qxl_irq.c,v 1.2 2018/08/27 04:58:35 riastradh Exp $	*/
+/*	$NetBSD: qxl_irq.c,v 1.3 2018/08/27 07:03:26 riastradh Exp $	*/
 
 /*
  * Copyright 2013 Red Hat Inc.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: qxl_irq.c,v 1.2 2018/08/27 04:58:35 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: qxl_irq.c,v 1.3 2018/08/27 07:03:26 riastradh Exp $");
 
 #include "qxl_drv.h"
 
@@ -95,7 +95,11 @@ int qxl_irq_init(struct qxl_device *qdev
 	atomic_set(&qdev->irq_received_cursor, 0);
 	atomic_set(&qdev->irq_received_io_cmd, 0);
 	qdev->irq_received_error = 0;
+#ifdef __NetBSD__
+	ret = drm_irq_install(qdev->ddev);
+#else
 	ret = drm_irq_install(qdev->ddev, qdev->ddev->pdev->irq);
+#endif
 	qdev->ram_header->int_mask = QXL_INTERRUPT_MASK;
 	if (unlikely(ret != 0)) {
 		DRM_ERROR("Failed installing irq: %d\n", ret);

Index: src/sys/external/bsd/drm2/dist/drm/r128/r128_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/r128/r128_drv.c:1.2 src/sys/external/bsd/drm2/dist/drm/r128/r128_drv.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/r128/r128_drv.c:1.2	Mon Aug 27 04:58:35 2018
+++ src/sys/external/bsd/drm2/dist/drm/r128/r128_drv.c	Mon Aug 27 07:03:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: r128_drv.c,v 1.2 2018/08/27 04:58:35 riastradh Exp $	*/
+/*	$NetBSD: r128_drv.c,v 1.3 2018/08/27 07:03:26 riastradh Exp $	*/
 
 /* r128_drv.c -- ATI Rage 128 driver -*- linux-c -*-
  * Created: Mon Dec 13 09:47:27 1999 by [email protected]
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: r128_drv.c,v 1.2 2018/08/27 04:58:35 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: r128_drv.c,v 1.3 2018/08/27 07:03:26 riastradh Exp $");
 
 #include <linux/module.h>
 
@@ -75,6 +75,10 @@ static struct drm_driver driver = {
 	.irq_postinstall = r128_driver_irq_postinstall,
 	.irq_uninstall = r128_driver_irq_uninstall,
 	.irq_handler = r128_driver_irq_handler,
+#ifdef __NetBSD__
+	.request_irq = drm_pci_request_irq,
+	.free_irq = drm_pci_free_irq,
+#endif
 	.ioctls = r128_ioctls,
 	.dma_ioctl = r128_cce_buffers,
 	.fops = &r128_driver_fops,

Index: src/sys/external/bsd/drm2/dist/drm/radeon/radeon_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_drv.c:1.6 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_drv.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_drv.c:1.6	Mon Aug 27 04:58:36 2018
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_drv.c	Mon Aug 27 07:03:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_drv.c,v 1.6 2018/08/27 04:58:36 riastradh Exp $	*/
+/*	$NetBSD: radeon_drv.c,v 1.7 2018/08/27 07:03:26 riastradh Exp $	*/
 
 /**
  * \file radeon_drv.c
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: radeon_drv.c,v 1.6 2018/08/27 04:58:36 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_drv.c,v 1.7 2018/08/27 07:03:26 riastradh Exp $");
 
 #include <drm/drmP.h>
 #include <drm/radeon_drm.h>
@@ -612,6 +612,10 @@ static struct drm_driver kms_driver = {
 	.irq_postinstall = radeon_driver_irq_postinstall_kms,
 	.irq_uninstall = radeon_driver_irq_uninstall_kms,
 	.irq_handler = radeon_driver_irq_handler_kms,
+#ifdef __NetBSD__
+	.request_irq = drm_pci_request_irq,
+	.free_irq = drm_pci_free_irq,
+#endif
 	.ioctls = radeon_ioctls_kms,
 	.gem_free_object = radeon_gem_object_free,
 	.gem_open_object = radeon_gem_object_open,

Index: src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c
diff -u src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c:1.3 src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c:1.3	Mon Aug 27 04:58:36 2018
+++ src/sys/external/bsd/drm2/dist/drm/radeon/radeon_irq_kms.c	Mon Aug 27 07:03:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeon_irq_kms.c,v 1.3 2018/08/27 04:58:36 riastradh Exp $	*/
+/*	$NetBSD: radeon_irq_kms.c,v 1.4 2018/08/27 07:03:26 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -28,7 +28,7 @@
  *          Jerome Glisse
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: radeon_irq_kms.c,v 1.3 2018/08/27 04:58:36 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeon_irq_kms.c,v 1.4 2018/08/27 07:03:26 riastradh Exp $");
 
 #include <drm/drmP.h>
 #include <drm/drm_crtc_helper.h>
@@ -312,7 +312,11 @@ int radeon_irq_kms_init(struct radeon_de
 	INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi);
 
 	rdev->irq.installed = true;
+#ifdef __NetBSD__
+	r = drm_irq_install(rdev->ddev);
+#else
 	r = drm_irq_install(rdev->ddev, rdev->ddev->pdev->irq);
+#endif
 	if (r) {
 		rdev->irq.installed = false;
 		flush_delayed_work(&rdev->hotplug_work);

Index: src/sys/external/bsd/drm2/dist/drm/via/via_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/via/via_drv.c:1.4 src/sys/external/bsd/drm2/dist/drm/via/via_drv.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/via/via_drv.c:1.4	Mon Aug 27 04:58:37 2018
+++ src/sys/external/bsd/drm2/dist/drm/via/via_drv.c	Mon Aug 27 07:03:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: via_drv.c,v 1.4 2018/08/27 04:58:37 riastradh Exp $	*/
+/*	$NetBSD: via_drv.c,v 1.5 2018/08/27 07:03:26 riastradh Exp $	*/
 
 /*
  * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: via_drv.c,v 1.4 2018/08/27 04:58:37 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: via_drv.c,v 1.5 2018/08/27 07:03:26 riastradh Exp $");
 
 #include <linux/module.h>
 
@@ -95,6 +95,10 @@ static struct drm_driver driver = {
 	.irq_postinstall = via_driver_irq_postinstall,
 	.irq_uninstall = via_driver_irq_uninstall,
 	.irq_handler = via_driver_irq_handler,
+#ifdef __NetBSD__
+	.request_irq = drm_pci_request_irq,
+	.free_irq = drm_pci_free_irq,
+#endif
 	.dma_quiescent = via_driver_dma_quiescent,
 	.lastclose = via_lastclose,
 	.ioctls = via_ioctls,

Index: src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c:1.2 src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c:1.2	Mon Aug 27 04:58:37 2018
+++ src/sys/external/bsd/drm2/dist/drm/vmwgfx/vmwgfx_drv.c	Mon Aug 27 07:03:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmwgfx_drv.c,v 1.2 2018/08/27 04:58:37 riastradh Exp $	*/
+/*	$NetBSD: vmwgfx_drv.c,v 1.3 2018/08/27 07:03:26 riastradh Exp $	*/
 
 /**************************************************************************
  *
@@ -27,7 +27,7 @@
  *
  **************************************************************************/
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vmwgfx_drv.c,v 1.2 2018/08/27 04:58:37 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmwgfx_drv.c,v 1.3 2018/08/27 07:03:26 riastradh Exp $");
 
 #include <linux/module.h>
 #include <linux/console.h>
@@ -816,7 +816,11 @@ static int vmw_driver_load(struct drm_de
 	}
 
 	if (dev_priv->capabilities & SVGA_CAP_IRQMASK) {
+#ifdef __NetBSD__
+		ret = drm_irq_install(dev);
+#else
 		ret = drm_irq_install(dev, dev->pdev->irq);
+#endif
 		if (ret != 0) {
 			DRM_ERROR("Failed installing irq: %d\n", ret);
 			goto out_no_irq;
@@ -1508,6 +1512,10 @@ static struct drm_driver driver = {
 	.irq_postinstall = vmw_irq_postinstall,
 	.irq_uninstall = vmw_irq_uninstall,
 	.irq_handler = vmw_irq_handler,
+#ifdef __NetBSD__
+	.request_irq = drm_pci_request_irq,
+	.free_irq = drm_pci_free_irq,
+#endif
 	.get_vblank_counter = vmw_get_vblank_counter,
 	.enable_vblank = vmw_enable_vblank,
 	.disable_vblank = vmw_disable_vblank,

Index: src/sys/external/bsd/drm2/dist/include/drm/drmP.h
diff -u src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.21 src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.22
--- src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.21	Mon Aug 27 06:54:08 2018
+++ src/sys/external/bsd/drm2/dist/include/drm/drmP.h	Mon Aug 27 07:03:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: drmP.h,v 1.21 2018/08/27 06:54:08 riastradh Exp $	*/
+/*	$NetBSD: drmP.h,v 1.22 2018/08/27 07:03:26 riastradh Exp $	*/
 
 /*
  * Internal Header for the Direct Rendering Manager
@@ -607,6 +607,11 @@ struct drm_driver {
 	int (*irq_postinstall) (struct drm_device *dev);
 	void (*irq_uninstall) (struct drm_device *dev);
 
+#ifdef __NetBSD__
+	int (*request_irq)(struct drm_device *, int);
+	void (*free_irq)(struct drm_device *);
+#endif
+
 	/* Master routines */
 	int (*master_create)(struct drm_device *dev, struct drm_master *master);
 	void (*master_destroy)(struct drm_device *dev, struct drm_master *master);
@@ -1036,7 +1041,11 @@ void drm_clflush_virt_range(void *addr, 
  */
 
 				/* IRQ support (drm_irq.h) */
+#ifdef __NetBSD__
+extern int drm_irq_install(struct drm_device *dev);
+#else
 extern int drm_irq_install(struct drm_device *dev, int irq);
+#endif
 extern int drm_irq_uninstall(struct drm_device *dev);
 
 extern int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs);
@@ -1217,6 +1226,10 @@ void drm_pci_agp_destroy(struct drm_devi
 
 extern int drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver);
 extern void drm_pci_exit(struct drm_driver *driver, struct pci_driver *pdriver);
+#ifdef __NetBSD__
+int drm_pci_request_irq(struct drm_device *, int);
+void drm_pci_free_irq(struct drm_device *);
+#endif
 #ifdef CONFIG_PCI
 extern int drm_get_pci_dev(struct pci_dev *pdev,
 			   const struct pci_device_id *ent,

Index: src/sys/external/bsd/drm2/pci/drm_pci.c
diff -u src/sys/external/bsd/drm2/pci/drm_pci.c:1.21 src/sys/external/bsd/drm2/pci/drm_pci.c:1.22
--- src/sys/external/bsd/drm2/pci/drm_pci.c:1.21	Mon Aug 27 07:03:02 2018
+++ src/sys/external/bsd/drm2/pci/drm_pci.c	Mon Aug 27 07:03:26 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: drm_pci.c,v 1.21 2018/08/27 07:03:02 riastradh Exp $	*/
+/*	$NetBSD: drm_pci.c,v 1.22 2018/08/27 07:03:26 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_pci.c,v 1.21 2018/08/27 07:03:02 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_pci.c,v 1.22 2018/08/27 07:03:26 riastradh Exp $");
 
 #include <sys/types.h>
 #include <sys/errno.h>
@@ -39,36 +39,13 @@ __KERNEL_RCSID(0, "$NetBSD: drm_pci.c,v 
 #include <dev/pci/pcivar.h>
 
 #include <drm/drmP.h>
+#include <drm/drm_legacy.h>
 
 struct drm_bus_irq_cookie {
 	pci_intr_handle_t *intr_handles;
 	void *ih_cookie;
 };
 
-static int	drm_pci_get_irq(struct drm_device *);
-static int	drm_pci_irq_install(struct drm_device *,
-		    irqreturn_t (*)(void *), int, const char *, void *,
-		    struct drm_bus_irq_cookie **);
-static void	drm_pci_irq_uninstall(struct drm_device *,
-		    struct drm_bus_irq_cookie *);
-static const char *
-		drm_pci_get_name(struct drm_device *);
-static int	drm_pci_set_unique(struct drm_device *, struct drm_master *,
-		    struct drm_unique *);
-static int	drm_pci_irq_by_busid(struct drm_device *,
-		    struct drm_irq_busid *);
-
-const struct drm_bus drm_pci_bus = {
-	.bus_type = DRIVER_BUS_PCI,
-	.get_irq = drm_pci_get_irq,
-	.irq_install = drm_pci_irq_install,
-	.irq_uninstall = drm_pci_irq_uninstall,
-	.get_name = drm_pci_get_name,
-	.set_busid = drm_pci_set_busid,
-	.set_unique = drm_pci_set_unique,
-	.irq_by_busid = drm_pci_irq_by_busid,
-};
-
 static const struct pci_attach_args *
 drm_pci_attach_args(struct drm_device *dev)
 {
@@ -76,10 +53,10 @@ drm_pci_attach_args(struct drm_device *d
 }
 
 int
-drm_pci_init(struct drm_driver *driver, struct pci_driver *pdriver __unused)
+drm_pci_init(struct drm_driver *driver __unused,
+    struct pci_driver *pdriver __unused)
 {
 
-	driver->bus = &drm_pci_bus;
 	return 0;
 }
 
@@ -219,21 +196,11 @@ drm_pci_agp_destroy(struct drm_device *d
 	}
 }
 
-static int
-drm_pci_get_irq(struct drm_device *dev)
-{
-
-	/*
-	 * Caller expects a nonzero int, and doesn't really use it for
-	 * anything, so no need to pci_intr_map here.
-	 */
-	return dev->pdev->pd_pa.pa_intrpin;
-}
-
-static int
-drm_pci_irq_install(struct drm_device *dev, irqreturn_t (*handler)(void *),
-    int flags, const char *name, void *arg, struct drm_bus_irq_cookie **cookiep)
+int
+drm_pci_request_irq(struct drm_device *dev, int flags)
 {
+	const char *const name = device_xname(dev->dev);
+	int (*const handler)(void *) = dev->driver->irq_handler;
 	const struct pci_attach_args *const pa = drm_pci_attach_args(dev);
 	const char *intrstr;
 	char intrbuf[PCI_INTRSTR_LEN];
@@ -264,7 +231,7 @@ drm_pci_irq_install(struct drm_device *d
 	intrstr = pci_intr_string(pa->pa_pc, irq_cookie->intr_handles[0],
 	    intrbuf, sizeof(intrbuf));
 	irq_cookie->ih_cookie = pci_intr_establish_xname(pa->pa_pc,
-	    irq_cookie->intr_handles[0], IPL_DRM, handler, arg, name);
+	    irq_cookie->intr_handles[0], IPL_DRM, handler, dev, name);
 	if (irq_cookie->ih_cookie == NULL) {
 		aprint_error_dev(dev->dev,
 		    "couldn't establish interrupt at %s (%s)\n", intrstr, name);
@@ -273,7 +240,7 @@ drm_pci_irq_install(struct drm_device *d
 	}
 
 	aprint_normal_dev(dev->dev, "interrupting at %s (%s)\n", intrstr, name);
-	*cookiep = irq_cookie;
+	dev->irq_cookie = irq_cookie;
 	return 0;
 
 error:
@@ -281,97 +248,29 @@ error:
 	return -ENOENT;
 }
 
-static void
-drm_pci_irq_uninstall(struct drm_device *dev, struct drm_bus_irq_cookie *cookie)
+void
+drm_pci_free_irq(struct drm_device *dev)
 {
+	struct drm_bus_irq_cookie *const cookie = dev->irq_cookie;
 	const struct pci_attach_args *pa = drm_pci_attach_args(dev);
 
 	pci_intr_disestablish(pa->pa_pc, cookie->ih_cookie);
 	pci_intr_release(pa->pa_pc, cookie->intr_handles, 1);
 	kmem_free(cookie, sizeof(*cookie));
-}
-
-static const char *
-drm_pci_get_name(struct drm_device *dev)
-{
-	return "pci";		/* XXX PCI bus names?  */
-}
-
-static int
-drm_pci_format_unique(struct drm_device *dev, char *buf, size_t size)
-{
-	const unsigned int domain = device_unit(device_parent(dev->dev));
-	const unsigned int bus = dev->pdev->pd_pa.pa_bus;
-	const unsigned int device = dev->pdev->pd_pa.pa_device;
-	const unsigned int function = dev->pdev->pd_pa.pa_function;
-
-	return snprintf(buf, size, "pci:%04x:%02x:%02x.%d",
-	    domain, bus, device, function);
-}
-
-static int
-drm_pci_format_devname(struct drm_device *dev, const char *unique,
-    char *buf, size_t size)
-{
-
-	return snprintf(buf, size, "%s@%s",
-	    device_xname(device_parent(dev->dev)),
-	    unique);
+	dev->irq_cookie = NULL;
 }
 
 int
 drm_pci_set_busid(struct drm_device *dev, struct drm_master *master)
 {
-	int n;
-	char *buf;
+	const struct pci_attach_args *const pa = &dev->pdev->pd_pa;
 
-	n = drm_pci_format_unique(dev, NULL, 0);
-	if (n < 0)
-		return -ENOSPC;	/* XXX */
-	if (0xff < n)
-		n = 0xff;
-
-	buf = kzalloc(n + 1, GFP_KERNEL);
-	(void)drm_pci_format_unique(dev, buf, n + 1);
-
-	if (master->unique)
-		kfree(master->unique);
-	master->unique = buf;
-	master->unique_len = n;
-	master->unique_size = n + 1;
-
-	n = drm_pci_format_devname(dev, master->unique, NULL, 0);
-	if (n < 0)
-		return -ENOSPC;	/* XXX back out? */
-	if (0xff < n)
-		n = 0xff;
-
-	buf = kzalloc(n + 1, GFP_KERNEL);
-	(void)drm_pci_format_devname(dev, master->unique, buf, n + 1);
-
-	if (dev->devname)
-		kfree(dev->devname);
-	dev->devname = buf;
+	master->unique = kasprintf(GFP_KERNEL, "pci:%04x:%02x:%02x.%d",
+	    device_unit(device_parent(dev->dev)),
+	    pa->pa_bus, pa->pa_device, pa->pa_function);
+	if (master->unique == NULL)
+		return -ENOMEM;
+	master->unique_len = strlen(master->unique);
 
 	return 0;
 }
-
-static int
-drm_pci_set_unique(struct drm_device *dev, struct drm_master *master,
-    struct drm_unique *unique __unused)
-{
-
-	/*
-	 * XXX This is silly.  We're supposed to reject unique names
-	 * that don't match the ones we would generate anyway.  For
-	 * expedience, we'll just generate the one we would and ignore
-	 * whatever userland threw at us...
-	 */
-	return drm_pci_set_busid(dev, master);
-}
-
-static int
-drm_pci_irq_by_busid(struct drm_device *dev, struct drm_irq_busid *busid)
-{
-	return -ENOSYS;		/* XXX */
-}

Reply via email to