summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2013-11-02 09:30:40 +0000
committerDave Airlie <airlied@redhat.com>2013-11-02 09:31:45 +0000
commitbc125f96a38664167e65dde0512328ea20af430a (patch)
treec3cfd079115f9c0b534eabb34a099f3b6ddb5f8b
parentc6a3de0479e362f896ebd030a8dc218e7edd23fa (diff)
drm: export some more functions
-rw-r--r--drivers/gpu/drm/drm_irq.c36
-rw-r--r--drivers/gpu/drm/drm_stub.c19
-rw-r--r--include/drm/drmP.h3
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