61
61
unsigned int mem_lock_cnt; /* legacy MEM lock count */
62
62
unsigned int io_norm_cnt; /* normal IO count */
63
63
unsigned int mem_norm_cnt; /* normal MEM count */
64
bool bridge_has_one_vga;
65
65
/* allow IRQ enable/disable hook */
67
67
void (*irq_set_state)(void *cookie, bool enable);
165
165
unsigned int wants, legacy_wants, match;
166
166
struct vga_device *conflict;
167
167
unsigned int pci_bits;
168
170
/* Account for "normal" resources to lock. If we decode the legacy,
169
171
* counterpart, we need to request it as well
237
239
/* looks like he doesn't have a lock, we can steal
240
vga_irq_set_state(conflict, false);
243
if (lwants & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM))
244
pci_bits |= PCI_COMMAND_MEMORY;
245
if (lwants & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO))
246
pci_bits |= PCI_COMMAND_IO;
248
pci_set_vga_state(conflict->pdev, false, pci_bits,
246
if (!conflict->bridge_has_one_vga) {
247
vga_irq_set_state(conflict, false);
248
flags |= PCI_VGA_STATE_CHANGE_DECODES;
249
if (lwants & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM))
250
pci_bits |= PCI_COMMAND_MEMORY;
251
if (lwants & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO))
252
pci_bits |= PCI_COMMAND_IO;
256
flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
258
pci_set_vga_state(conflict->pdev, false, pci_bits, flags);
250
259
conflict->owns &= ~lwants;
251
260
/* If he also owned non-legacy, that is no longer the case */
252
261
if (lwants & VGA_RSRC_LEGACY_MEM)
261
270
* also have in "decodes". We can lock resources we don't decode but
265
if (wants & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM))
266
pci_bits |= PCI_COMMAND_MEMORY;
267
if (wants & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO))
268
pci_bits |= PCI_COMMAND_IO;
269
pci_set_vga_state(vgadev->pdev, true, pci_bits, !!(wants & VGA_RSRC_LEGACY_MASK));
271
vga_irq_set_state(vgadev, true);
276
if (!vgadev->bridge_has_one_vga) {
277
flags |= PCI_VGA_STATE_CHANGE_DECODES;
278
if (wants & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM))
279
pci_bits |= PCI_COMMAND_MEMORY;
280
if (wants & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO))
281
pci_bits |= PCI_COMMAND_IO;
283
if (!!(wants & VGA_RSRC_LEGACY_MASK))
284
flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
286
pci_set_vga_state(vgadev->pdev, true, pci_bits, flags);
288
if (!vgadev->bridge_has_one_vga) {
289
vga_irq_set_state(vgadev, true);
272
291
vgadev->owns |= (wants & vgadev->decodes);
274
293
vgadev->locks |= (rsrc & VGA_RSRC_LEGACY_MASK);
422
441
EXPORT_SYMBOL(vga_put);
443
/* Rules for using a bridge to control a VGA descendant decoding:
444
if a bridge has only one VGA descendant then it can be used
445
to control the VGA routing for that device.
446
It should always use the bridge closest to the device to control it.
447
If a bridge has a direct VGA descendant, but also have a sub-bridge
448
VGA descendant then we cannot use that bridge to control the direct VGA descendant.
449
So for every device we register, we need to iterate all its parent bridges
450
so we can invalidate any devices using them properly.
452
static void vga_arbiter_check_bridge_sharing(struct vga_device *vgadev)
454
struct vga_device *same_bridge_vgadev;
455
struct pci_bus *new_bus, *bus;
456
struct pci_dev *new_bridge, *bridge;
458
vgadev->bridge_has_one_vga = true;
460
if (list_empty(&vga_list))
463
/* okay iterate the new devices bridge hierarachy */
464
new_bus = vgadev->pdev->bus;
466
new_bridge = new_bus->self;
469
/* go through list of devices already registered */
470
list_for_each_entry(same_bridge_vgadev, &vga_list, list) {
471
bus = same_bridge_vgadev->pdev->bus;
474
/* see if the share a bridge with this device */
475
if (new_bridge == bridge) {
476
/* if their direct parent bridge is the same
477
as any bridge of this device then it can't be used
479
same_bridge_vgadev->bridge_has_one_vga = false;
482
/* now iterate the previous devices bridge hierarchy */
483
/* if the new devices parent bridge is in the other devices
484
hierarchy then we can't use it to control this device */
488
if (bridge == vgadev->pdev->bus->self)
489
vgadev->bridge_has_one_vga = false;
495
new_bus = new_bus->parent;
425
500
* Currently, we assume that the "initial" setup of the system is
426
501
* not sane, that is we come up with conflicting devices and let
1238
1316
vga_arbiter_add_pci_device(pdev);
1240
1318
pr_info("vgaarb: loaded\n");
1320
list_for_each_entry(vgadev, &vga_list, list) {
1321
if (vgadev->bridge_has_one_vga)
1322
pr_info("vgaarb: bridge control possible %s\n", pci_name(vgadev->pdev));
1324
pr_info("vgaarb: no bridge control possible %s\n", pci_name(vgadev->pdev));
1243
1328
subsys_initcall(vga_arb_device_init);