linux/drivers/gpu/vga/vgaarb.c
<<
>>
Prefs
   1/*
   2 * vgaarb.c: Implements the VGA arbitration. For details refer to
   3 * Documentation/vgaarbiter.txt
   4 *
   5 *
   6 * (C) Copyright 2005 Benjamin Herrenschmidt <benh@kernel.crashing.org>
   7 * (C) Copyright 2007 Paulo R. Zanoni <przanoni@gmail.com>
   8 * (C) Copyright 2007, 2009 Tiago Vignatti <vignatti@freedesktop.org>
   9 *
  10 * Permission is hereby granted, free of charge, to any person obtaining a
  11 * copy of this software and associated documentation files (the "Software"),
  12 * to deal in the Software without restriction, including without limitation
  13 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  14 * and/or sell copies of the Software, and to permit persons to whom the
  15 * Software is furnished to do so, subject to the following conditions:
  16 *
  17 * The above copyright notice and this permission notice (including the next
  18 * paragraph) shall be included in all copies or substantial portions of the
  19 * Software.
  20 *
  21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  24 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  27 * DEALINGS
  28 * IN THE SOFTWARE.
  29 *
  30 */
  31
  32#include <linux/module.h>
  33#include <linux/kernel.h>
  34#include <linux/pci.h>
  35#include <linux/errno.h>
  36#include <linux/init.h>
  37#include <linux/list.h>
  38#include <linux/sched.h>
  39#include <linux/wait.h>
  40#include <linux/spinlock.h>
  41#include <linux/poll.h>
  42#include <linux/miscdevice.h>
  43#include <linux/slab.h>
  44
  45#include <linux/uaccess.h>
  46
  47#include <linux/vgaarb.h>
  48
  49static void vga_arbiter_notify_clients(void);
  50/*
  51 * We keep a list of all vga devices in the system to speed
  52 * up the various operations of the arbiter
  53 */
  54struct vga_device {
  55        struct list_head list;
  56        struct pci_dev *pdev;
  57        unsigned int decodes;   /* what does it decodes */
  58        unsigned int owns;      /* what does it owns */
  59        unsigned int locks;     /* what does it locks */
  60        unsigned int io_lock_cnt;       /* legacy IO lock count */
  61        unsigned int mem_lock_cnt;      /* legacy MEM lock count */
  62        unsigned int io_norm_cnt;       /* normal IO count */
  63        unsigned int mem_norm_cnt;      /* normal MEM count */
  64        bool bridge_has_one_vga;
  65        /* allow IRQ enable/disable hook */
  66        void *cookie;
  67        void (*irq_set_state)(void *cookie, bool enable);
  68        unsigned int (*set_vga_decode)(void *cookie, bool decode);
  69};
  70
  71static LIST_HEAD(vga_list);
  72static int vga_count, vga_decode_count;
  73static bool vga_arbiter_used;
  74static DEFINE_SPINLOCK(vga_lock);
  75static DECLARE_WAIT_QUEUE_HEAD(vga_wait_queue);
  76
  77
  78static const char *vga_iostate_to_str(unsigned int iostate)
  79{
  80        /* Ignore VGA_RSRC_IO and VGA_RSRC_MEM */
  81        iostate &= VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
  82        switch (iostate) {
  83        case VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM:
  84                return "io+mem";
  85        case VGA_RSRC_LEGACY_IO:
  86                return "io";
  87        case VGA_RSRC_LEGACY_MEM:
  88                return "mem";
  89        }
  90        return "none";
  91}
  92
  93static int vga_str_to_iostate(char *buf, int str_size, int *io_state)
  94{
  95        /* we could in theory hand out locks on IO and mem
  96         * separately to userspace but it can cause deadlocks */
  97        if (strncmp(buf, "none", 4) == 0) {
  98                *io_state = VGA_RSRC_NONE;
  99                return 1;
 100        }
 101
 102        /* XXX We're not chekcing the str_size! */
 103        if (strncmp(buf, "io+mem", 6) == 0)
 104                goto both;
 105        else if (strncmp(buf, "io", 2) == 0)
 106                goto both;
 107        else if (strncmp(buf, "mem", 3) == 0)
 108                goto both;
 109        return 0;
 110both:
 111        *io_state = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
 112        return 1;
 113}
 114
 115#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
 116/* this is only used a cookie - it should not be dereferenced */
 117static struct pci_dev *vga_default;
 118#endif
 119
 120static void vga_arb_device_card_gone(struct pci_dev *pdev);
 121
 122/* Find somebody in our list */
 123static struct vga_device *vgadev_find(struct pci_dev *pdev)
 124{
 125        struct vga_device *vgadev;
 126
 127        list_for_each_entry(vgadev, &vga_list, list)
 128                if (pdev == vgadev->pdev)
 129                        return vgadev;
 130        return NULL;
 131}
 132
 133/* Returns the default VGA device (vgacon's babe) */
 134#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
 135struct pci_dev *vga_default_device(void)
 136{
 137        return vga_default;
 138}
 139
 140EXPORT_SYMBOL_GPL(vga_default_device);
 141
 142void vga_set_default_device(struct pci_dev *pdev)
 143{
 144        if (vga_default == pdev)
 145                return;
 146
 147        pci_dev_put(vga_default);
 148        vga_default = pci_dev_get(pdev);
 149}
 150#endif
 151
 152static inline void vga_irq_set_state(struct vga_device *vgadev, bool state)
 153{
 154        if (vgadev->irq_set_state)
 155                vgadev->irq_set_state(vgadev->cookie, state);
 156}
 157
 158
 159/* If we don't ever use VGA arb we should avoid
 160   turning off anything anywhere due to old X servers getting
 161   confused about the boot device not being VGA */
 162static void vga_check_first_use(void)
 163{
 164        /* we should inform all GPUs in the system that
 165         * VGA arb has occurred and to try and disable resources
 166         * if they can */
 167        if (!vga_arbiter_used) {
 168                vga_arbiter_used = true;
 169                vga_arbiter_notify_clients();
 170        }
 171}
 172
 173static struct vga_device *__vga_tryget(struct vga_device *vgadev,
 174                                       unsigned int rsrc)
 175{
 176        unsigned int wants, legacy_wants, match;
 177        struct vga_device *conflict;
 178        unsigned int pci_bits;
 179        u32 flags = 0;
 180
 181        /* Account for "normal" resources to lock. If we decode the legacy,
 182         * counterpart, we need to request it as well
 183         */
 184        if ((rsrc & VGA_RSRC_NORMAL_IO) &&
 185            (vgadev->decodes & VGA_RSRC_LEGACY_IO))
 186                rsrc |= VGA_RSRC_LEGACY_IO;
 187        if ((rsrc & VGA_RSRC_NORMAL_MEM) &&
 188            (vgadev->decodes & VGA_RSRC_LEGACY_MEM))
 189                rsrc |= VGA_RSRC_LEGACY_MEM;
 190
 191        pr_debug("%s: %d\n", __func__, rsrc);
 192        pr_debug("%s: owns: %d\n", __func__, vgadev->owns);
 193
 194        /* Check what resources we need to acquire */
 195        wants = rsrc & ~vgadev->owns;
 196
 197        /* We already own everything, just mark locked & bye bye */
 198        if (wants == 0)
 199                goto lock_them;
 200
 201        /* We don't need to request a legacy resource, we just enable
 202         * appropriate decoding and go
 203         */
 204        legacy_wants = wants & VGA_RSRC_LEGACY_MASK;
 205        if (legacy_wants == 0)
 206                goto enable_them;
 207
 208        /* Ok, we don't, let's find out how we need to kick off */
 209        list_for_each_entry(conflict, &vga_list, list) {
 210                unsigned int lwants = legacy_wants;
 211                unsigned int change_bridge = 0;
 212
 213                /* Don't conflict with myself */
 214                if (vgadev == conflict)
 215                        continue;
 216
 217                /* Check if the architecture allows a conflict between those
 218                 * 2 devices or if they are on separate domains
 219                 */
 220                if (!vga_conflicts(vgadev->pdev, conflict->pdev))
 221                        continue;
 222
 223                /* We have a possible conflict. before we go further, we must
 224                 * check if we sit on the same bus as the conflicting device.
 225                 * if we don't, then we must tie both IO and MEM resources
 226                 * together since there is only a single bit controlling
 227                 * VGA forwarding on P2P bridges
 228                 */
 229                if (vgadev->pdev->bus != conflict->pdev->bus) {
 230                        change_bridge = 1;
 231                        lwants = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
 232                }
 233
 234                /* Check if the guy has a lock on the resource. If he does,
 235                 * return the conflicting entry
 236                 */
 237                if (conflict->locks & lwants)
 238                        return conflict;
 239
 240                /* Ok, now check if he owns the resource we want. We don't need
 241                 * to check "decodes" since it should be impossible to own
 242                 * own legacy resources you don't decode unless I have a bug
 243                 * in this code...
 244                 */
 245                WARN_ON(conflict->owns & ~conflict->decodes);
 246                match = lwants & conflict->owns;
 247                if (!match)
 248                        continue;
 249
 250                /* looks like he doesn't have a lock, we can steal
 251                 * them from him
 252                 */
 253
 254                flags = 0;
 255                pci_bits = 0;
 256
 257                if (!conflict->bridge_has_one_vga) {
 258                        vga_irq_set_state(conflict, false);
 259                        flags |= PCI_VGA_STATE_CHANGE_DECODES;
 260                        if (lwants & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM))
 261                                pci_bits |= PCI_COMMAND_MEMORY;
 262                        if (lwants & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO))
 263                                pci_bits |= PCI_COMMAND_IO;
 264                }
 265
 266                if (change_bridge)
 267                        flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
 268
 269                pci_set_vga_state(conflict->pdev, false, pci_bits, flags);
 270                conflict->owns &= ~lwants;
 271                /* If he also owned non-legacy, that is no longer the case */
 272                if (lwants & VGA_RSRC_LEGACY_MEM)
 273                        conflict->owns &= ~VGA_RSRC_NORMAL_MEM;
 274                if (lwants & VGA_RSRC_LEGACY_IO)
 275                        conflict->owns &= ~VGA_RSRC_NORMAL_IO;
 276        }
 277
 278enable_them:
 279        /* ok dude, we got it, everybody conflicting has been disabled, let's
 280         * enable us. Make sure we don't mark a bit in "owns" that we don't
 281         * also have in "decodes". We can lock resources we don't decode but
 282         * not own them.
 283         */
 284        flags = 0;
 285        pci_bits = 0;
 286
 287        if (!vgadev->bridge_has_one_vga) {
 288                flags |= PCI_VGA_STATE_CHANGE_DECODES;
 289                if (wants & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM))
 290                        pci_bits |= PCI_COMMAND_MEMORY;
 291                if (wants & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO))
 292                        pci_bits |= PCI_COMMAND_IO;
 293        }
 294        if (!!(wants & VGA_RSRC_LEGACY_MASK))
 295                flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
 296
 297        pci_set_vga_state(vgadev->pdev, true, pci_bits, flags);
 298
 299        if (!vgadev->bridge_has_one_vga) {
 300                vga_irq_set_state(vgadev, true);
 301        }
 302        vgadev->owns |= (wants & vgadev->decodes);
 303lock_them:
 304        vgadev->locks |= (rsrc & VGA_RSRC_LEGACY_MASK);
 305        if (rsrc & VGA_RSRC_LEGACY_IO)
 306                vgadev->io_lock_cnt++;
 307        if (rsrc & VGA_RSRC_LEGACY_MEM)
 308                vgadev->mem_lock_cnt++;
 309        if (rsrc & VGA_RSRC_NORMAL_IO)
 310                vgadev->io_norm_cnt++;
 311        if (rsrc & VGA_RSRC_NORMAL_MEM)
 312                vgadev->mem_norm_cnt++;
 313
 314        return NULL;
 315}
 316
 317static void __vga_put(struct vga_device *vgadev, unsigned int rsrc)
 318{
 319        unsigned int old_locks = vgadev->locks;
 320
 321        pr_debug("%s\n", __func__);
 322
 323        /* Update our counters, and account for equivalent legacy resources
 324         * if we decode them
 325         */
 326        if ((rsrc & VGA_RSRC_NORMAL_IO) && vgadev->io_norm_cnt > 0) {
 327                vgadev->io_norm_cnt--;
 328                if (vgadev->decodes & VGA_RSRC_LEGACY_IO)
 329                        rsrc |= VGA_RSRC_LEGACY_IO;
 330        }
 331        if ((rsrc & VGA_RSRC_NORMAL_MEM) && vgadev->mem_norm_cnt > 0) {
 332                vgadev->mem_norm_cnt--;
 333                if (vgadev->decodes & VGA_RSRC_LEGACY_MEM)
 334                        rsrc |= VGA_RSRC_LEGACY_MEM;
 335        }
 336        if ((rsrc & VGA_RSRC_LEGACY_IO) && vgadev->io_lock_cnt > 0)
 337                vgadev->io_lock_cnt--;
 338        if ((rsrc & VGA_RSRC_LEGACY_MEM) && vgadev->mem_lock_cnt > 0)
 339                vgadev->mem_lock_cnt--;
 340
 341        /* Just clear lock bits, we do lazy operations so we don't really
 342         * have to bother about anything else at this point
 343         */
 344        if (vgadev->io_lock_cnt == 0)
 345                vgadev->locks &= ~VGA_RSRC_LEGACY_IO;
 346        if (vgadev->mem_lock_cnt == 0)
 347                vgadev->locks &= ~VGA_RSRC_LEGACY_MEM;
 348
 349        /* Kick the wait queue in case somebody was waiting if we actually
 350         * released something
 351         */
 352        if (old_locks != vgadev->locks)
 353                wake_up_all(&vga_wait_queue);
 354}
 355
 356int vga_get(struct pci_dev *pdev, unsigned int rsrc, int interruptible)
 357{
 358        struct vga_device *vgadev, *conflict;
 359        unsigned long flags;
 360        wait_queue_t wait;
 361        int rc = 0;
 362
 363        vga_check_first_use();
 364        /* The one who calls us should check for this, but lets be sure... */
 365        if (pdev == NULL)
 366                pdev = vga_default_device();
 367        if (pdev == NULL)
 368                return 0;
 369
 370        for (;;) {
 371                spin_lock_irqsave(&vga_lock, flags);
 372                vgadev = vgadev_find(pdev);
 373                if (vgadev == NULL) {
 374                        spin_unlock_irqrestore(&vga_lock, flags);
 375                        rc = -ENODEV;
 376                        break;
 377                }
 378                conflict = __vga_tryget(vgadev, rsrc);
 379                spin_unlock_irqrestore(&vga_lock, flags);
 380                if (conflict == NULL)
 381                        break;
 382
 383
 384                /* We have a conflict, we wait until somebody kicks the
 385                 * work queue. Currently we have one work queue that we
 386                 * kick each time some resources are released, but it would
 387                 * be fairly easy to have a per device one so that we only
 388                 * need to attach to the conflicting device
 389                 */
 390                init_waitqueue_entry(&wait, current);
 391                add_wait_queue(&vga_wait_queue, &wait);
 392                set_current_state(interruptible ?
 393                                  TASK_INTERRUPTIBLE :
 394                                  TASK_UNINTERRUPTIBLE);
 395                if (signal_pending(current)) {
 396                        rc = -EINTR;
 397                        break;
 398                }
 399                schedule();
 400                remove_wait_queue(&vga_wait_queue, &wait);
 401                set_current_state(TASK_RUNNING);
 402        }
 403        return rc;
 404}
 405EXPORT_SYMBOL(vga_get);
 406
 407int vga_tryget(struct pci_dev *pdev, unsigned int rsrc)
 408{
 409        struct vga_device *vgadev;
 410        unsigned long flags;
 411        int rc = 0;
 412
 413        vga_check_first_use();
 414
 415        /* The one who calls us should check for this, but lets be sure... */
 416        if (pdev == NULL)
 417                pdev = vga_default_device();
 418        if (pdev == NULL)
 419                return 0;
 420        spin_lock_irqsave(&vga_lock, flags);
 421        vgadev = vgadev_find(pdev);
 422        if (vgadev == NULL) {
 423                rc = -ENODEV;
 424                goto bail;
 425        }
 426        if (__vga_tryget(vgadev, rsrc))
 427                rc = -EBUSY;
 428bail:
 429        spin_unlock_irqrestore(&vga_lock, flags);
 430        return rc;
 431}
 432EXPORT_SYMBOL(vga_tryget);
 433
 434void vga_put(struct pci_dev *pdev, unsigned int rsrc)
 435{
 436        struct vga_device *vgadev;
 437        unsigned long flags;
 438
 439        /* The one who calls us should check for this, but lets be sure... */
 440        if (pdev == NULL)
 441                pdev = vga_default_device();
 442        if (pdev == NULL)
 443                return;
 444        spin_lock_irqsave(&vga_lock, flags);
 445        vgadev = vgadev_find(pdev);
 446        if (vgadev == NULL)
 447                goto bail;
 448        __vga_put(vgadev, rsrc);
 449bail:
 450        spin_unlock_irqrestore(&vga_lock, flags);
 451}
 452EXPORT_SYMBOL(vga_put);
 453
 454/* Rules for using a bridge to control a VGA descendant decoding:
 455   if a bridge has only one VGA descendant then it can be used
 456   to control the VGA routing for that device.
 457   It should always use the bridge closest to the device to control it.
 458   If a bridge has a direct VGA descendant, but also have a sub-bridge
 459   VGA descendant then we cannot use that bridge to control the direct VGA descendant.
 460   So for every device we register, we need to iterate all its parent bridges
 461   so we can invalidate any devices using them properly.
 462*/
 463static void vga_arbiter_check_bridge_sharing(struct vga_device *vgadev)
 464{
 465        struct vga_device *same_bridge_vgadev;
 466        struct pci_bus *new_bus, *bus;
 467        struct pci_dev *new_bridge, *bridge;
 468
 469        vgadev->bridge_has_one_vga = true;
 470
 471        if (list_empty(&vga_list))
 472                return;
 473
 474        /* okay iterate the new devices bridge hierarachy */
 475        new_bus = vgadev->pdev->bus;
 476        while (new_bus) {
 477                new_bridge = new_bus->self;
 478
 479                /* go through list of devices already registered */
 480                list_for_each_entry(same_bridge_vgadev, &vga_list, list) {
 481                        bus = same_bridge_vgadev->pdev->bus;
 482                        bridge = bus->self;
 483
 484                        /* see if the share a bridge with this device */
 485                        if (new_bridge == bridge) {
 486                                /* if their direct parent bridge is the same
 487                                   as any bridge of this device then it can't be used
 488                                   for that device */
 489                                same_bridge_vgadev->bridge_has_one_vga = false;
 490                        }
 491
 492                        /* now iterate the previous devices bridge hierarchy */
 493                        /* if the new devices parent bridge is in the other devices
 494                           hierarchy then we can't use it to control this device */
 495                        while (bus) {
 496                                bridge = bus->self;
 497                                if (bridge) {
 498                                        if (bridge == vgadev->pdev->bus->self)
 499                                                vgadev->bridge_has_one_vga = false;
 500                                }
 501                                bus = bus->parent;
 502                        }
 503                }
 504                new_bus = new_bus->parent;
 505        }
 506}
 507
 508/*
 509 * Currently, we assume that the "initial" setup of the system is
 510 * not sane, that is we come up with conflicting devices and let
 511 * the arbiter's client decides if devices decodes or not legacy
 512 * things.
 513 */
 514static bool vga_arbiter_add_pci_device(struct pci_dev *pdev)
 515{
 516        struct vga_device *vgadev;
 517        unsigned long flags;
 518        struct pci_bus *bus;
 519        struct pci_dev *bridge;
 520        u16 cmd;
 521
 522        /* Only deal with VGA class devices */
 523        if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
 524                return false;
 525
 526        /* Allocate structure */
 527        vgadev = kmalloc(sizeof(struct vga_device), GFP_KERNEL);
 528        if (vgadev == NULL) {
 529                pr_err("vgaarb: failed to allocate pci device\n");
 530                /* What to do on allocation failure ? For now, let's
 531                 * just do nothing, I'm not sure there is anything saner
 532                 * to be done
 533                 */
 534                return false;
 535        }
 536
 537        memset(vgadev, 0, sizeof(*vgadev));
 538
 539        /* Take lock & check for duplicates */
 540        spin_lock_irqsave(&vga_lock, flags);
 541        if (vgadev_find(pdev) != NULL) {
 542                BUG_ON(1);
 543                goto fail;
 544        }
 545        vgadev->pdev = pdev;
 546
 547        /* By default, assume we decode everything */
 548        vgadev->decodes = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |
 549                          VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
 550
 551        /* by default mark it as decoding */
 552        vga_decode_count++;
 553        /* Mark that we "own" resources based on our enables, we will
 554         * clear that below if the bridge isn't forwarding
 555         */
 556        pci_read_config_word(pdev, PCI_COMMAND, &cmd);
 557        if (cmd & PCI_COMMAND_IO)
 558                vgadev->owns |= VGA_RSRC_LEGACY_IO;
 559        if (cmd & PCI_COMMAND_MEMORY)
 560                vgadev->owns |= VGA_RSRC_LEGACY_MEM;
 561
 562        /* Check if VGA cycles can get down to us */
 563        bus = pdev->bus;
 564        while (bus) {
 565                bridge = bus->self;
 566                if (bridge) {
 567                        u16 l;
 568                        pci_read_config_word(bridge, PCI_BRIDGE_CONTROL,
 569                                             &l);
 570                        if (!(l & PCI_BRIDGE_CTL_VGA)) {
 571                                vgadev->owns = 0;
 572                                break;
 573                        }
 574                }
 575                bus = bus->parent;
 576        }
 577
 578        /* Deal with VGA default device. Use first enabled one
 579         * by default if arch doesn't have it's own hook
 580         */
 581#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
 582        if (vga_default == NULL &&
 583            ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK))
 584                vga_set_default_device(pdev);
 585#endif
 586
 587        vga_arbiter_check_bridge_sharing(vgadev);
 588
 589        /* Add to the list */
 590        list_add(&vgadev->list, &vga_list);
 591        vga_count++;
 592        pr_info("vgaarb: device added: PCI:%s,decodes=%s,owns=%s,locks=%s\n",
 593                pci_name(pdev),
 594                vga_iostate_to_str(vgadev->decodes),
 595                vga_iostate_to_str(vgadev->owns),
 596                vga_iostate_to_str(vgadev->locks));
 597
 598        spin_unlock_irqrestore(&vga_lock, flags);
 599        return true;
 600fail:
 601        spin_unlock_irqrestore(&vga_lock, flags);
 602        kfree(vgadev);
 603        return false;
 604}
 605
 606static bool vga_arbiter_del_pci_device(struct pci_dev *pdev)
 607{
 608        struct vga_device *vgadev;
 609        unsigned long flags;
 610        bool ret = true;
 611
 612        spin_lock_irqsave(&vga_lock, flags);
 613        vgadev = vgadev_find(pdev);
 614        if (vgadev == NULL) {
 615                ret = false;
 616                goto bail;
 617        }
 618
 619#ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE
 620        if (vga_default == pdev)
 621                vga_set_default_device(NULL);
 622#endif
 623
 624        if (vgadev->decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM))
 625                vga_decode_count--;
 626
 627        /* Remove entry from list */
 628        list_del(&vgadev->list);
 629        vga_count--;
 630        /* Notify userland driver that the device is gone so it discards
 631         * it's copies of the pci_dev pointer
 632         */
 633        vga_arb_device_card_gone(pdev);
 634
 635        /* Wake up all possible waiters */
 636        wake_up_all(&vga_wait_queue);
 637bail:
 638        spin_unlock_irqrestore(&vga_lock, flags);
 639        kfree(vgadev);
 640        return ret;
 641}
 642
 643/* this is called with the lock */
 644static inline void vga_update_device_decodes(struct vga_device *vgadev,
 645                                             int new_decodes)
 646{
 647        int old_decodes;
 648        struct vga_device *new_vgadev, *conflict;
 649
 650        old_decodes = vgadev->decodes;
 651        vgadev->decodes = new_decodes;
 652
 653        pr_info("vgaarb: device changed decodes: PCI:%s,olddecodes=%s,decodes=%s:owns=%s\n",
 654                pci_name(vgadev->pdev),
 655                vga_iostate_to_str(old_decodes),
 656                vga_iostate_to_str(vgadev->decodes),
 657                vga_iostate_to_str(vgadev->owns));
 658
 659
 660        /* if we own the decodes we should move them along to
 661           another card */
 662        if ((vgadev->owns & old_decodes) && (vga_count > 1)) {
 663                /* set us to own nothing */
 664                vgadev->owns &= ~old_decodes;
 665                list_for_each_entry(new_vgadev, &vga_list, list) {
 666                        if ((new_vgadev != vgadev) &&
 667                            (new_vgadev->decodes & VGA_RSRC_LEGACY_MASK)) {
 668                                pr_info("vgaarb: transferring owner from PCI:%s to PCI:%s\n", pci_name(vgadev->pdev), pci_name(new_vgadev->pdev));
 669                                conflict = __vga_tryget(new_vgadev, VGA_RSRC_LEGACY_MASK);
 670                                if (!conflict)
 671                                        __vga_put(new_vgadev, VGA_RSRC_LEGACY_MASK);
 672                                break;
 673                        }
 674                }
 675        }
 676
 677        /* change decodes counter */
 678        if (old_decodes != new_decodes) {
 679                if (new_decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM))
 680                        vga_decode_count++;
 681                else
 682                        vga_decode_count--;
 683        }
 684        pr_debug("vgaarb: decoding count now is: %d\n", vga_decode_count);
 685}
 686
 687static void __vga_set_legacy_decoding(struct pci_dev *pdev, unsigned int decodes, bool userspace)
 688{
 689        struct vga_device *vgadev;
 690        unsigned long flags;
 691
 692        decodes &= VGA_RSRC_LEGACY_MASK;
 693
 694        spin_lock_irqsave(&vga_lock, flags);
 695        vgadev = vgadev_find(pdev);
 696        if (vgadev == NULL)
 697                goto bail;
 698
 699        /* don't let userspace futz with kernel driver decodes */
 700        if (userspace && vgadev->set_vga_decode)
 701                goto bail;
 702
 703        /* update the device decodes + counter */
 704        vga_update_device_decodes(vgadev, decodes);
 705
 706        /* XXX if somebody is going from "doesn't decode" to "decodes" state
 707         * here, additional care must be taken as we may have pending owner
 708         * ship of non-legacy region ...
 709         */
 710bail:
 711        spin_unlock_irqrestore(&vga_lock, flags);
 712}
 713
 714void vga_set_legacy_decoding(struct pci_dev *pdev, unsigned int decodes)
 715{
 716        __vga_set_legacy_decoding(pdev, decodes, false);
 717}
 718EXPORT_SYMBOL(vga_set_legacy_decoding);
 719
 720/* call with NULL to unregister */
 721int vga_client_register(struct pci_dev *pdev, void *cookie,
 722                        void (*irq_set_state)(void *cookie, bool state),
 723                        unsigned int (*set_vga_decode)(void *cookie, bool decode))
 724{
 725        int ret = -ENODEV;
 726        struct vga_device *vgadev;
 727        unsigned long flags;
 728
 729        spin_lock_irqsave(&vga_lock, flags);
 730        vgadev = vgadev_find(pdev);
 731        if (!vgadev)
 732                goto bail;
 733
 734        vgadev->irq_set_state = irq_set_state;
 735        vgadev->set_vga_decode = set_vga_decode;
 736        vgadev->cookie = cookie;
 737        ret = 0;
 738
 739bail:
 740        spin_unlock_irqrestore(&vga_lock, flags);
 741        return ret;
 742
 743}
 744EXPORT_SYMBOL(vga_client_register);
 745
 746/*
 747 * Char driver implementation
 748 *
 749 * Semantics is:
 750 *
 751 *  open       : open user instance of the arbitrer. by default, it's
 752 *                attached to the default VGA device of the system.
 753 *
 754 *  close      : close user instance, release locks
 755 *
 756 *  read       : return a string indicating the status of the target.
 757 *                an IO state string is of the form {io,mem,io+mem,none},
 758 *                mc and ic are respectively mem and io lock counts (for
 759 *                debugging/diagnostic only). "decodes" indicate what the
 760 *                card currently decodes, "owns" indicates what is currently
 761 *                enabled on it, and "locks" indicates what is locked by this
 762 *                card. If the card is unplugged, we get "invalid" then for
 763 *                card_ID and an -ENODEV error is returned for any command
 764 *                until a new card is targeted
 765 *
 766 *   "<card_ID>,decodes=<io_state>,owns=<io_state>,locks=<io_state> (ic,mc)"
 767 *
 768 * write       : write a command to the arbiter. List of commands is:
 769 *
 770 *   target <card_ID>   : switch target to card <card_ID> (see below)
 771 *   lock <io_state>    : acquires locks on target ("none" is invalid io_state)
 772 *   trylock <io_state> : non-blocking acquire locks on target
 773 *   unlock <io_state>  : release locks on target
 774 *   unlock all         : release all locks on target held by this user
 775 *   decodes <io_state> : set the legacy decoding attributes for the card
 776 *
 777 * poll         : event if something change on any card (not just the target)
 778 *
 779 * card_ID is of the form "PCI:domain:bus:dev.fn". It can be set to "default"
 780 * to go back to the system default card (TODO: not implemented yet).
 781 * Currently, only PCI is supported as a prefix, but the userland API may
 782 * support other bus types in the future, even if the current kernel
 783 * implementation doesn't.
 784 *
 785 * Note about locks:
 786 *
 787 * The driver keeps track of which user has what locks on which card. It
 788 * supports stacking, like the kernel one. This complexifies the implementation
 789 * a bit, but makes the arbiter more tolerant to userspace problems and able
 790 * to properly cleanup in all cases when a process dies.
 791 * Currently, a max of 16 cards simultaneously can have locks issued from
 792 * userspace for a given user (file descriptor instance) of the arbiter.
 793 *
 794 * If the device is hot-unplugged, there is a hook inside the module to notify
 795 * they being added/removed in the system and automatically added/removed in
 796 * the arbiter.
 797 */
 798
 799#define MAX_USER_CARDS         CONFIG_VGA_ARB_MAX_GPUS
 800#define PCI_INVALID_CARD       ((struct pci_dev *)-1UL)
 801
 802/*
 803 * Each user has an array of these, tracking which cards have locks
 804 */
 805struct vga_arb_user_card {
 806        struct pci_dev *pdev;
 807        unsigned int mem_cnt;
 808        unsigned int io_cnt;
 809};
 810
 811struct vga_arb_private {
 812        struct list_head list;
 813        struct pci_dev *target;
 814        struct vga_arb_user_card cards[MAX_USER_CARDS];
 815        spinlock_t lock;
 816};
 817
 818static LIST_HEAD(vga_user_list);
 819static DEFINE_SPINLOCK(vga_user_lock);
 820
 821
 822/*
 823 * This function gets a string in the format: "PCI:domain:bus:dev.fn" and
 824 * returns the respective values. If the string is not in this format,
 825 * it returns 0.
 826 */
 827static int vga_pci_str_to_vars(char *buf, int count, unsigned int *domain,
 828                               unsigned int *bus, unsigned int *devfn)
 829{
 830        int n;
 831        unsigned int slot, func;
 832
 833
 834        n = sscanf(buf, "PCI:%x:%x:%x.%x", domain, bus, &slot, &func);
 835        if (n != 4)
 836                return 0;
 837
 838        *devfn = PCI_DEVFN(slot, func);
 839
 840        return 1;
 841}
 842
 843static ssize_t vga_arb_read(struct file *file, char __user * buf,
 844                            size_t count, loff_t *ppos)
 845{
 846        struct vga_arb_private *priv = file->private_data;
 847        struct vga_device *vgadev;
 848        struct pci_dev *pdev;
 849        unsigned long flags;
 850        size_t len;
 851        int rc;
 852        char *lbuf;
 853
 854        lbuf = kmalloc(1024, GFP_KERNEL);
 855        if (lbuf == NULL)
 856                return -ENOMEM;
 857
 858        /* Shields against vga_arb_device_card_gone (pci_dev going
 859         * away), and allows access to vga list
 860         */
 861        spin_lock_irqsave(&vga_lock, flags);
 862
 863        /* If we are targeting the default, use it */
 864        pdev = priv->target;
 865        if (pdev == NULL || pdev == PCI_INVALID_CARD) {
 866                spin_unlock_irqrestore(&vga_lock, flags);
 867                len = sprintf(lbuf, "invalid");
 868                goto done;
 869        }
 870
 871        /* Find card vgadev structure */
 872        vgadev = vgadev_find(pdev);
 873        if (vgadev == NULL) {
 874                /* Wow, it's not in the list, that shouldn't happen,
 875                 * let's fix us up and return invalid card
 876                 */
 877                if (pdev == priv->target)
 878                        vga_arb_device_card_gone(pdev);
 879                spin_unlock_irqrestore(&vga_lock, flags);
 880                len = sprintf(lbuf, "invalid");
 881                goto done;
 882        }
 883
 884        /* Fill the buffer with infos */
 885        len = snprintf(lbuf, 1024,
 886                       "count:%d,PCI:%s,decodes=%s,owns=%s,locks=%s(%d:%d)\n",
 887                       vga_decode_count, pci_name(pdev),
 888                       vga_iostate_to_str(vgadev->decodes),
 889                       vga_iostate_to_str(vgadev->owns),
 890                       vga_iostate_to_str(vgadev->locks),
 891                       vgadev->io_lock_cnt, vgadev->mem_lock_cnt);
 892
 893        spin_unlock_irqrestore(&vga_lock, flags);
 894done:
 895
 896        /* Copy that to user */
 897        if (len > count)
 898                len = count;
 899        rc = copy_to_user(buf, lbuf, len);
 900        kfree(lbuf);
 901        if (rc)
 902                return -EFAULT;
 903        return len;
 904}
 905
 906/*
 907 * TODO: To avoid parsing inside kernel and to improve the speed we may
 908 * consider use ioctl here
 909 */
 910static ssize_t vga_arb_write(struct file *file, const char __user * buf,
 911                             size_t count, loff_t *ppos)
 912{
 913        struct vga_arb_private *priv = file->private_data;
 914        struct vga_arb_user_card *uc = NULL;
 915        struct pci_dev *pdev;
 916
 917        unsigned int io_state;
 918
 919        char *kbuf, *curr_pos;
 920        size_t remaining = count;
 921
 922        int ret_val;
 923        int i;
 924
 925
 926        kbuf = kmalloc(count + 1, GFP_KERNEL);
 927        if (!kbuf)
 928                return -ENOMEM;
 929
 930        if (copy_from_user(kbuf, buf, count)) {
 931                kfree(kbuf);
 932                return -EFAULT;
 933        }
 934        curr_pos = kbuf;
 935        kbuf[count] = '\0';     /* Just to make sure... */
 936
 937        if (strncmp(curr_pos, "lock ", 5) == 0) {
 938                curr_pos += 5;
 939                remaining -= 5;
 940
 941                pr_debug("client 0x%p called 'lock'\n", priv);
 942
 943                if (!vga_str_to_iostate(curr_pos, remaining, &io_state)) {
 944                        ret_val = -EPROTO;
 945                        goto done;
 946                }
 947                if (io_state == VGA_RSRC_NONE) {
 948                        ret_val = -EPROTO;
 949                        goto done;
 950                }
 951
 952                pdev = priv->target;
 953                if (priv->target == NULL) {
 954                        ret_val = -ENODEV;
 955                        goto done;
 956                }
 957
 958                vga_get_uninterruptible(pdev, io_state);
 959
 960                /* Update the client's locks lists... */
 961                for (i = 0; i < MAX_USER_CARDS; i++) {
 962                        if (priv->cards[i].pdev == pdev) {
 963                                if (io_state & VGA_RSRC_LEGACY_IO)
 964                                        priv->cards[i].io_cnt++;
 965                                if (io_state & VGA_RSRC_LEGACY_MEM)
 966                                        priv->cards[i].mem_cnt++;
 967                                break;
 968                        }
 969                }
 970
 971                ret_val = count;
 972                goto done;
 973        } else if (strncmp(curr_pos, "unlock ", 7) == 0) {
 974                curr_pos += 7;
 975                remaining -= 7;
 976
 977                pr_debug("client 0x%p called 'unlock'\n", priv);
 978
 979                if (strncmp(curr_pos, "all", 3) == 0)
 980                        io_state = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
 981                else {
 982                        if (!vga_str_to_iostate
 983                            (curr_pos, remaining, &io_state)) {
 984                                ret_val = -EPROTO;
 985                                goto done;
 986                        }
 987                        /* TODO: Add this?
 988                           if (io_state == VGA_RSRC_NONE) {
 989                           ret_val = -EPROTO;
 990                           goto done;
 991                           }
 992                          */
 993                }
 994
 995                pdev = priv->target;
 996                if (priv->target == NULL) {
 997                        ret_val = -ENODEV;
 998                        goto done;
 999                }
1000                for (i = 0; i < MAX_USER_CARDS; i++) {
1001                        if (priv->cards[i].pdev == pdev)
1002                                uc = &priv->cards[i];
1003                }
1004
1005                if (!uc) {
1006                        ret_val = -EINVAL;
1007                        goto done;
1008                }
1009
1010                if (io_state & VGA_RSRC_LEGACY_IO && uc->io_cnt == 0) {
1011                        ret_val = -EINVAL;
1012                        goto done;
1013                }
1014
1015                if (io_state & VGA_RSRC_LEGACY_MEM && uc->mem_cnt == 0) {
1016                        ret_val = -EINVAL;
1017                        goto done;
1018                }
1019
1020                vga_put(pdev, io_state);
1021
1022                if (io_state & VGA_RSRC_LEGACY_IO)
1023                        uc->io_cnt--;
1024                if (io_state & VGA_RSRC_LEGACY_MEM)
1025                        uc->mem_cnt--;
1026
1027                ret_val = count;
1028                goto done;
1029        } else if (strncmp(curr_pos, "trylock ", 8) == 0) {
1030                curr_pos += 8;
1031                remaining -= 8;
1032
1033                pr_debug("client 0x%p called 'trylock'\n", priv);
1034
1035                if (!vga_str_to_iostate(curr_pos, remaining, &io_state)) {
1036                        ret_val = -EPROTO;
1037                        goto done;
1038                }
1039                /* TODO: Add this?
1040                   if (io_state == VGA_RSRC_NONE) {
1041                   ret_val = -EPROTO;
1042                   goto done;
1043                   }
1044                 */
1045
1046                pdev = priv->target;
1047                if (priv->target == NULL) {
1048                        ret_val = -ENODEV;
1049                        goto done;
1050                }
1051
1052                if (vga_tryget(pdev, io_state)) {
1053                        /* Update the client's locks lists... */
1054                        for (i = 0; i < MAX_USER_CARDS; i++) {
1055                                if (priv->cards[i].pdev == pdev) {
1056                                        if (io_state & VGA_RSRC_LEGACY_IO)
1057                                                priv->cards[i].io_cnt++;
1058                                        if (io_state & VGA_RSRC_LEGACY_MEM)
1059                                                priv->cards[i].mem_cnt++;
1060                                        break;
1061                                }
1062                        }
1063                        ret_val = count;
1064                        goto done;
1065                } else {
1066                        ret_val = -EBUSY;
1067                        goto done;
1068                }
1069
1070        } else if (strncmp(curr_pos, "target ", 7) == 0) {
1071                unsigned int domain, bus, devfn;
1072                struct vga_device *vgadev;
1073
1074                curr_pos += 7;
1075                remaining -= 7;
1076                pr_debug("client 0x%p called 'target'\n", priv);
1077                /* if target is default */
1078                if (!strncmp(curr_pos, "default", 7))
1079                        pdev = pci_dev_get(vga_default_device());
1080                else {
1081                        if (!vga_pci_str_to_vars(curr_pos, remaining,
1082                                                 &domain, &bus, &devfn)) {
1083                                ret_val = -EPROTO;
1084                                goto done;
1085                        }
1086                        pr_debug("vgaarb: %s ==> %x:%x:%x.%x\n", curr_pos,
1087                                domain, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
1088
1089                        pdev = pci_get_domain_bus_and_slot(domain, bus, devfn);
1090                        pr_debug("vgaarb: pdev %p\n", pdev);
1091                        if (!pdev) {
1092                                pr_err("vgaarb: invalid PCI address %x:%x:%x\n",
1093                                        domain, bus, devfn);
1094                                ret_val = -ENODEV;
1095                                goto done;
1096                        }
1097                }
1098
1099                vgadev = vgadev_find(pdev);
1100                pr_debug("vgaarb: vgadev %p\n", vgadev);
1101                if (vgadev == NULL) {
1102                        pr_err("vgaarb: this pci device is not a vga device\n");
1103                        pci_dev_put(pdev);
1104                        ret_val = -ENODEV;
1105                        goto done;
1106                }
1107
1108                priv->target = pdev;
1109                for (i = 0; i < MAX_USER_CARDS; i++) {
1110                        if (priv->cards[i].pdev == pdev)
1111                                break;
1112                        if (priv->cards[i].pdev == NULL) {
1113                                priv->cards[i].pdev = pdev;
1114                                priv->cards[i].io_cnt = 0;
1115                                priv->cards[i].mem_cnt = 0;
1116                                break;
1117                        }
1118                }
1119                if (i == MAX_USER_CARDS) {
1120                        pr_err("vgaarb: maximum user cards (%d) number reached!\n",
1121                                MAX_USER_CARDS);
1122                        pci_dev_put(pdev);
1123                        /* XXX: which value to return? */
1124                        ret_val =  -ENOMEM;
1125                        goto done;
1126                }
1127
1128                ret_val = count;
1129                pci_dev_put(pdev);
1130                goto done;
1131
1132
1133        } else if (strncmp(curr_pos, "decodes ", 8) == 0) {
1134                curr_pos += 8;
1135                remaining -= 8;
1136                pr_debug("vgaarb: client 0x%p called 'decodes'\n", priv);
1137
1138                if (!vga_str_to_iostate(curr_pos, remaining, &io_state)) {
1139                        ret_val = -EPROTO;
1140                        goto done;
1141                }
1142                pdev = priv->target;
1143                if (priv->target == NULL) {
1144                        ret_val = -ENODEV;
1145                        goto done;
1146                }
1147
1148                __vga_set_legacy_decoding(pdev, io_state, true);
1149                ret_val = count;
1150                goto done;
1151        }
1152        /* If we got here, the message written is not part of the protocol! */
1153        kfree(kbuf);
1154        return -EPROTO;
1155
1156done:
1157        kfree(kbuf);
1158        return ret_val;
1159}
1160
1161static unsigned int vga_arb_fpoll(struct file *file, poll_table * wait)
1162{
1163        struct vga_arb_private *priv = file->private_data;
1164
1165        pr_debug("%s\n", __func__);
1166
1167        if (priv == NULL)
1168                return -ENODEV;
1169        poll_wait(file, &vga_wait_queue, wait);
1170        return POLLIN;
1171}
1172
1173static int vga_arb_open(struct inode *inode, struct file *file)
1174{
1175        struct vga_arb_private *priv;
1176        unsigned long flags;
1177
1178        pr_debug("%s\n", __func__);
1179
1180        priv = kzalloc(sizeof(*priv), GFP_KERNEL);
1181        if (priv == NULL)
1182                return -ENOMEM;
1183        spin_lock_init(&priv->lock);
1184        file->private_data = priv;
1185
1186        spin_lock_irqsave(&vga_user_lock, flags);
1187        list_add(&priv->list, &vga_user_list);
1188        spin_unlock_irqrestore(&vga_user_lock, flags);
1189
1190        /* Set the client' lists of locks */
1191        priv->target = vga_default_device(); /* Maybe this is still null! */
1192        priv->cards[0].pdev = priv->target;
1193        priv->cards[0].io_cnt = 0;
1194        priv->cards[0].mem_cnt = 0;
1195
1196
1197        return 0;
1198}
1199
1200static int vga_arb_release(struct inode *inode, struct file *file)
1201{
1202        struct vga_arb_private *priv = file->private_data;
1203        struct vga_arb_user_card *uc;
1204        unsigned long flags;
1205        int i;
1206
1207        pr_debug("%s\n", __func__);
1208
1209        if (priv == NULL)
1210                return -ENODEV;
1211
1212        spin_lock_irqsave(&vga_user_lock, flags);
1213        list_del(&priv->list);
1214        for (i = 0; i < MAX_USER_CARDS; i++) {
1215                uc = &priv->cards[i];
1216                if (uc->pdev == NULL)
1217                        continue;
1218                pr_debug("uc->io_cnt == %d, uc->mem_cnt == %d\n",
1219                         uc->io_cnt, uc->mem_cnt);
1220                while (uc->io_cnt--)
1221                        vga_put(uc->pdev, VGA_RSRC_LEGACY_IO);
1222                while (uc->mem_cnt--)
1223                        vga_put(uc->pdev, VGA_RSRC_LEGACY_MEM);
1224        }
1225        spin_unlock_irqrestore(&vga_user_lock, flags);
1226
1227        kfree(priv);
1228
1229        return 0;
1230}
1231
1232static void vga_arb_device_card_gone(struct pci_dev *pdev)
1233{
1234}
1235
1236/*
1237 * callback any registered clients to let them know we have a
1238 * change in VGA cards
1239 */
1240static void vga_arbiter_notify_clients(void)
1241{
1242        struct vga_device *vgadev;
1243        unsigned long flags;
1244        uint32_t new_decodes;
1245        bool new_state;
1246
1247        if (!vga_arbiter_used)
1248                return;
1249
1250        spin_lock_irqsave(&vga_lock, flags);
1251        list_for_each_entry(vgadev, &vga_list, list) {
1252                if (vga_count > 1)
1253                        new_state = false;
1254                else
1255                        new_state = true;
1256                if (vgadev->set_vga_decode) {
1257                        new_decodes = vgadev->set_vga_decode(vgadev->cookie, new_state);
1258                        vga_update_device_decodes(vgadev, new_decodes);
1259                }
1260        }
1261        spin_unlock_irqrestore(&vga_lock, flags);
1262}
1263
1264static int pci_notify(struct notifier_block *nb, unsigned long action,
1265                      void *data)
1266{
1267        struct device *dev = data;
1268        struct pci_dev *pdev = to_pci_dev(dev);
1269        bool notify = false;
1270
1271        pr_debug("%s\n", __func__);
1272
1273        /* For now we're only intereted in devices added and removed. I didn't
1274         * test this thing here, so someone needs to double check for the
1275         * cases of hotplugable vga cards. */
1276        if (action == BUS_NOTIFY_ADD_DEVICE)
1277                notify = vga_arbiter_add_pci_device(pdev);
1278        else if (action == BUS_NOTIFY_DEL_DEVICE)
1279                notify = vga_arbiter_del_pci_device(pdev);
1280
1281        if (notify)
1282                vga_arbiter_notify_clients();
1283        return 0;
1284}
1285
1286static struct notifier_block pci_notifier = {
1287        .notifier_call = pci_notify,
1288};
1289
1290static const struct file_operations vga_arb_device_fops = {
1291        .read = vga_arb_read,
1292        .write = vga_arb_write,
1293        .poll = vga_arb_fpoll,
1294        .open = vga_arb_open,
1295        .release = vga_arb_release,
1296        .llseek = noop_llseek,
1297};
1298
1299static struct miscdevice vga_arb_device = {
1300        MISC_DYNAMIC_MINOR, "vga_arbiter", &vga_arb_device_fops
1301};
1302
1303static int __init vga_arb_device_init(void)
1304{
1305        int rc;
1306        struct pci_dev *pdev;
1307        struct vga_device *vgadev;
1308
1309        rc = misc_register(&vga_arb_device);
1310        if (rc < 0)
1311                pr_err("vgaarb: error %d registering device\n", rc);
1312
1313        bus_register_notifier(&pci_bus_type, &pci_notifier);
1314
1315        /* We add all pci devices satisfying vga class in the arbiter by
1316         * default */
1317        pdev = NULL;
1318        while ((pdev =
1319                pci_get_subsys(PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
1320                               PCI_ANY_ID, pdev)) != NULL)
1321                vga_arbiter_add_pci_device(pdev);
1322
1323        pr_info("vgaarb: loaded\n");
1324
1325        list_for_each_entry(vgadev, &vga_list, list) {
1326                if (vgadev->bridge_has_one_vga)
1327                        pr_info("vgaarb: bridge control possible %s\n", pci_name(vgadev->pdev));
1328                else
1329                        pr_info("vgaarb: no bridge control possible %s\n", pci_name(vgadev->pdev));
1330        }
1331        return rc;
1332}
1333subsys_initcall(vga_arb_device_init);
1334