Lines Matching refs:snic
27 #include "snic.h"
37 struct snic *snic = data;
40 snic->s_stats.misc.last_isr_time = jiffies;
41 atomic64_inc(&snic->s_stats.misc.ack_isr_cnt);
43 wq_work_done = snic_wq_cmpl_handler(snic, -1);
44 svnic_intr_return_credits(&snic->intr[SNIC_MSIX_WQ],
55 struct snic *snic = data;
58 snic->s_stats.misc.last_isr_time = jiffies;
59 atomic64_inc(&snic->s_stats.misc.cmpl_isr_cnt);
61 iocmpl_work_done = snic_fwcq_cmpl_handler(snic, -1);
62 svnic_intr_return_credits(&snic->intr[SNIC_MSIX_IO_CMPL],
73 struct snic *snic = data;
75 snic->s_stats.misc.last_isr_time = jiffies;
76 atomic64_inc(&snic->s_stats.misc.errnotify_isr_cnt);
78 svnic_intr_return_all_credits(&snic->intr[SNIC_MSIX_ERR_NOTIFY]);
79 snic_log_q_error(snic);
82 snic_handle_link_event(snic);
89 snic_free_intr(struct snic *snic)
94 for (i = 0; i < ARRAY_SIZE(snic->msix); i++) {
95 if (snic->msix[i].requested) {
96 free_irq(pci_irq_vector(snic->pdev, i),
97 snic->msix[i].devid);
103 snic_request_intr(struct snic *snic)
108 intr_mode = svnic_dev_get_intr_mode(snic->vdev);
112 * Currently HW supports single WQ and CQ. So passing devid as snic.
114 * to pass devid as corresponding WQ or CQ ptr and retrieve snic
118 sprintf(snic->msix[SNIC_MSIX_WQ].devname,
120 snic->name);
121 snic->msix[SNIC_MSIX_WQ].isr = snic_isr_msix_wq;
122 snic->msix[SNIC_MSIX_WQ].devid = snic;
124 sprintf(snic->msix[SNIC_MSIX_IO_CMPL].devname,
126 snic->name);
127 snic->msix[SNIC_MSIX_IO_CMPL].isr = snic_isr_msix_io_cmpl;
128 snic->msix[SNIC_MSIX_IO_CMPL].devid = snic;
130 sprintf(snic->msix[SNIC_MSIX_ERR_NOTIFY].devname,
132 snic->name);
133 snic->msix[SNIC_MSIX_ERR_NOTIFY].isr = snic_isr_msix_err_notify;
134 snic->msix[SNIC_MSIX_ERR_NOTIFY].devid = snic;
136 for (i = 0; i < ARRAY_SIZE(snic->msix); i++) {
137 ret = request_irq(pci_irq_vector(snic->pdev, i),
138 snic->msix[i].isr,
140 snic->msix[i].devname,
141 snic->msix[i].devid);
143 SNIC_HOST_ERR(snic->shost,
147 snic_free_intr(snic);
150 snic->msix[i].requested = 1;
157 snic_set_intr_mode(struct snic *snic)
159 unsigned int n = ARRAY_SIZE(snic->wq);
167 BUILD_BUG_ON((ARRAY_SIZE(snic->wq) + SNIC_CQ_IO_CMPL_MAX) >
168 ARRAY_SIZE(snic->intr));
170 if (snic->wq_count < n || snic->cq_count < n + m)
173 if (pci_alloc_irq_vectors(snic->pdev, vecs, vecs, PCI_IRQ_MSIX) < 0)
176 snic->wq_count = n;
177 snic->cq_count = n + m;
178 snic->intr_count = vecs;
179 snic->err_intr_offset = SNIC_MSIX_ERR_NOTIFY;
181 SNIC_ISR_DBG(snic->shost, "Using MSI-X Interrupts\n");
182 svnic_dev_set_intr_mode(snic->vdev, VNIC_DEV_INTR_MODE_MSIX);
185 svnic_dev_set_intr_mode(snic->vdev, VNIC_DEV_INTR_MODE_UNKNOWN);
190 snic_clear_intr_mode(struct snic *snic)
192 pci_free_irq_vectors(snic->pdev);
193 svnic_dev_set_intr_mode(snic->vdev, VNIC_DEV_INTR_MODE_INTX);