xref: /openbmc/linux/drivers/gpu/drm/drm_legacy_misc.c (revision 762f99f4f3cb41a775b5157dd761217beba65873)
145b2fda3SQian Cai /*
28437dd73SDave Airlie  * \file drm_legacy_misc.c
38437dd73SDave Airlie  * Misc legacy support functions.
48437dd73SDave Airlie  *
58437dd73SDave Airlie  * \author Rickard E. (Rik) Faith <faith@valinux.com>
68437dd73SDave Airlie  * \author Gareth Hughes <gareth@valinux.com>
78437dd73SDave Airlie  */
88437dd73SDave Airlie 
98437dd73SDave Airlie /*
108437dd73SDave Airlie  * Created: Tue Feb  2 08:37:54 1999 by faith@valinux.com
118437dd73SDave Airlie  *
128437dd73SDave Airlie  * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
138437dd73SDave Airlie  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
148437dd73SDave Airlie  * All Rights Reserved.
158437dd73SDave Airlie  *
168437dd73SDave Airlie  * Permission is hereby granted, free of charge, to any person obtaining a
178437dd73SDave Airlie  * copy of this software and associated documentation files (the "Software"),
188437dd73SDave Airlie  * to deal in the Software without restriction, including without limitation
198437dd73SDave Airlie  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
208437dd73SDave Airlie  * and/or sell copies of the Software, and to permit persons to whom the
218437dd73SDave Airlie  * Software is furnished to do so, subject to the following conditions:
228437dd73SDave Airlie  *
238437dd73SDave Airlie  * The above copyright notice and this permission notice (including the next
248437dd73SDave Airlie  * paragraph) shall be included in all copies or substantial portions of the
258437dd73SDave Airlie  * Software.
268437dd73SDave Airlie  *
278437dd73SDave Airlie  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
288437dd73SDave Airlie  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
298437dd73SDave Airlie  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
308437dd73SDave Airlie  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
318437dd73SDave Airlie  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
328437dd73SDave Airlie  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
338437dd73SDave Airlie  * OTHER DEALINGS IN THE SOFTWARE.
348437dd73SDave Airlie  */
358437dd73SDave Airlie 
360500c04eSSam Ravnborg #include <drm/drm_device.h>
370500c04eSSam Ravnborg #include <drm/drm_drv.h>
380500c04eSSam Ravnborg #include <drm/drm_print.h>
390500c04eSSam Ravnborg 
408437dd73SDave Airlie #include "drm_internal.h"
418437dd73SDave Airlie #include "drm_legacy.h"
428437dd73SDave Airlie 
drm_legacy_init_members(struct drm_device * dev)438437dd73SDave Airlie void drm_legacy_init_members(struct drm_device *dev)
448437dd73SDave Airlie {
458437dd73SDave Airlie 	INIT_LIST_HEAD(&dev->ctxlist);
468437dd73SDave Airlie 	INIT_LIST_HEAD(&dev->vmalist);
478437dd73SDave Airlie 	INIT_LIST_HEAD(&dev->maplist);
488437dd73SDave Airlie 	spin_lock_init(&dev->buf_lock);
498437dd73SDave Airlie 	mutex_init(&dev->ctxlist_mutex);
508437dd73SDave Airlie }
518437dd73SDave Airlie 
drm_legacy_destroy_members(struct drm_device * dev)528437dd73SDave Airlie void drm_legacy_destroy_members(struct drm_device *dev)
538437dd73SDave Airlie {
548437dd73SDave Airlie 	mutex_destroy(&dev->ctxlist_mutex);
558437dd73SDave Airlie }
561fa32cb6SDave Airlie 
drm_legacy_setup(struct drm_device * dev)57094aa54fSDaniel Vetter int drm_legacy_setup(struct drm_device * dev)
58094aa54fSDaniel Vetter {
59094aa54fSDaniel Vetter 	int ret;
60094aa54fSDaniel Vetter 
61094aa54fSDaniel Vetter 	if (dev->driver->firstopen &&
62094aa54fSDaniel Vetter 	    drm_core_check_feature(dev, DRIVER_LEGACY)) {
63094aa54fSDaniel Vetter 		ret = dev->driver->firstopen(dev);
64094aa54fSDaniel Vetter 		if (ret != 0)
65094aa54fSDaniel Vetter 			return ret;
66094aa54fSDaniel Vetter 	}
67094aa54fSDaniel Vetter 
68094aa54fSDaniel Vetter 	ret = drm_legacy_dma_setup(dev);
69094aa54fSDaniel Vetter 	if (ret < 0)
70094aa54fSDaniel Vetter 		return ret;
71094aa54fSDaniel Vetter 
72094aa54fSDaniel Vetter 
73094aa54fSDaniel Vetter 	DRM_DEBUG("\n");
74094aa54fSDaniel Vetter 	return 0;
75094aa54fSDaniel Vetter }
76094aa54fSDaniel Vetter 
drm_legacy_dev_reinit(struct drm_device * dev)771fa32cb6SDave Airlie void drm_legacy_dev_reinit(struct drm_device *dev)
781fa32cb6SDave Airlie {
791fa32cb6SDave Airlie 	if (dev->irq_enabled)
80*c1736b90SThomas Zimmermann 		drm_legacy_irq_uninstall(dev);
811fa32cb6SDave Airlie 
821fa32cb6SDave Airlie 	mutex_lock(&dev->struct_mutex);
831fa32cb6SDave Airlie 
841fa32cb6SDave Airlie 	drm_legacy_agp_clear(dev);
851fa32cb6SDave Airlie 
861fa32cb6SDave Airlie 	drm_legacy_sg_cleanup(dev);
871fa32cb6SDave Airlie 	drm_legacy_vma_flush(dev);
881fa32cb6SDave Airlie 	drm_legacy_dma_takedown(dev);
891fa32cb6SDave Airlie 
901fa32cb6SDave Airlie 	mutex_unlock(&dev->struct_mutex);
911fa32cb6SDave Airlie 
921fa32cb6SDave Airlie 	dev->sigdata.lock = NULL;
931fa32cb6SDave Airlie 
941fa32cb6SDave Airlie 	dev->context_flag = 0;
951fa32cb6SDave Airlie 	dev->last_context = 0;
961fa32cb6SDave Airlie 	dev->if_version = 0;
971fa32cb6SDave Airlie 
981fa32cb6SDave Airlie 	DRM_DEBUG("lastclose completed\n");
991fa32cb6SDave Airlie }
100ee22f763SDave Airlie 
drm_master_legacy_init(struct drm_master * master)101ee22f763SDave Airlie void drm_master_legacy_init(struct drm_master *master)
102ee22f763SDave Airlie {
103ee22f763SDave Airlie 	spin_lock_init(&master->lock.spinlock);
104ee22f763SDave Airlie 	init_waitqueue_head(&master->lock.lock_queue);
105ee22f763SDave Airlie }
106