Lines Matching refs:zdev

33 static int zpci_set_airq(struct zpci_dev *zdev)  in zpci_set_airq()  argument
35 u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_REG_INT); in zpci_set_airq()
41 fib.fmt0.noi = airq_iv_end(zdev->aibv); in zpci_set_airq()
42 fib.fmt0.aibv = virt_to_phys(zdev->aibv->vector); in zpci_set_airq()
44 fib.fmt0.aisb = virt_to_phys(zpci_sbv->vector) + (zdev->aisb / 64) * 8; in zpci_set_airq()
45 fib.fmt0.aisbo = zdev->aisb & 63; in zpci_set_airq()
46 fib.gd = zdev->gisa; in zpci_set_airq()
52 static int zpci_clear_airq(struct zpci_dev *zdev) in zpci_clear_airq() argument
54 u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_DEREG_INT); in zpci_clear_airq()
58 fib.gd = zdev->gisa; in zpci_clear_airq()
69 static int zpci_set_directed_irq(struct zpci_dev *zdev) in zpci_set_directed_irq() argument
71 u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_REG_INT_D); in zpci_set_directed_irq()
76 fib.fmt1.noi = zdev->msi_nr_irqs; in zpci_set_directed_irq()
77 fib.fmt1.dibvo = zdev->msi_first_bit; in zpci_set_directed_irq()
78 fib.gd = zdev->gisa; in zpci_set_directed_irq()
84 static int zpci_clear_directed_irq(struct zpci_dev *zdev) in zpci_clear_directed_irq() argument
86 u64 req = ZPCI_CREATE_REQ(zdev->fh, 0, ZPCI_MOD_FC_DEREG_INT_D); in zpci_clear_directed_irq()
91 fib.gd = zdev->gisa; in zpci_clear_directed_irq()
101 static int zpci_set_irq(struct zpci_dev *zdev) in zpci_set_irq() argument
106 rc = zpci_set_directed_irq(zdev); in zpci_set_irq()
108 rc = zpci_set_airq(zdev); in zpci_set_irq()
111 zdev->irqs_registered = 1; in zpci_set_irq()
117 static int zpci_clear_irq(struct zpci_dev *zdev) in zpci_clear_irq() argument
122 rc = zpci_clear_directed_irq(zdev); in zpci_clear_irq()
124 rc = zpci_clear_airq(zdev); in zpci_clear_irq()
127 zdev->irqs_registered = 0; in zpci_clear_irq()
271 static int __alloc_airq(struct zpci_dev *zdev, int msi_vecs, in __alloc_airq() argument
284 zdev->aisb = *bit; in __alloc_airq()
287 zdev->aibv = airq_iv_create(msi_vecs, AIRQ_IV_DATA | AIRQ_IV_BITLOCK, NULL); in __alloc_airq()
288 if (!zdev->aibv) in __alloc_airq()
292 zpci_ibv[*bit] = zdev->aibv; in __alloc_airq()
302 struct zpci_dev *zdev = to_zpci(pdev); in arch_setup_msi_irqs() local
309 zdev->aisb = -1UL; in arch_setup_msi_irqs()
310 zdev->msi_first_bit = -1U; in arch_setup_msi_irqs()
312 msi_vecs = min_t(unsigned int, nvec, zdev->max_msi); in arch_setup_msi_irqs()
315 pci_name(pdev), nvec, zdev->max_msi); in arch_setup_msi_irqs()
318 rc = __alloc_airq(zdev, msi_vecs, &bit); in arch_setup_msi_irqs()
360 msg.address_lo = zdev->msi_addr & 0xff0000ff; in arch_setup_msi_irqs()
369 msg.address_lo = zdev->msi_addr & 0xffffffff; in arch_setup_msi_irqs()
371 airq_iv_set_data(zdev->aibv, hwirq + i, irq + i); in arch_setup_msi_irqs()
373 msg.address_hi = zdev->msi_addr >> 32; in arch_setup_msi_irqs()
378 zdev->msi_first_bit = bit; in arch_setup_msi_irqs()
379 zdev->msi_nr_irqs = hwirq - bit; in arch_setup_msi_irqs()
381 rc = zpci_set_irq(zdev); in arch_setup_msi_irqs()
385 return (zdev->msi_nr_irqs == nvec) ? 0 : zdev->msi_nr_irqs; in arch_setup_msi_irqs()
390 struct zpci_dev *zdev = to_zpci(pdev); in arch_teardown_msi_irqs() local
396 rc = zpci_clear_irq(zdev); in arch_teardown_msi_irqs()
412 if (zdev->aisb != -1UL) { in arch_teardown_msi_irqs()
413 zpci_ibv[zdev->aisb] = NULL; in arch_teardown_msi_irqs()
414 airq_iv_free_bit(zpci_sbv, zdev->aisb); in arch_teardown_msi_irqs()
415 zdev->aisb = -1UL; in arch_teardown_msi_irqs()
417 if (zdev->aibv) { in arch_teardown_msi_irqs()
418 airq_iv_release(zdev->aibv); in arch_teardown_msi_irqs()
419 zdev->aibv = NULL; in arch_teardown_msi_irqs()
422 if ((irq_delivery == DIRECTED) && zdev->msi_first_bit != -1U) in arch_teardown_msi_irqs()
423 airq_iv_free(zpci_ibv[0], zdev->msi_first_bit, zdev->msi_nr_irqs); in arch_teardown_msi_irqs()
428 struct zpci_dev *zdev = to_zpci(pdev); in arch_restore_msi_irqs() local
430 if (!zdev->irqs_registered) in arch_restore_msi_irqs()
431 zpci_set_irq(zdev); in arch_restore_msi_irqs()