Lines Matching refs:fnic
32 struct fnic *fnic = data; in fnic_isr_legacy() local
36 pba = vnic_intr_legacy_pba(fnic->legacy_pba); in fnic_isr_legacy()
40 fnic->fnic_stats.misc_stats.last_isr_time = jiffies; in fnic_isr_legacy()
41 atomic64_inc(&fnic->fnic_stats.misc_stats.isr_count); in fnic_isr_legacy()
44 vnic_intr_return_all_credits(&fnic->intr[FNIC_INTX_NOTIFY]); in fnic_isr_legacy()
45 fnic_handle_link_event(fnic); in fnic_isr_legacy()
49 vnic_intr_return_all_credits(&fnic->intr[FNIC_INTX_ERR]); in fnic_isr_legacy()
50 fnic_log_q_error(fnic); in fnic_isr_legacy()
54 work_done += fnic_wq_copy_cmpl_handler(fnic, -1); in fnic_isr_legacy()
55 work_done += fnic_wq_cmpl_handler(fnic, -1); in fnic_isr_legacy()
56 work_done += fnic_rq_cmpl_handler(fnic, -1); in fnic_isr_legacy()
58 vnic_intr_return_credits(&fnic->intr[FNIC_INTX_WQ_RQ_COPYWQ], in fnic_isr_legacy()
69 struct fnic *fnic = data; in fnic_isr_msi() local
72 fnic->fnic_stats.misc_stats.last_isr_time = jiffies; in fnic_isr_msi()
73 atomic64_inc(&fnic->fnic_stats.misc_stats.isr_count); in fnic_isr_msi()
75 work_done += fnic_wq_copy_cmpl_handler(fnic, -1); in fnic_isr_msi()
76 work_done += fnic_wq_cmpl_handler(fnic, -1); in fnic_isr_msi()
77 work_done += fnic_rq_cmpl_handler(fnic, -1); in fnic_isr_msi()
79 vnic_intr_return_credits(&fnic->intr[0], in fnic_isr_msi()
89 struct fnic *fnic = data; in fnic_isr_msix_rq() local
92 fnic->fnic_stats.misc_stats.last_isr_time = jiffies; in fnic_isr_msix_rq()
93 atomic64_inc(&fnic->fnic_stats.misc_stats.isr_count); in fnic_isr_msix_rq()
95 rq_work_done = fnic_rq_cmpl_handler(fnic, -1); in fnic_isr_msix_rq()
96 vnic_intr_return_credits(&fnic->intr[FNIC_MSIX_RQ], in fnic_isr_msix_rq()
106 struct fnic *fnic = data; in fnic_isr_msix_wq() local
109 fnic->fnic_stats.misc_stats.last_isr_time = jiffies; in fnic_isr_msix_wq()
110 atomic64_inc(&fnic->fnic_stats.misc_stats.isr_count); in fnic_isr_msix_wq()
112 wq_work_done = fnic_wq_cmpl_handler(fnic, -1); in fnic_isr_msix_wq()
113 vnic_intr_return_credits(&fnic->intr[FNIC_MSIX_WQ], in fnic_isr_msix_wq()
122 struct fnic *fnic = data; in fnic_isr_msix_wq_copy() local
125 fnic->fnic_stats.misc_stats.last_isr_time = jiffies; in fnic_isr_msix_wq_copy()
126 atomic64_inc(&fnic->fnic_stats.misc_stats.isr_count); in fnic_isr_msix_wq_copy()
128 wq_copy_work_done = fnic_wq_copy_cmpl_handler(fnic, -1); in fnic_isr_msix_wq_copy()
129 vnic_intr_return_credits(&fnic->intr[FNIC_MSIX_WQ_COPY], in fnic_isr_msix_wq_copy()
138 struct fnic *fnic = data; in fnic_isr_msix_err_notify() local
140 fnic->fnic_stats.misc_stats.last_isr_time = jiffies; in fnic_isr_msix_err_notify()
141 atomic64_inc(&fnic->fnic_stats.misc_stats.isr_count); in fnic_isr_msix_err_notify()
143 vnic_intr_return_all_credits(&fnic->intr[FNIC_MSIX_ERR_NOTIFY]); in fnic_isr_msix_err_notify()
144 fnic_log_q_error(fnic); in fnic_isr_msix_err_notify()
145 fnic_handle_link_event(fnic); in fnic_isr_msix_err_notify()
150 void fnic_free_intr(struct fnic *fnic) in fnic_free_intr() argument
154 switch (vnic_dev_get_intr_mode(fnic->vdev)) { in fnic_free_intr()
157 free_irq(fnic->pdev->irq, fnic); in fnic_free_intr()
161 for (i = 0; i < ARRAY_SIZE(fnic->msix); i++) in fnic_free_intr()
162 if (fnic->msix[i].requested) in fnic_free_intr()
163 free_irq(fnic->msix_entry[i].vector, in fnic_free_intr()
164 fnic->msix[i].devid); in fnic_free_intr()
172 int fnic_request_intr(struct fnic *fnic) in fnic_request_intr() argument
177 switch (vnic_dev_get_intr_mode(fnic->vdev)) { in fnic_request_intr()
180 err = request_irq(fnic->pdev->irq, &fnic_isr_legacy, in fnic_request_intr()
181 IRQF_SHARED, DRV_NAME, fnic); in fnic_request_intr()
185 err = request_irq(fnic->pdev->irq, &fnic_isr_msi, in fnic_request_intr()
186 0, fnic->name, fnic); in fnic_request_intr()
191 sprintf(fnic->msix[FNIC_MSIX_RQ].devname, in fnic_request_intr()
192 "%.11s-fcs-rq", fnic->name); in fnic_request_intr()
193 fnic->msix[FNIC_MSIX_RQ].isr = fnic_isr_msix_rq; in fnic_request_intr()
194 fnic->msix[FNIC_MSIX_RQ].devid = fnic; in fnic_request_intr()
196 sprintf(fnic->msix[FNIC_MSIX_WQ].devname, in fnic_request_intr()
197 "%.11s-fcs-wq", fnic->name); in fnic_request_intr()
198 fnic->msix[FNIC_MSIX_WQ].isr = fnic_isr_msix_wq; in fnic_request_intr()
199 fnic->msix[FNIC_MSIX_WQ].devid = fnic; in fnic_request_intr()
201 sprintf(fnic->msix[FNIC_MSIX_WQ_COPY].devname, in fnic_request_intr()
202 "%.11s-scsi-wq", fnic->name); in fnic_request_intr()
203 fnic->msix[FNIC_MSIX_WQ_COPY].isr = fnic_isr_msix_wq_copy; in fnic_request_intr()
204 fnic->msix[FNIC_MSIX_WQ_COPY].devid = fnic; in fnic_request_intr()
206 sprintf(fnic->msix[FNIC_MSIX_ERR_NOTIFY].devname, in fnic_request_intr()
207 "%.11s-err-notify", fnic->name); in fnic_request_intr()
208 fnic->msix[FNIC_MSIX_ERR_NOTIFY].isr = in fnic_request_intr()
210 fnic->msix[FNIC_MSIX_ERR_NOTIFY].devid = fnic; in fnic_request_intr()
212 for (i = 0; i < ARRAY_SIZE(fnic->msix); i++) { in fnic_request_intr()
213 err = request_irq(fnic->msix_entry[i].vector, in fnic_request_intr()
214 fnic->msix[i].isr, 0, in fnic_request_intr()
215 fnic->msix[i].devname, in fnic_request_intr()
216 fnic->msix[i].devid); in fnic_request_intr()
218 shost_printk(KERN_ERR, fnic->lport->host, in fnic_request_intr()
221 fnic_free_intr(fnic); in fnic_request_intr()
224 fnic->msix[i].requested = 1; in fnic_request_intr()
235 int fnic_set_intr_mode(struct fnic *fnic) in fnic_set_intr_mode() argument
237 unsigned int n = ARRAY_SIZE(fnic->rq); in fnic_set_intr_mode()
238 unsigned int m = ARRAY_SIZE(fnic->wq); in fnic_set_intr_mode()
239 unsigned int o = ARRAY_SIZE(fnic->wq_copy); in fnic_set_intr_mode()
252 BUG_ON(ARRAY_SIZE(fnic->msix_entry) < n + m + o + 1); in fnic_set_intr_mode()
254 fnic->msix_entry[i].entry = i; in fnic_set_intr_mode()
256 if (fnic->rq_count >= n && in fnic_set_intr_mode()
257 fnic->raw_wq_count >= m && in fnic_set_intr_mode()
258 fnic->wq_copy_count >= o && in fnic_set_intr_mode()
259 fnic->cq_count >= n + m + o) { in fnic_set_intr_mode()
260 if (!pci_enable_msix_exact(fnic->pdev, fnic->msix_entry, in fnic_set_intr_mode()
262 fnic->rq_count = n; in fnic_set_intr_mode()
263 fnic->raw_wq_count = m; in fnic_set_intr_mode()
264 fnic->wq_copy_count = o; in fnic_set_intr_mode()
265 fnic->wq_count = m + o; in fnic_set_intr_mode()
266 fnic->cq_count = n + m + o; in fnic_set_intr_mode()
267 fnic->intr_count = n + m + o + 1; in fnic_set_intr_mode()
268 fnic->err_intr_offset = FNIC_MSIX_ERR_NOTIFY; in fnic_set_intr_mode()
270 FNIC_ISR_DBG(KERN_DEBUG, fnic->lport->host, in fnic_set_intr_mode()
272 vnic_dev_set_intr_mode(fnic->vdev, in fnic_set_intr_mode()
282 if (fnic->rq_count >= 1 && in fnic_set_intr_mode()
283 fnic->raw_wq_count >= 1 && in fnic_set_intr_mode()
284 fnic->wq_copy_count >= 1 && in fnic_set_intr_mode()
285 fnic->cq_count >= 3 && in fnic_set_intr_mode()
286 fnic->intr_count >= 1 && in fnic_set_intr_mode()
287 !pci_enable_msi(fnic->pdev)) { in fnic_set_intr_mode()
289 fnic->rq_count = 1; in fnic_set_intr_mode()
290 fnic->raw_wq_count = 1; in fnic_set_intr_mode()
291 fnic->wq_copy_count = 1; in fnic_set_intr_mode()
292 fnic->wq_count = 2; in fnic_set_intr_mode()
293 fnic->cq_count = 3; in fnic_set_intr_mode()
294 fnic->intr_count = 1; in fnic_set_intr_mode()
295 fnic->err_intr_offset = 0; in fnic_set_intr_mode()
297 FNIC_ISR_DBG(KERN_DEBUG, fnic->lport->host, in fnic_set_intr_mode()
299 vnic_dev_set_intr_mode(fnic->vdev, VNIC_DEV_INTR_MODE_MSI); in fnic_set_intr_mode()
311 if (fnic->rq_count >= 1 && in fnic_set_intr_mode()
312 fnic->raw_wq_count >= 1 && in fnic_set_intr_mode()
313 fnic->wq_copy_count >= 1 && in fnic_set_intr_mode()
314 fnic->cq_count >= 3 && in fnic_set_intr_mode()
315 fnic->intr_count >= 3) { in fnic_set_intr_mode()
317 fnic->rq_count = 1; in fnic_set_intr_mode()
318 fnic->raw_wq_count = 1; in fnic_set_intr_mode()
319 fnic->wq_copy_count = 1; in fnic_set_intr_mode()
320 fnic->cq_count = 3; in fnic_set_intr_mode()
321 fnic->intr_count = 3; in fnic_set_intr_mode()
323 FNIC_ISR_DBG(KERN_DEBUG, fnic->lport->host, in fnic_set_intr_mode()
325 vnic_dev_set_intr_mode(fnic->vdev, VNIC_DEV_INTR_MODE_INTX); in fnic_set_intr_mode()
330 vnic_dev_set_intr_mode(fnic->vdev, VNIC_DEV_INTR_MODE_UNKNOWN); in fnic_set_intr_mode()
335 void fnic_clear_intr_mode(struct fnic *fnic) in fnic_clear_intr_mode() argument
337 switch (vnic_dev_get_intr_mode(fnic->vdev)) { in fnic_clear_intr_mode()
339 pci_disable_msix(fnic->pdev); in fnic_clear_intr_mode()
342 pci_disable_msi(fnic->pdev); in fnic_clear_intr_mode()
348 vnic_dev_set_intr_mode(fnic->vdev, VNIC_DEV_INTR_MODE_INTX); in fnic_clear_intr_mode()