Lines Matching +full:blocking +full:- +full:io
69 unsigned int io_lock_cnt; /* legacy IO lock count */
71 unsigned int io_norm_cnt; /* normal IO count */
93 return "io+mem"; in vga_iostate_to_str()
95 return "io"; in vga_iostate_to_str()
104 /* we could in theory hand out locks on IO and mem in vga_str_to_iostate()
112 if (strncmp(buf, "io+mem", 6) == 0) in vga_str_to_iostate()
114 else if (strncmp(buf, "io", 2) == 0) in vga_str_to_iostate()
124 /* this is only used a cookie - it should not be dereferenced */
135 if (pdev == vgadev->pdev) in vgadev_find()
141 * vga_default_device - return the default VGA device, for vgacon
174 * vga_remove_vgacon - deactivete vga console
191 return -ENODEV; in vga_remove_vgacon()
200 vgaarb_info(&pdev->dev, "deactivate vga console\n"); in vga_remove_vgacon()
205 MAX_NR_CONSOLES - 1, 1); in vga_remove_vgacon()
210 if (ret == -ENODEV) in vga_remove_vgacon()
222 if (vgadev->irq_set_state) in vga_irq_set_state()
223 vgadev->irq_set_state(vgadev->cookie, state); in vga_irq_set_state()
244 struct device *dev = &vgadev->pdev->dev; in __vga_tryget()
254 (vgadev->decodes & VGA_RSRC_LEGACY_IO)) in __vga_tryget()
257 (vgadev->decodes & VGA_RSRC_LEGACY_MEM)) in __vga_tryget()
261 vgaarb_dbg(dev, "%s: owns: %d\n", __func__, vgadev->owns); in __vga_tryget()
264 wants = rsrc & ~vgadev->owns; in __vga_tryget()
289 if (!vga_conflicts(vgadev->pdev, conflict->pdev)) in __vga_tryget()
294 * if we don't, then we must tie both IO and MEM resources in __vga_tryget()
298 if (vgadev->pdev->bus != conflict->pdev->bus) { in __vga_tryget()
306 if (conflict->locks & lwants) in __vga_tryget()
313 match = lwants & conflict->owns; in __vga_tryget()
327 if (!conflict->bridge_has_one_vga) { in __vga_tryget()
328 if ((match & conflict->decodes) & VGA_RSRC_LEGACY_MEM) in __vga_tryget()
330 if ((match & conflict->decodes) & VGA_RSRC_LEGACY_IO) in __vga_tryget()
342 pci_set_vga_state(conflict->pdev, false, pci_bits, flags); in __vga_tryget()
343 conflict->owns &= ~match; in __vga_tryget()
347 conflict->owns &= ~VGA_RSRC_NORMAL_MEM; in __vga_tryget()
349 conflict->owns &= ~VGA_RSRC_NORMAL_IO; in __vga_tryget()
361 if (!vgadev->bridge_has_one_vga) { in __vga_tryget()
371 pci_set_vga_state(vgadev->pdev, true, pci_bits, flags); in __vga_tryget()
373 if (!vgadev->bridge_has_one_vga) in __vga_tryget()
376 vgadev->owns |= wants; in __vga_tryget()
378 vgadev->locks |= (rsrc & VGA_RSRC_LEGACY_MASK); in __vga_tryget()
380 vgadev->io_lock_cnt++; in __vga_tryget()
382 vgadev->mem_lock_cnt++; in __vga_tryget()
384 vgadev->io_norm_cnt++; in __vga_tryget()
386 vgadev->mem_norm_cnt++; in __vga_tryget()
393 struct device *dev = &vgadev->pdev->dev; in __vga_put()
394 unsigned int old_locks = vgadev->locks; in __vga_put()
401 if ((rsrc & VGA_RSRC_NORMAL_IO) && vgadev->io_norm_cnt > 0) { in __vga_put()
402 vgadev->io_norm_cnt--; in __vga_put()
403 if (vgadev->decodes & VGA_RSRC_LEGACY_IO) in __vga_put()
406 if ((rsrc & VGA_RSRC_NORMAL_MEM) && vgadev->mem_norm_cnt > 0) { in __vga_put()
407 vgadev->mem_norm_cnt--; in __vga_put()
408 if (vgadev->decodes & VGA_RSRC_LEGACY_MEM) in __vga_put()
411 if ((rsrc & VGA_RSRC_LEGACY_IO) && vgadev->io_lock_cnt > 0) in __vga_put()
412 vgadev->io_lock_cnt--; in __vga_put()
413 if ((rsrc & VGA_RSRC_LEGACY_MEM) && vgadev->mem_lock_cnt > 0) in __vga_put()
414 vgadev->mem_lock_cnt--; in __vga_put()
419 if (vgadev->io_lock_cnt == 0) in __vga_put()
420 vgadev->locks &= ~VGA_RSRC_LEGACY_IO; in __vga_put()
421 if (vgadev->mem_lock_cnt == 0) in __vga_put()
422 vgadev->locks &= ~VGA_RSRC_LEGACY_MEM; in __vga_put()
427 if (old_locks != vgadev->locks) in __vga_put()
432 * vga_get - acquire & locks VGA resources
435 * @interruptible: blocking should be interruptible by signals ?
446 * marked as locking these resources and the IO and/or Memory accesses are
451 * bridges don't differentiate VGA memory and IO afaik). You can indicate
452 * whether this blocking should be interruptible by a signal (for userland
457 * supported (a per-resource counter is maintained)
484 rc = -ENODEV; in vga_get()
507 rc = -ERESTARTSYS; in vga_get()
518 * vga_tryget - try to acquire & lock legacy VGA resources
523 * error (-EBUSY) instead of blocking if the resources are already locked by
548 rc = -ENODEV; in vga_tryget()
552 rc = -EBUSY; in vga_tryget()
559 * vga_put - release lock on legacy VGA resources
592 * control it. If a bridge has a direct VGA descendant, but also have a sub-
603 vgadev->bridge_has_one_vga = true; in vga_arbiter_check_bridge_sharing()
609 new_bus = vgadev->pdev->bus; in vga_arbiter_check_bridge_sharing()
611 new_bridge = new_bus->self; in vga_arbiter_check_bridge_sharing()
615 bus = same_bridge_vgadev->pdev->bus; in vga_arbiter_check_bridge_sharing()
616 bridge = bus->self; in vga_arbiter_check_bridge_sharing()
625 same_bridge_vgadev->bridge_has_one_vga = false; in vga_arbiter_check_bridge_sharing()
635 bridge = bus->self; in vga_arbiter_check_bridge_sharing()
637 if (bridge && bridge == vgadev->pdev->bus->self) in vga_arbiter_check_bridge_sharing()
638 vgadev->bridge_has_one_vga = false; in vga_arbiter_check_bridge_sharing()
640 bus = bus->parent; in vga_arbiter_check_bridge_sharing()
643 new_bus = new_bus->parent; in vga_arbiter_check_bridge_sharing()
662 if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA) in vga_arbiter_add_pci_device()
668 vgaarb_err(&pdev->dev, "failed to allocate VGA arbiter data\n"); in vga_arbiter_add_pci_device()
682 vgadev->pdev = pdev; in vga_arbiter_add_pci_device()
685 vgadev->decodes = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM | in vga_arbiter_add_pci_device()
695 vgadev->owns |= VGA_RSRC_LEGACY_IO; in vga_arbiter_add_pci_device()
697 vgadev->owns |= VGA_RSRC_LEGACY_MEM; in vga_arbiter_add_pci_device()
700 bus = pdev->bus; in vga_arbiter_add_pci_device()
702 bridge = bus->self; in vga_arbiter_add_pci_device()
708 vgadev->owns = 0; in vga_arbiter_add_pci_device()
712 bus = bus->parent; in vga_arbiter_add_pci_device()
719 ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)) { in vga_arbiter_add_pci_device()
720 vgaarb_info(&pdev->dev, "setting as boot VGA device\n"); in vga_arbiter_add_pci_device()
727 list_add_tail(&vgadev->list, &vga_list); in vga_arbiter_add_pci_device()
729 vgaarb_info(&pdev->dev, "VGA device added: decodes=%s,owns=%s,locks=%s\n", in vga_arbiter_add_pci_device()
730 vga_iostate_to_str(vgadev->decodes), in vga_arbiter_add_pci_device()
731 vga_iostate_to_str(vgadev->owns), in vga_arbiter_add_pci_device()
732 vga_iostate_to_str(vgadev->locks)); in vga_arbiter_add_pci_device()
758 if (vgadev->decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM)) in vga_arbiter_del_pci_device()
759 vga_decode_count--; in vga_arbiter_del_pci_device()
762 list_del(&vgadev->list); in vga_arbiter_del_pci_device()
763 vga_count--; in vga_arbiter_del_pci_device()
781 struct device *dev = &vgadev->pdev->dev; in vga_update_device_decodes()
784 old_decodes = vgadev->decodes; in vga_update_device_decodes()
786 decodes_unlocked = vgadev->locks & decodes_removed; in vga_update_device_decodes()
787 vgadev->decodes = new_decodes; in vga_update_device_decodes()
791 vga_iostate_to_str(vgadev->decodes), in vga_update_device_decodes()
792 vga_iostate_to_str(vgadev->owns)); in vga_update_device_decodes()
797 vgadev->io_lock_cnt = 0; in vga_update_device_decodes()
799 vgadev->mem_lock_cnt = 0; in vga_update_device_decodes()
806 vga_decode_count--; in vga_update_device_decodes()
828 if (userspace && vgadev->set_vga_decode) in __vga_set_legacy_decoding()
836 * ship of non-legacy region ... in __vga_set_legacy_decoding()
849 * vga_client_register - register or unregister a VGA arbitration client
859 * turn off its mem and io decoding.
866 * control things like backlights etc. Hopefully newer multi-GPU laptops do
877 * Returns: 0 on success, -1 on failure
884 int ret = -ENODEV; in vga_client_register()
893 vgadev->irq_set_state = irq_set_state; in vga_client_register()
894 vgadev->set_vga_decode = set_vga_decode; in vga_client_register()
895 vgadev->cookie = cookie; in vga_client_register()
916 * an IO state string is of the form {io,mem,io+mem,none},
917 * mc and ic are respectively mem and io lock counts (for
922 * card_ID and an -ENODEV error is returned for any command
931 * trylock <io_state> : non-blocking acquire locks on target
953 * If the device is hot-unplugged, there is a hook inside the module to notify
959 #define PCI_INVALID_CARD ((struct pci_dev *)-1UL)
1005 struct vga_arb_private *priv = file->private_data; in vga_arb_read()
1015 return -ENOMEM; in vga_arb_read()
1023 pdev = priv->target; in vga_arb_read()
1036 if (pdev == priv->target) in vga_arb_read()
1047 vga_iostate_to_str(vgadev->decodes), in vga_arb_read()
1048 vga_iostate_to_str(vgadev->owns), in vga_arb_read()
1049 vga_iostate_to_str(vgadev->locks), in vga_arb_read()
1050 vgadev->io_lock_cnt, vgadev->mem_lock_cnt); in vga_arb_read()
1061 return -EFAULT; in vga_arb_read()
1072 struct vga_arb_private *priv = file->private_data; in vga_arb_write()
1085 return -EINVAL; in vga_arb_write()
1087 return -EFAULT; in vga_arb_write()
1093 remaining -= 5; in vga_arb_write()
1098 ret_val = -EPROTO; in vga_arb_write()
1102 ret_val = -EPROTO; in vga_arb_write()
1106 pdev = priv->target; in vga_arb_write()
1107 if (priv->target == NULL) { in vga_arb_write()
1108 ret_val = -ENODEV; in vga_arb_write()
1116 if (priv->cards[i].pdev == pdev) { in vga_arb_write()
1118 priv->cards[i].io_cnt++; in vga_arb_write()
1120 priv->cards[i].mem_cnt++; in vga_arb_write()
1129 remaining -= 7; in vga_arb_write()
1138 ret_val = -EPROTO; in vga_arb_write()
1143 ret_val = -EPROTO; in vga_arb_write()
1149 pdev = priv->target; in vga_arb_write()
1150 if (priv->target == NULL) { in vga_arb_write()
1151 ret_val = -ENODEV; in vga_arb_write()
1155 if (priv->cards[i].pdev == pdev) in vga_arb_write()
1156 uc = &priv->cards[i]; in vga_arb_write()
1160 ret_val = -EINVAL; in vga_arb_write()
1164 if (io_state & VGA_RSRC_LEGACY_IO && uc->io_cnt == 0) { in vga_arb_write()
1165 ret_val = -EINVAL; in vga_arb_write()
1169 if (io_state & VGA_RSRC_LEGACY_MEM && uc->mem_cnt == 0) { in vga_arb_write()
1170 ret_val = -EINVAL; in vga_arb_write()
1177 uc->io_cnt--; in vga_arb_write()
1179 uc->mem_cnt--; in vga_arb_write()
1185 remaining -= 8; in vga_arb_write()
1190 ret_val = -EPROTO; in vga_arb_write()
1195 ret_val = -EPROTO; in vga_arb_write()
1200 pdev = priv->target; in vga_arb_write()
1201 if (priv->target == NULL) { in vga_arb_write()
1202 ret_val = -ENODEV; in vga_arb_write()
1209 if (priv->cards[i].pdev == pdev) { in vga_arb_write()
1211 priv->cards[i].io_cnt++; in vga_arb_write()
1213 priv->cards[i].mem_cnt++; in vga_arb_write()
1220 ret_val = -EBUSY; in vga_arb_write()
1229 remaining -= 7; in vga_arb_write()
1237 ret_val = -EPROTO; in vga_arb_write()
1245 ret_val = -ENODEV; in vga_arb_write()
1258 vgaarb_dbg(&pdev->dev, "not a VGA device\n"); in vga_arb_write()
1262 ret_val = -ENODEV; in vga_arb_write()
1266 priv->target = pdev; in vga_arb_write()
1268 if (priv->cards[i].pdev == pdev) in vga_arb_write()
1270 if (priv->cards[i].pdev == NULL) { in vga_arb_write()
1271 priv->cards[i].pdev = pdev; in vga_arb_write()
1272 priv->cards[i].io_cnt = 0; in vga_arb_write()
1273 priv->cards[i].mem_cnt = 0; in vga_arb_write()
1278 vgaarb_dbg(&pdev->dev, "maximum user cards (%d) number reached, ignoring this one!\n", in vga_arb_write()
1282 ret_val = -ENOMEM; in vga_arb_write()
1293 remaining -= 8; in vga_arb_write()
1297 ret_val = -EPROTO; in vga_arb_write()
1300 pdev = priv->target; in vga_arb_write()
1301 if (priv->target == NULL) { in vga_arb_write()
1302 ret_val = -ENODEV; in vga_arb_write()
1311 return -EPROTO; in vga_arb_write()
1334 return -ENOMEM; in vga_arb_open()
1335 spin_lock_init(&priv->lock); in vga_arb_open()
1336 file->private_data = priv; in vga_arb_open()
1339 list_add(&priv->list, &vga_user_list); in vga_arb_open()
1343 priv->target = vga_default_device(); /* Maybe this is still null! */ in vga_arb_open()
1344 priv->cards[0].pdev = priv->target; in vga_arb_open()
1345 priv->cards[0].io_cnt = 0; in vga_arb_open()
1346 priv->cards[0].mem_cnt = 0; in vga_arb_open()
1354 struct vga_arb_private *priv = file->private_data; in vga_arb_release()
1362 list_del(&priv->list); in vga_arb_release()
1364 uc = &priv->cards[i]; in vga_arb_release()
1365 if (uc->pdev == NULL) in vga_arb_release()
1367 vgaarb_dbg(&uc->pdev->dev, "uc->io_cnt == %d, uc->mem_cnt == %d\n", in vga_arb_release()
1368 uc->io_cnt, uc->mem_cnt); in vga_arb_release()
1369 while (uc->io_cnt--) in vga_arb_release()
1370 vga_put(uc->pdev, VGA_RSRC_LEGACY_IO); in vga_arb_release()
1371 while (uc->mem_cnt--) in vga_arb_release()
1372 vga_put(uc->pdev, VGA_RSRC_LEGACY_MEM); in vga_arb_release()
1405 if (vgadev->set_vga_decode) { in vga_arbiter_notify_clients()
1406 new_decodes = vgadev->set_vga_decode(vgadev->cookie, in vga_arbiter_notify_clients()
1472 struct device *dev = &vgadev->pdev->dev; in vga_arb_select_default_device()
1484 flags = pci_resource_flags(vgadev->pdev, i); in vga_arb_select_default_device()
1489 start = pci_resource_start(vgadev->pdev, i); in vga_arb_select_default_device()
1490 end = pci_resource_end(vgadev->pdev, i); in vga_arb_select_default_device()
1500 else if (vgadev->pdev != vga_default_device()) in vga_arb_select_default_device()
1502 vga_set_default_device(vgadev->pdev); in vga_arb_select_default_device()
1509 struct device *dev = &vgadev->pdev->dev; in vga_arb_select_default_device()
1512 pdev = vgadev->pdev; in vga_arb_select_default_device()
1526 struct device *dev = &vgadev->pdev->dev; in vga_arb_select_default_device()
1528 vga_set_default_device(vgadev->pdev); in vga_arb_select_default_device()
1554 struct device *dev = &vgadev->pdev->dev; in vga_arb_device_init()
1556 if (vgadev->bridge_has_one_vga) in vga_arb_device_init()