diff options
author | Dave Airlie <airlied@redhat.com> | 2013-11-02 09:30:40 +0000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-11-02 09:31:45 +0000 |
commit | bc125f96a38664167e65dde0512328ea20af430a (patch) | |
tree | c3cfd079115f9c0b534eabb34a099f3b6ddb5f8b | |
parent | c6a3de0479e362f896ebd030a8dc218e7edd23fa (diff) |
drm: export some more functions
-rw-r--r-- | drivers/gpu/drm/drm_irq.c | 36 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_stub.c | 19 | ||||
-rw-r--r-- | include/drm/drmP.h | 3 |
3 files changed, 36 insertions, 22 deletions
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index f9af048828ea..d6c57c7f9107 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c @@ -341,6 +341,26 @@ int drm_irq_install(struct drm_device *dev) } EXPORT_SYMBOL(drm_irq_install); +void drm_irq_wakeup_waiters(struct drm_device *dev) +{ + unsigned long irqflags; + int i; + /* + * Wake up any waiters so they don't hang. + */ + if (dev->num_crtcs) { + spin_lock_irqsave(&dev->vbl_lock, irqflags); + for (i = 0; i < dev->num_crtcs; i++) { + DRM_WAKEUP(&dev->vblank[i].queue); + dev->vblank[i].enabled = false; + dev->vblank[i].last = + dev->driver->get_vblank_counter(dev, i); + } + spin_unlock_irqrestore(&dev->vbl_lock, irqflags); + } +} +EXPORT_SYMBOL(drm_irq_wakeup_waiters); + /** * Uninstall the IRQ handler. * @@ -350,9 +370,7 @@ EXPORT_SYMBOL(drm_irq_install); */ int drm_irq_uninstall(struct drm_device *dev) { - unsigned long irqflags; bool irq_enabled; - int i; if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ)) return -EINVAL; @@ -362,19 +380,7 @@ int drm_irq_uninstall(struct drm_device *dev) dev->irq_enabled = false; mutex_unlock(&dev->struct_mutex); - /* - * Wake up any waiters so they don't hang. - */ - if (dev->num_crtcs) { - spin_lock_irqsave(&dev->vbl_lock, irqflags); - for (i = 0; i < dev->num_crtcs; i++) { - DRM_WAKEUP(&dev->vblank[i].queue); - dev->vblank[i].enabled = false; - dev->vblank[i].last = - dev->driver->get_vblank_counter(dev, i); - } - spin_unlock_irqrestore(&dev->vbl_lock, irqflags); - } + drm_irq_wakeup_waiters(dev); if (!irq_enabled) return -EINVAL; diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 4590102a8555..70122fe22ddc 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c @@ -476,6 +476,17 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver, } EXPORT_SYMBOL(drm_dev_alloc); +void drm_dev_fini(struct drm_device *dev) +{ + if (dev->driver->driver_features & DRIVER_GEM) + drm_gem_destroy(dev); + + drm_ctxbitmap_cleanup(dev); + drm_ht_remove(&dev->map_hash); + + kfree(dev->devname); +} +EXPORT_SYMBOL(drm_dev_fini); /** * drm_dev_free - Free DRM device * @dev: DRM device to free @@ -488,13 +499,7 @@ EXPORT_SYMBOL(drm_dev_alloc); */ void drm_dev_free(struct drm_device *dev) { - if (dev->driver->driver_features & DRIVER_GEM) - drm_gem_destroy(dev); - - drm_ctxbitmap_cleanup(dev); - drm_ht_remove(&dev->map_hash); - - kfree(dev->devname); + drm_dev_fini(dev); kfree(dev); } EXPORT_SYMBOL(drm_dev_free); diff --git a/include/drm/drmP.h b/include/drm/drmP.h index db1c0b1b4afa..8fa241160c83 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -1670,6 +1670,9 @@ void drm_pci_driver_init(struct drm_driver *driver, struct pci_driver *pdriver); int drm_dev_init(struct drm_device *dev, struct drm_driver *driver, struct device *parent); +void drm_dev_fini(struct drm_device *dev); +int drm_register_minors(struct drm_device *dev); +void drm_irq_wakeup_waiters(struct drm_device *dev); #define DRM_PCIE_SPEED_25 1 #define DRM_PCIE_SPEED_50 2 #define DRM_PCIE_SPEED_80 4 |