Lines Matching refs:zdev
33 static int zpci_set_airq(struct zpci_dev *zdev)
35 u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_REG_INT);
41 fib.fmt0.noi = airq_iv_end(zdev->aibv);
42 fib.fmt0.aibv = virt_to_phys(zdev->aibv->vector);
43 fib.fmt0.aibvo = 0; /* each zdev has its own interrupt vector */
44 fib.fmt0.aisb = virt_to_phys(zpci_sbv->vector) + (zdev->aisb / 64) * 8;
45 fib.fmt0.aisbo = zdev->aisb & 63;
46 fib.gd = zdev->gisa;
52 static int zpci_clear_airq(struct zpci_dev *zdev)
54 u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_DEREG_INT);
58 fib.gd = zdev->gisa;
69 static int zpci_set_directed_irq(struct zpci_dev *zdev)
71 u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_REG_INT_D);
76 fib.fmt1.noi = zdev->msi_nr_irqs;
77 fib.fmt1.dibvo = zdev->msi_first_bit;
78 fib.gd = zdev->gisa;
84 static int zpci_clear_directed_irq(struct zpci_dev *zdev)
86 u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_DEREG_INT_D);
91 fib.gd = zdev->gisa;
101 static int zpci_set_irq(struct zpci_dev *zdev)
106 rc = zpci_set_directed_irq(zdev);
108 rc = zpci_set_airq(zdev);
111 zdev->irqs_registered = 1;
117 static int zpci_clear_irq(struct zpci_dev *zdev)
122 rc = zpci_clear_directed_irq(zdev);
124 rc = zpci_clear_airq(zdev);
127 zdev->irqs_registered = 0;
273 struct zpci_dev *zdev = to_zpci(pdev);
281 zdev->aisb = -1UL;
282 zdev->msi_first_bit = -1U;
285 msi_vecs = min_t(unsigned int, nvec, zdev->max_msi);
297 zdev->aisb = bit;
300 zdev->aibv = airq_iv_create(msi_vecs, AIRQ_IV_DATA | AIRQ_IV_BITLOCK, NULL);
301 if (!zdev->aibv)
305 zpci_ibv[bit] = zdev->aibv;
334 msg.address_lo = zdev->msi_addr & 0xff0000ff;
341 msg.address_lo = zdev->msi_addr & 0xffffffff;
342 airq_iv_set_data(zdev->aibv, hwirq, irq);
344 msg.address_hi = zdev->msi_addr >> 32;
349 zdev->msi_first_bit = bit;
350 zdev->msi_nr_irqs = msi_vecs;
352 rc = zpci_set_irq(zdev);
361 struct zpci_dev *zdev = to_zpci(pdev);
366 rc = zpci_clear_irq(zdev);
380 if (zdev->aisb != -1UL) {
381 zpci_ibv[zdev->aisb] = NULL;
382 airq_iv_free_bit(zpci_sbv, zdev->aisb);
383 zdev->aisb = -1UL;
385 if (zdev->aibv) {
386 airq_iv_release(zdev->aibv);
387 zdev->aibv = NULL;
390 if ((irq_delivery == DIRECTED) && zdev->msi_first_bit != -1U)
391 airq_iv_free(zpci_ibv[0], zdev->msi_first_bit, zdev->msi_nr_irqs);
396 struct zpci_dev *zdev = to_zpci(pdev);
398 if (!zdev->irqs_registered)
399 zpci_set_irq(zdev);