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