Lines Matching refs:zdev

159 static int kvm_zpci_set_airq(struct zpci_dev *zdev)
161 u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_REG_INT);
165 fib.fmt0.isc = zdev->kzdev->fib.fmt0.isc;
167 fib.fmt0.noi = airq_iv_end(zdev->aibv);
168 fib.fmt0.aibv = virt_to_phys(zdev->aibv->vector);
170 fib.fmt0.aisb = virt_to_phys(aift->sbv->vector + (zdev->aisb / 64) * 8);
171 fib.fmt0.aisbo = zdev->aisb & 63;
172 fib.gd = zdev->gisa;
178 static int kvm_zpci_clear_airq(struct zpci_dev *zdev)
180 u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_DEREG_INT);
184 fib.gd = zdev->gisa;
224 static int kvm_s390_pci_aif_enable(struct zpci_dev *zdev, struct zpci_fib *fib,
239 if (zdev->gisa == 0)
242 kvm = zdev->kzdev->kvm;
243 msi_vecs = min_t(unsigned int, fib->fmt0.noi, zdev->max_msi);
288 zdev->aisb = bit; /* store the summary bit number */
289 zdev->aibv = airq_iv_create(msi_vecs, AIRQ_IV_DATA |
295 gaite = (struct zpci_gaite *)aift->gait + (zdev->aisb *
309 aift->kzdev[zdev->aisb] = zdev->kzdev;
313 fib->fmt0.aisbo = zdev->aisb & 63;
314 fib->fmt0.aisb = virt_to_phys(aift->sbv->vector + (zdev->aisb / 64) * 8);
318 zdev->kzdev->fib.fmt0.isc = fib->fmt0.isc;
319 zdev->kzdev->fib.fmt0.aibv = fib->fmt0.aibv;
323 rc = kvm_zpci_set_airq(zdev);
337 static int kvm_s390_pci_aif_disable(struct zpci_dev *zdev, bool force)
339 struct kvm_zdev *kzdev = zdev->kzdev;
345 if (zdev->gisa == 0)
355 rc = kvm_zpci_clear_airq(zdev);
359 if (zdev->kzdev->fib.fmt0.aibv == 0)
362 gaite = (struct zpci_gaite *)aift->gait + (zdev->aisb *
376 aift->kzdev[zdev->aisb] = NULL;
377 /* Clear zdev info */
378 airq_iv_free_bit(aift->sbv, zdev->aisb);
379 airq_iv_release(zdev->aibv);
380 zdev->aisb = 0;
381 zdev->aibv = NULL;
404 static int kvm_s390_pci_dev_open(struct zpci_dev *zdev)
412 kzdev->zdev = zdev;
413 zdev->kzdev = kzdev;
418 static void kvm_s390_pci_dev_release(struct zpci_dev *zdev)
422 kzdev = zdev->kzdev;
423 WARN_ON(kzdev->zdev != zdev);
424 zdev->kzdev = NULL;
436 struct zpci_dev *zdev = opaque;
440 if (!zdev)
443 mutex_lock(&zdev->kzdev_lock);
445 if (zdev->kzdev || zdev->gisa != 0 || !kvm) {
446 mutex_unlock(&zdev->kzdev_lock);
454 rc = kvm_s390_pci_dev_open(zdev);
472 if (zdev_enabled(zdev)) {
473 rc = zpci_disable_device(zdev);
482 zdev->gisa = (u32)virt_to_phys(&kvm->arch.sie_page2->gisa);
484 rc = zpci_enable_device(zdev);
489 rc = zpci_register_ioat(zdev, 0, zdev->start_dma, zdev->end_dma,
490 virt_to_phys(zdev->dma_table), &status);
495 zdev->kzdev->kvm = kvm;
498 list_add_tail(&zdev->kzdev->entry, &kvm->arch.kzdev_list);
502 mutex_unlock(&zdev->kzdev_lock);
506 zdev->gisa = 0;
508 if (zdev->kzdev)
509 kvm_s390_pci_dev_release(zdev);
511 mutex_unlock(&zdev->kzdev_lock);
518 struct zpci_dev *zdev = opaque;
522 if (!zdev)
525 mutex_lock(&zdev->kzdev_lock);
527 if (WARN_ON(!zdev->kzdev)) {
528 mutex_unlock(&zdev->kzdev_lock);
532 kvm = zdev->kzdev->kvm;
539 if (zdev->gisa == 0)
543 if (zdev->kzdev->fib.fmt0.aibv != 0)
544 kvm_s390_pci_aif_disable(zdev, true);
547 zdev->gisa = 0;
549 if (zdev_enabled(zdev)) {
550 if (zpci_disable_device(zdev))
554 if (zpci_enable_device(zdev))
558 zpci_register_ioat(zdev, 0, zdev->start_dma, zdev->end_dma,
559 virt_to_phys(zdev->dma_table), &status);
563 list_del(&zdev->kzdev->entry);
565 kvm_s390_pci_dev_release(zdev);
568 mutex_unlock(&zdev->kzdev_lock);
592 struct zpci_dev *zdev = NULL;
597 if (kzdev->zdev->fh == fh) {
598 zdev = kzdev->zdev;
604 return zdev;
607 static int kvm_s390_pci_zpci_reg_aen(struct zpci_dev *zdev,
627 return kvm_s390_pci_aif_enable(zdev, &fib, hostflag);
633 struct zpci_dev *zdev;
636 zdev = get_zdev_from_kvm_by_fh(kvm, args->fh);
637 if (!zdev)
640 mutex_lock(&zdev->kzdev_lock);
643 kzdev = zdev->kzdev;
660 r = kvm_s390_pci_zpci_reg_aen(zdev, args);
663 r = kvm_s390_pci_aif_disable(zdev, false);
671 mutex_unlock(&zdev->kzdev_lock);