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