linux/drivers/gpu/drm/drm_drv.c
<<
>>
Prefs
   1/*
   2 * Created: Fri Jan 19 10:48:35 2001 by faith@acm.org
   3 *
   4 * Copyright 2001 VA Linux Systems, Inc., Sunnyvale, California.
   5 * All Rights Reserved.
   6 *
   7 * Author Rickard E. (Rik) Faith <faith@valinux.com>
   8 *
   9 * Permission is hereby granted, free of charge, to any person obtaining a
  10 * copy of this software and associated documentation files (the "Software"),
  11 * to deal in the Software without restriction, including without limitation
  12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  13 * and/or sell copies of the Software, and to permit persons to whom the
  14 * Software is furnished to do so, subject to the following conditions:
  15 *
  16 * The above copyright notice and this permission notice (including the next
  17 * paragraph) shall be included in all copies or substantial portions of the
  18 * Software.
  19 *
  20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  23 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  26 * DEALINGS IN THE SOFTWARE.
  27 */
  28
  29#include <linux/debugfs.h>
  30#include <linux/fs.h>
  31#include <linux/module.h>
  32#include <linux/moduleparam.h>
  33#include <linux/mount.h>
  34#include <linux/slab.h>
  35#include <linux/srcu.h>
  36
  37#include <drm/drm_client.h>
  38#include <drm/drm_drv.h>
  39#include <drm/drmP.h>
  40
  41#include "drm_crtc_internal.h"
  42#include "drm_legacy.h"
  43#include "drm_internal.h"
  44#include "drm_crtc_internal.h"
  45
  46/*
  47 * drm_debug: Enable debug output.
  48 * Bitmask of DRM_UT_x. See include/drm/drmP.h for details.
  49 */
  50unsigned int drm_debug = 0;
  51EXPORT_SYMBOL(drm_debug);
  52
  53MODULE_AUTHOR("Gareth Hughes, Leif Delgass, José Fonseca, Jon Smirl");
  54MODULE_DESCRIPTION("DRM shared core routines");
  55MODULE_LICENSE("GPL and additional rights");
  56MODULE_PARM_DESC(debug, "Enable debug output, where each bit enables a debug category.\n"
  57"\t\tBit 0 (0x01)  will enable CORE messages (drm core code)\n"
  58"\t\tBit 1 (0x02)  will enable DRIVER messages (drm controller code)\n"
  59"\t\tBit 2 (0x04)  will enable KMS messages (modesetting code)\n"
  60"\t\tBit 3 (0x08)  will enable PRIME messages (prime code)\n"
  61"\t\tBit 4 (0x10)  will enable ATOMIC messages (atomic code)\n"
  62"\t\tBit 5 (0x20)  will enable VBL messages (vblank code)\n"
  63"\t\tBit 7 (0x80)  will enable LEASE messages (leasing code)\n"
  64"\t\tBit 8 (0x100) will enable DP messages (displayport code)");
  65module_param_named(debug, drm_debug, int, 0600);
  66
  67static DEFINE_SPINLOCK(drm_minor_lock);
  68static struct idr drm_minors_idr;
  69
  70/*
  71 * If the drm core fails to init for whatever reason,
  72 * we should prevent any drivers from registering with it.
  73 * It's best to check this at drm_dev_init(), as some drivers
  74 * prefer to embed struct drm_device into their own device
  75 * structure and call drm_dev_init() themselves.
  76 */
  77static bool drm_core_init_complete = false;
  78
  79static struct dentry *drm_debugfs_root;
  80
  81DEFINE_STATIC_SRCU(drm_unplug_srcu);
  82
  83/*
  84 * DRM Minors
  85 * A DRM device can provide several char-dev interfaces on the DRM-Major. Each
  86 * of them is represented by a drm_minor object. Depending on the capabilities
  87 * of the device-driver, different interfaces are registered.
  88 *
  89 * Minors can be accessed via dev->$minor_name. This pointer is either
  90 * NULL or a valid drm_minor pointer and stays valid as long as the device is
  91 * valid. This means, DRM minors have the same life-time as the underlying
  92 * device. However, this doesn't mean that the minor is active. Minors are
  93 * registered and unregistered dynamically according to device-state.
  94 */
  95
  96static struct drm_minor **drm_minor_get_slot(struct drm_device *dev,
  97                                             unsigned int type)
  98{
  99        switch (type) {
 100        case DRM_MINOR_PRIMARY:
 101                return &dev->primary;
 102        case DRM_MINOR_RENDER:
 103                return &dev->render;
 104        default:
 105                BUG();
 106        }
 107}
 108
 109static int drm_minor_alloc(struct drm_device *dev, unsigned int type)
 110{
 111        struct drm_minor *minor;
 112        unsigned long flags;
 113        int r;
 114
 115        minor = kzalloc(sizeof(*minor), GFP_KERNEL);
 116        if (!minor)
 117                return -ENOMEM;
 118
 119        minor->type = type;
 120        minor->dev = dev;
 121
 122        idr_preload(GFP_KERNEL);
 123        spin_lock_irqsave(&drm_minor_lock, flags);
 124        r = idr_alloc(&drm_minors_idr,
 125                      NULL,
 126                      64 * type,
 127                      64 * (type + 1),
 128                      GFP_NOWAIT);
 129        spin_unlock_irqrestore(&drm_minor_lock, flags);
 130        idr_preload_end();
 131
 132        if (r < 0)
 133                goto err_free;
 134
 135        minor->index = r;
 136
 137        minor->kdev = drm_sysfs_minor_alloc(minor);
 138        if (IS_ERR(minor->kdev)) {
 139                r = PTR_ERR(minor->kdev);
 140                goto err_index;
 141        }
 142
 143        *drm_minor_get_slot(dev, type) = minor;
 144        return 0;
 145
 146err_index:
 147        spin_lock_irqsave(&drm_minor_lock, flags);
 148        idr_remove(&drm_minors_idr, minor->index);
 149        spin_unlock_irqrestore(&drm_minor_lock, flags);
 150err_free:
 151        kfree(minor);
 152        return r;
 153}
 154
 155static void drm_minor_free(struct drm_device *dev, unsigned int type)
 156{
 157        struct drm_minor **slot, *minor;
 158        unsigned long flags;
 159
 160        slot = drm_minor_get_slot(dev, type);
 161        minor = *slot;
 162        if (!minor)
 163                return;
 164
 165        put_device(minor->kdev);
 166
 167        spin_lock_irqsave(&drm_minor_lock, flags);
 168        idr_remove(&drm_minors_idr, minor->index);
 169        spin_unlock_irqrestore(&drm_minor_lock, flags);
 170
 171        kfree(minor);
 172        *slot = NULL;
 173}
 174
 175static int drm_minor_register(struct drm_device *dev, unsigned int type)
 176{
 177        struct drm_minor *minor;
 178        unsigned long flags;
 179        int ret;
 180
 181        DRM_DEBUG("\n");
 182
 183        minor = *drm_minor_get_slot(dev, type);
 184        if (!minor)
 185                return 0;
 186
 187        ret = drm_debugfs_init(minor, minor->index, drm_debugfs_root);
 188        if (ret) {
 189                DRM_ERROR("DRM: Failed to initialize /sys/kernel/debug/dri.\n");
 190                goto err_debugfs;
 191        }
 192
 193        ret = device_add(minor->kdev);
 194        if (ret)
 195                goto err_debugfs;
 196
 197        /* replace NULL with @minor so lookups will succeed from now on */
 198        spin_lock_irqsave(&drm_minor_lock, flags);
 199        idr_replace(&drm_minors_idr, minor, minor->index);
 200        spin_unlock_irqrestore(&drm_minor_lock, flags);
 201
 202        DRM_DEBUG("new minor registered %d\n", minor->index);
 203        return 0;
 204
 205err_debugfs:
 206        drm_debugfs_cleanup(minor);
 207        return ret;
 208}
 209
 210static void drm_minor_unregister(struct drm_device *dev, unsigned int type)
 211{
 212        struct drm_minor *minor;
 213        unsigned long flags;
 214
 215        minor = *drm_minor_get_slot(dev, type);
 216        if (!minor || !device_is_registered(minor->kdev))
 217                return;
 218
 219        /* replace @minor with NULL so lookups will fail from now on */
 220        spin_lock_irqsave(&drm_minor_lock, flags);
 221        idr_replace(&drm_minors_idr, NULL, minor->index);
 222        spin_unlock_irqrestore(&drm_minor_lock, flags);
 223
 224        device_del(minor->kdev);
 225        dev_set_drvdata(minor->kdev, NULL); /* safety belt */
 226        drm_debugfs_cleanup(minor);
 227}
 228
 229/*
 230 * Looks up the given minor-ID and returns the respective DRM-minor object. The
 231 * refence-count of the underlying device is increased so you must release this
 232 * object with drm_minor_release().
 233 *
 234 * As long as you hold this minor, it is guaranteed that the object and the
 235 * minor->dev pointer will stay valid! However, the device may get unplugged and
 236 * unregistered while you hold the minor.
 237 */
 238struct drm_minor *drm_minor_acquire(unsigned int minor_id)
 239{
 240        struct drm_minor *minor;
 241        unsigned long flags;
 242
 243        spin_lock_irqsave(&drm_minor_lock, flags);
 244        minor = idr_find(&drm_minors_idr, minor_id);
 245        if (minor)
 246                drm_dev_get(minor->dev);
 247        spin_unlock_irqrestore(&drm_minor_lock, flags);
 248
 249        if (!minor) {
 250                return ERR_PTR(-ENODEV);
 251        } else if (drm_dev_is_unplugged(minor->dev)) {
 252                drm_dev_put(minor->dev);
 253                return ERR_PTR(-ENODEV);
 254        }
 255
 256        return minor;
 257}
 258
 259void drm_minor_release(struct drm_minor *minor)
 260{
 261        drm_dev_put(minor->dev);
 262}
 263
 264/**
 265 * DOC: driver instance overview
 266 *
 267 * A device instance for a drm driver is represented by &struct drm_device. This
 268 * is allocated with drm_dev_alloc(), usually from bus-specific ->probe()
 269 * callbacks implemented by the driver. The driver then needs to initialize all
 270 * the various subsystems for the drm device like memory management, vblank
 271 * handling, modesetting support and intial output configuration plus obviously
 272 * initialize all the corresponding hardware bits. An important part of this is
 273 * also calling drm_dev_set_unique() to set the userspace-visible unique name of
 274 * this device instance. Finally when everything is up and running and ready for
 275 * userspace the device instance can be published using drm_dev_register().
 276 *
 277 * There is also deprecated support for initalizing device instances using
 278 * bus-specific helpers and the &drm_driver.load callback. But due to
 279 * backwards-compatibility needs the device instance have to be published too
 280 * early, which requires unpretty global locking to make safe and is therefore
 281 * only support for existing drivers not yet converted to the new scheme.
 282 *
 283 * When cleaning up a device instance everything needs to be done in reverse:
 284 * First unpublish the device instance with drm_dev_unregister(). Then clean up
 285 * any other resources allocated at device initialization and drop the driver's
 286 * reference to &drm_device using drm_dev_put().
 287 *
 288 * Note that the lifetime rules for &drm_device instance has still a lot of
 289 * historical baggage. Hence use the reference counting provided by
 290 * drm_dev_get() and drm_dev_put() only carefully.
 291 *
 292 * It is recommended that drivers embed &struct drm_device into their own device
 293 * structure, which is supported through drm_dev_init().
 294 */
 295
 296/**
 297 * drm_put_dev - Unregister and release a DRM device
 298 * @dev: DRM device
 299 *
 300 * Called at module unload time or when a PCI device is unplugged.
 301 *
 302 * Cleans up all DRM device, calling drm_lastclose().
 303 *
 304 * Note: Use of this function is deprecated. It will eventually go away
 305 * completely.  Please use drm_dev_unregister() and drm_dev_put() explicitly
 306 * instead to make sure that the device isn't userspace accessible any more
 307 * while teardown is in progress, ensuring that userspace can't access an
 308 * inconsistent state.
 309 */
 310void drm_put_dev(struct drm_device *dev)
 311{
 312        DRM_DEBUG("\n");
 313
 314        if (!dev) {
 315                DRM_ERROR("cleanup called no dev\n");
 316                return;
 317        }
 318
 319        drm_dev_unregister(dev);
 320        drm_dev_put(dev);
 321}
 322EXPORT_SYMBOL(drm_put_dev);
 323
 324/**
 325 * drm_dev_enter - Enter device critical section
 326 * @dev: DRM device
 327 * @idx: Pointer to index that will be passed to the matching drm_dev_exit()
 328 *
 329 * This function marks and protects the beginning of a section that should not
 330 * be entered after the device has been unplugged. The section end is marked
 331 * with drm_dev_exit(). Calls to this function can be nested.
 332 *
 333 * Returns:
 334 * True if it is OK to enter the section, false otherwise.
 335 */
 336bool drm_dev_enter(struct drm_device *dev, int *idx)
 337{
 338        *idx = srcu_read_lock(&drm_unplug_srcu);
 339
 340        if (dev->unplugged) {
 341                srcu_read_unlock(&drm_unplug_srcu, *idx);
 342                return false;
 343        }
 344
 345        return true;
 346}
 347EXPORT_SYMBOL(drm_dev_enter);
 348
 349/**
 350 * drm_dev_exit - Exit device critical section
 351 * @idx: index returned from drm_dev_enter()
 352 *
 353 * This function marks the end of a section that should not be entered after
 354 * the device has been unplugged.
 355 */
 356void drm_dev_exit(int idx)
 357{
 358        srcu_read_unlock(&drm_unplug_srcu, idx);
 359}
 360EXPORT_SYMBOL(drm_dev_exit);
 361
 362/**
 363 * drm_dev_unplug - unplug a DRM device
 364 * @dev: DRM device
 365 *
 366 * This unplugs a hotpluggable DRM device, which makes it inaccessible to
 367 * userspace operations. Entry-points can use drm_dev_enter() and
 368 * drm_dev_exit() to protect device resources in a race free manner. This
 369 * essentially unregisters the device like drm_dev_unregister(), but can be
 370 * called while there are still open users of @dev.
 371 */
 372void drm_dev_unplug(struct drm_device *dev)
 373{
 374        /*
 375         * After synchronizing any critical read section is guaranteed to see
 376         * the new value of ->unplugged, and any critical section which might
 377         * still have seen the old value of ->unplugged is guaranteed to have
 378         * finished.
 379         */
 380        dev->unplugged = true;
 381        synchronize_srcu(&drm_unplug_srcu);
 382
 383        drm_dev_unregister(dev);
 384
 385        mutex_lock(&drm_global_mutex);
 386        if (dev->open_count == 0)
 387                drm_dev_put(dev);
 388        mutex_unlock(&drm_global_mutex);
 389}
 390EXPORT_SYMBOL(drm_dev_unplug);
 391
 392/*
 393 * DRM internal mount
 394 * We want to be able to allocate our own "struct address_space" to control
 395 * memory-mappings in VRAM (or stolen RAM, ...). However, core MM does not allow
 396 * stand-alone address_space objects, so we need an underlying inode. As there
 397 * is no way to allocate an independent inode easily, we need a fake internal
 398 * VFS mount-point.
 399 *
 400 * The drm_fs_inode_new() function allocates a new inode, drm_fs_inode_free()
 401 * frees it again. You are allowed to use iget() and iput() to get references to
 402 * the inode. But each drm_fs_inode_new() call must be paired with exactly one
 403 * drm_fs_inode_free() call (which does not have to be the last iput()).
 404 * We use drm_fs_inode_*() to manage our internal VFS mount-point and share it
 405 * between multiple inode-users. You could, technically, call
 406 * iget() + drm_fs_inode_free() directly after alloc and sometime later do an
 407 * iput(), but this way you'd end up with a new vfsmount for each inode.
 408 */
 409
 410static int drm_fs_cnt;
 411static struct vfsmount *drm_fs_mnt;
 412
 413static const struct dentry_operations drm_fs_dops = {
 414        .d_dname        = simple_dname,
 415};
 416
 417static const struct super_operations drm_fs_sops = {
 418        .statfs         = simple_statfs,
 419};
 420
 421static struct dentry *drm_fs_mount(struct file_system_type *fs_type, int flags,
 422                                   const char *dev_name, void *data)
 423{
 424        return mount_pseudo(fs_type,
 425                            "drm:",
 426                            &drm_fs_sops,
 427                            &drm_fs_dops,
 428                            0x010203ff);
 429}
 430
 431static struct file_system_type drm_fs_type = {
 432        .name           = "drm",
 433        .owner          = THIS_MODULE,
 434        .mount          = drm_fs_mount,
 435        .kill_sb        = kill_anon_super,
 436};
 437
 438static struct inode *drm_fs_inode_new(void)
 439{
 440        struct inode *inode;
 441        int r;
 442
 443        r = simple_pin_fs(&drm_fs_type, &drm_fs_mnt, &drm_fs_cnt);
 444        if (r < 0) {
 445                DRM_ERROR("Cannot mount pseudo fs: %d\n", r);
 446                return ERR_PTR(r);
 447        }
 448
 449        inode = alloc_anon_inode(drm_fs_mnt->mnt_sb);
 450        if (IS_ERR(inode))
 451                simple_release_fs(&drm_fs_mnt, &drm_fs_cnt);
 452
 453        return inode;
 454}
 455
 456static void drm_fs_inode_free(struct inode *inode)
 457{
 458        if (inode) {
 459                iput(inode);
 460                simple_release_fs(&drm_fs_mnt, &drm_fs_cnt);
 461        }
 462}
 463
 464/**
 465 * drm_dev_init - Initialise new DRM device
 466 * @dev: DRM device
 467 * @driver: DRM driver
 468 * @parent: Parent device object
 469 *
 470 * Initialize a new DRM device. No device registration is done.
 471 * Call drm_dev_register() to advertice the device to user space and register it
 472 * with other core subsystems. This should be done last in the device
 473 * initialization sequence to make sure userspace can't access an inconsistent
 474 * state.
 475 *
 476 * The initial ref-count of the object is 1. Use drm_dev_get() and
 477 * drm_dev_put() to take and drop further ref-counts.
 478 *
 479 * Drivers that do not want to allocate their own device struct
 480 * embedding &struct drm_device can call drm_dev_alloc() instead. For drivers
 481 * that do embed &struct drm_device it must be placed first in the overall
 482 * structure, and the overall structure must be allocated using kmalloc(): The
 483 * drm core's release function unconditionally calls kfree() on the @dev pointer
 484 * when the final reference is released. To override this behaviour, and so
 485 * allow embedding of the drm_device inside the driver's device struct at an
 486 * arbitrary offset, you must supply a &drm_driver.release callback and control
 487 * the finalization explicitly.
 488 *
 489 * RETURNS:
 490 * 0 on success, or error code on failure.
 491 */
 492int drm_dev_init(struct drm_device *dev,
 493                 struct drm_driver *driver,
 494                 struct device *parent)
 495{
 496        int ret;
 497
 498        if (!drm_core_init_complete) {
 499                DRM_ERROR("DRM core is not initialized\n");
 500                return -ENODEV;
 501        }
 502
 503        BUG_ON(!parent);
 504
 505        kref_init(&dev->ref);
 506        dev->dev = parent;
 507        dev->driver = driver;
 508
 509        /* no per-device feature limits by default */
 510        dev->driver_features = ~0u;
 511
 512        INIT_LIST_HEAD(&dev->filelist);
 513        INIT_LIST_HEAD(&dev->filelist_internal);
 514        INIT_LIST_HEAD(&dev->clientlist);
 515        INIT_LIST_HEAD(&dev->ctxlist);
 516        INIT_LIST_HEAD(&dev->vmalist);
 517        INIT_LIST_HEAD(&dev->maplist);
 518        INIT_LIST_HEAD(&dev->vblank_event_list);
 519
 520        spin_lock_init(&dev->buf_lock);
 521        spin_lock_init(&dev->event_lock);
 522        mutex_init(&dev->struct_mutex);
 523        mutex_init(&dev->filelist_mutex);
 524        mutex_init(&dev->clientlist_mutex);
 525        mutex_init(&dev->ctxlist_mutex);
 526        mutex_init(&dev->master_mutex);
 527
 528        dev->anon_inode = drm_fs_inode_new();
 529        if (IS_ERR(dev->anon_inode)) {
 530                ret = PTR_ERR(dev->anon_inode);
 531                DRM_ERROR("Cannot allocate anonymous inode: %d\n", ret);
 532                goto err_free;
 533        }
 534
 535        if (drm_core_check_feature(dev, DRIVER_RENDER)) {
 536                ret = drm_minor_alloc(dev, DRM_MINOR_RENDER);
 537                if (ret)
 538                        goto err_minors;
 539        }
 540
 541        ret = drm_minor_alloc(dev, DRM_MINOR_PRIMARY);
 542        if (ret)
 543                goto err_minors;
 544
 545        ret = drm_ht_create(&dev->map_hash, 12);
 546        if (ret)
 547                goto err_minors;
 548
 549        drm_legacy_ctxbitmap_init(dev);
 550
 551        if (drm_core_check_feature(dev, DRIVER_GEM)) {
 552                ret = drm_gem_init(dev);
 553                if (ret) {
 554                        DRM_ERROR("Cannot initialize graphics execution manager (GEM)\n");
 555                        goto err_ctxbitmap;
 556                }
 557        }
 558
 559        ret = drm_dev_set_unique(dev, dev_name(parent));
 560        if (ret)
 561                goto err_setunique;
 562
 563        return 0;
 564
 565err_setunique:
 566        if (drm_core_check_feature(dev, DRIVER_GEM))
 567                drm_gem_destroy(dev);
 568err_ctxbitmap:
 569        drm_legacy_ctxbitmap_cleanup(dev);
 570        drm_ht_remove(&dev->map_hash);
 571err_minors:
 572        drm_minor_free(dev, DRM_MINOR_PRIMARY);
 573        drm_minor_free(dev, DRM_MINOR_RENDER);
 574        drm_fs_inode_free(dev->anon_inode);
 575err_free:
 576        mutex_destroy(&dev->master_mutex);
 577        mutex_destroy(&dev->ctxlist_mutex);
 578        mutex_destroy(&dev->clientlist_mutex);
 579        mutex_destroy(&dev->filelist_mutex);
 580        mutex_destroy(&dev->struct_mutex);
 581        return ret;
 582}
 583EXPORT_SYMBOL(drm_dev_init);
 584
 585/**
 586 * drm_dev_fini - Finalize a dead DRM device
 587 * @dev: DRM device
 588 *
 589 * Finalize a dead DRM device. This is the converse to drm_dev_init() and
 590 * frees up all data allocated by it. All driver private data should be
 591 * finalized first. Note that this function does not free the @dev, that is
 592 * left to the caller.
 593 *
 594 * The ref-count of @dev must be zero, and drm_dev_fini() should only be called
 595 * from a &drm_driver.release callback.
 596 */
 597void drm_dev_fini(struct drm_device *dev)
 598{
 599        drm_vblank_cleanup(dev);
 600
 601        if (drm_core_check_feature(dev, DRIVER_GEM))
 602                drm_gem_destroy(dev);
 603
 604        drm_legacy_ctxbitmap_cleanup(dev);
 605        drm_ht_remove(&dev->map_hash);
 606        drm_fs_inode_free(dev->anon_inode);
 607
 608        drm_minor_free(dev, DRM_MINOR_PRIMARY);
 609        drm_minor_free(dev, DRM_MINOR_RENDER);
 610
 611        mutex_destroy(&dev->master_mutex);
 612        mutex_destroy(&dev->ctxlist_mutex);
 613        mutex_destroy(&dev->clientlist_mutex);
 614        mutex_destroy(&dev->filelist_mutex);
 615        mutex_destroy(&dev->struct_mutex);
 616        kfree(dev->unique);
 617}
 618EXPORT_SYMBOL(drm_dev_fini);
 619
 620/**
 621 * drm_dev_alloc - Allocate new DRM device
 622 * @driver: DRM driver to allocate device for
 623 * @parent: Parent device object
 624 *
 625 * Allocate and initialize a new DRM device. No device registration is done.
 626 * Call drm_dev_register() to advertice the device to user space and register it
 627 * with other core subsystems. This should be done last in the device
 628 * initialization sequence to make sure userspace can't access an inconsistent
 629 * state.
 630 *
 631 * The initial ref-count of the object is 1. Use drm_dev_get() and
 632 * drm_dev_put() to take and drop further ref-counts.
 633 *
 634 * Note that for purely virtual devices @parent can be NULL.
 635 *
 636 * Drivers that wish to subclass or embed &struct drm_device into their
 637 * own struct should look at using drm_dev_init() instead.
 638 *
 639 * RETURNS:
 640 * Pointer to new DRM device, or ERR_PTR on failure.
 641 */
 642struct drm_device *drm_dev_alloc(struct drm_driver *driver,
 643                                 struct device *parent)
 644{
 645        struct drm_device *dev;
 646        int ret;
 647
 648        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
 649        if (!dev)
 650                return ERR_PTR(-ENOMEM);
 651
 652        ret = drm_dev_init(dev, driver, parent);
 653        if (ret) {
 654                kfree(dev);
 655                return ERR_PTR(ret);
 656        }
 657
 658        return dev;
 659}
 660EXPORT_SYMBOL(drm_dev_alloc);
 661
 662static void drm_dev_release(struct kref *ref)
 663{
 664        struct drm_device *dev = container_of(ref, struct drm_device, ref);
 665
 666        if (dev->driver->release) {
 667                dev->driver->release(dev);
 668        } else {
 669                drm_dev_fini(dev);
 670                kfree(dev);
 671        }
 672}
 673
 674/**
 675 * drm_dev_get - Take reference of a DRM device
 676 * @dev: device to take reference of or NULL
 677 *
 678 * This increases the ref-count of @dev by one. You *must* already own a
 679 * reference when calling this. Use drm_dev_put() to drop this reference
 680 * again.
 681 *
 682 * This function never fails. However, this function does not provide *any*
 683 * guarantee whether the device is alive or running. It only provides a
 684 * reference to the object and the memory associated with it.
 685 */
 686void drm_dev_get(struct drm_device *dev)
 687{
 688        if (dev)
 689                kref_get(&dev->ref);
 690}
 691EXPORT_SYMBOL(drm_dev_get);
 692
 693/**
 694 * drm_dev_put - Drop reference of a DRM device
 695 * @dev: device to drop reference of or NULL
 696 *
 697 * This decreases the ref-count of @dev by one. The device is destroyed if the
 698 * ref-count drops to zero.
 699 */
 700void drm_dev_put(struct drm_device *dev)
 701{
 702        if (dev)
 703                kref_put(&dev->ref, drm_dev_release);
 704}
 705EXPORT_SYMBOL(drm_dev_put);
 706
 707static int create_compat_control_link(struct drm_device *dev)
 708{
 709        struct drm_minor *minor;
 710        char *name;
 711        int ret;
 712
 713        if (!drm_core_check_feature(dev, DRIVER_MODESET))
 714                return 0;
 715
 716        minor = *drm_minor_get_slot(dev, DRM_MINOR_PRIMARY);
 717        if (!minor)
 718                return 0;
 719
 720        /*
 721         * Some existing userspace out there uses the existing of the controlD*
 722         * sysfs files to figure out whether it's a modeset driver. It only does
 723         * readdir, hence a symlink is sufficient (and the least confusing
 724         * option). Otherwise controlD* is entirely unused.
 725         *
 726         * Old controlD chardev have been allocated in the range
 727         * 64-127.
 728         */
 729        name = kasprintf(GFP_KERNEL, "controlD%d", minor->index + 64);
 730        if (!name)
 731                return -ENOMEM;
 732
 733        ret = sysfs_create_link(minor->kdev->kobj.parent,
 734                                &minor->kdev->kobj,
 735                                name);
 736
 737        kfree(name);
 738
 739        return ret;
 740}
 741
 742static void remove_compat_control_link(struct drm_device *dev)
 743{
 744        struct drm_minor *minor;
 745        char *name;
 746
 747        if (!drm_core_check_feature(dev, DRIVER_MODESET))
 748                return;
 749
 750        minor = *drm_minor_get_slot(dev, DRM_MINOR_PRIMARY);
 751        if (!minor)
 752                return;
 753
 754        name = kasprintf(GFP_KERNEL, "controlD%d", minor->index + 64);
 755        if (!name)
 756                return;
 757
 758        sysfs_remove_link(minor->kdev->kobj.parent, name);
 759
 760        kfree(name);
 761}
 762
 763/**
 764 * drm_dev_register - Register DRM device
 765 * @dev: Device to register
 766 * @flags: Flags passed to the driver's .load() function
 767 *
 768 * Register the DRM device @dev with the system, advertise device to user-space
 769 * and start normal device operation. @dev must be allocated via drm_dev_alloc()
 770 * previously.
 771 *
 772 * Never call this twice on any device!
 773 *
 774 * NOTE: To ensure backward compatibility with existing drivers method this
 775 * function calls the &drm_driver.load method after registering the device
 776 * nodes, creating race conditions. Usage of the &drm_driver.load methods is
 777 * therefore deprecated, drivers must perform all initialization before calling
 778 * drm_dev_register().
 779 *
 780 * RETURNS:
 781 * 0 on success, negative error code on failure.
 782 */
 783int drm_dev_register(struct drm_device *dev, unsigned long flags)
 784{
 785        struct drm_driver *driver = dev->driver;
 786        int ret;
 787
 788        mutex_lock(&drm_global_mutex);
 789
 790        ret = drm_minor_register(dev, DRM_MINOR_RENDER);
 791        if (ret)
 792                goto err_minors;
 793
 794        ret = drm_minor_register(dev, DRM_MINOR_PRIMARY);
 795        if (ret)
 796                goto err_minors;
 797
 798        ret = create_compat_control_link(dev);
 799        if (ret)
 800                goto err_minors;
 801
 802        dev->registered = true;
 803
 804        if (dev->driver->load) {
 805                ret = dev->driver->load(dev, flags);
 806                if (ret)
 807                        goto err_minors;
 808        }
 809
 810        if (drm_core_check_feature(dev, DRIVER_MODESET))
 811                drm_modeset_register_all(dev);
 812
 813        ret = 0;
 814
 815        DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n",
 816                 driver->name, driver->major, driver->minor,
 817                 driver->patchlevel, driver->date,
 818                 dev->dev ? dev_name(dev->dev) : "virtual device",
 819                 dev->primary->index);
 820
 821        goto out_unlock;
 822
 823err_minors:
 824        remove_compat_control_link(dev);
 825        drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
 826        drm_minor_unregister(dev, DRM_MINOR_RENDER);
 827out_unlock:
 828        mutex_unlock(&drm_global_mutex);
 829        return ret;
 830}
 831EXPORT_SYMBOL(drm_dev_register);
 832
 833/**
 834 * drm_dev_unregister - Unregister DRM device
 835 * @dev: Device to unregister
 836 *
 837 * Unregister the DRM device from the system. This does the reverse of
 838 * drm_dev_register() but does not deallocate the device. The caller must call
 839 * drm_dev_put() to drop their final reference.
 840 *
 841 * A special form of unregistering for hotpluggable devices is drm_dev_unplug(),
 842 * which can be called while there are still open users of @dev.
 843 *
 844 * This should be called first in the device teardown code to make sure
 845 * userspace can't access the device instance any more.
 846 */
 847void drm_dev_unregister(struct drm_device *dev)
 848{
 849        struct drm_map_list *r_list, *list_temp;
 850
 851        if (drm_core_check_feature(dev, DRIVER_LEGACY))
 852                drm_lastclose(dev);
 853
 854        dev->registered = false;
 855
 856        drm_client_dev_unregister(dev);
 857
 858        if (drm_core_check_feature(dev, DRIVER_MODESET))
 859                drm_modeset_unregister_all(dev);
 860
 861        if (dev->driver->unload)
 862                dev->driver->unload(dev);
 863
 864        if (dev->agp)
 865                drm_pci_agp_destroy(dev);
 866
 867        list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head)
 868                drm_legacy_rmmap(dev, r_list->map);
 869
 870        remove_compat_control_link(dev);
 871        drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
 872        drm_minor_unregister(dev, DRM_MINOR_RENDER);
 873}
 874EXPORT_SYMBOL(drm_dev_unregister);
 875
 876/**
 877 * drm_dev_set_unique - Set the unique name of a DRM device
 878 * @dev: device of which to set the unique name
 879 * @name: unique name
 880 *
 881 * Sets the unique name of a DRM device using the specified string. Drivers
 882 * can use this at driver probe time if the unique name of the devices they
 883 * drive is static.
 884 *
 885 * Return: 0 on success or a negative error code on failure.
 886 */
 887int drm_dev_set_unique(struct drm_device *dev, const char *name)
 888{
 889        kfree(dev->unique);
 890        dev->unique = kstrdup(name, GFP_KERNEL);
 891
 892        return dev->unique ? 0 : -ENOMEM;
 893}
 894EXPORT_SYMBOL(drm_dev_set_unique);
 895
 896/*
 897 * DRM Core
 898 * The DRM core module initializes all global DRM objects and makes them
 899 * available to drivers. Once setup, drivers can probe their respective
 900 * devices.
 901 * Currently, core management includes:
 902 *  - The "DRM-Global" key/value database
 903 *  - Global ID management for connectors
 904 *  - DRM major number allocation
 905 *  - DRM minor management
 906 *  - DRM sysfs class
 907 *  - DRM debugfs root
 908 *
 909 * Furthermore, the DRM core provides dynamic char-dev lookups. For each
 910 * interface registered on a DRM device, you can request minor numbers from DRM
 911 * core. DRM core takes care of major-number management and char-dev
 912 * registration. A stub ->open() callback forwards any open() requests to the
 913 * registered minor.
 914 */
 915
 916static int drm_stub_open(struct inode *inode, struct file *filp)
 917{
 918        const struct file_operations *new_fops;
 919        struct drm_minor *minor;
 920        int err;
 921
 922        DRM_DEBUG("\n");
 923
 924        mutex_lock(&drm_global_mutex);
 925        minor = drm_minor_acquire(iminor(inode));
 926        if (IS_ERR(minor)) {
 927                err = PTR_ERR(minor);
 928                goto out_unlock;
 929        }
 930
 931        new_fops = fops_get(minor->dev->driver->fops);
 932        if (!new_fops) {
 933                err = -ENODEV;
 934                goto out_release;
 935        }
 936
 937        replace_fops(filp, new_fops);
 938        if (filp->f_op->open)
 939                err = filp->f_op->open(inode, filp);
 940        else
 941                err = 0;
 942
 943out_release:
 944        drm_minor_release(minor);
 945out_unlock:
 946        mutex_unlock(&drm_global_mutex);
 947        return err;
 948}
 949
 950static const struct file_operations drm_stub_fops = {
 951        .owner = THIS_MODULE,
 952        .open = drm_stub_open,
 953        .llseek = noop_llseek,
 954};
 955
 956static void drm_core_exit(void)
 957{
 958        unregister_chrdev(DRM_MAJOR, "drm");
 959        debugfs_remove(drm_debugfs_root);
 960        drm_sysfs_destroy();
 961        idr_destroy(&drm_minors_idr);
 962        drm_connector_ida_destroy();
 963}
 964
 965static int __init drm_core_init(void)
 966{
 967        int ret;
 968
 969        drm_connector_ida_init();
 970        idr_init(&drm_minors_idr);
 971
 972        ret = drm_sysfs_init();
 973        if (ret < 0) {
 974                DRM_ERROR("Cannot create DRM class: %d\n", ret);
 975                goto error;
 976        }
 977
 978        drm_debugfs_root = debugfs_create_dir("dri", NULL);
 979        if (!drm_debugfs_root) {
 980                ret = -ENOMEM;
 981                DRM_ERROR("Cannot create debugfs-root: %d\n", ret);
 982                goto error;
 983        }
 984
 985        ret = register_chrdev(DRM_MAJOR, "drm", &drm_stub_fops);
 986        if (ret < 0)
 987                goto error;
 988
 989        drm_core_init_complete = true;
 990
 991        DRM_DEBUG("Initialized\n");
 992        return 0;
 993
 994error:
 995        drm_core_exit();
 996        return ret;
 997}
 998
 999module_init(drm_core_init);
1000module_exit(drm_core_exit);
1001