0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #define pr_fmt(fmt) "vgaarb: " fmt
0012
0013 #define vgaarb_dbg(dev, fmt, arg...) dev_dbg(dev, "vgaarb: " fmt, ##arg)
0014 #define vgaarb_info(dev, fmt, arg...) dev_info(dev, "vgaarb: " fmt, ##arg)
0015 #define vgaarb_err(dev, fmt, arg...) dev_err(dev, "vgaarb: " fmt, ##arg)
0016
0017 #include <linux/module.h>
0018 #include <linux/kernel.h>
0019 #include <linux/pci.h>
0020 #include <linux/errno.h>
0021 #include <linux/init.h>
0022 #include <linux/list.h>
0023 #include <linux/sched/signal.h>
0024 #include <linux/wait.h>
0025 #include <linux/spinlock.h>
0026 #include <linux/poll.h>
0027 #include <linux/miscdevice.h>
0028 #include <linux/slab.h>
0029 #include <linux/screen_info.h>
0030 #include <linux/vt.h>
0031 #include <linux/console.h>
0032 #include <linux/acpi.h>
0033
0034 #include <linux/uaccess.h>
0035
0036 #include <linux/vgaarb.h>
0037
0038 static void vga_arbiter_notify_clients(void);
0039
0040
0041
0042
0043 struct vga_device {
0044 struct list_head list;
0045 struct pci_dev *pdev;
0046 unsigned int decodes;
0047 unsigned int owns;
0048 unsigned int locks;
0049 unsigned int io_lock_cnt;
0050 unsigned int mem_lock_cnt;
0051 unsigned int io_norm_cnt;
0052 unsigned int mem_norm_cnt;
0053 bool bridge_has_one_vga;
0054 bool is_firmware_default;
0055 unsigned int (*set_decode)(struct pci_dev *pdev, bool decode);
0056 };
0057
0058 static LIST_HEAD(vga_list);
0059 static int vga_count, vga_decode_count;
0060 static bool vga_arbiter_used;
0061 static DEFINE_SPINLOCK(vga_lock);
0062 static DECLARE_WAIT_QUEUE_HEAD(vga_wait_queue);
0063
0064
0065 static const char *vga_iostate_to_str(unsigned int iostate)
0066 {
0067
0068 iostate &= VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
0069 switch (iostate) {
0070 case VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM:
0071 return "io+mem";
0072 case VGA_RSRC_LEGACY_IO:
0073 return "io";
0074 case VGA_RSRC_LEGACY_MEM:
0075 return "mem";
0076 }
0077 return "none";
0078 }
0079
0080 static int vga_str_to_iostate(char *buf, int str_size, int *io_state)
0081 {
0082
0083
0084 if (strncmp(buf, "none", 4) == 0) {
0085 *io_state = VGA_RSRC_NONE;
0086 return 1;
0087 }
0088
0089
0090 if (strncmp(buf, "io+mem", 6) == 0)
0091 goto both;
0092 else if (strncmp(buf, "io", 2) == 0)
0093 goto both;
0094 else if (strncmp(buf, "mem", 3) == 0)
0095 goto both;
0096 return 0;
0097 both:
0098 *io_state = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
0099 return 1;
0100 }
0101
0102
0103 static struct pci_dev *vga_default;
0104
0105
0106 static struct vga_device *vgadev_find(struct pci_dev *pdev)
0107 {
0108 struct vga_device *vgadev;
0109
0110 list_for_each_entry(vgadev, &vga_list, list)
0111 if (pdev == vgadev->pdev)
0112 return vgadev;
0113 return NULL;
0114 }
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134 struct pci_dev *vga_default_device(void)
0135 {
0136 return vga_default;
0137 }
0138 EXPORT_SYMBOL_GPL(vga_default_device);
0139
0140 void vga_set_default_device(struct pci_dev *pdev)
0141 {
0142 if (vga_default == pdev)
0143 return;
0144
0145 pci_dev_put(vga_default);
0146 vga_default = pci_dev_get(pdev);
0147 }
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159 #if !defined(CONFIG_VGA_CONSOLE)
0160 int vga_remove_vgacon(struct pci_dev *pdev)
0161 {
0162 return 0;
0163 }
0164 #elif !defined(CONFIG_DUMMY_CONSOLE)
0165 int vga_remove_vgacon(struct pci_dev *pdev)
0166 {
0167 return -ENODEV;
0168 }
0169 #else
0170 int vga_remove_vgacon(struct pci_dev *pdev)
0171 {
0172 int ret = 0;
0173
0174 if (pdev != vga_default)
0175 return 0;
0176 vgaarb_info(&pdev->dev, "deactivate vga console\n");
0177
0178 console_lock();
0179 if (con_is_bound(&vga_con))
0180 ret = do_take_over_console(&dummy_con, 0,
0181 MAX_NR_CONSOLES - 1, 1);
0182 if (ret == 0) {
0183 ret = do_unregister_con_driver(&vga_con);
0184
0185
0186 if (ret == -ENODEV)
0187 ret = 0;
0188 }
0189 console_unlock();
0190
0191 return ret;
0192 }
0193 #endif
0194 EXPORT_SYMBOL(vga_remove_vgacon);
0195
0196
0197
0198
0199 static void vga_check_first_use(void)
0200 {
0201
0202
0203
0204 if (!vga_arbiter_used) {
0205 vga_arbiter_used = true;
0206 vga_arbiter_notify_clients();
0207 }
0208 }
0209
0210 static struct vga_device *__vga_tryget(struct vga_device *vgadev,
0211 unsigned int rsrc)
0212 {
0213 struct device *dev = &vgadev->pdev->dev;
0214 unsigned int wants, legacy_wants, match;
0215 struct vga_device *conflict;
0216 unsigned int pci_bits;
0217 u32 flags = 0;
0218
0219
0220
0221
0222 if ((rsrc & VGA_RSRC_NORMAL_IO) &&
0223 (vgadev->decodes & VGA_RSRC_LEGACY_IO))
0224 rsrc |= VGA_RSRC_LEGACY_IO;
0225 if ((rsrc & VGA_RSRC_NORMAL_MEM) &&
0226 (vgadev->decodes & VGA_RSRC_LEGACY_MEM))
0227 rsrc |= VGA_RSRC_LEGACY_MEM;
0228
0229 vgaarb_dbg(dev, "%s: %d\n", __func__, rsrc);
0230 vgaarb_dbg(dev, "%s: owns: %d\n", __func__, vgadev->owns);
0231
0232
0233 wants = rsrc & ~vgadev->owns;
0234
0235
0236 if (wants == 0)
0237 goto lock_them;
0238
0239
0240
0241
0242 legacy_wants = wants & VGA_RSRC_LEGACY_MASK;
0243 if (legacy_wants == 0)
0244 goto enable_them;
0245
0246
0247 list_for_each_entry(conflict, &vga_list, list) {
0248 unsigned int lwants = legacy_wants;
0249 unsigned int change_bridge = 0;
0250
0251
0252 if (vgadev == conflict)
0253 continue;
0254
0255
0256
0257
0258
0259
0260
0261 if (vgadev->pdev->bus != conflict->pdev->bus) {
0262 change_bridge = 1;
0263 lwants = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
0264 }
0265
0266
0267
0268
0269 if (conflict->locks & lwants)
0270 return conflict;
0271
0272
0273
0274
0275
0276 match = lwants & conflict->owns;
0277 if (!match)
0278 continue;
0279
0280
0281
0282
0283
0284 flags = 0;
0285 pci_bits = 0;
0286
0287
0288
0289
0290 if (!conflict->bridge_has_one_vga) {
0291 if ((match & conflict->decodes) & VGA_RSRC_LEGACY_MEM)
0292 pci_bits |= PCI_COMMAND_MEMORY;
0293 if ((match & conflict->decodes) & VGA_RSRC_LEGACY_IO)
0294 pci_bits |= PCI_COMMAND_IO;
0295
0296 if (pci_bits)
0297 flags |= PCI_VGA_STATE_CHANGE_DECODES;
0298 }
0299
0300 if (change_bridge)
0301 flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
0302
0303 pci_set_vga_state(conflict->pdev, false, pci_bits, flags);
0304 conflict->owns &= ~match;
0305
0306
0307 if (pci_bits & PCI_COMMAND_MEMORY)
0308 conflict->owns &= ~VGA_RSRC_NORMAL_MEM;
0309 if (pci_bits & PCI_COMMAND_IO)
0310 conflict->owns &= ~VGA_RSRC_NORMAL_IO;
0311 }
0312
0313 enable_them:
0314
0315
0316
0317
0318
0319 flags = 0;
0320 pci_bits = 0;
0321
0322 if (!vgadev->bridge_has_one_vga) {
0323 flags |= PCI_VGA_STATE_CHANGE_DECODES;
0324 if (wants & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM))
0325 pci_bits |= PCI_COMMAND_MEMORY;
0326 if (wants & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO))
0327 pci_bits |= PCI_COMMAND_IO;
0328 }
0329 if (wants & VGA_RSRC_LEGACY_MASK)
0330 flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
0331
0332 pci_set_vga_state(vgadev->pdev, true, pci_bits, flags);
0333
0334 vgadev->owns |= wants;
0335 lock_them:
0336 vgadev->locks |= (rsrc & VGA_RSRC_LEGACY_MASK);
0337 if (rsrc & VGA_RSRC_LEGACY_IO)
0338 vgadev->io_lock_cnt++;
0339 if (rsrc & VGA_RSRC_LEGACY_MEM)
0340 vgadev->mem_lock_cnt++;
0341 if (rsrc & VGA_RSRC_NORMAL_IO)
0342 vgadev->io_norm_cnt++;
0343 if (rsrc & VGA_RSRC_NORMAL_MEM)
0344 vgadev->mem_norm_cnt++;
0345
0346 return NULL;
0347 }
0348
0349 static void __vga_put(struct vga_device *vgadev, unsigned int rsrc)
0350 {
0351 struct device *dev = &vgadev->pdev->dev;
0352 unsigned int old_locks = vgadev->locks;
0353
0354 vgaarb_dbg(dev, "%s\n", __func__);
0355
0356
0357
0358
0359 if ((rsrc & VGA_RSRC_NORMAL_IO) && vgadev->io_norm_cnt > 0) {
0360 vgadev->io_norm_cnt--;
0361 if (vgadev->decodes & VGA_RSRC_LEGACY_IO)
0362 rsrc |= VGA_RSRC_LEGACY_IO;
0363 }
0364 if ((rsrc & VGA_RSRC_NORMAL_MEM) && vgadev->mem_norm_cnt > 0) {
0365 vgadev->mem_norm_cnt--;
0366 if (vgadev->decodes & VGA_RSRC_LEGACY_MEM)
0367 rsrc |= VGA_RSRC_LEGACY_MEM;
0368 }
0369 if ((rsrc & VGA_RSRC_LEGACY_IO) && vgadev->io_lock_cnt > 0)
0370 vgadev->io_lock_cnt--;
0371 if ((rsrc & VGA_RSRC_LEGACY_MEM) && vgadev->mem_lock_cnt > 0)
0372 vgadev->mem_lock_cnt--;
0373
0374
0375
0376
0377 if (vgadev->io_lock_cnt == 0)
0378 vgadev->locks &= ~VGA_RSRC_LEGACY_IO;
0379 if (vgadev->mem_lock_cnt == 0)
0380 vgadev->locks &= ~VGA_RSRC_LEGACY_MEM;
0381
0382
0383
0384
0385 if (old_locks != vgadev->locks)
0386 wake_up_all(&vga_wait_queue);
0387 }
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419
0420
0421
0422
0423 int vga_get(struct pci_dev *pdev, unsigned int rsrc, int interruptible)
0424 {
0425 struct vga_device *vgadev, *conflict;
0426 unsigned long flags;
0427 wait_queue_entry_t wait;
0428 int rc = 0;
0429
0430 vga_check_first_use();
0431
0432 if (pdev == NULL)
0433 pdev = vga_default_device();
0434 if (pdev == NULL)
0435 return 0;
0436
0437 for (;;) {
0438 spin_lock_irqsave(&vga_lock, flags);
0439 vgadev = vgadev_find(pdev);
0440 if (vgadev == NULL) {
0441 spin_unlock_irqrestore(&vga_lock, flags);
0442 rc = -ENODEV;
0443 break;
0444 }
0445 conflict = __vga_tryget(vgadev, rsrc);
0446 spin_unlock_irqrestore(&vga_lock, flags);
0447 if (conflict == NULL)
0448 break;
0449
0450
0451
0452
0453
0454
0455
0456
0457 init_waitqueue_entry(&wait, current);
0458 add_wait_queue(&vga_wait_queue, &wait);
0459 set_current_state(interruptible ?
0460 TASK_INTERRUPTIBLE :
0461 TASK_UNINTERRUPTIBLE);
0462 if (interruptible && signal_pending(current)) {
0463 __set_current_state(TASK_RUNNING);
0464 remove_wait_queue(&vga_wait_queue, &wait);
0465 rc = -ERESTARTSYS;
0466 break;
0467 }
0468 schedule();
0469 remove_wait_queue(&vga_wait_queue, &wait);
0470 }
0471 return rc;
0472 }
0473 EXPORT_SYMBOL(vga_get);
0474
0475
0476
0477
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490 static int vga_tryget(struct pci_dev *pdev, unsigned int rsrc)
0491 {
0492 struct vga_device *vgadev;
0493 unsigned long flags;
0494 int rc = 0;
0495
0496 vga_check_first_use();
0497
0498
0499 if (pdev == NULL)
0500 pdev = vga_default_device();
0501 if (pdev == NULL)
0502 return 0;
0503 spin_lock_irqsave(&vga_lock, flags);
0504 vgadev = vgadev_find(pdev);
0505 if (vgadev == NULL) {
0506 rc = -ENODEV;
0507 goto bail;
0508 }
0509 if (__vga_tryget(vgadev, rsrc))
0510 rc = -EBUSY;
0511 bail:
0512 spin_unlock_irqrestore(&vga_lock, flags);
0513 return rc;
0514 }
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526 void vga_put(struct pci_dev *pdev, unsigned int rsrc)
0527 {
0528 struct vga_device *vgadev;
0529 unsigned long flags;
0530
0531
0532 if (pdev == NULL)
0533 pdev = vga_default_device();
0534 if (pdev == NULL)
0535 return;
0536 spin_lock_irqsave(&vga_lock, flags);
0537 vgadev = vgadev_find(pdev);
0538 if (vgadev == NULL)
0539 goto bail;
0540 __vga_put(vgadev, rsrc);
0541 bail:
0542 spin_unlock_irqrestore(&vga_lock, flags);
0543 }
0544 EXPORT_SYMBOL(vga_put);
0545
0546 static bool vga_is_firmware_default(struct pci_dev *pdev)
0547 {
0548 #if defined(CONFIG_X86) || defined(CONFIG_IA64)
0549 u64 base = screen_info.lfb_base;
0550 u64 size = screen_info.lfb_size;
0551 u64 limit;
0552 resource_size_t start, end;
0553 unsigned long flags;
0554 int i;
0555
0556
0557
0558 if (screen_info.capabilities & VIDEO_CAPABILITY_64BIT_BASE)
0559 base |= (u64)screen_info.ext_lfb_base << 32;
0560
0561 limit = base + size;
0562
0563
0564 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
0565 flags = pci_resource_flags(pdev, i);
0566
0567 if ((flags & IORESOURCE_MEM) == 0)
0568 continue;
0569
0570 start = pci_resource_start(pdev, i);
0571 end = pci_resource_end(pdev, i);
0572
0573 if (!start || !end)
0574 continue;
0575
0576 if (base < start || limit >= end)
0577 continue;
0578
0579 return true;
0580 }
0581 #endif
0582 return false;
0583 }
0584
0585 static bool vga_arb_integrated_gpu(struct device *dev)
0586 {
0587 #if defined(CONFIG_ACPI)
0588 struct acpi_device *adev = ACPI_COMPANION(dev);
0589
0590 return adev && !strcmp(acpi_device_hid(adev), ACPI_VIDEO_HID);
0591 #else
0592 return false;
0593 #endif
0594 }
0595
0596
0597
0598
0599
0600 static bool vga_is_boot_device(struct vga_device *vgadev)
0601 {
0602 struct vga_device *boot_vga = vgadev_find(vga_default_device());
0603 struct pci_dev *pdev = vgadev->pdev;
0604 u16 cmd, boot_cmd;
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619 if (boot_vga && boot_vga->is_firmware_default)
0620 return false;
0621
0622 if (vga_is_firmware_default(pdev)) {
0623 vgadev->is_firmware_default = true;
0624 return true;
0625 }
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636 if (boot_vga &&
0637 (boot_vga->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)
0638 return false;
0639
0640 if ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)
0641 return true;
0642
0643
0644
0645
0646
0647
0648
0649 pci_read_config_word(pdev, PCI_COMMAND, &cmd);
0650 if (cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) {
0651
0652
0653
0654
0655
0656
0657
0658 if (vga_arb_integrated_gpu(&pdev->dev))
0659 return true;
0660
0661
0662
0663
0664
0665 if (boot_vga) {
0666 pci_read_config_word(boot_vga->pdev, PCI_COMMAND,
0667 &boot_cmd);
0668 if (boot_cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY))
0669 return false;
0670 }
0671 return true;
0672 }
0673
0674
0675
0676
0677
0678 if (!boot_vga)
0679 return true;
0680
0681 return false;
0682 }
0683
0684
0685
0686
0687
0688
0689
0690
0691
0692
0693 static void vga_arbiter_check_bridge_sharing(struct vga_device *vgadev)
0694 {
0695 struct vga_device *same_bridge_vgadev;
0696 struct pci_bus *new_bus, *bus;
0697 struct pci_dev *new_bridge, *bridge;
0698
0699 vgadev->bridge_has_one_vga = true;
0700
0701 if (list_empty(&vga_list)) {
0702 vgaarb_info(&vgadev->pdev->dev, "bridge control possible\n");
0703 return;
0704 }
0705
0706
0707 new_bus = vgadev->pdev->bus;
0708 while (new_bus) {
0709 new_bridge = new_bus->self;
0710
0711
0712 list_for_each_entry(same_bridge_vgadev, &vga_list, list) {
0713 bus = same_bridge_vgadev->pdev->bus;
0714 bridge = bus->self;
0715
0716
0717 if (new_bridge == bridge) {
0718
0719
0720
0721
0722
0723 same_bridge_vgadev->bridge_has_one_vga = false;
0724 }
0725
0726
0727
0728
0729
0730
0731
0732 while (bus) {
0733 bridge = bus->self;
0734
0735 if (bridge && bridge == vgadev->pdev->bus->self)
0736 vgadev->bridge_has_one_vga = false;
0737
0738 bus = bus->parent;
0739 }
0740 }
0741 new_bus = new_bus->parent;
0742 }
0743
0744 if (vgadev->bridge_has_one_vga)
0745 vgaarb_info(&vgadev->pdev->dev, "bridge control possible\n");
0746 else
0747 vgaarb_info(&vgadev->pdev->dev, "no bridge control possible\n");
0748 }
0749
0750
0751
0752
0753
0754
0755
0756 static bool vga_arbiter_add_pci_device(struct pci_dev *pdev)
0757 {
0758 struct vga_device *vgadev;
0759 unsigned long flags;
0760 struct pci_bus *bus;
0761 struct pci_dev *bridge;
0762 u16 cmd;
0763
0764
0765 if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
0766 return false;
0767
0768
0769 vgadev = kzalloc(sizeof(struct vga_device), GFP_KERNEL);
0770 if (vgadev == NULL) {
0771 vgaarb_err(&pdev->dev, "failed to allocate VGA arbiter data\n");
0772
0773
0774
0775
0776 return false;
0777 }
0778
0779
0780 spin_lock_irqsave(&vga_lock, flags);
0781 if (vgadev_find(pdev) != NULL) {
0782 BUG_ON(1);
0783 goto fail;
0784 }
0785 vgadev->pdev = pdev;
0786
0787
0788 vgadev->decodes = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |
0789 VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
0790
0791
0792 vga_decode_count++;
0793
0794
0795
0796 pci_read_config_word(pdev, PCI_COMMAND, &cmd);
0797 if (cmd & PCI_COMMAND_IO)
0798 vgadev->owns |= VGA_RSRC_LEGACY_IO;
0799 if (cmd & PCI_COMMAND_MEMORY)
0800 vgadev->owns |= VGA_RSRC_LEGACY_MEM;
0801
0802
0803 bus = pdev->bus;
0804 while (bus) {
0805 bridge = bus->self;
0806 if (bridge) {
0807 u16 l;
0808
0809 pci_read_config_word(bridge, PCI_BRIDGE_CONTROL, &l);
0810 if (!(l & PCI_BRIDGE_CTL_VGA)) {
0811 vgadev->owns = 0;
0812 break;
0813 }
0814 }
0815 bus = bus->parent;
0816 }
0817
0818 if (vga_is_boot_device(vgadev)) {
0819 vgaarb_info(&pdev->dev, "setting as boot VGA device%s\n",
0820 vga_default_device() ?
0821 " (overriding previous)" : "");
0822 vga_set_default_device(pdev);
0823 }
0824
0825 vga_arbiter_check_bridge_sharing(vgadev);
0826
0827
0828 list_add_tail(&vgadev->list, &vga_list);
0829 vga_count++;
0830 vgaarb_info(&pdev->dev, "VGA device added: decodes=%s,owns=%s,locks=%s\n",
0831 vga_iostate_to_str(vgadev->decodes),
0832 vga_iostate_to_str(vgadev->owns),
0833 vga_iostate_to_str(vgadev->locks));
0834
0835 spin_unlock_irqrestore(&vga_lock, flags);
0836 return true;
0837 fail:
0838 spin_unlock_irqrestore(&vga_lock, flags);
0839 kfree(vgadev);
0840 return false;
0841 }
0842
0843 static bool vga_arbiter_del_pci_device(struct pci_dev *pdev)
0844 {
0845 struct vga_device *vgadev;
0846 unsigned long flags;
0847 bool ret = true;
0848
0849 spin_lock_irqsave(&vga_lock, flags);
0850 vgadev = vgadev_find(pdev);
0851 if (vgadev == NULL) {
0852 ret = false;
0853 goto bail;
0854 }
0855
0856 if (vga_default == pdev)
0857 vga_set_default_device(NULL);
0858
0859 if (vgadev->decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM))
0860 vga_decode_count--;
0861
0862
0863 list_del(&vgadev->list);
0864 vga_count--;
0865
0866
0867 wake_up_all(&vga_wait_queue);
0868 bail:
0869 spin_unlock_irqrestore(&vga_lock, flags);
0870 kfree(vgadev);
0871 return ret;
0872 }
0873
0874
0875 static inline void vga_update_device_decodes(struct vga_device *vgadev,
0876 int new_decodes)
0877 {
0878 struct device *dev = &vgadev->pdev->dev;
0879 int old_decodes, decodes_removed, decodes_unlocked;
0880
0881 old_decodes = vgadev->decodes;
0882 decodes_removed = ~new_decodes & old_decodes;
0883 decodes_unlocked = vgadev->locks & decodes_removed;
0884 vgadev->decodes = new_decodes;
0885
0886 vgaarb_info(dev, "changed VGA decodes: olddecodes=%s,decodes=%s:owns=%s\n",
0887 vga_iostate_to_str(old_decodes),
0888 vga_iostate_to_str(vgadev->decodes),
0889 vga_iostate_to_str(vgadev->owns));
0890
0891
0892 if (decodes_unlocked) {
0893 if (decodes_unlocked & VGA_RSRC_LEGACY_IO)
0894 vgadev->io_lock_cnt = 0;
0895 if (decodes_unlocked & VGA_RSRC_LEGACY_MEM)
0896 vgadev->mem_lock_cnt = 0;
0897 __vga_put(vgadev, decodes_unlocked);
0898 }
0899
0900
0901 if (old_decodes & VGA_RSRC_LEGACY_MASK &&
0902 !(new_decodes & VGA_RSRC_LEGACY_MASK))
0903 vga_decode_count--;
0904 if (!(old_decodes & VGA_RSRC_LEGACY_MASK) &&
0905 new_decodes & VGA_RSRC_LEGACY_MASK)
0906 vga_decode_count++;
0907 vgaarb_dbg(dev, "decoding count now is: %d\n", vga_decode_count);
0908 }
0909
0910 static void __vga_set_legacy_decoding(struct pci_dev *pdev,
0911 unsigned int decodes,
0912 bool userspace)
0913 {
0914 struct vga_device *vgadev;
0915 unsigned long flags;
0916
0917 decodes &= VGA_RSRC_LEGACY_MASK;
0918
0919 spin_lock_irqsave(&vga_lock, flags);
0920 vgadev = vgadev_find(pdev);
0921 if (vgadev == NULL)
0922 goto bail;
0923
0924
0925 if (userspace && vgadev->set_decode)
0926 goto bail;
0927
0928
0929 vga_update_device_decodes(vgadev, decodes);
0930
0931
0932
0933
0934
0935 bail:
0936 spin_unlock_irqrestore(&vga_lock, flags);
0937 }
0938
0939
0940
0941
0942
0943
0944
0945
0946
0947
0948
0949
0950 void vga_set_legacy_decoding(struct pci_dev *pdev, unsigned int decodes)
0951 {
0952 __vga_set_legacy_decoding(pdev, decodes, false);
0953 }
0954 EXPORT_SYMBOL(vga_set_legacy_decoding);
0955
0956
0957
0958
0959
0960
0961
0962
0963
0964
0965
0966
0967
0968
0969
0970
0971
0972
0973
0974
0975
0976
0977
0978
0979
0980 int vga_client_register(struct pci_dev *pdev,
0981 unsigned int (*set_decode)(struct pci_dev *pdev, bool decode))
0982 {
0983 int ret = -ENODEV;
0984 struct vga_device *vgadev;
0985 unsigned long flags;
0986
0987 spin_lock_irqsave(&vga_lock, flags);
0988 vgadev = vgadev_find(pdev);
0989 if (!vgadev)
0990 goto bail;
0991
0992 vgadev->set_decode = set_decode;
0993 ret = 0;
0994
0995 bail:
0996 spin_unlock_irqrestore(&vga_lock, flags);
0997 return ret;
0998
0999 }
1000 EXPORT_SYMBOL(vga_client_register);
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055 #define MAX_USER_CARDS CONFIG_VGA_ARB_MAX_GPUS
1056 #define PCI_INVALID_CARD ((struct pci_dev *)-1UL)
1057
1058
1059
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
1080
1081
1082
1083 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 n = sscanf(buf, "PCI:%x:%x:%x.%x", domain, bus, &slot, &func);
1091 if (n != 4)
1092 return 0;
1093
1094 *devfn = PCI_DEVFN(slot, func);
1095
1096 return 1;
1097 }
1098
1099 static ssize_t vga_arb_read(struct file *file, char __user *buf,
1100 size_t count, loff_t *ppos)
1101 {
1102 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 lbuf = kmalloc(1024, GFP_KERNEL);
1111 if (lbuf == NULL)
1112 return -ENOMEM;
1113
1114
1115 spin_lock_irqsave(&vga_lock, flags);
1116
1117
1118 pdev = priv->target;
1119 if (pdev == NULL || pdev == PCI_INVALID_CARD) {
1120 spin_unlock_irqrestore(&vga_lock, flags);
1121 len = sprintf(lbuf, "invalid");
1122 goto done;
1123 }
1124
1125
1126 vgadev = vgadev_find(pdev);
1127 if (vgadev == NULL) {
1128
1129
1130
1131 spin_unlock_irqrestore(&vga_lock, flags);
1132 len = sprintf(lbuf, "invalid");
1133 goto done;
1134 }
1135
1136
1137 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
1149 if (len > count)
1150 len = count;
1151 rc = copy_to_user(buf, lbuf, len);
1152 kfree(lbuf);
1153 if (rc)
1154 return -EFAULT;
1155 return len;
1156 }
1157
1158
1159
1160
1161
1162 static ssize_t vga_arb_write(struct file *file, const char __user *buf,
1163 size_t count, loff_t *ppos)
1164 {
1165 struct vga_arb_private *priv = file->private_data;
1166 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 size_t remaining = count;
1173
1174 int ret_val;
1175 int i;
1176
1177 if (count >= sizeof(kbuf))
1178 return -EINVAL;
1179 if (copy_from_user(kbuf, buf, count))
1180 return -EFAULT;
1181 curr_pos = kbuf;
1182 kbuf[count] = '\0';
1183
1184 if (strncmp(curr_pos, "lock ", 5) == 0) {
1185 curr_pos += 5;
1186 remaining -= 5;
1187
1188 pr_debug("client 0x%p called 'lock'\n", priv);
1189
1190 if (!vga_str_to_iostate(curr_pos, remaining, &io_state)) {
1191 ret_val = -EPROTO;
1192 goto done;
1193 }
1194 if (io_state == VGA_RSRC_NONE) {
1195 ret_val = -EPROTO;
1196 goto done;
1197 }
1198
1199 pdev = priv->target;
1200 if (priv->target == NULL) {
1201 ret_val = -ENODEV;
1202 goto done;
1203 }
1204
1205 vga_get_uninterruptible(pdev, io_state);
1206
1207
1208 for (i = 0; i < MAX_USER_CARDS; i++) {
1209 if (priv->cards[i].pdev == pdev) {
1210 if (io_state & VGA_RSRC_LEGACY_IO)
1211 priv->cards[i].io_cnt++;
1212 if (io_state & VGA_RSRC_LEGACY_MEM)
1213 priv->cards[i].mem_cnt++;
1214 break;
1215 }
1216 }
1217
1218 ret_val = count;
1219 goto done;
1220 } else if (strncmp(curr_pos, "unlock ", 7) == 0) {
1221 curr_pos += 7;
1222 remaining -= 7;
1223
1224 pr_debug("client 0x%p called 'unlock'\n", priv);
1225
1226 if (strncmp(curr_pos, "all", 3) == 0)
1227 io_state = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
1228 else {
1229 if (!vga_str_to_iostate
1230 (curr_pos, remaining, &io_state)) {
1231 ret_val = -EPROTO;
1232 goto done;
1233 }
1234
1235
1236
1237
1238
1239
1240 }
1241
1242 pdev = priv->target;
1243 if (priv->target == NULL) {
1244 ret_val = -ENODEV;
1245 goto done;
1246 }
1247 for (i = 0; i < MAX_USER_CARDS; i++) {
1248 if (priv->cards[i].pdev == pdev)
1249 uc = &priv->cards[i];
1250 }
1251
1252 if (!uc) {
1253 ret_val = -EINVAL;
1254 goto done;
1255 }
1256
1257 if (io_state & VGA_RSRC_LEGACY_IO && uc->io_cnt == 0) {
1258 ret_val = -EINVAL;
1259 goto done;
1260 }
1261
1262 if (io_state & VGA_RSRC_LEGACY_MEM && uc->mem_cnt == 0) {
1263 ret_val = -EINVAL;
1264 goto done;
1265 }
1266
1267 vga_put(pdev, io_state);
1268
1269 if (io_state & VGA_RSRC_LEGACY_IO)
1270 uc->io_cnt--;
1271 if (io_state & VGA_RSRC_LEGACY_MEM)
1272 uc->mem_cnt--;
1273
1274 ret_val = count;
1275 goto done;
1276 } else if (strncmp(curr_pos, "trylock ", 8) == 0) {
1277 curr_pos += 8;
1278 remaining -= 8;
1279
1280 pr_debug("client 0x%p called 'trylock'\n", priv);
1281
1282 if (!vga_str_to_iostate(curr_pos, remaining, &io_state)) {
1283 ret_val = -EPROTO;
1284 goto done;
1285 }
1286
1287
1288
1289
1290
1291
1292
1293 pdev = priv->target;
1294 if (priv->target == NULL) {
1295 ret_val = -ENODEV;
1296 goto done;
1297 }
1298
1299 if (vga_tryget(pdev, io_state)) {
1300
1301 for (i = 0; i < MAX_USER_CARDS; i++) {
1302 if (priv->cards[i].pdev == pdev) {
1303 if (io_state & VGA_RSRC_LEGACY_IO)
1304 priv->cards[i].io_cnt++;
1305 if (io_state & VGA_RSRC_LEGACY_MEM)
1306 priv->cards[i].mem_cnt++;
1307 break;
1308 }
1309 }
1310 ret_val = count;
1311 goto done;
1312 } else {
1313 ret_val = -EBUSY;
1314 goto done;
1315 }
1316
1317 } else if (strncmp(curr_pos, "target ", 7) == 0) {
1318 unsigned int domain, bus, devfn;
1319 struct vga_device *vgadev;
1320
1321 curr_pos += 7;
1322 remaining -= 7;
1323 pr_debug("client 0x%p called 'target'\n", priv);
1324
1325 if (!strncmp(curr_pos, "default", 7))
1326 pdev = pci_dev_get(vga_default_device());
1327 else {
1328 if (!vga_pci_str_to_vars(curr_pos, remaining,
1329 &domain, &bus, &devfn)) {
1330 ret_val = -EPROTO;
1331 goto done;
1332 }
1333 pdev = pci_get_domain_bus_and_slot(domain, bus, devfn);
1334 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 vgadev = vgadev_find(pdev);
1348 pr_debug("vgadev %p\n", vgadev);
1349 if (vgadev == NULL) {
1350 if (pdev) {
1351 vgaarb_dbg(&pdev->dev, "not a VGA device\n");
1352 pci_dev_put(pdev);
1353 }
1354
1355 ret_val = -ENODEV;
1356 goto done;
1357 }
1358
1359 priv->target = pdev;
1360 for (i = 0; i < MAX_USER_CARDS; i++) {
1361 if (priv->cards[i].pdev == pdev)
1362 break;
1363 if (priv->cards[i].pdev == NULL) {
1364 priv->cards[i].pdev = pdev;
1365 priv->cards[i].io_cnt = 0;
1366 priv->cards[i].mem_cnt = 0;
1367 break;
1368 }
1369 }
1370 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 pci_dev_put(pdev);
1374
1375 ret_val = -ENOMEM;
1376 goto done;
1377 }
1378
1379 ret_val = count;
1380 pci_dev_put(pdev);
1381 goto done;
1382
1383
1384 } else if (strncmp(curr_pos, "decodes ", 8) == 0) {
1385 curr_pos += 8;
1386 remaining -= 8;
1387 pr_debug("client 0x%p called 'decodes'\n", priv);
1388
1389 if (!vga_str_to_iostate(curr_pos, remaining, &io_state)) {
1390 ret_val = -EPROTO;
1391 goto done;
1392 }
1393 pdev = priv->target;
1394 if (priv->target == NULL) {
1395 ret_val = -ENODEV;
1396 goto done;
1397 }
1398
1399 __vga_set_legacy_decoding(pdev, io_state, true);
1400 ret_val = count;
1401 goto done;
1402 }
1403
1404 return -EPROTO;
1405
1406 done:
1407 return ret_val;
1408 }
1409
1410 static __poll_t vga_arb_fpoll(struct file *file, poll_table *wait)
1411 {
1412 pr_debug("%s\n", __func__);
1413
1414 poll_wait(file, &vga_wait_queue, wait);
1415 return EPOLLIN;
1416 }
1417
1418 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 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
1426 if (priv == NULL)
1427 return -ENOMEM;
1428 spin_lock_init(&priv->lock);
1429 file->private_data = priv;
1430
1431 spin_lock_irqsave(&vga_user_lock, flags);
1432 list_add(&priv->list, &vga_user_list);
1433 spin_unlock_irqrestore(&vga_user_lock, flags);
1434
1435
1436 priv->target = vga_default_device();
1437 priv->cards[0].pdev = priv->target;
1438 priv->cards[0].io_cnt = 0;
1439 priv->cards[0].mem_cnt = 0;
1440
1441
1442 return 0;
1443 }
1444
1445 static int vga_arb_release(struct inode *inode, struct file *file)
1446 {
1447 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 spin_lock_irqsave(&vga_user_lock, flags);
1455 list_del(&priv->list);
1456 for (i = 0; i < MAX_USER_CARDS; i++) {
1457 uc = &priv->cards[i];
1458 if (uc->pdev == NULL)
1459 continue;
1460 vgaarb_dbg(&uc->pdev->dev, "uc->io_cnt == %d, uc->mem_cnt == %d\n",
1461 uc->io_cnt, uc->mem_cnt);
1462 while (uc->io_cnt--)
1463 vga_put(uc->pdev, VGA_RSRC_LEGACY_IO);
1464 while (uc->mem_cnt--)
1465 vga_put(uc->pdev, VGA_RSRC_LEGACY_MEM);
1466 }
1467 spin_unlock_irqrestore(&vga_user_lock, flags);
1468
1469 kfree(priv);
1470
1471 return 0;
1472 }
1473
1474
1475
1476
1477
1478 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 if (!vga_arbiter_used)
1486 return;
1487
1488 spin_lock_irqsave(&vga_lock, flags);
1489 list_for_each_entry(vgadev, &vga_list, list) {
1490 if (vga_count > 1)
1491 new_state = false;
1492 else
1493 new_state = true;
1494 if (vgadev->set_decode) {
1495 new_decodes = vgadev->set_decode(vgadev->pdev,
1496 new_state);
1497 vga_update_device_decodes(vgadev, new_decodes);
1498 }
1499 }
1500 spin_unlock_irqrestore(&vga_lock, flags);
1501 }
1502
1503 static int pci_notify(struct notifier_block *nb, unsigned long action,
1504 void *data)
1505 {
1506 struct device *dev = data;
1507 struct pci_dev *pdev = to_pci_dev(dev);
1508 bool notify = false;
1509
1510 vgaarb_dbg(dev, "%s\n", __func__);
1511
1512
1513
1514
1515 if (action == BUS_NOTIFY_ADD_DEVICE)
1516 notify = vga_arbiter_add_pci_device(pdev);
1517 else if (action == BUS_NOTIFY_DEL_DEVICE)
1518 notify = vga_arbiter_del_pci_device(pdev);
1519
1520 if (notify)
1521 vga_arbiter_notify_clients();
1522 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 static int __init vga_arb_device_init(void)
1543 {
1544 int rc;
1545 struct pci_dev *pdev;
1546
1547 rc = misc_register(&vga_arb_device);
1548 if (rc < 0)
1549 pr_err("error %d registering device\n", rc);
1550
1551 bus_register_notifier(&pci_bus_type, &pci_notifier);
1552
1553
1554
1555 pdev = NULL;
1556 while ((pdev =
1557 pci_get_subsys(PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
1558 PCI_ANY_ID, pdev)) != NULL)
1559 vga_arbiter_add_pci_device(pdev);
1560
1561 pr_info("loaded\n");
1562 return rc;
1563 }
1564 subsys_initcall_sync(vga_arb_device_init);