summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Noland <rnoland@2hip.net>2009-02-25 17:59:26 -0600
committerRobert Noland <rnoland@2hip.net>2009-02-27 18:16:17 -0600
commit957b10695b619d6ed2f1098b00502395d9a3c149 (patch)
tree73ece8ec6f01018ea9fc920ee04992ec5e0fee2b
parent7ce8d4c1fec618ac2578ea0ddb8915b1b41ab9cb (diff)
Move vblank_init to driver load time.
-rw-r--r--bsd-core/drmP.h1
-rw-r--r--bsd-core/drm_drv.c2
-rw-r--r--bsd-core/drm_irq.c4
-rw-r--r--bsd-core/mach64_drv.c7
-rw-r--r--bsd-core/r128_drv.c6
-rw-r--r--linux-core/drm_drv.c2
-rw-r--r--linux-core/drm_irq.c4
-rw-r--r--shared-core/i915_dma.c7
-rw-r--r--shared-core/i915_drv.h2
-rw-r--r--shared-core/i915_irq.c5
-rw-r--r--shared-core/mach64_drv.h1
-rw-r--r--shared-core/mach64_irq.c2
-rw-r--r--shared-core/mga_dma.c8
-rw-r--r--shared-core/mga_irq.c5
-rw-r--r--shared-core/r128_drv.h1
-rw-r--r--shared-core/r128_irq.c2
-rw-r--r--shared-core/radeon_cp.c6
-rw-r--r--shared-core/radeon_irq.c5
-rw-r--r--shared-core/via_irq.c1
-rw-r--r--shared-core/via_map.c12
20 files changed, 58 insertions, 25 deletions
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);
797u32 drm_vblank_count(struct drm_device *dev, int crtc); 797u32 drm_vblank_count(struct drm_device *dev, int crtc);
798int drm_vblank_get(struct drm_device *dev, int crtc); 798int drm_vblank_get(struct drm_device *dev, int crtc);
799void drm_vblank_put(struct drm_device *dev, int crtc); 799void drm_vblank_put(struct drm_device *dev, int crtc);
800void drm_vblank_cleanup(struct drm_device *dev);
800int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); 801int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq);
801int drm_vblank_init(struct drm_device *dev, int num_crtcs); 802int drm_vblank_init(struct drm_device *dev, int num_crtcs);
802void drm_vbl_send_signals(struct drm_device *dev, int crtc); 803void 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)
512 DRM_DEBUG("mtrr_del = %d", retcode); 512 DRM_DEBUG("mtrr_del = %d", retcode);
513 } 513 }
514 514
515 drm_vblank_cleanup(dev);
516
515 DRM_LOCK(); 517 DRM_LOCK();
516 drm_lastclose(dev); 518 drm_lastclose(dev);
517 DRM_UNLOCK(); 519 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)
93 } 93 }
94} 94}
95 95
96static void drm_vblank_cleanup(struct drm_device *dev) 96void drm_vblank_cleanup(struct drm_device *dev)
97{ 97{
98 unsigned long irqflags; 98 unsigned long irqflags;
99 99
@@ -210,8 +210,6 @@ int drm_irq_uninstall(struct drm_device *dev)
210 bus_teardown_intr(dev->device, dev->irqr, dev->irqh); 210 bus_teardown_intr(dev->device, dev->irqr, dev->irqh);
211 DRM_LOCK(); 211 DRM_LOCK();
212 212
213 drm_vblank_cleanup(dev);
214
215 return 0; 213 return 0;
216} 214}
217 215
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)
51 DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ; 51 DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ;
52 52
53 dev->driver->buf_priv_size = 1; /* No dev_priv */ 53 dev->driver->buf_priv_size = 1; /* No dev_priv */
54 dev->driver->load = mach64_driver_load;
54 dev->driver->lastclose = mach64_driver_lastclose; 55 dev->driver->lastclose = mach64_driver_lastclose;
55 dev->driver->get_vblank_counter = mach64_get_vblank_counter; 56 dev->driver->get_vblank_counter = mach64_get_vblank_counter;
56 dev->driver->enable_vblank = mach64_enable_vblank; 57 dev->driver->enable_vblank = mach64_enable_vblank;
@@ -91,6 +92,12 @@ mach64_attach(device_t nbdev)
91 return drm_attach(nbdev, mach64_pciidlist); 92 return drm_attach(nbdev, mach64_pciidlist);
92} 93}
93 94
95int
96mach64_driver_load(struct drm_device * dev, unsigned long flags)
97{
98 return drm_vblank_init(dev, 1);
99}
100
94static int 101static int
95mach64_detach(device_t nbdev) 102mach64_detach(device_t nbdev)
96{ 103{
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)
49 DRIVER_SG | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ; 49 DRIVER_SG | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ;
50 50
51 dev->driver->buf_priv_size = sizeof(drm_r128_buf_priv_t); 51 dev->driver->buf_priv_size = sizeof(drm_r128_buf_priv_t);
52 dev->driver->load = r128_driver_load;
52 dev->driver->preclose = r128_driver_preclose; 53 dev->driver->preclose = r128_driver_preclose;
53 dev->driver->lastclose = r128_driver_lastclose; 54 dev->driver->lastclose = r128_driver_lastclose;
54 dev->driver->get_vblank_counter = r128_get_vblank_counter; 55 dev->driver->get_vblank_counter = r128_get_vblank_counter;
@@ -90,6 +91,11 @@ r128_attach(device_t nbdev)
90 return drm_attach(nbdev, r128_pciidlist); 91 return drm_attach(nbdev, r128_pciidlist);
91} 92}
92 93
94int r128_driver_load(struct drm_device * dev, unsigned long flags)
95{
96 return drm_vblank_init(dev, 1);
97}
98
93static int 99static int
94r128_detach(device_t nbdev) 100r128_detach(device_t nbdev)
95{ 101{
diff --git a/linux-core/drm_drv.c b/linux-core/drm_drv.c
index 31a98fe8..a32bfa3c 100644
--- a/linux-core/drm_drv.c
+++ b/linux-core/drm_drv.c
@@ -397,6 +397,8 @@ static void drm_cleanup(struct drm_device * dev)
397 return; 397 return;
398 } 398 }
399 399
400 drm_vblank_cleanup(dev);
401
400 drm_lastclose(dev); 402 drm_lastclose(dev);
401 drm_fence_manager_takedown(dev); 403 drm_fence_manager_takedown(dev);
402 404
diff --git a/linux-core/drm_irq.c b/linux-core/drm_irq.c
index 57419ca1..64fffd9c 100644
--- a/linux-core/drm_irq.c
+++ b/linux-core/drm_irq.c
@@ -94,7 +94,7 @@ static void vblank_disable_fn(unsigned long arg)
94 } 94 }
95} 95}
96 96
97static void drm_vblank_cleanup(struct drm_device *dev) 97void drm_vblank_cleanup(struct drm_device *dev)
98{ 98{
99 /* Bail if the driver didn't call drm_vblank_init() */ 99 /* Bail if the driver didn't call drm_vblank_init() */
100 if (dev->num_crtcs == 0) 100 if (dev->num_crtcs == 0)
@@ -282,8 +282,6 @@ int drm_irq_uninstall(struct drm_device * dev)
282 282
283 free_irq(dev->pdev->irq, dev); 283 free_irq(dev->pdev->irq, dev);
284 284
285 drm_vblank_cleanup(dev);
286
287 dev->locked_tasklet_func = NULL; 285 dev->locked_tasklet_func = NULL;
288 286
289 return 0; 287 return 0;
diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c
index b97b576f..9afb2e84 100644
--- a/shared-core/i915_dma.c
+++ b/shared-core/i915_dma.c
@@ -898,6 +898,13 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
898#endif 898#endif
899 DRM_SPININIT(&dev_priv->user_irq_lock, "userirq"); 899 DRM_SPININIT(&dev_priv->user_irq_lock, "userirq");
900 900
901 ret = drm_vblank_init(dev, I915_NUM_PIPE);
902
903 if (ret) {
904 (void) i915_driver_unload(dev);
905 return ret;
906 }
907
901 return ret; 908 return ret;
902} 909}
903 910
diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h
index aa97aabb..6185bcbf 100644
--- a/shared-core/i915_drv.h
+++ b/shared-core/i915_drv.h
@@ -46,6 +46,8 @@ enum pipe {
46 PIPE_B, 46 PIPE_B,
47}; 47};
48 48
49#define I915_NUM_PIPE 2
50
49/* Interface history: 51/* Interface history:
50 * 52 *
51 * 1.1: Original. 53 * 1.1: Original.
diff --git a/shared-core/i915_irq.c b/shared-core/i915_irq.c
index 50ff93a4..51c1a973 100644
--- a/shared-core/i915_irq.c
+++ b/shared-core/i915_irq.c
@@ -481,11 +481,6 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
481int i915_driver_irq_postinstall(struct drm_device *dev) 481int i915_driver_irq_postinstall(struct drm_device *dev)
482{ 482{
483 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; 483 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
484 int ret, num_pipes = 2;
485
486 ret = drm_vblank_init(dev, num_pipes);
487 if (ret)
488 return ret;
489 484
490 dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B; 485 dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B;
491 486
diff --git a/shared-core/mach64_drv.h b/shared-core/mach64_drv.h
index fb8a7724..6b0020ef 100644
--- a/shared-core/mach64_drv.h
+++ b/shared-core/mach64_drv.h
@@ -163,6 +163,7 @@ extern int mach64_dma_blit(struct drm_device *dev, void *data,
163extern int mach64_get_param(struct drm_device *dev, void *data, 163extern int mach64_get_param(struct drm_device *dev, void *data,
164 struct drm_file *file_priv); 164 struct drm_file *file_priv);
165 165
166extern int mach64_driver_load(struct drm_device * dev, unsigned long flags);
166extern u32 mach64_get_vblank_counter(struct drm_device *dev, int crtc); 167extern u32 mach64_get_vblank_counter(struct drm_device *dev, int crtc);
167extern int mach64_enable_vblank(struct drm_device *dev, int crtc); 168extern int mach64_enable_vblank(struct drm_device *dev, int crtc);
168extern void mach64_disable_vblank(struct drm_device *dev, int crtc); 169extern void mach64_disable_vblank(struct drm_device *dev, int crtc);
diff --git a/shared-core/mach64_irq.c b/shared-core/mach64_irq.c
index 57879e8d..149d970a 100644
--- a/shared-core/mach64_irq.c
+++ b/shared-core/mach64_irq.c
@@ -143,7 +143,7 @@ void mach64_driver_irq_preinstall(struct drm_device * dev)
143 143
144int mach64_driver_irq_postinstall(struct drm_device * dev) 144int mach64_driver_irq_postinstall(struct drm_device * dev)
145{ 145{
146 return drm_vblank_init(dev, 1); 146 return 0;
147} 147}
148 148
149void mach64_driver_irq_uninstall(struct drm_device * dev) 149void mach64_driver_irq_uninstall(struct drm_device * dev)
diff --git a/shared-core/mga_dma.c b/shared-core/mga_dma.c
index d56f4d7a..dab94034 100644
--- a/shared-core/mga_dma.c
+++ b/shared-core/mga_dma.c
@@ -396,6 +396,7 @@ int mga_freelist_put(struct drm_device * dev, struct drm_buf * buf)
396int mga_driver_load(struct drm_device *dev, unsigned long flags) 396int mga_driver_load(struct drm_device *dev, unsigned long flags)
397{ 397{
398 drm_mga_private_t *dev_priv; 398 drm_mga_private_t *dev_priv;
399 int ret;
399 400
400 dev_priv = drm_alloc(sizeof(drm_mga_private_t), DRM_MEM_DRIVER); 401 dev_priv = drm_alloc(sizeof(drm_mga_private_t), DRM_MEM_DRIVER);
401 if (!dev_priv) 402 if (!dev_priv)
@@ -415,6 +416,13 @@ int mga_driver_load(struct drm_device *dev, unsigned long flags)
415 dev->types[7] = _DRM_STAT_PRIMARY; 416 dev->types[7] = _DRM_STAT_PRIMARY;
416 dev->types[8] = _DRM_STAT_SECONDARY; 417 dev->types[8] = _DRM_STAT_SECONDARY;
417 418
419 ret = drm_vblank_init(dev, 1);
420
421 if (ret) {
422 (void) mga_driver_unload(dev);
423 return ret;
424 }
425
418 return 0; 426 return 0;
419} 427}
420 428
diff --git a/shared-core/mga_irq.c b/shared-core/mga_irq.c
index 4fe86322..6986ac85 100644
--- a/shared-core/mga_irq.c
+++ b/shared-core/mga_irq.c
@@ -154,11 +154,6 @@ void mga_driver_irq_preinstall(struct drm_device * dev)
154int mga_driver_irq_postinstall(struct drm_device * dev) 154int mga_driver_irq_postinstall(struct drm_device * dev)
155{ 155{
156 drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private; 156 drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
157 int ret;
158
159 ret = drm_vblank_init(dev, 1);
160 if (ret)
161 return ret;
162 157
163 DRM_INIT_WAITQUEUE(&dev_priv->fence_queue); 158 DRM_INIT_WAITQUEUE(&dev_priv->fence_queue);
164 159
diff --git a/shared-core/r128_drv.h b/shared-core/r128_drv.h
index ab8b6297..9e7a6467 100644
--- a/shared-core/r128_drv.h
+++ b/shared-core/r128_drv.h
@@ -159,6 +159,7 @@ extern void r128_driver_irq_preinstall(struct drm_device * dev);
159extern int r128_driver_irq_postinstall(struct drm_device * dev); 159extern int r128_driver_irq_postinstall(struct drm_device * dev);
160extern void r128_driver_irq_uninstall(struct drm_device * dev); 160extern void r128_driver_irq_uninstall(struct drm_device * dev);
161extern void r128_driver_lastclose(struct drm_device * dev); 161extern void r128_driver_lastclose(struct drm_device * dev);
162extern int r128_driver_load(struct drm_device * dev, unsigned long flags);
162extern void r128_driver_preclose(struct drm_device * dev, 163extern void r128_driver_preclose(struct drm_device * dev,
163 struct drm_file *file_priv); 164 struct drm_file *file_priv);
164 165
diff --git a/shared-core/r128_irq.c b/shared-core/r128_irq.c
index 5b95bd89..86e5daa9 100644
--- a/shared-core/r128_irq.c
+++ b/shared-core/r128_irq.c
@@ -102,7 +102,7 @@ void r128_driver_irq_preinstall(struct drm_device * dev)
102 102
103int r128_driver_irq_postinstall(struct drm_device * dev) 103int r128_driver_irq_postinstall(struct drm_device * dev)
104{ 104{
105 return drm_vblank_init(dev, 1); 105 return 0;
106} 106}
107 107
108void r128_driver_irq_uninstall(struct drm_device * dev) 108void r128_driver_irq_uninstall(struct drm_device * dev)
diff --git a/shared-core/radeon_cp.c b/shared-core/radeon_cp.c
index c4035b89..872f5891 100644
--- a/shared-core/radeon_cp.c
+++ b/shared-core/radeon_cp.c
@@ -1748,6 +1748,12 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags)
1748 else 1748 else
1749 dev_priv->flags |= RADEON_IS_PCI; 1749 dev_priv->flags |= RADEON_IS_PCI;
1750 1750
1751 ret = drm_vblank_init(dev, 2);
1752 if (ret) {
1753 radeon_driver_unload(dev);
1754 return ret;
1755 }
1756
1751 DRM_DEBUG("%s card detected\n", 1757 DRM_DEBUG("%s card detected\n",
1752 ((dev_priv->flags & RADEON_IS_AGP) ? "AGP" : (((dev_priv->flags & RADEON_IS_PCIE) ? "PCIE" : "PCI")))); 1758 ((dev_priv->flags & RADEON_IS_AGP) ? "AGP" : (((dev_priv->flags & RADEON_IS_PCIE) ? "PCIE" : "PCI"))));
1753 return ret; 1759 return ret;
diff --git a/shared-core/radeon_irq.c b/shared-core/radeon_irq.c
index 165e7bd2..60654b2c 100644
--- a/shared-core/radeon_irq.c
+++ b/shared-core/radeon_irq.c
@@ -369,15 +369,10 @@ int radeon_driver_irq_postinstall(struct drm_device * dev)
369{ 369{
370 drm_radeon_private_t *dev_priv = 370 drm_radeon_private_t *dev_priv =
371 (drm_radeon_private_t *) dev->dev_private; 371 (drm_radeon_private_t *) dev->dev_private;
372 int ret;
373 372
374 atomic_set(&dev_priv->swi_emitted, 0); 373 atomic_set(&dev_priv->swi_emitted, 0);
375 DRM_INIT_WAITQUEUE(&dev_priv->swi_queue); 374 DRM_INIT_WAITQUEUE(&dev_priv->swi_queue);
376 375
377 ret = drm_vblank_init(dev, 2);
378 if (ret)
379 return ret;
380
381 dev->max_vblank_count = 0x001fffff; 376 dev->max_vblank_count = 0x001fffff;
382 377
383 radeon_irq_set_state(dev, RADEON_SW_INT_ENABLE, 1); 378 radeon_irq_set_state(dev, RADEON_SW_INT_ENABLE, 1);
diff --git a/shared-core/via_irq.c b/shared-core/via_irq.c
index c3279f8b..34e3076c 100644
--- a/shared-core/via_irq.c
+++ b/shared-core/via_irq.c
@@ -320,7 +320,6 @@ int via_driver_irq_postinstall(struct drm_device * dev)
320 if (!dev_priv) 320 if (!dev_priv)
321 return -EINVAL; 321 return -EINVAL;
322 322
323 drm_vblank_init(dev, 1);
324 status = VIA_READ(VIA_REG_INTERRUPT); 323 status = VIA_READ(VIA_REG_INTERRUPT);
325 VIA_WRITE(VIA_REG_INTERRUPT, status | VIA_IRQ_GLOBAL 324 VIA_WRITE(VIA_REG_INTERRUPT, status | VIA_IRQ_GLOBAL
326 | dev_priv->irq_enable_mask); 325 | dev_priv->irq_enable_mask);
diff --git a/shared-core/via_map.c b/shared-core/via_map.c
index 54934367..5dee6a70 100644
--- a/shared-core/via_map.c
+++ b/shared-core/via_map.c
@@ -121,9 +121,19 @@ int via_driver_load(struct drm_device *dev, unsigned long chipset)
121 ret = drm_sman_init(&dev_priv->sman, 2, 12, 8); 121 ret = drm_sman_init(&dev_priv->sman, 2, 12, 8);
122 if (ret) { 122 if (ret) {
123 drm_free(dev_priv, sizeof(*dev_priv), DRM_MEM_DRIVER); 123 drm_free(dev_priv, sizeof(*dev_priv), DRM_MEM_DRIVER);
124 return ret;
124 } 125 }
125#endif 126#endif
126 return ret; 127
128 ret = drm_vblank_init(dev, 1);
129 if (ret) {
130 drm_sman_takedown(&dev_priv->sman);
131 drm_free(dev_priv, sizeof(drm_via_private_t), DRM_MEM_DRIVER);
132 return ret;
133 }
134
135 return 0;
136
127} 137}
128 138
129int via_driver_unload(struct drm_device *dev) 139int via_driver_unload(struct drm_device *dev)