From 957b10695b619d6ed2f1098b00502395d9a3c149 Mon Sep 17 00:00:00 2001
From: Robert Noland <rnoland@2hip.net>
Date: Wed, 25 Feb 2009 17:59:26 -0600
Subject: Move vblank_init to driver load time.

---
 bsd-core/drmP.h       | 1 +
 bsd-core/drm_drv.c    | 2 ++
 bsd-core/drm_irq.c    | 4 +---
 bsd-core/mach64_drv.c | 7 +++++++
 bsd-core/r128_drv.c   | 6 ++++++
 5 files changed, 17 insertions(+), 3 deletions(-)

(limited to 'bsd-core')

diff --git a/bsd-core/drmP.h b/bsd-core/drmP.h
index 573c2b19..69147b33 100644
--- a/bsd-core/drmP.h
+++ b/bsd-core/drmP.h
@@ -797,6 +797,7 @@ void	drm_handle_vblank(struct drm_device *dev, int crtc);
 u32	drm_vblank_count(struct drm_device *dev, int crtc);
 int	drm_vblank_get(struct drm_device *dev, int crtc);
 void	drm_vblank_put(struct drm_device *dev, int crtc);
+void	drm_vblank_cleanup(struct drm_device *dev);
 int	drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq);
 int	drm_vblank_init(struct drm_device *dev, int num_crtcs);
 void	drm_vbl_send_signals(struct drm_device *dev, int crtc);
diff --git a/bsd-core/drm_drv.c b/bsd-core/drm_drv.c
index c45a4427..794f32ea 100644
--- a/bsd-core/drm_drv.c
+++ b/bsd-core/drm_drv.c
@@ -512,6 +512,8 @@ static void drm_unload(struct drm_device *dev)
 		DRM_DEBUG("mtrr_del = %d", retcode);
 	}
 
+	drm_vblank_cleanup(dev);
+
 	DRM_LOCK();
 	drm_lastclose(dev);
 	DRM_UNLOCK();
diff --git a/bsd-core/drm_irq.c b/bsd-core/drm_irq.c
index 8a9d3449..2ca4275e 100644
--- a/bsd-core/drm_irq.c
+++ b/bsd-core/drm_irq.c
@@ -93,7 +93,7 @@ static void vblank_disable_fn(void *arg)
 	}
 }
 
-static void drm_vblank_cleanup(struct drm_device *dev)
+void drm_vblank_cleanup(struct drm_device *dev)
 {
 	unsigned long irqflags;
 
@@ -210,8 +210,6 @@ int drm_irq_uninstall(struct drm_device *dev)
 	bus_teardown_intr(dev->device, dev->irqr, dev->irqh);
 	DRM_LOCK();
 
-	drm_vblank_cleanup(dev);
-
 	return 0;
 }
 
diff --git a/bsd-core/mach64_drv.c b/bsd-core/mach64_drv.c
index 1cbe5f39..f73e7730 100644
--- a/bsd-core/mach64_drv.c
+++ b/bsd-core/mach64_drv.c
@@ -51,6 +51,7 @@ static void mach64_configure(struct drm_device *dev)
 	    DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ;
 
 	dev->driver->buf_priv_size	= 1; /* No dev_priv */
+	dev->driver->load		= mach64_driver_load;
 	dev->driver->lastclose		= mach64_driver_lastclose;
 	dev->driver->get_vblank_counter	= mach64_get_vblank_counter;
 	dev->driver->enable_vblank	= mach64_enable_vblank;
@@ -91,6 +92,12 @@ mach64_attach(device_t nbdev)
 	return drm_attach(nbdev, mach64_pciidlist);
 }
 
+int
+mach64_driver_load(struct drm_device * dev, unsigned long flags)
+{
+        return drm_vblank_init(dev, 1);
+}
+
 static int
 mach64_detach(device_t nbdev)
 {
diff --git a/bsd-core/r128_drv.c b/bsd-core/r128_drv.c
index 3dbf66eb..f28bcf2c 100644
--- a/bsd-core/r128_drv.c
+++ b/bsd-core/r128_drv.c
@@ -49,6 +49,7 @@ static void r128_configure(struct drm_device *dev)
 	    DRIVER_SG | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ;
 
 	dev->driver->buf_priv_size	= sizeof(drm_r128_buf_priv_t);
+	dev->driver->load		= r128_driver_load;
 	dev->driver->preclose		= r128_driver_preclose;
 	dev->driver->lastclose		= r128_driver_lastclose;
 	dev->driver->get_vblank_counter	= r128_get_vblank_counter;
@@ -90,6 +91,11 @@ r128_attach(device_t nbdev)
 	return drm_attach(nbdev, r128_pciidlist);
 }
 
+int r128_driver_load(struct drm_device * dev, unsigned long flags)
+{
+	return drm_vblank_init(dev, 1);
+}
+
 static int
 r128_detach(device_t nbdev)
 {
-- 
cgit v1.2.3