bsd: Hook secondary vblank support.
authorRobert Noland <rnoland@2hip.net>
Sat, 1 Dec 2007 22:09:49 +0000 (17:09 -0500)
committerRobert Noland <rnoland@2hip.net>
Sat, 1 Dec 2007 22:23:09 +0000 (17:23 -0500)
bsd-core/drmP.h
bsd-core/drm_irq.c
bsd-core/i915_drv.c
bsd-core/radeon_drv.c

index d90660a..243a984 100644 (file)
@@ -650,6 +650,7 @@ struct drm_driver_info {
        void    (*irq_uninstall)(drm_device_t *dev);
        void    (*irq_handler)(DRM_IRQ_ARGS);
        int     (*vblank_wait)(drm_device_t *dev, unsigned int *sequence);
+       int     (*vblank_wait2)(drm_device_t *dev, unsigned int *sequence);
 
        drm_pci_id_list_t *id_entry;    /* PCI ID, name, and chipset private */
 
index 0772445..a58307c 100644 (file)
@@ -244,8 +244,14 @@ int drm_wait_vblank(drm_device_t *dev, void *data, struct drm_file *file_priv)
        } else {
                DRM_LOCK();
                /* shared code returns -errno */
-               ret = -dev->driver.vblank_wait(dev,
-                   &vblwait->request.sequence);
+               if (flags & _DRM_VBLANK_SECONDARY) {
+                       if (dev->driver.vblank_wait2)
+                               ret = -dev->driver.vblank_wait2(dev,
+                                       &vblwait->request.sequence);
+                       } else if (dev->driver.vblank_wait)
+                               ret = -dev->driver.vblank_wait(dev,
+                                       &vblwait->request.sequence);
+
                DRM_UNLOCK();
 
                microtime(&now);
index 89a1eb7..5150cf9 100644 (file)
@@ -48,6 +48,7 @@ static void i915_configure(drm_device_t *dev)
        dev->driver.lastclose           = i915_driver_lastclose;
        dev->driver.device_is_agp       = i915_driver_device_is_agp;
        dev->driver.vblank_wait         = i915_driver_vblank_wait;
+       dev->driver.vblank_wait2        = i915_driver_vblank_wait2;
        dev->driver.irq_preinstall      = i915_driver_irq_preinstall;
        dev->driver.irq_postinstall     = i915_driver_irq_postinstall;
        dev->driver.irq_uninstall       = i915_driver_irq_uninstall;
index f66bc79..114b98d 100644 (file)
@@ -53,6 +53,7 @@ static void radeon_configure(drm_device_t *dev)
        dev->driver.postclose           = radeon_driver_postclose;
        dev->driver.lastclose           = radeon_driver_lastclose;
        dev->driver.vblank_wait         = radeon_driver_vblank_wait;
+       dev->driver.vblank_wait2        = radeon_driver_vblank_wait2;
        dev->driver.irq_preinstall      = radeon_driver_irq_preinstall;
        dev->driver.irq_postinstall     = radeon_driver_irq_postinstall;
        dev->driver.irq_uninstall       = radeon_driver_irq_uninstall;