Lines Matching full:minor

83  * device. However, this doesn't mean that the minor is active. Minors are
116 struct drm_minor *minor = data; in drm_minor_alloc_release() local
118 WARN_ON(dev != minor->dev); in drm_minor_alloc_release()
120 put_device(minor->kdev); in drm_minor_alloc_release()
122 xa_erase(drm_minor_get_xa(minor->type), minor->index); in drm_minor_alloc_release()
127 * minor allocation scheme where minors 0-63 are primary nodes, 64-127 are control nodes,
141 struct drm_minor *minor; in drm_minor_alloc() local
144 minor = drmm_kzalloc(dev, sizeof(*minor), GFP_KERNEL); in drm_minor_alloc()
145 if (!minor) in drm_minor_alloc()
148 minor->type = type; in drm_minor_alloc()
149 minor->dev = dev; in drm_minor_alloc()
151 r = xa_alloc(drm_minor_get_xa(type), &minor->index, in drm_minor_alloc()
154 r = xa_alloc(&drm_minors_xa, &minor->index, in drm_minor_alloc()
159 r = drmm_add_action_or_reset(dev, drm_minor_alloc_release, minor); in drm_minor_alloc()
163 minor->kdev = drm_sysfs_minor_alloc(minor); in drm_minor_alloc()
164 if (IS_ERR(minor->kdev)) in drm_minor_alloc()
165 return PTR_ERR(minor->kdev); in drm_minor_alloc()
167 *drm_minor_get_slot(dev, type) = minor; in drm_minor_alloc()
173 struct drm_minor *minor; in drm_minor_register() local
179 minor = *drm_minor_get_slot(dev, type); in drm_minor_register()
180 if (!minor) in drm_minor_register()
183 if (minor->type != DRM_MINOR_ACCEL) { in drm_minor_register()
184 ret = drm_debugfs_register(minor, minor->index, in drm_minor_register()
192 ret = device_add(minor->kdev); in drm_minor_register()
196 /* replace NULL with @minor so lookups will succeed from now on */ in drm_minor_register()
197 entry = xa_store(drm_minor_get_xa(type), minor->index, minor, GFP_KERNEL); in drm_minor_register()
204 DRM_DEBUG("new minor registered %d\n", minor->index); in drm_minor_register()
208 drm_debugfs_unregister(minor); in drm_minor_register()
214 struct drm_minor *minor; in drm_minor_unregister() local
216 minor = *drm_minor_get_slot(dev, type); in drm_minor_unregister()
217 if (!minor || !device_is_registered(minor->kdev)) in drm_minor_unregister()
220 /* replace @minor with NULL so lookups will fail from now on */ in drm_minor_unregister()
221 xa_store(drm_minor_get_xa(type), minor->index, NULL, GFP_KERNEL); in drm_minor_unregister()
223 device_del(minor->kdev); in drm_minor_unregister()
224 dev_set_drvdata(minor->kdev, NULL); /* safety belt */ in drm_minor_unregister()
225 drm_debugfs_unregister(minor); in drm_minor_unregister()
229 * Looks up the given minor-ID and returns the respective DRM-minor object. The
233 * As long as you hold this minor, it is guaranteed that the object and the
234 * minor->dev pointer will stay valid! However, the device may get unplugged and
235 * unregistered while you hold the minor.
239 struct drm_minor *minor; in drm_minor_acquire() local
242 minor = xa_load(minor_xa, minor_id); in drm_minor_acquire()
243 if (minor) in drm_minor_acquire()
244 drm_dev_get(minor->dev); in drm_minor_acquire()
247 if (!minor) { in drm_minor_acquire()
249 } else if (drm_dev_is_unplugged(minor->dev)) { in drm_minor_acquire()
250 drm_dev_put(minor->dev); in drm_minor_acquire()
254 return minor; in drm_minor_acquire()
257 void drm_minor_release(struct drm_minor *minor) in drm_minor_release() argument
259 drm_dev_put(minor->dev); in drm_minor_release()
857 struct drm_minor *minor; in create_compat_control_link() local
864 minor = *drm_minor_get_slot(dev, DRM_MINOR_PRIMARY); in create_compat_control_link()
865 if (!minor) in create_compat_control_link()
877 name = kasprintf(GFP_KERNEL, "controlD%d", minor->index + 64); in create_compat_control_link()
881 ret = sysfs_create_link(minor->kdev->kobj.parent, in create_compat_control_link()
882 &minor->kdev->kobj, in create_compat_control_link()
892 struct drm_minor *minor; in remove_compat_control_link() local
898 minor = *drm_minor_get_slot(dev, DRM_MINOR_PRIMARY); in remove_compat_control_link()
899 if (!minor) in remove_compat_control_link()
902 name = kasprintf(GFP_KERNEL, "controlD%d", minor->index + 64); in remove_compat_control_link()
906 sysfs_remove_link(minor->kdev->kobj.parent, name); in remove_compat_control_link()
980 DRM_INFO("Initialized %s %d.%d.%d for %s on minor %d\n", in drm_dev_register()
981 driver->name, driver->major, driver->minor, in drm_dev_register()
1050 * - DRM minor management
1055 * interface registered on a DRM device, you can request minor numbers from DRM
1058 * registered minor.
1064 struct drm_minor *minor; in drm_stub_open() local
1069 minor = drm_minor_acquire(&drm_minors_xa, iminor(inode)); in drm_stub_open()
1070 if (IS_ERR(minor)) in drm_stub_open()
1071 return PTR_ERR(minor); in drm_stub_open()
1073 new_fops = fops_get(minor->dev->driver->fops); in drm_stub_open()
1086 drm_minor_release(minor); in drm_stub_open()