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 */
-}