Linux Audio

Check our new training course

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