aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/drm_drv.c')
-rw-r--r--drivers/gpu/drm/drm_drv.c40
1 files changed, 10 insertions, 30 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 3242e208c0d0..bc3da32d4585 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -35,32 +35,20 @@
35#include <drm/drmP.h> 35#include <drm/drmP.h>
36#include <drm/drm_core.h> 36#include <drm/drm_core.h>
37#include "drm_legacy.h" 37#include "drm_legacy.h"
38#include "drm_internal.h"
38 39
39unsigned int drm_debug = 0; /* 1 to enable debug output */ 40unsigned int drm_debug = 0; /* 1 to enable debug output */
40EXPORT_SYMBOL(drm_debug); 41EXPORT_SYMBOL(drm_debug);
41 42
42unsigned int drm_vblank_offdelay = 5000; /* Default to 5000 msecs. */
43
44unsigned int drm_timestamp_precision = 20; /* Default to 20 usecs. */
45
46/*
47 * Default to use monotonic timestamps for wait-for-vblank and page-flip
48 * complete events.
49 */
50unsigned int drm_timestamp_monotonic = 1;
51
52MODULE_AUTHOR(CORE_AUTHOR); 43MODULE_AUTHOR(CORE_AUTHOR);
53MODULE_DESCRIPTION(CORE_DESC); 44MODULE_DESCRIPTION(CORE_DESC);
54MODULE_LICENSE("GPL and additional rights"); 45MODULE_LICENSE("GPL and additional rights");
55MODULE_PARM_DESC(debug, "Enable debug output"); 46MODULE_PARM_DESC(debug, "Enable debug output");
56MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable [msecs]"); 47MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable [msecs] (0: never disable, <0: disable immediately)");
57MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]"); 48MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]");
58MODULE_PARM_DESC(timestamp_monotonic, "Use monotonic timestamps"); 49MODULE_PARM_DESC(timestamp_monotonic, "Use monotonic timestamps");
59 50
60module_param_named(debug, drm_debug, int, 0600); 51module_param_named(debug, drm_debug, int, 0600);
61module_param_named(vblankoffdelay, drm_vblank_offdelay, int, 0600);
62module_param_named(timestamp_precision_usec, drm_timestamp_precision, int, 0600);
63module_param_named(timestamp_monotonic, drm_timestamp_monotonic, int, 0600);
64 52
65static DEFINE_SPINLOCK(drm_minor_lock); 53static DEFINE_SPINLOCK(drm_minor_lock);
66static struct idr drm_minors_idr; 54static struct idr drm_minors_idr;
@@ -68,22 +56,19 @@ static struct idr drm_minors_idr;
68struct class *drm_class; 56struct class *drm_class;
69static struct dentry *drm_debugfs_root; 57static struct dentry *drm_debugfs_root;
70 58
71int drm_err(const char *func, const char *format, ...) 59void drm_err(const char *func, const char *format, ...)
72{ 60{
73 struct va_format vaf; 61 struct va_format vaf;
74 va_list args; 62 va_list args;
75 int r;
76 63
77 va_start(args, format); 64 va_start(args, format);
78 65
79 vaf.fmt = format; 66 vaf.fmt = format;
80 vaf.va = &args; 67 vaf.va = &args;
81 68
82 r = printk(KERN_ERR "[" DRM_NAME ":%s] *ERROR* %pV", func, &vaf); 69 printk(KERN_ERR "[" DRM_NAME ":%s] *ERROR* %pV", func, &vaf);
83 70
84 va_end(args); 71 va_end(args);
85
86 return r;
87} 72}
88EXPORT_SYMBOL(drm_err); 73EXPORT_SYMBOL(drm_err);
89 74
@@ -102,6 +87,8 @@ void drm_ut_debug_printk(const char *function_name, const char *format, ...)
102} 87}
103EXPORT_SYMBOL(drm_ut_debug_printk); 88EXPORT_SYMBOL(drm_ut_debug_printk);
104 89
90#define DRM_MAGIC_HASH_ORDER 4 /**< Size of key hash table. Must be power of 2. */
91
105struct drm_master *drm_master_create(struct drm_minor *minor) 92struct drm_master *drm_master_create(struct drm_minor *minor)
106{ 93{
107 struct drm_master *master; 94 struct drm_master *master;
@@ -133,7 +120,6 @@ EXPORT_SYMBOL(drm_master_get);
133static void drm_master_destroy(struct kref *kref) 120static void drm_master_destroy(struct kref *kref)
134{ 121{
135 struct drm_master *master = container_of(kref, struct drm_master, refcount); 122 struct drm_master *master = container_of(kref, struct drm_master, refcount);
136 struct drm_magic_entry *pt, *next;
137 struct drm_device *dev = master->minor->dev; 123 struct drm_device *dev = master->minor->dev;
138 struct drm_map_list *r_list, *list_temp; 124 struct drm_map_list *r_list, *list_temp;
139 125
@@ -143,7 +129,7 @@ static void drm_master_destroy(struct kref *kref)
143 129
144 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) { 130 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) {
145 if (r_list->master == master) { 131 if (r_list->master == master) {
146 drm_rmmap_locked(dev, r_list->map); 132 drm_legacy_rmmap_locked(dev, r_list->map);
147 r_list = NULL; 133 r_list = NULL;
148 } 134 }
149 } 135 }
@@ -154,12 +140,6 @@ static void drm_master_destroy(struct kref *kref)
154 master->unique_len = 0; 140 master->unique_len = 0;
155 } 141 }
156 142
157 list_for_each_entry_safe(pt, next, &master->magicfree, head) {
158 list_del(&pt->head);
159 drm_ht_remove_item(&master->magiclist, &pt->hash_item);
160 kfree(pt);
161 }
162
163 drm_ht_remove(&master->magiclist); 143 drm_ht_remove(&master->magiclist);
164 144
165 mutex_unlock(&dev->struct_mutex); 145 mutex_unlock(&dev->struct_mutex);
@@ -615,7 +595,7 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver,
615 goto err_ht; 595 goto err_ht;
616 } 596 }
617 597
618 if (driver->driver_features & DRIVER_GEM) { 598 if (drm_core_check_feature(dev, DRIVER_GEM)) {
619 ret = drm_gem_init(dev); 599 ret = drm_gem_init(dev);
620 if (ret) { 600 if (ret) {
621 DRM_ERROR("Cannot initialize graphics execution manager (GEM)\n"); 601 DRM_ERROR("Cannot initialize graphics execution manager (GEM)\n");
@@ -645,7 +625,7 @@ static void drm_dev_release(struct kref *ref)
645{ 625{
646 struct drm_device *dev = container_of(ref, struct drm_device, ref); 626 struct drm_device *dev = container_of(ref, struct drm_device, ref);
647 627
648 if (dev->driver->driver_features & DRIVER_GEM) 628 if (drm_core_check_feature(dev, DRIVER_GEM))
649 drm_gem_destroy(dev); 629 drm_gem_destroy(dev);
650 630
651 drm_legacy_ctxbitmap_cleanup(dev); 631 drm_legacy_ctxbitmap_cleanup(dev);
@@ -779,7 +759,7 @@ void drm_dev_unregister(struct drm_device *dev)
779 drm_vblank_cleanup(dev); 759 drm_vblank_cleanup(dev);
780 760
781 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) 761 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head)
782 drm_rmmap(dev, r_list->map); 762 drm_legacy_rmmap(dev, r_list->map);
783 763
784 drm_minor_unregister(dev, DRM_MINOR_LEGACY); 764 drm_minor_unregister(dev, DRM_MINOR_LEGACY);
785 drm_minor_unregister(dev, DRM_MINOR_RENDER); 765 drm_minor_unregister(dev, DRM_MINOR_RENDER);