Lines Matching refs:vdev

117 	int	(*readfn)(struct vfio_pci_device *vdev, int pos, int count,
119 int (*writefn)(struct vfio_pci_device *vdev, int pos, int count,
180 static int vfio_default_config_read(struct vfio_pci_device *vdev, int pos,
186 memcpy(val, vdev->vconfig + pos, count);
192 struct pci_dev *pdev = vdev->pdev;
206 static int vfio_default_config_write(struct vfio_pci_device *vdev, int pos,
223 memcpy(&virt_val, vdev->vconfig + pos, count);
228 memcpy(vdev->vconfig + pos, &virt_val, count);
233 struct pci_dev *pdev = vdev->pdev;
253 static int vfio_direct_config_read(struct vfio_pci_device *vdev, int pos,
259 ret = vfio_user_config_read(vdev->pdev, pos, val, count);
265 memcpy(val, vdev->vconfig + pos, count);
268 memcpy(val, vdev->vconfig + pos,
271 memcpy(val, vdev->vconfig + pos, 1);
278 static int vfio_raw_config_write(struct vfio_pci_device *vdev, int pos,
284 ret = vfio_user_config_write(vdev->pdev, pos, val, count);
291 static int vfio_raw_config_read(struct vfio_pci_device *vdev, int pos,
297 ret = vfio_user_config_read(vdev->pdev, pos, val, count);
386 static void vfio_bar_restore(struct vfio_pci_device *vdev)
388 struct pci_dev *pdev = vdev->pdev;
389 u32 *rbar = vdev->rbar;
427 static void vfio_bar_fixup(struct vfio_pci_device *vdev)
429 struct pci_dev *pdev = vdev->pdev;
434 bar = (__le32 *)&vdev->vconfig[PCI_BASE_ADDRESS_0];
454 bar = (__le32 *)&vdev->vconfig[PCI_ROM_ADDRESS];
468 vdev->bardirty = false;
471 static int vfio_basic_config_read(struct vfio_pci_device *vdev, int pos,
476 vfio_bar_fixup(vdev);
478 count = vfio_default_config_read(vdev, pos, count, perm, offset, val);
481 if (offset == PCI_COMMAND && vdev->pdev->is_virtfn) {
482 u16 cmd = le16_to_cpu(*(__le16 *)&vdev->vconfig[PCI_COMMAND]);
492 static int vfio_basic_config_write(struct vfio_pci_device *vdev, int pos,
496 struct pci_dev *pdev = vdev->pdev;
501 virt_cmd = (__le16 *)&vdev->vconfig[PCI_COMMAND];
531 vfio_bar_restore(vdev);
534 count = vfio_default_config_write(vdev, pos, count, perm, offset, val);
556 if (virt_intx_disable && !vdev->virq_disabled) {
557 vdev->virq_disabled = true;
558 vfio_pci_intx_mask(vdev);
559 } else if (!virt_intx_disable && vdev->virq_disabled) {
560 vdev->virq_disabled = false;
561 vfio_pci_intx_unmask(vdev);
566 vdev->bardirty = true;
615 static int vfio_pm_config_write(struct vfio_pci_device *vdev, int pos,
619 count = vfio_default_config_write(vdev, pos, count, perm, offset, val);
641 pci_set_power_state(vdev->pdev, state);
823 static int vfio_find_cap_start(struct vfio_pci_device *vdev, int pos)
828 cap = vdev->pci_config_map[pos];
834 while (pos - 1 >= base && vdev->pci_config_map[pos - 1] == cap)
840 static int vfio_msi_config_read(struct vfio_pci_device *vdev, int pos,
849 start = vfio_find_cap_start(vdev, pos);
851 flags = (__le16 *)&vdev->vconfig[start];
854 *flags |= cpu_to_le16(vdev->msi_qmax << 1);
857 return vfio_default_config_read(vdev, pos, count, perm, offset, val);
860 static int vfio_msi_config_write(struct vfio_pci_device *vdev, int pos,
864 count = vfio_default_config_write(vdev, pos, count, perm, offset, val);
874 start = vfio_find_cap_start(vdev, pos);
876 pflags = (__le16 *)&vdev->vconfig[start + PCI_MSI_FLAGS];
881 if (!is_msi(vdev))
885 if ((flags & PCI_MSI_FLAGS_QSIZE) >> 4 > vdev->msi_qmax) {
887 flags |= vdev->msi_qmax << 4;
892 ret = pci_user_write_config_word(vdev->pdev,
939 /* Determine MSI CAP field length; initialize msi_perms on 1st call per vdev */
940 static int vfio_msi_cap_len(struct vfio_pci_device *vdev, u8 pos)
942 struct pci_dev *pdev = vdev->pdev;
956 if (vdev->msi_perm)
959 vdev->msi_perm = kmalloc(sizeof(struct perm_bits), GFP_KERNEL);
960 if (!vdev->msi_perm)
963 ret = init_pci_cap_msi_perm(vdev->msi_perm, len, flags);
971 static int vfio_vc_cap_len(struct vfio_pci_device *vdev, u16 pos)
973 struct pci_dev *pdev = vdev->pdev;
1012 static int vfio_cap_len(struct vfio_pci_device *vdev, u8 cap, u8 pos)
1014 struct pci_dev *pdev = vdev->pdev;
1022 return vfio_msi_cap_len(vdev, pos);
1031 vdev->extended_caps = (dword != 0);
1045 vdev->extended_caps = (dword != 0);
1077 static int vfio_ext_cap_len(struct vfio_pci_device *vdev, u16 ecap, u16 epos)
1079 struct pci_dev *pdev = vdev->pdev;
1094 return vfio_vc_cap_len(vdev, epos);
1151 static int vfio_fill_vconfig_bytes(struct vfio_pci_device *vdev,
1154 struct pci_dev *pdev = vdev->pdev;
1166 __le32 *dwordp = (__le32 *)&vdev->vconfig[offset];
1175 __le16 *wordp = (__le16 *)&vdev->vconfig[offset];
1184 u8 *byte = &vdev->vconfig[offset];
1198 static int vfio_cap_init(struct vfio_pci_device *vdev)
1200 struct pci_dev *pdev = vdev->pdev;
1201 u8 *map = vdev->pci_config_map;
1219 prev = &vdev->vconfig[PCI_CAPABILITY_LIST];
1239 len = vfio_cap_len(vdev, cap, pos);
1264 ret = vfio_fill_vconfig_bytes(vdev, pos, len);
1268 prev = &vdev->vconfig[pos + PCI_CAP_LIST_NEXT];
1275 __le16 *vstatus = (__le16 *)&vdev->vconfig[PCI_STATUS];
1282 static int vfio_ecap_init(struct vfio_pci_device *vdev)
1284 struct pci_dev *pdev = vdev->pdev;
1285 u8 *map = vdev->pci_config_map;
1290 if (!vdev->extended_caps)
1312 len = vfio_ext_cap_len(vdev, ecap, epos);
1355 ret = vfio_fill_vconfig_bytes(vdev, epos, len);
1366 *(__le32 *)&vdev->vconfig[epos] &=
1371 prev = (__le32 *)&vdev->vconfig[epos];
1376 *(u32 *)&vdev->vconfig[PCI_CFG_SPACE_SIZE] = 0;
1394 int vfio_config_init(struct vfio_pci_device *vdev)
1396 struct pci_dev *pdev = vdev->pdev;
1416 vdev->pci_config_map = map;
1417 vdev->vconfig = vconfig;
1423 ret = vfio_fill_vconfig_bytes(vdev, 0, PCI_STD_HEADER_SIZEOF);
1427 vdev->bardirty = true;
1435 vdev->rbar[0] = le32_to_cpu(*(__le32 *)&vconfig[PCI_BASE_ADDRESS_0]);
1436 vdev->rbar[1] = le32_to_cpu(*(__le32 *)&vconfig[PCI_BASE_ADDRESS_1]);
1437 vdev->rbar[2] = le32_to_cpu(*(__le32 *)&vconfig[PCI_BASE_ADDRESS_2]);
1438 vdev->rbar[3] = le32_to_cpu(*(__le32 *)&vconfig[PCI_BASE_ADDRESS_3]);
1439 vdev->rbar[4] = le32_to_cpu(*(__le32 *)&vconfig[PCI_BASE_ADDRESS_4]);
1440 vdev->rbar[5] = le32_to_cpu(*(__le32 *)&vconfig[PCI_BASE_ADDRESS_5]);
1441 vdev->rbar[6] = le32_to_cpu(*(__le32 *)&vconfig[PCI_ROM_ADDRESS]);
1448 ret = vfio_cap_init(vdev);
1452 ret = vfio_ecap_init(vdev);
1460 vdev->pci_config_map = NULL;
1462 vdev->vconfig = NULL;
1466 void vfio_config_free(struct vfio_pci_device *vdev)
1468 kfree(vdev->vconfig);
1469 vdev->vconfig = NULL;
1470 kfree(vdev->pci_config_map);
1471 vdev->pci_config_map = NULL;
1472 kfree(vdev->msi_perm);
1473 vdev->msi_perm = NULL;
1480 static size_t vfio_pci_cap_remaining_dword(struct vfio_pci_device *vdev,
1483 u8 cap = vdev->pci_config_map[pos];
1486 for (i = 1; (pos + i) % 4 && vdev->pci_config_map[pos + i] == cap; i++)
1492 static ssize_t vfio_config_do_rw(struct vfio_pci_device *vdev, char __user *buf,
1495 struct pci_dev *pdev = vdev->pdev;
1510 count = min(count, vfio_pci_cap_remaining_dword(vdev, *ppos));
1520 cap_id = vdev->pci_config_map[*ppos];
1530 cap_start = vfio_find_cap_start(vdev, *ppos);
1537 perm = vdev->msi_perm;
1540 cap_start = vfio_find_cap_start(vdev, *ppos);
1556 ret = perm->writefn(vdev, *ppos, count, perm, offset, val);
1559 ret = perm->readfn(vdev, *ppos, count,
1572 ssize_t vfio_pci_config_rw(struct vfio_pci_device *vdev, char __user *buf,
1582 ret = vfio_config_do_rw(vdev, buf, count, &pos, iswrite);