Lines Matching refs:dev

86 static struct drm_minor **drm_minor_get_slot(struct drm_device *dev,  in drm_minor_get_slot()  argument
91 return &dev->primary; in drm_minor_get_slot()
93 return &dev->render; in drm_minor_get_slot()
95 return &dev->accel; in drm_minor_get_slot()
101 static void drm_minor_alloc_release(struct drm_device *dev, void *data) in drm_minor_alloc_release() argument
106 WARN_ON(dev != minor->dev); in drm_minor_alloc_release()
119 static int drm_minor_alloc(struct drm_device *dev, enum drm_minor_type type) in drm_minor_alloc() argument
125 minor = drmm_kzalloc(dev, sizeof(*minor), GFP_KERNEL); in drm_minor_alloc()
130 minor->dev = dev; in drm_minor_alloc()
151 r = drmm_add_action_or_reset(dev, drm_minor_alloc_release, minor); in drm_minor_alloc()
159 *drm_minor_get_slot(dev, type) = minor; in drm_minor_alloc()
163 static int drm_minor_register(struct drm_device *dev, enum drm_minor_type type) in drm_minor_register() argument
171 minor = *drm_minor_get_slot(dev, type); in drm_minor_register()
206 static void drm_minor_unregister(struct drm_device *dev, enum drm_minor_type type) in drm_minor_unregister() argument
211 minor = *drm_minor_get_slot(dev, type); in drm_minor_unregister()
246 drm_dev_get(minor->dev); in drm_minor_acquire()
251 } else if (drm_dev_is_unplugged(minor->dev)) { in drm_minor_acquire()
252 drm_dev_put(minor->dev); in drm_minor_acquire()
261 drm_dev_put(minor->dev); in drm_minor_release()
423 void drm_put_dev(struct drm_device *dev) in drm_put_dev() argument
427 if (!dev) { in drm_put_dev()
432 drm_dev_unregister(dev); in drm_put_dev()
433 drm_dev_put(dev); in drm_put_dev()
449 bool drm_dev_enter(struct drm_device *dev, int *idx) in drm_dev_enter() argument
453 if (dev->unplugged) { in drm_dev_enter()
485 void drm_dev_unplug(struct drm_device *dev) in drm_dev_unplug() argument
493 dev->unplugged = true; in drm_dev_unplug()
496 drm_dev_unregister(dev); in drm_dev_unplug()
499 unmap_mapping_range(dev->anon_inode->i_mapping, 0, 0, 1); in drm_dev_unplug()
587 static void drm_dev_init_release(struct drm_device *dev, void *res) in drm_dev_init_release() argument
589 drm_legacy_ctxbitmap_cleanup(dev); in drm_dev_init_release()
590 drm_legacy_remove_map_hash(dev); in drm_dev_init_release()
591 drm_fs_inode_free(dev->anon_inode); in drm_dev_init_release()
593 put_device(dev->dev); in drm_dev_init_release()
596 dev->dev = NULL; in drm_dev_init_release()
597 mutex_destroy(&dev->master_mutex); in drm_dev_init_release()
598 mutex_destroy(&dev->clientlist_mutex); in drm_dev_init_release()
599 mutex_destroy(&dev->filelist_mutex); in drm_dev_init_release()
600 mutex_destroy(&dev->struct_mutex); in drm_dev_init_release()
601 mutex_destroy(&dev->debugfs_mutex); in drm_dev_init_release()
602 drm_legacy_destroy_members(dev); in drm_dev_init_release()
605 static int drm_dev_init(struct drm_device *dev, in drm_dev_init() argument
620 kref_init(&dev->ref); in drm_dev_init()
621 dev->dev = get_device(parent); in drm_dev_init()
622 dev->driver = driver; in drm_dev_init()
624 INIT_LIST_HEAD(&dev->managed.resources); in drm_dev_init()
625 spin_lock_init(&dev->managed.lock); in drm_dev_init()
628 dev->driver_features = ~0u; in drm_dev_init()
630 if (drm_core_check_feature(dev, DRIVER_COMPUTE_ACCEL) && in drm_dev_init()
631 (drm_core_check_feature(dev, DRIVER_RENDER) || in drm_dev_init()
632 drm_core_check_feature(dev, DRIVER_MODESET))) { in drm_dev_init()
637 drm_legacy_init_members(dev); in drm_dev_init()
638 INIT_LIST_HEAD(&dev->filelist); in drm_dev_init()
639 INIT_LIST_HEAD(&dev->filelist_internal); in drm_dev_init()
640 INIT_LIST_HEAD(&dev->clientlist); in drm_dev_init()
641 INIT_LIST_HEAD(&dev->vblank_event_list); in drm_dev_init()
642 INIT_LIST_HEAD(&dev->debugfs_list); in drm_dev_init()
644 spin_lock_init(&dev->event_lock); in drm_dev_init()
645 mutex_init(&dev->struct_mutex); in drm_dev_init()
646 mutex_init(&dev->filelist_mutex); in drm_dev_init()
647 mutex_init(&dev->clientlist_mutex); in drm_dev_init()
648 mutex_init(&dev->master_mutex); in drm_dev_init()
649 mutex_init(&dev->debugfs_mutex); in drm_dev_init()
651 ret = drmm_add_action_or_reset(dev, drm_dev_init_release, NULL); in drm_dev_init()
662 dev->anon_inode = inode; in drm_dev_init()
664 if (drm_core_check_feature(dev, DRIVER_COMPUTE_ACCEL)) { in drm_dev_init()
665 ret = drm_minor_alloc(dev, DRM_MINOR_ACCEL); in drm_dev_init()
669 if (drm_core_check_feature(dev, DRIVER_RENDER)) { in drm_dev_init()
670 ret = drm_minor_alloc(dev, DRM_MINOR_RENDER); in drm_dev_init()
675 ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY); in drm_dev_init()
680 ret = drm_legacy_create_map_hash(dev); in drm_dev_init()
684 drm_legacy_ctxbitmap_init(dev); in drm_dev_init()
686 if (drm_core_check_feature(dev, DRIVER_GEM)) { in drm_dev_init()
687 ret = drm_gem_init(dev); in drm_dev_init()
694 dev->unique = drmm_kstrdup(dev, dev_name(parent), GFP_KERNEL); in drm_dev_init()
695 if (!dev->unique) { in drm_dev_init()
703 drm_managed_release(dev); in drm_dev_init()
714 struct drm_device *dev, in devm_drm_dev_init() argument
719 ret = drm_dev_init(dev, driver, parent); in devm_drm_dev_init()
724 devm_drm_dev_init_release, dev); in devm_drm_dev_init()
766 struct drm_device *dev; in drm_dev_alloc() local
769 dev = kzalloc(sizeof(*dev), GFP_KERNEL); in drm_dev_alloc()
770 if (!dev) in drm_dev_alloc()
773 ret = drm_dev_init(dev, driver, parent); in drm_dev_alloc()
775 kfree(dev); in drm_dev_alloc()
779 drmm_add_final_kfree(dev, dev); in drm_dev_alloc()
781 return dev; in drm_dev_alloc()
787 struct drm_device *dev = container_of(ref, struct drm_device, ref); in drm_dev_release() local
789 if (dev->driver->release) in drm_dev_release()
790 dev->driver->release(dev); in drm_dev_release()
792 drm_managed_release(dev); in drm_dev_release()
794 kfree(dev->managed.final_kfree); in drm_dev_release()
809 void drm_dev_get(struct drm_device *dev) in drm_dev_get() argument
811 if (dev) in drm_dev_get()
812 kref_get(&dev->ref); in drm_dev_get()
823 void drm_dev_put(struct drm_device *dev) in drm_dev_put() argument
825 if (dev) in drm_dev_put()
826 kref_put(&dev->ref, drm_dev_release); in drm_dev_put()
830 static int create_compat_control_link(struct drm_device *dev) in create_compat_control_link() argument
836 if (!drm_core_check_feature(dev, DRIVER_MODESET)) in create_compat_control_link()
839 minor = *drm_minor_get_slot(dev, DRM_MINOR_PRIMARY); in create_compat_control_link()
865 static void remove_compat_control_link(struct drm_device *dev) in remove_compat_control_link() argument
870 if (!drm_core_check_feature(dev, DRIVER_MODESET)) in remove_compat_control_link()
873 minor = *drm_minor_get_slot(dev, DRM_MINOR_PRIMARY); in remove_compat_control_link()
906 int drm_dev_register(struct drm_device *dev, unsigned long flags) in drm_dev_register() argument
908 const struct drm_driver *driver = dev->driver; in drm_dev_register()
912 drm_mode_config_validate(dev); in drm_dev_register()
914 WARN_ON(!dev->managed.final_kfree); in drm_dev_register()
916 if (drm_dev_needs_global_mutex(dev)) in drm_dev_register()
919 ret = drm_minor_register(dev, DRM_MINOR_RENDER); in drm_dev_register()
923 ret = drm_minor_register(dev, DRM_MINOR_PRIMARY); in drm_dev_register()
927 ret = drm_minor_register(dev, DRM_MINOR_ACCEL); in drm_dev_register()
931 ret = create_compat_control_link(dev); in drm_dev_register()
935 dev->registered = true; in drm_dev_register()
938 ret = driver->load(dev, flags); in drm_dev_register()
943 if (drm_core_check_feature(dev, DRIVER_MODESET)) { in drm_dev_register()
944 ret = drm_modeset_register_all(dev); in drm_dev_register()
952 dev->dev ? dev_name(dev->dev) : "virtual device", in drm_dev_register()
953 dev->primary ? dev->primary->index : dev->accel->index); in drm_dev_register()
958 if (dev->driver->unload) in drm_dev_register()
959 dev->driver->unload(dev); in drm_dev_register()
961 remove_compat_control_link(dev); in drm_dev_register()
962 drm_minor_unregister(dev, DRM_MINOR_ACCEL); in drm_dev_register()
963 drm_minor_unregister(dev, DRM_MINOR_PRIMARY); in drm_dev_register()
964 drm_minor_unregister(dev, DRM_MINOR_RENDER); in drm_dev_register()
966 if (drm_dev_needs_global_mutex(dev)) in drm_dev_register()
988 void drm_dev_unregister(struct drm_device *dev) in drm_dev_unregister() argument
990 if (drm_core_check_feature(dev, DRIVER_LEGACY)) in drm_dev_unregister()
991 drm_lastclose(dev); in drm_dev_unregister()
993 dev->registered = false; in drm_dev_unregister()
995 drm_client_dev_unregister(dev); in drm_dev_unregister()
997 if (drm_core_check_feature(dev, DRIVER_MODESET)) in drm_dev_unregister()
998 drm_modeset_unregister_all(dev); in drm_dev_unregister()
1000 if (dev->driver->unload) in drm_dev_unregister()
1001 dev->driver->unload(dev); in drm_dev_unregister()
1003 drm_legacy_pci_agp_destroy(dev); in drm_dev_unregister()
1004 drm_legacy_rmmaps(dev); in drm_dev_unregister()
1006 remove_compat_control_link(dev); in drm_dev_unregister()
1007 drm_minor_unregister(dev, DRM_MINOR_ACCEL); in drm_dev_unregister()
1008 drm_minor_unregister(dev, DRM_MINOR_PRIMARY); in drm_dev_unregister()
1009 drm_minor_unregister(dev, DRM_MINOR_RENDER); in drm_dev_unregister()
1045 new_fops = fops_get(minor->dev->driver->fops); in drm_stub_open()