1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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/signal.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
59
60
61struct vga_device {
62 struct list_head list;
63 struct pci_dev *pdev;
64 unsigned int decodes;
65 unsigned int owns;
66 unsigned int locks;
67 unsigned int io_lock_cnt;
68 unsigned int mem_lock_cnt;
69 unsigned int io_norm_cnt;
70 unsigned int mem_norm_cnt;
71 bool bridge_has_one_vga;
72
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
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
103
104 if (strncmp(buf, "none", 4) == 0) {
105 *io_state = VGA_RSRC_NONE;
106 return 1;
107 }
108
109
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
123static struct pci_dev *vga_default;
124
125static void vga_arb_device_card_gone(struct pci_dev *pdev);
126
127
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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
179
180
181static void vga_check_first_use(void)
182{
183
184
185
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
202
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
215 wants = rsrc & ~vgadev->owns;
216
217
218 if (wants == 0)
219 goto lock_them;
220
221
222
223
224 legacy_wants = wants & VGA_RSRC_LEGACY_MASK;
225 if (legacy_wants == 0)
226 goto enable_them;
227
228
229 list_for_each_entry(conflict, &vga_list, list) {
230 unsigned int lwants = legacy_wants;
231 unsigned int change_bridge = 0;
232
233
234 if (vgadev == conflict)
235 continue;
236
237
238
239
240 if (!vga_conflicts(vgadev->pdev, conflict->pdev))
241 continue;
242
243
244
245
246
247
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
255
256
257 if (conflict->locks & lwants)
258 return conflict;
259
260
261
262
263
264 match = lwants & conflict->owns;
265 if (!match)
266 continue;
267
268
269
270
271
272 flags = 0;
273 pci_bits = 0;
274
275
276
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
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
305
306
307
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
350
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
368
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
376
377
378 if (old_locks != vgadev->locks)
379 wake_up_all(&vga_wait_queue);
380}
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
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_entry_t wait;
421 int rc = 0;
422
423 vga_check_first_use();
424
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
445
446
447
448
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
470
471
472
473
474
475
476
477
478
479
480
481
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
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
512
513
514
515
516
517
518
519
520void vga_put(struct pci_dev *pdev, unsigned int rsrc)
521{
522 struct vga_device *vgadev;
523 unsigned long flags;
524
525
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
542
543
544
545
546
547
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
561 new_bus = vgadev->pdev->bus;
562 while (new_bus) {
563 new_bridge = new_bus->self;
564
565
566 list_for_each_entry(same_bridge_vgadev, &vga_list, list) {
567 bus = same_bridge_vgadev->pdev->bus;
568 bridge = bus->self;
569
570
571 if (new_bridge == bridge) {
572
573
574
575
576
577 same_bridge_vgadev->bridge_has_one_vga = false;
578 }
579
580
581
582
583
584
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
601
602
603
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
614 if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
615 return false;
616
617
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
623
624
625 return false;
626 }
627
628
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
637 vgadev->decodes = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |
638 VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
639
640
641 vga_decode_count++;
642
643
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
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
668
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
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
714 list_del(&vgadev->list);
715 vga_count--;
716
717
718
719 vga_arb_device_card_gone(pdev);
720
721
722 wake_up_all(&vga_wait_queue);
723bail:
724 spin_unlock_irqrestore(&vga_lock, flags);
725 kfree(vgadev);
726 return ret;
727}
728
729
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
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
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
780 if (userspace && vgadev->set_vga_decode)
781 goto bail;
782
783
784 vga_update_device_decodes(vgadev, decodes);
785
786
787
788
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
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
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
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910#define MAX_USER_CARDS CONFIG_VGA_ARB_MAX_GPUS
911#define PCI_INVALID_CARD ((struct pci_dev *)-1UL)
912
913
914
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
935
936
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
970
971
972 spin_lock_irqsave(&vga_lock, flags);
973
974
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
983 vgadev = vgadev_find(pdev);
984 if (vgadev == NULL) {
985
986
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
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
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
1019
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';
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
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
1094
1095
1096
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
1146
1147
1148
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
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
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
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
1263 return -EPROTO;
1264
1265done:
1266 return ret_val;
1267}
1268
1269static __poll_t 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 EPOLLIN;
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
1295 priv->target = vga_default_device();
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
1339
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
1376
1377
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 void __init vga_arb_select_default_device(void)
1406{
1407 struct pci_dev *pdev;
1408 struct vga_device *vgadev;
1409
1410#if defined(CONFIG_X86) || defined(CONFIG_IA64)
1411 list_for_each_entry(vgadev, &vga_list, list) {
1412 struct device *dev = &vgadev->pdev->dev;
1413
1414
1415
1416
1417
1418
1419
1420
1421 resource_size_t start, end, limit;
1422 unsigned long flags;
1423 int i;
1424
1425 limit = screen_info.lfb_base + screen_info.lfb_size;
1426
1427
1428 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
1429 flags = pci_resource_flags(vgadev->pdev, i);
1430
1431 if ((flags & IORESOURCE_MEM) == 0)
1432 continue;
1433
1434 start = pci_resource_start(vgadev->pdev, i);
1435 end = pci_resource_end(vgadev->pdev, i);
1436
1437 if (!start || !end)
1438 continue;
1439
1440 if (screen_info.lfb_base < start || limit >= end)
1441 continue;
1442
1443 if (!vga_default_device())
1444 vgaarb_info(dev, "setting as boot device\n");
1445 else if (vgadev->pdev != vga_default_device())
1446 vgaarb_info(dev, "overriding boot device\n");
1447 vga_set_default_device(vgadev->pdev);
1448 }
1449 }
1450#endif
1451
1452 if (!vga_default_device()) {
1453 list_for_each_entry(vgadev, &vga_list, list) {
1454 struct device *dev = &vgadev->pdev->dev;
1455 u16 cmd;
1456
1457 pdev = vgadev->pdev;
1458 pci_read_config_word(pdev, PCI_COMMAND, &cmd);
1459 if (cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
1460 vgaarb_info(dev, "setting as boot device (VGA legacy resources not available)\n");
1461 vga_set_default_device(pdev);
1462 break;
1463 }
1464 }
1465 }
1466
1467 if (!vga_default_device()) {
1468 vgadev = list_first_entry_or_null(&vga_list,
1469 struct vga_device, list);
1470 if (vgadev) {
1471 struct device *dev = &vgadev->pdev->dev;
1472 vgaarb_info(dev, "setting as boot device (VGA legacy resources not available)\n");
1473 vga_set_default_device(vgadev->pdev);
1474 }
1475 }
1476}
1477
1478static int __init vga_arb_device_init(void)
1479{
1480 int rc;
1481 struct pci_dev *pdev;
1482 struct vga_device *vgadev;
1483
1484 rc = misc_register(&vga_arb_device);
1485 if (rc < 0)
1486 pr_err("error %d registering device\n", rc);
1487
1488 bus_register_notifier(&pci_bus_type, &pci_notifier);
1489
1490
1491
1492 pdev = NULL;
1493 while ((pdev =
1494 pci_get_subsys(PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
1495 PCI_ANY_ID, pdev)) != NULL)
1496 vga_arbiter_add_pci_device(pdev);
1497
1498 list_for_each_entry(vgadev, &vga_list, list) {
1499 struct device *dev = &vgadev->pdev->dev;
1500
1501 if (vgadev->bridge_has_one_vga)
1502 vgaarb_info(dev, "bridge control possible\n");
1503 else
1504 vgaarb_info(dev, "no bridge control possible\n");
1505 }
1506
1507 vga_arb_select_default_device();
1508
1509 pr_info("loaded\n");
1510 return rc;
1511}
1512subsys_initcall(vga_arb_device_init);
1513