xref: /linux/drivers/scsi/lpfc/lpfc_sli.c (revision f9c41a62bba3f3f7ef3541b2a025e3371bcbba97)
1 /*******************************************************************
2  * This file is part of the Emulex Linux Device Driver for         *
3  * Fibre Channel Host Bus Adapters.                                *
4  * Copyright (C) 2004-2012 Emulex.  All rights reserved.           *
5  * EMULEX and SLI are trademarks of Emulex.                        *
6  * www.emulex.com                                                  *
7  * Portions Copyright (C) 2004-2005 Christoph Hellwig              *
8  *                                                                 *
9  * This program is free software; you can redistribute it and/or   *
10  * modify it under the terms of version 2 of the GNU General       *
11  * Public License as published by the Free Software Foundation.    *
12  * This program is distributed in the hope that it will be useful. *
13  * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND          *
14  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  *
15  * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE      *
16  * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
17  * TO BE LEGALLY INVALID.  See the GNU General Public License for  *
18  * more details, a copy of which can be found in the file COPYING  *
19  * included with this package.                                     *
20  *******************************************************************/
21 
22 #include <linux/blkdev.h>
23 #include <linux/pci.h>
24 #include <linux/interrupt.h>
25 #include <linux/delay.h>
26 #include <linux/slab.h>
27 
28 #include <scsi/scsi.h>
29 #include <scsi/scsi_cmnd.h>
30 #include <scsi/scsi_device.h>
31 #include <scsi/scsi_host.h>
32 #include <scsi/scsi_transport_fc.h>
33 #include <scsi/fc/fc_fs.h>
34 #include <linux/aer.h>
35 
36 #include "lpfc_hw4.h"
37 #include "lpfc_hw.h"
38 #include "lpfc_sli.h"
39 #include "lpfc_sli4.h"
40 #include "lpfc_nl.h"
41 #include "lpfc_disc.h"
42 #include "lpfc_scsi.h"
43 #include "lpfc.h"
44 #include "lpfc_crtn.h"
45 #include "lpfc_logmsg.h"
46 #include "lpfc_compat.h"
47 #include "lpfc_debugfs.h"
48 #include "lpfc_vport.h"
49 
50 /* There are only four IOCB completion types. */
51 typedef enum _lpfc_iocb_type {
52 	LPFC_UNKNOWN_IOCB,
53 	LPFC_UNSOL_IOCB,
54 	LPFC_SOL_IOCB,
55 	LPFC_ABORT_IOCB
56 } lpfc_iocb_type;
57 
58 
59 /* Provide function prototypes local to this module. */
60 static int lpfc_sli_issue_mbox_s4(struct lpfc_hba *, LPFC_MBOXQ_t *,
61 				  uint32_t);
62 static int lpfc_sli4_read_rev(struct lpfc_hba *, LPFC_MBOXQ_t *,
63 			      uint8_t *, uint32_t *);
64 static struct lpfc_iocbq *lpfc_sli4_els_wcqe_to_rspiocbq(struct lpfc_hba *,
65 							 struct lpfc_iocbq *);
66 static void lpfc_sli4_send_seq_to_ulp(struct lpfc_vport *,
67 				      struct hbq_dmabuf *);
68 static int lpfc_sli4_fp_handle_wcqe(struct lpfc_hba *, struct lpfc_queue *,
69 				    struct lpfc_cqe *);
70 static int lpfc_sli4_post_els_sgl_list(struct lpfc_hba *, struct list_head *,
71 				       int);
72 static void lpfc_sli4_hba_handle_eqe(struct lpfc_hba *, struct lpfc_eqe *,
73 			uint32_t);
74 
75 static IOCB_t *
76 lpfc_get_iocb_from_iocbq(struct lpfc_iocbq *iocbq)
77 {
78 	return &iocbq->iocb;
79 }
80 
81 /**
82  * lpfc_sli4_wq_put - Put a Work Queue Entry on an Work Queue
83  * @q: The Work Queue to operate on.
84  * @wqe: The work Queue Entry to put on the Work queue.
85  *
86  * This routine will copy the contents of @wqe to the next available entry on
87  * the @q. This function will then ring the Work Queue Doorbell to signal the
88  * HBA to start processing the Work Queue Entry. This function returns 0 if
89  * successful. If no entries are available on @q then this function will return
90  * -ENOMEM.
91  * The caller is expected to hold the hbalock when calling this routine.
92  **/
93 static uint32_t
94 lpfc_sli4_wq_put(struct lpfc_queue *q, union lpfc_wqe *wqe)
95 {
96 	union lpfc_wqe *temp_wqe;
97 	struct lpfc_register doorbell;
98 	uint32_t host_index;
99 	uint32_t idx;
100 
101 	/* sanity check on queue memory */
102 	if (unlikely(!q))
103 		return -ENOMEM;
104 	temp_wqe = q->qe[q->host_index].wqe;
105 
106 	/* If the host has not yet processed the next entry then we are done */
107 	idx = ((q->host_index + 1) % q->entry_count);
108 	if (idx == q->hba_index) {
109 		q->WQ_overflow++;
110 		return -ENOMEM;
111 	}
112 	q->WQ_posted++;
113 	/* set consumption flag every once in a while */
114 	if (!((q->host_index + 1) % q->entry_repost))
115 		bf_set(wqe_wqec, &wqe->generic.wqe_com, 1);
116 	if (q->phba->sli3_options & LPFC_SLI4_PHWQ_ENABLED)
117 		bf_set(wqe_wqid, &wqe->generic.wqe_com, q->queue_id);
118 	lpfc_sli_pcimem_bcopy(wqe, temp_wqe, q->entry_size);
119 
120 	/* Update the host index before invoking device */
121 	host_index = q->host_index;
122 
123 	q->host_index = idx;
124 
125 	/* Ring Doorbell */
126 	doorbell.word0 = 0;
127 	if (q->db_format == LPFC_DB_LIST_FORMAT) {
128 		bf_set(lpfc_wq_db_list_fm_num_posted, &doorbell, 1);
129 		bf_set(lpfc_wq_db_list_fm_index, &doorbell, host_index);
130 		bf_set(lpfc_wq_db_list_fm_id, &doorbell, q->queue_id);
131 	} else if (q->db_format == LPFC_DB_RING_FORMAT) {
132 		bf_set(lpfc_wq_db_ring_fm_num_posted, &doorbell, 1);
133 		bf_set(lpfc_wq_db_ring_fm_id, &doorbell, q->queue_id);
134 	} else {
135 		return -EINVAL;
136 	}
137 	writel(doorbell.word0, q->db_regaddr);
138 
139 	return 0;
140 }
141 
142 /**
143  * lpfc_sli4_wq_release - Updates internal hba index for WQ
144  * @q: The Work Queue to operate on.
145  * @index: The index to advance the hba index to.
146  *
147  * This routine will update the HBA index of a queue to reflect consumption of
148  * Work Queue Entries by the HBA. When the HBA indicates that it has consumed
149  * an entry the host calls this function to update the queue's internal
150  * pointers. This routine returns the number of entries that were consumed by
151  * the HBA.
152  **/
153 static uint32_t
154 lpfc_sli4_wq_release(struct lpfc_queue *q, uint32_t index)
155 {
156 	uint32_t released = 0;
157 
158 	/* sanity check on queue memory */
159 	if (unlikely(!q))
160 		return 0;
161 
162 	if (q->hba_index == index)
163 		return 0;
164 	do {
165 		q->hba_index = ((q->hba_index + 1) % q->entry_count);
166 		released++;
167 	} while (q->hba_index != index);
168 	return released;
169 }
170 
171 /**
172  * lpfc_sli4_mq_put - Put a Mailbox Queue Entry on an Mailbox Queue
173  * @q: The Mailbox Queue to operate on.
174  * @wqe: The Mailbox Queue Entry to put on the Work queue.
175  *
176  * This routine will copy the contents of @mqe to the next available entry on
177  * the @q. This function will then ring the Work Queue Doorbell to signal the
178  * HBA to start processing the Work Queue Entry. This function returns 0 if
179  * successful. If no entries are available on @q then this function will return
180  * -ENOMEM.
181  * The caller is expected to hold the hbalock when calling this routine.
182  **/
183 static uint32_t
184 lpfc_sli4_mq_put(struct lpfc_queue *q, struct lpfc_mqe *mqe)
185 {
186 	struct lpfc_mqe *temp_mqe;
187 	struct lpfc_register doorbell;
188 	uint32_t host_index;
189 
190 	/* sanity check on queue memory */
191 	if (unlikely(!q))
192 		return -ENOMEM;
193 	temp_mqe = q->qe[q->host_index].mqe;
194 
195 	/* If the host has not yet processed the next entry then we are done */
196 	if (((q->host_index + 1) % q->entry_count) == q->hba_index)
197 		return -ENOMEM;
198 	lpfc_sli_pcimem_bcopy(mqe, temp_mqe, q->entry_size);
199 	/* Save off the mailbox pointer for completion */
200 	q->phba->mbox = (MAILBOX_t *)temp_mqe;
201 
202 	/* Update the host index before invoking device */
203 	host_index = q->host_index;
204 	q->host_index = ((q->host_index + 1) % q->entry_count);
205 
206 	/* Ring Doorbell */
207 	doorbell.word0 = 0;
208 	bf_set(lpfc_mq_doorbell_num_posted, &doorbell, 1);
209 	bf_set(lpfc_mq_doorbell_id, &doorbell, q->queue_id);
210 	writel(doorbell.word0, q->phba->sli4_hba.MQDBregaddr);
211 	return 0;
212 }
213 
214 /**
215  * lpfc_sli4_mq_release - Updates internal hba index for MQ
216  * @q: The Mailbox Queue to operate on.
217  *
218  * This routine will update the HBA index of a queue to reflect consumption of
219  * a Mailbox Queue Entry by the HBA. When the HBA indicates that it has consumed
220  * an entry the host calls this function to update the queue's internal
221  * pointers. This routine returns the number of entries that were consumed by
222  * the HBA.
223  **/
224 static uint32_t
225 lpfc_sli4_mq_release(struct lpfc_queue *q)
226 {
227 	/* sanity check on queue memory */
228 	if (unlikely(!q))
229 		return 0;
230 
231 	/* Clear the mailbox pointer for completion */
232 	q->phba->mbox = NULL;
233 	q->hba_index = ((q->hba_index + 1) % q->entry_count);
234 	return 1;
235 }
236 
237 /**
238  * lpfc_sli4_eq_get - Gets the next valid EQE from a EQ
239  * @q: The Event Queue to get the first valid EQE from
240  *
241  * This routine will get the first valid Event Queue Entry from @q, update
242  * the queue's internal hba index, and return the EQE. If no valid EQEs are in
243  * the Queue (no more work to do), or the Queue is full of EQEs that have been
244  * processed, but not popped back to the HBA then this routine will return NULL.
245  **/
246 static struct lpfc_eqe *
247 lpfc_sli4_eq_get(struct lpfc_queue *q)
248 {
249 	struct lpfc_eqe *eqe;
250 	uint32_t idx;
251 
252 	/* sanity check on queue memory */
253 	if (unlikely(!q))
254 		return NULL;
255 	eqe = q->qe[q->hba_index].eqe;
256 
257 	/* If the next EQE is not valid then we are done */
258 	if (!bf_get_le32(lpfc_eqe_valid, eqe))
259 		return NULL;
260 	/* If the host has not yet processed the next entry then we are done */
261 	idx = ((q->hba_index + 1) % q->entry_count);
262 	if (idx == q->host_index)
263 		return NULL;
264 
265 	q->hba_index = idx;
266 	return eqe;
267 }
268 
269 /**
270  * lpfc_sli4_eq_clr_intr - Turn off interrupts from this EQ
271  * @q: The Event Queue to disable interrupts
272  *
273  **/
274 static inline void
275 lpfc_sli4_eq_clr_intr(struct lpfc_queue *q)
276 {
277 	struct lpfc_register doorbell;
278 
279 	doorbell.word0 = 0;
280 	bf_set(lpfc_eqcq_doorbell_eqci, &doorbell, 1);
281 	bf_set(lpfc_eqcq_doorbell_qt, &doorbell, LPFC_QUEUE_TYPE_EVENT);
282 	bf_set(lpfc_eqcq_doorbell_eqid_hi, &doorbell,
283 		(q->queue_id >> LPFC_EQID_HI_FIELD_SHIFT));
284 	bf_set(lpfc_eqcq_doorbell_eqid_lo, &doorbell, q->queue_id);
285 	writel(doorbell.word0, q->phba->sli4_hba.EQCQDBregaddr);
286 }
287 
288 /**
289  * lpfc_sli4_eq_release - Indicates the host has finished processing an EQ
290  * @q: The Event Queue that the host has completed processing for.
291  * @arm: Indicates whether the host wants to arms this CQ.
292  *
293  * This routine will mark all Event Queue Entries on @q, from the last
294  * known completed entry to the last entry that was processed, as completed
295  * by clearing the valid bit for each completion queue entry. Then it will
296  * notify the HBA, by ringing the doorbell, that the EQEs have been processed.
297  * The internal host index in the @q will be updated by this routine to indicate
298  * that the host has finished processing the entries. The @arm parameter
299  * indicates that the queue should be rearmed when ringing the doorbell.
300  *
301  * This function will return the number of EQEs that were popped.
302  **/
303 uint32_t
304 lpfc_sli4_eq_release(struct lpfc_queue *q, bool arm)
305 {
306 	uint32_t released = 0;
307 	struct lpfc_eqe *temp_eqe;
308 	struct lpfc_register doorbell;
309 
310 	/* sanity check on queue memory */
311 	if (unlikely(!q))
312 		return 0;
313 
314 	/* while there are valid entries */
315 	while (q->hba_index != q->host_index) {
316 		temp_eqe = q->qe[q->host_index].eqe;
317 		bf_set_le32(lpfc_eqe_valid, temp_eqe, 0);
318 		released++;
319 		q->host_index = ((q->host_index + 1) % q->entry_count);
320 	}
321 	if (unlikely(released == 0 && !arm))
322 		return 0;
323 
324 	/* ring doorbell for number popped */
325 	doorbell.word0 = 0;
326 	if (arm) {
327 		bf_set(lpfc_eqcq_doorbell_arm, &doorbell, 1);
328 		bf_set(lpfc_eqcq_doorbell_eqci, &doorbell, 1);
329 	}
330 	bf_set(lpfc_eqcq_doorbell_num_released, &doorbell, released);
331 	bf_set(lpfc_eqcq_doorbell_qt, &doorbell, LPFC_QUEUE_TYPE_EVENT);
332 	bf_set(lpfc_eqcq_doorbell_eqid_hi, &doorbell,
333 			(q->queue_id >> LPFC_EQID_HI_FIELD_SHIFT));
334 	bf_set(lpfc_eqcq_doorbell_eqid_lo, &doorbell, q->queue_id);
335 	writel(doorbell.word0, q->phba->sli4_hba.EQCQDBregaddr);
336 	/* PCI read to flush PCI pipeline on re-arming for INTx mode */
337 	if ((q->phba->intr_type == INTx) && (arm == LPFC_QUEUE_REARM))
338 		readl(q->phba->sli4_hba.EQCQDBregaddr);
339 	return released;
340 }
341 
342 /**
343  * lpfc_sli4_cq_get - Gets the next valid CQE from a CQ
344  * @q: The Completion Queue to get the first valid CQE from
345  *
346  * This routine will get the first valid Completion Queue Entry from @q, update
347  * the queue's internal hba index, and return the CQE. If no valid CQEs are in
348  * the Queue (no more work to do), or the Queue is full of CQEs that have been
349  * processed, but not popped back to the HBA then this routine will return NULL.
350  **/
351 static struct lpfc_cqe *
352 lpfc_sli4_cq_get(struct lpfc_queue *q)
353 {
354 	struct lpfc_cqe *cqe;
355 	uint32_t idx;
356 
357 	/* sanity check on queue memory */
358 	if (unlikely(!q))
359 		return NULL;
360 
361 	/* If the next CQE is not valid then we are done */
362 	if (!bf_get_le32(lpfc_cqe_valid, q->qe[q->hba_index].cqe))
363 		return NULL;
364 	/* If the host has not yet processed the next entry then we are done */
365 	idx = ((q->hba_index + 1) % q->entry_count);
366 	if (idx == q->host_index)
367 		return NULL;
368 
369 	cqe = q->qe[q->hba_index].cqe;
370 	q->hba_index = idx;
371 	return cqe;
372 }
373 
374 /**
375  * lpfc_sli4_cq_release - Indicates the host has finished processing a CQ
376  * @q: The Completion Queue that the host has completed processing for.
377  * @arm: Indicates whether the host wants to arms this CQ.
378  *
379  * This routine will mark all Completion queue entries on @q, from the last
380  * known completed entry to the last entry that was processed, as completed
381  * by clearing the valid bit for each completion queue entry. Then it will
382  * notify the HBA, by ringing the doorbell, that the CQEs have been processed.
383  * The internal host index in the @q will be updated by this routine to indicate
384  * that the host has finished processing the entries. The @arm parameter
385  * indicates that the queue should be rearmed when ringing the doorbell.
386  *
387  * This function will return the number of CQEs that were released.
388  **/
389 uint32_t
390 lpfc_sli4_cq_release(struct lpfc_queue *q, bool arm)
391 {
392 	uint32_t released = 0;
393 	struct lpfc_cqe *temp_qe;
394 	struct lpfc_register doorbell;
395 
396 	/* sanity check on queue memory */
397 	if (unlikely(!q))
398 		return 0;
399 	/* while there are valid entries */
400 	while (q->hba_index != q->host_index) {
401 		temp_qe = q->qe[q->host_index].cqe;
402 		bf_set_le32(lpfc_cqe_valid, temp_qe, 0);
403 		released++;
404 		q->host_index = ((q->host_index + 1) % q->entry_count);
405 	}
406 	if (unlikely(released == 0 && !arm))
407 		return 0;
408 
409 	/* ring doorbell for number popped */
410 	doorbell.word0 = 0;
411 	if (arm)
412 		bf_set(lpfc_eqcq_doorbell_arm, &doorbell, 1);
413 	bf_set(lpfc_eqcq_doorbell_num_released, &doorbell, released);
414 	bf_set(lpfc_eqcq_doorbell_qt, &doorbell, LPFC_QUEUE_TYPE_COMPLETION);
415 	bf_set(lpfc_eqcq_doorbell_cqid_hi, &doorbell,
416 			(q->queue_id >> LPFC_CQID_HI_FIELD_SHIFT));
417 	bf_set(lpfc_eqcq_doorbell_cqid_lo, &doorbell, q->queue_id);
418 	writel(doorbell.word0, q->phba->sli4_hba.EQCQDBregaddr);
419 	return released;
420 }
421 
422 /**
423  * lpfc_sli4_rq_put - Put a Receive Buffer Queue Entry on a Receive Queue
424  * @q: The Header Receive Queue to operate on.
425  * @wqe: The Receive Queue Entry to put on the Receive queue.
426  *
427  * This routine will copy the contents of @wqe to the next available entry on
428  * the @q. This function will then ring the Receive Queue Doorbell to signal the
429  * HBA to start processing the Receive Queue Entry. This function returns the
430  * index that the rqe was copied to if successful. If no entries are available
431  * on @q then this function will return -ENOMEM.
432  * The caller is expected to hold the hbalock when calling this routine.
433  **/
434 static int
435 lpfc_sli4_rq_put(struct lpfc_queue *hq, struct lpfc_queue *dq,
436 		 struct lpfc_rqe *hrqe, struct lpfc_rqe *drqe)
437 {
438 	struct lpfc_rqe *temp_hrqe;
439 	struct lpfc_rqe *temp_drqe;
440 	struct lpfc_register doorbell;
441 	int put_index = hq->host_index;
442 
443 	/* sanity check on queue memory */
444 	if (unlikely(!hq) || unlikely(!dq))
445 		return -ENOMEM;
446 	temp_hrqe = hq->qe[hq->host_index].rqe;
447 	temp_drqe = dq->qe[dq->host_index].rqe;
448 
449 	if (hq->type != LPFC_HRQ || dq->type != LPFC_DRQ)
450 		return -EINVAL;
451 	if (hq->host_index != dq->host_index)
452 		return -EINVAL;
453 	/* If the host has not yet processed the next entry then we are done */
454 	if (((hq->host_index + 1) % hq->entry_count) == hq->hba_index)
455 		return -EBUSY;
456 	lpfc_sli_pcimem_bcopy(hrqe, temp_hrqe, hq->entry_size);
457 	lpfc_sli_pcimem_bcopy(drqe, temp_drqe, dq->entry_size);
458 
459 	/* Update the host index to point to the next slot */
460 	hq->host_index = ((hq->host_index + 1) % hq->entry_count);
461 	dq->host_index = ((dq->host_index + 1) % dq->entry_count);
462 
463 	/* Ring The Header Receive Queue Doorbell */
464 	if (!(hq->host_index % hq->entry_repost)) {
465 		doorbell.word0 = 0;
466 		if (hq->db_format == LPFC_DB_RING_FORMAT) {
467 			bf_set(lpfc_rq_db_ring_fm_num_posted, &doorbell,
468 			       hq->entry_repost);
469 			bf_set(lpfc_rq_db_ring_fm_id, &doorbell, hq->queue_id);
470 		} else if (hq->db_format == LPFC_DB_LIST_FORMAT) {
471 			bf_set(lpfc_rq_db_list_fm_num_posted, &doorbell,
472 			       hq->entry_repost);
473 			bf_set(lpfc_rq_db_list_fm_index, &doorbell,
474 			       hq->host_index);
475 			bf_set(lpfc_rq_db_list_fm_id, &doorbell, hq->queue_id);
476 		} else {
477 			return -EINVAL;
478 		}
479 		writel(doorbell.word0, hq->db_regaddr);
480 	}
481 	return put_index;
482 }
483 
484 /**
485  * lpfc_sli4_rq_release - Updates internal hba index for RQ
486  * @q: The Header Receive Queue to operate on.
487  *
488  * This routine will update the HBA index of a queue to reflect consumption of
489  * one Receive Queue Entry by the HBA. When the HBA indicates that it has
490  * consumed an entry the host calls this function to update the queue's
491  * internal pointers. This routine returns the number of entries that were
492  * consumed by the HBA.
493  **/
494 static uint32_t
495 lpfc_sli4_rq_release(struct lpfc_queue *hq, struct lpfc_queue *dq)
496 {
497 	/* sanity check on queue memory */
498 	if (unlikely(!hq) || unlikely(!dq))
499 		return 0;
500 
501 	if ((hq->type != LPFC_HRQ) || (dq->type != LPFC_DRQ))
502 		return 0;
503 	hq->hba_index = ((hq->hba_index + 1) % hq->entry_count);
504 	dq->hba_index = ((dq->hba_index + 1) % dq->entry_count);
505 	return 1;
506 }
507 
508 /**
509  * lpfc_cmd_iocb - Get next command iocb entry in the ring
510  * @phba: Pointer to HBA context object.
511  * @pring: Pointer to driver SLI ring object.
512  *
513  * This function returns pointer to next command iocb entry
514  * in the command ring. The caller must hold hbalock to prevent
515  * other threads consume the next command iocb.
516  * SLI-2/SLI-3 provide different sized iocbs.
517  **/
518 static inline IOCB_t *
519 lpfc_cmd_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
520 {
521 	return (IOCB_t *) (((char *) pring->sli.sli3.cmdringaddr) +
522 			   pring->sli.sli3.cmdidx * phba->iocb_cmd_size);
523 }
524 
525 /**
526  * lpfc_resp_iocb - Get next response iocb entry in the ring
527  * @phba: Pointer to HBA context object.
528  * @pring: Pointer to driver SLI ring object.
529  *
530  * This function returns pointer to next response iocb entry
531  * in the response ring. The caller must hold hbalock to make sure
532  * that no other thread consume the next response iocb.
533  * SLI-2/SLI-3 provide different sized iocbs.
534  **/
535 static inline IOCB_t *
536 lpfc_resp_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
537 {
538 	return (IOCB_t *) (((char *) pring->sli.sli3.rspringaddr) +
539 			   pring->sli.sli3.rspidx * phba->iocb_rsp_size);
540 }
541 
542 /**
543  * __lpfc_sli_get_iocbq - Allocates an iocb object from iocb pool
544  * @phba: Pointer to HBA context object.
545  *
546  * This function is called with hbalock held. This function
547  * allocates a new driver iocb object from the iocb pool. If the
548  * allocation is successful, it returns pointer to the newly
549  * allocated iocb object else it returns NULL.
550  **/
551 struct lpfc_iocbq *
552 __lpfc_sli_get_iocbq(struct lpfc_hba *phba)
553 {
554 	struct list_head *lpfc_iocb_list = &phba->lpfc_iocb_list;
555 	struct lpfc_iocbq * iocbq = NULL;
556 
557 	list_remove_head(lpfc_iocb_list, iocbq, struct lpfc_iocbq, list);
558 	if (iocbq)
559 		phba->iocb_cnt++;
560 	if (phba->iocb_cnt > phba->iocb_max)
561 		phba->iocb_max = phba->iocb_cnt;
562 	return iocbq;
563 }
564 
565 /**
566  * __lpfc_clear_active_sglq - Remove the active sglq for this XRI.
567  * @phba: Pointer to HBA context object.
568  * @xritag: XRI value.
569  *
570  * This function clears the sglq pointer from the array of acive
571  * sglq's. The xritag that is passed in is used to index into the
572  * array. Before the xritag can be used it needs to be adjusted
573  * by subtracting the xribase.
574  *
575  * Returns sglq ponter = success, NULL = Failure.
576  **/
577 static struct lpfc_sglq *
578 __lpfc_clear_active_sglq(struct lpfc_hba *phba, uint16_t xritag)
579 {
580 	struct lpfc_sglq *sglq;
581 
582 	sglq = phba->sli4_hba.lpfc_sglq_active_list[xritag];
583 	phba->sli4_hba.lpfc_sglq_active_list[xritag] = NULL;
584 	return sglq;
585 }
586 
587 /**
588  * __lpfc_get_active_sglq - Get the active sglq for this XRI.
589  * @phba: Pointer to HBA context object.
590  * @xritag: XRI value.
591  *
592  * This function returns the sglq pointer from the array of acive
593  * sglq's. The xritag that is passed in is used to index into the
594  * array. Before the xritag can be used it needs to be adjusted
595  * by subtracting the xribase.
596  *
597  * Returns sglq ponter = success, NULL = Failure.
598  **/
599 struct lpfc_sglq *
600 __lpfc_get_active_sglq(struct lpfc_hba *phba, uint16_t xritag)
601 {
602 	struct lpfc_sglq *sglq;
603 
604 	sglq =  phba->sli4_hba.lpfc_sglq_active_list[xritag];
605 	return sglq;
606 }
607 
608 /**
609  * lpfc_clr_rrq_active - Clears RRQ active bit in xri_bitmap.
610  * @phba: Pointer to HBA context object.
611  * @xritag: xri used in this exchange.
612  * @rrq: The RRQ to be cleared.
613  *
614  **/
615 void
616 lpfc_clr_rrq_active(struct lpfc_hba *phba,
617 		    uint16_t xritag,
618 		    struct lpfc_node_rrq *rrq)
619 {
620 	struct lpfc_nodelist *ndlp = NULL;
621 
622 	if ((rrq->vport) && NLP_CHK_NODE_ACT(rrq->ndlp))
623 		ndlp = lpfc_findnode_did(rrq->vport, rrq->nlp_DID);
624 
625 	/* The target DID could have been swapped (cable swap)
626 	 * we should use the ndlp from the findnode if it is
627 	 * available.
628 	 */
629 	if ((!ndlp) && rrq->ndlp)
630 		ndlp = rrq->ndlp;
631 
632 	if (!ndlp)
633 		goto out;
634 
635 	if (test_and_clear_bit(xritag, ndlp->active_rrqs.xri_bitmap)) {
636 		rrq->send_rrq = 0;
637 		rrq->xritag = 0;
638 		rrq->rrq_stop_time = 0;
639 	}
640 out:
641 	mempool_free(rrq, phba->rrq_pool);
642 }
643 
644 /**
645  * lpfc_handle_rrq_active - Checks if RRQ has waithed RATOV.
646  * @phba: Pointer to HBA context object.
647  *
648  * This function is called with hbalock held. This function
649  * Checks if stop_time (ratov from setting rrq active) has
650  * been reached, if it has and the send_rrq flag is set then
651  * it will call lpfc_send_rrq. If the send_rrq flag is not set
652  * then it will just call the routine to clear the rrq and
653  * free the rrq resource.
654  * The timer is set to the next rrq that is going to expire before
655  * leaving the routine.
656  *
657  **/
658 void
659 lpfc_handle_rrq_active(struct lpfc_hba *phba)
660 {
661 	struct lpfc_node_rrq *rrq;
662 	struct lpfc_node_rrq *nextrrq;
663 	unsigned long next_time;
664 	unsigned long iflags;
665 	LIST_HEAD(send_rrq);
666 
667 	spin_lock_irqsave(&phba->hbalock, iflags);
668 	phba->hba_flag &= ~HBA_RRQ_ACTIVE;
669 	next_time = jiffies + HZ * (phba->fc_ratov + 1);
670 	list_for_each_entry_safe(rrq, nextrrq,
671 				 &phba->active_rrq_list, list) {
672 		if (time_after(jiffies, rrq->rrq_stop_time))
673 			list_move(&rrq->list, &send_rrq);
674 		else if (time_before(rrq->rrq_stop_time, next_time))
675 			next_time = rrq->rrq_stop_time;
676 	}
677 	spin_unlock_irqrestore(&phba->hbalock, iflags);
678 	if (!list_empty(&phba->active_rrq_list))
679 		mod_timer(&phba->rrq_tmr, next_time);
680 	list_for_each_entry_safe(rrq, nextrrq, &send_rrq, list) {
681 		list_del(&rrq->list);
682 		if (!rrq->send_rrq)
683 			/* this call will free the rrq */
684 		lpfc_clr_rrq_active(phba, rrq->xritag, rrq);
685 		else if (lpfc_send_rrq(phba, rrq)) {
686 			/* if we send the rrq then the completion handler
687 			*  will clear the bit in the xribitmap.
688 			*/
689 			lpfc_clr_rrq_active(phba, rrq->xritag,
690 					    rrq);
691 		}
692 	}
693 }
694 
695 /**
696  * lpfc_get_active_rrq - Get the active RRQ for this exchange.
697  * @vport: Pointer to vport context object.
698  * @xri: The xri used in the exchange.
699  * @did: The targets DID for this exchange.
700  *
701  * returns NULL = rrq not found in the phba->active_rrq_list.
702  *         rrq = rrq for this xri and target.
703  **/
704 struct lpfc_node_rrq *
705 lpfc_get_active_rrq(struct lpfc_vport *vport, uint16_t xri, uint32_t did)
706 {
707 	struct lpfc_hba *phba = vport->phba;
708 	struct lpfc_node_rrq *rrq;
709 	struct lpfc_node_rrq *nextrrq;
710 	unsigned long iflags;
711 
712 	if (phba->sli_rev != LPFC_SLI_REV4)
713 		return NULL;
714 	spin_lock_irqsave(&phba->hbalock, iflags);
715 	list_for_each_entry_safe(rrq, nextrrq, &phba->active_rrq_list, list) {
716 		if (rrq->vport == vport && rrq->xritag == xri &&
717 				rrq->nlp_DID == did){
718 			list_del(&rrq->list);
719 			spin_unlock_irqrestore(&phba->hbalock, iflags);
720 			return rrq;
721 		}
722 	}
723 	spin_unlock_irqrestore(&phba->hbalock, iflags);
724 	return NULL;
725 }
726 
727 /**
728  * lpfc_cleanup_vports_rrqs - Remove and clear the active RRQ for this vport.
729  * @vport: Pointer to vport context object.
730  * @ndlp: Pointer to the lpfc_node_list structure.
731  * If ndlp is NULL Remove all active RRQs for this vport from the
732  * phba->active_rrq_list and clear the rrq.
733  * If ndlp is not NULL then only remove rrqs for this vport & this ndlp.
734  **/
735 void
736 lpfc_cleanup_vports_rrqs(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
737 
738 {
739 	struct lpfc_hba *phba = vport->phba;
740 	struct lpfc_node_rrq *rrq;
741 	struct lpfc_node_rrq *nextrrq;
742 	unsigned long iflags;
743 	LIST_HEAD(rrq_list);
744 
745 	if (phba->sli_rev != LPFC_SLI_REV4)
746 		return;
747 	if (!ndlp) {
748 		lpfc_sli4_vport_delete_els_xri_aborted(vport);
749 		lpfc_sli4_vport_delete_fcp_xri_aborted(vport);
750 	}
751 	spin_lock_irqsave(&phba->hbalock, iflags);
752 	list_for_each_entry_safe(rrq, nextrrq, &phba->active_rrq_list, list)
753 		if ((rrq->vport == vport) && (!ndlp  || rrq->ndlp == ndlp))
754 			list_move(&rrq->list, &rrq_list);
755 	spin_unlock_irqrestore(&phba->hbalock, iflags);
756 
757 	list_for_each_entry_safe(rrq, nextrrq, &rrq_list, list) {
758 		list_del(&rrq->list);
759 		lpfc_clr_rrq_active(phba, rrq->xritag, rrq);
760 	}
761 }
762 
763 /**
764  * lpfc_cleanup_wt_rrqs - Remove all rrq's from the active list.
765  * @phba: Pointer to HBA context object.
766  *
767  * Remove all rrqs from the phba->active_rrq_list and free them by
768  * calling __lpfc_clr_active_rrq
769  *
770  **/
771 void
772 lpfc_cleanup_wt_rrqs(struct lpfc_hba *phba)
773 {
774 	struct lpfc_node_rrq *rrq;
775 	struct lpfc_node_rrq *nextrrq;
776 	unsigned long next_time;
777 	unsigned long iflags;
778 	LIST_HEAD(rrq_list);
779 
780 	if (phba->sli_rev != LPFC_SLI_REV4)
781 		return;
782 	spin_lock_irqsave(&phba->hbalock, iflags);
783 	phba->hba_flag &= ~HBA_RRQ_ACTIVE;
784 	next_time = jiffies + HZ * (phba->fc_ratov * 2);
785 	list_splice_init(&phba->active_rrq_list, &rrq_list);
786 	spin_unlock_irqrestore(&phba->hbalock, iflags);
787 
788 	list_for_each_entry_safe(rrq, nextrrq, &rrq_list, list) {
789 		list_del(&rrq->list);
790 		lpfc_clr_rrq_active(phba, rrq->xritag, rrq);
791 	}
792 	if (!list_empty(&phba->active_rrq_list))
793 		mod_timer(&phba->rrq_tmr, next_time);
794 }
795 
796 
797 /**
798  * lpfc_test_rrq_active - Test RRQ bit in xri_bitmap.
799  * @phba: Pointer to HBA context object.
800  * @ndlp: Targets nodelist pointer for this exchange.
801  * @xritag the xri in the bitmap to test.
802  *
803  * This function is called with hbalock held. This function
804  * returns 0 = rrq not active for this xri
805  *         1 = rrq is valid for this xri.
806  **/
807 int
808 lpfc_test_rrq_active(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp,
809 			uint16_t  xritag)
810 {
811 	if (!ndlp)
812 		return 0;
813 	if (test_bit(xritag, ndlp->active_rrqs.xri_bitmap))
814 			return 1;
815 	else
816 		return 0;
817 }
818 
819 /**
820  * lpfc_set_rrq_active - set RRQ active bit in xri_bitmap.
821  * @phba: Pointer to HBA context object.
822  * @ndlp: nodelist pointer for this target.
823  * @xritag: xri used in this exchange.
824  * @rxid: Remote Exchange ID.
825  * @send_rrq: Flag used to determine if we should send rrq els cmd.
826  *
827  * This function takes the hbalock.
828  * The active bit is always set in the active rrq xri_bitmap even
829  * if there is no slot avaiable for the other rrq information.
830  *
831  * returns 0 rrq actived for this xri
832  *         < 0 No memory or invalid ndlp.
833  **/
834 int
835 lpfc_set_rrq_active(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp,
836 		    uint16_t xritag, uint16_t rxid, uint16_t send_rrq)
837 {
838 	unsigned long iflags;
839 	struct lpfc_node_rrq *rrq;
840 	int empty;
841 
842 	if (!ndlp)
843 		return -EINVAL;
844 
845 	if (!phba->cfg_enable_rrq)
846 		return -EINVAL;
847 
848 	spin_lock_irqsave(&phba->hbalock, iflags);
849 	if (phba->pport->load_flag & FC_UNLOADING) {
850 		phba->hba_flag &= ~HBA_RRQ_ACTIVE;
851 		goto out;
852 	}
853 
854 	/*
855 	 * set the active bit even if there is no mem available.
856 	 */
857 	if (NLP_CHK_FREE_REQ(ndlp))
858 		goto out;
859 
860 	if (ndlp->vport && (ndlp->vport->load_flag & FC_UNLOADING))
861 		goto out;
862 
863 	if (test_and_set_bit(xritag, ndlp->active_rrqs.xri_bitmap))
864 		goto out;
865 
866 	spin_unlock_irqrestore(&phba->hbalock, iflags);
867 	rrq = mempool_alloc(phba->rrq_pool, GFP_KERNEL);
868 	if (!rrq) {
869 		lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
870 				"3155 Unable to allocate RRQ xri:0x%x rxid:0x%x"
871 				" DID:0x%x Send:%d\n",
872 				xritag, rxid, ndlp->nlp_DID, send_rrq);
873 		return -EINVAL;
874 	}
875 	rrq->send_rrq = send_rrq;
876 	rrq->xritag = xritag;
877 	rrq->rrq_stop_time = jiffies + HZ * (phba->fc_ratov + 1);
878 	rrq->ndlp = ndlp;
879 	rrq->nlp_DID = ndlp->nlp_DID;
880 	rrq->vport = ndlp->vport;
881 	rrq->rxid = rxid;
882 	rrq->send_rrq = send_rrq;
883 	spin_lock_irqsave(&phba->hbalock, iflags);
884 	empty = list_empty(&phba->active_rrq_list);
885 	list_add_tail(&rrq->list, &phba->active_rrq_list);
886 	phba->hba_flag |= HBA_RRQ_ACTIVE;
887 	if (empty)
888 		lpfc_worker_wake_up(phba);
889 	spin_unlock_irqrestore(&phba->hbalock, iflags);
890 	return 0;
891 out:
892 	spin_unlock_irqrestore(&phba->hbalock, iflags);
893 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
894 			"2921 Can't set rrq active xri:0x%x rxid:0x%x"
895 			" DID:0x%x Send:%d\n",
896 			xritag, rxid, ndlp->nlp_DID, send_rrq);
897 	return -EINVAL;
898 }
899 
900 /**
901  * __lpfc_sli_get_sglq - Allocates an iocb object from sgl pool
902  * @phba: Pointer to HBA context object.
903  * @piocb: Pointer to the iocbq.
904  *
905  * This function is called with hbalock held. This function
906  * gets a new driver sglq object from the sglq list. If the
907  * list is not empty then it is successful, it returns pointer to the newly
908  * allocated sglq object else it returns NULL.
909  **/
910 static struct lpfc_sglq *
911 __lpfc_sli_get_sglq(struct lpfc_hba *phba, struct lpfc_iocbq *piocbq)
912 {
913 	struct list_head *lpfc_sgl_list = &phba->sli4_hba.lpfc_sgl_list;
914 	struct lpfc_sglq *sglq = NULL;
915 	struct lpfc_sglq *start_sglq = NULL;
916 	struct lpfc_scsi_buf *lpfc_cmd;
917 	struct lpfc_nodelist *ndlp;
918 	int found = 0;
919 
920 	if (piocbq->iocb_flag &  LPFC_IO_FCP) {
921 		lpfc_cmd = (struct lpfc_scsi_buf *) piocbq->context1;
922 		ndlp = lpfc_cmd->rdata->pnode;
923 	} else  if ((piocbq->iocb.ulpCommand == CMD_GEN_REQUEST64_CR) &&
924 			!(piocbq->iocb_flag & LPFC_IO_LIBDFC))
925 		ndlp = piocbq->context_un.ndlp;
926 	else  if ((piocbq->iocb.ulpCommand == CMD_ELS_REQUEST64_CR) &&
927 			(piocbq->iocb_flag & LPFC_IO_LIBDFC))
928 		ndlp = piocbq->context_un.ndlp;
929 	else
930 		ndlp = piocbq->context1;
931 
932 	list_remove_head(lpfc_sgl_list, sglq, struct lpfc_sglq, list);
933 	start_sglq = sglq;
934 	while (!found) {
935 		if (!sglq)
936 			return NULL;
937 		if (lpfc_test_rrq_active(phba, ndlp, sglq->sli4_lxritag)) {
938 			/* This xri has an rrq outstanding for this DID.
939 			 * put it back in the list and get another xri.
940 			 */
941 			list_add_tail(&sglq->list, lpfc_sgl_list);
942 			sglq = NULL;
943 			list_remove_head(lpfc_sgl_list, sglq,
944 						struct lpfc_sglq, list);
945 			if (sglq == start_sglq) {
946 				sglq = NULL;
947 				break;
948 			} else
949 				continue;
950 		}
951 		sglq->ndlp = ndlp;
952 		found = 1;
953 		phba->sli4_hba.lpfc_sglq_active_list[sglq->sli4_lxritag] = sglq;
954 		sglq->state = SGL_ALLOCATED;
955 	}
956 	return sglq;
957 }
958 
959 /**
960  * lpfc_sli_get_iocbq - Allocates an iocb object from iocb pool
961  * @phba: Pointer to HBA context object.
962  *
963  * This function is called with no lock held. This function
964  * allocates a new driver iocb object from the iocb pool. If the
965  * allocation is successful, it returns pointer to the newly
966  * allocated iocb object else it returns NULL.
967  **/
968 struct lpfc_iocbq *
969 lpfc_sli_get_iocbq(struct lpfc_hba *phba)
970 {
971 	struct lpfc_iocbq * iocbq = NULL;
972 	unsigned long iflags;
973 
974 	spin_lock_irqsave(&phba->hbalock, iflags);
975 	iocbq = __lpfc_sli_get_iocbq(phba);
976 	spin_unlock_irqrestore(&phba->hbalock, iflags);
977 	return iocbq;
978 }
979 
980 /**
981  * __lpfc_sli_release_iocbq_s4 - Release iocb to the iocb pool
982  * @phba: Pointer to HBA context object.
983  * @iocbq: Pointer to driver iocb object.
984  *
985  * This function is called with hbalock held to release driver
986  * iocb object to the iocb pool. The iotag in the iocb object
987  * does not change for each use of the iocb object. This function
988  * clears all other fields of the iocb object when it is freed.
989  * The sqlq structure that holds the xritag and phys and virtual
990  * mappings for the scatter gather list is retrieved from the
991  * active array of sglq. The get of the sglq pointer also clears
992  * the entry in the array. If the status of the IO indiactes that
993  * this IO was aborted then the sglq entry it put on the
994  * lpfc_abts_els_sgl_list until the CQ_ABORTED_XRI is received. If the
995  * IO has good status or fails for any other reason then the sglq
996  * entry is added to the free list (lpfc_sgl_list).
997  **/
998 static void
999 __lpfc_sli_release_iocbq_s4(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
1000 {
1001 	struct lpfc_sglq *sglq;
1002 	size_t start_clean = offsetof(struct lpfc_iocbq, iocb);
1003 	unsigned long iflag = 0;
1004 	struct lpfc_sli_ring *pring = &phba->sli.ring[LPFC_ELS_RING];
1005 
1006 	if (iocbq->sli4_xritag == NO_XRI)
1007 		sglq = NULL;
1008 	else
1009 		sglq = __lpfc_clear_active_sglq(phba, iocbq->sli4_lxritag);
1010 
1011 	if (sglq)  {
1012 		if ((iocbq->iocb_flag & LPFC_EXCHANGE_BUSY) &&
1013 			(sglq->state != SGL_XRI_ABORTED)) {
1014 			spin_lock_irqsave(&phba->sli4_hba.abts_sgl_list_lock,
1015 					iflag);
1016 			list_add(&sglq->list,
1017 				&phba->sli4_hba.lpfc_abts_els_sgl_list);
1018 			spin_unlock_irqrestore(
1019 				&phba->sli4_hba.abts_sgl_list_lock, iflag);
1020 		} else {
1021 			sglq->state = SGL_FREED;
1022 			sglq->ndlp = NULL;
1023 			list_add_tail(&sglq->list,
1024 				&phba->sli4_hba.lpfc_sgl_list);
1025 
1026 			/* Check if TXQ queue needs to be serviced */
1027 			if (pring->txq_cnt)
1028 				lpfc_worker_wake_up(phba);
1029 		}
1030 	}
1031 
1032 
1033 	/*
1034 	 * Clean all volatile data fields, preserve iotag and node struct.
1035 	 */
1036 	memset((char *)iocbq + start_clean, 0, sizeof(*iocbq) - start_clean);
1037 	iocbq->sli4_lxritag = NO_XRI;
1038 	iocbq->sli4_xritag = NO_XRI;
1039 	list_add_tail(&iocbq->list, &phba->lpfc_iocb_list);
1040 }
1041 
1042 
1043 /**
1044  * __lpfc_sli_release_iocbq_s3 - Release iocb to the iocb pool
1045  * @phba: Pointer to HBA context object.
1046  * @iocbq: Pointer to driver iocb object.
1047  *
1048  * This function is called with hbalock held to release driver
1049  * iocb object to the iocb pool. The iotag in the iocb object
1050  * does not change for each use of the iocb object. This function
1051  * clears all other fields of the iocb object when it is freed.
1052  **/
1053 static void
1054 __lpfc_sli_release_iocbq_s3(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
1055 {
1056 	size_t start_clean = offsetof(struct lpfc_iocbq, iocb);
1057 
1058 	/*
1059 	 * Clean all volatile data fields, preserve iotag and node struct.
1060 	 */
1061 	memset((char*)iocbq + start_clean, 0, sizeof(*iocbq) - start_clean);
1062 	iocbq->sli4_xritag = NO_XRI;
1063 	list_add_tail(&iocbq->list, &phba->lpfc_iocb_list);
1064 }
1065 
1066 /**
1067  * __lpfc_sli_release_iocbq - Release iocb to the iocb pool
1068  * @phba: Pointer to HBA context object.
1069  * @iocbq: Pointer to driver iocb object.
1070  *
1071  * This function is called with hbalock held to release driver
1072  * iocb object to the iocb pool. The iotag in the iocb object
1073  * does not change for each use of the iocb object. This function
1074  * clears all other fields of the iocb object when it is freed.
1075  **/
1076 static void
1077 __lpfc_sli_release_iocbq(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
1078 {
1079 	phba->__lpfc_sli_release_iocbq(phba, iocbq);
1080 	phba->iocb_cnt--;
1081 }
1082 
1083 /**
1084  * lpfc_sli_release_iocbq - Release iocb to the iocb pool
1085  * @phba: Pointer to HBA context object.
1086  * @iocbq: Pointer to driver iocb object.
1087  *
1088  * This function is called with no lock held to release the iocb to
1089  * iocb pool.
1090  **/
1091 void
1092 lpfc_sli_release_iocbq(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
1093 {
1094 	unsigned long iflags;
1095 
1096 	/*
1097 	 * Clean all volatile data fields, preserve iotag and node struct.
1098 	 */
1099 	spin_lock_irqsave(&phba->hbalock, iflags);
1100 	__lpfc_sli_release_iocbq(phba, iocbq);
1101 	spin_unlock_irqrestore(&phba->hbalock, iflags);
1102 }
1103 
1104 /**
1105  * lpfc_sli_cancel_iocbs - Cancel all iocbs from a list.
1106  * @phba: Pointer to HBA context object.
1107  * @iocblist: List of IOCBs.
1108  * @ulpstatus: ULP status in IOCB command field.
1109  * @ulpWord4: ULP word-4 in IOCB command field.
1110  *
1111  * This function is called with a list of IOCBs to cancel. It cancels the IOCB
1112  * on the list by invoking the complete callback function associated with the
1113  * IOCB with the provided @ulpstatus and @ulpword4 set to the IOCB commond
1114  * fields.
1115  **/
1116 void
1117 lpfc_sli_cancel_iocbs(struct lpfc_hba *phba, struct list_head *iocblist,
1118 		      uint32_t ulpstatus, uint32_t ulpWord4)
1119 {
1120 	struct lpfc_iocbq *piocb;
1121 
1122 	while (!list_empty(iocblist)) {
1123 		list_remove_head(iocblist, piocb, struct lpfc_iocbq, list);
1124 
1125 		if (!piocb->iocb_cmpl)
1126 			lpfc_sli_release_iocbq(phba, piocb);
1127 		else {
1128 			piocb->iocb.ulpStatus = ulpstatus;
1129 			piocb->iocb.un.ulpWord[4] = ulpWord4;
1130 			(piocb->iocb_cmpl) (phba, piocb, piocb);
1131 		}
1132 	}
1133 	return;
1134 }
1135 
1136 /**
1137  * lpfc_sli_iocb_cmd_type - Get the iocb type
1138  * @iocb_cmnd: iocb command code.
1139  *
1140  * This function is called by ring event handler function to get the iocb type.
1141  * This function translates the iocb command to an iocb command type used to
1142  * decide the final disposition of each completed IOCB.
1143  * The function returns
1144  * LPFC_UNKNOWN_IOCB if it is an unsupported iocb
1145  * LPFC_SOL_IOCB     if it is a solicited iocb completion
1146  * LPFC_ABORT_IOCB   if it is an abort iocb
1147  * LPFC_UNSOL_IOCB   if it is an unsolicited iocb
1148  *
1149  * The caller is not required to hold any lock.
1150  **/
1151 static lpfc_iocb_type
1152 lpfc_sli_iocb_cmd_type(uint8_t iocb_cmnd)
1153 {
1154 	lpfc_iocb_type type = LPFC_UNKNOWN_IOCB;
1155 
1156 	if (iocb_cmnd > CMD_MAX_IOCB_CMD)
1157 		return 0;
1158 
1159 	switch (iocb_cmnd) {
1160 	case CMD_XMIT_SEQUENCE_CR:
1161 	case CMD_XMIT_SEQUENCE_CX:
1162 	case CMD_XMIT_BCAST_CN:
1163 	case CMD_XMIT_BCAST_CX:
1164 	case CMD_ELS_REQUEST_CR:
1165 	case CMD_ELS_REQUEST_CX:
1166 	case CMD_CREATE_XRI_CR:
1167 	case CMD_CREATE_XRI_CX:
1168 	case CMD_GET_RPI_CN:
1169 	case CMD_XMIT_ELS_RSP_CX:
1170 	case CMD_GET_RPI_CR:
1171 	case CMD_FCP_IWRITE_CR:
1172 	case CMD_FCP_IWRITE_CX:
1173 	case CMD_FCP_IREAD_CR:
1174 	case CMD_FCP_IREAD_CX:
1175 	case CMD_FCP_ICMND_CR:
1176 	case CMD_FCP_ICMND_CX:
1177 	case CMD_FCP_TSEND_CX:
1178 	case CMD_FCP_TRSP_CX:
1179 	case CMD_FCP_TRECEIVE_CX:
1180 	case CMD_FCP_AUTO_TRSP_CX:
1181 	case CMD_ADAPTER_MSG:
1182 	case CMD_ADAPTER_DUMP:
1183 	case CMD_XMIT_SEQUENCE64_CR:
1184 	case CMD_XMIT_SEQUENCE64_CX:
1185 	case CMD_XMIT_BCAST64_CN:
1186 	case CMD_XMIT_BCAST64_CX:
1187 	case CMD_ELS_REQUEST64_CR:
1188 	case CMD_ELS_REQUEST64_CX:
1189 	case CMD_FCP_IWRITE64_CR:
1190 	case CMD_FCP_IWRITE64_CX:
1191 	case CMD_FCP_IREAD64_CR:
1192 	case CMD_FCP_IREAD64_CX:
1193 	case CMD_FCP_ICMND64_CR:
1194 	case CMD_FCP_ICMND64_CX:
1195 	case CMD_FCP_TSEND64_CX:
1196 	case CMD_FCP_TRSP64_CX:
1197 	case CMD_FCP_TRECEIVE64_CX:
1198 	case CMD_GEN_REQUEST64_CR:
1199 	case CMD_GEN_REQUEST64_CX:
1200 	case CMD_XMIT_ELS_RSP64_CX:
1201 	case DSSCMD_IWRITE64_CR:
1202 	case DSSCMD_IWRITE64_CX:
1203 	case DSSCMD_IREAD64_CR:
1204 	case DSSCMD_IREAD64_CX:
1205 		type = LPFC_SOL_IOCB;
1206 		break;
1207 	case CMD_ABORT_XRI_CN:
1208 	case CMD_ABORT_XRI_CX:
1209 	case CMD_CLOSE_XRI_CN:
1210 	case CMD_CLOSE_XRI_CX:
1211 	case CMD_XRI_ABORTED_CX:
1212 	case CMD_ABORT_MXRI64_CN:
1213 	case CMD_XMIT_BLS_RSP64_CX:
1214 		type = LPFC_ABORT_IOCB;
1215 		break;
1216 	case CMD_RCV_SEQUENCE_CX:
1217 	case CMD_RCV_ELS_REQ_CX:
1218 	case CMD_RCV_SEQUENCE64_CX:
1219 	case CMD_RCV_ELS_REQ64_CX:
1220 	case CMD_ASYNC_STATUS:
1221 	case CMD_IOCB_RCV_SEQ64_CX:
1222 	case CMD_IOCB_RCV_ELS64_CX:
1223 	case CMD_IOCB_RCV_CONT64_CX:
1224 	case CMD_IOCB_RET_XRI64_CX:
1225 		type = LPFC_UNSOL_IOCB;
1226 		break;
1227 	case CMD_IOCB_XMIT_MSEQ64_CR:
1228 	case CMD_IOCB_XMIT_MSEQ64_CX:
1229 	case CMD_IOCB_RCV_SEQ_LIST64_CX:
1230 	case CMD_IOCB_RCV_ELS_LIST64_CX:
1231 	case CMD_IOCB_CLOSE_EXTENDED_CN:
1232 	case CMD_IOCB_ABORT_EXTENDED_CN:
1233 	case CMD_IOCB_RET_HBQE64_CN:
1234 	case CMD_IOCB_FCP_IBIDIR64_CR:
1235 	case CMD_IOCB_FCP_IBIDIR64_CX:
1236 	case CMD_IOCB_FCP_ITASKMGT64_CX:
1237 	case CMD_IOCB_LOGENTRY_CN:
1238 	case CMD_IOCB_LOGENTRY_ASYNC_CN:
1239 		printk("%s - Unhandled SLI-3 Command x%x\n",
1240 				__func__, iocb_cmnd);
1241 		type = LPFC_UNKNOWN_IOCB;
1242 		break;
1243 	default:
1244 		type = LPFC_UNKNOWN_IOCB;
1245 		break;
1246 	}
1247 
1248 	return type;
1249 }
1250 
1251 /**
1252  * lpfc_sli_ring_map - Issue config_ring mbox for all rings
1253  * @phba: Pointer to HBA context object.
1254  *
1255  * This function is called from SLI initialization code
1256  * to configure every ring of the HBA's SLI interface. The
1257  * caller is not required to hold any lock. This function issues
1258  * a config_ring mailbox command for each ring.
1259  * This function returns zero if successful else returns a negative
1260  * error code.
1261  **/
1262 static int
1263 lpfc_sli_ring_map(struct lpfc_hba *phba)
1264 {
1265 	struct lpfc_sli *psli = &phba->sli;
1266 	LPFC_MBOXQ_t *pmb;
1267 	MAILBOX_t *pmbox;
1268 	int i, rc, ret = 0;
1269 
1270 	pmb = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
1271 	if (!pmb)
1272 		return -ENOMEM;
1273 	pmbox = &pmb->u.mb;
1274 	phba->link_state = LPFC_INIT_MBX_CMDS;
1275 	for (i = 0; i < psli->num_rings; i++) {
1276 		lpfc_config_ring(phba, i, pmb);
1277 		rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
1278 		if (rc != MBX_SUCCESS) {
1279 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
1280 					"0446 Adapter failed to init (%d), "
1281 					"mbxCmd x%x CFG_RING, mbxStatus x%x, "
1282 					"ring %d\n",
1283 					rc, pmbox->mbxCommand,
1284 					pmbox->mbxStatus, i);
1285 			phba->link_state = LPFC_HBA_ERROR;
1286 			ret = -ENXIO;
1287 			break;
1288 		}
1289 	}
1290 	mempool_free(pmb, phba->mbox_mem_pool);
1291 	return ret;
1292 }
1293 
1294 /**
1295  * lpfc_sli_ringtxcmpl_put - Adds new iocb to the txcmplq
1296  * @phba: Pointer to HBA context object.
1297  * @pring: Pointer to driver SLI ring object.
1298  * @piocb: Pointer to the driver iocb object.
1299  *
1300  * This function is called with hbalock held. The function adds the
1301  * new iocb to txcmplq of the given ring. This function always returns
1302  * 0. If this function is called for ELS ring, this function checks if
1303  * there is a vport associated with the ELS command. This function also
1304  * starts els_tmofunc timer if this is an ELS command.
1305  **/
1306 static int
1307 lpfc_sli_ringtxcmpl_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
1308 			struct lpfc_iocbq *piocb)
1309 {
1310 	list_add_tail(&piocb->list, &pring->txcmplq);
1311 	piocb->iocb_flag |= LPFC_IO_ON_TXCMPLQ;
1312 	pring->txcmplq_cnt++;
1313 	if (pring->txcmplq_cnt > pring->txcmplq_max)
1314 		pring->txcmplq_max = pring->txcmplq_cnt;
1315 
1316 	if ((unlikely(pring->ringno == LPFC_ELS_RING)) &&
1317 	   (piocb->iocb.ulpCommand != CMD_ABORT_XRI_CN) &&
1318 	   (piocb->iocb.ulpCommand != CMD_CLOSE_XRI_CN)) {
1319 		if (!piocb->vport)
1320 			BUG();
1321 		else
1322 			mod_timer(&piocb->vport->els_tmofunc,
1323 				  jiffies + HZ * (phba->fc_ratov << 1));
1324 	}
1325 
1326 
1327 	return 0;
1328 }
1329 
1330 /**
1331  * lpfc_sli_ringtx_get - Get first element of the txq
1332  * @phba: Pointer to HBA context object.
1333  * @pring: Pointer to driver SLI ring object.
1334  *
1335  * This function is called with hbalock held to get next
1336  * iocb in txq of the given ring. If there is any iocb in
1337  * the txq, the function returns first iocb in the list after
1338  * removing the iocb from the list, else it returns NULL.
1339  **/
1340 struct lpfc_iocbq *
1341 lpfc_sli_ringtx_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1342 {
1343 	struct lpfc_iocbq *cmd_iocb;
1344 
1345 	list_remove_head((&pring->txq), cmd_iocb, struct lpfc_iocbq, list);
1346 	if (cmd_iocb != NULL)
1347 		pring->txq_cnt--;
1348 	return cmd_iocb;
1349 }
1350 
1351 /**
1352  * lpfc_sli_next_iocb_slot - Get next iocb slot in the ring
1353  * @phba: Pointer to HBA context object.
1354  * @pring: Pointer to driver SLI ring object.
1355  *
1356  * This function is called with hbalock held and the caller must post the
1357  * iocb without releasing the lock. If the caller releases the lock,
1358  * iocb slot returned by the function is not guaranteed to be available.
1359  * The function returns pointer to the next available iocb slot if there
1360  * is available slot in the ring, else it returns NULL.
1361  * If the get index of the ring is ahead of the put index, the function
1362  * will post an error attention event to the worker thread to take the
1363  * HBA to offline state.
1364  **/
1365 static IOCB_t *
1366 lpfc_sli_next_iocb_slot (struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1367 {
1368 	struct lpfc_pgp *pgp = &phba->port_gp[pring->ringno];
1369 	uint32_t  max_cmd_idx = pring->sli.sli3.numCiocb;
1370 	if ((pring->sli.sli3.next_cmdidx == pring->sli.sli3.cmdidx) &&
1371 	   (++pring->sli.sli3.next_cmdidx >= max_cmd_idx))
1372 		pring->sli.sli3.next_cmdidx = 0;
1373 
1374 	if (unlikely(pring->sli.sli3.local_getidx ==
1375 		pring->sli.sli3.next_cmdidx)) {
1376 
1377 		pring->sli.sli3.local_getidx = le32_to_cpu(pgp->cmdGetInx);
1378 
1379 		if (unlikely(pring->sli.sli3.local_getidx >= max_cmd_idx)) {
1380 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
1381 					"0315 Ring %d issue: portCmdGet %d "
1382 					"is bigger than cmd ring %d\n",
1383 					pring->ringno,
1384 					pring->sli.sli3.local_getidx,
1385 					max_cmd_idx);
1386 
1387 			phba->link_state = LPFC_HBA_ERROR;
1388 			/*
1389 			 * All error attention handlers are posted to
1390 			 * worker thread
1391 			 */
1392 			phba->work_ha |= HA_ERATT;
1393 			phba->work_hs = HS_FFER3;
1394 
1395 			lpfc_worker_wake_up(phba);
1396 
1397 			return NULL;
1398 		}
1399 
1400 		if (pring->sli.sli3.local_getidx == pring->sli.sli3.next_cmdidx)
1401 			return NULL;
1402 	}
1403 
1404 	return lpfc_cmd_iocb(phba, pring);
1405 }
1406 
1407 /**
1408  * lpfc_sli_next_iotag - Get an iotag for the iocb
1409  * @phba: Pointer to HBA context object.
1410  * @iocbq: Pointer to driver iocb object.
1411  *
1412  * This function gets an iotag for the iocb. If there is no unused iotag and
1413  * the iocbq_lookup_len < 0xffff, this function allocates a bigger iotag_lookup
1414  * array and assigns a new iotag.
1415  * The function returns the allocated iotag if successful, else returns zero.
1416  * Zero is not a valid iotag.
1417  * The caller is not required to hold any lock.
1418  **/
1419 uint16_t
1420 lpfc_sli_next_iotag(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
1421 {
1422 	struct lpfc_iocbq **new_arr;
1423 	struct lpfc_iocbq **old_arr;
1424 	size_t new_len;
1425 	struct lpfc_sli *psli = &phba->sli;
1426 	uint16_t iotag;
1427 
1428 	spin_lock_irq(&phba->hbalock);
1429 	iotag = psli->last_iotag;
1430 	if(++iotag < psli->iocbq_lookup_len) {
1431 		psli->last_iotag = iotag;
1432 		psli->iocbq_lookup[iotag] = iocbq;
1433 		spin_unlock_irq(&phba->hbalock);
1434 		iocbq->iotag = iotag;
1435 		return iotag;
1436 	} else if (psli->iocbq_lookup_len < (0xffff
1437 					   - LPFC_IOCBQ_LOOKUP_INCREMENT)) {
1438 		new_len = psli->iocbq_lookup_len + LPFC_IOCBQ_LOOKUP_INCREMENT;
1439 		spin_unlock_irq(&phba->hbalock);
1440 		new_arr = kzalloc(new_len * sizeof (struct lpfc_iocbq *),
1441 				  GFP_KERNEL);
1442 		if (new_arr) {
1443 			spin_lock_irq(&phba->hbalock);
1444 			old_arr = psli->iocbq_lookup;
1445 			if (new_len <= psli->iocbq_lookup_len) {
1446 				/* highly unprobable case */
1447 				kfree(new_arr);
1448 				iotag = psli->last_iotag;
1449 				if(++iotag < psli->iocbq_lookup_len) {
1450 					psli->last_iotag = iotag;
1451 					psli->iocbq_lookup[iotag] = iocbq;
1452 					spin_unlock_irq(&phba->hbalock);
1453 					iocbq->iotag = iotag;
1454 					return iotag;
1455 				}
1456 				spin_unlock_irq(&phba->hbalock);
1457 				return 0;
1458 			}
1459 			if (psli->iocbq_lookup)
1460 				memcpy(new_arr, old_arr,
1461 				       ((psli->last_iotag  + 1) *
1462 					sizeof (struct lpfc_iocbq *)));
1463 			psli->iocbq_lookup = new_arr;
1464 			psli->iocbq_lookup_len = new_len;
1465 			psli->last_iotag = iotag;
1466 			psli->iocbq_lookup[iotag] = iocbq;
1467 			spin_unlock_irq(&phba->hbalock);
1468 			iocbq->iotag = iotag;
1469 			kfree(old_arr);
1470 			return iotag;
1471 		}
1472 	} else
1473 		spin_unlock_irq(&phba->hbalock);
1474 
1475 	lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
1476 			"0318 Failed to allocate IOTAG.last IOTAG is %d\n",
1477 			psli->last_iotag);
1478 
1479 	return 0;
1480 }
1481 
1482 /**
1483  * lpfc_sli_submit_iocb - Submit an iocb to the firmware
1484  * @phba: Pointer to HBA context object.
1485  * @pring: Pointer to driver SLI ring object.
1486  * @iocb: Pointer to iocb slot in the ring.
1487  * @nextiocb: Pointer to driver iocb object which need to be
1488  *            posted to firmware.
1489  *
1490  * This function is called with hbalock held to post a new iocb to
1491  * the firmware. This function copies the new iocb to ring iocb slot and
1492  * updates the ring pointers. It adds the new iocb to txcmplq if there is
1493  * a completion call back for this iocb else the function will free the
1494  * iocb object.
1495  **/
1496 static void
1497 lpfc_sli_submit_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
1498 		IOCB_t *iocb, struct lpfc_iocbq *nextiocb)
1499 {
1500 	/*
1501 	 * Set up an iotag
1502 	 */
1503 	nextiocb->iocb.ulpIoTag = (nextiocb->iocb_cmpl) ? nextiocb->iotag : 0;
1504 
1505 
1506 	if (pring->ringno == LPFC_ELS_RING) {
1507 		lpfc_debugfs_slow_ring_trc(phba,
1508 			"IOCB cmd ring:   wd4:x%08x wd6:x%08x wd7:x%08x",
1509 			*(((uint32_t *) &nextiocb->iocb) + 4),
1510 			*(((uint32_t *) &nextiocb->iocb) + 6),
1511 			*(((uint32_t *) &nextiocb->iocb) + 7));
1512 	}
1513 
1514 	/*
1515 	 * Issue iocb command to adapter
1516 	 */
1517 	lpfc_sli_pcimem_bcopy(&nextiocb->iocb, iocb, phba->iocb_cmd_size);
1518 	wmb();
1519 	pring->stats.iocb_cmd++;
1520 
1521 	/*
1522 	 * If there is no completion routine to call, we can release the
1523 	 * IOCB buffer back right now. For IOCBs, like QUE_RING_BUF,
1524 	 * that have no rsp ring completion, iocb_cmpl MUST be NULL.
1525 	 */
1526 	if (nextiocb->iocb_cmpl)
1527 		lpfc_sli_ringtxcmpl_put(phba, pring, nextiocb);
1528 	else
1529 		__lpfc_sli_release_iocbq(phba, nextiocb);
1530 
1531 	/*
1532 	 * Let the HBA know what IOCB slot will be the next one the
1533 	 * driver will put a command into.
1534 	 */
1535 	pring->sli.sli3.cmdidx = pring->sli.sli3.next_cmdidx;
1536 	writel(pring->sli.sli3.cmdidx, &phba->host_gp[pring->ringno].cmdPutInx);
1537 }
1538 
1539 /**
1540  * lpfc_sli_update_full_ring - Update the chip attention register
1541  * @phba: Pointer to HBA context object.
1542  * @pring: Pointer to driver SLI ring object.
1543  *
1544  * The caller is not required to hold any lock for calling this function.
1545  * This function updates the chip attention bits for the ring to inform firmware
1546  * that there are pending work to be done for this ring and requests an
1547  * interrupt when there is space available in the ring. This function is
1548  * called when the driver is unable to post more iocbs to the ring due
1549  * to unavailability of space in the ring.
1550  **/
1551 static void
1552 lpfc_sli_update_full_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1553 {
1554 	int ringno = pring->ringno;
1555 
1556 	pring->flag |= LPFC_CALL_RING_AVAILABLE;
1557 
1558 	wmb();
1559 
1560 	/*
1561 	 * Set ring 'ringno' to SET R0CE_REQ in Chip Att register.
1562 	 * The HBA will tell us when an IOCB entry is available.
1563 	 */
1564 	writel((CA_R0ATT|CA_R0CE_REQ) << (ringno*4), phba->CAregaddr);
1565 	readl(phba->CAregaddr); /* flush */
1566 
1567 	pring->stats.iocb_cmd_full++;
1568 }
1569 
1570 /**
1571  * lpfc_sli_update_ring - Update chip attention register
1572  * @phba: Pointer to HBA context object.
1573  * @pring: Pointer to driver SLI ring object.
1574  *
1575  * This function updates the chip attention register bit for the
1576  * given ring to inform HBA that there is more work to be done
1577  * in this ring. The caller is not required to hold any lock.
1578  **/
1579 static void
1580 lpfc_sli_update_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1581 {
1582 	int ringno = pring->ringno;
1583 
1584 	/*
1585 	 * Tell the HBA that there is work to do in this ring.
1586 	 */
1587 	if (!(phba->sli3_options & LPFC_SLI3_CRP_ENABLED)) {
1588 		wmb();
1589 		writel(CA_R0ATT << (ringno * 4), phba->CAregaddr);
1590 		readl(phba->CAregaddr); /* flush */
1591 	}
1592 }
1593 
1594 /**
1595  * lpfc_sli_resume_iocb - Process iocbs in the txq
1596  * @phba: Pointer to HBA context object.
1597  * @pring: Pointer to driver SLI ring object.
1598  *
1599  * This function is called with hbalock held to post pending iocbs
1600  * in the txq to the firmware. This function is called when driver
1601  * detects space available in the ring.
1602  **/
1603 static void
1604 lpfc_sli_resume_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
1605 {
1606 	IOCB_t *iocb;
1607 	struct lpfc_iocbq *nextiocb;
1608 
1609 	/*
1610 	 * Check to see if:
1611 	 *  (a) there is anything on the txq to send
1612 	 *  (b) link is up
1613 	 *  (c) link attention events can be processed (fcp ring only)
1614 	 *  (d) IOCB processing is not blocked by the outstanding mbox command.
1615 	 */
1616 	if (pring->txq_cnt &&
1617 	    lpfc_is_link_up(phba) &&
1618 	    (pring->ringno != phba->sli.fcp_ring ||
1619 	     phba->sli.sli_flag & LPFC_PROCESS_LA)) {
1620 
1621 		while ((iocb = lpfc_sli_next_iocb_slot(phba, pring)) &&
1622 		       (nextiocb = lpfc_sli_ringtx_get(phba, pring)))
1623 			lpfc_sli_submit_iocb(phba, pring, iocb, nextiocb);
1624 
1625 		if (iocb)
1626 			lpfc_sli_update_ring(phba, pring);
1627 		else
1628 			lpfc_sli_update_full_ring(phba, pring);
1629 	}
1630 
1631 	return;
1632 }
1633 
1634 /**
1635  * lpfc_sli_next_hbq_slot - Get next hbq entry for the HBQ
1636  * @phba: Pointer to HBA context object.
1637  * @hbqno: HBQ number.
1638  *
1639  * This function is called with hbalock held to get the next
1640  * available slot for the given HBQ. If there is free slot
1641  * available for the HBQ it will return pointer to the next available
1642  * HBQ entry else it will return NULL.
1643  **/
1644 static struct lpfc_hbq_entry *
1645 lpfc_sli_next_hbq_slot(struct lpfc_hba *phba, uint32_t hbqno)
1646 {
1647 	struct hbq_s *hbqp = &phba->hbqs[hbqno];
1648 
1649 	if (hbqp->next_hbqPutIdx == hbqp->hbqPutIdx &&
1650 	    ++hbqp->next_hbqPutIdx >= hbqp->entry_count)
1651 		hbqp->next_hbqPutIdx = 0;
1652 
1653 	if (unlikely(hbqp->local_hbqGetIdx == hbqp->next_hbqPutIdx)) {
1654 		uint32_t raw_index = phba->hbq_get[hbqno];
1655 		uint32_t getidx = le32_to_cpu(raw_index);
1656 
1657 		hbqp->local_hbqGetIdx = getidx;
1658 
1659 		if (unlikely(hbqp->local_hbqGetIdx >= hbqp->entry_count)) {
1660 			lpfc_printf_log(phba, KERN_ERR,
1661 					LOG_SLI | LOG_VPORT,
1662 					"1802 HBQ %d: local_hbqGetIdx "
1663 					"%u is > than hbqp->entry_count %u\n",
1664 					hbqno, hbqp->local_hbqGetIdx,
1665 					hbqp->entry_count);
1666 
1667 			phba->link_state = LPFC_HBA_ERROR;
1668 			return NULL;
1669 		}
1670 
1671 		if (hbqp->local_hbqGetIdx == hbqp->next_hbqPutIdx)
1672 			return NULL;
1673 	}
1674 
1675 	return (struct lpfc_hbq_entry *) phba->hbqs[hbqno].hbq_virt +
1676 			hbqp->hbqPutIdx;
1677 }
1678 
1679 /**
1680  * lpfc_sli_hbqbuf_free_all - Free all the hbq buffers
1681  * @phba: Pointer to HBA context object.
1682  *
1683  * This function is called with no lock held to free all the
1684  * hbq buffers while uninitializing the SLI interface. It also
1685  * frees the HBQ buffers returned by the firmware but not yet
1686  * processed by the upper layers.
1687  **/
1688 void
1689 lpfc_sli_hbqbuf_free_all(struct lpfc_hba *phba)
1690 {
1691 	struct lpfc_dmabuf *dmabuf, *next_dmabuf;
1692 	struct hbq_dmabuf *hbq_buf;
1693 	unsigned long flags;
1694 	int i, hbq_count;
1695 	uint32_t hbqno;
1696 
1697 	hbq_count = lpfc_sli_hbq_count();
1698 	/* Return all memory used by all HBQs */
1699 	spin_lock_irqsave(&phba->hbalock, flags);
1700 	for (i = 0; i < hbq_count; ++i) {
1701 		list_for_each_entry_safe(dmabuf, next_dmabuf,
1702 				&phba->hbqs[i].hbq_buffer_list, list) {
1703 			hbq_buf = container_of(dmabuf, struct hbq_dmabuf, dbuf);
1704 			list_del(&hbq_buf->dbuf.list);
1705 			(phba->hbqs[i].hbq_free_buffer)(phba, hbq_buf);
1706 		}
1707 		phba->hbqs[i].buffer_count = 0;
1708 	}
1709 	/* Return all HBQ buffer that are in-fly */
1710 	list_for_each_entry_safe(dmabuf, next_dmabuf, &phba->rb_pend_list,
1711 				 list) {
1712 		hbq_buf = container_of(dmabuf, struct hbq_dmabuf, dbuf);
1713 		list_del(&hbq_buf->dbuf.list);
1714 		if (hbq_buf->tag == -1) {
1715 			(phba->hbqs[LPFC_ELS_HBQ].hbq_free_buffer)
1716 				(phba, hbq_buf);
1717 		} else {
1718 			hbqno = hbq_buf->tag >> 16;
1719 			if (hbqno >= LPFC_MAX_HBQS)
1720 				(phba->hbqs[LPFC_ELS_HBQ].hbq_free_buffer)
1721 					(phba, hbq_buf);
1722 			else
1723 				(phba->hbqs[hbqno].hbq_free_buffer)(phba,
1724 					hbq_buf);
1725 		}
1726 	}
1727 
1728 	/* Mark the HBQs not in use */
1729 	phba->hbq_in_use = 0;
1730 	spin_unlock_irqrestore(&phba->hbalock, flags);
1731 }
1732 
1733 /**
1734  * lpfc_sli_hbq_to_firmware - Post the hbq buffer to firmware
1735  * @phba: Pointer to HBA context object.
1736  * @hbqno: HBQ number.
1737  * @hbq_buf: Pointer to HBQ buffer.
1738  *
1739  * This function is called with the hbalock held to post a
1740  * hbq buffer to the firmware. If the function finds an empty
1741  * slot in the HBQ, it will post the buffer. The function will return
1742  * pointer to the hbq entry if it successfully post the buffer
1743  * else it will return NULL.
1744  **/
1745 static int
1746 lpfc_sli_hbq_to_firmware(struct lpfc_hba *phba, uint32_t hbqno,
1747 			 struct hbq_dmabuf *hbq_buf)
1748 {
1749 	return phba->lpfc_sli_hbq_to_firmware(phba, hbqno, hbq_buf);
1750 }
1751 
1752 /**
1753  * lpfc_sli_hbq_to_firmware_s3 - Post the hbq buffer to SLI3 firmware
1754  * @phba: Pointer to HBA context object.
1755  * @hbqno: HBQ number.
1756  * @hbq_buf: Pointer to HBQ buffer.
1757  *
1758  * This function is called with the hbalock held to post a hbq buffer to the
1759  * firmware. If the function finds an empty slot in the HBQ, it will post the
1760  * buffer and place it on the hbq_buffer_list. The function will return zero if
1761  * it successfully post the buffer else it will return an error.
1762  **/
1763 static int
1764 lpfc_sli_hbq_to_firmware_s3(struct lpfc_hba *phba, uint32_t hbqno,
1765 			    struct hbq_dmabuf *hbq_buf)
1766 {
1767 	struct lpfc_hbq_entry *hbqe;
1768 	dma_addr_t physaddr = hbq_buf->dbuf.phys;
1769 
1770 	/* Get next HBQ entry slot to use */
1771 	hbqe = lpfc_sli_next_hbq_slot(phba, hbqno);
1772 	if (hbqe) {
1773 		struct hbq_s *hbqp = &phba->hbqs[hbqno];
1774 
1775 		hbqe->bde.addrHigh = le32_to_cpu(putPaddrHigh(physaddr));
1776 		hbqe->bde.addrLow  = le32_to_cpu(putPaddrLow(physaddr));
1777 		hbqe->bde.tus.f.bdeSize = hbq_buf->size;
1778 		hbqe->bde.tus.f.bdeFlags = 0;
1779 		hbqe->bde.tus.w = le32_to_cpu(hbqe->bde.tus.w);
1780 		hbqe->buffer_tag = le32_to_cpu(hbq_buf->tag);
1781 				/* Sync SLIM */
1782 		hbqp->hbqPutIdx = hbqp->next_hbqPutIdx;
1783 		writel(hbqp->hbqPutIdx, phba->hbq_put + hbqno);
1784 				/* flush */
1785 		readl(phba->hbq_put + hbqno);
1786 		list_add_tail(&hbq_buf->dbuf.list, &hbqp->hbq_buffer_list);
1787 		return 0;
1788 	} else
1789 		return -ENOMEM;
1790 }
1791 
1792 /**
1793  * lpfc_sli_hbq_to_firmware_s4 - Post the hbq buffer to SLI4 firmware
1794  * @phba: Pointer to HBA context object.
1795  * @hbqno: HBQ number.
1796  * @hbq_buf: Pointer to HBQ buffer.
1797  *
1798  * This function is called with the hbalock held to post an RQE to the SLI4
1799  * firmware. If able to post the RQE to the RQ it will queue the hbq entry to
1800  * the hbq_buffer_list and return zero, otherwise it will return an error.
1801  **/
1802 static int
1803 lpfc_sli_hbq_to_firmware_s4(struct lpfc_hba *phba, uint32_t hbqno,
1804 			    struct hbq_dmabuf *hbq_buf)
1805 {
1806 	int rc;
1807 	struct lpfc_rqe hrqe;
1808 	struct lpfc_rqe drqe;
1809 
1810 	hrqe.address_lo = putPaddrLow(hbq_buf->hbuf.phys);
1811 	hrqe.address_hi = putPaddrHigh(hbq_buf->hbuf.phys);
1812 	drqe.address_lo = putPaddrLow(hbq_buf->dbuf.phys);
1813 	drqe.address_hi = putPaddrHigh(hbq_buf->dbuf.phys);
1814 	rc = lpfc_sli4_rq_put(phba->sli4_hba.hdr_rq, phba->sli4_hba.dat_rq,
1815 			      &hrqe, &drqe);
1816 	if (rc < 0)
1817 		return rc;
1818 	hbq_buf->tag = rc;
1819 	list_add_tail(&hbq_buf->dbuf.list, &phba->hbqs[hbqno].hbq_buffer_list);
1820 	return 0;
1821 }
1822 
1823 /* HBQ for ELS and CT traffic. */
1824 static struct lpfc_hbq_init lpfc_els_hbq = {
1825 	.rn = 1,
1826 	.entry_count = 256,
1827 	.mask_count = 0,
1828 	.profile = 0,
1829 	.ring_mask = (1 << LPFC_ELS_RING),
1830 	.buffer_count = 0,
1831 	.init_count = 40,
1832 	.add_count = 40,
1833 };
1834 
1835 /* HBQ for the extra ring if needed */
1836 static struct lpfc_hbq_init lpfc_extra_hbq = {
1837 	.rn = 1,
1838 	.entry_count = 200,
1839 	.mask_count = 0,
1840 	.profile = 0,
1841 	.ring_mask = (1 << LPFC_EXTRA_RING),
1842 	.buffer_count = 0,
1843 	.init_count = 0,
1844 	.add_count = 5,
1845 };
1846 
1847 /* Array of HBQs */
1848 struct lpfc_hbq_init *lpfc_hbq_defs[] = {
1849 	&lpfc_els_hbq,
1850 	&lpfc_extra_hbq,
1851 };
1852 
1853 /**
1854  * lpfc_sli_hbqbuf_fill_hbqs - Post more hbq buffers to HBQ
1855  * @phba: Pointer to HBA context object.
1856  * @hbqno: HBQ number.
1857  * @count: Number of HBQ buffers to be posted.
1858  *
1859  * This function is called with no lock held to post more hbq buffers to the
1860  * given HBQ. The function returns the number of HBQ buffers successfully
1861  * posted.
1862  **/
1863 static int
1864 lpfc_sli_hbqbuf_fill_hbqs(struct lpfc_hba *phba, uint32_t hbqno, uint32_t count)
1865 {
1866 	uint32_t i, posted = 0;
1867 	unsigned long flags;
1868 	struct hbq_dmabuf *hbq_buffer;
1869 	LIST_HEAD(hbq_buf_list);
1870 	if (!phba->hbqs[hbqno].hbq_alloc_buffer)
1871 		return 0;
1872 
1873 	if ((phba->hbqs[hbqno].buffer_count + count) >
1874 	    lpfc_hbq_defs[hbqno]->entry_count)
1875 		count = lpfc_hbq_defs[hbqno]->entry_count -
1876 					phba->hbqs[hbqno].buffer_count;
1877 	if (!count)
1878 		return 0;
1879 	/* Allocate HBQ entries */
1880 	for (i = 0; i < count; i++) {
1881 		hbq_buffer = (phba->hbqs[hbqno].hbq_alloc_buffer)(phba);
1882 		if (!hbq_buffer)
1883 			break;
1884 		list_add_tail(&hbq_buffer->dbuf.list, &hbq_buf_list);
1885 	}
1886 	/* Check whether HBQ is still in use */
1887 	spin_lock_irqsave(&phba->hbalock, flags);
1888 	if (!phba->hbq_in_use)
1889 		goto err;
1890 	while (!list_empty(&hbq_buf_list)) {
1891 		list_remove_head(&hbq_buf_list, hbq_buffer, struct hbq_dmabuf,
1892 				 dbuf.list);
1893 		hbq_buffer->tag = (phba->hbqs[hbqno].buffer_count |
1894 				      (hbqno << 16));
1895 		if (!lpfc_sli_hbq_to_firmware(phba, hbqno, hbq_buffer)) {
1896 			phba->hbqs[hbqno].buffer_count++;
1897 			posted++;
1898 		} else
1899 			(phba->hbqs[hbqno].hbq_free_buffer)(phba, hbq_buffer);
1900 	}
1901 	spin_unlock_irqrestore(&phba->hbalock, flags);
1902 	return posted;
1903 err:
1904 	spin_unlock_irqrestore(&phba->hbalock, flags);
1905 	while (!list_empty(&hbq_buf_list)) {
1906 		list_remove_head(&hbq_buf_list, hbq_buffer, struct hbq_dmabuf,
1907 				 dbuf.list);
1908 		(phba->hbqs[hbqno].hbq_free_buffer)(phba, hbq_buffer);
1909 	}
1910 	return 0;
1911 }
1912 
1913 /**
1914  * lpfc_sli_hbqbuf_add_hbqs - Post more HBQ buffers to firmware
1915  * @phba: Pointer to HBA context object.
1916  * @qno: HBQ number.
1917  *
1918  * This function posts more buffers to the HBQ. This function
1919  * is called with no lock held. The function returns the number of HBQ entries
1920  * successfully allocated.
1921  **/
1922 int
1923 lpfc_sli_hbqbuf_add_hbqs(struct lpfc_hba *phba, uint32_t qno)
1924 {
1925 	if (phba->sli_rev == LPFC_SLI_REV4)
1926 		return 0;
1927 	else
1928 		return lpfc_sli_hbqbuf_fill_hbqs(phba, qno,
1929 					 lpfc_hbq_defs[qno]->add_count);
1930 }
1931 
1932 /**
1933  * lpfc_sli_hbqbuf_init_hbqs - Post initial buffers to the HBQ
1934  * @phba: Pointer to HBA context object.
1935  * @qno:  HBQ queue number.
1936  *
1937  * This function is called from SLI initialization code path with
1938  * no lock held to post initial HBQ buffers to firmware. The
1939  * function returns the number of HBQ entries successfully allocated.
1940  **/
1941 static int
1942 lpfc_sli_hbqbuf_init_hbqs(struct lpfc_hba *phba, uint32_t qno)
1943 {
1944 	if (phba->sli_rev == LPFC_SLI_REV4)
1945 		return lpfc_sli_hbqbuf_fill_hbqs(phba, qno,
1946 					lpfc_hbq_defs[qno]->entry_count);
1947 	else
1948 		return lpfc_sli_hbqbuf_fill_hbqs(phba, qno,
1949 					 lpfc_hbq_defs[qno]->init_count);
1950 }
1951 
1952 /**
1953  * lpfc_sli_hbqbuf_get - Remove the first hbq off of an hbq list
1954  * @phba: Pointer to HBA context object.
1955  * @hbqno: HBQ number.
1956  *
1957  * This function removes the first hbq buffer on an hbq list and returns a
1958  * pointer to that buffer. If it finds no buffers on the list it returns NULL.
1959  **/
1960 static struct hbq_dmabuf *
1961 lpfc_sli_hbqbuf_get(struct list_head *rb_list)
1962 {
1963 	struct lpfc_dmabuf *d_buf;
1964 
1965 	list_remove_head(rb_list, d_buf, struct lpfc_dmabuf, list);
1966 	if (!d_buf)
1967 		return NULL;
1968 	return container_of(d_buf, struct hbq_dmabuf, dbuf);
1969 }
1970 
1971 /**
1972  * lpfc_sli_hbqbuf_find - Find the hbq buffer associated with a tag
1973  * @phba: Pointer to HBA context object.
1974  * @tag: Tag of the hbq buffer.
1975  *
1976  * This function is called with hbalock held. This function searches
1977  * for the hbq buffer associated with the given tag in the hbq buffer
1978  * list. If it finds the hbq buffer, it returns the hbq_buffer other wise
1979  * it returns NULL.
1980  **/
1981 static struct hbq_dmabuf *
1982 lpfc_sli_hbqbuf_find(struct lpfc_hba *phba, uint32_t tag)
1983 {
1984 	struct lpfc_dmabuf *d_buf;
1985 	struct hbq_dmabuf *hbq_buf;
1986 	uint32_t hbqno;
1987 
1988 	hbqno = tag >> 16;
1989 	if (hbqno >= LPFC_MAX_HBQS)
1990 		return NULL;
1991 
1992 	spin_lock_irq(&phba->hbalock);
1993 	list_for_each_entry(d_buf, &phba->hbqs[hbqno].hbq_buffer_list, list) {
1994 		hbq_buf = container_of(d_buf, struct hbq_dmabuf, dbuf);
1995 		if (hbq_buf->tag == tag) {
1996 			spin_unlock_irq(&phba->hbalock);
1997 			return hbq_buf;
1998 		}
1999 	}
2000 	spin_unlock_irq(&phba->hbalock);
2001 	lpfc_printf_log(phba, KERN_ERR, LOG_SLI | LOG_VPORT,
2002 			"1803 Bad hbq tag. Data: x%x x%x\n",
2003 			tag, phba->hbqs[tag >> 16].buffer_count);
2004 	return NULL;
2005 }
2006 
2007 /**
2008  * lpfc_sli_free_hbq - Give back the hbq buffer to firmware
2009  * @phba: Pointer to HBA context object.
2010  * @hbq_buffer: Pointer to HBQ buffer.
2011  *
2012  * This function is called with hbalock. This function gives back
2013  * the hbq buffer to firmware. If the HBQ does not have space to
2014  * post the buffer, it will free the buffer.
2015  **/
2016 void
2017 lpfc_sli_free_hbq(struct lpfc_hba *phba, struct hbq_dmabuf *hbq_buffer)
2018 {
2019 	uint32_t hbqno;
2020 
2021 	if (hbq_buffer) {
2022 		hbqno = hbq_buffer->tag >> 16;
2023 		if (lpfc_sli_hbq_to_firmware(phba, hbqno, hbq_buffer))
2024 			(phba->hbqs[hbqno].hbq_free_buffer)(phba, hbq_buffer);
2025 	}
2026 }
2027 
2028 /**
2029  * lpfc_sli_chk_mbx_command - Check if the mailbox is a legitimate mailbox
2030  * @mbxCommand: mailbox command code.
2031  *
2032  * This function is called by the mailbox event handler function to verify
2033  * that the completed mailbox command is a legitimate mailbox command. If the
2034  * completed mailbox is not known to the function, it will return MBX_SHUTDOWN
2035  * and the mailbox event handler will take the HBA offline.
2036  **/
2037 static int
2038 lpfc_sli_chk_mbx_command(uint8_t mbxCommand)
2039 {
2040 	uint8_t ret;
2041 
2042 	switch (mbxCommand) {
2043 	case MBX_LOAD_SM:
2044 	case MBX_READ_NV:
2045 	case MBX_WRITE_NV:
2046 	case MBX_WRITE_VPARMS:
2047 	case MBX_RUN_BIU_DIAG:
2048 	case MBX_INIT_LINK:
2049 	case MBX_DOWN_LINK:
2050 	case MBX_CONFIG_LINK:
2051 	case MBX_CONFIG_RING:
2052 	case MBX_RESET_RING:
2053 	case MBX_READ_CONFIG:
2054 	case MBX_READ_RCONFIG:
2055 	case MBX_READ_SPARM:
2056 	case MBX_READ_STATUS:
2057 	case MBX_READ_RPI:
2058 	case MBX_READ_XRI:
2059 	case MBX_READ_REV:
2060 	case MBX_READ_LNK_STAT:
2061 	case MBX_REG_LOGIN:
2062 	case MBX_UNREG_LOGIN:
2063 	case MBX_CLEAR_LA:
2064 	case MBX_DUMP_MEMORY:
2065 	case MBX_DUMP_CONTEXT:
2066 	case MBX_RUN_DIAGS:
2067 	case MBX_RESTART:
2068 	case MBX_UPDATE_CFG:
2069 	case MBX_DOWN_LOAD:
2070 	case MBX_DEL_LD_ENTRY:
2071 	case MBX_RUN_PROGRAM:
2072 	case MBX_SET_MASK:
2073 	case MBX_SET_VARIABLE:
2074 	case MBX_UNREG_D_ID:
2075 	case MBX_KILL_BOARD:
2076 	case MBX_CONFIG_FARP:
2077 	case MBX_BEACON:
2078 	case MBX_LOAD_AREA:
2079 	case MBX_RUN_BIU_DIAG64:
2080 	case MBX_CONFIG_PORT:
2081 	case MBX_READ_SPARM64:
2082 	case MBX_READ_RPI64:
2083 	case MBX_REG_LOGIN64:
2084 	case MBX_READ_TOPOLOGY:
2085 	case MBX_WRITE_WWN:
2086 	case MBX_SET_DEBUG:
2087 	case MBX_LOAD_EXP_ROM:
2088 	case MBX_ASYNCEVT_ENABLE:
2089 	case MBX_REG_VPI:
2090 	case MBX_UNREG_VPI:
2091 	case MBX_HEARTBEAT:
2092 	case MBX_PORT_CAPABILITIES:
2093 	case MBX_PORT_IOV_CONTROL:
2094 	case MBX_SLI4_CONFIG:
2095 	case MBX_SLI4_REQ_FTRS:
2096 	case MBX_REG_FCFI:
2097 	case MBX_UNREG_FCFI:
2098 	case MBX_REG_VFI:
2099 	case MBX_UNREG_VFI:
2100 	case MBX_INIT_VPI:
2101 	case MBX_INIT_VFI:
2102 	case MBX_RESUME_RPI:
2103 	case MBX_READ_EVENT_LOG_STATUS:
2104 	case MBX_READ_EVENT_LOG:
2105 	case MBX_SECURITY_MGMT:
2106 	case MBX_AUTH_PORT:
2107 	case MBX_ACCESS_VDATA:
2108 		ret = mbxCommand;
2109 		break;
2110 	default:
2111 		ret = MBX_SHUTDOWN;
2112 		break;
2113 	}
2114 	return ret;
2115 }
2116 
2117 /**
2118  * lpfc_sli_wake_mbox_wait - lpfc_sli_issue_mbox_wait mbox completion handler
2119  * @phba: Pointer to HBA context object.
2120  * @pmboxq: Pointer to mailbox command.
2121  *
2122  * This is completion handler function for mailbox commands issued from
2123  * lpfc_sli_issue_mbox_wait function. This function is called by the
2124  * mailbox event handler function with no lock held. This function
2125  * will wake up thread waiting on the wait queue pointed by context1
2126  * of the mailbox.
2127  **/
2128 void
2129 lpfc_sli_wake_mbox_wait(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
2130 {
2131 	wait_queue_head_t *pdone_q;
2132 	unsigned long drvr_flag;
2133 
2134 	/*
2135 	 * If pdone_q is empty, the driver thread gave up waiting and
2136 	 * continued running.
2137 	 */
2138 	pmboxq->mbox_flag |= LPFC_MBX_WAKE;
2139 	spin_lock_irqsave(&phba->hbalock, drvr_flag);
2140 	pdone_q = (wait_queue_head_t *) pmboxq->context1;
2141 	if (pdone_q)
2142 		wake_up_interruptible(pdone_q);
2143 	spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
2144 	return;
2145 }
2146 
2147 
2148 /**
2149  * lpfc_sli_def_mbox_cmpl - Default mailbox completion handler
2150  * @phba: Pointer to HBA context object.
2151  * @pmb: Pointer to mailbox object.
2152  *
2153  * This function is the default mailbox completion handler. It
2154  * frees the memory resources associated with the completed mailbox
2155  * command. If the completed command is a REG_LOGIN mailbox command,
2156  * this function will issue a UREG_LOGIN to re-claim the RPI.
2157  **/
2158 void
2159 lpfc_sli_def_mbox_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
2160 {
2161 	struct lpfc_vport  *vport = pmb->vport;
2162 	struct lpfc_dmabuf *mp;
2163 	struct lpfc_nodelist *ndlp;
2164 	struct Scsi_Host *shost;
2165 	uint16_t rpi, vpi;
2166 	int rc;
2167 
2168 	mp = (struct lpfc_dmabuf *) (pmb->context1);
2169 
2170 	if (mp) {
2171 		lpfc_mbuf_free(phba, mp->virt, mp->phys);
2172 		kfree(mp);
2173 	}
2174 
2175 	/*
2176 	 * If a REG_LOGIN succeeded  after node is destroyed or node
2177 	 * is in re-discovery driver need to cleanup the RPI.
2178 	 */
2179 	if (!(phba->pport->load_flag & FC_UNLOADING) &&
2180 	    pmb->u.mb.mbxCommand == MBX_REG_LOGIN64 &&
2181 	    !pmb->u.mb.mbxStatus) {
2182 		rpi = pmb->u.mb.un.varWords[0];
2183 		vpi = pmb->u.mb.un.varRegLogin.vpi;
2184 		lpfc_unreg_login(phba, vpi, rpi, pmb);
2185 		pmb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
2186 		rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
2187 		if (rc != MBX_NOT_FINISHED)
2188 			return;
2189 	}
2190 
2191 	if ((pmb->u.mb.mbxCommand == MBX_REG_VPI) &&
2192 		!(phba->pport->load_flag & FC_UNLOADING) &&
2193 		!pmb->u.mb.mbxStatus) {
2194 		shost = lpfc_shost_from_vport(vport);
2195 		spin_lock_irq(shost->host_lock);
2196 		vport->vpi_state |= LPFC_VPI_REGISTERED;
2197 		vport->fc_flag &= ~FC_VPORT_NEEDS_REG_VPI;
2198 		spin_unlock_irq(shost->host_lock);
2199 	}
2200 
2201 	if (pmb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
2202 		ndlp = (struct lpfc_nodelist *)pmb->context2;
2203 		lpfc_nlp_put(ndlp);
2204 		pmb->context2 = NULL;
2205 	}
2206 
2207 	/* Check security permission status on INIT_LINK mailbox command */
2208 	if ((pmb->u.mb.mbxCommand == MBX_INIT_LINK) &&
2209 	    (pmb->u.mb.mbxStatus == MBXERR_SEC_NO_PERMISSION))
2210 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
2211 				"2860 SLI authentication is required "
2212 				"for INIT_LINK but has not done yet\n");
2213 
2214 	if (bf_get(lpfc_mqe_command, &pmb->u.mqe) == MBX_SLI4_CONFIG)
2215 		lpfc_sli4_mbox_cmd_free(phba, pmb);
2216 	else
2217 		mempool_free(pmb, phba->mbox_mem_pool);
2218 }
2219 
2220 /**
2221  * lpfc_sli_handle_mb_event - Handle mailbox completions from firmware
2222  * @phba: Pointer to HBA context object.
2223  *
2224  * This function is called with no lock held. This function processes all
2225  * the completed mailbox commands and gives it to upper layers. The interrupt
2226  * service routine processes mailbox completion interrupt and adds completed
2227  * mailbox commands to the mboxq_cmpl queue and signals the worker thread.
2228  * Worker thread call lpfc_sli_handle_mb_event, which will return the
2229  * completed mailbox commands in mboxq_cmpl queue to the upper layers. This
2230  * function returns the mailbox commands to the upper layer by calling the
2231  * completion handler function of each mailbox.
2232  **/
2233 int
2234 lpfc_sli_handle_mb_event(struct lpfc_hba *phba)
2235 {
2236 	MAILBOX_t *pmbox;
2237 	LPFC_MBOXQ_t *pmb;
2238 	int rc;
2239 	LIST_HEAD(cmplq);
2240 
2241 	phba->sli.slistat.mbox_event++;
2242 
2243 	/* Get all completed mailboxe buffers into the cmplq */
2244 	spin_lock_irq(&phba->hbalock);
2245 	list_splice_init(&phba->sli.mboxq_cmpl, &cmplq);
2246 	spin_unlock_irq(&phba->hbalock);
2247 
2248 	/* Get a Mailbox buffer to setup mailbox commands for callback */
2249 	do {
2250 		list_remove_head(&cmplq, pmb, LPFC_MBOXQ_t, list);
2251 		if (pmb == NULL)
2252 			break;
2253 
2254 		pmbox = &pmb->u.mb;
2255 
2256 		if (pmbox->mbxCommand != MBX_HEARTBEAT) {
2257 			if (pmb->vport) {
2258 				lpfc_debugfs_disc_trc(pmb->vport,
2259 					LPFC_DISC_TRC_MBOX_VPORT,
2260 					"MBOX cmpl vport: cmd:x%x mb:x%x x%x",
2261 					(uint32_t)pmbox->mbxCommand,
2262 					pmbox->un.varWords[0],
2263 					pmbox->un.varWords[1]);
2264 			}
2265 			else {
2266 				lpfc_debugfs_disc_trc(phba->pport,
2267 					LPFC_DISC_TRC_MBOX,
2268 					"MBOX cmpl:       cmd:x%x mb:x%x x%x",
2269 					(uint32_t)pmbox->mbxCommand,
2270 					pmbox->un.varWords[0],
2271 					pmbox->un.varWords[1]);
2272 			}
2273 		}
2274 
2275 		/*
2276 		 * It is a fatal error if unknown mbox command completion.
2277 		 */
2278 		if (lpfc_sli_chk_mbx_command(pmbox->mbxCommand) ==
2279 		    MBX_SHUTDOWN) {
2280 			/* Unknown mailbox command compl */
2281 			lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
2282 					"(%d):0323 Unknown Mailbox command "
2283 					"x%x (x%x/x%x) Cmpl\n",
2284 					pmb->vport ? pmb->vport->vpi : 0,
2285 					pmbox->mbxCommand,
2286 					lpfc_sli_config_mbox_subsys_get(phba,
2287 									pmb),
2288 					lpfc_sli_config_mbox_opcode_get(phba,
2289 									pmb));
2290 			phba->link_state = LPFC_HBA_ERROR;
2291 			phba->work_hs = HS_FFER3;
2292 			lpfc_handle_eratt(phba);
2293 			continue;
2294 		}
2295 
2296 		if (pmbox->mbxStatus) {
2297 			phba->sli.slistat.mbox_stat_err++;
2298 			if (pmbox->mbxStatus == MBXERR_NO_RESOURCES) {
2299 				/* Mbox cmd cmpl error - RETRYing */
2300 				lpfc_printf_log(phba, KERN_INFO,
2301 					LOG_MBOX | LOG_SLI,
2302 					"(%d):0305 Mbox cmd cmpl "
2303 					"error - RETRYing Data: x%x "
2304 					"(x%x/x%x) x%x x%x x%x\n",
2305 					pmb->vport ? pmb->vport->vpi : 0,
2306 					pmbox->mbxCommand,
2307 					lpfc_sli_config_mbox_subsys_get(phba,
2308 									pmb),
2309 					lpfc_sli_config_mbox_opcode_get(phba,
2310 									pmb),
2311 					pmbox->mbxStatus,
2312 					pmbox->un.varWords[0],
2313 					pmb->vport->port_state);
2314 				pmbox->mbxStatus = 0;
2315 				pmbox->mbxOwner = OWN_HOST;
2316 				rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
2317 				if (rc != MBX_NOT_FINISHED)
2318 					continue;
2319 			}
2320 		}
2321 
2322 		/* Mailbox cmd <cmd> Cmpl <cmpl> */
2323 		lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI,
2324 				"(%d):0307 Mailbox cmd x%x (x%x/x%x) Cmpl x%p "
2325 				"Data: x%x x%x x%x x%x x%x x%x x%x x%x x%x\n",
2326 				pmb->vport ? pmb->vport->vpi : 0,
2327 				pmbox->mbxCommand,
2328 				lpfc_sli_config_mbox_subsys_get(phba, pmb),
2329 				lpfc_sli_config_mbox_opcode_get(phba, pmb),
2330 				pmb->mbox_cmpl,
2331 				*((uint32_t *) pmbox),
2332 				pmbox->un.varWords[0],
2333 				pmbox->un.varWords[1],
2334 				pmbox->un.varWords[2],
2335 				pmbox->un.varWords[3],
2336 				pmbox->un.varWords[4],
2337 				pmbox->un.varWords[5],
2338 				pmbox->un.varWords[6],
2339 				pmbox->un.varWords[7]);
2340 
2341 		if (pmb->mbox_cmpl)
2342 			pmb->mbox_cmpl(phba,pmb);
2343 	} while (1);
2344 	return 0;
2345 }
2346 
2347 /**
2348  * lpfc_sli_get_buff - Get the buffer associated with the buffer tag
2349  * @phba: Pointer to HBA context object.
2350  * @pring: Pointer to driver SLI ring object.
2351  * @tag: buffer tag.
2352  *
2353  * This function is called with no lock held. When QUE_BUFTAG_BIT bit
2354  * is set in the tag the buffer is posted for a particular exchange,
2355  * the function will return the buffer without replacing the buffer.
2356  * If the buffer is for unsolicited ELS or CT traffic, this function
2357  * returns the buffer and also posts another buffer to the firmware.
2358  **/
2359 static struct lpfc_dmabuf *
2360 lpfc_sli_get_buff(struct lpfc_hba *phba,
2361 		  struct lpfc_sli_ring *pring,
2362 		  uint32_t tag)
2363 {
2364 	struct hbq_dmabuf *hbq_entry;
2365 
2366 	if (tag & QUE_BUFTAG_BIT)
2367 		return lpfc_sli_ring_taggedbuf_get(phba, pring, tag);
2368 	hbq_entry = lpfc_sli_hbqbuf_find(phba, tag);
2369 	if (!hbq_entry)
2370 		return NULL;
2371 	return &hbq_entry->dbuf;
2372 }
2373 
2374 /**
2375  * lpfc_complete_unsol_iocb - Complete an unsolicited sequence
2376  * @phba: Pointer to HBA context object.
2377  * @pring: Pointer to driver SLI ring object.
2378  * @saveq: Pointer to the iocbq struct representing the sequence starting frame.
2379  * @fch_r_ctl: the r_ctl for the first frame of the sequence.
2380  * @fch_type: the type for the first frame of the sequence.
2381  *
2382  * This function is called with no lock held. This function uses the r_ctl and
2383  * type of the received sequence to find the correct callback function to call
2384  * to process the sequence.
2385  **/
2386 static int
2387 lpfc_complete_unsol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
2388 			 struct lpfc_iocbq *saveq, uint32_t fch_r_ctl,
2389 			 uint32_t fch_type)
2390 {
2391 	int i;
2392 
2393 	/* unSolicited Responses */
2394 	if (pring->prt[0].profile) {
2395 		if (pring->prt[0].lpfc_sli_rcv_unsol_event)
2396 			(pring->prt[0].lpfc_sli_rcv_unsol_event) (phba, pring,
2397 									saveq);
2398 		return 1;
2399 	}
2400 	/* We must search, based on rctl / type
2401 	   for the right routine */
2402 	for (i = 0; i < pring->num_mask; i++) {
2403 		if ((pring->prt[i].rctl == fch_r_ctl) &&
2404 		    (pring->prt[i].type == fch_type)) {
2405 			if (pring->prt[i].lpfc_sli_rcv_unsol_event)
2406 				(pring->prt[i].lpfc_sli_rcv_unsol_event)
2407 						(phba, pring, saveq);
2408 			return 1;
2409 		}
2410 	}
2411 	return 0;
2412 }
2413 
2414 /**
2415  * lpfc_sli_process_unsol_iocb - Unsolicited iocb handler
2416  * @phba: Pointer to HBA context object.
2417  * @pring: Pointer to driver SLI ring object.
2418  * @saveq: Pointer to the unsolicited iocb.
2419  *
2420  * This function is called with no lock held by the ring event handler
2421  * when there is an unsolicited iocb posted to the response ring by the
2422  * firmware. This function gets the buffer associated with the iocbs
2423  * and calls the event handler for the ring. This function handles both
2424  * qring buffers and hbq buffers.
2425  * When the function returns 1 the caller can free the iocb object otherwise
2426  * upper layer functions will free the iocb objects.
2427  **/
2428 static int
2429 lpfc_sli_process_unsol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
2430 			    struct lpfc_iocbq *saveq)
2431 {
2432 	IOCB_t           * irsp;
2433 	WORD5            * w5p;
2434 	uint32_t           Rctl, Type;
2435 	uint32_t           match;
2436 	struct lpfc_iocbq *iocbq;
2437 	struct lpfc_dmabuf *dmzbuf;
2438 
2439 	match = 0;
2440 	irsp = &(saveq->iocb);
2441 
2442 	if (irsp->ulpCommand == CMD_ASYNC_STATUS) {
2443 		if (pring->lpfc_sli_rcv_async_status)
2444 			pring->lpfc_sli_rcv_async_status(phba, pring, saveq);
2445 		else
2446 			lpfc_printf_log(phba,
2447 					KERN_WARNING,
2448 					LOG_SLI,
2449 					"0316 Ring %d handler: unexpected "
2450 					"ASYNC_STATUS iocb received evt_code "
2451 					"0x%x\n",
2452 					pring->ringno,
2453 					irsp->un.asyncstat.evt_code);
2454 		return 1;
2455 	}
2456 
2457 	if ((irsp->ulpCommand == CMD_IOCB_RET_XRI64_CX) &&
2458 		(phba->sli3_options & LPFC_SLI3_HBQ_ENABLED)) {
2459 		if (irsp->ulpBdeCount > 0) {
2460 			dmzbuf = lpfc_sli_get_buff(phba, pring,
2461 					irsp->un.ulpWord[3]);
2462 			lpfc_in_buf_free(phba, dmzbuf);
2463 		}
2464 
2465 		if (irsp->ulpBdeCount > 1) {
2466 			dmzbuf = lpfc_sli_get_buff(phba, pring,
2467 					irsp->unsli3.sli3Words[3]);
2468 			lpfc_in_buf_free(phba, dmzbuf);
2469 		}
2470 
2471 		if (irsp->ulpBdeCount > 2) {
2472 			dmzbuf = lpfc_sli_get_buff(phba, pring,
2473 				irsp->unsli3.sli3Words[7]);
2474 			lpfc_in_buf_free(phba, dmzbuf);
2475 		}
2476 
2477 		return 1;
2478 	}
2479 
2480 	if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) {
2481 		if (irsp->ulpBdeCount != 0) {
2482 			saveq->context2 = lpfc_sli_get_buff(phba, pring,
2483 						irsp->un.ulpWord[3]);
2484 			if (!saveq->context2)
2485 				lpfc_printf_log(phba,
2486 					KERN_ERR,
2487 					LOG_SLI,
2488 					"0341 Ring %d Cannot find buffer for "
2489 					"an unsolicited iocb. tag 0x%x\n",
2490 					pring->ringno,
2491 					irsp->un.ulpWord[3]);
2492 		}
2493 		if (irsp->ulpBdeCount == 2) {
2494 			saveq->context3 = lpfc_sli_get_buff(phba, pring,
2495 						irsp->unsli3.sli3Words[7]);
2496 			if (!saveq->context3)
2497 				lpfc_printf_log(phba,
2498 					KERN_ERR,
2499 					LOG_SLI,
2500 					"0342 Ring %d Cannot find buffer for an"
2501 					" unsolicited iocb. tag 0x%x\n",
2502 					pring->ringno,
2503 					irsp->unsli3.sli3Words[7]);
2504 		}
2505 		list_for_each_entry(iocbq, &saveq->list, list) {
2506 			irsp = &(iocbq->iocb);
2507 			if (irsp->ulpBdeCount != 0) {
2508 				iocbq->context2 = lpfc_sli_get_buff(phba, pring,
2509 							irsp->un.ulpWord[3]);
2510 				if (!iocbq->context2)
2511 					lpfc_printf_log(phba,
2512 						KERN_ERR,
2513 						LOG_SLI,
2514 						"0343 Ring %d Cannot find "
2515 						"buffer for an unsolicited iocb"
2516 						". tag 0x%x\n", pring->ringno,
2517 						irsp->un.ulpWord[3]);
2518 			}
2519 			if (irsp->ulpBdeCount == 2) {
2520 				iocbq->context3 = lpfc_sli_get_buff(phba, pring,
2521 						irsp->unsli3.sli3Words[7]);
2522 				if (!iocbq->context3)
2523 					lpfc_printf_log(phba,
2524 						KERN_ERR,
2525 						LOG_SLI,
2526 						"0344 Ring %d Cannot find "
2527 						"buffer for an unsolicited "
2528 						"iocb. tag 0x%x\n",
2529 						pring->ringno,
2530 						irsp->unsli3.sli3Words[7]);
2531 			}
2532 		}
2533 	}
2534 	if (irsp->ulpBdeCount != 0 &&
2535 	    (irsp->ulpCommand == CMD_IOCB_RCV_CONT64_CX ||
2536 	     irsp->ulpStatus == IOSTAT_INTERMED_RSP)) {
2537 		int found = 0;
2538 
2539 		/* search continue save q for same XRI */
2540 		list_for_each_entry(iocbq, &pring->iocb_continue_saveq, clist) {
2541 			if (iocbq->iocb.unsli3.rcvsli3.ox_id ==
2542 				saveq->iocb.unsli3.rcvsli3.ox_id) {
2543 				list_add_tail(&saveq->list, &iocbq->list);
2544 				found = 1;
2545 				break;
2546 			}
2547 		}
2548 		if (!found)
2549 			list_add_tail(&saveq->clist,
2550 				      &pring->iocb_continue_saveq);
2551 		if (saveq->iocb.ulpStatus != IOSTAT_INTERMED_RSP) {
2552 			list_del_init(&iocbq->clist);
2553 			saveq = iocbq;
2554 			irsp = &(saveq->iocb);
2555 		} else
2556 			return 0;
2557 	}
2558 	if ((irsp->ulpCommand == CMD_RCV_ELS_REQ64_CX) ||
2559 	    (irsp->ulpCommand == CMD_RCV_ELS_REQ_CX) ||
2560 	    (irsp->ulpCommand == CMD_IOCB_RCV_ELS64_CX)) {
2561 		Rctl = FC_RCTL_ELS_REQ;
2562 		Type = FC_TYPE_ELS;
2563 	} else {
2564 		w5p = (WORD5 *)&(saveq->iocb.un.ulpWord[5]);
2565 		Rctl = w5p->hcsw.Rctl;
2566 		Type = w5p->hcsw.Type;
2567 
2568 		/* Firmware Workaround */
2569 		if ((Rctl == 0) && (pring->ringno == LPFC_ELS_RING) &&
2570 			(irsp->ulpCommand == CMD_RCV_SEQUENCE64_CX ||
2571 			 irsp->ulpCommand == CMD_IOCB_RCV_SEQ64_CX)) {
2572 			Rctl = FC_RCTL_ELS_REQ;
2573 			Type = FC_TYPE_ELS;
2574 			w5p->hcsw.Rctl = Rctl;
2575 			w5p->hcsw.Type = Type;
2576 		}
2577 	}
2578 
2579 	if (!lpfc_complete_unsol_iocb(phba, pring, saveq, Rctl, Type))
2580 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
2581 				"0313 Ring %d handler: unexpected Rctl x%x "
2582 				"Type x%x received\n",
2583 				pring->ringno, Rctl, Type);
2584 
2585 	return 1;
2586 }
2587 
2588 /**
2589  * lpfc_sli_iocbq_lookup - Find command iocb for the given response iocb
2590  * @phba: Pointer to HBA context object.
2591  * @pring: Pointer to driver SLI ring object.
2592  * @prspiocb: Pointer to response iocb object.
2593  *
2594  * This function looks up the iocb_lookup table to get the command iocb
2595  * corresponding to the given response iocb using the iotag of the
2596  * response iocb. This function is called with the hbalock held.
2597  * This function returns the command iocb object if it finds the command
2598  * iocb else returns NULL.
2599  **/
2600 static struct lpfc_iocbq *
2601 lpfc_sli_iocbq_lookup(struct lpfc_hba *phba,
2602 		      struct lpfc_sli_ring *pring,
2603 		      struct lpfc_iocbq *prspiocb)
2604 {
2605 	struct lpfc_iocbq *cmd_iocb = NULL;
2606 	uint16_t iotag;
2607 
2608 	iotag = prspiocb->iocb.ulpIoTag;
2609 
2610 	if (iotag != 0 && iotag <= phba->sli.last_iotag) {
2611 		cmd_iocb = phba->sli.iocbq_lookup[iotag];
2612 		list_del_init(&cmd_iocb->list);
2613 		if (cmd_iocb->iocb_flag & LPFC_IO_ON_TXCMPLQ) {
2614 			pring->txcmplq_cnt--;
2615 			cmd_iocb->iocb_flag &= ~LPFC_IO_ON_TXCMPLQ;
2616 		}
2617 		return cmd_iocb;
2618 	}
2619 
2620 	lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
2621 			"0317 iotag x%x is out off "
2622 			"range: max iotag x%x wd0 x%x\n",
2623 			iotag, phba->sli.last_iotag,
2624 			*(((uint32_t *) &prspiocb->iocb) + 7));
2625 	return NULL;
2626 }
2627 
2628 /**
2629  * lpfc_sli_iocbq_lookup_by_tag - Find command iocb for the iotag
2630  * @phba: Pointer to HBA context object.
2631  * @pring: Pointer to driver SLI ring object.
2632  * @iotag: IOCB tag.
2633  *
2634  * This function looks up the iocb_lookup table to get the command iocb
2635  * corresponding to the given iotag. This function is called with the
2636  * hbalock held.
2637  * This function returns the command iocb object if it finds the command
2638  * iocb else returns NULL.
2639  **/
2640 static struct lpfc_iocbq *
2641 lpfc_sli_iocbq_lookup_by_tag(struct lpfc_hba *phba,
2642 			     struct lpfc_sli_ring *pring, uint16_t iotag)
2643 {
2644 	struct lpfc_iocbq *cmd_iocb;
2645 
2646 	if (iotag != 0 && iotag <= phba->sli.last_iotag) {
2647 		cmd_iocb = phba->sli.iocbq_lookup[iotag];
2648 		if (cmd_iocb->iocb_flag & LPFC_IO_ON_TXCMPLQ) {
2649 			/* remove from txcmpl queue list */
2650 			list_del_init(&cmd_iocb->list);
2651 			cmd_iocb->iocb_flag &= ~LPFC_IO_ON_TXCMPLQ;
2652 			pring->txcmplq_cnt--;
2653 			return cmd_iocb;
2654 		}
2655 	}
2656 	lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
2657 			"0372 iotag x%x is out off range: max iotag (x%x)\n",
2658 			iotag, phba->sli.last_iotag);
2659 	return NULL;
2660 }
2661 
2662 /**
2663  * lpfc_sli_process_sol_iocb - process solicited iocb completion
2664  * @phba: Pointer to HBA context object.
2665  * @pring: Pointer to driver SLI ring object.
2666  * @saveq: Pointer to the response iocb to be processed.
2667  *
2668  * This function is called by the ring event handler for non-fcp
2669  * rings when there is a new response iocb in the response ring.
2670  * The caller is not required to hold any locks. This function
2671  * gets the command iocb associated with the response iocb and
2672  * calls the completion handler for the command iocb. If there
2673  * is no completion handler, the function will free the resources
2674  * associated with command iocb. If the response iocb is for
2675  * an already aborted command iocb, the status of the completion
2676  * is changed to IOSTAT_LOCAL_REJECT/IOERR_SLI_ABORTED.
2677  * This function always returns 1.
2678  **/
2679 static int
2680 lpfc_sli_process_sol_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
2681 			  struct lpfc_iocbq *saveq)
2682 {
2683 	struct lpfc_iocbq *cmdiocbp;
2684 	int rc = 1;
2685 	unsigned long iflag;
2686 
2687 	/* Based on the iotag field, get the cmd IOCB from the txcmplq */
2688 	spin_lock_irqsave(&phba->hbalock, iflag);
2689 	cmdiocbp = lpfc_sli_iocbq_lookup(phba, pring, saveq);
2690 	spin_unlock_irqrestore(&phba->hbalock, iflag);
2691 
2692 	if (cmdiocbp) {
2693 		if (cmdiocbp->iocb_cmpl) {
2694 			/*
2695 			 * If an ELS command failed send an event to mgmt
2696 			 * application.
2697 			 */
2698 			if (saveq->iocb.ulpStatus &&
2699 			     (pring->ringno == LPFC_ELS_RING) &&
2700 			     (cmdiocbp->iocb.ulpCommand ==
2701 				CMD_ELS_REQUEST64_CR))
2702 				lpfc_send_els_failure_event(phba,
2703 					cmdiocbp, saveq);
2704 
2705 			/*
2706 			 * Post all ELS completions to the worker thread.
2707 			 * All other are passed to the completion callback.
2708 			 */
2709 			if (pring->ringno == LPFC_ELS_RING) {
2710 				if ((phba->sli_rev < LPFC_SLI_REV4) &&
2711 				    (cmdiocbp->iocb_flag &
2712 							LPFC_DRIVER_ABORTED)) {
2713 					spin_lock_irqsave(&phba->hbalock,
2714 							  iflag);
2715 					cmdiocbp->iocb_flag &=
2716 						~LPFC_DRIVER_ABORTED;
2717 					spin_unlock_irqrestore(&phba->hbalock,
2718 							       iflag);
2719 					saveq->iocb.ulpStatus =
2720 						IOSTAT_LOCAL_REJECT;
2721 					saveq->iocb.un.ulpWord[4] =
2722 						IOERR_SLI_ABORTED;
2723 
2724 					/* Firmware could still be in progress
2725 					 * of DMAing payload, so don't free data
2726 					 * buffer till after a hbeat.
2727 					 */
2728 					spin_lock_irqsave(&phba->hbalock,
2729 							  iflag);
2730 					saveq->iocb_flag |= LPFC_DELAY_MEM_FREE;
2731 					spin_unlock_irqrestore(&phba->hbalock,
2732 							       iflag);
2733 				}
2734 				if (phba->sli_rev == LPFC_SLI_REV4) {
2735 					if (saveq->iocb_flag &
2736 					    LPFC_EXCHANGE_BUSY) {
2737 						/* Set cmdiocb flag for the
2738 						 * exchange busy so sgl (xri)
2739 						 * will not be released until
2740 						 * the abort xri is received
2741 						 * from hba.
2742 						 */
2743 						spin_lock_irqsave(
2744 							&phba->hbalock, iflag);
2745 						cmdiocbp->iocb_flag |=
2746 							LPFC_EXCHANGE_BUSY;
2747 						spin_unlock_irqrestore(
2748 							&phba->hbalock, iflag);
2749 					}
2750 					if (cmdiocbp->iocb_flag &
2751 					    LPFC_DRIVER_ABORTED) {
2752 						/*
2753 						 * Clear LPFC_DRIVER_ABORTED
2754 						 * bit in case it was driver
2755 						 * initiated abort.
2756 						 */
2757 						spin_lock_irqsave(
2758 							&phba->hbalock, iflag);
2759 						cmdiocbp->iocb_flag &=
2760 							~LPFC_DRIVER_ABORTED;
2761 						spin_unlock_irqrestore(
2762 							&phba->hbalock, iflag);
2763 						cmdiocbp->iocb.ulpStatus =
2764 							IOSTAT_LOCAL_REJECT;
2765 						cmdiocbp->iocb.un.ulpWord[4] =
2766 							IOERR_ABORT_REQUESTED;
2767 						/*
2768 						 * For SLI4, irsiocb contains
2769 						 * NO_XRI in sli_xritag, it
2770 						 * shall not affect releasing
2771 						 * sgl (xri) process.
2772 						 */
2773 						saveq->iocb.ulpStatus =
2774 							IOSTAT_LOCAL_REJECT;
2775 						saveq->iocb.un.ulpWord[4] =
2776 							IOERR_SLI_ABORTED;
2777 						spin_lock_irqsave(
2778 							&phba->hbalock, iflag);
2779 						saveq->iocb_flag |=
2780 							LPFC_DELAY_MEM_FREE;
2781 						spin_unlock_irqrestore(
2782 							&phba->hbalock, iflag);
2783 					}
2784 				}
2785 			}
2786 			(cmdiocbp->iocb_cmpl) (phba, cmdiocbp, saveq);
2787 		} else
2788 			lpfc_sli_release_iocbq(phba, cmdiocbp);
2789 	} else {
2790 		/*
2791 		 * Unknown initiating command based on the response iotag.
2792 		 * This could be the case on the ELS ring because of
2793 		 * lpfc_els_abort().
2794 		 */
2795 		if (pring->ringno != LPFC_ELS_RING) {
2796 			/*
2797 			 * Ring <ringno> handler: unexpected completion IoTag
2798 			 * <IoTag>
2799 			 */
2800 			lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
2801 					 "0322 Ring %d handler: "
2802 					 "unexpected completion IoTag x%x "
2803 					 "Data: x%x x%x x%x x%x\n",
2804 					 pring->ringno,
2805 					 saveq->iocb.ulpIoTag,
2806 					 saveq->iocb.ulpStatus,
2807 					 saveq->iocb.un.ulpWord[4],
2808 					 saveq->iocb.ulpCommand,
2809 					 saveq->iocb.ulpContext);
2810 		}
2811 	}
2812 
2813 	return rc;
2814 }
2815 
2816 /**
2817  * lpfc_sli_rsp_pointers_error - Response ring pointer error handler
2818  * @phba: Pointer to HBA context object.
2819  * @pring: Pointer to driver SLI ring object.
2820  *
2821  * This function is called from the iocb ring event handlers when
2822  * put pointer is ahead of the get pointer for a ring. This function signal
2823  * an error attention condition to the worker thread and the worker
2824  * thread will transition the HBA to offline state.
2825  **/
2826 static void
2827 lpfc_sli_rsp_pointers_error(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
2828 {
2829 	struct lpfc_pgp *pgp = &phba->port_gp[pring->ringno];
2830 	/*
2831 	 * Ring <ringno> handler: portRspPut <portRspPut> is bigger than
2832 	 * rsp ring <portRspMax>
2833 	 */
2834 	lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
2835 			"0312 Ring %d handler: portRspPut %d "
2836 			"is bigger than rsp ring %d\n",
2837 			pring->ringno, le32_to_cpu(pgp->rspPutInx),
2838 			pring->sli.sli3.numRiocb);
2839 
2840 	phba->link_state = LPFC_HBA_ERROR;
2841 
2842 	/*
2843 	 * All error attention handlers are posted to
2844 	 * worker thread
2845 	 */
2846 	phba->work_ha |= HA_ERATT;
2847 	phba->work_hs = HS_FFER3;
2848 
2849 	lpfc_worker_wake_up(phba);
2850 
2851 	return;
2852 }
2853 
2854 /**
2855  * lpfc_poll_eratt - Error attention polling timer timeout handler
2856  * @ptr: Pointer to address of HBA context object.
2857  *
2858  * This function is invoked by the Error Attention polling timer when the
2859  * timer times out. It will check the SLI Error Attention register for
2860  * possible attention events. If so, it will post an Error Attention event
2861  * and wake up worker thread to process it. Otherwise, it will set up the
2862  * Error Attention polling timer for the next poll.
2863  **/
2864 void lpfc_poll_eratt(unsigned long ptr)
2865 {
2866 	struct lpfc_hba *phba;
2867 	uint32_t eratt = 0, rem;
2868 	uint64_t sli_intr, cnt;
2869 
2870 	phba = (struct lpfc_hba *)ptr;
2871 
2872 	/* Here we will also keep track of interrupts per sec of the hba */
2873 	sli_intr = phba->sli.slistat.sli_intr;
2874 
2875 	if (phba->sli.slistat.sli_prev_intr > sli_intr)
2876 		cnt = (((uint64_t)(-1) - phba->sli.slistat.sli_prev_intr) +
2877 			sli_intr);
2878 	else
2879 		cnt = (sli_intr - phba->sli.slistat.sli_prev_intr);
2880 
2881 	/* 64-bit integer division not supporte on 32-bit x86 - use do_div */
2882 	rem = do_div(cnt, LPFC_ERATT_POLL_INTERVAL);
2883 	phba->sli.slistat.sli_ips = cnt;
2884 
2885 	phba->sli.slistat.sli_prev_intr = sli_intr;
2886 
2887 	/* Check chip HA register for error event */
2888 	eratt = lpfc_sli_check_eratt(phba);
2889 
2890 	if (eratt)
2891 		/* Tell the worker thread there is work to do */
2892 		lpfc_worker_wake_up(phba);
2893 	else
2894 		/* Restart the timer for next eratt poll */
2895 		mod_timer(&phba->eratt_poll, jiffies +
2896 					HZ * LPFC_ERATT_POLL_INTERVAL);
2897 	return;
2898 }
2899 
2900 
2901 /**
2902  * lpfc_sli_handle_fast_ring_event - Handle ring events on FCP ring
2903  * @phba: Pointer to HBA context object.
2904  * @pring: Pointer to driver SLI ring object.
2905  * @mask: Host attention register mask for this ring.
2906  *
2907  * This function is called from the interrupt context when there is a ring
2908  * event for the fcp ring. The caller does not hold any lock.
2909  * The function processes each response iocb in the response ring until it
2910  * finds an iocb with LE bit set and chains all the iocbs up to the iocb with
2911  * LE bit set. The function will call the completion handler of the command iocb
2912  * if the response iocb indicates a completion for a command iocb or it is
2913  * an abort completion. The function will call lpfc_sli_process_unsol_iocb
2914  * function if this is an unsolicited iocb.
2915  * This routine presumes LPFC_FCP_RING handling and doesn't bother
2916  * to check it explicitly.
2917  */
2918 int
2919 lpfc_sli_handle_fast_ring_event(struct lpfc_hba *phba,
2920 				struct lpfc_sli_ring *pring, uint32_t mask)
2921 {
2922 	struct lpfc_pgp *pgp = &phba->port_gp[pring->ringno];
2923 	IOCB_t *irsp = NULL;
2924 	IOCB_t *entry = NULL;
2925 	struct lpfc_iocbq *cmdiocbq = NULL;
2926 	struct lpfc_iocbq rspiocbq;
2927 	uint32_t status;
2928 	uint32_t portRspPut, portRspMax;
2929 	int rc = 1;
2930 	lpfc_iocb_type type;
2931 	unsigned long iflag;
2932 	uint32_t rsp_cmpl = 0;
2933 
2934 	spin_lock_irqsave(&phba->hbalock, iflag);
2935 	pring->stats.iocb_event++;
2936 
2937 	/*
2938 	 * The next available response entry should never exceed the maximum
2939 	 * entries.  If it does, treat it as an adapter hardware error.
2940 	 */
2941 	portRspMax = pring->sli.sli3.numRiocb;
2942 	portRspPut = le32_to_cpu(pgp->rspPutInx);
2943 	if (unlikely(portRspPut >= portRspMax)) {
2944 		lpfc_sli_rsp_pointers_error(phba, pring);
2945 		spin_unlock_irqrestore(&phba->hbalock, iflag);
2946 		return 1;
2947 	}
2948 	if (phba->fcp_ring_in_use) {
2949 		spin_unlock_irqrestore(&phba->hbalock, iflag);
2950 		return 1;
2951 	} else
2952 		phba->fcp_ring_in_use = 1;
2953 
2954 	rmb();
2955 	while (pring->sli.sli3.rspidx != portRspPut) {
2956 		/*
2957 		 * Fetch an entry off the ring and copy it into a local data
2958 		 * structure.  The copy involves a byte-swap since the
2959 		 * network byte order and pci byte orders are different.
2960 		 */
2961 		entry = lpfc_resp_iocb(phba, pring);
2962 		phba->last_completion_time = jiffies;
2963 
2964 		if (++pring->sli.sli3.rspidx >= portRspMax)
2965 			pring->sli.sli3.rspidx = 0;
2966 
2967 		lpfc_sli_pcimem_bcopy((uint32_t *) entry,
2968 				      (uint32_t *) &rspiocbq.iocb,
2969 				      phba->iocb_rsp_size);
2970 		INIT_LIST_HEAD(&(rspiocbq.list));
2971 		irsp = &rspiocbq.iocb;
2972 
2973 		type = lpfc_sli_iocb_cmd_type(irsp->ulpCommand & CMD_IOCB_MASK);
2974 		pring->stats.iocb_rsp++;
2975 		rsp_cmpl++;
2976 
2977 		if (unlikely(irsp->ulpStatus)) {
2978 			/*
2979 			 * If resource errors reported from HBA, reduce
2980 			 * queuedepths of the SCSI device.
2981 			 */
2982 			if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) &&
2983 			    ((irsp->un.ulpWord[4] & IOERR_PARAM_MASK) ==
2984 			     IOERR_NO_RESOURCES)) {
2985 				spin_unlock_irqrestore(&phba->hbalock, iflag);
2986 				phba->lpfc_rampdown_queue_depth(phba);
2987 				spin_lock_irqsave(&phba->hbalock, iflag);
2988 			}
2989 
2990 			/* Rsp ring <ringno> error: IOCB */
2991 			lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
2992 					"0336 Rsp Ring %d error: IOCB Data: "
2993 					"x%x x%x x%x x%x x%x x%x x%x x%x\n",
2994 					pring->ringno,
2995 					irsp->un.ulpWord[0],
2996 					irsp->un.ulpWord[1],
2997 					irsp->un.ulpWord[2],
2998 					irsp->un.ulpWord[3],
2999 					irsp->un.ulpWord[4],
3000 					irsp->un.ulpWord[5],
3001 					*(uint32_t *)&irsp->un1,
3002 					*((uint32_t *)&irsp->un1 + 1));
3003 		}
3004 
3005 		switch (type) {
3006 		case LPFC_ABORT_IOCB:
3007 		case LPFC_SOL_IOCB:
3008 			/*
3009 			 * Idle exchange closed via ABTS from port.  No iocb
3010 			 * resources need to be recovered.
3011 			 */
3012 			if (unlikely(irsp->ulpCommand == CMD_XRI_ABORTED_CX)) {
3013 				lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
3014 						"0333 IOCB cmd 0x%x"
3015 						" processed. Skipping"
3016 						" completion\n",
3017 						irsp->ulpCommand);
3018 				break;
3019 			}
3020 
3021 			cmdiocbq = lpfc_sli_iocbq_lookup(phba, pring,
3022 							 &rspiocbq);
3023 			if (unlikely(!cmdiocbq))
3024 				break;
3025 			if (cmdiocbq->iocb_flag & LPFC_DRIVER_ABORTED)
3026 				cmdiocbq->iocb_flag &= ~LPFC_DRIVER_ABORTED;
3027 			if (cmdiocbq->iocb_cmpl) {
3028 				spin_unlock_irqrestore(&phba->hbalock, iflag);
3029 				(cmdiocbq->iocb_cmpl)(phba, cmdiocbq,
3030 						      &rspiocbq);
3031 				spin_lock_irqsave(&phba->hbalock, iflag);
3032 			}
3033 			break;
3034 		case LPFC_UNSOL_IOCB:
3035 			spin_unlock_irqrestore(&phba->hbalock, iflag);
3036 			lpfc_sli_process_unsol_iocb(phba, pring, &rspiocbq);
3037 			spin_lock_irqsave(&phba->hbalock, iflag);
3038 			break;
3039 		default:
3040 			if (irsp->ulpCommand == CMD_ADAPTER_MSG) {
3041 				char adaptermsg[LPFC_MAX_ADPTMSG];
3042 				memset(adaptermsg, 0, LPFC_MAX_ADPTMSG);
3043 				memcpy(&adaptermsg[0], (uint8_t *) irsp,
3044 				       MAX_MSG_DATA);
3045 				dev_warn(&((phba->pcidev)->dev),
3046 					 "lpfc%d: %s\n",
3047 					 phba->brd_no, adaptermsg);
3048 			} else {
3049 				/* Unknown IOCB command */
3050 				lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
3051 						"0334 Unknown IOCB command "
3052 						"Data: x%x, x%x x%x x%x x%x\n",
3053 						type, irsp->ulpCommand,
3054 						irsp->ulpStatus,
3055 						irsp->ulpIoTag,
3056 						irsp->ulpContext);
3057 			}
3058 			break;
3059 		}
3060 
3061 		/*
3062 		 * The response IOCB has been processed.  Update the ring
3063 		 * pointer in SLIM.  If the port response put pointer has not
3064 		 * been updated, sync the pgp->rspPutInx and fetch the new port
3065 		 * response put pointer.
3066 		 */
3067 		writel(pring->sli.sli3.rspidx,
3068 			&phba->host_gp[pring->ringno].rspGetInx);
3069 
3070 		if (pring->sli.sli3.rspidx == portRspPut)
3071 			portRspPut = le32_to_cpu(pgp->rspPutInx);
3072 	}
3073 
3074 	if ((rsp_cmpl > 0) && (mask & HA_R0RE_REQ)) {
3075 		pring->stats.iocb_rsp_full++;
3076 		status = ((CA_R0ATT | CA_R0RE_RSP) << (pring->ringno * 4));
3077 		writel(status, phba->CAregaddr);
3078 		readl(phba->CAregaddr);
3079 	}
3080 	if ((mask & HA_R0CE_RSP) && (pring->flag & LPFC_CALL_RING_AVAILABLE)) {
3081 		pring->flag &= ~LPFC_CALL_RING_AVAILABLE;
3082 		pring->stats.iocb_cmd_empty++;
3083 
3084 		/* Force update of the local copy of cmdGetInx */
3085 		pring->sli.sli3.local_getidx = le32_to_cpu(pgp->cmdGetInx);
3086 		lpfc_sli_resume_iocb(phba, pring);
3087 
3088 		if ((pring->lpfc_sli_cmd_available))
3089 			(pring->lpfc_sli_cmd_available) (phba, pring);
3090 
3091 	}
3092 
3093 	phba->fcp_ring_in_use = 0;
3094 	spin_unlock_irqrestore(&phba->hbalock, iflag);
3095 	return rc;
3096 }
3097 
3098 /**
3099  * lpfc_sli_sp_handle_rspiocb - Handle slow-path response iocb
3100  * @phba: Pointer to HBA context object.
3101  * @pring: Pointer to driver SLI ring object.
3102  * @rspiocbp: Pointer to driver response IOCB object.
3103  *
3104  * This function is called from the worker thread when there is a slow-path
3105  * response IOCB to process. This function chains all the response iocbs until
3106  * seeing the iocb with the LE bit set. The function will call
3107  * lpfc_sli_process_sol_iocb function if the response iocb indicates a
3108  * completion of a command iocb. The function will call the
3109  * lpfc_sli_process_unsol_iocb function if this is an unsolicited iocb.
3110  * The function frees the resources or calls the completion handler if this
3111  * iocb is an abort completion. The function returns NULL when the response
3112  * iocb has the LE bit set and all the chained iocbs are processed, otherwise
3113  * this function shall chain the iocb on to the iocb_continueq and return the
3114  * response iocb passed in.
3115  **/
3116 static struct lpfc_iocbq *
3117 lpfc_sli_sp_handle_rspiocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
3118 			struct lpfc_iocbq *rspiocbp)
3119 {
3120 	struct lpfc_iocbq *saveq;
3121 	struct lpfc_iocbq *cmdiocbp;
3122 	struct lpfc_iocbq *next_iocb;
3123 	IOCB_t *irsp = NULL;
3124 	uint32_t free_saveq;
3125 	uint8_t iocb_cmd_type;
3126 	lpfc_iocb_type type;
3127 	unsigned long iflag;
3128 	int rc;
3129 
3130 	spin_lock_irqsave(&phba->hbalock, iflag);
3131 	/* First add the response iocb to the countinueq list */
3132 	list_add_tail(&rspiocbp->list, &(pring->iocb_continueq));
3133 	pring->iocb_continueq_cnt++;
3134 
3135 	/* Now, determine whether the list is completed for processing */
3136 	irsp = &rspiocbp->iocb;
3137 	if (irsp->ulpLe) {
3138 		/*
3139 		 * By default, the driver expects to free all resources
3140 		 * associated with this iocb completion.
3141 		 */
3142 		free_saveq = 1;
3143 		saveq = list_get_first(&pring->iocb_continueq,
3144 				       struct lpfc_iocbq, list);
3145 		irsp = &(saveq->iocb);
3146 		list_del_init(&pring->iocb_continueq);
3147 		pring->iocb_continueq_cnt = 0;
3148 
3149 		pring->stats.iocb_rsp++;
3150 
3151 		/*
3152 		 * If resource errors reported from HBA, reduce
3153 		 * queuedepths of the SCSI device.
3154 		 */
3155 		if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) &&
3156 		    ((irsp->un.ulpWord[4] & IOERR_PARAM_MASK) ==
3157 		     IOERR_NO_RESOURCES)) {
3158 			spin_unlock_irqrestore(&phba->hbalock, iflag);
3159 			phba->lpfc_rampdown_queue_depth(phba);
3160 			spin_lock_irqsave(&phba->hbalock, iflag);
3161 		}
3162 
3163 		if (irsp->ulpStatus) {
3164 			/* Rsp ring <ringno> error: IOCB */
3165 			lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
3166 					"0328 Rsp Ring %d error: "
3167 					"IOCB Data: "
3168 					"x%x x%x x%x x%x "
3169 					"x%x x%x x%x x%x "
3170 					"x%x x%x x%x x%x "
3171 					"x%x x%x x%x x%x\n",
3172 					pring->ringno,
3173 					irsp->un.ulpWord[0],
3174 					irsp->un.ulpWord[1],
3175 					irsp->un.ulpWord[2],
3176 					irsp->un.ulpWord[3],
3177 					irsp->un.ulpWord[4],
3178 					irsp->un.ulpWord[5],
3179 					*(((uint32_t *) irsp) + 6),
3180 					*(((uint32_t *) irsp) + 7),
3181 					*(((uint32_t *) irsp) + 8),
3182 					*(((uint32_t *) irsp) + 9),
3183 					*(((uint32_t *) irsp) + 10),
3184 					*(((uint32_t *) irsp) + 11),
3185 					*(((uint32_t *) irsp) + 12),
3186 					*(((uint32_t *) irsp) + 13),
3187 					*(((uint32_t *) irsp) + 14),
3188 					*(((uint32_t *) irsp) + 15));
3189 		}
3190 
3191 		/*
3192 		 * Fetch the IOCB command type and call the correct completion
3193 		 * routine. Solicited and Unsolicited IOCBs on the ELS ring
3194 		 * get freed back to the lpfc_iocb_list by the discovery
3195 		 * kernel thread.
3196 		 */
3197 		iocb_cmd_type = irsp->ulpCommand & CMD_IOCB_MASK;
3198 		type = lpfc_sli_iocb_cmd_type(iocb_cmd_type);
3199 		switch (type) {
3200 		case LPFC_SOL_IOCB:
3201 			spin_unlock_irqrestore(&phba->hbalock, iflag);
3202 			rc = lpfc_sli_process_sol_iocb(phba, pring, saveq);
3203 			spin_lock_irqsave(&phba->hbalock, iflag);
3204 			break;
3205 
3206 		case LPFC_UNSOL_IOCB:
3207 			spin_unlock_irqrestore(&phba->hbalock, iflag);
3208 			rc = lpfc_sli_process_unsol_iocb(phba, pring, saveq);
3209 			spin_lock_irqsave(&phba->hbalock, iflag);
3210 			if (!rc)
3211 				free_saveq = 0;
3212 			break;
3213 
3214 		case LPFC_ABORT_IOCB:
3215 			cmdiocbp = NULL;
3216 			if (irsp->ulpCommand != CMD_XRI_ABORTED_CX)
3217 				cmdiocbp = lpfc_sli_iocbq_lookup(phba, pring,
3218 								 saveq);
3219 			if (cmdiocbp) {
3220 				/* Call the specified completion routine */
3221 				if (cmdiocbp->iocb_cmpl) {
3222 					spin_unlock_irqrestore(&phba->hbalock,
3223 							       iflag);
3224 					(cmdiocbp->iocb_cmpl)(phba, cmdiocbp,
3225 							      saveq);
3226 					spin_lock_irqsave(&phba->hbalock,
3227 							  iflag);
3228 				} else
3229 					__lpfc_sli_release_iocbq(phba,
3230 								 cmdiocbp);
3231 			}
3232 			break;
3233 
3234 		case LPFC_UNKNOWN_IOCB:
3235 			if (irsp->ulpCommand == CMD_ADAPTER_MSG) {
3236 				char adaptermsg[LPFC_MAX_ADPTMSG];
3237 				memset(adaptermsg, 0, LPFC_MAX_ADPTMSG);
3238 				memcpy(&adaptermsg[0], (uint8_t *)irsp,
3239 				       MAX_MSG_DATA);
3240 				dev_warn(&((phba->pcidev)->dev),
3241 					 "lpfc%d: %s\n",
3242 					 phba->brd_no, adaptermsg);
3243 			} else {
3244 				/* Unknown IOCB command */
3245 				lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
3246 						"0335 Unknown IOCB "
3247 						"command Data: x%x "
3248 						"x%x x%x x%x\n",
3249 						irsp->ulpCommand,
3250 						irsp->ulpStatus,
3251 						irsp->ulpIoTag,
3252 						irsp->ulpContext);
3253 			}
3254 			break;
3255 		}
3256 
3257 		if (free_saveq) {
3258 			list_for_each_entry_safe(rspiocbp, next_iocb,
3259 						 &saveq->list, list) {
3260 				list_del(&rspiocbp->list);
3261 				__lpfc_sli_release_iocbq(phba, rspiocbp);
3262 			}
3263 			__lpfc_sli_release_iocbq(phba, saveq);
3264 		}
3265 		rspiocbp = NULL;
3266 	}
3267 	spin_unlock_irqrestore(&phba->hbalock, iflag);
3268 	return rspiocbp;
3269 }
3270 
3271 /**
3272  * lpfc_sli_handle_slow_ring_event - Wrapper func for handling slow-path iocbs
3273  * @phba: Pointer to HBA context object.
3274  * @pring: Pointer to driver SLI ring object.
3275  * @mask: Host attention register mask for this ring.
3276  *
3277  * This routine wraps the actual slow_ring event process routine from the
3278  * API jump table function pointer from the lpfc_hba struct.
3279  **/
3280 void
3281 lpfc_sli_handle_slow_ring_event(struct lpfc_hba *phba,
3282 				struct lpfc_sli_ring *pring, uint32_t mask)
3283 {
3284 	phba->lpfc_sli_handle_slow_ring_event(phba, pring, mask);
3285 }
3286 
3287 /**
3288  * lpfc_sli_handle_slow_ring_event_s3 - Handle SLI3 ring event for non-FCP rings
3289  * @phba: Pointer to HBA context object.
3290  * @pring: Pointer to driver SLI ring object.
3291  * @mask: Host attention register mask for this ring.
3292  *
3293  * This function is called from the worker thread when there is a ring event
3294  * for non-fcp rings. The caller does not hold any lock. The function will
3295  * remove each response iocb in the response ring and calls the handle
3296  * response iocb routine (lpfc_sli_sp_handle_rspiocb) to process it.
3297  **/
3298 static void
3299 lpfc_sli_handle_slow_ring_event_s3(struct lpfc_hba *phba,
3300 				   struct lpfc_sli_ring *pring, uint32_t mask)
3301 {
3302 	struct lpfc_pgp *pgp;
3303 	IOCB_t *entry;
3304 	IOCB_t *irsp = NULL;
3305 	struct lpfc_iocbq *rspiocbp = NULL;
3306 	uint32_t portRspPut, portRspMax;
3307 	unsigned long iflag;
3308 	uint32_t status;
3309 
3310 	pgp = &phba->port_gp[pring->ringno];
3311 	spin_lock_irqsave(&phba->hbalock, iflag);
3312 	pring->stats.iocb_event++;
3313 
3314 	/*
3315 	 * The next available response entry should never exceed the maximum
3316 	 * entries.  If it does, treat it as an adapter hardware error.
3317 	 */
3318 	portRspMax = pring->sli.sli3.numRiocb;
3319 	portRspPut = le32_to_cpu(pgp->rspPutInx);
3320 	if (portRspPut >= portRspMax) {
3321 		/*
3322 		 * Ring <ringno> handler: portRspPut <portRspPut> is bigger than
3323 		 * rsp ring <portRspMax>
3324 		 */
3325 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
3326 				"0303 Ring %d handler: portRspPut %d "
3327 				"is bigger than rsp ring %d\n",
3328 				pring->ringno, portRspPut, portRspMax);
3329 
3330 		phba->link_state = LPFC_HBA_ERROR;
3331 		spin_unlock_irqrestore(&phba->hbalock, iflag);
3332 
3333 		phba->work_hs = HS_FFER3;
3334 		lpfc_handle_eratt(phba);
3335 
3336 		return;
3337 	}
3338 
3339 	rmb();
3340 	while (pring->sli.sli3.rspidx != portRspPut) {
3341 		/*
3342 		 * Build a completion list and call the appropriate handler.
3343 		 * The process is to get the next available response iocb, get
3344 		 * a free iocb from the list, copy the response data into the
3345 		 * free iocb, insert to the continuation list, and update the
3346 		 * next response index to slim.  This process makes response
3347 		 * iocb's in the ring available to DMA as fast as possible but
3348 		 * pays a penalty for a copy operation.  Since the iocb is
3349 		 * only 32 bytes, this penalty is considered small relative to
3350 		 * the PCI reads for register values and a slim write.  When
3351 		 * the ulpLe field is set, the entire Command has been
3352 		 * received.
3353 		 */
3354 		entry = lpfc_resp_iocb(phba, pring);
3355 
3356 		phba->last_completion_time = jiffies;
3357 		rspiocbp = __lpfc_sli_get_iocbq(phba);
3358 		if (rspiocbp == NULL) {
3359 			printk(KERN_ERR "%s: out of buffers! Failing "
3360 			       "completion.\n", __func__);
3361 			break;
3362 		}
3363 
3364 		lpfc_sli_pcimem_bcopy(entry, &rspiocbp->iocb,
3365 				      phba->iocb_rsp_size);
3366 		irsp = &rspiocbp->iocb;
3367 
3368 		if (++pring->sli.sli3.rspidx >= portRspMax)
3369 			pring->sli.sli3.rspidx = 0;
3370 
3371 		if (pring->ringno == LPFC_ELS_RING) {
3372 			lpfc_debugfs_slow_ring_trc(phba,
3373 			"IOCB rsp ring:   wd4:x%08x wd6:x%08x wd7:x%08x",
3374 				*(((uint32_t *) irsp) + 4),
3375 				*(((uint32_t *) irsp) + 6),
3376 				*(((uint32_t *) irsp) + 7));
3377 		}
3378 
3379 		writel(pring->sli.sli3.rspidx,
3380 			&phba->host_gp[pring->ringno].rspGetInx);
3381 
3382 		spin_unlock_irqrestore(&phba->hbalock, iflag);
3383 		/* Handle the response IOCB */
3384 		rspiocbp = lpfc_sli_sp_handle_rspiocb(phba, pring, rspiocbp);
3385 		spin_lock_irqsave(&phba->hbalock, iflag);
3386 
3387 		/*
3388 		 * If the port response put pointer has not been updated, sync
3389 		 * the pgp->rspPutInx in the MAILBOX_tand fetch the new port
3390 		 * response put pointer.
3391 		 */
3392 		if (pring->sli.sli3.rspidx == portRspPut) {
3393 			portRspPut = le32_to_cpu(pgp->rspPutInx);
3394 		}
3395 	} /* while (pring->sli.sli3.rspidx != portRspPut) */
3396 
3397 	if ((rspiocbp != NULL) && (mask & HA_R0RE_REQ)) {
3398 		/* At least one response entry has been freed */
3399 		pring->stats.iocb_rsp_full++;
3400 		/* SET RxRE_RSP in Chip Att register */
3401 		status = ((CA_R0ATT | CA_R0RE_RSP) << (pring->ringno * 4));
3402 		writel(status, phba->CAregaddr);
3403 		readl(phba->CAregaddr); /* flush */
3404 	}
3405 	if ((mask & HA_R0CE_RSP) && (pring->flag & LPFC_CALL_RING_AVAILABLE)) {
3406 		pring->flag &= ~LPFC_CALL_RING_AVAILABLE;
3407 		pring->stats.iocb_cmd_empty++;
3408 
3409 		/* Force update of the local copy of cmdGetInx */
3410 		pring->sli.sli3.local_getidx = le32_to_cpu(pgp->cmdGetInx);
3411 		lpfc_sli_resume_iocb(phba, pring);
3412 
3413 		if ((pring->lpfc_sli_cmd_available))
3414 			(pring->lpfc_sli_cmd_available) (phba, pring);
3415 
3416 	}
3417 
3418 	spin_unlock_irqrestore(&phba->hbalock, iflag);
3419 	return;
3420 }
3421 
3422 /**
3423  * lpfc_sli_handle_slow_ring_event_s4 - Handle SLI4 slow-path els events
3424  * @phba: Pointer to HBA context object.
3425  * @pring: Pointer to driver SLI ring object.
3426  * @mask: Host attention register mask for this ring.
3427  *
3428  * This function is called from the worker thread when there is a pending
3429  * ELS response iocb on the driver internal slow-path response iocb worker
3430  * queue. The caller does not hold any lock. The function will remove each
3431  * response iocb from the response worker queue and calls the handle
3432  * response iocb routine (lpfc_sli_sp_handle_rspiocb) to process it.
3433  **/
3434 static void
3435 lpfc_sli_handle_slow_ring_event_s4(struct lpfc_hba *phba,
3436 				   struct lpfc_sli_ring *pring, uint32_t mask)
3437 {
3438 	struct lpfc_iocbq *irspiocbq;
3439 	struct hbq_dmabuf *dmabuf;
3440 	struct lpfc_cq_event *cq_event;
3441 	unsigned long iflag;
3442 
3443 	spin_lock_irqsave(&phba->hbalock, iflag);
3444 	phba->hba_flag &= ~HBA_SP_QUEUE_EVT;
3445 	spin_unlock_irqrestore(&phba->hbalock, iflag);
3446 	while (!list_empty(&phba->sli4_hba.sp_queue_event)) {
3447 		/* Get the response iocb from the head of work queue */
3448 		spin_lock_irqsave(&phba->hbalock, iflag);
3449 		list_remove_head(&phba->sli4_hba.sp_queue_event,
3450 				 cq_event, struct lpfc_cq_event, list);
3451 		spin_unlock_irqrestore(&phba->hbalock, iflag);
3452 
3453 		switch (bf_get(lpfc_wcqe_c_code, &cq_event->cqe.wcqe_cmpl)) {
3454 		case CQE_CODE_COMPL_WQE:
3455 			irspiocbq = container_of(cq_event, struct lpfc_iocbq,
3456 						 cq_event);
3457 			/* Translate ELS WCQE to response IOCBQ */
3458 			irspiocbq = lpfc_sli4_els_wcqe_to_rspiocbq(phba,
3459 								   irspiocbq);
3460 			if (irspiocbq)
3461 				lpfc_sli_sp_handle_rspiocb(phba, pring,
3462 							   irspiocbq);
3463 			break;
3464 		case CQE_CODE_RECEIVE:
3465 		case CQE_CODE_RECEIVE_V1:
3466 			dmabuf = container_of(cq_event, struct hbq_dmabuf,
3467 					      cq_event);
3468 			lpfc_sli4_handle_received_buffer(phba, dmabuf);
3469 			break;
3470 		default:
3471 			break;
3472 		}
3473 	}
3474 }
3475 
3476 /**
3477  * lpfc_sli_abort_iocb_ring - Abort all iocbs in the ring
3478  * @phba: Pointer to HBA context object.
3479  * @pring: Pointer to driver SLI ring object.
3480  *
3481  * This function aborts all iocbs in the given ring and frees all the iocb
3482  * objects in txq. This function issues an abort iocb for all the iocb commands
3483  * in txcmplq. The iocbs in the txcmplq is not guaranteed to complete before
3484  * the return of this function. The caller is not required to hold any locks.
3485  **/
3486 void
3487 lpfc_sli_abort_iocb_ring(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
3488 {
3489 	LIST_HEAD(completions);
3490 	struct lpfc_iocbq *iocb, *next_iocb;
3491 
3492 	if (pring->ringno == LPFC_ELS_RING) {
3493 		lpfc_fabric_abort_hba(phba);
3494 	}
3495 
3496 	/* Error everything on txq and txcmplq
3497 	 * First do the txq.
3498 	 */
3499 	spin_lock_irq(&phba->hbalock);
3500 	list_splice_init(&pring->txq, &completions);
3501 	pring->txq_cnt = 0;
3502 
3503 	/* Next issue ABTS for everything on the txcmplq */
3504 	list_for_each_entry_safe(iocb, next_iocb, &pring->txcmplq, list)
3505 		lpfc_sli_issue_abort_iotag(phba, pring, iocb);
3506 
3507 	spin_unlock_irq(&phba->hbalock);
3508 
3509 	/* Cancel all the IOCBs from the completions list */
3510 	lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
3511 			      IOERR_SLI_ABORTED);
3512 }
3513 
3514 /**
3515  * lpfc_sli_flush_fcp_rings - flush all iocbs in the fcp ring
3516  * @phba: Pointer to HBA context object.
3517  *
3518  * This function flushes all iocbs in the fcp ring and frees all the iocb
3519  * objects in txq and txcmplq. This function will not issue abort iocbs
3520  * for all the iocb commands in txcmplq, they will just be returned with
3521  * IOERR_SLI_DOWN. This function is invoked with EEH when device's PCI
3522  * slot has been permanently disabled.
3523  **/
3524 void
3525 lpfc_sli_flush_fcp_rings(struct lpfc_hba *phba)
3526 {
3527 	LIST_HEAD(txq);
3528 	LIST_HEAD(txcmplq);
3529 	struct lpfc_sli *psli = &phba->sli;
3530 	struct lpfc_sli_ring  *pring;
3531 
3532 	/* Currently, only one fcp ring */
3533 	pring = &psli->ring[psli->fcp_ring];
3534 
3535 	spin_lock_irq(&phba->hbalock);
3536 	/* Retrieve everything on txq */
3537 	list_splice_init(&pring->txq, &txq);
3538 	pring->txq_cnt = 0;
3539 
3540 	/* Retrieve everything on the txcmplq */
3541 	list_splice_init(&pring->txcmplq, &txcmplq);
3542 	pring->txcmplq_cnt = 0;
3543 
3544 	/* Indicate the I/O queues are flushed */
3545 	phba->hba_flag |= HBA_FCP_IOQ_FLUSH;
3546 	spin_unlock_irq(&phba->hbalock);
3547 
3548 	/* Flush the txq */
3549 	lpfc_sli_cancel_iocbs(phba, &txq, IOSTAT_LOCAL_REJECT,
3550 			      IOERR_SLI_DOWN);
3551 
3552 	/* Flush the txcmpq */
3553 	lpfc_sli_cancel_iocbs(phba, &txcmplq, IOSTAT_LOCAL_REJECT,
3554 			      IOERR_SLI_DOWN);
3555 }
3556 
3557 /**
3558  * lpfc_sli_brdready_s3 - Check for sli3 host ready status
3559  * @phba: Pointer to HBA context object.
3560  * @mask: Bit mask to be checked.
3561  *
3562  * This function reads the host status register and compares
3563  * with the provided bit mask to check if HBA completed
3564  * the restart. This function will wait in a loop for the
3565  * HBA to complete restart. If the HBA does not restart within
3566  * 15 iterations, the function will reset the HBA again. The
3567  * function returns 1 when HBA fail to restart otherwise returns
3568  * zero.
3569  **/
3570 static int
3571 lpfc_sli_brdready_s3(struct lpfc_hba *phba, uint32_t mask)
3572 {
3573 	uint32_t status;
3574 	int i = 0;
3575 	int retval = 0;
3576 
3577 	/* Read the HBA Host Status Register */
3578 	if (lpfc_readl(phba->HSregaddr, &status))
3579 		return 1;
3580 
3581 	/*
3582 	 * Check status register every 100ms for 5 retries, then every
3583 	 * 500ms for 5, then every 2.5 sec for 5, then reset board and
3584 	 * every 2.5 sec for 4.
3585 	 * Break our of the loop if errors occurred during init.
3586 	 */
3587 	while (((status & mask) != mask) &&
3588 	       !(status & HS_FFERM) &&
3589 	       i++ < 20) {
3590 
3591 		if (i <= 5)
3592 			msleep(10);
3593 		else if (i <= 10)
3594 			msleep(500);
3595 		else
3596 			msleep(2500);
3597 
3598 		if (i == 15) {
3599 				/* Do post */
3600 			phba->pport->port_state = LPFC_VPORT_UNKNOWN;
3601 			lpfc_sli_brdrestart(phba);
3602 		}
3603 		/* Read the HBA Host Status Register */
3604 		if (lpfc_readl(phba->HSregaddr, &status)) {
3605 			retval = 1;
3606 			break;
3607 		}
3608 	}
3609 
3610 	/* Check to see if any errors occurred during init */
3611 	if ((status & HS_FFERM) || (i >= 20)) {
3612 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
3613 				"2751 Adapter failed to restart, "
3614 				"status reg x%x, FW Data: A8 x%x AC x%x\n",
3615 				status,
3616 				readl(phba->MBslimaddr + 0xa8),
3617 				readl(phba->MBslimaddr + 0xac));
3618 		phba->link_state = LPFC_HBA_ERROR;
3619 		retval = 1;
3620 	}
3621 
3622 	return retval;
3623 }
3624 
3625 /**
3626  * lpfc_sli_brdready_s4 - Check for sli4 host ready status
3627  * @phba: Pointer to HBA context object.
3628  * @mask: Bit mask to be checked.
3629  *
3630  * This function checks the host status register to check if HBA is
3631  * ready. This function will wait in a loop for the HBA to be ready
3632  * If the HBA is not ready , the function will will reset the HBA PCI
3633  * function again. The function returns 1 when HBA fail to be ready
3634  * otherwise returns zero.
3635  **/
3636 static int
3637 lpfc_sli_brdready_s4(struct lpfc_hba *phba, uint32_t mask)
3638 {
3639 	uint32_t status;
3640 	int retval = 0;
3641 
3642 	/* Read the HBA Host Status Register */
3643 	status = lpfc_sli4_post_status_check(phba);
3644 
3645 	if (status) {
3646 		phba->pport->port_state = LPFC_VPORT_UNKNOWN;
3647 		lpfc_sli_brdrestart(phba);
3648 		status = lpfc_sli4_post_status_check(phba);
3649 	}
3650 
3651 	/* Check to see if any errors occurred during init */
3652 	if (status) {
3653 		phba->link_state = LPFC_HBA_ERROR;
3654 		retval = 1;
3655 	} else
3656 		phba->sli4_hba.intr_enable = 0;
3657 
3658 	return retval;
3659 }
3660 
3661 /**
3662  * lpfc_sli_brdready - Wrapper func for checking the hba readyness
3663  * @phba: Pointer to HBA context object.
3664  * @mask: Bit mask to be checked.
3665  *
3666  * This routine wraps the actual SLI3 or SLI4 hba readyness check routine
3667  * from the API jump table function pointer from the lpfc_hba struct.
3668  **/
3669 int
3670 lpfc_sli_brdready(struct lpfc_hba *phba, uint32_t mask)
3671 {
3672 	return phba->lpfc_sli_brdready(phba, mask);
3673 }
3674 
3675 #define BARRIER_TEST_PATTERN (0xdeadbeef)
3676 
3677 /**
3678  * lpfc_reset_barrier - Make HBA ready for HBA reset
3679  * @phba: Pointer to HBA context object.
3680  *
3681  * This function is called before resetting an HBA. This function is called
3682  * with hbalock held and requests HBA to quiesce DMAs before a reset.
3683  **/
3684 void lpfc_reset_barrier(struct lpfc_hba *phba)
3685 {
3686 	uint32_t __iomem *resp_buf;
3687 	uint32_t __iomem *mbox_buf;
3688 	volatile uint32_t mbox;
3689 	uint32_t hc_copy, ha_copy, resp_data;
3690 	int  i;
3691 	uint8_t hdrtype;
3692 
3693 	pci_read_config_byte(phba->pcidev, PCI_HEADER_TYPE, &hdrtype);
3694 	if (hdrtype != 0x80 ||
3695 	    (FC_JEDEC_ID(phba->vpd.rev.biuRev) != HELIOS_JEDEC_ID &&
3696 	     FC_JEDEC_ID(phba->vpd.rev.biuRev) != THOR_JEDEC_ID))
3697 		return;
3698 
3699 	/*
3700 	 * Tell the other part of the chip to suspend temporarily all
3701 	 * its DMA activity.
3702 	 */
3703 	resp_buf = phba->MBslimaddr;
3704 
3705 	/* Disable the error attention */
3706 	if (lpfc_readl(phba->HCregaddr, &hc_copy))
3707 		return;
3708 	writel((hc_copy & ~HC_ERINT_ENA), phba->HCregaddr);
3709 	readl(phba->HCregaddr); /* flush */
3710 	phba->link_flag |= LS_IGNORE_ERATT;
3711 
3712 	if (lpfc_readl(phba->HAregaddr, &ha_copy))
3713 		return;
3714 	if (ha_copy & HA_ERATT) {
3715 		/* Clear Chip error bit */
3716 		writel(HA_ERATT, phba->HAregaddr);
3717 		phba->pport->stopped = 1;
3718 	}
3719 
3720 	mbox = 0;
3721 	((MAILBOX_t *)&mbox)->mbxCommand = MBX_KILL_BOARD;
3722 	((MAILBOX_t *)&mbox)->mbxOwner = OWN_CHIP;
3723 
3724 	writel(BARRIER_TEST_PATTERN, (resp_buf + 1));
3725 	mbox_buf = phba->MBslimaddr;
3726 	writel(mbox, mbox_buf);
3727 
3728 	for (i = 0; i < 50; i++) {
3729 		if (lpfc_readl((resp_buf + 1), &resp_data))
3730 			return;
3731 		if (resp_data != ~(BARRIER_TEST_PATTERN))
3732 			mdelay(1);
3733 		else
3734 			break;
3735 	}
3736 	resp_data = 0;
3737 	if (lpfc_readl((resp_buf + 1), &resp_data))
3738 		return;
3739 	if (resp_data  != ~(BARRIER_TEST_PATTERN)) {
3740 		if (phba->sli.sli_flag & LPFC_SLI_ACTIVE ||
3741 		    phba->pport->stopped)
3742 			goto restore_hc;
3743 		else
3744 			goto clear_errat;
3745 	}
3746 
3747 	((MAILBOX_t *)&mbox)->mbxOwner = OWN_HOST;
3748 	resp_data = 0;
3749 	for (i = 0; i < 500; i++) {
3750 		if (lpfc_readl(resp_buf, &resp_data))
3751 			return;
3752 		if (resp_data != mbox)
3753 			mdelay(1);
3754 		else
3755 			break;
3756 	}
3757 
3758 clear_errat:
3759 
3760 	while (++i < 500) {
3761 		if (lpfc_readl(phba->HAregaddr, &ha_copy))
3762 			return;
3763 		if (!(ha_copy & HA_ERATT))
3764 			mdelay(1);
3765 		else
3766 			break;
3767 	}
3768 
3769 	if (readl(phba->HAregaddr) & HA_ERATT) {
3770 		writel(HA_ERATT, phba->HAregaddr);
3771 		phba->pport->stopped = 1;
3772 	}
3773 
3774 restore_hc:
3775 	phba->link_flag &= ~LS_IGNORE_ERATT;
3776 	writel(hc_copy, phba->HCregaddr);
3777 	readl(phba->HCregaddr); /* flush */
3778 }
3779 
3780 /**
3781  * lpfc_sli_brdkill - Issue a kill_board mailbox command
3782  * @phba: Pointer to HBA context object.
3783  *
3784  * This function issues a kill_board mailbox command and waits for
3785  * the error attention interrupt. This function is called for stopping
3786  * the firmware processing. The caller is not required to hold any
3787  * locks. This function calls lpfc_hba_down_post function to free
3788  * any pending commands after the kill. The function will return 1 when it
3789  * fails to kill the board else will return 0.
3790  **/
3791 int
3792 lpfc_sli_brdkill(struct lpfc_hba *phba)
3793 {
3794 	struct lpfc_sli *psli;
3795 	LPFC_MBOXQ_t *pmb;
3796 	uint32_t status;
3797 	uint32_t ha_copy;
3798 	int retval;
3799 	int i = 0;
3800 
3801 	psli = &phba->sli;
3802 
3803 	/* Kill HBA */
3804 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
3805 			"0329 Kill HBA Data: x%x x%x\n",
3806 			phba->pport->port_state, psli->sli_flag);
3807 
3808 	pmb = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
3809 	if (!pmb)
3810 		return 1;
3811 
3812 	/* Disable the error attention */
3813 	spin_lock_irq(&phba->hbalock);
3814 	if (lpfc_readl(phba->HCregaddr, &status)) {
3815 		spin_unlock_irq(&phba->hbalock);
3816 		mempool_free(pmb, phba->mbox_mem_pool);
3817 		return 1;
3818 	}
3819 	status &= ~HC_ERINT_ENA;
3820 	writel(status, phba->HCregaddr);
3821 	readl(phba->HCregaddr); /* flush */
3822 	phba->link_flag |= LS_IGNORE_ERATT;
3823 	spin_unlock_irq(&phba->hbalock);
3824 
3825 	lpfc_kill_board(phba, pmb);
3826 	pmb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
3827 	retval = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
3828 
3829 	if (retval != MBX_SUCCESS) {
3830 		if (retval != MBX_BUSY)
3831 			mempool_free(pmb, phba->mbox_mem_pool);
3832 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
3833 				"2752 KILL_BOARD command failed retval %d\n",
3834 				retval);
3835 		spin_lock_irq(&phba->hbalock);
3836 		phba->link_flag &= ~LS_IGNORE_ERATT;
3837 		spin_unlock_irq(&phba->hbalock);
3838 		return 1;
3839 	}
3840 
3841 	spin_lock_irq(&phba->hbalock);
3842 	psli->sli_flag &= ~LPFC_SLI_ACTIVE;
3843 	spin_unlock_irq(&phba->hbalock);
3844 
3845 	mempool_free(pmb, phba->mbox_mem_pool);
3846 
3847 	/* There is no completion for a KILL_BOARD mbox cmd. Check for an error
3848 	 * attention every 100ms for 3 seconds. If we don't get ERATT after
3849 	 * 3 seconds we still set HBA_ERROR state because the status of the
3850 	 * board is now undefined.
3851 	 */
3852 	if (lpfc_readl(phba->HAregaddr, &ha_copy))
3853 		return 1;
3854 	while ((i++ < 30) && !(ha_copy & HA_ERATT)) {
3855 		mdelay(100);
3856 		if (lpfc_readl(phba->HAregaddr, &ha_copy))
3857 			return 1;
3858 	}
3859 
3860 	del_timer_sync(&psli->mbox_tmo);
3861 	if (ha_copy & HA_ERATT) {
3862 		writel(HA_ERATT, phba->HAregaddr);
3863 		phba->pport->stopped = 1;
3864 	}
3865 	spin_lock_irq(&phba->hbalock);
3866 	psli->sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
3867 	psli->mbox_active = NULL;
3868 	phba->link_flag &= ~LS_IGNORE_ERATT;
3869 	spin_unlock_irq(&phba->hbalock);
3870 
3871 	lpfc_hba_down_post(phba);
3872 	phba->link_state = LPFC_HBA_ERROR;
3873 
3874 	return ha_copy & HA_ERATT ? 0 : 1;
3875 }
3876 
3877 /**
3878  * lpfc_sli_brdreset - Reset a sli-2 or sli-3 HBA
3879  * @phba: Pointer to HBA context object.
3880  *
3881  * This function resets the HBA by writing HC_INITFF to the control
3882  * register. After the HBA resets, this function resets all the iocb ring
3883  * indices. This function disables PCI layer parity checking during
3884  * the reset.
3885  * This function returns 0 always.
3886  * The caller is not required to hold any locks.
3887  **/
3888 int
3889 lpfc_sli_brdreset(struct lpfc_hba *phba)
3890 {
3891 	struct lpfc_sli *psli;
3892 	struct lpfc_sli_ring *pring;
3893 	uint16_t cfg_value;
3894 	int i;
3895 
3896 	psli = &phba->sli;
3897 
3898 	/* Reset HBA */
3899 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
3900 			"0325 Reset HBA Data: x%x x%x\n",
3901 			phba->pport->port_state, psli->sli_flag);
3902 
3903 	/* perform board reset */
3904 	phba->fc_eventTag = 0;
3905 	phba->link_events = 0;
3906 	phba->pport->fc_myDID = 0;
3907 	phba->pport->fc_prevDID = 0;
3908 
3909 	/* Turn off parity checking and serr during the physical reset */
3910 	pci_read_config_word(phba->pcidev, PCI_COMMAND, &cfg_value);
3911 	pci_write_config_word(phba->pcidev, PCI_COMMAND,
3912 			      (cfg_value &
3913 			       ~(PCI_COMMAND_PARITY | PCI_COMMAND_SERR)));
3914 
3915 	psli->sli_flag &= ~(LPFC_SLI_ACTIVE | LPFC_PROCESS_LA);
3916 
3917 	/* Now toggle INITFF bit in the Host Control Register */
3918 	writel(HC_INITFF, phba->HCregaddr);
3919 	mdelay(1);
3920 	readl(phba->HCregaddr); /* flush */
3921 	writel(0, phba->HCregaddr);
3922 	readl(phba->HCregaddr); /* flush */
3923 
3924 	/* Restore PCI cmd register */
3925 	pci_write_config_word(phba->pcidev, PCI_COMMAND, cfg_value);
3926 
3927 	/* Initialize relevant SLI info */
3928 	for (i = 0; i < psli->num_rings; i++) {
3929 		pring = &psli->ring[i];
3930 		pring->flag = 0;
3931 		pring->sli.sli3.rspidx = 0;
3932 		pring->sli.sli3.next_cmdidx  = 0;
3933 		pring->sli.sli3.local_getidx = 0;
3934 		pring->sli.sli3.cmdidx = 0;
3935 		pring->missbufcnt = 0;
3936 	}
3937 
3938 	phba->link_state = LPFC_WARM_START;
3939 	return 0;
3940 }
3941 
3942 /**
3943  * lpfc_sli4_brdreset - Reset a sli-4 HBA
3944  * @phba: Pointer to HBA context object.
3945  *
3946  * This function resets a SLI4 HBA. This function disables PCI layer parity
3947  * checking during resets the device. The caller is not required to hold
3948  * any locks.
3949  *
3950  * This function returns 0 always.
3951  **/
3952 int
3953 lpfc_sli4_brdreset(struct lpfc_hba *phba)
3954 {
3955 	struct lpfc_sli *psli = &phba->sli;
3956 	uint16_t cfg_value;
3957 	int rc;
3958 
3959 	/* Reset HBA */
3960 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
3961 			"0295 Reset HBA Data: x%x x%x\n",
3962 			phba->pport->port_state, psli->sli_flag);
3963 
3964 	/* perform board reset */
3965 	phba->fc_eventTag = 0;
3966 	phba->link_events = 0;
3967 	phba->pport->fc_myDID = 0;
3968 	phba->pport->fc_prevDID = 0;
3969 
3970 	spin_lock_irq(&phba->hbalock);
3971 	psli->sli_flag &= ~(LPFC_PROCESS_LA);
3972 	phba->fcf.fcf_flag = 0;
3973 	spin_unlock_irq(&phba->hbalock);
3974 
3975 	/* Now physically reset the device */
3976 	lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
3977 			"0389 Performing PCI function reset!\n");
3978 
3979 	/* Turn off parity checking and serr during the physical reset */
3980 	pci_read_config_word(phba->pcidev, PCI_COMMAND, &cfg_value);
3981 	pci_write_config_word(phba->pcidev, PCI_COMMAND, (cfg_value &
3982 			      ~(PCI_COMMAND_PARITY | PCI_COMMAND_SERR)));
3983 
3984 	/* Perform FCoE PCI function reset before freeing queue memory */
3985 	rc = lpfc_pci_function_reset(phba);
3986 	lpfc_sli4_queue_destroy(phba);
3987 
3988 	/* Restore PCI cmd register */
3989 	pci_write_config_word(phba->pcidev, PCI_COMMAND, cfg_value);
3990 
3991 	return rc;
3992 }
3993 
3994 /**
3995  * lpfc_sli_brdrestart_s3 - Restart a sli-3 hba
3996  * @phba: Pointer to HBA context object.
3997  *
3998  * This function is called in the SLI initialization code path to
3999  * restart the HBA. The caller is not required to hold any lock.
4000  * This function writes MBX_RESTART mailbox command to the SLIM and
4001  * resets the HBA. At the end of the function, it calls lpfc_hba_down_post
4002  * function to free any pending commands. The function enables
4003  * POST only during the first initialization. The function returns zero.
4004  * The function does not guarantee completion of MBX_RESTART mailbox
4005  * command before the return of this function.
4006  **/
4007 static int
4008 lpfc_sli_brdrestart_s3(struct lpfc_hba *phba)
4009 {
4010 	MAILBOX_t *mb;
4011 	struct lpfc_sli *psli;
4012 	volatile uint32_t word0;
4013 	void __iomem *to_slim;
4014 	uint32_t hba_aer_enabled;
4015 
4016 	spin_lock_irq(&phba->hbalock);
4017 
4018 	/* Take PCIe device Advanced Error Reporting (AER) state */
4019 	hba_aer_enabled = phba->hba_flag & HBA_AER_ENABLED;
4020 
4021 	psli = &phba->sli;
4022 
4023 	/* Restart HBA */
4024 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
4025 			"0337 Restart HBA Data: x%x x%x\n",
4026 			phba->pport->port_state, psli->sli_flag);
4027 
4028 	word0 = 0;
4029 	mb = (MAILBOX_t *) &word0;
4030 	mb->mbxCommand = MBX_RESTART;
4031 	mb->mbxHc = 1;
4032 
4033 	lpfc_reset_barrier(phba);
4034 
4035 	to_slim = phba->MBslimaddr;
4036 	writel(*(uint32_t *) mb, to_slim);
4037 	readl(to_slim); /* flush */
4038 
4039 	/* Only skip post after fc_ffinit is completed */
4040 	if (phba->pport->port_state)
4041 		word0 = 1;	/* This is really setting up word1 */
4042 	else
4043 		word0 = 0;	/* This is really setting up word1 */
4044 	to_slim = phba->MBslimaddr + sizeof (uint32_t);
4045 	writel(*(uint32_t *) mb, to_slim);
4046 	readl(to_slim); /* flush */
4047 
4048 	lpfc_sli_brdreset(phba);
4049 	phba->pport->stopped = 0;
4050 	phba->link_state = LPFC_INIT_START;
4051 	phba->hba_flag = 0;
4052 	spin_unlock_irq(&phba->hbalock);
4053 
4054 	memset(&psli->lnk_stat_offsets, 0, sizeof(psli->lnk_stat_offsets));
4055 	psli->stats_start = get_seconds();
4056 
4057 	/* Give the INITFF and Post time to settle. */
4058 	mdelay(100);
4059 
4060 	/* Reset HBA AER if it was enabled, note hba_flag was reset above */
4061 	if (hba_aer_enabled)
4062 		pci_disable_pcie_error_reporting(phba->pcidev);
4063 
4064 	lpfc_hba_down_post(phba);
4065 
4066 	return 0;
4067 }
4068 
4069 /**
4070  * lpfc_sli_brdrestart_s4 - Restart the sli-4 hba
4071  * @phba: Pointer to HBA context object.
4072  *
4073  * This function is called in the SLI initialization code path to restart
4074  * a SLI4 HBA. The caller is not required to hold any lock.
4075  * At the end of the function, it calls lpfc_hba_down_post function to
4076  * free any pending commands.
4077  **/
4078 static int
4079 lpfc_sli_brdrestart_s4(struct lpfc_hba *phba)
4080 {
4081 	struct lpfc_sli *psli = &phba->sli;
4082 	uint32_t hba_aer_enabled;
4083 	int rc;
4084 
4085 	/* Restart HBA */
4086 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
4087 			"0296 Restart HBA Data: x%x x%x\n",
4088 			phba->pport->port_state, psli->sli_flag);
4089 
4090 	/* Take PCIe device Advanced Error Reporting (AER) state */
4091 	hba_aer_enabled = phba->hba_flag & HBA_AER_ENABLED;
4092 
4093 	rc = lpfc_sli4_brdreset(phba);
4094 
4095 	spin_lock_irq(&phba->hbalock);
4096 	phba->pport->stopped = 0;
4097 	phba->link_state = LPFC_INIT_START;
4098 	phba->hba_flag = 0;
4099 	spin_unlock_irq(&phba->hbalock);
4100 
4101 	memset(&psli->lnk_stat_offsets, 0, sizeof(psli->lnk_stat_offsets));
4102 	psli->stats_start = get_seconds();
4103 
4104 	/* Reset HBA AER if it was enabled, note hba_flag was reset above */
4105 	if (hba_aer_enabled)
4106 		pci_disable_pcie_error_reporting(phba->pcidev);
4107 
4108 	lpfc_hba_down_post(phba);
4109 
4110 	return rc;
4111 }
4112 
4113 /**
4114  * lpfc_sli_brdrestart - Wrapper func for restarting hba
4115  * @phba: Pointer to HBA context object.
4116  *
4117  * This routine wraps the actual SLI3 or SLI4 hba restart routine from the
4118  * API jump table function pointer from the lpfc_hba struct.
4119 **/
4120 int
4121 lpfc_sli_brdrestart(struct lpfc_hba *phba)
4122 {
4123 	return phba->lpfc_sli_brdrestart(phba);
4124 }
4125 
4126 /**
4127  * lpfc_sli_chipset_init - Wait for the restart of the HBA after a restart
4128  * @phba: Pointer to HBA context object.
4129  *
4130  * This function is called after a HBA restart to wait for successful
4131  * restart of the HBA. Successful restart of the HBA is indicated by
4132  * HS_FFRDY and HS_MBRDY bits. If the HBA fails to restart even after 15
4133  * iteration, the function will restart the HBA again. The function returns
4134  * zero if HBA successfully restarted else returns negative error code.
4135  **/
4136 static int
4137 lpfc_sli_chipset_init(struct lpfc_hba *phba)
4138 {
4139 	uint32_t status, i = 0;
4140 
4141 	/* Read the HBA Host Status Register */
4142 	if (lpfc_readl(phba->HSregaddr, &status))
4143 		return -EIO;
4144 
4145 	/* Check status register to see what current state is */
4146 	i = 0;
4147 	while ((status & (HS_FFRDY | HS_MBRDY)) != (HS_FFRDY | HS_MBRDY)) {
4148 
4149 		/* Check every 10ms for 10 retries, then every 100ms for 90
4150 		 * retries, then every 1 sec for 50 retires for a total of
4151 		 * ~60 seconds before reset the board again and check every
4152 		 * 1 sec for 50 retries. The up to 60 seconds before the
4153 		 * board ready is required by the Falcon FIPS zeroization
4154 		 * complete, and any reset the board in between shall cause
4155 		 * restart of zeroization, further delay the board ready.
4156 		 */
4157 		if (i++ >= 200) {
4158 			/* Adapter failed to init, timeout, status reg
4159 			   <status> */
4160 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4161 					"0436 Adapter failed to init, "
4162 					"timeout, status reg x%x, "
4163 					"FW Data: A8 x%x AC x%x\n", status,
4164 					readl(phba->MBslimaddr + 0xa8),
4165 					readl(phba->MBslimaddr + 0xac));
4166 			phba->link_state = LPFC_HBA_ERROR;
4167 			return -ETIMEDOUT;
4168 		}
4169 
4170 		/* Check to see if any errors occurred during init */
4171 		if (status & HS_FFERM) {
4172 			/* ERROR: During chipset initialization */
4173 			/* Adapter failed to init, chipset, status reg
4174 			   <status> */
4175 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4176 					"0437 Adapter failed to init, "
4177 					"chipset, status reg x%x, "
4178 					"FW Data: A8 x%x AC x%x\n", status,
4179 					readl(phba->MBslimaddr + 0xa8),
4180 					readl(phba->MBslimaddr + 0xac));
4181 			phba->link_state = LPFC_HBA_ERROR;
4182 			return -EIO;
4183 		}
4184 
4185 		if (i <= 10)
4186 			msleep(10);
4187 		else if (i <= 100)
4188 			msleep(100);
4189 		else
4190 			msleep(1000);
4191 
4192 		if (i == 150) {
4193 			/* Do post */
4194 			phba->pport->port_state = LPFC_VPORT_UNKNOWN;
4195 			lpfc_sli_brdrestart(phba);
4196 		}
4197 		/* Read the HBA Host Status Register */
4198 		if (lpfc_readl(phba->HSregaddr, &status))
4199 			return -EIO;
4200 	}
4201 
4202 	/* Check to see if any errors occurred during init */
4203 	if (status & HS_FFERM) {
4204 		/* ERROR: During chipset initialization */
4205 		/* Adapter failed to init, chipset, status reg <status> */
4206 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4207 				"0438 Adapter failed to init, chipset, "
4208 				"status reg x%x, "
4209 				"FW Data: A8 x%x AC x%x\n", status,
4210 				readl(phba->MBslimaddr + 0xa8),
4211 				readl(phba->MBslimaddr + 0xac));
4212 		phba->link_state = LPFC_HBA_ERROR;
4213 		return -EIO;
4214 	}
4215 
4216 	/* Clear all interrupt enable conditions */
4217 	writel(0, phba->HCregaddr);
4218 	readl(phba->HCregaddr); /* flush */
4219 
4220 	/* setup host attn register */
4221 	writel(0xffffffff, phba->HAregaddr);
4222 	readl(phba->HAregaddr); /* flush */
4223 	return 0;
4224 }
4225 
4226 /**
4227  * lpfc_sli_hbq_count - Get the number of HBQs to be configured
4228  *
4229  * This function calculates and returns the number of HBQs required to be
4230  * configured.
4231  **/
4232 int
4233 lpfc_sli_hbq_count(void)
4234 {
4235 	return ARRAY_SIZE(lpfc_hbq_defs);
4236 }
4237 
4238 /**
4239  * lpfc_sli_hbq_entry_count - Calculate total number of hbq entries
4240  *
4241  * This function adds the number of hbq entries in every HBQ to get
4242  * the total number of hbq entries required for the HBA and returns
4243  * the total count.
4244  **/
4245 static int
4246 lpfc_sli_hbq_entry_count(void)
4247 {
4248 	int  hbq_count = lpfc_sli_hbq_count();
4249 	int  count = 0;
4250 	int  i;
4251 
4252 	for (i = 0; i < hbq_count; ++i)
4253 		count += lpfc_hbq_defs[i]->entry_count;
4254 	return count;
4255 }
4256 
4257 /**
4258  * lpfc_sli_hbq_size - Calculate memory required for all hbq entries
4259  *
4260  * This function calculates amount of memory required for all hbq entries
4261  * to be configured and returns the total memory required.
4262  **/
4263 int
4264 lpfc_sli_hbq_size(void)
4265 {
4266 	return lpfc_sli_hbq_entry_count() * sizeof(struct lpfc_hbq_entry);
4267 }
4268 
4269 /**
4270  * lpfc_sli_hbq_setup - configure and initialize HBQs
4271  * @phba: Pointer to HBA context object.
4272  *
4273  * This function is called during the SLI initialization to configure
4274  * all the HBQs and post buffers to the HBQ. The caller is not
4275  * required to hold any locks. This function will return zero if successful
4276  * else it will return negative error code.
4277  **/
4278 static int
4279 lpfc_sli_hbq_setup(struct lpfc_hba *phba)
4280 {
4281 	int  hbq_count = lpfc_sli_hbq_count();
4282 	LPFC_MBOXQ_t *pmb;
4283 	MAILBOX_t *pmbox;
4284 	uint32_t hbqno;
4285 	uint32_t hbq_entry_index;
4286 
4287 				/* Get a Mailbox buffer to setup mailbox
4288 				 * commands for HBA initialization
4289 				 */
4290 	pmb = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
4291 
4292 	if (!pmb)
4293 		return -ENOMEM;
4294 
4295 	pmbox = &pmb->u.mb;
4296 
4297 	/* Initialize the struct lpfc_sli_hbq structure for each hbq */
4298 	phba->link_state = LPFC_INIT_MBX_CMDS;
4299 	phba->hbq_in_use = 1;
4300 
4301 	hbq_entry_index = 0;
4302 	for (hbqno = 0; hbqno < hbq_count; ++hbqno) {
4303 		phba->hbqs[hbqno].next_hbqPutIdx = 0;
4304 		phba->hbqs[hbqno].hbqPutIdx      = 0;
4305 		phba->hbqs[hbqno].local_hbqGetIdx   = 0;
4306 		phba->hbqs[hbqno].entry_count =
4307 			lpfc_hbq_defs[hbqno]->entry_count;
4308 		lpfc_config_hbq(phba, hbqno, lpfc_hbq_defs[hbqno],
4309 			hbq_entry_index, pmb);
4310 		hbq_entry_index += phba->hbqs[hbqno].entry_count;
4311 
4312 		if (lpfc_sli_issue_mbox(phba, pmb, MBX_POLL) != MBX_SUCCESS) {
4313 			/* Adapter failed to init, mbxCmd <cmd> CFG_RING,
4314 			   mbxStatus <status>, ring <num> */
4315 
4316 			lpfc_printf_log(phba, KERN_ERR,
4317 					LOG_SLI | LOG_VPORT,
4318 					"1805 Adapter failed to init. "
4319 					"Data: x%x x%x x%x\n",
4320 					pmbox->mbxCommand,
4321 					pmbox->mbxStatus, hbqno);
4322 
4323 			phba->link_state = LPFC_HBA_ERROR;
4324 			mempool_free(pmb, phba->mbox_mem_pool);
4325 			return -ENXIO;
4326 		}
4327 	}
4328 	phba->hbq_count = hbq_count;
4329 
4330 	mempool_free(pmb, phba->mbox_mem_pool);
4331 
4332 	/* Initially populate or replenish the HBQs */
4333 	for (hbqno = 0; hbqno < hbq_count; ++hbqno)
4334 		lpfc_sli_hbqbuf_init_hbqs(phba, hbqno);
4335 	return 0;
4336 }
4337 
4338 /**
4339  * lpfc_sli4_rb_setup - Initialize and post RBs to HBA
4340  * @phba: Pointer to HBA context object.
4341  *
4342  * This function is called during the SLI initialization to configure
4343  * all the HBQs and post buffers to the HBQ. The caller is not
4344  * required to hold any locks. This function will return zero if successful
4345  * else it will return negative error code.
4346  **/
4347 static int
4348 lpfc_sli4_rb_setup(struct lpfc_hba *phba)
4349 {
4350 	phba->hbq_in_use = 1;
4351 	phba->hbqs[0].entry_count = lpfc_hbq_defs[0]->entry_count;
4352 	phba->hbq_count = 1;
4353 	/* Initially populate or replenish the HBQs */
4354 	lpfc_sli_hbqbuf_init_hbqs(phba, 0);
4355 	return 0;
4356 }
4357 
4358 /**
4359  * lpfc_sli_config_port - Issue config port mailbox command
4360  * @phba: Pointer to HBA context object.
4361  * @sli_mode: sli mode - 2/3
4362  *
4363  * This function is called by the sli intialization code path
4364  * to issue config_port mailbox command. This function restarts the
4365  * HBA firmware and issues a config_port mailbox command to configure
4366  * the SLI interface in the sli mode specified by sli_mode
4367  * variable. The caller is not required to hold any locks.
4368  * The function returns 0 if successful, else returns negative error
4369  * code.
4370  **/
4371 int
4372 lpfc_sli_config_port(struct lpfc_hba *phba, int sli_mode)
4373 {
4374 	LPFC_MBOXQ_t *pmb;
4375 	uint32_t resetcount = 0, rc = 0, done = 0;
4376 
4377 	pmb = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
4378 	if (!pmb) {
4379 		phba->link_state = LPFC_HBA_ERROR;
4380 		return -ENOMEM;
4381 	}
4382 
4383 	phba->sli_rev = sli_mode;
4384 	while (resetcount < 2 && !done) {
4385 		spin_lock_irq(&phba->hbalock);
4386 		phba->sli.sli_flag |= LPFC_SLI_MBOX_ACTIVE;
4387 		spin_unlock_irq(&phba->hbalock);
4388 		phba->pport->port_state = LPFC_VPORT_UNKNOWN;
4389 		lpfc_sli_brdrestart(phba);
4390 		rc = lpfc_sli_chipset_init(phba);
4391 		if (rc)
4392 			break;
4393 
4394 		spin_lock_irq(&phba->hbalock);
4395 		phba->sli.sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
4396 		spin_unlock_irq(&phba->hbalock);
4397 		resetcount++;
4398 
4399 		/* Call pre CONFIG_PORT mailbox command initialization.  A
4400 		 * value of 0 means the call was successful.  Any other
4401 		 * nonzero value is a failure, but if ERESTART is returned,
4402 		 * the driver may reset the HBA and try again.
4403 		 */
4404 		rc = lpfc_config_port_prep(phba);
4405 		if (rc == -ERESTART) {
4406 			phba->link_state = LPFC_LINK_UNKNOWN;
4407 			continue;
4408 		} else if (rc)
4409 			break;
4410 
4411 		phba->link_state = LPFC_INIT_MBX_CMDS;
4412 		lpfc_config_port(phba, pmb);
4413 		rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
4414 		phba->sli3_options &= ~(LPFC_SLI3_NPIV_ENABLED |
4415 					LPFC_SLI3_HBQ_ENABLED |
4416 					LPFC_SLI3_CRP_ENABLED |
4417 					LPFC_SLI3_BG_ENABLED |
4418 					LPFC_SLI3_DSS_ENABLED);
4419 		if (rc != MBX_SUCCESS) {
4420 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4421 				"0442 Adapter failed to init, mbxCmd x%x "
4422 				"CONFIG_PORT, mbxStatus x%x Data: x%x\n",
4423 				pmb->u.mb.mbxCommand, pmb->u.mb.mbxStatus, 0);
4424 			spin_lock_irq(&phba->hbalock);
4425 			phba->sli.sli_flag &= ~LPFC_SLI_ACTIVE;
4426 			spin_unlock_irq(&phba->hbalock);
4427 			rc = -ENXIO;
4428 		} else {
4429 			/* Allow asynchronous mailbox command to go through */
4430 			spin_lock_irq(&phba->hbalock);
4431 			phba->sli.sli_flag &= ~LPFC_SLI_ASYNC_MBX_BLK;
4432 			spin_unlock_irq(&phba->hbalock);
4433 			done = 1;
4434 
4435 			if ((pmb->u.mb.un.varCfgPort.casabt == 1) &&
4436 			    (pmb->u.mb.un.varCfgPort.gasabt == 0))
4437 				lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
4438 					"3110 Port did not grant ASABT\n");
4439 		}
4440 	}
4441 	if (!done) {
4442 		rc = -EINVAL;
4443 		goto do_prep_failed;
4444 	}
4445 	if (pmb->u.mb.un.varCfgPort.sli_mode == 3) {
4446 		if (!pmb->u.mb.un.varCfgPort.cMA) {
4447 			rc = -ENXIO;
4448 			goto do_prep_failed;
4449 		}
4450 		if (phba->max_vpi && pmb->u.mb.un.varCfgPort.gmv) {
4451 			phba->sli3_options |= LPFC_SLI3_NPIV_ENABLED;
4452 			phba->max_vpi = pmb->u.mb.un.varCfgPort.max_vpi;
4453 			phba->max_vports = (phba->max_vpi > phba->max_vports) ?
4454 				phba->max_vpi : phba->max_vports;
4455 
4456 		} else
4457 			phba->max_vpi = 0;
4458 		phba->fips_level = 0;
4459 		phba->fips_spec_rev = 0;
4460 		if (pmb->u.mb.un.varCfgPort.gdss) {
4461 			phba->sli3_options |= LPFC_SLI3_DSS_ENABLED;
4462 			phba->fips_level = pmb->u.mb.un.varCfgPort.fips_level;
4463 			phba->fips_spec_rev = pmb->u.mb.un.varCfgPort.fips_rev;
4464 			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
4465 					"2850 Security Crypto Active. FIPS x%d "
4466 					"(Spec Rev: x%d)",
4467 					phba->fips_level, phba->fips_spec_rev);
4468 		}
4469 		if (pmb->u.mb.un.varCfgPort.sec_err) {
4470 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4471 					"2856 Config Port Security Crypto "
4472 					"Error: x%x ",
4473 					pmb->u.mb.un.varCfgPort.sec_err);
4474 		}
4475 		if (pmb->u.mb.un.varCfgPort.gerbm)
4476 			phba->sli3_options |= LPFC_SLI3_HBQ_ENABLED;
4477 		if (pmb->u.mb.un.varCfgPort.gcrp)
4478 			phba->sli3_options |= LPFC_SLI3_CRP_ENABLED;
4479 
4480 		phba->hbq_get = phba->mbox->us.s3_pgp.hbq_get;
4481 		phba->port_gp = phba->mbox->us.s3_pgp.port;
4482 
4483 		if (phba->cfg_enable_bg) {
4484 			if (pmb->u.mb.un.varCfgPort.gbg)
4485 				phba->sli3_options |= LPFC_SLI3_BG_ENABLED;
4486 			else
4487 				lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4488 						"0443 Adapter did not grant "
4489 						"BlockGuard\n");
4490 		}
4491 	} else {
4492 		phba->hbq_get = NULL;
4493 		phba->port_gp = phba->mbox->us.s2.port;
4494 		phba->max_vpi = 0;
4495 	}
4496 do_prep_failed:
4497 	mempool_free(pmb, phba->mbox_mem_pool);
4498 	return rc;
4499 }
4500 
4501 
4502 /**
4503  * lpfc_sli_hba_setup - SLI intialization function
4504  * @phba: Pointer to HBA context object.
4505  *
4506  * This function is the main SLI intialization function. This function
4507  * is called by the HBA intialization code, HBA reset code and HBA
4508  * error attention handler code. Caller is not required to hold any
4509  * locks. This function issues config_port mailbox command to configure
4510  * the SLI, setup iocb rings and HBQ rings. In the end the function
4511  * calls the config_port_post function to issue init_link mailbox
4512  * command and to start the discovery. The function will return zero
4513  * if successful, else it will return negative error code.
4514  **/
4515 int
4516 lpfc_sli_hba_setup(struct lpfc_hba *phba)
4517 {
4518 	uint32_t rc;
4519 	int  mode = 3, i;
4520 	int longs;
4521 
4522 	switch (lpfc_sli_mode) {
4523 	case 2:
4524 		if (phba->cfg_enable_npiv) {
4525 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT | LOG_VPORT,
4526 				"1824 NPIV enabled: Override lpfc_sli_mode "
4527 				"parameter (%d) to auto (0).\n",
4528 				lpfc_sli_mode);
4529 			break;
4530 		}
4531 		mode = 2;
4532 		break;
4533 	case 0:
4534 	case 3:
4535 		break;
4536 	default:
4537 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT | LOG_VPORT,
4538 				"1819 Unrecognized lpfc_sli_mode "
4539 				"parameter: %d.\n", lpfc_sli_mode);
4540 
4541 		break;
4542 	}
4543 
4544 	rc = lpfc_sli_config_port(phba, mode);
4545 
4546 	if (rc && lpfc_sli_mode == 3)
4547 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT | LOG_VPORT,
4548 				"1820 Unable to select SLI-3.  "
4549 				"Not supported by adapter.\n");
4550 	if (rc && mode != 2)
4551 		rc = lpfc_sli_config_port(phba, 2);
4552 	if (rc)
4553 		goto lpfc_sli_hba_setup_error;
4554 
4555 	/* Enable PCIe device Advanced Error Reporting (AER) if configured */
4556 	if (phba->cfg_aer_support == 1 && !(phba->hba_flag & HBA_AER_ENABLED)) {
4557 		rc = pci_enable_pcie_error_reporting(phba->pcidev);
4558 		if (!rc) {
4559 			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
4560 					"2709 This device supports "
4561 					"Advanced Error Reporting (AER)\n");
4562 			spin_lock_irq(&phba->hbalock);
4563 			phba->hba_flag |= HBA_AER_ENABLED;
4564 			spin_unlock_irq(&phba->hbalock);
4565 		} else {
4566 			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
4567 					"2708 This device does not support "
4568 					"Advanced Error Reporting (AER)\n");
4569 			phba->cfg_aer_support = 0;
4570 		}
4571 	}
4572 
4573 	if (phba->sli_rev == 3) {
4574 		phba->iocb_cmd_size = SLI3_IOCB_CMD_SIZE;
4575 		phba->iocb_rsp_size = SLI3_IOCB_RSP_SIZE;
4576 	} else {
4577 		phba->iocb_cmd_size = SLI2_IOCB_CMD_SIZE;
4578 		phba->iocb_rsp_size = SLI2_IOCB_RSP_SIZE;
4579 		phba->sli3_options = 0;
4580 	}
4581 
4582 	lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
4583 			"0444 Firmware in SLI %x mode. Max_vpi %d\n",
4584 			phba->sli_rev, phba->max_vpi);
4585 	rc = lpfc_sli_ring_map(phba);
4586 
4587 	if (rc)
4588 		goto lpfc_sli_hba_setup_error;
4589 
4590 	/* Initialize VPIs. */
4591 	if (phba->sli_rev == LPFC_SLI_REV3) {
4592 		/*
4593 		 * The VPI bitmask and physical ID array are allocated
4594 		 * and initialized once only - at driver load.  A port
4595 		 * reset doesn't need to reinitialize this memory.
4596 		 */
4597 		if ((phba->vpi_bmask == NULL) && (phba->vpi_ids == NULL)) {
4598 			longs = (phba->max_vpi + BITS_PER_LONG) / BITS_PER_LONG;
4599 			phba->vpi_bmask = kzalloc(longs * sizeof(unsigned long),
4600 						  GFP_KERNEL);
4601 			if (!phba->vpi_bmask) {
4602 				rc = -ENOMEM;
4603 				goto lpfc_sli_hba_setup_error;
4604 			}
4605 
4606 			phba->vpi_ids = kzalloc(
4607 					(phba->max_vpi+1) * sizeof(uint16_t),
4608 					GFP_KERNEL);
4609 			if (!phba->vpi_ids) {
4610 				kfree(phba->vpi_bmask);
4611 				rc = -ENOMEM;
4612 				goto lpfc_sli_hba_setup_error;
4613 			}
4614 			for (i = 0; i < phba->max_vpi; i++)
4615 				phba->vpi_ids[i] = i;
4616 		}
4617 	}
4618 
4619 	/* Init HBQs */
4620 	if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) {
4621 		rc = lpfc_sli_hbq_setup(phba);
4622 		if (rc)
4623 			goto lpfc_sli_hba_setup_error;
4624 	}
4625 	spin_lock_irq(&phba->hbalock);
4626 	phba->sli.sli_flag |= LPFC_PROCESS_LA;
4627 	spin_unlock_irq(&phba->hbalock);
4628 
4629 	rc = lpfc_config_port_post(phba);
4630 	if (rc)
4631 		goto lpfc_sli_hba_setup_error;
4632 
4633 	return rc;
4634 
4635 lpfc_sli_hba_setup_error:
4636 	phba->link_state = LPFC_HBA_ERROR;
4637 	lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4638 			"0445 Firmware initialization failed\n");
4639 	return rc;
4640 }
4641 
4642 /**
4643  * lpfc_sli4_read_fcoe_params - Read fcoe params from conf region
4644  * @phba: Pointer to HBA context object.
4645  * @mboxq: mailbox pointer.
4646  * This function issue a dump mailbox command to read config region
4647  * 23 and parse the records in the region and populate driver
4648  * data structure.
4649  **/
4650 static int
4651 lpfc_sli4_read_fcoe_params(struct lpfc_hba *phba)
4652 {
4653 	LPFC_MBOXQ_t *mboxq;
4654 	struct lpfc_dmabuf *mp;
4655 	struct lpfc_mqe *mqe;
4656 	uint32_t data_length;
4657 	int rc;
4658 
4659 	/* Program the default value of vlan_id and fc_map */
4660 	phba->valid_vlan = 0;
4661 	phba->fc_map[0] = LPFC_FCOE_FCF_MAP0;
4662 	phba->fc_map[1] = LPFC_FCOE_FCF_MAP1;
4663 	phba->fc_map[2] = LPFC_FCOE_FCF_MAP2;
4664 
4665 	mboxq = (LPFC_MBOXQ_t *)mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
4666 	if (!mboxq)
4667 		return -ENOMEM;
4668 
4669 	mqe = &mboxq->u.mqe;
4670 	if (lpfc_sli4_dump_cfg_rg23(phba, mboxq)) {
4671 		rc = -ENOMEM;
4672 		goto out_free_mboxq;
4673 	}
4674 
4675 	mp = (struct lpfc_dmabuf *) mboxq->context1;
4676 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
4677 
4678 	lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI,
4679 			"(%d):2571 Mailbox cmd x%x Status x%x "
4680 			"Data: x%x x%x x%x x%x x%x x%x x%x x%x x%x "
4681 			"x%x x%x x%x x%x x%x x%x x%x x%x x%x "
4682 			"CQ: x%x x%x x%x x%x\n",
4683 			mboxq->vport ? mboxq->vport->vpi : 0,
4684 			bf_get(lpfc_mqe_command, mqe),
4685 			bf_get(lpfc_mqe_status, mqe),
4686 			mqe->un.mb_words[0], mqe->un.mb_words[1],
4687 			mqe->un.mb_words[2], mqe->un.mb_words[3],
4688 			mqe->un.mb_words[4], mqe->un.mb_words[5],
4689 			mqe->un.mb_words[6], mqe->un.mb_words[7],
4690 			mqe->un.mb_words[8], mqe->un.mb_words[9],
4691 			mqe->un.mb_words[10], mqe->un.mb_words[11],
4692 			mqe->un.mb_words[12], mqe->un.mb_words[13],
4693 			mqe->un.mb_words[14], mqe->un.mb_words[15],
4694 			mqe->un.mb_words[16], mqe->un.mb_words[50],
4695 			mboxq->mcqe.word0,
4696 			mboxq->mcqe.mcqe_tag0, 	mboxq->mcqe.mcqe_tag1,
4697 			mboxq->mcqe.trailer);
4698 
4699 	if (rc) {
4700 		lpfc_mbuf_free(phba, mp->virt, mp->phys);
4701 		kfree(mp);
4702 		rc = -EIO;
4703 		goto out_free_mboxq;
4704 	}
4705 	data_length = mqe->un.mb_words[5];
4706 	if (data_length > DMP_RGN23_SIZE) {
4707 		lpfc_mbuf_free(phba, mp->virt, mp->phys);
4708 		kfree(mp);
4709 		rc = -EIO;
4710 		goto out_free_mboxq;
4711 	}
4712 
4713 	lpfc_parse_fcoe_conf(phba, mp->virt, data_length);
4714 	lpfc_mbuf_free(phba, mp->virt, mp->phys);
4715 	kfree(mp);
4716 	rc = 0;
4717 
4718 out_free_mboxq:
4719 	mempool_free(mboxq, phba->mbox_mem_pool);
4720 	return rc;
4721 }
4722 
4723 /**
4724  * lpfc_sli4_read_rev - Issue READ_REV and collect vpd data
4725  * @phba: pointer to lpfc hba data structure.
4726  * @mboxq: pointer to the LPFC_MBOXQ_t structure.
4727  * @vpd: pointer to the memory to hold resulting port vpd data.
4728  * @vpd_size: On input, the number of bytes allocated to @vpd.
4729  *	      On output, the number of data bytes in @vpd.
4730  *
4731  * This routine executes a READ_REV SLI4 mailbox command.  In
4732  * addition, this routine gets the port vpd data.
4733  *
4734  * Return codes
4735  * 	0 - successful
4736  * 	-ENOMEM - could not allocated memory.
4737  **/
4738 static int
4739 lpfc_sli4_read_rev(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq,
4740 		    uint8_t *vpd, uint32_t *vpd_size)
4741 {
4742 	int rc = 0;
4743 	uint32_t dma_size;
4744 	struct lpfc_dmabuf *dmabuf;
4745 	struct lpfc_mqe *mqe;
4746 
4747 	dmabuf = kzalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
4748 	if (!dmabuf)
4749 		return -ENOMEM;
4750 
4751 	/*
4752 	 * Get a DMA buffer for the vpd data resulting from the READ_REV
4753 	 * mailbox command.
4754 	 */
4755 	dma_size = *vpd_size;
4756 	dmabuf->virt = dma_alloc_coherent(&phba->pcidev->dev,
4757 					  dma_size,
4758 					  &dmabuf->phys,
4759 					  GFP_KERNEL);
4760 	if (!dmabuf->virt) {
4761 		kfree(dmabuf);
4762 		return -ENOMEM;
4763 	}
4764 	memset(dmabuf->virt, 0, dma_size);
4765 
4766 	/*
4767 	 * The SLI4 implementation of READ_REV conflicts at word1,
4768 	 * bits 31:16 and SLI4 adds vpd functionality not present
4769 	 * in SLI3.  This code corrects the conflicts.
4770 	 */
4771 	lpfc_read_rev(phba, mboxq);
4772 	mqe = &mboxq->u.mqe;
4773 	mqe->un.read_rev.vpd_paddr_high = putPaddrHigh(dmabuf->phys);
4774 	mqe->un.read_rev.vpd_paddr_low = putPaddrLow(dmabuf->phys);
4775 	mqe->un.read_rev.word1 &= 0x0000FFFF;
4776 	bf_set(lpfc_mbx_rd_rev_vpd, &mqe->un.read_rev, 1);
4777 	bf_set(lpfc_mbx_rd_rev_avail_len, &mqe->un.read_rev, dma_size);
4778 
4779 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
4780 	if (rc) {
4781 		dma_free_coherent(&phba->pcidev->dev, dma_size,
4782 				  dmabuf->virt, dmabuf->phys);
4783 		kfree(dmabuf);
4784 		return -EIO;
4785 	}
4786 
4787 	/*
4788 	 * The available vpd length cannot be bigger than the
4789 	 * DMA buffer passed to the port.  Catch the less than
4790 	 * case and update the caller's size.
4791 	 */
4792 	if (mqe->un.read_rev.avail_vpd_len < *vpd_size)
4793 		*vpd_size = mqe->un.read_rev.avail_vpd_len;
4794 
4795 	memcpy(vpd, dmabuf->virt, *vpd_size);
4796 
4797 	dma_free_coherent(&phba->pcidev->dev, dma_size,
4798 			  dmabuf->virt, dmabuf->phys);
4799 	kfree(dmabuf);
4800 	return 0;
4801 }
4802 
4803 /**
4804  * lpfc_sli4_retrieve_pport_name - Retrieve SLI4 device physical port name
4805  * @phba: pointer to lpfc hba data structure.
4806  *
4807  * This routine retrieves SLI4 device physical port name this PCI function
4808  * is attached to.
4809  *
4810  * Return codes
4811  *      0 - successful
4812  *      otherwise - failed to retrieve physical port name
4813  **/
4814 static int
4815 lpfc_sli4_retrieve_pport_name(struct lpfc_hba *phba)
4816 {
4817 	LPFC_MBOXQ_t *mboxq;
4818 	struct lpfc_mbx_get_cntl_attributes *mbx_cntl_attr;
4819 	struct lpfc_controller_attribute *cntl_attr;
4820 	struct lpfc_mbx_get_port_name *get_port_name;
4821 	void *virtaddr = NULL;
4822 	uint32_t alloclen, reqlen;
4823 	uint32_t shdr_status, shdr_add_status;
4824 	union lpfc_sli4_cfg_shdr *shdr;
4825 	char cport_name = 0;
4826 	int rc;
4827 
4828 	/* We assume nothing at this point */
4829 	phba->sli4_hba.lnk_info.lnk_dv = LPFC_LNK_DAT_INVAL;
4830 	phba->sli4_hba.pport_name_sta = LPFC_SLI4_PPNAME_NON;
4831 
4832 	mboxq = (LPFC_MBOXQ_t *)mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
4833 	if (!mboxq)
4834 		return -ENOMEM;
4835 	/* obtain link type and link number via READ_CONFIG */
4836 	phba->sli4_hba.lnk_info.lnk_dv = LPFC_LNK_DAT_INVAL;
4837 	lpfc_sli4_read_config(phba);
4838 	if (phba->sli4_hba.lnk_info.lnk_dv == LPFC_LNK_DAT_VAL)
4839 		goto retrieve_ppname;
4840 
4841 	/* obtain link type and link number via COMMON_GET_CNTL_ATTRIBUTES */
4842 	reqlen = sizeof(struct lpfc_mbx_get_cntl_attributes);
4843 	alloclen = lpfc_sli4_config(phba, mboxq, LPFC_MBOX_SUBSYSTEM_COMMON,
4844 			LPFC_MBOX_OPCODE_GET_CNTL_ATTRIBUTES, reqlen,
4845 			LPFC_SLI4_MBX_NEMBED);
4846 	if (alloclen < reqlen) {
4847 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
4848 				"3084 Allocated DMA memory size (%d) is "
4849 				"less than the requested DMA memory size "
4850 				"(%d)\n", alloclen, reqlen);
4851 		rc = -ENOMEM;
4852 		goto out_free_mboxq;
4853 	}
4854 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
4855 	virtaddr = mboxq->sge_array->addr[0];
4856 	mbx_cntl_attr = (struct lpfc_mbx_get_cntl_attributes *)virtaddr;
4857 	shdr = &mbx_cntl_attr->cfg_shdr;
4858 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
4859 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
4860 	if (shdr_status || shdr_add_status || rc) {
4861 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
4862 				"3085 Mailbox x%x (x%x/x%x) failed, "
4863 				"rc:x%x, status:x%x, add_status:x%x\n",
4864 				bf_get(lpfc_mqe_command, &mboxq->u.mqe),
4865 				lpfc_sli_config_mbox_subsys_get(phba, mboxq),
4866 				lpfc_sli_config_mbox_opcode_get(phba, mboxq),
4867 				rc, shdr_status, shdr_add_status);
4868 		rc = -ENXIO;
4869 		goto out_free_mboxq;
4870 	}
4871 	cntl_attr = &mbx_cntl_attr->cntl_attr;
4872 	phba->sli4_hba.lnk_info.lnk_dv = LPFC_LNK_DAT_VAL;
4873 	phba->sli4_hba.lnk_info.lnk_tp =
4874 		bf_get(lpfc_cntl_attr_lnk_type, cntl_attr);
4875 	phba->sli4_hba.lnk_info.lnk_no =
4876 		bf_get(lpfc_cntl_attr_lnk_numb, cntl_attr);
4877 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
4878 			"3086 lnk_type:%d, lnk_numb:%d\n",
4879 			phba->sli4_hba.lnk_info.lnk_tp,
4880 			phba->sli4_hba.lnk_info.lnk_no);
4881 
4882 retrieve_ppname:
4883 	lpfc_sli4_config(phba, mboxq, LPFC_MBOX_SUBSYSTEM_COMMON,
4884 		LPFC_MBOX_OPCODE_GET_PORT_NAME,
4885 		sizeof(struct lpfc_mbx_get_port_name) -
4886 		sizeof(struct lpfc_sli4_cfg_mhdr),
4887 		LPFC_SLI4_MBX_EMBED);
4888 	get_port_name = &mboxq->u.mqe.un.get_port_name;
4889 	shdr = (union lpfc_sli4_cfg_shdr *)&get_port_name->header.cfg_shdr;
4890 	bf_set(lpfc_mbox_hdr_version, &shdr->request, LPFC_OPCODE_VERSION_1);
4891 	bf_set(lpfc_mbx_get_port_name_lnk_type, &get_port_name->u.request,
4892 		phba->sli4_hba.lnk_info.lnk_tp);
4893 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
4894 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
4895 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
4896 	if (shdr_status || shdr_add_status || rc) {
4897 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
4898 				"3087 Mailbox x%x (x%x/x%x) failed: "
4899 				"rc:x%x, status:x%x, add_status:x%x\n",
4900 				bf_get(lpfc_mqe_command, &mboxq->u.mqe),
4901 				lpfc_sli_config_mbox_subsys_get(phba, mboxq),
4902 				lpfc_sli_config_mbox_opcode_get(phba, mboxq),
4903 				rc, shdr_status, shdr_add_status);
4904 		rc = -ENXIO;
4905 		goto out_free_mboxq;
4906 	}
4907 	switch (phba->sli4_hba.lnk_info.lnk_no) {
4908 	case LPFC_LINK_NUMBER_0:
4909 		cport_name = bf_get(lpfc_mbx_get_port_name_name0,
4910 				&get_port_name->u.response);
4911 		phba->sli4_hba.pport_name_sta = LPFC_SLI4_PPNAME_GET;
4912 		break;
4913 	case LPFC_LINK_NUMBER_1:
4914 		cport_name = bf_get(lpfc_mbx_get_port_name_name1,
4915 				&get_port_name->u.response);
4916 		phba->sli4_hba.pport_name_sta = LPFC_SLI4_PPNAME_GET;
4917 		break;
4918 	case LPFC_LINK_NUMBER_2:
4919 		cport_name = bf_get(lpfc_mbx_get_port_name_name2,
4920 				&get_port_name->u.response);
4921 		phba->sli4_hba.pport_name_sta = LPFC_SLI4_PPNAME_GET;
4922 		break;
4923 	case LPFC_LINK_NUMBER_3:
4924 		cport_name = bf_get(lpfc_mbx_get_port_name_name3,
4925 				&get_port_name->u.response);
4926 		phba->sli4_hba.pport_name_sta = LPFC_SLI4_PPNAME_GET;
4927 		break;
4928 	default:
4929 		break;
4930 	}
4931 
4932 	if (phba->sli4_hba.pport_name_sta == LPFC_SLI4_PPNAME_GET) {
4933 		phba->Port[0] = cport_name;
4934 		phba->Port[1] = '\0';
4935 		lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
4936 				"3091 SLI get port name: %s\n", phba->Port);
4937 	}
4938 
4939 out_free_mboxq:
4940 	if (rc != MBX_TIMEOUT) {
4941 		if (bf_get(lpfc_mqe_command, &mboxq->u.mqe) == MBX_SLI4_CONFIG)
4942 			lpfc_sli4_mbox_cmd_free(phba, mboxq);
4943 		else
4944 			mempool_free(mboxq, phba->mbox_mem_pool);
4945 	}
4946 	return rc;
4947 }
4948 
4949 /**
4950  * lpfc_sli4_arm_cqeq_intr - Arm sli-4 device completion and event queues
4951  * @phba: pointer to lpfc hba data structure.
4952  *
4953  * This routine is called to explicitly arm the SLI4 device's completion and
4954  * event queues
4955  **/
4956 static void
4957 lpfc_sli4_arm_cqeq_intr(struct lpfc_hba *phba)
4958 {
4959 	int fcp_eqidx;
4960 
4961 	lpfc_sli4_cq_release(phba->sli4_hba.mbx_cq, LPFC_QUEUE_REARM);
4962 	lpfc_sli4_cq_release(phba->sli4_hba.els_cq, LPFC_QUEUE_REARM);
4963 	fcp_eqidx = 0;
4964 	if (phba->sli4_hba.fcp_cq) {
4965 		do {
4966 			lpfc_sli4_cq_release(phba->sli4_hba.fcp_cq[fcp_eqidx],
4967 					     LPFC_QUEUE_REARM);
4968 		} while (++fcp_eqidx < phba->cfg_fcp_io_channel);
4969 	}
4970 	if (phba->sli4_hba.hba_eq) {
4971 		for (fcp_eqidx = 0; fcp_eqidx < phba->cfg_fcp_io_channel;
4972 		     fcp_eqidx++)
4973 			lpfc_sli4_eq_release(phba->sli4_hba.hba_eq[fcp_eqidx],
4974 					     LPFC_QUEUE_REARM);
4975 	}
4976 }
4977 
4978 /**
4979  * lpfc_sli4_get_avail_extnt_rsrc - Get available resource extent count.
4980  * @phba: Pointer to HBA context object.
4981  * @type: The resource extent type.
4982  * @extnt_count: buffer to hold port available extent count.
4983  * @extnt_size: buffer to hold element count per extent.
4984  *
4985  * This function calls the port and retrievs the number of available
4986  * extents and their size for a particular extent type.
4987  *
4988  * Returns: 0 if successful.  Nonzero otherwise.
4989  **/
4990 int
4991 lpfc_sli4_get_avail_extnt_rsrc(struct lpfc_hba *phba, uint16_t type,
4992 			       uint16_t *extnt_count, uint16_t *extnt_size)
4993 {
4994 	int rc = 0;
4995 	uint32_t length;
4996 	uint32_t mbox_tmo;
4997 	struct lpfc_mbx_get_rsrc_extent_info *rsrc_info;
4998 	LPFC_MBOXQ_t *mbox;
4999 
5000 	mbox = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
5001 	if (!mbox)
5002 		return -ENOMEM;
5003 
5004 	/* Find out how many extents are available for this resource type */
5005 	length = (sizeof(struct lpfc_mbx_get_rsrc_extent_info) -
5006 		  sizeof(struct lpfc_sli4_cfg_mhdr));
5007 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
5008 			 LPFC_MBOX_OPCODE_GET_RSRC_EXTENT_INFO,
5009 			 length, LPFC_SLI4_MBX_EMBED);
5010 
5011 	/* Send an extents count of 0 - the GET doesn't use it. */
5012 	rc = lpfc_sli4_mbox_rsrc_extent(phba, mbox, 0, type,
5013 					LPFC_SLI4_MBX_EMBED);
5014 	if (unlikely(rc)) {
5015 		rc = -EIO;
5016 		goto err_exit;
5017 	}
5018 
5019 	if (!phba->sli4_hba.intr_enable)
5020 		rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
5021 	else {
5022 		mbox_tmo = lpfc_mbox_tmo_val(phba, mbox);
5023 		rc = lpfc_sli_issue_mbox_wait(phba, mbox, mbox_tmo);
5024 	}
5025 	if (unlikely(rc)) {
5026 		rc = -EIO;
5027 		goto err_exit;
5028 	}
5029 
5030 	rsrc_info = &mbox->u.mqe.un.rsrc_extent_info;
5031 	if (bf_get(lpfc_mbox_hdr_status,
5032 		   &rsrc_info->header.cfg_shdr.response)) {
5033 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_INIT,
5034 				"2930 Failed to get resource extents "
5035 				"Status 0x%x Add'l Status 0x%x\n",
5036 				bf_get(lpfc_mbox_hdr_status,
5037 				       &rsrc_info->header.cfg_shdr.response),
5038 				bf_get(lpfc_mbox_hdr_add_status,
5039 				       &rsrc_info->header.cfg_shdr.response));
5040 		rc = -EIO;
5041 		goto err_exit;
5042 	}
5043 
5044 	*extnt_count = bf_get(lpfc_mbx_get_rsrc_extent_info_cnt,
5045 			      &rsrc_info->u.rsp);
5046 	*extnt_size = bf_get(lpfc_mbx_get_rsrc_extent_info_size,
5047 			     &rsrc_info->u.rsp);
5048 
5049 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
5050 			"3162 Retrieved extents type-%d from port: count:%d, "
5051 			"size:%d\n", type, *extnt_count, *extnt_size);
5052 
5053 err_exit:
5054 	mempool_free(mbox, phba->mbox_mem_pool);
5055 	return rc;
5056 }
5057 
5058 /**
5059  * lpfc_sli4_chk_avail_extnt_rsrc - Check for available SLI4 resource extents.
5060  * @phba: Pointer to HBA context object.
5061  * @type: The extent type to check.
5062  *
5063  * This function reads the current available extents from the port and checks
5064  * if the extent count or extent size has changed since the last access.
5065  * Callers use this routine post port reset to understand if there is a
5066  * extent reprovisioning requirement.
5067  *
5068  * Returns:
5069  *   -Error: error indicates problem.
5070  *   1: Extent count or size has changed.
5071  *   0: No changes.
5072  **/
5073 static int
5074 lpfc_sli4_chk_avail_extnt_rsrc(struct lpfc_hba *phba, uint16_t type)
5075 {
5076 	uint16_t curr_ext_cnt, rsrc_ext_cnt;
5077 	uint16_t size_diff, rsrc_ext_size;
5078 	int rc = 0;
5079 	struct lpfc_rsrc_blks *rsrc_entry;
5080 	struct list_head *rsrc_blk_list = NULL;
5081 
5082 	size_diff = 0;
5083 	curr_ext_cnt = 0;
5084 	rc = lpfc_sli4_get_avail_extnt_rsrc(phba, type,
5085 					    &rsrc_ext_cnt,
5086 					    &rsrc_ext_size);
5087 	if (unlikely(rc))
5088 		return -EIO;
5089 
5090 	switch (type) {
5091 	case LPFC_RSC_TYPE_FCOE_RPI:
5092 		rsrc_blk_list = &phba->sli4_hba.lpfc_rpi_blk_list;
5093 		break;
5094 	case LPFC_RSC_TYPE_FCOE_VPI:
5095 		rsrc_blk_list = &phba->lpfc_vpi_blk_list;
5096 		break;
5097 	case LPFC_RSC_TYPE_FCOE_XRI:
5098 		rsrc_blk_list = &phba->sli4_hba.lpfc_xri_blk_list;
5099 		break;
5100 	case LPFC_RSC_TYPE_FCOE_VFI:
5101 		rsrc_blk_list = &phba->sli4_hba.lpfc_vfi_blk_list;
5102 		break;
5103 	default:
5104 		break;
5105 	}
5106 
5107 	list_for_each_entry(rsrc_entry, rsrc_blk_list, list) {
5108 		curr_ext_cnt++;
5109 		if (rsrc_entry->rsrc_size != rsrc_ext_size)
5110 			size_diff++;
5111 	}
5112 
5113 	if (curr_ext_cnt != rsrc_ext_cnt || size_diff != 0)
5114 		rc = 1;
5115 
5116 	return rc;
5117 }
5118 
5119 /**
5120  * lpfc_sli4_cfg_post_extnts -
5121  * @phba: Pointer to HBA context object.
5122  * @extnt_cnt - number of available extents.
5123  * @type - the extent type (rpi, xri, vfi, vpi).
5124  * @emb - buffer to hold either MBX_EMBED or MBX_NEMBED operation.
5125  * @mbox - pointer to the caller's allocated mailbox structure.
5126  *
5127  * This function executes the extents allocation request.  It also
5128  * takes care of the amount of memory needed to allocate or get the
5129  * allocated extents. It is the caller's responsibility to evaluate
5130  * the response.
5131  *
5132  * Returns:
5133  *   -Error:  Error value describes the condition found.
5134  *   0: if successful
5135  **/
5136 static int
5137 lpfc_sli4_cfg_post_extnts(struct lpfc_hba *phba, uint16_t extnt_cnt,
5138 			  uint16_t type, bool *emb, LPFC_MBOXQ_t *mbox)
5139 {
5140 	int rc = 0;
5141 	uint32_t req_len;
5142 	uint32_t emb_len;
5143 	uint32_t alloc_len, mbox_tmo;
5144 
5145 	/* Calculate the total requested length of the dma memory */
5146 	req_len = extnt_cnt * sizeof(uint16_t);
5147 
5148 	/*
5149 	 * Calculate the size of an embedded mailbox.  The uint32_t
5150 	 * accounts for extents-specific word.
5151 	 */
5152 	emb_len = sizeof(MAILBOX_t) - sizeof(struct mbox_header) -
5153 		sizeof(uint32_t);
5154 
5155 	/*
5156 	 * Presume the allocation and response will fit into an embedded
5157 	 * mailbox.  If not true, reconfigure to a non-embedded mailbox.
5158 	 */
5159 	*emb = LPFC_SLI4_MBX_EMBED;
5160 	if (req_len > emb_len) {
5161 		req_len = extnt_cnt * sizeof(uint16_t) +
5162 			sizeof(union lpfc_sli4_cfg_shdr) +
5163 			sizeof(uint32_t);
5164 		*emb = LPFC_SLI4_MBX_NEMBED;
5165 	}
5166 
5167 	alloc_len = lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
5168 				     LPFC_MBOX_OPCODE_ALLOC_RSRC_EXTENT,
5169 				     req_len, *emb);
5170 	if (alloc_len < req_len) {
5171 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5172 			"2982 Allocated DMA memory size (x%x) is "
5173 			"less than the requested DMA memory "
5174 			"size (x%x)\n", alloc_len, req_len);
5175 		return -ENOMEM;
5176 	}
5177 	rc = lpfc_sli4_mbox_rsrc_extent(phba, mbox, extnt_cnt, type, *emb);
5178 	if (unlikely(rc))
5179 		return -EIO;
5180 
5181 	if (!phba->sli4_hba.intr_enable)
5182 		rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
5183 	else {
5184 		mbox_tmo = lpfc_mbox_tmo_val(phba, mbox);
5185 		rc = lpfc_sli_issue_mbox_wait(phba, mbox, mbox_tmo);
5186 	}
5187 
5188 	if (unlikely(rc))
5189 		rc = -EIO;
5190 	return rc;
5191 }
5192 
5193 /**
5194  * lpfc_sli4_alloc_extent - Allocate an SLI4 resource extent.
5195  * @phba: Pointer to HBA context object.
5196  * @type:  The resource extent type to allocate.
5197  *
5198  * This function allocates the number of elements for the specified
5199  * resource type.
5200  **/
5201 static int
5202 lpfc_sli4_alloc_extent(struct lpfc_hba *phba, uint16_t type)
5203 {
5204 	bool emb = false;
5205 	uint16_t rsrc_id_cnt, rsrc_cnt, rsrc_size;
5206 	uint16_t rsrc_id, rsrc_start, j, k;
5207 	uint16_t *ids;
5208 	int i, rc;
5209 	unsigned long longs;
5210 	unsigned long *bmask;
5211 	struct lpfc_rsrc_blks *rsrc_blks;
5212 	LPFC_MBOXQ_t *mbox;
5213 	uint32_t length;
5214 	struct lpfc_id_range *id_array = NULL;
5215 	void *virtaddr = NULL;
5216 	struct lpfc_mbx_nembed_rsrc_extent *n_rsrc;
5217 	struct lpfc_mbx_alloc_rsrc_extents *rsrc_ext;
5218 	struct list_head *ext_blk_list;
5219 
5220 	rc = lpfc_sli4_get_avail_extnt_rsrc(phba, type,
5221 					    &rsrc_cnt,
5222 					    &rsrc_size);
5223 	if (unlikely(rc))
5224 		return -EIO;
5225 
5226 	if ((rsrc_cnt == 0) || (rsrc_size == 0)) {
5227 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_INIT,
5228 			"3009 No available Resource Extents "
5229 			"for resource type 0x%x: Count: 0x%x, "
5230 			"Size 0x%x\n", type, rsrc_cnt,
5231 			rsrc_size);
5232 		return -ENOMEM;
5233 	}
5234 
5235 	lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_INIT | LOG_SLI,
5236 			"2903 Post resource extents type-0x%x: "
5237 			"count:%d, size %d\n", type, rsrc_cnt, rsrc_size);
5238 
5239 	mbox = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
5240 	if (!mbox)
5241 		return -ENOMEM;
5242 
5243 	rc = lpfc_sli4_cfg_post_extnts(phba, rsrc_cnt, type, &emb, mbox);
5244 	if (unlikely(rc)) {
5245 		rc = -EIO;
5246 		goto err_exit;
5247 	}
5248 
5249 	/*
5250 	 * Figure out where the response is located.  Then get local pointers
5251 	 * to the response data.  The port does not guarantee to respond to
5252 	 * all extents counts request so update the local variable with the
5253 	 * allocated count from the port.
5254 	 */
5255 	if (emb == LPFC_SLI4_MBX_EMBED) {
5256 		rsrc_ext = &mbox->u.mqe.un.alloc_rsrc_extents;
5257 		id_array = &rsrc_ext->u.rsp.id[0];
5258 		rsrc_cnt = bf_get(lpfc_mbx_rsrc_cnt, &rsrc_ext->u.rsp);
5259 	} else {
5260 		virtaddr = mbox->sge_array->addr[0];
5261 		n_rsrc = (struct lpfc_mbx_nembed_rsrc_extent *) virtaddr;
5262 		rsrc_cnt = bf_get(lpfc_mbx_rsrc_cnt, n_rsrc);
5263 		id_array = &n_rsrc->id;
5264 	}
5265 
5266 	longs = ((rsrc_cnt * rsrc_size) + BITS_PER_LONG - 1) / BITS_PER_LONG;
5267 	rsrc_id_cnt = rsrc_cnt * rsrc_size;
5268 
5269 	/*
5270 	 * Based on the resource size and count, correct the base and max
5271 	 * resource values.
5272 	 */
5273 	length = sizeof(struct lpfc_rsrc_blks);
5274 	switch (type) {
5275 	case LPFC_RSC_TYPE_FCOE_RPI:
5276 		phba->sli4_hba.rpi_bmask = kzalloc(longs *
5277 						   sizeof(unsigned long),
5278 						   GFP_KERNEL);
5279 		if (unlikely(!phba->sli4_hba.rpi_bmask)) {
5280 			rc = -ENOMEM;
5281 			goto err_exit;
5282 		}
5283 		phba->sli4_hba.rpi_ids = kzalloc(rsrc_id_cnt *
5284 						 sizeof(uint16_t),
5285 						 GFP_KERNEL);
5286 		if (unlikely(!phba->sli4_hba.rpi_ids)) {
5287 			kfree(phba->sli4_hba.rpi_bmask);
5288 			rc = -ENOMEM;
5289 			goto err_exit;
5290 		}
5291 
5292 		/*
5293 		 * The next_rpi was initialized with the maximum available
5294 		 * count but the port may allocate a smaller number.  Catch
5295 		 * that case and update the next_rpi.
5296 		 */
5297 		phba->sli4_hba.next_rpi = rsrc_id_cnt;
5298 
5299 		/* Initialize local ptrs for common extent processing later. */
5300 		bmask = phba->sli4_hba.rpi_bmask;
5301 		ids = phba->sli4_hba.rpi_ids;
5302 		ext_blk_list = &phba->sli4_hba.lpfc_rpi_blk_list;
5303 		break;
5304 	case LPFC_RSC_TYPE_FCOE_VPI:
5305 		phba->vpi_bmask = kzalloc(longs *
5306 					  sizeof(unsigned long),
5307 					  GFP_KERNEL);
5308 		if (unlikely(!phba->vpi_bmask)) {
5309 			rc = -ENOMEM;
5310 			goto err_exit;
5311 		}
5312 		phba->vpi_ids = kzalloc(rsrc_id_cnt *
5313 					 sizeof(uint16_t),
5314 					 GFP_KERNEL);
5315 		if (unlikely(!phba->vpi_ids)) {
5316 			kfree(phba->vpi_bmask);
5317 			rc = -ENOMEM;
5318 			goto err_exit;
5319 		}
5320 
5321 		/* Initialize local ptrs for common extent processing later. */
5322 		bmask = phba->vpi_bmask;
5323 		ids = phba->vpi_ids;
5324 		ext_blk_list = &phba->lpfc_vpi_blk_list;
5325 		break;
5326 	case LPFC_RSC_TYPE_FCOE_XRI:
5327 		phba->sli4_hba.xri_bmask = kzalloc(longs *
5328 						   sizeof(unsigned long),
5329 						   GFP_KERNEL);
5330 		if (unlikely(!phba->sli4_hba.xri_bmask)) {
5331 			rc = -ENOMEM;
5332 			goto err_exit;
5333 		}
5334 		phba->sli4_hba.max_cfg_param.xri_used = 0;
5335 		phba->sli4_hba.xri_ids = kzalloc(rsrc_id_cnt *
5336 						 sizeof(uint16_t),
5337 						 GFP_KERNEL);
5338 		if (unlikely(!phba->sli4_hba.xri_ids)) {
5339 			kfree(phba->sli4_hba.xri_bmask);
5340 			rc = -ENOMEM;
5341 			goto err_exit;
5342 		}
5343 
5344 		/* Initialize local ptrs for common extent processing later. */
5345 		bmask = phba->sli4_hba.xri_bmask;
5346 		ids = phba->sli4_hba.xri_ids;
5347 		ext_blk_list = &phba->sli4_hba.lpfc_xri_blk_list;
5348 		break;
5349 	case LPFC_RSC_TYPE_FCOE_VFI:
5350 		phba->sli4_hba.vfi_bmask = kzalloc(longs *
5351 						   sizeof(unsigned long),
5352 						   GFP_KERNEL);
5353 		if (unlikely(!phba->sli4_hba.vfi_bmask)) {
5354 			rc = -ENOMEM;
5355 			goto err_exit;
5356 		}
5357 		phba->sli4_hba.vfi_ids = kzalloc(rsrc_id_cnt *
5358 						 sizeof(uint16_t),
5359 						 GFP_KERNEL);
5360 		if (unlikely(!phba->sli4_hba.vfi_ids)) {
5361 			kfree(phba->sli4_hba.vfi_bmask);
5362 			rc = -ENOMEM;
5363 			goto err_exit;
5364 		}
5365 
5366 		/* Initialize local ptrs for common extent processing later. */
5367 		bmask = phba->sli4_hba.vfi_bmask;
5368 		ids = phba->sli4_hba.vfi_ids;
5369 		ext_blk_list = &phba->sli4_hba.lpfc_vfi_blk_list;
5370 		break;
5371 	default:
5372 		/* Unsupported Opcode.  Fail call. */
5373 		id_array = NULL;
5374 		bmask = NULL;
5375 		ids = NULL;
5376 		ext_blk_list = NULL;
5377 		goto err_exit;
5378 	}
5379 
5380 	/*
5381 	 * Complete initializing the extent configuration with the
5382 	 * allocated ids assigned to this function.  The bitmask serves
5383 	 * as an index into the array and manages the available ids.  The
5384 	 * array just stores the ids communicated to the port via the wqes.
5385 	 */
5386 	for (i = 0, j = 0, k = 0; i < rsrc_cnt; i++) {
5387 		if ((i % 2) == 0)
5388 			rsrc_id = bf_get(lpfc_mbx_rsrc_id_word4_0,
5389 					 &id_array[k]);
5390 		else
5391 			rsrc_id = bf_get(lpfc_mbx_rsrc_id_word4_1,
5392 					 &id_array[k]);
5393 
5394 		rsrc_blks = kzalloc(length, GFP_KERNEL);
5395 		if (unlikely(!rsrc_blks)) {
5396 			rc = -ENOMEM;
5397 			kfree(bmask);
5398 			kfree(ids);
5399 			goto err_exit;
5400 		}
5401 		rsrc_blks->rsrc_start = rsrc_id;
5402 		rsrc_blks->rsrc_size = rsrc_size;
5403 		list_add_tail(&rsrc_blks->list, ext_blk_list);
5404 		rsrc_start = rsrc_id;
5405 		if ((type == LPFC_RSC_TYPE_FCOE_XRI) && (j == 0))
5406 			phba->sli4_hba.scsi_xri_start = rsrc_start +
5407 				lpfc_sli4_get_els_iocb_cnt(phba);
5408 
5409 		while (rsrc_id < (rsrc_start + rsrc_size)) {
5410 			ids[j] = rsrc_id;
5411 			rsrc_id++;
5412 			j++;
5413 		}
5414 		/* Entire word processed.  Get next word.*/
5415 		if ((i % 2) == 1)
5416 			k++;
5417 	}
5418  err_exit:
5419 	lpfc_sli4_mbox_cmd_free(phba, mbox);
5420 	return rc;
5421 }
5422 
5423 /**
5424  * lpfc_sli4_dealloc_extent - Deallocate an SLI4 resource extent.
5425  * @phba: Pointer to HBA context object.
5426  * @type: the extent's type.
5427  *
5428  * This function deallocates all extents of a particular resource type.
5429  * SLI4 does not allow for deallocating a particular extent range.  It
5430  * is the caller's responsibility to release all kernel memory resources.
5431  **/
5432 static int
5433 lpfc_sli4_dealloc_extent(struct lpfc_hba *phba, uint16_t type)
5434 {
5435 	int rc;
5436 	uint32_t length, mbox_tmo = 0;
5437 	LPFC_MBOXQ_t *mbox;
5438 	struct lpfc_mbx_dealloc_rsrc_extents *dealloc_rsrc;
5439 	struct lpfc_rsrc_blks *rsrc_blk, *rsrc_blk_next;
5440 
5441 	mbox = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
5442 	if (!mbox)
5443 		return -ENOMEM;
5444 
5445 	/*
5446 	 * This function sends an embedded mailbox because it only sends the
5447 	 * the resource type.  All extents of this type are released by the
5448 	 * port.
5449 	 */
5450 	length = (sizeof(struct lpfc_mbx_dealloc_rsrc_extents) -
5451 		  sizeof(struct lpfc_sli4_cfg_mhdr));
5452 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
5453 			 LPFC_MBOX_OPCODE_DEALLOC_RSRC_EXTENT,
5454 			 length, LPFC_SLI4_MBX_EMBED);
5455 
5456 	/* Send an extents count of 0 - the dealloc doesn't use it. */
5457 	rc = lpfc_sli4_mbox_rsrc_extent(phba, mbox, 0, type,
5458 					LPFC_SLI4_MBX_EMBED);
5459 	if (unlikely(rc)) {
5460 		rc = -EIO;
5461 		goto out_free_mbox;
5462 	}
5463 	if (!phba->sli4_hba.intr_enable)
5464 		rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
5465 	else {
5466 		mbox_tmo = lpfc_mbox_tmo_val(phba, mbox);
5467 		rc = lpfc_sli_issue_mbox_wait(phba, mbox, mbox_tmo);
5468 	}
5469 	if (unlikely(rc)) {
5470 		rc = -EIO;
5471 		goto out_free_mbox;
5472 	}
5473 
5474 	dealloc_rsrc = &mbox->u.mqe.un.dealloc_rsrc_extents;
5475 	if (bf_get(lpfc_mbox_hdr_status,
5476 		   &dealloc_rsrc->header.cfg_shdr.response)) {
5477 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_INIT,
5478 				"2919 Failed to release resource extents "
5479 				"for type %d - Status 0x%x Add'l Status 0x%x. "
5480 				"Resource memory not released.\n",
5481 				type,
5482 				bf_get(lpfc_mbox_hdr_status,
5483 				    &dealloc_rsrc->header.cfg_shdr.response),
5484 				bf_get(lpfc_mbox_hdr_add_status,
5485 				    &dealloc_rsrc->header.cfg_shdr.response));
5486 		rc = -EIO;
5487 		goto out_free_mbox;
5488 	}
5489 
5490 	/* Release kernel memory resources for the specific type. */
5491 	switch (type) {
5492 	case LPFC_RSC_TYPE_FCOE_VPI:
5493 		kfree(phba->vpi_bmask);
5494 		kfree(phba->vpi_ids);
5495 		bf_set(lpfc_vpi_rsrc_rdy, &phba->sli4_hba.sli4_flags, 0);
5496 		list_for_each_entry_safe(rsrc_blk, rsrc_blk_next,
5497 				    &phba->lpfc_vpi_blk_list, list) {
5498 			list_del_init(&rsrc_blk->list);
5499 			kfree(rsrc_blk);
5500 		}
5501 		break;
5502 	case LPFC_RSC_TYPE_FCOE_XRI:
5503 		kfree(phba->sli4_hba.xri_bmask);
5504 		kfree(phba->sli4_hba.xri_ids);
5505 		list_for_each_entry_safe(rsrc_blk, rsrc_blk_next,
5506 				    &phba->sli4_hba.lpfc_xri_blk_list, list) {
5507 			list_del_init(&rsrc_blk->list);
5508 			kfree(rsrc_blk);
5509 		}
5510 		break;
5511 	case LPFC_RSC_TYPE_FCOE_VFI:
5512 		kfree(phba->sli4_hba.vfi_bmask);
5513 		kfree(phba->sli4_hba.vfi_ids);
5514 		bf_set(lpfc_vfi_rsrc_rdy, &phba->sli4_hba.sli4_flags, 0);
5515 		list_for_each_entry_safe(rsrc_blk, rsrc_blk_next,
5516 				    &phba->sli4_hba.lpfc_vfi_blk_list, list) {
5517 			list_del_init(&rsrc_blk->list);
5518 			kfree(rsrc_blk);
5519 		}
5520 		break;
5521 	case LPFC_RSC_TYPE_FCOE_RPI:
5522 		/* RPI bitmask and physical id array are cleaned up earlier. */
5523 		list_for_each_entry_safe(rsrc_blk, rsrc_blk_next,
5524 				    &phba->sli4_hba.lpfc_rpi_blk_list, list) {
5525 			list_del_init(&rsrc_blk->list);
5526 			kfree(rsrc_blk);
5527 		}
5528 		break;
5529 	default:
5530 		break;
5531 	}
5532 
5533 	bf_set(lpfc_idx_rsrc_rdy, &phba->sli4_hba.sli4_flags, 0);
5534 
5535  out_free_mbox:
5536 	mempool_free(mbox, phba->mbox_mem_pool);
5537 	return rc;
5538 }
5539 
5540 /**
5541  * lpfc_sli4_alloc_resource_identifiers - Allocate all SLI4 resource extents.
5542  * @phba: Pointer to HBA context object.
5543  *
5544  * This function allocates all SLI4 resource identifiers.
5545  **/
5546 int
5547 lpfc_sli4_alloc_resource_identifiers(struct lpfc_hba *phba)
5548 {
5549 	int i, rc, error = 0;
5550 	uint16_t count, base;
5551 	unsigned long longs;
5552 
5553 	if (!phba->sli4_hba.rpi_hdrs_in_use)
5554 		phba->sli4_hba.next_rpi = phba->sli4_hba.max_cfg_param.max_rpi;
5555 	if (phba->sli4_hba.extents_in_use) {
5556 		/*
5557 		 * The port supports resource extents. The XRI, VPI, VFI, RPI
5558 		 * resource extent count must be read and allocated before
5559 		 * provisioning the resource id arrays.
5560 		 */
5561 		if (bf_get(lpfc_idx_rsrc_rdy, &phba->sli4_hba.sli4_flags) ==
5562 		    LPFC_IDX_RSRC_RDY) {
5563 			/*
5564 			 * Extent-based resources are set - the driver could
5565 			 * be in a port reset. Figure out if any corrective
5566 			 * actions need to be taken.
5567 			 */
5568 			rc = lpfc_sli4_chk_avail_extnt_rsrc(phba,
5569 						 LPFC_RSC_TYPE_FCOE_VFI);
5570 			if (rc != 0)
5571 				error++;
5572 			rc = lpfc_sli4_chk_avail_extnt_rsrc(phba,
5573 						 LPFC_RSC_TYPE_FCOE_VPI);
5574 			if (rc != 0)
5575 				error++;
5576 			rc = lpfc_sli4_chk_avail_extnt_rsrc(phba,
5577 						 LPFC_RSC_TYPE_FCOE_XRI);
5578 			if (rc != 0)
5579 				error++;
5580 			rc = lpfc_sli4_chk_avail_extnt_rsrc(phba,
5581 						 LPFC_RSC_TYPE_FCOE_RPI);
5582 			if (rc != 0)
5583 				error++;
5584 
5585 			/*
5586 			 * It's possible that the number of resources
5587 			 * provided to this port instance changed between
5588 			 * resets.  Detect this condition and reallocate
5589 			 * resources.  Otherwise, there is no action.
5590 			 */
5591 			if (error) {
5592 				lpfc_printf_log(phba, KERN_INFO,
5593 						LOG_MBOX | LOG_INIT,
5594 						"2931 Detected extent resource "
5595 						"change.  Reallocating all "
5596 						"extents.\n");
5597 				rc = lpfc_sli4_dealloc_extent(phba,
5598 						 LPFC_RSC_TYPE_FCOE_VFI);
5599 				rc = lpfc_sli4_dealloc_extent(phba,
5600 						 LPFC_RSC_TYPE_FCOE_VPI);
5601 				rc = lpfc_sli4_dealloc_extent(phba,
5602 						 LPFC_RSC_TYPE_FCOE_XRI);
5603 				rc = lpfc_sli4_dealloc_extent(phba,
5604 						 LPFC_RSC_TYPE_FCOE_RPI);
5605 			} else
5606 				return 0;
5607 		}
5608 
5609 		rc = lpfc_sli4_alloc_extent(phba, LPFC_RSC_TYPE_FCOE_VFI);
5610 		if (unlikely(rc))
5611 			goto err_exit;
5612 
5613 		rc = lpfc_sli4_alloc_extent(phba, LPFC_RSC_TYPE_FCOE_VPI);
5614 		if (unlikely(rc))
5615 			goto err_exit;
5616 
5617 		rc = lpfc_sli4_alloc_extent(phba, LPFC_RSC_TYPE_FCOE_RPI);
5618 		if (unlikely(rc))
5619 			goto err_exit;
5620 
5621 		rc = lpfc_sli4_alloc_extent(phba, LPFC_RSC_TYPE_FCOE_XRI);
5622 		if (unlikely(rc))
5623 			goto err_exit;
5624 		bf_set(lpfc_idx_rsrc_rdy, &phba->sli4_hba.sli4_flags,
5625 		       LPFC_IDX_RSRC_RDY);
5626 		return rc;
5627 	} else {
5628 		/*
5629 		 * The port does not support resource extents.  The XRI, VPI,
5630 		 * VFI, RPI resource ids were determined from READ_CONFIG.
5631 		 * Just allocate the bitmasks and provision the resource id
5632 		 * arrays.  If a port reset is active, the resources don't
5633 		 * need any action - just exit.
5634 		 */
5635 		if (bf_get(lpfc_idx_rsrc_rdy, &phba->sli4_hba.sli4_flags) ==
5636 		    LPFC_IDX_RSRC_RDY) {
5637 			lpfc_sli4_dealloc_resource_identifiers(phba);
5638 			lpfc_sli4_remove_rpis(phba);
5639 		}
5640 		/* RPIs. */
5641 		count = phba->sli4_hba.max_cfg_param.max_rpi;
5642 		if (count <= 0) {
5643 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
5644 					"3279 Invalid provisioning of "
5645 					"rpi:%d\n", count);
5646 			rc = -EINVAL;
5647 			goto err_exit;
5648 		}
5649 		base = phba->sli4_hba.max_cfg_param.rpi_base;
5650 		longs = (count + BITS_PER_LONG - 1) / BITS_PER_LONG;
5651 		phba->sli4_hba.rpi_bmask = kzalloc(longs *
5652 						   sizeof(unsigned long),
5653 						   GFP_KERNEL);
5654 		if (unlikely(!phba->sli4_hba.rpi_bmask)) {
5655 			rc = -ENOMEM;
5656 			goto err_exit;
5657 		}
5658 		phba->sli4_hba.rpi_ids = kzalloc(count *
5659 						 sizeof(uint16_t),
5660 						 GFP_KERNEL);
5661 		if (unlikely(!phba->sli4_hba.rpi_ids)) {
5662 			rc = -ENOMEM;
5663 			goto free_rpi_bmask;
5664 		}
5665 
5666 		for (i = 0; i < count; i++)
5667 			phba->sli4_hba.rpi_ids[i] = base + i;
5668 
5669 		/* VPIs. */
5670 		count = phba->sli4_hba.max_cfg_param.max_vpi;
5671 		if (count <= 0) {
5672 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
5673 					"3280 Invalid provisioning of "
5674 					"vpi:%d\n", count);
5675 			rc = -EINVAL;
5676 			goto free_rpi_ids;
5677 		}
5678 		base = phba->sli4_hba.max_cfg_param.vpi_base;
5679 		longs = (count + BITS_PER_LONG - 1) / BITS_PER_LONG;
5680 		phba->vpi_bmask = kzalloc(longs *
5681 					  sizeof(unsigned long),
5682 					  GFP_KERNEL);
5683 		if (unlikely(!phba->vpi_bmask)) {
5684 			rc = -ENOMEM;
5685 			goto free_rpi_ids;
5686 		}
5687 		phba->vpi_ids = kzalloc(count *
5688 					sizeof(uint16_t),
5689 					GFP_KERNEL);
5690 		if (unlikely(!phba->vpi_ids)) {
5691 			rc = -ENOMEM;
5692 			goto free_vpi_bmask;
5693 		}
5694 
5695 		for (i = 0; i < count; i++)
5696 			phba->vpi_ids[i] = base + i;
5697 
5698 		/* XRIs. */
5699 		count = phba->sli4_hba.max_cfg_param.max_xri;
5700 		if (count <= 0) {
5701 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
5702 					"3281 Invalid provisioning of "
5703 					"xri:%d\n", count);
5704 			rc = -EINVAL;
5705 			goto free_vpi_ids;
5706 		}
5707 		base = phba->sli4_hba.max_cfg_param.xri_base;
5708 		longs = (count + BITS_PER_LONG - 1) / BITS_PER_LONG;
5709 		phba->sli4_hba.xri_bmask = kzalloc(longs *
5710 						   sizeof(unsigned long),
5711 						   GFP_KERNEL);
5712 		if (unlikely(!phba->sli4_hba.xri_bmask)) {
5713 			rc = -ENOMEM;
5714 			goto free_vpi_ids;
5715 		}
5716 		phba->sli4_hba.max_cfg_param.xri_used = 0;
5717 		phba->sli4_hba.xri_ids = kzalloc(count *
5718 						 sizeof(uint16_t),
5719 						 GFP_KERNEL);
5720 		if (unlikely(!phba->sli4_hba.xri_ids)) {
5721 			rc = -ENOMEM;
5722 			goto free_xri_bmask;
5723 		}
5724 
5725 		for (i = 0; i < count; i++)
5726 			phba->sli4_hba.xri_ids[i] = base + i;
5727 
5728 		/* VFIs. */
5729 		count = phba->sli4_hba.max_cfg_param.max_vfi;
5730 		if (count <= 0) {
5731 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
5732 					"3282 Invalid provisioning of "
5733 					"vfi:%d\n", count);
5734 			rc = -EINVAL;
5735 			goto free_xri_ids;
5736 		}
5737 		base = phba->sli4_hba.max_cfg_param.vfi_base;
5738 		longs = (count + BITS_PER_LONG - 1) / BITS_PER_LONG;
5739 		phba->sli4_hba.vfi_bmask = kzalloc(longs *
5740 						   sizeof(unsigned long),
5741 						   GFP_KERNEL);
5742 		if (unlikely(!phba->sli4_hba.vfi_bmask)) {
5743 			rc = -ENOMEM;
5744 			goto free_xri_ids;
5745 		}
5746 		phba->sli4_hba.vfi_ids = kzalloc(count *
5747 						 sizeof(uint16_t),
5748 						 GFP_KERNEL);
5749 		if (unlikely(!phba->sli4_hba.vfi_ids)) {
5750 			rc = -ENOMEM;
5751 			goto free_vfi_bmask;
5752 		}
5753 
5754 		for (i = 0; i < count; i++)
5755 			phba->sli4_hba.vfi_ids[i] = base + i;
5756 
5757 		/*
5758 		 * Mark all resources ready.  An HBA reset doesn't need
5759 		 * to reset the initialization.
5760 		 */
5761 		bf_set(lpfc_idx_rsrc_rdy, &phba->sli4_hba.sli4_flags,
5762 		       LPFC_IDX_RSRC_RDY);
5763 		return 0;
5764 	}
5765 
5766  free_vfi_bmask:
5767 	kfree(phba->sli4_hba.vfi_bmask);
5768  free_xri_ids:
5769 	kfree(phba->sli4_hba.xri_ids);
5770  free_xri_bmask:
5771 	kfree(phba->sli4_hba.xri_bmask);
5772  free_vpi_ids:
5773 	kfree(phba->vpi_ids);
5774  free_vpi_bmask:
5775 	kfree(phba->vpi_bmask);
5776  free_rpi_ids:
5777 	kfree(phba->sli4_hba.rpi_ids);
5778  free_rpi_bmask:
5779 	kfree(phba->sli4_hba.rpi_bmask);
5780  err_exit:
5781 	return rc;
5782 }
5783 
5784 /**
5785  * lpfc_sli4_dealloc_resource_identifiers - Deallocate all SLI4 resource extents.
5786  * @phba: Pointer to HBA context object.
5787  *
5788  * This function allocates the number of elements for the specified
5789  * resource type.
5790  **/
5791 int
5792 lpfc_sli4_dealloc_resource_identifiers(struct lpfc_hba *phba)
5793 {
5794 	if (phba->sli4_hba.extents_in_use) {
5795 		lpfc_sli4_dealloc_extent(phba, LPFC_RSC_TYPE_FCOE_VPI);
5796 		lpfc_sli4_dealloc_extent(phba, LPFC_RSC_TYPE_FCOE_RPI);
5797 		lpfc_sli4_dealloc_extent(phba, LPFC_RSC_TYPE_FCOE_XRI);
5798 		lpfc_sli4_dealloc_extent(phba, LPFC_RSC_TYPE_FCOE_VFI);
5799 	} else {
5800 		kfree(phba->vpi_bmask);
5801 		kfree(phba->vpi_ids);
5802 		bf_set(lpfc_vpi_rsrc_rdy, &phba->sli4_hba.sli4_flags, 0);
5803 		kfree(phba->sli4_hba.xri_bmask);
5804 		kfree(phba->sli4_hba.xri_ids);
5805 		kfree(phba->sli4_hba.vfi_bmask);
5806 		kfree(phba->sli4_hba.vfi_ids);
5807 		bf_set(lpfc_vfi_rsrc_rdy, &phba->sli4_hba.sli4_flags, 0);
5808 		bf_set(lpfc_idx_rsrc_rdy, &phba->sli4_hba.sli4_flags, 0);
5809 	}
5810 
5811 	return 0;
5812 }
5813 
5814 /**
5815  * lpfc_sli4_get_allocated_extnts - Get the port's allocated extents.
5816  * @phba: Pointer to HBA context object.
5817  * @type: The resource extent type.
5818  * @extnt_count: buffer to hold port extent count response
5819  * @extnt_size: buffer to hold port extent size response.
5820  *
5821  * This function calls the port to read the host allocated extents
5822  * for a particular type.
5823  **/
5824 int
5825 lpfc_sli4_get_allocated_extnts(struct lpfc_hba *phba, uint16_t type,
5826 			       uint16_t *extnt_cnt, uint16_t *extnt_size)
5827 {
5828 	bool emb;
5829 	int rc = 0;
5830 	uint16_t curr_blks = 0;
5831 	uint32_t req_len, emb_len;
5832 	uint32_t alloc_len, mbox_tmo;
5833 	struct list_head *blk_list_head;
5834 	struct lpfc_rsrc_blks *rsrc_blk;
5835 	LPFC_MBOXQ_t *mbox;
5836 	void *virtaddr = NULL;
5837 	struct lpfc_mbx_nembed_rsrc_extent *n_rsrc;
5838 	struct lpfc_mbx_alloc_rsrc_extents *rsrc_ext;
5839 	union  lpfc_sli4_cfg_shdr *shdr;
5840 
5841 	switch (type) {
5842 	case LPFC_RSC_TYPE_FCOE_VPI:
5843 		blk_list_head = &phba->lpfc_vpi_blk_list;
5844 		break;
5845 	case LPFC_RSC_TYPE_FCOE_XRI:
5846 		blk_list_head = &phba->sli4_hba.lpfc_xri_blk_list;
5847 		break;
5848 	case LPFC_RSC_TYPE_FCOE_VFI:
5849 		blk_list_head = &phba->sli4_hba.lpfc_vfi_blk_list;
5850 		break;
5851 	case LPFC_RSC_TYPE_FCOE_RPI:
5852 		blk_list_head = &phba->sli4_hba.lpfc_rpi_blk_list;
5853 		break;
5854 	default:
5855 		return -EIO;
5856 	}
5857 
5858 	/* Count the number of extents currently allocatd for this type. */
5859 	list_for_each_entry(rsrc_blk, blk_list_head, list) {
5860 		if (curr_blks == 0) {
5861 			/*
5862 			 * The GET_ALLOCATED mailbox does not return the size,
5863 			 * just the count.  The size should be just the size
5864 			 * stored in the current allocated block and all sizes
5865 			 * for an extent type are the same so set the return
5866 			 * value now.
5867 			 */
5868 			*extnt_size = rsrc_blk->rsrc_size;
5869 		}
5870 		curr_blks++;
5871 	}
5872 
5873 	/* Calculate the total requested length of the dma memory. */
5874 	req_len = curr_blks * sizeof(uint16_t);
5875 
5876 	/*
5877 	 * Calculate the size of an embedded mailbox.  The uint32_t
5878 	 * accounts for extents-specific word.
5879 	 */
5880 	emb_len = sizeof(MAILBOX_t) - sizeof(struct mbox_header) -
5881 		sizeof(uint32_t);
5882 
5883 	/*
5884 	 * Presume the allocation and response will fit into an embedded
5885 	 * mailbox.  If not true, reconfigure to a non-embedded mailbox.
5886 	 */
5887 	emb = LPFC_SLI4_MBX_EMBED;
5888 	req_len = emb_len;
5889 	if (req_len > emb_len) {
5890 		req_len = curr_blks * sizeof(uint16_t) +
5891 			sizeof(union lpfc_sli4_cfg_shdr) +
5892 			sizeof(uint32_t);
5893 		emb = LPFC_SLI4_MBX_NEMBED;
5894 	}
5895 
5896 	mbox = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
5897 	if (!mbox)
5898 		return -ENOMEM;
5899 	memset(mbox, 0, sizeof(LPFC_MBOXQ_t));
5900 
5901 	alloc_len = lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
5902 				     LPFC_MBOX_OPCODE_GET_ALLOC_RSRC_EXTENT,
5903 				     req_len, emb);
5904 	if (alloc_len < req_len) {
5905 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5906 			"2983 Allocated DMA memory size (x%x) is "
5907 			"less than the requested DMA memory "
5908 			"size (x%x)\n", alloc_len, req_len);
5909 		rc = -ENOMEM;
5910 		goto err_exit;
5911 	}
5912 	rc = lpfc_sli4_mbox_rsrc_extent(phba, mbox, curr_blks, type, emb);
5913 	if (unlikely(rc)) {
5914 		rc = -EIO;
5915 		goto err_exit;
5916 	}
5917 
5918 	if (!phba->sli4_hba.intr_enable)
5919 		rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
5920 	else {
5921 		mbox_tmo = lpfc_mbox_tmo_val(phba, mbox);
5922 		rc = lpfc_sli_issue_mbox_wait(phba, mbox, mbox_tmo);
5923 	}
5924 
5925 	if (unlikely(rc)) {
5926 		rc = -EIO;
5927 		goto err_exit;
5928 	}
5929 
5930 	/*
5931 	 * Figure out where the response is located.  Then get local pointers
5932 	 * to the response data.  The port does not guarantee to respond to
5933 	 * all extents counts request so update the local variable with the
5934 	 * allocated count from the port.
5935 	 */
5936 	if (emb == LPFC_SLI4_MBX_EMBED) {
5937 		rsrc_ext = &mbox->u.mqe.un.alloc_rsrc_extents;
5938 		shdr = &rsrc_ext->header.cfg_shdr;
5939 		*extnt_cnt = bf_get(lpfc_mbx_rsrc_cnt, &rsrc_ext->u.rsp);
5940 	} else {
5941 		virtaddr = mbox->sge_array->addr[0];
5942 		n_rsrc = (struct lpfc_mbx_nembed_rsrc_extent *) virtaddr;
5943 		shdr = &n_rsrc->cfg_shdr;
5944 		*extnt_cnt = bf_get(lpfc_mbx_rsrc_cnt, n_rsrc);
5945 	}
5946 
5947 	if (bf_get(lpfc_mbox_hdr_status, &shdr->response)) {
5948 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_INIT,
5949 			"2984 Failed to read allocated resources "
5950 			"for type %d - Status 0x%x Add'l Status 0x%x.\n",
5951 			type,
5952 			bf_get(lpfc_mbox_hdr_status, &shdr->response),
5953 			bf_get(lpfc_mbox_hdr_add_status, &shdr->response));
5954 		rc = -EIO;
5955 		goto err_exit;
5956 	}
5957  err_exit:
5958 	lpfc_sli4_mbox_cmd_free(phba, mbox);
5959 	return rc;
5960 }
5961 
5962 /**
5963  * lpfc_sli4_repost_els_sgl_list - Repsot the els buffers sgl pages as block
5964  * @phba: pointer to lpfc hba data structure.
5965  *
5966  * This routine walks the list of els buffers that have been allocated and
5967  * repost them to the port by using SGL block post. This is needed after a
5968  * pci_function_reset/warm_start or start. It attempts to construct blocks
5969  * of els buffer sgls which contains contiguous xris and uses the non-embedded
5970  * SGL block post mailbox commands to post them to the port. For single els
5971  * buffer sgl with non-contiguous xri, if any, it shall use embedded SGL post
5972  * mailbox command for posting.
5973  *
5974  * Returns: 0 = success, non-zero failure.
5975  **/
5976 static int
5977 lpfc_sli4_repost_els_sgl_list(struct lpfc_hba *phba)
5978 {
5979 	struct lpfc_sglq *sglq_entry = NULL;
5980 	struct lpfc_sglq *sglq_entry_next = NULL;
5981 	struct lpfc_sglq *sglq_entry_first = NULL;
5982 	int status, post_cnt = 0, num_posted = 0, block_cnt = 0;
5983 	int last_xritag = NO_XRI;
5984 	LIST_HEAD(prep_sgl_list);
5985 	LIST_HEAD(blck_sgl_list);
5986 	LIST_HEAD(allc_sgl_list);
5987 	LIST_HEAD(post_sgl_list);
5988 	LIST_HEAD(free_sgl_list);
5989 
5990 	spin_lock(&phba->hbalock);
5991 	list_splice_init(&phba->sli4_hba.lpfc_sgl_list, &allc_sgl_list);
5992 	spin_unlock(&phba->hbalock);
5993 
5994 	list_for_each_entry_safe(sglq_entry, sglq_entry_next,
5995 				 &allc_sgl_list, list) {
5996 		list_del_init(&sglq_entry->list);
5997 		block_cnt++;
5998 		if ((last_xritag != NO_XRI) &&
5999 		    (sglq_entry->sli4_xritag != last_xritag + 1)) {
6000 			/* a hole in xri block, form a sgl posting block */
6001 			list_splice_init(&prep_sgl_list, &blck_sgl_list);
6002 			post_cnt = block_cnt - 1;
6003 			/* prepare list for next posting block */
6004 			list_add_tail(&sglq_entry->list, &prep_sgl_list);
6005 			block_cnt = 1;
6006 		} else {
6007 			/* prepare list for next posting block */
6008 			list_add_tail(&sglq_entry->list, &prep_sgl_list);
6009 			/* enough sgls for non-embed sgl mbox command */
6010 			if (block_cnt == LPFC_NEMBED_MBOX_SGL_CNT) {
6011 				list_splice_init(&prep_sgl_list,
6012 						 &blck_sgl_list);
6013 				post_cnt = block_cnt;
6014 				block_cnt = 0;
6015 			}
6016 		}
6017 		num_posted++;
6018 
6019 		/* keep track of last sgl's xritag */
6020 		last_xritag = sglq_entry->sli4_xritag;
6021 
6022 		/* end of repost sgl list condition for els buffers */
6023 		if (num_posted == phba->sli4_hba.els_xri_cnt) {
6024 			if (post_cnt == 0) {
6025 				list_splice_init(&prep_sgl_list,
6026 						 &blck_sgl_list);
6027 				post_cnt = block_cnt;
6028 			} else if (block_cnt == 1) {
6029 				status = lpfc_sli4_post_sgl(phba,
6030 						sglq_entry->phys, 0,
6031 						sglq_entry->sli4_xritag);
6032 				if (!status) {
6033 					/* successful, put sgl to posted list */
6034 					list_add_tail(&sglq_entry->list,
6035 						      &post_sgl_list);
6036 				} else {
6037 					/* Failure, put sgl to free list */
6038 					lpfc_printf_log(phba, KERN_WARNING,
6039 						LOG_SLI,
6040 						"3159 Failed to post els "
6041 						"sgl, xritag:x%x\n",
6042 						sglq_entry->sli4_xritag);
6043 					list_add_tail(&sglq_entry->list,
6044 						      &free_sgl_list);
6045 					spin_lock_irq(&phba->hbalock);
6046 					phba->sli4_hba.els_xri_cnt--;
6047 					spin_unlock_irq(&phba->hbalock);
6048 				}
6049 			}
6050 		}
6051 
6052 		/* continue until a nembed page worth of sgls */
6053 		if (post_cnt == 0)
6054 			continue;
6055 
6056 		/* post the els buffer list sgls as a block */
6057 		status = lpfc_sli4_post_els_sgl_list(phba, &blck_sgl_list,
6058 						     post_cnt);
6059 
6060 		if (!status) {
6061 			/* success, put sgl list to posted sgl list */
6062 			list_splice_init(&blck_sgl_list, &post_sgl_list);
6063 		} else {
6064 			/* Failure, put sgl list to free sgl list */
6065 			sglq_entry_first = list_first_entry(&blck_sgl_list,
6066 							    struct lpfc_sglq,
6067 							    list);
6068 			lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
6069 					"3160 Failed to post els sgl-list, "
6070 					"xritag:x%x-x%x\n",
6071 					sglq_entry_first->sli4_xritag,
6072 					(sglq_entry_first->sli4_xritag +
6073 					 post_cnt - 1));
6074 			list_splice_init(&blck_sgl_list, &free_sgl_list);
6075 			spin_lock_irq(&phba->hbalock);
6076 			phba->sli4_hba.els_xri_cnt -= post_cnt;
6077 			spin_unlock_irq(&phba->hbalock);
6078 		}
6079 
6080 		/* don't reset xirtag due to hole in xri block */
6081 		if (block_cnt == 0)
6082 			last_xritag = NO_XRI;
6083 
6084 		/* reset els sgl post count for next round of posting */
6085 		post_cnt = 0;
6086 	}
6087 
6088 	/* free the els sgls failed to post */
6089 	lpfc_free_sgl_list(phba, &free_sgl_list);
6090 
6091 	/* push els sgls posted to the availble list */
6092 	if (!list_empty(&post_sgl_list)) {
6093 		spin_lock(&phba->hbalock);
6094 		list_splice_init(&post_sgl_list,
6095 				 &phba->sli4_hba.lpfc_sgl_list);
6096 		spin_unlock(&phba->hbalock);
6097 	} else {
6098 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
6099 				"3161 Failure to post els sgl to port.\n");
6100 		return -EIO;
6101 	}
6102 	return 0;
6103 }
6104 
6105 /**
6106  * lpfc_sli4_hba_setup - SLI4 device intialization PCI function
6107  * @phba: Pointer to HBA context object.
6108  *
6109  * This function is the main SLI4 device intialization PCI function. This
6110  * function is called by the HBA intialization code, HBA reset code and
6111  * HBA error attention handler code. Caller is not required to hold any
6112  * locks.
6113  **/
6114 int
6115 lpfc_sli4_hba_setup(struct lpfc_hba *phba)
6116 {
6117 	int rc;
6118 	LPFC_MBOXQ_t *mboxq;
6119 	struct lpfc_mqe *mqe;
6120 	uint8_t *vpd;
6121 	uint32_t vpd_size;
6122 	uint32_t ftr_rsp = 0;
6123 	struct Scsi_Host *shost = lpfc_shost_from_vport(phba->pport);
6124 	struct lpfc_vport *vport = phba->pport;
6125 	struct lpfc_dmabuf *mp;
6126 
6127 	/* Perform a PCI function reset to start from clean */
6128 	rc = lpfc_pci_function_reset(phba);
6129 	if (unlikely(rc))
6130 		return -ENODEV;
6131 
6132 	/* Check the HBA Host Status Register for readyness */
6133 	rc = lpfc_sli4_post_status_check(phba);
6134 	if (unlikely(rc))
6135 		return -ENODEV;
6136 	else {
6137 		spin_lock_irq(&phba->hbalock);
6138 		phba->sli.sli_flag |= LPFC_SLI_ACTIVE;
6139 		spin_unlock_irq(&phba->hbalock);
6140 	}
6141 
6142 	/*
6143 	 * Allocate a single mailbox container for initializing the
6144 	 * port.
6145 	 */
6146 	mboxq = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
6147 	if (!mboxq)
6148 		return -ENOMEM;
6149 
6150 	/* Issue READ_REV to collect vpd and FW information. */
6151 	vpd_size = SLI4_PAGE_SIZE;
6152 	vpd = kzalloc(vpd_size, GFP_KERNEL);
6153 	if (!vpd) {
6154 		rc = -ENOMEM;
6155 		goto out_free_mbox;
6156 	}
6157 
6158 	rc = lpfc_sli4_read_rev(phba, mboxq, vpd, &vpd_size);
6159 	if (unlikely(rc)) {
6160 		kfree(vpd);
6161 		goto out_free_mbox;
6162 	}
6163 	mqe = &mboxq->u.mqe;
6164 	phba->sli_rev = bf_get(lpfc_mbx_rd_rev_sli_lvl, &mqe->un.read_rev);
6165 	if (bf_get(lpfc_mbx_rd_rev_fcoe, &mqe->un.read_rev))
6166 		phba->hba_flag |= HBA_FCOE_MODE;
6167 	else
6168 		phba->hba_flag &= ~HBA_FCOE_MODE;
6169 
6170 	if (bf_get(lpfc_mbx_rd_rev_cee_ver, &mqe->un.read_rev) ==
6171 		LPFC_DCBX_CEE_MODE)
6172 		phba->hba_flag |= HBA_FIP_SUPPORT;
6173 	else
6174 		phba->hba_flag &= ~HBA_FIP_SUPPORT;
6175 
6176 	phba->hba_flag &= ~HBA_FCP_IOQ_FLUSH;
6177 
6178 	if (phba->sli_rev != LPFC_SLI_REV4) {
6179 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6180 			"0376 READ_REV Error. SLI Level %d "
6181 			"FCoE enabled %d\n",
6182 			phba->sli_rev, phba->hba_flag & HBA_FCOE_MODE);
6183 		rc = -EIO;
6184 		kfree(vpd);
6185 		goto out_free_mbox;
6186 	}
6187 
6188 	/*
6189 	 * Continue initialization with default values even if driver failed
6190 	 * to read FCoE param config regions, only read parameters if the
6191 	 * board is FCoE
6192 	 */
6193 	if (phba->hba_flag & HBA_FCOE_MODE &&
6194 	    lpfc_sli4_read_fcoe_params(phba))
6195 		lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX | LOG_INIT,
6196 			"2570 Failed to read FCoE parameters\n");
6197 
6198 	/*
6199 	 * Retrieve sli4 device physical port name, failure of doing it
6200 	 * is considered as non-fatal.
6201 	 */
6202 	rc = lpfc_sli4_retrieve_pport_name(phba);
6203 	if (!rc)
6204 		lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI,
6205 				"3080 Successful retrieving SLI4 device "
6206 				"physical port name: %s.\n", phba->Port);
6207 
6208 	/*
6209 	 * Evaluate the read rev and vpd data. Populate the driver
6210 	 * state with the results. If this routine fails, the failure
6211 	 * is not fatal as the driver will use generic values.
6212 	 */
6213 	rc = lpfc_parse_vpd(phba, vpd, vpd_size);
6214 	if (unlikely(!rc)) {
6215 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6216 				"0377 Error %d parsing vpd. "
6217 				"Using defaults.\n", rc);
6218 		rc = 0;
6219 	}
6220 	kfree(vpd);
6221 
6222 	/* Save information as VPD data */
6223 	phba->vpd.rev.biuRev = mqe->un.read_rev.first_hw_rev;
6224 	phba->vpd.rev.smRev = mqe->un.read_rev.second_hw_rev;
6225 	phba->vpd.rev.endecRev = mqe->un.read_rev.third_hw_rev;
6226 	phba->vpd.rev.fcphHigh = bf_get(lpfc_mbx_rd_rev_fcph_high,
6227 					 &mqe->un.read_rev);
6228 	phba->vpd.rev.fcphLow = bf_get(lpfc_mbx_rd_rev_fcph_low,
6229 				       &mqe->un.read_rev);
6230 	phba->vpd.rev.feaLevelHigh = bf_get(lpfc_mbx_rd_rev_ftr_lvl_high,
6231 					    &mqe->un.read_rev);
6232 	phba->vpd.rev.feaLevelLow = bf_get(lpfc_mbx_rd_rev_ftr_lvl_low,
6233 					   &mqe->un.read_rev);
6234 	phba->vpd.rev.sli1FwRev = mqe->un.read_rev.fw_id_rev;
6235 	memcpy(phba->vpd.rev.sli1FwName, mqe->un.read_rev.fw_name, 16);
6236 	phba->vpd.rev.sli2FwRev = mqe->un.read_rev.ulp_fw_id_rev;
6237 	memcpy(phba->vpd.rev.sli2FwName, mqe->un.read_rev.ulp_fw_name, 16);
6238 	phba->vpd.rev.opFwRev = mqe->un.read_rev.fw_id_rev;
6239 	memcpy(phba->vpd.rev.opFwName, mqe->un.read_rev.fw_name, 16);
6240 	lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI,
6241 			"(%d):0380 READ_REV Status x%x "
6242 			"fw_rev:%s fcphHi:%x fcphLo:%x flHi:%x flLo:%x\n",
6243 			mboxq->vport ? mboxq->vport->vpi : 0,
6244 			bf_get(lpfc_mqe_status, mqe),
6245 			phba->vpd.rev.opFwName,
6246 			phba->vpd.rev.fcphHigh, phba->vpd.rev.fcphLow,
6247 			phba->vpd.rev.feaLevelHigh, phba->vpd.rev.feaLevelLow);
6248 
6249 	/*
6250 	 * Discover the port's supported feature set and match it against the
6251 	 * hosts requests.
6252 	 */
6253 	lpfc_request_features(phba, mboxq);
6254 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
6255 	if (unlikely(rc)) {
6256 		rc = -EIO;
6257 		goto out_free_mbox;
6258 	}
6259 
6260 	/*
6261 	 * The port must support FCP initiator mode as this is the
6262 	 * only mode running in the host.
6263 	 */
6264 	if (!(bf_get(lpfc_mbx_rq_ftr_rsp_fcpi, &mqe->un.req_ftrs))) {
6265 		lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX | LOG_SLI,
6266 				"0378 No support for fcpi mode.\n");
6267 		ftr_rsp++;
6268 	}
6269 	if (bf_get(lpfc_mbx_rq_ftr_rsp_perfh, &mqe->un.req_ftrs))
6270 		phba->sli3_options |= LPFC_SLI4_PERFH_ENABLED;
6271 	else
6272 		phba->sli3_options &= ~LPFC_SLI4_PERFH_ENABLED;
6273 	/*
6274 	 * If the port cannot support the host's requested features
6275 	 * then turn off the global config parameters to disable the
6276 	 * feature in the driver.  This is not a fatal error.
6277 	 */
6278 	phba->sli3_options &= ~LPFC_SLI3_BG_ENABLED;
6279 	if (phba->cfg_enable_bg) {
6280 		if (bf_get(lpfc_mbx_rq_ftr_rsp_dif, &mqe->un.req_ftrs))
6281 			phba->sli3_options |= LPFC_SLI3_BG_ENABLED;
6282 		else
6283 			ftr_rsp++;
6284 	}
6285 
6286 	if (phba->max_vpi && phba->cfg_enable_npiv &&
6287 	    !(bf_get(lpfc_mbx_rq_ftr_rsp_npiv, &mqe->un.req_ftrs)))
6288 		ftr_rsp++;
6289 
6290 	if (ftr_rsp) {
6291 		lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX | LOG_SLI,
6292 				"0379 Feature Mismatch Data: x%08x %08x "
6293 				"x%x x%x x%x\n", mqe->un.req_ftrs.word2,
6294 				mqe->un.req_ftrs.word3, phba->cfg_enable_bg,
6295 				phba->cfg_enable_npiv, phba->max_vpi);
6296 		if (!(bf_get(lpfc_mbx_rq_ftr_rsp_dif, &mqe->un.req_ftrs)))
6297 			phba->cfg_enable_bg = 0;
6298 		if (!(bf_get(lpfc_mbx_rq_ftr_rsp_npiv, &mqe->un.req_ftrs)))
6299 			phba->cfg_enable_npiv = 0;
6300 	}
6301 
6302 	/* These SLI3 features are assumed in SLI4 */
6303 	spin_lock_irq(&phba->hbalock);
6304 	phba->sli3_options |= (LPFC_SLI3_NPIV_ENABLED | LPFC_SLI3_HBQ_ENABLED);
6305 	spin_unlock_irq(&phba->hbalock);
6306 
6307 	/*
6308 	 * Allocate all resources (xri,rpi,vpi,vfi) now.  Subsequent
6309 	 * calls depends on these resources to complete port setup.
6310 	 */
6311 	rc = lpfc_sli4_alloc_resource_identifiers(phba);
6312 	if (rc) {
6313 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6314 				"2920 Failed to alloc Resource IDs "
6315 				"rc = x%x\n", rc);
6316 		goto out_free_mbox;
6317 	}
6318 
6319 	/* Read the port's service parameters. */
6320 	rc = lpfc_read_sparam(phba, mboxq, vport->vpi);
6321 	if (rc) {
6322 		phba->link_state = LPFC_HBA_ERROR;
6323 		rc = -ENOMEM;
6324 		goto out_free_mbox;
6325 	}
6326 
6327 	mboxq->vport = vport;
6328 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
6329 	mp = (struct lpfc_dmabuf *) mboxq->context1;
6330 	if (rc == MBX_SUCCESS) {
6331 		memcpy(&vport->fc_sparam, mp->virt, sizeof(struct serv_parm));
6332 		rc = 0;
6333 	}
6334 
6335 	/*
6336 	 * This memory was allocated by the lpfc_read_sparam routine. Release
6337 	 * it to the mbuf pool.
6338 	 */
6339 	lpfc_mbuf_free(phba, mp->virt, mp->phys);
6340 	kfree(mp);
6341 	mboxq->context1 = NULL;
6342 	if (unlikely(rc)) {
6343 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6344 				"0382 READ_SPARAM command failed "
6345 				"status %d, mbxStatus x%x\n",
6346 				rc, bf_get(lpfc_mqe_status, mqe));
6347 		phba->link_state = LPFC_HBA_ERROR;
6348 		rc = -EIO;
6349 		goto out_free_mbox;
6350 	}
6351 
6352 	lpfc_update_vport_wwn(vport);
6353 
6354 	/* Update the fc_host data structures with new wwn. */
6355 	fc_host_node_name(shost) = wwn_to_u64(vport->fc_nodename.u.wwn);
6356 	fc_host_port_name(shost) = wwn_to_u64(vport->fc_portname.u.wwn);
6357 
6358 	/* update host els and scsi xri-sgl sizes and mappings */
6359 	rc = lpfc_sli4_xri_sgl_update(phba);
6360 	if (unlikely(rc)) {
6361 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6362 				"1400 Failed to update xri-sgl size and "
6363 				"mapping: %d\n", rc);
6364 		goto out_free_mbox;
6365 	}
6366 
6367 	/* register the els sgl pool to the port */
6368 	rc = lpfc_sli4_repost_els_sgl_list(phba);
6369 	if (unlikely(rc)) {
6370 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6371 				"0582 Error %d during els sgl post "
6372 				"operation\n", rc);
6373 		rc = -ENODEV;
6374 		goto out_free_mbox;
6375 	}
6376 
6377 	/* register the allocated scsi sgl pool to the port */
6378 	rc = lpfc_sli4_repost_scsi_sgl_list(phba);
6379 	if (unlikely(rc)) {
6380 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6381 				"0383 Error %d during scsi sgl post "
6382 				"operation\n", rc);
6383 		/* Some Scsi buffers were moved to the abort scsi list */
6384 		/* A pci function reset will repost them */
6385 		rc = -ENODEV;
6386 		goto out_free_mbox;
6387 	}
6388 
6389 	/* Post the rpi header region to the device. */
6390 	rc = lpfc_sli4_post_all_rpi_hdrs(phba);
6391 	if (unlikely(rc)) {
6392 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6393 				"0393 Error %d during rpi post operation\n",
6394 				rc);
6395 		rc = -ENODEV;
6396 		goto out_free_mbox;
6397 	}
6398 	lpfc_sli4_node_prep(phba);
6399 
6400 	/* Create all the SLI4 queues */
6401 	rc = lpfc_sli4_queue_create(phba);
6402 	if (rc) {
6403 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6404 				"3089 Failed to allocate queues\n");
6405 		rc = -ENODEV;
6406 		goto out_stop_timers;
6407 	}
6408 	/* Set up all the queues to the device */
6409 	rc = lpfc_sli4_queue_setup(phba);
6410 	if (unlikely(rc)) {
6411 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6412 				"0381 Error %d during queue setup.\n ", rc);
6413 		goto out_destroy_queue;
6414 	}
6415 
6416 	/* Arm the CQs and then EQs on device */
6417 	lpfc_sli4_arm_cqeq_intr(phba);
6418 
6419 	/* Indicate device interrupt mode */
6420 	phba->sli4_hba.intr_enable = 1;
6421 
6422 	/* Allow asynchronous mailbox command to go through */
6423 	spin_lock_irq(&phba->hbalock);
6424 	phba->sli.sli_flag &= ~LPFC_SLI_ASYNC_MBX_BLK;
6425 	spin_unlock_irq(&phba->hbalock);
6426 
6427 	/* Post receive buffers to the device */
6428 	lpfc_sli4_rb_setup(phba);
6429 
6430 	/* Reset HBA FCF states after HBA reset */
6431 	phba->fcf.fcf_flag = 0;
6432 	phba->fcf.current_rec.flag = 0;
6433 
6434 	/* Start the ELS watchdog timer */
6435 	mod_timer(&vport->els_tmofunc,
6436 		  jiffies + HZ * (phba->fc_ratov * 2));
6437 
6438 	/* Start heart beat timer */
6439 	mod_timer(&phba->hb_tmofunc,
6440 		  jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
6441 	phba->hb_outstanding = 0;
6442 	phba->last_completion_time = jiffies;
6443 
6444 	/* Start error attention (ERATT) polling timer */
6445 	mod_timer(&phba->eratt_poll, jiffies + HZ * LPFC_ERATT_POLL_INTERVAL);
6446 
6447 	/* Enable PCIe device Advanced Error Reporting (AER) if configured */
6448 	if (phba->cfg_aer_support == 1 && !(phba->hba_flag & HBA_AER_ENABLED)) {
6449 		rc = pci_enable_pcie_error_reporting(phba->pcidev);
6450 		if (!rc) {
6451 			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6452 					"2829 This device supports "
6453 					"Advanced Error Reporting (AER)\n");
6454 			spin_lock_irq(&phba->hbalock);
6455 			phba->hba_flag |= HBA_AER_ENABLED;
6456 			spin_unlock_irq(&phba->hbalock);
6457 		} else {
6458 			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6459 					"2830 This device does not support "
6460 					"Advanced Error Reporting (AER)\n");
6461 			phba->cfg_aer_support = 0;
6462 		}
6463 		rc = 0;
6464 	}
6465 
6466 	if (!(phba->hba_flag & HBA_FCOE_MODE)) {
6467 		/*
6468 		 * The FC Port needs to register FCFI (index 0)
6469 		 */
6470 		lpfc_reg_fcfi(phba, mboxq);
6471 		mboxq->vport = phba->pport;
6472 		rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
6473 		if (rc != MBX_SUCCESS)
6474 			goto out_unset_queue;
6475 		rc = 0;
6476 		phba->fcf.fcfi = bf_get(lpfc_reg_fcfi_fcfi,
6477 					&mboxq->u.mqe.un.reg_fcfi);
6478 
6479 		/* Check if the port is configured to be disabled */
6480 		lpfc_sli_read_link_ste(phba);
6481 	}
6482 
6483 	/*
6484 	 * The port is ready, set the host's link state to LINK_DOWN
6485 	 * in preparation for link interrupts.
6486 	 */
6487 	spin_lock_irq(&phba->hbalock);
6488 	phba->link_state = LPFC_LINK_DOWN;
6489 	spin_unlock_irq(&phba->hbalock);
6490 	if (!(phba->hba_flag & HBA_FCOE_MODE) &&
6491 	    (phba->hba_flag & LINK_DISABLED)) {
6492 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT | LOG_SLI,
6493 				"3103 Adapter Link is disabled.\n");
6494 		lpfc_down_link(phba, mboxq);
6495 		rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
6496 		if (rc != MBX_SUCCESS) {
6497 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT | LOG_SLI,
6498 					"3104 Adapter failed to issue "
6499 					"DOWN_LINK mbox cmd, rc:x%x\n", rc);
6500 			goto out_unset_queue;
6501 		}
6502 	} else if (phba->cfg_suppress_link_up == LPFC_INITIALIZE_LINK) {
6503 		/* don't perform init_link on SLI4 FC port loopback test */
6504 		if (!(phba->link_flag & LS_LOOPBACK_MODE)) {
6505 			rc = phba->lpfc_hba_init_link(phba, MBX_NOWAIT);
6506 			if (rc)
6507 				goto out_unset_queue;
6508 		}
6509 	}
6510 	mempool_free(mboxq, phba->mbox_mem_pool);
6511 	return rc;
6512 out_unset_queue:
6513 	/* Unset all the queues set up in this routine when error out */
6514 	lpfc_sli4_queue_unset(phba);
6515 out_destroy_queue:
6516 	lpfc_sli4_queue_destroy(phba);
6517 out_stop_timers:
6518 	lpfc_stop_hba_timers(phba);
6519 out_free_mbox:
6520 	mempool_free(mboxq, phba->mbox_mem_pool);
6521 	return rc;
6522 }
6523 
6524 /**
6525  * lpfc_mbox_timeout - Timeout call back function for mbox timer
6526  * @ptr: context object - pointer to hba structure.
6527  *
6528  * This is the callback function for mailbox timer. The mailbox
6529  * timer is armed when a new mailbox command is issued and the timer
6530  * is deleted when the mailbox complete. The function is called by
6531  * the kernel timer code when a mailbox does not complete within
6532  * expected time. This function wakes up the worker thread to
6533  * process the mailbox timeout and returns. All the processing is
6534  * done by the worker thread function lpfc_mbox_timeout_handler.
6535  **/
6536 void
6537 lpfc_mbox_timeout(unsigned long ptr)
6538 {
6539 	struct lpfc_hba  *phba = (struct lpfc_hba *) ptr;
6540 	unsigned long iflag;
6541 	uint32_t tmo_posted;
6542 
6543 	spin_lock_irqsave(&phba->pport->work_port_lock, iflag);
6544 	tmo_posted = phba->pport->work_port_events & WORKER_MBOX_TMO;
6545 	if (!tmo_posted)
6546 		phba->pport->work_port_events |= WORKER_MBOX_TMO;
6547 	spin_unlock_irqrestore(&phba->pport->work_port_lock, iflag);
6548 
6549 	if (!tmo_posted)
6550 		lpfc_worker_wake_up(phba);
6551 	return;
6552 }
6553 
6554 
6555 /**
6556  * lpfc_mbox_timeout_handler - Worker thread function to handle mailbox timeout
6557  * @phba: Pointer to HBA context object.
6558  *
6559  * This function is called from worker thread when a mailbox command times out.
6560  * The caller is not required to hold any locks. This function will reset the
6561  * HBA and recover all the pending commands.
6562  **/
6563 void
6564 lpfc_mbox_timeout_handler(struct lpfc_hba *phba)
6565 {
6566 	LPFC_MBOXQ_t *pmbox = phba->sli.mbox_active;
6567 	MAILBOX_t *mb = &pmbox->u.mb;
6568 	struct lpfc_sli *psli = &phba->sli;
6569 	struct lpfc_sli_ring *pring;
6570 
6571 	/* Check the pmbox pointer first.  There is a race condition
6572 	 * between the mbox timeout handler getting executed in the
6573 	 * worklist and the mailbox actually completing. When this
6574 	 * race condition occurs, the mbox_active will be NULL.
6575 	 */
6576 	spin_lock_irq(&phba->hbalock);
6577 	if (pmbox == NULL) {
6578 		lpfc_printf_log(phba, KERN_WARNING,
6579 				LOG_MBOX | LOG_SLI,
6580 				"0353 Active Mailbox cleared - mailbox timeout "
6581 				"exiting\n");
6582 		spin_unlock_irq(&phba->hbalock);
6583 		return;
6584 	}
6585 
6586 	/* Mbox cmd <mbxCommand> timeout */
6587 	lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6588 			"0310 Mailbox command x%x timeout Data: x%x x%x x%p\n",
6589 			mb->mbxCommand,
6590 			phba->pport->port_state,
6591 			phba->sli.sli_flag,
6592 			phba->sli.mbox_active);
6593 	spin_unlock_irq(&phba->hbalock);
6594 
6595 	/* Setting state unknown so lpfc_sli_abort_iocb_ring
6596 	 * would get IOCB_ERROR from lpfc_sli_issue_iocb, allowing
6597 	 * it to fail all outstanding SCSI IO.
6598 	 */
6599 	spin_lock_irq(&phba->pport->work_port_lock);
6600 	phba->pport->work_port_events &= ~WORKER_MBOX_TMO;
6601 	spin_unlock_irq(&phba->pport->work_port_lock);
6602 	spin_lock_irq(&phba->hbalock);
6603 	phba->link_state = LPFC_LINK_UNKNOWN;
6604 	psli->sli_flag &= ~LPFC_SLI_ACTIVE;
6605 	spin_unlock_irq(&phba->hbalock);
6606 
6607 	pring = &psli->ring[psli->fcp_ring];
6608 	lpfc_sli_abort_iocb_ring(phba, pring);
6609 
6610 	lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6611 			"0345 Resetting board due to mailbox timeout\n");
6612 
6613 	/* Reset the HBA device */
6614 	lpfc_reset_hba(phba);
6615 }
6616 
6617 /**
6618  * lpfc_sli_issue_mbox_s3 - Issue an SLI3 mailbox command to firmware
6619  * @phba: Pointer to HBA context object.
6620  * @pmbox: Pointer to mailbox object.
6621  * @flag: Flag indicating how the mailbox need to be processed.
6622  *
6623  * This function is called by discovery code and HBA management code
6624  * to submit a mailbox command to firmware with SLI-3 interface spec. This
6625  * function gets the hbalock to protect the data structures.
6626  * The mailbox command can be submitted in polling mode, in which case
6627  * this function will wait in a polling loop for the completion of the
6628  * mailbox.
6629  * If the mailbox is submitted in no_wait mode (not polling) the
6630  * function will submit the command and returns immediately without waiting
6631  * for the mailbox completion. The no_wait is supported only when HBA
6632  * is in SLI2/SLI3 mode - interrupts are enabled.
6633  * The SLI interface allows only one mailbox pending at a time. If the
6634  * mailbox is issued in polling mode and there is already a mailbox
6635  * pending, then the function will return an error. If the mailbox is issued
6636  * in NO_WAIT mode and there is a mailbox pending already, the function
6637  * will return MBX_BUSY after queuing the mailbox into mailbox queue.
6638  * The sli layer owns the mailbox object until the completion of mailbox
6639  * command if this function return MBX_BUSY or MBX_SUCCESS. For all other
6640  * return codes the caller owns the mailbox command after the return of
6641  * the function.
6642  **/
6643 static int
6644 lpfc_sli_issue_mbox_s3(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmbox,
6645 		       uint32_t flag)
6646 {
6647 	MAILBOX_t *mbx;
6648 	struct lpfc_sli *psli = &phba->sli;
6649 	uint32_t status, evtctr;
6650 	uint32_t ha_copy, hc_copy;
6651 	int i;
6652 	unsigned long timeout;
6653 	unsigned long drvr_flag = 0;
6654 	uint32_t word0, ldata;
6655 	void __iomem *to_slim;
6656 	int processing_queue = 0;
6657 
6658 	spin_lock_irqsave(&phba->hbalock, drvr_flag);
6659 	if (!pmbox) {
6660 		phba->sli.sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
6661 		/* processing mbox queue from intr_handler */
6662 		if (unlikely(psli->sli_flag & LPFC_SLI_ASYNC_MBX_BLK)) {
6663 			spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6664 			return MBX_SUCCESS;
6665 		}
6666 		processing_queue = 1;
6667 		pmbox = lpfc_mbox_get(phba);
6668 		if (!pmbox) {
6669 			spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6670 			return MBX_SUCCESS;
6671 		}
6672 	}
6673 
6674 	if (pmbox->mbox_cmpl && pmbox->mbox_cmpl != lpfc_sli_def_mbox_cmpl &&
6675 		pmbox->mbox_cmpl != lpfc_sli_wake_mbox_wait) {
6676 		if(!pmbox->vport) {
6677 			spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6678 			lpfc_printf_log(phba, KERN_ERR,
6679 					LOG_MBOX | LOG_VPORT,
6680 					"1806 Mbox x%x failed. No vport\n",
6681 					pmbox->u.mb.mbxCommand);
6682 			dump_stack();
6683 			goto out_not_finished;
6684 		}
6685 	}
6686 
6687 	/* If the PCI channel is in offline state, do not post mbox. */
6688 	if (unlikely(pci_channel_offline(phba->pcidev))) {
6689 		spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6690 		goto out_not_finished;
6691 	}
6692 
6693 	/* If HBA has a deferred error attention, fail the iocb. */
6694 	if (unlikely(phba->hba_flag & DEFER_ERATT)) {
6695 		spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6696 		goto out_not_finished;
6697 	}
6698 
6699 	psli = &phba->sli;
6700 
6701 	mbx = &pmbox->u.mb;
6702 	status = MBX_SUCCESS;
6703 
6704 	if (phba->link_state == LPFC_HBA_ERROR) {
6705 		spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6706 
6707 		/* Mbox command <mbxCommand> cannot issue */
6708 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6709 				"(%d):0311 Mailbox command x%x cannot "
6710 				"issue Data: x%x x%x\n",
6711 				pmbox->vport ? pmbox->vport->vpi : 0,
6712 				pmbox->u.mb.mbxCommand, psli->sli_flag, flag);
6713 		goto out_not_finished;
6714 	}
6715 
6716 	if (mbx->mbxCommand != MBX_KILL_BOARD && flag & MBX_NOWAIT) {
6717 		if (lpfc_readl(phba->HCregaddr, &hc_copy) ||
6718 			!(hc_copy & HC_MBINT_ENA)) {
6719 			spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6720 			lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6721 				"(%d):2528 Mailbox command x%x cannot "
6722 				"issue Data: x%x x%x\n",
6723 				pmbox->vport ? pmbox->vport->vpi : 0,
6724 				pmbox->u.mb.mbxCommand, psli->sli_flag, flag);
6725 			goto out_not_finished;
6726 		}
6727 	}
6728 
6729 	if (psli->sli_flag & LPFC_SLI_MBOX_ACTIVE) {
6730 		/* Polling for a mbox command when another one is already active
6731 		 * is not allowed in SLI. Also, the driver must have established
6732 		 * SLI2 mode to queue and process multiple mbox commands.
6733 		 */
6734 
6735 		if (flag & MBX_POLL) {
6736 			spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6737 
6738 			/* Mbox command <mbxCommand> cannot issue */
6739 			lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6740 					"(%d):2529 Mailbox command x%x "
6741 					"cannot issue Data: x%x x%x\n",
6742 					pmbox->vport ? pmbox->vport->vpi : 0,
6743 					pmbox->u.mb.mbxCommand,
6744 					psli->sli_flag, flag);
6745 			goto out_not_finished;
6746 		}
6747 
6748 		if (!(psli->sli_flag & LPFC_SLI_ACTIVE)) {
6749 			spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6750 			/* Mbox command <mbxCommand> cannot issue */
6751 			lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6752 					"(%d):2530 Mailbox command x%x "
6753 					"cannot issue Data: x%x x%x\n",
6754 					pmbox->vport ? pmbox->vport->vpi : 0,
6755 					pmbox->u.mb.mbxCommand,
6756 					psli->sli_flag, flag);
6757 			goto out_not_finished;
6758 		}
6759 
6760 		/* Another mailbox command is still being processed, queue this
6761 		 * command to be processed later.
6762 		 */
6763 		lpfc_mbox_put(phba, pmbox);
6764 
6765 		/* Mbox cmd issue - BUSY */
6766 		lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI,
6767 				"(%d):0308 Mbox cmd issue - BUSY Data: "
6768 				"x%x x%x x%x x%x\n",
6769 				pmbox->vport ? pmbox->vport->vpi : 0xffffff,
6770 				mbx->mbxCommand, phba->pport->port_state,
6771 				psli->sli_flag, flag);
6772 
6773 		psli->slistat.mbox_busy++;
6774 		spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6775 
6776 		if (pmbox->vport) {
6777 			lpfc_debugfs_disc_trc(pmbox->vport,
6778 				LPFC_DISC_TRC_MBOX_VPORT,
6779 				"MBOX Bsy vport:  cmd:x%x mb:x%x x%x",
6780 				(uint32_t)mbx->mbxCommand,
6781 				mbx->un.varWords[0], mbx->un.varWords[1]);
6782 		}
6783 		else {
6784 			lpfc_debugfs_disc_trc(phba->pport,
6785 				LPFC_DISC_TRC_MBOX,
6786 				"MBOX Bsy:        cmd:x%x mb:x%x x%x",
6787 				(uint32_t)mbx->mbxCommand,
6788 				mbx->un.varWords[0], mbx->un.varWords[1]);
6789 		}
6790 
6791 		return MBX_BUSY;
6792 	}
6793 
6794 	psli->sli_flag |= LPFC_SLI_MBOX_ACTIVE;
6795 
6796 	/* If we are not polling, we MUST be in SLI2 mode */
6797 	if (flag != MBX_POLL) {
6798 		if (!(psli->sli_flag & LPFC_SLI_ACTIVE) &&
6799 		    (mbx->mbxCommand != MBX_KILL_BOARD)) {
6800 			psli->sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
6801 			spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
6802 			/* Mbox command <mbxCommand> cannot issue */
6803 			lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
6804 					"(%d):2531 Mailbox command x%x "
6805 					"cannot issue Data: x%x x%x\n",
6806 					pmbox->vport ? pmbox->vport->vpi : 0,
6807 					pmbox->u.mb.mbxCommand,
6808 					psli->sli_flag, flag);
6809 			goto out_not_finished;
6810 		}
6811 		/* timeout active mbox command */
6812 		mod_timer(&psli->mbox_tmo, (jiffies +
6813 			       (HZ * lpfc_mbox_tmo_val(phba, pmbox))));
6814 	}
6815 
6816 	/* Mailbox cmd <cmd> issue */
6817 	lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI,
6818 			"(%d):0309 Mailbox cmd x%x issue Data: x%x x%x "
6819 			"x%x\n",
6820 			pmbox->vport ? pmbox->vport->vpi : 0,
6821 			mbx->mbxCommand, phba->pport->port_state,
6822 			psli->sli_flag, flag);
6823 
6824 	if (mbx->mbxCommand != MBX_HEARTBEAT) {
6825 		if (pmbox->vport) {
6826 			lpfc_debugfs_disc_trc(pmbox->vport,
6827 				LPFC_DISC_TRC_MBOX_VPORT,
6828 				"MBOX Send vport: cmd:x%x mb:x%x x%x",
6829 				(uint32_t)mbx->mbxCommand,
6830 				mbx->un.varWords[0], mbx->un.varWords[1]);
6831 		}
6832 		else {
6833 			lpfc_debugfs_disc_trc(phba->pport,
6834 				LPFC_DISC_TRC_MBOX,
6835 				"MBOX Send:       cmd:x%x mb:x%x x%x",
6836 				(uint32_t)mbx->mbxCommand,
6837 				mbx->un.varWords[0], mbx->un.varWords[1]);
6838 		}
6839 	}
6840 
6841 	psli->slistat.mbox_cmd++;
6842 	evtctr = psli->slistat.mbox_event;
6843 
6844 	/* next set own bit for the adapter and copy over command word */
6845 	mbx->mbxOwner = OWN_CHIP;
6846 
6847 	if (psli->sli_flag & LPFC_SLI_ACTIVE) {
6848 		/* Populate mbox extension offset word. */
6849 		if (pmbox->in_ext_byte_len || pmbox->out_ext_byte_len) {
6850 			*(((uint32_t *)mbx) + pmbox->mbox_offset_word)
6851 				= (uint8_t *)phba->mbox_ext
6852 				  - (uint8_t *)phba->mbox;
6853 		}
6854 
6855 		/* Copy the mailbox extension data */
6856 		if (pmbox->in_ext_byte_len && pmbox->context2) {
6857 			lpfc_sli_pcimem_bcopy(pmbox->context2,
6858 				(uint8_t *)phba->mbox_ext,
6859 				pmbox->in_ext_byte_len);
6860 		}
6861 		/* Copy command data to host SLIM area */
6862 		lpfc_sli_pcimem_bcopy(mbx, phba->mbox, MAILBOX_CMD_SIZE);
6863 	} else {
6864 		/* Populate mbox extension offset word. */
6865 		if (pmbox->in_ext_byte_len || pmbox->out_ext_byte_len)
6866 			*(((uint32_t *)mbx) + pmbox->mbox_offset_word)
6867 				= MAILBOX_HBA_EXT_OFFSET;
6868 
6869 		/* Copy the mailbox extension data */
6870 		if (pmbox->in_ext_byte_len && pmbox->context2) {
6871 			lpfc_memcpy_to_slim(phba->MBslimaddr +
6872 				MAILBOX_HBA_EXT_OFFSET,
6873 				pmbox->context2, pmbox->in_ext_byte_len);
6874 
6875 		}
6876 		if (mbx->mbxCommand == MBX_CONFIG_PORT) {
6877 			/* copy command data into host mbox for cmpl */
6878 			lpfc_sli_pcimem_bcopy(mbx, phba->mbox, MAILBOX_CMD_SIZE);
6879 		}
6880 
6881 		/* First copy mbox command data to HBA SLIM, skip past first
6882 		   word */
6883 		to_slim = phba->MBslimaddr + sizeof (uint32_t);
6884 		lpfc_memcpy_to_slim(to_slim, &mbx->un.varWords[0],
6885 			    MAILBOX_CMD_SIZE - sizeof (uint32_t));
6886 
6887 		/* Next copy over first word, with mbxOwner set */
6888 		ldata = *((uint32_t *)mbx);
6889 		to_slim = phba->MBslimaddr;
6890 		writel(ldata, to_slim);
6891 		readl(to_slim); /* flush */
6892 
6893 		if (mbx->mbxCommand == MBX_CONFIG_PORT) {
6894 			/* switch over to host mailbox */
6895 			psli->sli_flag |= LPFC_SLI_ACTIVE;
6896 		}
6897 	}
6898 
6899 	wmb();
6900 
6901 	switch (flag) {
6902 	case MBX_NOWAIT:
6903 		/* Set up reference to mailbox command */
6904 		psli->mbox_active = pmbox;
6905 		/* Interrupt board to do it */
6906 		writel(CA_MBATT, phba->CAregaddr);
6907 		readl(phba->CAregaddr); /* flush */
6908 		/* Don't wait for it to finish, just return */
6909 		break;
6910 
6911 	case MBX_POLL:
6912 		/* Set up null reference to mailbox command */
6913 		psli->mbox_active = NULL;
6914 		/* Interrupt board to do it */
6915 		writel(CA_MBATT, phba->CAregaddr);
6916 		readl(phba->CAregaddr); /* flush */
6917 
6918 		if (psli->sli_flag & LPFC_SLI_ACTIVE) {
6919 			/* First read mbox status word */
6920 			word0 = *((uint32_t *)phba->mbox);
6921 			word0 = le32_to_cpu(word0);
6922 		} else {
6923 			/* First read mbox status word */
6924 			if (lpfc_readl(phba->MBslimaddr, &word0)) {
6925 				spin_unlock_irqrestore(&phba->hbalock,
6926 						       drvr_flag);
6927 				goto out_not_finished;
6928 			}
6929 		}
6930 
6931 		/* Read the HBA Host Attention Register */
6932 		if (lpfc_readl(phba->HAregaddr, &ha_copy)) {
6933 			spin_unlock_irqrestore(&phba->hbalock,
6934 						       drvr_flag);
6935 			goto out_not_finished;
6936 		}
6937 		timeout = msecs_to_jiffies(lpfc_mbox_tmo_val(phba, pmbox) *
6938 							1000) + jiffies;
6939 		i = 0;
6940 		/* Wait for command to complete */
6941 		while (((word0 & OWN_CHIP) == OWN_CHIP) ||
6942 		       (!(ha_copy & HA_MBATT) &&
6943 			(phba->link_state > LPFC_WARM_START))) {
6944 			if (time_after(jiffies, timeout)) {
6945 				psli->sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
6946 				spin_unlock_irqrestore(&phba->hbalock,
6947 						       drvr_flag);
6948 				goto out_not_finished;
6949 			}
6950 
6951 			/* Check if we took a mbox interrupt while we were
6952 			   polling */
6953 			if (((word0 & OWN_CHIP) != OWN_CHIP)
6954 			    && (evtctr != psli->slistat.mbox_event))
6955 				break;
6956 
6957 			if (i++ > 10) {
6958 				spin_unlock_irqrestore(&phba->hbalock,
6959 						       drvr_flag);
6960 				msleep(1);
6961 				spin_lock_irqsave(&phba->hbalock, drvr_flag);
6962 			}
6963 
6964 			if (psli->sli_flag & LPFC_SLI_ACTIVE) {
6965 				/* First copy command data */
6966 				word0 = *((uint32_t *)phba->mbox);
6967 				word0 = le32_to_cpu(word0);
6968 				if (mbx->mbxCommand == MBX_CONFIG_PORT) {
6969 					MAILBOX_t *slimmb;
6970 					uint32_t slimword0;
6971 					/* Check real SLIM for any errors */
6972 					slimword0 = readl(phba->MBslimaddr);
6973 					slimmb = (MAILBOX_t *) & slimword0;
6974 					if (((slimword0 & OWN_CHIP) != OWN_CHIP)
6975 					    && slimmb->mbxStatus) {
6976 						psli->sli_flag &=
6977 						    ~LPFC_SLI_ACTIVE;
6978 						word0 = slimword0;
6979 					}
6980 				}
6981 			} else {
6982 				/* First copy command data */
6983 				word0 = readl(phba->MBslimaddr);
6984 			}
6985 			/* Read the HBA Host Attention Register */
6986 			if (lpfc_readl(phba->HAregaddr, &ha_copy)) {
6987 				spin_unlock_irqrestore(&phba->hbalock,
6988 						       drvr_flag);
6989 				goto out_not_finished;
6990 			}
6991 		}
6992 
6993 		if (psli->sli_flag & LPFC_SLI_ACTIVE) {
6994 			/* copy results back to user */
6995 			lpfc_sli_pcimem_bcopy(phba->mbox, mbx, MAILBOX_CMD_SIZE);
6996 			/* Copy the mailbox extension data */
6997 			if (pmbox->out_ext_byte_len && pmbox->context2) {
6998 				lpfc_sli_pcimem_bcopy(phba->mbox_ext,
6999 						      pmbox->context2,
7000 						      pmbox->out_ext_byte_len);
7001 			}
7002 		} else {
7003 			/* First copy command data */
7004 			lpfc_memcpy_from_slim(mbx, phba->MBslimaddr,
7005 							MAILBOX_CMD_SIZE);
7006 			/* Copy the mailbox extension data */
7007 			if (pmbox->out_ext_byte_len && pmbox->context2) {
7008 				lpfc_memcpy_from_slim(pmbox->context2,
7009 					phba->MBslimaddr +
7010 					MAILBOX_HBA_EXT_OFFSET,
7011 					pmbox->out_ext_byte_len);
7012 			}
7013 		}
7014 
7015 		writel(HA_MBATT, phba->HAregaddr);
7016 		readl(phba->HAregaddr); /* flush */
7017 
7018 		psli->sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
7019 		status = mbx->mbxStatus;
7020 	}
7021 
7022 	spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
7023 	return status;
7024 
7025 out_not_finished:
7026 	if (processing_queue) {
7027 		pmbox->u.mb.mbxStatus = MBX_NOT_FINISHED;
7028 		lpfc_mbox_cmpl_put(phba, pmbox);
7029 	}
7030 	return MBX_NOT_FINISHED;
7031 }
7032 
7033 /**
7034  * lpfc_sli4_async_mbox_block - Block posting SLI4 asynchronous mailbox command
7035  * @phba: Pointer to HBA context object.
7036  *
7037  * The function blocks the posting of SLI4 asynchronous mailbox commands from
7038  * the driver internal pending mailbox queue. It will then try to wait out the
7039  * possible outstanding mailbox command before return.
7040  *
7041  * Returns:
7042  * 	0 - the outstanding mailbox command completed; otherwise, the wait for
7043  * 	the outstanding mailbox command timed out.
7044  **/
7045 static int
7046 lpfc_sli4_async_mbox_block(struct lpfc_hba *phba)
7047 {
7048 	struct lpfc_sli *psli = &phba->sli;
7049 	int rc = 0;
7050 	unsigned long timeout = 0;
7051 
7052 	/* Mark the asynchronous mailbox command posting as blocked */
7053 	spin_lock_irq(&phba->hbalock);
7054 	psli->sli_flag |= LPFC_SLI_ASYNC_MBX_BLK;
7055 	/* Determine how long we might wait for the active mailbox
7056 	 * command to be gracefully completed by firmware.
7057 	 */
7058 	if (phba->sli.mbox_active)
7059 		timeout = msecs_to_jiffies(lpfc_mbox_tmo_val(phba,
7060 						phba->sli.mbox_active) *
7061 						1000) + jiffies;
7062 	spin_unlock_irq(&phba->hbalock);
7063 
7064 	/* Wait for the outstnading mailbox command to complete */
7065 	while (phba->sli.mbox_active) {
7066 		/* Check active mailbox complete status every 2ms */
7067 		msleep(2);
7068 		if (time_after(jiffies, timeout)) {
7069 			/* Timeout, marked the outstanding cmd not complete */
7070 			rc = 1;
7071 			break;
7072 		}
7073 	}
7074 
7075 	/* Can not cleanly block async mailbox command, fails it */
7076 	if (rc) {
7077 		spin_lock_irq(&phba->hbalock);
7078 		psli->sli_flag &= ~LPFC_SLI_ASYNC_MBX_BLK;
7079 		spin_unlock_irq(&phba->hbalock);
7080 	}
7081 	return rc;
7082 }
7083 
7084 /**
7085  * lpfc_sli4_async_mbox_unblock - Block posting SLI4 async mailbox command
7086  * @phba: Pointer to HBA context object.
7087  *
7088  * The function unblocks and resume posting of SLI4 asynchronous mailbox
7089  * commands from the driver internal pending mailbox queue. It makes sure
7090  * that there is no outstanding mailbox command before resuming posting
7091  * asynchronous mailbox commands. If, for any reason, there is outstanding
7092  * mailbox command, it will try to wait it out before resuming asynchronous
7093  * mailbox command posting.
7094  **/
7095 static void
7096 lpfc_sli4_async_mbox_unblock(struct lpfc_hba *phba)
7097 {
7098 	struct lpfc_sli *psli = &phba->sli;
7099 
7100 	spin_lock_irq(&phba->hbalock);
7101 	if (!(psli->sli_flag & LPFC_SLI_ASYNC_MBX_BLK)) {
7102 		/* Asynchronous mailbox posting is not blocked, do nothing */
7103 		spin_unlock_irq(&phba->hbalock);
7104 		return;
7105 	}
7106 
7107 	/* Outstanding synchronous mailbox command is guaranteed to be done,
7108 	 * successful or timeout, after timing-out the outstanding mailbox
7109 	 * command shall always be removed, so just unblock posting async
7110 	 * mailbox command and resume
7111 	 */
7112 	psli->sli_flag &= ~LPFC_SLI_ASYNC_MBX_BLK;
7113 	spin_unlock_irq(&phba->hbalock);
7114 
7115 	/* wake up worker thread to post asynchronlous mailbox command */
7116 	lpfc_worker_wake_up(phba);
7117 }
7118 
7119 /**
7120  * lpfc_sli4_wait_bmbx_ready - Wait for bootstrap mailbox register ready
7121  * @phba: Pointer to HBA context object.
7122  * @mboxq: Pointer to mailbox object.
7123  *
7124  * The function waits for the bootstrap mailbox register ready bit from
7125  * port for twice the regular mailbox command timeout value.
7126  *
7127  *      0 - no timeout on waiting for bootstrap mailbox register ready.
7128  *      MBXERR_ERROR - wait for bootstrap mailbox register timed out.
7129  **/
7130 static int
7131 lpfc_sli4_wait_bmbx_ready(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
7132 {
7133 	uint32_t db_ready;
7134 	unsigned long timeout;
7135 	struct lpfc_register bmbx_reg;
7136 
7137 	timeout = msecs_to_jiffies(lpfc_mbox_tmo_val(phba, mboxq)
7138 				   * 1000) + jiffies;
7139 
7140 	do {
7141 		bmbx_reg.word0 = readl(phba->sli4_hba.BMBXregaddr);
7142 		db_ready = bf_get(lpfc_bmbx_rdy, &bmbx_reg);
7143 		if (!db_ready)
7144 			msleep(2);
7145 
7146 		if (time_after(jiffies, timeout))
7147 			return MBXERR_ERROR;
7148 	} while (!db_ready);
7149 
7150 	return 0;
7151 }
7152 
7153 /**
7154  * lpfc_sli4_post_sync_mbox - Post an SLI4 mailbox to the bootstrap mailbox
7155  * @phba: Pointer to HBA context object.
7156  * @mboxq: Pointer to mailbox object.
7157  *
7158  * The function posts a mailbox to the port.  The mailbox is expected
7159  * to be comletely filled in and ready for the port to operate on it.
7160  * This routine executes a synchronous completion operation on the
7161  * mailbox by polling for its completion.
7162  *
7163  * The caller must not be holding any locks when calling this routine.
7164  *
7165  * Returns:
7166  *	MBX_SUCCESS - mailbox posted successfully
7167  *	Any of the MBX error values.
7168  **/
7169 static int
7170 lpfc_sli4_post_sync_mbox(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
7171 {
7172 	int rc = MBX_SUCCESS;
7173 	unsigned long iflag;
7174 	uint32_t mcqe_status;
7175 	uint32_t mbx_cmnd;
7176 	struct lpfc_sli *psli = &phba->sli;
7177 	struct lpfc_mqe *mb = &mboxq->u.mqe;
7178 	struct lpfc_bmbx_create *mbox_rgn;
7179 	struct dma_address *dma_address;
7180 
7181 	/*
7182 	 * Only one mailbox can be active to the bootstrap mailbox region
7183 	 * at a time and there is no queueing provided.
7184 	 */
7185 	spin_lock_irqsave(&phba->hbalock, iflag);
7186 	if (psli->sli_flag & LPFC_SLI_MBOX_ACTIVE) {
7187 		spin_unlock_irqrestore(&phba->hbalock, iflag);
7188 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
7189 				"(%d):2532 Mailbox command x%x (x%x/x%x) "
7190 				"cannot issue Data: x%x x%x\n",
7191 				mboxq->vport ? mboxq->vport->vpi : 0,
7192 				mboxq->u.mb.mbxCommand,
7193 				lpfc_sli_config_mbox_subsys_get(phba, mboxq),
7194 				lpfc_sli_config_mbox_opcode_get(phba, mboxq),
7195 				psli->sli_flag, MBX_POLL);
7196 		return MBXERR_ERROR;
7197 	}
7198 	/* The server grabs the token and owns it until release */
7199 	psli->sli_flag |= LPFC_SLI_MBOX_ACTIVE;
7200 	phba->sli.mbox_active = mboxq;
7201 	spin_unlock_irqrestore(&phba->hbalock, iflag);
7202 
7203 	/* wait for bootstrap mbox register for readyness */
7204 	rc = lpfc_sli4_wait_bmbx_ready(phba, mboxq);
7205 	if (rc)
7206 		goto exit;
7207 
7208 	/*
7209 	 * Initialize the bootstrap memory region to avoid stale data areas
7210 	 * in the mailbox post.  Then copy the caller's mailbox contents to
7211 	 * the bmbx mailbox region.
7212 	 */
7213 	mbx_cmnd = bf_get(lpfc_mqe_command, mb);
7214 	memset(phba->sli4_hba.bmbx.avirt, 0, sizeof(struct lpfc_bmbx_create));
7215 	lpfc_sli_pcimem_bcopy(mb, phba->sli4_hba.bmbx.avirt,
7216 			      sizeof(struct lpfc_mqe));
7217 
7218 	/* Post the high mailbox dma address to the port and wait for ready. */
7219 	dma_address = &phba->sli4_hba.bmbx.dma_address;
7220 	writel(dma_address->addr_hi, phba->sli4_hba.BMBXregaddr);
7221 
7222 	/* wait for bootstrap mbox register for hi-address write done */
7223 	rc = lpfc_sli4_wait_bmbx_ready(phba, mboxq);
7224 	if (rc)
7225 		goto exit;
7226 
7227 	/* Post the low mailbox dma address to the port. */
7228 	writel(dma_address->addr_lo, phba->sli4_hba.BMBXregaddr);
7229 
7230 	/* wait for bootstrap mbox register for low address write done */
7231 	rc = lpfc_sli4_wait_bmbx_ready(phba, mboxq);
7232 	if (rc)
7233 		goto exit;
7234 
7235 	/*
7236 	 * Read the CQ to ensure the mailbox has completed.
7237 	 * If so, update the mailbox status so that the upper layers
7238 	 * can complete the request normally.
7239 	 */
7240 	lpfc_sli_pcimem_bcopy(phba->sli4_hba.bmbx.avirt, mb,
7241 			      sizeof(struct lpfc_mqe));
7242 	mbox_rgn = (struct lpfc_bmbx_create *) phba->sli4_hba.bmbx.avirt;
7243 	lpfc_sli_pcimem_bcopy(&mbox_rgn->mcqe, &mboxq->mcqe,
7244 			      sizeof(struct lpfc_mcqe));
7245 	mcqe_status = bf_get(lpfc_mcqe_status, &mbox_rgn->mcqe);
7246 	/*
7247 	 * When the CQE status indicates a failure and the mailbox status
7248 	 * indicates success then copy the CQE status into the mailbox status
7249 	 * (and prefix it with x4000).
7250 	 */
7251 	if (mcqe_status != MB_CQE_STATUS_SUCCESS) {
7252 		if (bf_get(lpfc_mqe_status, mb) == MBX_SUCCESS)
7253 			bf_set(lpfc_mqe_status, mb,
7254 			       (LPFC_MBX_ERROR_RANGE | mcqe_status));
7255 		rc = MBXERR_ERROR;
7256 	} else
7257 		lpfc_sli4_swap_str(phba, mboxq);
7258 
7259 	lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI,
7260 			"(%d):0356 Mailbox cmd x%x (x%x/x%x) Status x%x "
7261 			"Data: x%x x%x x%x x%x x%x x%x x%x x%x x%x x%x x%x"
7262 			" x%x x%x CQ: x%x x%x x%x x%x\n",
7263 			mboxq->vport ? mboxq->vport->vpi : 0, mbx_cmnd,
7264 			lpfc_sli_config_mbox_subsys_get(phba, mboxq),
7265 			lpfc_sli_config_mbox_opcode_get(phba, mboxq),
7266 			bf_get(lpfc_mqe_status, mb),
7267 			mb->un.mb_words[0], mb->un.mb_words[1],
7268 			mb->un.mb_words[2], mb->un.mb_words[3],
7269 			mb->un.mb_words[4], mb->un.mb_words[5],
7270 			mb->un.mb_words[6], mb->un.mb_words[7],
7271 			mb->un.mb_words[8], mb->un.mb_words[9],
7272 			mb->un.mb_words[10], mb->un.mb_words[11],
7273 			mb->un.mb_words[12], mboxq->mcqe.word0,
7274 			mboxq->mcqe.mcqe_tag0, 	mboxq->mcqe.mcqe_tag1,
7275 			mboxq->mcqe.trailer);
7276 exit:
7277 	/* We are holding the token, no needed for lock when release */
7278 	spin_lock_irqsave(&phba->hbalock, iflag);
7279 	psli->sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
7280 	phba->sli.mbox_active = NULL;
7281 	spin_unlock_irqrestore(&phba->hbalock, iflag);
7282 	return rc;
7283 }
7284 
7285 /**
7286  * lpfc_sli_issue_mbox_s4 - Issue an SLI4 mailbox command to firmware
7287  * @phba: Pointer to HBA context object.
7288  * @pmbox: Pointer to mailbox object.
7289  * @flag: Flag indicating how the mailbox need to be processed.
7290  *
7291  * This function is called by discovery code and HBA management code to submit
7292  * a mailbox command to firmware with SLI-4 interface spec.
7293  *
7294  * Return codes the caller owns the mailbox command after the return of the
7295  * function.
7296  **/
7297 static int
7298 lpfc_sli_issue_mbox_s4(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq,
7299 		       uint32_t flag)
7300 {
7301 	struct lpfc_sli *psli = &phba->sli;
7302 	unsigned long iflags;
7303 	int rc;
7304 
7305 	/* dump from issue mailbox command if setup */
7306 	lpfc_idiag_mbxacc_dump_issue_mbox(phba, &mboxq->u.mb);
7307 
7308 	rc = lpfc_mbox_dev_check(phba);
7309 	if (unlikely(rc)) {
7310 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
7311 				"(%d):2544 Mailbox command x%x (x%x/x%x) "
7312 				"cannot issue Data: x%x x%x\n",
7313 				mboxq->vport ? mboxq->vport->vpi : 0,
7314 				mboxq->u.mb.mbxCommand,
7315 				lpfc_sli_config_mbox_subsys_get(phba, mboxq),
7316 				lpfc_sli_config_mbox_opcode_get(phba, mboxq),
7317 				psli->sli_flag, flag);
7318 		goto out_not_finished;
7319 	}
7320 
7321 	/* Detect polling mode and jump to a handler */
7322 	if (!phba->sli4_hba.intr_enable) {
7323 		if (flag == MBX_POLL)
7324 			rc = lpfc_sli4_post_sync_mbox(phba, mboxq);
7325 		else
7326 			rc = -EIO;
7327 		if (rc != MBX_SUCCESS)
7328 			lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX | LOG_SLI,
7329 					"(%d):2541 Mailbox command x%x "
7330 					"(x%x/x%x) failure: "
7331 					"mqe_sta: x%x mcqe_sta: x%x/x%x "
7332 					"Data: x%x x%x\n,",
7333 					mboxq->vport ? mboxq->vport->vpi : 0,
7334 					mboxq->u.mb.mbxCommand,
7335 					lpfc_sli_config_mbox_subsys_get(phba,
7336 									mboxq),
7337 					lpfc_sli_config_mbox_opcode_get(phba,
7338 									mboxq),
7339 					bf_get(lpfc_mqe_status, &mboxq->u.mqe),
7340 					bf_get(lpfc_mcqe_status, &mboxq->mcqe),
7341 					bf_get(lpfc_mcqe_ext_status,
7342 					       &mboxq->mcqe),
7343 					psli->sli_flag, flag);
7344 		return rc;
7345 	} else if (flag == MBX_POLL) {
7346 		lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX | LOG_SLI,
7347 				"(%d):2542 Try to issue mailbox command "
7348 				"x%x (x%x/x%x) synchronously ahead of async"
7349 				"mailbox command queue: x%x x%x\n",
7350 				mboxq->vport ? mboxq->vport->vpi : 0,
7351 				mboxq->u.mb.mbxCommand,
7352 				lpfc_sli_config_mbox_subsys_get(phba, mboxq),
7353 				lpfc_sli_config_mbox_opcode_get(phba, mboxq),
7354 				psli->sli_flag, flag);
7355 		/* Try to block the asynchronous mailbox posting */
7356 		rc = lpfc_sli4_async_mbox_block(phba);
7357 		if (!rc) {
7358 			/* Successfully blocked, now issue sync mbox cmd */
7359 			rc = lpfc_sli4_post_sync_mbox(phba, mboxq);
7360 			if (rc != MBX_SUCCESS)
7361 				lpfc_printf_log(phba, KERN_WARNING,
7362 					LOG_MBOX | LOG_SLI,
7363 					"(%d):2597 Sync Mailbox command "
7364 					"x%x (x%x/x%x) failure: "
7365 					"mqe_sta: x%x mcqe_sta: x%x/x%x "
7366 					"Data: x%x x%x\n,",
7367 					mboxq->vport ? mboxq->vport->vpi : 0,
7368 					mboxq->u.mb.mbxCommand,
7369 					lpfc_sli_config_mbox_subsys_get(phba,
7370 									mboxq),
7371 					lpfc_sli_config_mbox_opcode_get(phba,
7372 									mboxq),
7373 					bf_get(lpfc_mqe_status, &mboxq->u.mqe),
7374 					bf_get(lpfc_mcqe_status, &mboxq->mcqe),
7375 					bf_get(lpfc_mcqe_ext_status,
7376 					       &mboxq->mcqe),
7377 					psli->sli_flag, flag);
7378 			/* Unblock the async mailbox posting afterward */
7379 			lpfc_sli4_async_mbox_unblock(phba);
7380 		}
7381 		return rc;
7382 	}
7383 
7384 	/* Now, interrupt mode asynchrous mailbox command */
7385 	rc = lpfc_mbox_cmd_check(phba, mboxq);
7386 	if (rc) {
7387 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
7388 				"(%d):2543 Mailbox command x%x (x%x/x%x) "
7389 				"cannot issue Data: x%x x%x\n",
7390 				mboxq->vport ? mboxq->vport->vpi : 0,
7391 				mboxq->u.mb.mbxCommand,
7392 				lpfc_sli_config_mbox_subsys_get(phba, mboxq),
7393 				lpfc_sli_config_mbox_opcode_get(phba, mboxq),
7394 				psli->sli_flag, flag);
7395 		goto out_not_finished;
7396 	}
7397 
7398 	/* Put the mailbox command to the driver internal FIFO */
7399 	psli->slistat.mbox_busy++;
7400 	spin_lock_irqsave(&phba->hbalock, iflags);
7401 	lpfc_mbox_put(phba, mboxq);
7402 	spin_unlock_irqrestore(&phba->hbalock, iflags);
7403 	lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI,
7404 			"(%d):0354 Mbox cmd issue - Enqueue Data: "
7405 			"x%x (x%x/x%x) x%x x%x x%x\n",
7406 			mboxq->vport ? mboxq->vport->vpi : 0xffffff,
7407 			bf_get(lpfc_mqe_command, &mboxq->u.mqe),
7408 			lpfc_sli_config_mbox_subsys_get(phba, mboxq),
7409 			lpfc_sli_config_mbox_opcode_get(phba, mboxq),
7410 			phba->pport->port_state,
7411 			psli->sli_flag, MBX_NOWAIT);
7412 	/* Wake up worker thread to transport mailbox command from head */
7413 	lpfc_worker_wake_up(phba);
7414 
7415 	return MBX_BUSY;
7416 
7417 out_not_finished:
7418 	return MBX_NOT_FINISHED;
7419 }
7420 
7421 /**
7422  * lpfc_sli4_post_async_mbox - Post an SLI4 mailbox command to device
7423  * @phba: Pointer to HBA context object.
7424  *
7425  * This function is called by worker thread to send a mailbox command to
7426  * SLI4 HBA firmware.
7427  *
7428  **/
7429 int
7430 lpfc_sli4_post_async_mbox(struct lpfc_hba *phba)
7431 {
7432 	struct lpfc_sli *psli = &phba->sli;
7433 	LPFC_MBOXQ_t *mboxq;
7434 	int rc = MBX_SUCCESS;
7435 	unsigned long iflags;
7436 	struct lpfc_mqe *mqe;
7437 	uint32_t mbx_cmnd;
7438 
7439 	/* Check interrupt mode before post async mailbox command */
7440 	if (unlikely(!phba->sli4_hba.intr_enable))
7441 		return MBX_NOT_FINISHED;
7442 
7443 	/* Check for mailbox command service token */
7444 	spin_lock_irqsave(&phba->hbalock, iflags);
7445 	if (unlikely(psli->sli_flag & LPFC_SLI_ASYNC_MBX_BLK)) {
7446 		spin_unlock_irqrestore(&phba->hbalock, iflags);
7447 		return MBX_NOT_FINISHED;
7448 	}
7449 	if (psli->sli_flag & LPFC_SLI_MBOX_ACTIVE) {
7450 		spin_unlock_irqrestore(&phba->hbalock, iflags);
7451 		return MBX_NOT_FINISHED;
7452 	}
7453 	if (unlikely(phba->sli.mbox_active)) {
7454 		spin_unlock_irqrestore(&phba->hbalock, iflags);
7455 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
7456 				"0384 There is pending active mailbox cmd\n");
7457 		return MBX_NOT_FINISHED;
7458 	}
7459 	/* Take the mailbox command service token */
7460 	psli->sli_flag |= LPFC_SLI_MBOX_ACTIVE;
7461 
7462 	/* Get the next mailbox command from head of queue */
7463 	mboxq = lpfc_mbox_get(phba);
7464 
7465 	/* If no more mailbox command waiting for post, we're done */
7466 	if (!mboxq) {
7467 		psli->sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
7468 		spin_unlock_irqrestore(&phba->hbalock, iflags);
7469 		return MBX_SUCCESS;
7470 	}
7471 	phba->sli.mbox_active = mboxq;
7472 	spin_unlock_irqrestore(&phba->hbalock, iflags);
7473 
7474 	/* Check device readiness for posting mailbox command */
7475 	rc = lpfc_mbox_dev_check(phba);
7476 	if (unlikely(rc))
7477 		/* Driver clean routine will clean up pending mailbox */
7478 		goto out_not_finished;
7479 
7480 	/* Prepare the mbox command to be posted */
7481 	mqe = &mboxq->u.mqe;
7482 	mbx_cmnd = bf_get(lpfc_mqe_command, mqe);
7483 
7484 	/* Start timer for the mbox_tmo and log some mailbox post messages */
7485 	mod_timer(&psli->mbox_tmo, (jiffies +
7486 		  (HZ * lpfc_mbox_tmo_val(phba, mboxq))));
7487 
7488 	lpfc_printf_log(phba, KERN_INFO, LOG_MBOX | LOG_SLI,
7489 			"(%d):0355 Mailbox cmd x%x (x%x/x%x) issue Data: "
7490 			"x%x x%x\n",
7491 			mboxq->vport ? mboxq->vport->vpi : 0, mbx_cmnd,
7492 			lpfc_sli_config_mbox_subsys_get(phba, mboxq),
7493 			lpfc_sli_config_mbox_opcode_get(phba, mboxq),
7494 			phba->pport->port_state, psli->sli_flag);
7495 
7496 	if (mbx_cmnd != MBX_HEARTBEAT) {
7497 		if (mboxq->vport) {
7498 			lpfc_debugfs_disc_trc(mboxq->vport,
7499 				LPFC_DISC_TRC_MBOX_VPORT,
7500 				"MBOX Send vport: cmd:x%x mb:x%x x%x",
7501 				mbx_cmnd, mqe->un.mb_words[0],
7502 				mqe->un.mb_words[1]);
7503 		} else {
7504 			lpfc_debugfs_disc_trc(phba->pport,
7505 				LPFC_DISC_TRC_MBOX,
7506 				"MBOX Send: cmd:x%x mb:x%x x%x",
7507 				mbx_cmnd, mqe->un.mb_words[0],
7508 				mqe->un.mb_words[1]);
7509 		}
7510 	}
7511 	psli->slistat.mbox_cmd++;
7512 
7513 	/* Post the mailbox command to the port */
7514 	rc = lpfc_sli4_mq_put(phba->sli4_hba.mbx_wq, mqe);
7515 	if (rc != MBX_SUCCESS) {
7516 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
7517 				"(%d):2533 Mailbox command x%x (x%x/x%x) "
7518 				"cannot issue Data: x%x x%x\n",
7519 				mboxq->vport ? mboxq->vport->vpi : 0,
7520 				mboxq->u.mb.mbxCommand,
7521 				lpfc_sli_config_mbox_subsys_get(phba, mboxq),
7522 				lpfc_sli_config_mbox_opcode_get(phba, mboxq),
7523 				psli->sli_flag, MBX_NOWAIT);
7524 		goto out_not_finished;
7525 	}
7526 
7527 	return rc;
7528 
7529 out_not_finished:
7530 	spin_lock_irqsave(&phba->hbalock, iflags);
7531 	if (phba->sli.mbox_active) {
7532 		mboxq->u.mb.mbxStatus = MBX_NOT_FINISHED;
7533 		__lpfc_mbox_cmpl_put(phba, mboxq);
7534 		/* Release the token */
7535 		psli->sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
7536 		phba->sli.mbox_active = NULL;
7537 	}
7538 	spin_unlock_irqrestore(&phba->hbalock, iflags);
7539 
7540 	return MBX_NOT_FINISHED;
7541 }
7542 
7543 /**
7544  * lpfc_sli_issue_mbox - Wrapper func for issuing mailbox command
7545  * @phba: Pointer to HBA context object.
7546  * @pmbox: Pointer to mailbox object.
7547  * @flag: Flag indicating how the mailbox need to be processed.
7548  *
7549  * This routine wraps the actual SLI3 or SLI4 mailbox issuing routine from
7550  * the API jump table function pointer from the lpfc_hba struct.
7551  *
7552  * Return codes the caller owns the mailbox command after the return of the
7553  * function.
7554  **/
7555 int
7556 lpfc_sli_issue_mbox(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmbox, uint32_t flag)
7557 {
7558 	return phba->lpfc_sli_issue_mbox(phba, pmbox, flag);
7559 }
7560 
7561 /**
7562  * lpfc_mbox_api_table_setup - Set up mbox api function jump table
7563  * @phba: The hba struct for which this call is being executed.
7564  * @dev_grp: The HBA PCI-Device group number.
7565  *
7566  * This routine sets up the mbox interface API function jump table in @phba
7567  * struct.
7568  * Returns: 0 - success, -ENODEV - failure.
7569  **/
7570 int
7571 lpfc_mbox_api_table_setup(struct lpfc_hba *phba, uint8_t dev_grp)
7572 {
7573 
7574 	switch (dev_grp) {
7575 	case LPFC_PCI_DEV_LP:
7576 		phba->lpfc_sli_issue_mbox = lpfc_sli_issue_mbox_s3;
7577 		phba->lpfc_sli_handle_slow_ring_event =
7578 				lpfc_sli_handle_slow_ring_event_s3;
7579 		phba->lpfc_sli_hbq_to_firmware = lpfc_sli_hbq_to_firmware_s3;
7580 		phba->lpfc_sli_brdrestart = lpfc_sli_brdrestart_s3;
7581 		phba->lpfc_sli_brdready = lpfc_sli_brdready_s3;
7582 		break;
7583 	case LPFC_PCI_DEV_OC:
7584 		phba->lpfc_sli_issue_mbox = lpfc_sli_issue_mbox_s4;
7585 		phba->lpfc_sli_handle_slow_ring_event =
7586 				lpfc_sli_handle_slow_ring_event_s4;
7587 		phba->lpfc_sli_hbq_to_firmware = lpfc_sli_hbq_to_firmware_s4;
7588 		phba->lpfc_sli_brdrestart = lpfc_sli_brdrestart_s4;
7589 		phba->lpfc_sli_brdready = lpfc_sli_brdready_s4;
7590 		break;
7591 	default:
7592 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7593 				"1420 Invalid HBA PCI-device group: 0x%x\n",
7594 				dev_grp);
7595 		return -ENODEV;
7596 		break;
7597 	}
7598 	return 0;
7599 }
7600 
7601 /**
7602  * __lpfc_sli_ringtx_put - Add an iocb to the txq
7603  * @phba: Pointer to HBA context object.
7604  * @pring: Pointer to driver SLI ring object.
7605  * @piocb: Pointer to address of newly added command iocb.
7606  *
7607  * This function is called with hbalock held to add a command
7608  * iocb to the txq when SLI layer cannot submit the command iocb
7609  * to the ring.
7610  **/
7611 void
7612 __lpfc_sli_ringtx_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
7613 		    struct lpfc_iocbq *piocb)
7614 {
7615 	/* Insert the caller's iocb in the txq tail for later processing. */
7616 	list_add_tail(&piocb->list, &pring->txq);
7617 	pring->txq_cnt++;
7618 }
7619 
7620 /**
7621  * lpfc_sli_next_iocb - Get the next iocb in the txq
7622  * @phba: Pointer to HBA context object.
7623  * @pring: Pointer to driver SLI ring object.
7624  * @piocb: Pointer to address of newly added command iocb.
7625  *
7626  * This function is called with hbalock held before a new
7627  * iocb is submitted to the firmware. This function checks
7628  * txq to flush the iocbs in txq to Firmware before
7629  * submitting new iocbs to the Firmware.
7630  * If there are iocbs in the txq which need to be submitted
7631  * to firmware, lpfc_sli_next_iocb returns the first element
7632  * of the txq after dequeuing it from txq.
7633  * If there is no iocb in the txq then the function will return
7634  * *piocb and *piocb is set to NULL. Caller needs to check
7635  * *piocb to find if there are more commands in the txq.
7636  **/
7637 static struct lpfc_iocbq *
7638 lpfc_sli_next_iocb(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
7639 		   struct lpfc_iocbq **piocb)
7640 {
7641 	struct lpfc_iocbq * nextiocb;
7642 
7643 	nextiocb = lpfc_sli_ringtx_get(phba, pring);
7644 	if (!nextiocb) {
7645 		nextiocb = *piocb;
7646 		*piocb = NULL;
7647 	}
7648 
7649 	return nextiocb;
7650 }
7651 
7652 /**
7653  * __lpfc_sli_issue_iocb_s3 - SLI3 device lockless ver of lpfc_sli_issue_iocb
7654  * @phba: Pointer to HBA context object.
7655  * @ring_number: SLI ring number to issue iocb on.
7656  * @piocb: Pointer to command iocb.
7657  * @flag: Flag indicating if this command can be put into txq.
7658  *
7659  * __lpfc_sli_issue_iocb_s3 is used by other functions in the driver to issue
7660  * an iocb command to an HBA with SLI-3 interface spec. If the PCI slot is
7661  * recovering from error state, if HBA is resetting or if LPFC_STOP_IOCB_EVENT
7662  * flag is turned on, the function returns IOCB_ERROR. When the link is down,
7663  * this function allows only iocbs for posting buffers. This function finds
7664  * next available slot in the command ring and posts the command to the
7665  * available slot and writes the port attention register to request HBA start
7666  * processing new iocb. If there is no slot available in the ring and
7667  * flag & SLI_IOCB_RET_IOCB is set, the new iocb is added to the txq, otherwise
7668  * the function returns IOCB_BUSY.
7669  *
7670  * This function is called with hbalock held. The function will return success
7671  * after it successfully submit the iocb to firmware or after adding to the
7672  * txq.
7673  **/
7674 static int
7675 __lpfc_sli_issue_iocb_s3(struct lpfc_hba *phba, uint32_t ring_number,
7676 		    struct lpfc_iocbq *piocb, uint32_t flag)
7677 {
7678 	struct lpfc_iocbq *nextiocb;
7679 	IOCB_t *iocb;
7680 	struct lpfc_sli_ring *pring = &phba->sli.ring[ring_number];
7681 
7682 	if (piocb->iocb_cmpl && (!piocb->vport) &&
7683 	   (piocb->iocb.ulpCommand != CMD_ABORT_XRI_CN) &&
7684 	   (piocb->iocb.ulpCommand != CMD_CLOSE_XRI_CN)) {
7685 		lpfc_printf_log(phba, KERN_ERR,
7686 				LOG_SLI | LOG_VPORT,
7687 				"1807 IOCB x%x failed. No vport\n",
7688 				piocb->iocb.ulpCommand);
7689 		dump_stack();
7690 		return IOCB_ERROR;
7691 	}
7692 
7693 
7694 	/* If the PCI channel is in offline state, do not post iocbs. */
7695 	if (unlikely(pci_channel_offline(phba->pcidev)))
7696 		return IOCB_ERROR;
7697 
7698 	/* If HBA has a deferred error attention, fail the iocb. */
7699 	if (unlikely(phba->hba_flag & DEFER_ERATT))
7700 		return IOCB_ERROR;
7701 
7702 	/*
7703 	 * We should never get an IOCB if we are in a < LINK_DOWN state
7704 	 */
7705 	if (unlikely(phba->link_state < LPFC_LINK_DOWN))
7706 		return IOCB_ERROR;
7707 
7708 	/*
7709 	 * Check to see if we are blocking IOCB processing because of a
7710 	 * outstanding event.
7711 	 */
7712 	if (unlikely(pring->flag & LPFC_STOP_IOCB_EVENT))
7713 		goto iocb_busy;
7714 
7715 	if (unlikely(phba->link_state == LPFC_LINK_DOWN)) {
7716 		/*
7717 		 * Only CREATE_XRI, CLOSE_XRI, and QUE_RING_BUF
7718 		 * can be issued if the link is not up.
7719 		 */
7720 		switch (piocb->iocb.ulpCommand) {
7721 		case CMD_GEN_REQUEST64_CR:
7722 		case CMD_GEN_REQUEST64_CX:
7723 			if (!(phba->sli.sli_flag & LPFC_MENLO_MAINT) ||
7724 				(piocb->iocb.un.genreq64.w5.hcsw.Rctl !=
7725 					FC_RCTL_DD_UNSOL_CMD) ||
7726 				(piocb->iocb.un.genreq64.w5.hcsw.Type !=
7727 					MENLO_TRANSPORT_TYPE))
7728 
7729 				goto iocb_busy;
7730 			break;
7731 		case CMD_QUE_RING_BUF_CN:
7732 		case CMD_QUE_RING_BUF64_CN:
7733 			/*
7734 			 * For IOCBs, like QUE_RING_BUF, that have no rsp ring
7735 			 * completion, iocb_cmpl MUST be 0.
7736 			 */
7737 			if (piocb->iocb_cmpl)
7738 				piocb->iocb_cmpl = NULL;
7739 			/*FALLTHROUGH*/
7740 		case CMD_CREATE_XRI_CR:
7741 		case CMD_CLOSE_XRI_CN:
7742 		case CMD_CLOSE_XRI_CX:
7743 			break;
7744 		default:
7745 			goto iocb_busy;
7746 		}
7747 
7748 	/*
7749 	 * For FCP commands, we must be in a state where we can process link
7750 	 * attention events.
7751 	 */
7752 	} else if (unlikely(pring->ringno == phba->sli.fcp_ring &&
7753 			    !(phba->sli.sli_flag & LPFC_PROCESS_LA))) {
7754 		goto iocb_busy;
7755 	}
7756 
7757 	while ((iocb = lpfc_sli_next_iocb_slot(phba, pring)) &&
7758 	       (nextiocb = lpfc_sli_next_iocb(phba, pring, &piocb)))
7759 		lpfc_sli_submit_iocb(phba, pring, iocb, nextiocb);
7760 
7761 	if (iocb)
7762 		lpfc_sli_update_ring(phba, pring);
7763 	else
7764 		lpfc_sli_update_full_ring(phba, pring);
7765 
7766 	if (!piocb)
7767 		return IOCB_SUCCESS;
7768 
7769 	goto out_busy;
7770 
7771  iocb_busy:
7772 	pring->stats.iocb_cmd_delay++;
7773 
7774  out_busy:
7775 
7776 	if (!(flag & SLI_IOCB_RET_IOCB)) {
7777 		__lpfc_sli_ringtx_put(phba, pring, piocb);
7778 		return IOCB_SUCCESS;
7779 	}
7780 
7781 	return IOCB_BUSY;
7782 }
7783 
7784 /**
7785  * lpfc_sli4_bpl2sgl - Convert the bpl/bde to a sgl.
7786  * @phba: Pointer to HBA context object.
7787  * @piocb: Pointer to command iocb.
7788  * @sglq: Pointer to the scatter gather queue object.
7789  *
7790  * This routine converts the bpl or bde that is in the IOCB
7791  * to a sgl list for the sli4 hardware. The physical address
7792  * of the bpl/bde is converted back to a virtual address.
7793  * If the IOCB contains a BPL then the list of BDE's is
7794  * converted to sli4_sge's. If the IOCB contains a single
7795  * BDE then it is converted to a single sli_sge.
7796  * The IOCB is still in cpu endianess so the contents of
7797  * the bpl can be used without byte swapping.
7798  *
7799  * Returns valid XRI = Success, NO_XRI = Failure.
7800 **/
7801 static uint16_t
7802 lpfc_sli4_bpl2sgl(struct lpfc_hba *phba, struct lpfc_iocbq *piocbq,
7803 		struct lpfc_sglq *sglq)
7804 {
7805 	uint16_t xritag = NO_XRI;
7806 	struct ulp_bde64 *bpl = NULL;
7807 	struct ulp_bde64 bde;
7808 	struct sli4_sge *sgl  = NULL;
7809 	struct lpfc_dmabuf *dmabuf;
7810 	IOCB_t *icmd;
7811 	int numBdes = 0;
7812 	int i = 0;
7813 	uint32_t offset = 0; /* accumulated offset in the sg request list */
7814 	int inbound = 0; /* number of sg reply entries inbound from firmware */
7815 
7816 	if (!piocbq || !sglq)
7817 		return xritag;
7818 
7819 	sgl  = (struct sli4_sge *)sglq->sgl;
7820 	icmd = &piocbq->iocb;
7821 	if (icmd->ulpCommand == CMD_XMIT_BLS_RSP64_CX)
7822 		return sglq->sli4_xritag;
7823 	if (icmd->un.genreq64.bdl.bdeFlags == BUFF_TYPE_BLP_64) {
7824 		numBdes = icmd->un.genreq64.bdl.bdeSize /
7825 				sizeof(struct ulp_bde64);
7826 		/* The addrHigh and addrLow fields within the IOCB
7827 		 * have not been byteswapped yet so there is no
7828 		 * need to swap them back.
7829 		 */
7830 		if (piocbq->context3)
7831 			dmabuf = (struct lpfc_dmabuf *)piocbq->context3;
7832 		else
7833 			return xritag;
7834 
7835 		bpl  = (struct ulp_bde64 *)dmabuf->virt;
7836 		if (!bpl)
7837 			return xritag;
7838 
7839 		for (i = 0; i < numBdes; i++) {
7840 			/* Should already be byte swapped. */
7841 			sgl->addr_hi = bpl->addrHigh;
7842 			sgl->addr_lo = bpl->addrLow;
7843 
7844 			sgl->word2 = le32_to_cpu(sgl->word2);
7845 			if ((i+1) == numBdes)
7846 				bf_set(lpfc_sli4_sge_last, sgl, 1);
7847 			else
7848 				bf_set(lpfc_sli4_sge_last, sgl, 0);
7849 			/* swap the size field back to the cpu so we
7850 			 * can assign it to the sgl.
7851 			 */
7852 			bde.tus.w = le32_to_cpu(bpl->tus.w);
7853 			sgl->sge_len = cpu_to_le32(bde.tus.f.bdeSize);
7854 			/* The offsets in the sgl need to be accumulated
7855 			 * separately for the request and reply lists.
7856 			 * The request is always first, the reply follows.
7857 			 */
7858 			if (piocbq->iocb.ulpCommand == CMD_GEN_REQUEST64_CR) {
7859 				/* add up the reply sg entries */
7860 				if (bpl->tus.f.bdeFlags == BUFF_TYPE_BDE_64I)
7861 					inbound++;
7862 				/* first inbound? reset the offset */
7863 				if (inbound == 1)
7864 					offset = 0;
7865 				bf_set(lpfc_sli4_sge_offset, sgl, offset);
7866 				bf_set(lpfc_sli4_sge_type, sgl,
7867 					LPFC_SGE_TYPE_DATA);
7868 				offset += bde.tus.f.bdeSize;
7869 			}
7870 			sgl->word2 = cpu_to_le32(sgl->word2);
7871 			bpl++;
7872 			sgl++;
7873 		}
7874 	} else if (icmd->un.genreq64.bdl.bdeFlags == BUFF_TYPE_BDE_64) {
7875 			/* The addrHigh and addrLow fields of the BDE have not
7876 			 * been byteswapped yet so they need to be swapped
7877 			 * before putting them in the sgl.
7878 			 */
7879 			sgl->addr_hi =
7880 				cpu_to_le32(icmd->un.genreq64.bdl.addrHigh);
7881 			sgl->addr_lo =
7882 				cpu_to_le32(icmd->un.genreq64.bdl.addrLow);
7883 			sgl->word2 = le32_to_cpu(sgl->word2);
7884 			bf_set(lpfc_sli4_sge_last, sgl, 1);
7885 			sgl->word2 = cpu_to_le32(sgl->word2);
7886 			sgl->sge_len =
7887 				cpu_to_le32(icmd->un.genreq64.bdl.bdeSize);
7888 	}
7889 	return sglq->sli4_xritag;
7890 }
7891 
7892 /**
7893  * lpfc_sli4_scmd_to_wqidx_distr - scsi command to SLI4 WQ index distribution
7894  * @phba: Pointer to HBA context object.
7895  *
7896  * This routine performs a roundrobin SCSI command to SLI4 FCP WQ index
7897  * distribution.  This is called by __lpfc_sli_issue_iocb_s4() with the hbalock
7898  * held.
7899  *
7900  * Return: index into SLI4 fast-path FCP queue index.
7901  **/
7902 static inline uint32_t
7903 lpfc_sli4_scmd_to_wqidx_distr(struct lpfc_hba *phba)
7904 {
7905 	int i;
7906 
7907 	if (phba->cfg_fcp_io_sched == LPFC_FCP_SCHED_BY_CPU)
7908 		i = smp_processor_id();
7909 	else
7910 		i = atomic_add_return(1, &phba->fcp_qidx);
7911 
7912 	i = (i % phba->cfg_fcp_io_channel);
7913 	return i;
7914 }
7915 
7916 /**
7917  * lpfc_sli_iocb2wqe - Convert the IOCB to a work queue entry.
7918  * @phba: Pointer to HBA context object.
7919  * @piocb: Pointer to command iocb.
7920  * @wqe: Pointer to the work queue entry.
7921  *
7922  * This routine converts the iocb command to its Work Queue Entry
7923  * equivalent. The wqe pointer should not have any fields set when
7924  * this routine is called because it will memcpy over them.
7925  * This routine does not set the CQ_ID or the WQEC bits in the
7926  * wqe.
7927  *
7928  * Returns: 0 = Success, IOCB_ERROR = Failure.
7929  **/
7930 static int
7931 lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
7932 		union lpfc_wqe *wqe)
7933 {
7934 	uint32_t xmit_len = 0, total_len = 0;
7935 	uint8_t ct = 0;
7936 	uint32_t fip;
7937 	uint32_t abort_tag;
7938 	uint8_t command_type = ELS_COMMAND_NON_FIP;
7939 	uint8_t cmnd;
7940 	uint16_t xritag;
7941 	uint16_t abrt_iotag;
7942 	struct lpfc_iocbq *abrtiocbq;
7943 	struct ulp_bde64 *bpl = NULL;
7944 	uint32_t els_id = LPFC_ELS_ID_DEFAULT;
7945 	int numBdes, i;
7946 	struct ulp_bde64 bde;
7947 	struct lpfc_nodelist *ndlp;
7948 	uint32_t *pcmd;
7949 	uint32_t if_type;
7950 
7951 	fip = phba->hba_flag & HBA_FIP_SUPPORT;
7952 	/* The fcp commands will set command type */
7953 	if (iocbq->iocb_flag &  LPFC_IO_FCP)
7954 		command_type = FCP_COMMAND;
7955 	else if (fip && (iocbq->iocb_flag & LPFC_FIP_ELS_ID_MASK))
7956 		command_type = ELS_COMMAND_FIP;
7957 	else
7958 		command_type = ELS_COMMAND_NON_FIP;
7959 
7960 	/* Some of the fields are in the right position already */
7961 	memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe));
7962 	abort_tag = (uint32_t) iocbq->iotag;
7963 	xritag = iocbq->sli4_xritag;
7964 	wqe->generic.wqe_com.word7 = 0; /* The ct field has moved so reset */
7965 	/* words0-2 bpl convert bde */
7966 	if (iocbq->iocb.un.genreq64.bdl.bdeFlags == BUFF_TYPE_BLP_64) {
7967 		numBdes = iocbq->iocb.un.genreq64.bdl.bdeSize /
7968 				sizeof(struct ulp_bde64);
7969 		bpl  = (struct ulp_bde64 *)
7970 			((struct lpfc_dmabuf *)iocbq->context3)->virt;
7971 		if (!bpl)
7972 			return IOCB_ERROR;
7973 
7974 		/* Should already be byte swapped. */
7975 		wqe->generic.bde.addrHigh =  le32_to_cpu(bpl->addrHigh);
7976 		wqe->generic.bde.addrLow =  le32_to_cpu(bpl->addrLow);
7977 		/* swap the size field back to the cpu so we
7978 		 * can assign it to the sgl.
7979 		 */
7980 		wqe->generic.bde.tus.w  = le32_to_cpu(bpl->tus.w);
7981 		xmit_len = wqe->generic.bde.tus.f.bdeSize;
7982 		total_len = 0;
7983 		for (i = 0; i < numBdes; i++) {
7984 			bde.tus.w  = le32_to_cpu(bpl[i].tus.w);
7985 			total_len += bde.tus.f.bdeSize;
7986 		}
7987 	} else
7988 		xmit_len = iocbq->iocb.un.fcpi64.bdl.bdeSize;
7989 
7990 	iocbq->iocb.ulpIoTag = iocbq->iotag;
7991 	cmnd = iocbq->iocb.ulpCommand;
7992 
7993 	switch (iocbq->iocb.ulpCommand) {
7994 	case CMD_ELS_REQUEST64_CR:
7995 		if (iocbq->iocb_flag & LPFC_IO_LIBDFC)
7996 			ndlp = iocbq->context_un.ndlp;
7997 		else
7998 			ndlp = (struct lpfc_nodelist *)iocbq->context1;
7999 		if (!iocbq->iocb.ulpLe) {
8000 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
8001 				"2007 Only Limited Edition cmd Format"
8002 				" supported 0x%x\n",
8003 				iocbq->iocb.ulpCommand);
8004 			return IOCB_ERROR;
8005 		}
8006 
8007 		wqe->els_req.payload_len = xmit_len;
8008 		/* Els_reguest64 has a TMO */
8009 		bf_set(wqe_tmo, &wqe->els_req.wqe_com,
8010 			iocbq->iocb.ulpTimeout);
8011 		/* Need a VF for word 4 set the vf bit*/
8012 		bf_set(els_req64_vf, &wqe->els_req, 0);
8013 		/* And a VFID for word 12 */
8014 		bf_set(els_req64_vfid, &wqe->els_req, 0);
8015 		ct = ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l);
8016 		bf_set(wqe_ctxt_tag, &wqe->els_req.wqe_com,
8017 		       iocbq->iocb.ulpContext);
8018 		bf_set(wqe_ct, &wqe->els_req.wqe_com, ct);
8019 		bf_set(wqe_pu, &wqe->els_req.wqe_com, 0);
8020 		/* CCP CCPE PV PRI in word10 were set in the memcpy */
8021 		if (command_type == ELS_COMMAND_FIP)
8022 			els_id = ((iocbq->iocb_flag & LPFC_FIP_ELS_ID_MASK)
8023 					>> LPFC_FIP_ELS_ID_SHIFT);
8024 		pcmd = (uint32_t *) (((struct lpfc_dmabuf *)
8025 					iocbq->context2)->virt);
8026 		if_type = bf_get(lpfc_sli_intf_if_type,
8027 					&phba->sli4_hba.sli_intf);
8028 		if (if_type == LPFC_SLI_INTF_IF_TYPE_2) {
8029 			if (pcmd && (*pcmd == ELS_CMD_FLOGI ||
8030 				*pcmd == ELS_CMD_SCR ||
8031 				*pcmd == ELS_CMD_FDISC ||
8032 				*pcmd == ELS_CMD_LOGO ||
8033 				*pcmd == ELS_CMD_PLOGI)) {
8034 				bf_set(els_req64_sp, &wqe->els_req, 1);
8035 				bf_set(els_req64_sid, &wqe->els_req,
8036 					iocbq->vport->fc_myDID);
8037 				if ((*pcmd == ELS_CMD_FLOGI) &&
8038 					!(phba->fc_topology ==
8039 						LPFC_TOPOLOGY_LOOP))
8040 					bf_set(els_req64_sid, &wqe->els_req, 0);
8041 				bf_set(wqe_ct, &wqe->els_req.wqe_com, 1);
8042 				bf_set(wqe_ctxt_tag, &wqe->els_req.wqe_com,
8043 					phba->vpi_ids[iocbq->vport->vpi]);
8044 			} else if (pcmd && iocbq->context1) {
8045 				bf_set(wqe_ct, &wqe->els_req.wqe_com, 0);
8046 				bf_set(wqe_ctxt_tag, &wqe->els_req.wqe_com,
8047 					phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]);
8048 			}
8049 		}
8050 		bf_set(wqe_temp_rpi, &wqe->els_req.wqe_com,
8051 		       phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]);
8052 		bf_set(wqe_els_id, &wqe->els_req.wqe_com, els_id);
8053 		bf_set(wqe_dbde, &wqe->els_req.wqe_com, 1);
8054 		bf_set(wqe_iod, &wqe->els_req.wqe_com, LPFC_WQE_IOD_READ);
8055 		bf_set(wqe_qosd, &wqe->els_req.wqe_com, 1);
8056 		bf_set(wqe_lenloc, &wqe->els_req.wqe_com, LPFC_WQE_LENLOC_NONE);
8057 		bf_set(wqe_ebde_cnt, &wqe->els_req.wqe_com, 0);
8058 		break;
8059 	case CMD_XMIT_SEQUENCE64_CX:
8060 		bf_set(wqe_ctxt_tag, &wqe->xmit_sequence.wqe_com,
8061 		       iocbq->iocb.un.ulpWord[3]);
8062 		bf_set(wqe_rcvoxid, &wqe->xmit_sequence.wqe_com,
8063 		       iocbq->iocb.unsli3.rcvsli3.ox_id);
8064 		/* The entire sequence is transmitted for this IOCB */
8065 		xmit_len = total_len;
8066 		cmnd = CMD_XMIT_SEQUENCE64_CR;
8067 		if (phba->link_flag & LS_LOOPBACK_MODE)
8068 			bf_set(wqe_xo, &wqe->xmit_sequence.wge_ctl, 1);
8069 	case CMD_XMIT_SEQUENCE64_CR:
8070 		/* word3 iocb=io_tag32 wqe=reserved */
8071 		wqe->xmit_sequence.rsvd3 = 0;
8072 		/* word4 relative_offset memcpy */
8073 		/* word5 r_ctl/df_ctl memcpy */
8074 		bf_set(wqe_pu, &wqe->xmit_sequence.wqe_com, 0);
8075 		bf_set(wqe_dbde, &wqe->xmit_sequence.wqe_com, 1);
8076 		bf_set(wqe_iod, &wqe->xmit_sequence.wqe_com,
8077 		       LPFC_WQE_IOD_WRITE);
8078 		bf_set(wqe_lenloc, &wqe->xmit_sequence.wqe_com,
8079 		       LPFC_WQE_LENLOC_WORD12);
8080 		bf_set(wqe_ebde_cnt, &wqe->xmit_sequence.wqe_com, 0);
8081 		wqe->xmit_sequence.xmit_len = xmit_len;
8082 		command_type = OTHER_COMMAND;
8083 		break;
8084 	case CMD_XMIT_BCAST64_CN:
8085 		/* word3 iocb=iotag32 wqe=seq_payload_len */
8086 		wqe->xmit_bcast64.seq_payload_len = xmit_len;
8087 		/* word4 iocb=rsvd wqe=rsvd */
8088 		/* word5 iocb=rctl/type/df_ctl wqe=rctl/type/df_ctl memcpy */
8089 		/* word6 iocb=ctxt_tag/io_tag wqe=ctxt_tag/xri */
8090 		bf_set(wqe_ct, &wqe->xmit_bcast64.wqe_com,
8091 			((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l));
8092 		bf_set(wqe_dbde, &wqe->xmit_bcast64.wqe_com, 1);
8093 		bf_set(wqe_iod, &wqe->xmit_bcast64.wqe_com, LPFC_WQE_IOD_WRITE);
8094 		bf_set(wqe_lenloc, &wqe->xmit_bcast64.wqe_com,
8095 		       LPFC_WQE_LENLOC_WORD3);
8096 		bf_set(wqe_ebde_cnt, &wqe->xmit_bcast64.wqe_com, 0);
8097 		break;
8098 	case CMD_FCP_IWRITE64_CR:
8099 		command_type = FCP_COMMAND_DATA_OUT;
8100 		/* word3 iocb=iotag wqe=payload_offset_len */
8101 		/* Add the FCP_CMD and FCP_RSP sizes to get the offset */
8102 		wqe->fcp_iwrite.payload_offset_len =
8103 			xmit_len + sizeof(struct fcp_rsp);
8104 		/* word4 iocb=parameter wqe=total_xfer_length memcpy */
8105 		/* word5 iocb=initial_xfer_len wqe=initial_xfer_len memcpy */
8106 		bf_set(wqe_erp, &wqe->fcp_iwrite.wqe_com,
8107 		       iocbq->iocb.ulpFCP2Rcvy);
8108 		bf_set(wqe_lnk, &wqe->fcp_iwrite.wqe_com, iocbq->iocb.ulpXS);
8109 		/* Always open the exchange */
8110 		bf_set(wqe_xc, &wqe->fcp_iwrite.wqe_com, 0);
8111 		bf_set(wqe_iod, &wqe->fcp_iwrite.wqe_com, LPFC_WQE_IOD_WRITE);
8112 		bf_set(wqe_lenloc, &wqe->fcp_iwrite.wqe_com,
8113 		       LPFC_WQE_LENLOC_WORD4);
8114 		bf_set(wqe_ebde_cnt, &wqe->fcp_iwrite.wqe_com, 0);
8115 		bf_set(wqe_pu, &wqe->fcp_iwrite.wqe_com, iocbq->iocb.ulpPU);
8116 		bf_set(wqe_dbde, &wqe->fcp_iwrite.wqe_com, 1);
8117 		break;
8118 	case CMD_FCP_IREAD64_CR:
8119 		/* word3 iocb=iotag wqe=payload_offset_len */
8120 		/* Add the FCP_CMD and FCP_RSP sizes to get the offset */
8121 		wqe->fcp_iread.payload_offset_len =
8122 			xmit_len + sizeof(struct fcp_rsp);
8123 		/* word4 iocb=parameter wqe=total_xfer_length memcpy */
8124 		/* word5 iocb=initial_xfer_len wqe=initial_xfer_len memcpy */
8125 		bf_set(wqe_erp, &wqe->fcp_iread.wqe_com,
8126 		       iocbq->iocb.ulpFCP2Rcvy);
8127 		bf_set(wqe_lnk, &wqe->fcp_iread.wqe_com, iocbq->iocb.ulpXS);
8128 		/* Always open the exchange */
8129 		bf_set(wqe_xc, &wqe->fcp_iread.wqe_com, 0);
8130 		bf_set(wqe_iod, &wqe->fcp_iread.wqe_com, LPFC_WQE_IOD_READ);
8131 		bf_set(wqe_lenloc, &wqe->fcp_iread.wqe_com,
8132 		       LPFC_WQE_LENLOC_WORD4);
8133 		bf_set(wqe_ebde_cnt, &wqe->fcp_iread.wqe_com, 0);
8134 		bf_set(wqe_pu, &wqe->fcp_iread.wqe_com, iocbq->iocb.ulpPU);
8135 		bf_set(wqe_dbde, &wqe->fcp_iread.wqe_com, 1);
8136 		break;
8137 	case CMD_FCP_ICMND64_CR:
8138 		/* word3 iocb=IO_TAG wqe=reserved */
8139 		wqe->fcp_icmd.rsrvd3 = 0;
8140 		bf_set(wqe_pu, &wqe->fcp_icmd.wqe_com, 0);
8141 		/* Always open the exchange */
8142 		bf_set(wqe_xc, &wqe->fcp_icmd.wqe_com, 0);
8143 		bf_set(wqe_dbde, &wqe->fcp_icmd.wqe_com, 1);
8144 		bf_set(wqe_iod, &wqe->fcp_icmd.wqe_com, LPFC_WQE_IOD_WRITE);
8145 		bf_set(wqe_qosd, &wqe->fcp_icmd.wqe_com, 1);
8146 		bf_set(wqe_lenloc, &wqe->fcp_icmd.wqe_com,
8147 		       LPFC_WQE_LENLOC_NONE);
8148 		bf_set(wqe_ebde_cnt, &wqe->fcp_icmd.wqe_com, 0);
8149 		bf_set(wqe_erp, &wqe->fcp_icmd.wqe_com,
8150 		       iocbq->iocb.ulpFCP2Rcvy);
8151 		break;
8152 	case CMD_GEN_REQUEST64_CR:
8153 		/* For this command calculate the xmit length of the
8154 		 * request bde.
8155 		 */
8156 		xmit_len = 0;
8157 		numBdes = iocbq->iocb.un.genreq64.bdl.bdeSize /
8158 			sizeof(struct ulp_bde64);
8159 		for (i = 0; i < numBdes; i++) {
8160 			bde.tus.w = le32_to_cpu(bpl[i].tus.w);
8161 			if (bde.tus.f.bdeFlags != BUFF_TYPE_BDE_64)
8162 				break;
8163 			xmit_len += bde.tus.f.bdeSize;
8164 		}
8165 		/* word3 iocb=IO_TAG wqe=request_payload_len */
8166 		wqe->gen_req.request_payload_len = xmit_len;
8167 		/* word4 iocb=parameter wqe=relative_offset memcpy */
8168 		/* word5 [rctl, type, df_ctl, la] copied in memcpy */
8169 		/* word6 context tag copied in memcpy */
8170 		if (iocbq->iocb.ulpCt_h  || iocbq->iocb.ulpCt_l) {
8171 			ct = ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l);
8172 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
8173 				"2015 Invalid CT %x command 0x%x\n",
8174 				ct, iocbq->iocb.ulpCommand);
8175 			return IOCB_ERROR;
8176 		}
8177 		bf_set(wqe_ct, &wqe->gen_req.wqe_com, 0);
8178 		bf_set(wqe_tmo, &wqe->gen_req.wqe_com, iocbq->iocb.ulpTimeout);
8179 		bf_set(wqe_pu, &wqe->gen_req.wqe_com, iocbq->iocb.ulpPU);
8180 		bf_set(wqe_dbde, &wqe->gen_req.wqe_com, 1);
8181 		bf_set(wqe_iod, &wqe->gen_req.wqe_com, LPFC_WQE_IOD_READ);
8182 		bf_set(wqe_qosd, &wqe->gen_req.wqe_com, 1);
8183 		bf_set(wqe_lenloc, &wqe->gen_req.wqe_com, LPFC_WQE_LENLOC_NONE);
8184 		bf_set(wqe_ebde_cnt, &wqe->gen_req.wqe_com, 0);
8185 		command_type = OTHER_COMMAND;
8186 		break;
8187 	case CMD_XMIT_ELS_RSP64_CX:
8188 		ndlp = (struct lpfc_nodelist *)iocbq->context1;
8189 		/* words0-2 BDE memcpy */
8190 		/* word3 iocb=iotag32 wqe=response_payload_len */
8191 		wqe->xmit_els_rsp.response_payload_len = xmit_len;
8192 		/* word4 */
8193 		wqe->xmit_els_rsp.word4 = 0;
8194 		/* word5 iocb=rsvd wge=did */
8195 		bf_set(wqe_els_did, &wqe->xmit_els_rsp.wqe_dest,
8196 			 iocbq->iocb.un.xseq64.xmit_els_remoteID);
8197 
8198 		if_type = bf_get(lpfc_sli_intf_if_type,
8199 					&phba->sli4_hba.sli_intf);
8200 		if (if_type == LPFC_SLI_INTF_IF_TYPE_2) {
8201 			if (iocbq->vport->fc_flag & FC_PT2PT) {
8202 				bf_set(els_rsp64_sp, &wqe->xmit_els_rsp, 1);
8203 				bf_set(els_rsp64_sid, &wqe->xmit_els_rsp,
8204 					iocbq->vport->fc_myDID);
8205 				if (iocbq->vport->fc_myDID == Fabric_DID) {
8206 					bf_set(wqe_els_did,
8207 						&wqe->xmit_els_rsp.wqe_dest, 0);
8208 				}
8209 			}
8210 		}
8211 		bf_set(wqe_ct, &wqe->xmit_els_rsp.wqe_com,
8212 		       ((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l));
8213 		bf_set(wqe_pu, &wqe->xmit_els_rsp.wqe_com, iocbq->iocb.ulpPU);
8214 		bf_set(wqe_rcvoxid, &wqe->xmit_els_rsp.wqe_com,
8215 		       iocbq->iocb.unsli3.rcvsli3.ox_id);
8216 		if (!iocbq->iocb.ulpCt_h && iocbq->iocb.ulpCt_l)
8217 			bf_set(wqe_ctxt_tag, &wqe->xmit_els_rsp.wqe_com,
8218 			       phba->vpi_ids[iocbq->vport->vpi]);
8219 		bf_set(wqe_dbde, &wqe->xmit_els_rsp.wqe_com, 1);
8220 		bf_set(wqe_iod, &wqe->xmit_els_rsp.wqe_com, LPFC_WQE_IOD_WRITE);
8221 		bf_set(wqe_qosd, &wqe->xmit_els_rsp.wqe_com, 1);
8222 		bf_set(wqe_lenloc, &wqe->xmit_els_rsp.wqe_com,
8223 		       LPFC_WQE_LENLOC_WORD3);
8224 		bf_set(wqe_ebde_cnt, &wqe->xmit_els_rsp.wqe_com, 0);
8225 		bf_set(wqe_rsp_temp_rpi, &wqe->xmit_els_rsp,
8226 		       phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]);
8227 		pcmd = (uint32_t *) (((struct lpfc_dmabuf *)
8228 					iocbq->context2)->virt);
8229 		if (phba->fc_topology == LPFC_TOPOLOGY_LOOP) {
8230 				bf_set(els_rsp64_sp, &wqe->xmit_els_rsp, 1);
8231 				bf_set(els_rsp64_sid, &wqe->xmit_els_rsp,
8232 					iocbq->vport->fc_myDID);
8233 				bf_set(wqe_ct, &wqe->xmit_els_rsp.wqe_com, 1);
8234 				bf_set(wqe_ctxt_tag, &wqe->xmit_els_rsp.wqe_com,
8235 					phba->vpi_ids[phba->pport->vpi]);
8236 		}
8237 		command_type = OTHER_COMMAND;
8238 		break;
8239 	case CMD_CLOSE_XRI_CN:
8240 	case CMD_ABORT_XRI_CN:
8241 	case CMD_ABORT_XRI_CX:
8242 		/* words 0-2 memcpy should be 0 rserved */
8243 		/* port will send abts */
8244 		abrt_iotag = iocbq->iocb.un.acxri.abortContextTag;
8245 		if (abrt_iotag != 0 && abrt_iotag <= phba->sli.last_iotag) {
8246 			abrtiocbq = phba->sli.iocbq_lookup[abrt_iotag];
8247 			fip = abrtiocbq->iocb_flag & LPFC_FIP_ELS_ID_MASK;
8248 		} else
8249 			fip = 0;
8250 
8251 		if ((iocbq->iocb.ulpCommand == CMD_CLOSE_XRI_CN) || fip)
8252 			/*
8253 			 * The link is down, or the command was ELS_FIP
8254 			 * so the fw does not need to send abts
8255 			 * on the wire.
8256 			 */
8257 			bf_set(abort_cmd_ia, &wqe->abort_cmd, 1);
8258 		else
8259 			bf_set(abort_cmd_ia, &wqe->abort_cmd, 0);
8260 		bf_set(abort_cmd_criteria, &wqe->abort_cmd, T_XRI_TAG);
8261 		/* word5 iocb=CONTEXT_TAG|IO_TAG wqe=reserved */
8262 		wqe->abort_cmd.rsrvd5 = 0;
8263 		bf_set(wqe_ct, &wqe->abort_cmd.wqe_com,
8264 			((iocbq->iocb.ulpCt_h << 1) | iocbq->iocb.ulpCt_l));
8265 		abort_tag = iocbq->iocb.un.acxri.abortIoTag;
8266 		/*
8267 		 * The abort handler will send us CMD_ABORT_XRI_CN or
8268 		 * CMD_CLOSE_XRI_CN and the fw only accepts CMD_ABORT_XRI_CX
8269 		 */
8270 		bf_set(wqe_cmnd, &wqe->abort_cmd.wqe_com, CMD_ABORT_XRI_CX);
8271 		bf_set(wqe_qosd, &wqe->abort_cmd.wqe_com, 1);
8272 		bf_set(wqe_lenloc, &wqe->abort_cmd.wqe_com,
8273 		       LPFC_WQE_LENLOC_NONE);
8274 		cmnd = CMD_ABORT_XRI_CX;
8275 		command_type = OTHER_COMMAND;
8276 		xritag = 0;
8277 		break;
8278 	case CMD_XMIT_BLS_RSP64_CX:
8279 		ndlp = (struct lpfc_nodelist *)iocbq->context1;
8280 		/* As BLS ABTS RSP WQE is very different from other WQEs,
8281 		 * we re-construct this WQE here based on information in
8282 		 * iocbq from scratch.
8283 		 */
8284 		memset(wqe, 0, sizeof(union lpfc_wqe));
8285 		/* OX_ID is invariable to who sent ABTS to CT exchange */
8286 		bf_set(xmit_bls_rsp64_oxid, &wqe->xmit_bls_rsp,
8287 		       bf_get(lpfc_abts_oxid, &iocbq->iocb.un.bls_rsp));
8288 		if (bf_get(lpfc_abts_orig, &iocbq->iocb.un.bls_rsp) ==
8289 		    LPFC_ABTS_UNSOL_INT) {
8290 			/* ABTS sent by initiator to CT exchange, the
8291 			 * RX_ID field will be filled with the newly
8292 			 * allocated responder XRI.
8293 			 */
8294 			bf_set(xmit_bls_rsp64_rxid, &wqe->xmit_bls_rsp,
8295 			       iocbq->sli4_xritag);
8296 		} else {
8297 			/* ABTS sent by responder to CT exchange, the
8298 			 * RX_ID field will be filled with the responder
8299 			 * RX_ID from ABTS.
8300 			 */
8301 			bf_set(xmit_bls_rsp64_rxid, &wqe->xmit_bls_rsp,
8302 			       bf_get(lpfc_abts_rxid, &iocbq->iocb.un.bls_rsp));
8303 		}
8304 		bf_set(xmit_bls_rsp64_seqcnthi, &wqe->xmit_bls_rsp, 0xffff);
8305 		bf_set(wqe_xmit_bls_pt, &wqe->xmit_bls_rsp.wqe_dest, 0x1);
8306 
8307 		/* Use CT=VPI */
8308 		bf_set(wqe_els_did, &wqe->xmit_bls_rsp.wqe_dest,
8309 			ndlp->nlp_DID);
8310 		bf_set(xmit_bls_rsp64_temprpi, &wqe->xmit_bls_rsp,
8311 			iocbq->iocb.ulpContext);
8312 		bf_set(wqe_ct, &wqe->xmit_bls_rsp.wqe_com, 1);
8313 		bf_set(wqe_ctxt_tag, &wqe->xmit_bls_rsp.wqe_com,
8314 			phba->vpi_ids[phba->pport->vpi]);
8315 		bf_set(wqe_qosd, &wqe->xmit_bls_rsp.wqe_com, 1);
8316 		bf_set(wqe_lenloc, &wqe->xmit_bls_rsp.wqe_com,
8317 		       LPFC_WQE_LENLOC_NONE);
8318 		/* Overwrite the pre-set comnd type with OTHER_COMMAND */
8319 		command_type = OTHER_COMMAND;
8320 		if (iocbq->iocb.un.xseq64.w5.hcsw.Rctl == FC_RCTL_BA_RJT) {
8321 			bf_set(xmit_bls_rsp64_rjt_vspec, &wqe->xmit_bls_rsp,
8322 			       bf_get(lpfc_vndr_code, &iocbq->iocb.un.bls_rsp));
8323 			bf_set(xmit_bls_rsp64_rjt_expc, &wqe->xmit_bls_rsp,
8324 			       bf_get(lpfc_rsn_expln, &iocbq->iocb.un.bls_rsp));
8325 			bf_set(xmit_bls_rsp64_rjt_rsnc, &wqe->xmit_bls_rsp,
8326 			       bf_get(lpfc_rsn_code, &iocbq->iocb.un.bls_rsp));
8327 		}
8328 
8329 		break;
8330 	case CMD_XRI_ABORTED_CX:
8331 	case CMD_CREATE_XRI_CR: /* Do we expect to use this? */
8332 	case CMD_IOCB_FCP_IBIDIR64_CR: /* bidirectional xfer */
8333 	case CMD_FCP_TSEND64_CX: /* Target mode send xfer-ready */
8334 	case CMD_FCP_TRSP64_CX: /* Target mode rcv */
8335 	case CMD_FCP_AUTO_TRSP_CX: /* Auto target rsp */
8336 	default:
8337 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
8338 				"2014 Invalid command 0x%x\n",
8339 				iocbq->iocb.ulpCommand);
8340 		return IOCB_ERROR;
8341 		break;
8342 	}
8343 
8344 	if (iocbq->iocb_flag & LPFC_IO_DIF_PASS)
8345 		bf_set(wqe_dif, &wqe->generic.wqe_com, LPFC_WQE_DIF_PASSTHRU);
8346 	else if (iocbq->iocb_flag & LPFC_IO_DIF_STRIP)
8347 		bf_set(wqe_dif, &wqe->generic.wqe_com, LPFC_WQE_DIF_STRIP);
8348 	else if (iocbq->iocb_flag & LPFC_IO_DIF_INSERT)
8349 		bf_set(wqe_dif, &wqe->generic.wqe_com, LPFC_WQE_DIF_INSERT);
8350 	iocbq->iocb_flag &= ~(LPFC_IO_DIF_PASS | LPFC_IO_DIF_STRIP |
8351 			      LPFC_IO_DIF_INSERT);
8352 	bf_set(wqe_xri_tag, &wqe->generic.wqe_com, xritag);
8353 	bf_set(wqe_reqtag, &wqe->generic.wqe_com, iocbq->iotag);
8354 	wqe->generic.wqe_com.abort_tag = abort_tag;
8355 	bf_set(wqe_cmd_type, &wqe->generic.wqe_com, command_type);
8356 	bf_set(wqe_cmnd, &wqe->generic.wqe_com, cmnd);
8357 	bf_set(wqe_class, &wqe->generic.wqe_com, iocbq->iocb.ulpClass);
8358 	bf_set(wqe_cqid, &wqe->generic.wqe_com, LPFC_WQE_CQ_ID_DEFAULT);
8359 	return 0;
8360 }
8361 
8362 /**
8363  * __lpfc_sli_issue_iocb_s4 - SLI4 device lockless ver of lpfc_sli_issue_iocb
8364  * @phba: Pointer to HBA context object.
8365  * @ring_number: SLI ring number to issue iocb on.
8366  * @piocb: Pointer to command iocb.
8367  * @flag: Flag indicating if this command can be put into txq.
8368  *
8369  * __lpfc_sli_issue_iocb_s4 is used by other functions in the driver to issue
8370  * an iocb command to an HBA with SLI-4 interface spec.
8371  *
8372  * This function is called with hbalock held. The function will return success
8373  * after it successfully submit the iocb to firmware or after adding to the
8374  * txq.
8375  **/
8376 static int
8377 __lpfc_sli_issue_iocb_s4(struct lpfc_hba *phba, uint32_t ring_number,
8378 			 struct lpfc_iocbq *piocb, uint32_t flag)
8379 {
8380 	struct lpfc_sglq *sglq;
8381 	union lpfc_wqe wqe;
8382 	struct lpfc_sli_ring *pring = &phba->sli.ring[ring_number];
8383 
8384 	if (piocb->sli4_xritag == NO_XRI) {
8385 		if (piocb->iocb.ulpCommand == CMD_ABORT_XRI_CN ||
8386 		    piocb->iocb.ulpCommand == CMD_CLOSE_XRI_CN)
8387 			sglq = NULL;
8388 		else {
8389 			if (pring->txq_cnt) {
8390 				if (!(flag & SLI_IOCB_RET_IOCB)) {
8391 					__lpfc_sli_ringtx_put(phba,
8392 						pring, piocb);
8393 					return IOCB_SUCCESS;
8394 				} else {
8395 					return IOCB_BUSY;
8396 				}
8397 			} else {
8398 				sglq = __lpfc_sli_get_sglq(phba, piocb);
8399 				if (!sglq) {
8400 					if (!(flag & SLI_IOCB_RET_IOCB)) {
8401 						__lpfc_sli_ringtx_put(phba,
8402 								pring,
8403 								piocb);
8404 						return IOCB_SUCCESS;
8405 					} else
8406 						return IOCB_BUSY;
8407 				}
8408 			}
8409 		}
8410 	} else if (piocb->iocb_flag &  LPFC_IO_FCP) {
8411 		/* These IO's already have an XRI and a mapped sgl. */
8412 		sglq = NULL;
8413 	} else {
8414 		/*
8415 		 * This is a continuation of a commandi,(CX) so this
8416 		 * sglq is on the active list
8417 		 */
8418 		sglq = __lpfc_get_active_sglq(phba, piocb->sli4_lxritag);
8419 		if (!sglq)
8420 			return IOCB_ERROR;
8421 	}
8422 
8423 	if (sglq) {
8424 		piocb->sli4_lxritag = sglq->sli4_lxritag;
8425 		piocb->sli4_xritag = sglq->sli4_xritag;
8426 		if (NO_XRI == lpfc_sli4_bpl2sgl(phba, piocb, sglq))
8427 			return IOCB_ERROR;
8428 	}
8429 
8430 	if (lpfc_sli4_iocb2wqe(phba, piocb, &wqe))
8431 		return IOCB_ERROR;
8432 
8433 	if ((piocb->iocb_flag & LPFC_IO_FCP) ||
8434 		(piocb->iocb_flag & LPFC_USE_FCPWQIDX)) {
8435 		if (lpfc_sli4_wq_put(phba->sli4_hba.fcp_wq[piocb->fcp_wqidx],
8436 				     &wqe))
8437 			return IOCB_ERROR;
8438 	} else {
8439 		if (lpfc_sli4_wq_put(phba->sli4_hba.els_wq, &wqe))
8440 			return IOCB_ERROR;
8441 	}
8442 	lpfc_sli_ringtxcmpl_put(phba, pring, piocb);
8443 
8444 	return 0;
8445 }
8446 
8447 /**
8448  * __lpfc_sli_issue_iocb - Wrapper func of lockless version for issuing iocb
8449  *
8450  * This routine wraps the actual lockless version for issusing IOCB function
8451  * pointer from the lpfc_hba struct.
8452  *
8453  * Return codes:
8454  * 	IOCB_ERROR - Error
8455  * 	IOCB_SUCCESS - Success
8456  * 	IOCB_BUSY - Busy
8457  **/
8458 int
8459 __lpfc_sli_issue_iocb(struct lpfc_hba *phba, uint32_t ring_number,
8460 		struct lpfc_iocbq *piocb, uint32_t flag)
8461 {
8462 	return phba->__lpfc_sli_issue_iocb(phba, ring_number, piocb, flag);
8463 }
8464 
8465 /**
8466  * lpfc_sli_api_table_setup - Set up sli api function jump table
8467  * @phba: The hba struct for which this call is being executed.
8468  * @dev_grp: The HBA PCI-Device group number.
8469  *
8470  * This routine sets up the SLI interface API function jump table in @phba
8471  * struct.
8472  * Returns: 0 - success, -ENODEV - failure.
8473  **/
8474 int
8475 lpfc_sli_api_table_setup(struct lpfc_hba *phba, uint8_t dev_grp)
8476 {
8477 
8478 	switch (dev_grp) {
8479 	case LPFC_PCI_DEV_LP:
8480 		phba->__lpfc_sli_issue_iocb = __lpfc_sli_issue_iocb_s3;
8481 		phba->__lpfc_sli_release_iocbq = __lpfc_sli_release_iocbq_s3;
8482 		break;
8483 	case LPFC_PCI_DEV_OC:
8484 		phba->__lpfc_sli_issue_iocb = __lpfc_sli_issue_iocb_s4;
8485 		phba->__lpfc_sli_release_iocbq = __lpfc_sli_release_iocbq_s4;
8486 		break;
8487 	default:
8488 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
8489 				"1419 Invalid HBA PCI-device group: 0x%x\n",
8490 				dev_grp);
8491 		return -ENODEV;
8492 		break;
8493 	}
8494 	phba->lpfc_get_iocb_from_iocbq = lpfc_get_iocb_from_iocbq;
8495 	return 0;
8496 }
8497 
8498 /**
8499  * lpfc_sli_issue_iocb - Wrapper function for __lpfc_sli_issue_iocb
8500  * @phba: Pointer to HBA context object.
8501  * @pring: Pointer to driver SLI ring object.
8502  * @piocb: Pointer to command iocb.
8503  * @flag: Flag indicating if this command can be put into txq.
8504  *
8505  * lpfc_sli_issue_iocb is a wrapper around __lpfc_sli_issue_iocb
8506  * function. This function gets the hbalock and calls
8507  * __lpfc_sli_issue_iocb function and will return the error returned
8508  * by __lpfc_sli_issue_iocb function. This wrapper is used by
8509  * functions which do not hold hbalock.
8510  **/
8511 int
8512 lpfc_sli_issue_iocb(struct lpfc_hba *phba, uint32_t ring_number,
8513 		    struct lpfc_iocbq *piocb, uint32_t flag)
8514 {
8515 	struct lpfc_fcp_eq_hdl *fcp_eq_hdl;
8516 	struct lpfc_sli_ring *pring;
8517 	struct lpfc_queue *fpeq;
8518 	struct lpfc_eqe *eqe;
8519 	unsigned long iflags;
8520 	int rc, idx;
8521 
8522 	if (phba->sli_rev == LPFC_SLI_REV4) {
8523 		if (piocb->iocb_flag &  LPFC_IO_FCP) {
8524 			if (unlikely(!phba->sli4_hba.fcp_wq))
8525 				return IOCB_ERROR;
8526 			idx = lpfc_sli4_scmd_to_wqidx_distr(phba);
8527 			piocb->fcp_wqidx = idx;
8528 			ring_number = MAX_SLI3_CONFIGURED_RINGS + idx;
8529 
8530 			pring = &phba->sli.ring[ring_number];
8531 			spin_lock_irqsave(&pring->ring_lock, iflags);
8532 			rc = __lpfc_sli_issue_iocb(phba, ring_number, piocb,
8533 				flag);
8534 			spin_unlock_irqrestore(&pring->ring_lock, iflags);
8535 
8536 			if (lpfc_fcp_look_ahead) {
8537 				fcp_eq_hdl = &phba->sli4_hba.fcp_eq_hdl[idx];
8538 
8539 				if (atomic_dec_and_test(&fcp_eq_hdl->
8540 					fcp_eq_in_use)) {
8541 
8542 					/* Get associated EQ with this index */
8543 					fpeq = phba->sli4_hba.hba_eq[idx];
8544 
8545 					/* Turn off interrupts from this EQ */
8546 					lpfc_sli4_eq_clr_intr(fpeq);
8547 
8548 					/*
8549 					 * Process all the events on FCP EQ
8550 					 */
8551 					while ((eqe = lpfc_sli4_eq_get(fpeq))) {
8552 						lpfc_sli4_hba_handle_eqe(phba,
8553 							eqe, idx);
8554 						fpeq->EQ_processed++;
8555 					}
8556 
8557 					/* Always clear and re-arm the EQ */
8558 					lpfc_sli4_eq_release(fpeq,
8559 						LPFC_QUEUE_REARM);
8560 				}
8561 				atomic_inc(&fcp_eq_hdl->fcp_eq_in_use);
8562 			}
8563 		} else {
8564 			pring = &phba->sli.ring[ring_number];
8565 			spin_lock_irqsave(&pring->ring_lock, iflags);
8566 			rc = __lpfc_sli_issue_iocb(phba, ring_number, piocb,
8567 				flag);
8568 			spin_unlock_irqrestore(&pring->ring_lock, iflags);
8569 
8570 		}
8571 	} else {
8572 		/* For now, SLI2/3 will still use hbalock */
8573 		spin_lock_irqsave(&phba->hbalock, iflags);
8574 		rc = __lpfc_sli_issue_iocb(phba, ring_number, piocb, flag);
8575 		spin_unlock_irqrestore(&phba->hbalock, iflags);
8576 	}
8577 	return rc;
8578 }
8579 
8580 /**
8581  * lpfc_extra_ring_setup - Extra ring setup function
8582  * @phba: Pointer to HBA context object.
8583  *
8584  * This function is called while driver attaches with the
8585  * HBA to setup the extra ring. The extra ring is used
8586  * only when driver needs to support target mode functionality
8587  * or IP over FC functionalities.
8588  *
8589  * This function is called with no lock held.
8590  **/
8591 static int
8592 lpfc_extra_ring_setup( struct lpfc_hba *phba)
8593 {
8594 	struct lpfc_sli *psli;
8595 	struct lpfc_sli_ring *pring;
8596 
8597 	psli = &phba->sli;
8598 
8599 	/* Adjust cmd/rsp ring iocb entries more evenly */
8600 
8601 	/* Take some away from the FCP ring */
8602 	pring = &psli->ring[psli->fcp_ring];
8603 	pring->sli.sli3.numCiocb -= SLI2_IOCB_CMD_R1XTRA_ENTRIES;
8604 	pring->sli.sli3.numRiocb -= SLI2_IOCB_RSP_R1XTRA_ENTRIES;
8605 	pring->sli.sli3.numCiocb -= SLI2_IOCB_CMD_R3XTRA_ENTRIES;
8606 	pring->sli.sli3.numRiocb -= SLI2_IOCB_RSP_R3XTRA_ENTRIES;
8607 
8608 	/* and give them to the extra ring */
8609 	pring = &psli->ring[psli->extra_ring];
8610 
8611 	pring->sli.sli3.numCiocb += SLI2_IOCB_CMD_R1XTRA_ENTRIES;
8612 	pring->sli.sli3.numRiocb += SLI2_IOCB_RSP_R1XTRA_ENTRIES;
8613 	pring->sli.sli3.numCiocb += SLI2_IOCB_CMD_R3XTRA_ENTRIES;
8614 	pring->sli.sli3.numRiocb += SLI2_IOCB_RSP_R3XTRA_ENTRIES;
8615 
8616 	/* Setup default profile for this ring */
8617 	pring->iotag_max = 4096;
8618 	pring->num_mask = 1;
8619 	pring->prt[0].profile = 0;      /* Mask 0 */
8620 	pring->prt[0].rctl = phba->cfg_multi_ring_rctl;
8621 	pring->prt[0].type = phba->cfg_multi_ring_type;
8622 	pring->prt[0].lpfc_sli_rcv_unsol_event = NULL;
8623 	return 0;
8624 }
8625 
8626 /* lpfc_sli_abts_err_handler - handle a failed ABTS request from an SLI3 port.
8627  * @phba: Pointer to HBA context object.
8628  * @iocbq: Pointer to iocb object.
8629  *
8630  * The async_event handler calls this routine when it receives
8631  * an ASYNC_STATUS_CN event from the port.  The port generates
8632  * this event when an Abort Sequence request to an rport fails
8633  * twice in succession.  The abort could be originated by the
8634  * driver or by the port.  The ABTS could have been for an ELS
8635  * or FCP IO.  The port only generates this event when an ABTS
8636  * fails to complete after one retry.
8637  */
8638 static void
8639 lpfc_sli_abts_err_handler(struct lpfc_hba *phba,
8640 			  struct lpfc_iocbq *iocbq)
8641 {
8642 	struct lpfc_nodelist *ndlp = NULL;
8643 	uint16_t rpi = 0, vpi = 0;
8644 	struct lpfc_vport *vport = NULL;
8645 
8646 	/* The rpi in the ulpContext is vport-sensitive. */
8647 	vpi = iocbq->iocb.un.asyncstat.sub_ctxt_tag;
8648 	rpi = iocbq->iocb.ulpContext;
8649 
8650 	lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
8651 			"3092 Port generated ABTS async event "
8652 			"on vpi %d rpi %d status 0x%x\n",
8653 			vpi, rpi, iocbq->iocb.ulpStatus);
8654 
8655 	vport = lpfc_find_vport_by_vpid(phba, vpi);
8656 	if (!vport)
8657 		goto err_exit;
8658 	ndlp = lpfc_findnode_rpi(vport, rpi);
8659 	if (!ndlp || !NLP_CHK_NODE_ACT(ndlp))
8660 		goto err_exit;
8661 
8662 	if (iocbq->iocb.ulpStatus == IOSTAT_LOCAL_REJECT)
8663 		lpfc_sli_abts_recover_port(vport, ndlp);
8664 	return;
8665 
8666  err_exit:
8667 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
8668 			"3095 Event Context not found, no "
8669 			"action on vpi %d rpi %d status 0x%x, reason 0x%x\n",
8670 			iocbq->iocb.ulpContext, iocbq->iocb.ulpStatus,
8671 			vpi, rpi);
8672 }
8673 
8674 /* lpfc_sli4_abts_err_handler - handle a failed ABTS request from an SLI4 port.
8675  * @phba: pointer to HBA context object.
8676  * @ndlp: nodelist pointer for the impacted rport.
8677  * @axri: pointer to the wcqe containing the failed exchange.
8678  *
8679  * The driver calls this routine when it receives an ABORT_XRI_FCP CQE from the
8680  * port.  The port generates this event when an abort exchange request to an
8681  * rport fails twice in succession with no reply.  The abort could be originated
8682  * by the driver or by the port.  The ABTS could have been for an ELS or FCP IO.
8683  */
8684 void
8685 lpfc_sli4_abts_err_handler(struct lpfc_hba *phba,
8686 			   struct lpfc_nodelist *ndlp,
8687 			   struct sli4_wcqe_xri_aborted *axri)
8688 {
8689 	struct lpfc_vport *vport;
8690 	uint32_t ext_status = 0;
8691 
8692 	if (!ndlp || !NLP_CHK_NODE_ACT(ndlp)) {
8693 		lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
8694 				"3115 Node Context not found, driver "
8695 				"ignoring abts err event\n");
8696 		return;
8697 	}
8698 
8699 	vport = ndlp->vport;
8700 	lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
8701 			"3116 Port generated FCP XRI ABORT event on "
8702 			"vpi %d rpi %d xri x%x status 0x%x parameter x%x\n",
8703 			ndlp->vport->vpi, ndlp->nlp_rpi,
8704 			bf_get(lpfc_wcqe_xa_xri, axri),
8705 			bf_get(lpfc_wcqe_xa_status, axri),
8706 			axri->parameter);
8707 
8708 	/*
8709 	 * Catch the ABTS protocol failure case.  Older OCe FW releases returned
8710 	 * LOCAL_REJECT and 0 for a failed ABTS exchange and later OCe and
8711 	 * LPe FW releases returned LOCAL_REJECT and SEQUENCE_TIMEOUT.
8712 	 */
8713 	ext_status = axri->parameter & IOERR_PARAM_MASK;
8714 	if ((bf_get(lpfc_wcqe_xa_status, axri) == IOSTAT_LOCAL_REJECT) &&
8715 	    ((ext_status == IOERR_SEQUENCE_TIMEOUT) || (ext_status == 0)))
8716 		lpfc_sli_abts_recover_port(vport, ndlp);
8717 }
8718 
8719 /**
8720  * lpfc_sli_async_event_handler - ASYNC iocb handler function
8721  * @phba: Pointer to HBA context object.
8722  * @pring: Pointer to driver SLI ring object.
8723  * @iocbq: Pointer to iocb object.
8724  *
8725  * This function is called by the slow ring event handler
8726  * function when there is an ASYNC event iocb in the ring.
8727  * This function is called with no lock held.
8728  * Currently this function handles only temperature related
8729  * ASYNC events. The function decodes the temperature sensor
8730  * event message and posts events for the management applications.
8731  **/
8732 static void
8733 lpfc_sli_async_event_handler(struct lpfc_hba * phba,
8734 	struct lpfc_sli_ring * pring, struct lpfc_iocbq * iocbq)
8735 {
8736 	IOCB_t *icmd;
8737 	uint16_t evt_code;
8738 	struct temp_event temp_event_data;
8739 	struct Scsi_Host *shost;
8740 	uint32_t *iocb_w;
8741 
8742 	icmd = &iocbq->iocb;
8743 	evt_code = icmd->un.asyncstat.evt_code;
8744 
8745 	switch (evt_code) {
8746 	case ASYNC_TEMP_WARN:
8747 	case ASYNC_TEMP_SAFE:
8748 		temp_event_data.data = (uint32_t) icmd->ulpContext;
8749 		temp_event_data.event_type = FC_REG_TEMPERATURE_EVENT;
8750 		if (evt_code == ASYNC_TEMP_WARN) {
8751 			temp_event_data.event_code = LPFC_THRESHOLD_TEMP;
8752 			lpfc_printf_log(phba, KERN_ERR, LOG_TEMP,
8753 				"0347 Adapter is very hot, please take "
8754 				"corrective action. temperature : %d Celsius\n",
8755 				(uint32_t) icmd->ulpContext);
8756 		} else {
8757 			temp_event_data.event_code = LPFC_NORMAL_TEMP;
8758 			lpfc_printf_log(phba, KERN_ERR, LOG_TEMP,
8759 				"0340 Adapter temperature is OK now. "
8760 				"temperature : %d Celsius\n",
8761 				(uint32_t) icmd->ulpContext);
8762 		}
8763 
8764 		/* Send temperature change event to applications */
8765 		shost = lpfc_shost_from_vport(phba->pport);
8766 		fc_host_post_vendor_event(shost, fc_get_event_number(),
8767 			sizeof(temp_event_data), (char *) &temp_event_data,
8768 			LPFC_NL_VENDOR_ID);
8769 		break;
8770 	case ASYNC_STATUS_CN:
8771 		lpfc_sli_abts_err_handler(phba, iocbq);
8772 		break;
8773 	default:
8774 		iocb_w = (uint32_t *) icmd;
8775 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
8776 			"0346 Ring %d handler: unexpected ASYNC_STATUS"
8777 			" evt_code 0x%x\n"
8778 			"W0  0x%08x W1  0x%08x W2  0x%08x W3  0x%08x\n"
8779 			"W4  0x%08x W5  0x%08x W6  0x%08x W7  0x%08x\n"
8780 			"W8  0x%08x W9  0x%08x W10 0x%08x W11 0x%08x\n"
8781 			"W12 0x%08x W13 0x%08x W14 0x%08x W15 0x%08x\n",
8782 			pring->ringno, icmd->un.asyncstat.evt_code,
8783 			iocb_w[0], iocb_w[1], iocb_w[2], iocb_w[3],
8784 			iocb_w[4], iocb_w[5], iocb_w[6], iocb_w[7],
8785 			iocb_w[8], iocb_w[9], iocb_w[10], iocb_w[11],
8786 			iocb_w[12], iocb_w[13], iocb_w[14], iocb_w[15]);
8787 
8788 		break;
8789 	}
8790 }
8791 
8792 
8793 /**
8794  * lpfc_sli_setup - SLI ring setup function
8795  * @phba: Pointer to HBA context object.
8796  *
8797  * lpfc_sli_setup sets up rings of the SLI interface with
8798  * number of iocbs per ring and iotags. This function is
8799  * called while driver attach to the HBA and before the
8800  * interrupts are enabled. So there is no need for locking.
8801  *
8802  * This function always returns 0.
8803  **/
8804 int
8805 lpfc_sli_setup(struct lpfc_hba *phba)
8806 {
8807 	int i, totiocbsize = 0;
8808 	struct lpfc_sli *psli = &phba->sli;
8809 	struct lpfc_sli_ring *pring;
8810 
8811 	psli->num_rings = MAX_SLI3_CONFIGURED_RINGS;
8812 	if (phba->sli_rev == LPFC_SLI_REV4)
8813 		psli->num_rings += phba->cfg_fcp_io_channel;
8814 	psli->sli_flag = 0;
8815 	psli->fcp_ring = LPFC_FCP_RING;
8816 	psli->next_ring = LPFC_FCP_NEXT_RING;
8817 	psli->extra_ring = LPFC_EXTRA_RING;
8818 
8819 	psli->iocbq_lookup = NULL;
8820 	psli->iocbq_lookup_len = 0;
8821 	psli->last_iotag = 0;
8822 
8823 	for (i = 0; i < psli->num_rings; i++) {
8824 		pring = &psli->ring[i];
8825 		switch (i) {
8826 		case LPFC_FCP_RING:	/* ring 0 - FCP */
8827 			/* numCiocb and numRiocb are used in config_port */
8828 			pring->sli.sli3.numCiocb = SLI2_IOCB_CMD_R0_ENTRIES;
8829 			pring->sli.sli3.numRiocb = SLI2_IOCB_RSP_R0_ENTRIES;
8830 			pring->sli.sli3.numCiocb +=
8831 				SLI2_IOCB_CMD_R1XTRA_ENTRIES;
8832 			pring->sli.sli3.numRiocb +=
8833 				SLI2_IOCB_RSP_R1XTRA_ENTRIES;
8834 			pring->sli.sli3.numCiocb +=
8835 				SLI2_IOCB_CMD_R3XTRA_ENTRIES;
8836 			pring->sli.sli3.numRiocb +=
8837 				SLI2_IOCB_RSP_R3XTRA_ENTRIES;
8838 			pring->sli.sli3.sizeCiocb = (phba->sli_rev == 3) ?
8839 							SLI3_IOCB_CMD_SIZE :
8840 							SLI2_IOCB_CMD_SIZE;
8841 			pring->sli.sli3.sizeRiocb = (phba->sli_rev == 3) ?
8842 							SLI3_IOCB_RSP_SIZE :
8843 							SLI2_IOCB_RSP_SIZE;
8844 			pring->iotag_ctr = 0;
8845 			pring->iotag_max =
8846 			    (phba->cfg_hba_queue_depth * 2);
8847 			pring->fast_iotag = pring->iotag_max;
8848 			pring->num_mask = 0;
8849 			break;
8850 		case LPFC_EXTRA_RING:	/* ring 1 - EXTRA */
8851 			/* numCiocb and numRiocb are used in config_port */
8852 			pring->sli.sli3.numCiocb = SLI2_IOCB_CMD_R1_ENTRIES;
8853 			pring->sli.sli3.numRiocb = SLI2_IOCB_RSP_R1_ENTRIES;
8854 			pring->sli.sli3.sizeCiocb = (phba->sli_rev == 3) ?
8855 							SLI3_IOCB_CMD_SIZE :
8856 							SLI2_IOCB_CMD_SIZE;
8857 			pring->sli.sli3.sizeRiocb = (phba->sli_rev == 3) ?
8858 							SLI3_IOCB_RSP_SIZE :
8859 							SLI2_IOCB_RSP_SIZE;
8860 			pring->iotag_max = phba->cfg_hba_queue_depth;
8861 			pring->num_mask = 0;
8862 			break;
8863 		case LPFC_ELS_RING:	/* ring 2 - ELS / CT */
8864 			/* numCiocb and numRiocb are used in config_port */
8865 			pring->sli.sli3.numCiocb = SLI2_IOCB_CMD_R2_ENTRIES;
8866 			pring->sli.sli3.numRiocb = SLI2_IOCB_RSP_R2_ENTRIES;
8867 			pring->sli.sli3.sizeCiocb = (phba->sli_rev == 3) ?
8868 							SLI3_IOCB_CMD_SIZE :
8869 							SLI2_IOCB_CMD_SIZE;
8870 			pring->sli.sli3.sizeRiocb = (phba->sli_rev == 3) ?
8871 							SLI3_IOCB_RSP_SIZE :
8872 							SLI2_IOCB_RSP_SIZE;
8873 			pring->fast_iotag = 0;
8874 			pring->iotag_ctr = 0;
8875 			pring->iotag_max = 4096;
8876 			pring->lpfc_sli_rcv_async_status =
8877 				lpfc_sli_async_event_handler;
8878 			pring->num_mask = LPFC_MAX_RING_MASK;
8879 			pring->prt[0].profile = 0;	/* Mask 0 */
8880 			pring->prt[0].rctl = FC_RCTL_ELS_REQ;
8881 			pring->prt[0].type = FC_TYPE_ELS;
8882 			pring->prt[0].lpfc_sli_rcv_unsol_event =
8883 			    lpfc_els_unsol_event;
8884 			pring->prt[1].profile = 0;	/* Mask 1 */
8885 			pring->prt[1].rctl = FC_RCTL_ELS_REP;
8886 			pring->prt[1].type = FC_TYPE_ELS;
8887 			pring->prt[1].lpfc_sli_rcv_unsol_event =
8888 			    lpfc_els_unsol_event;
8889 			pring->prt[2].profile = 0;	/* Mask 2 */
8890 			/* NameServer Inquiry */
8891 			pring->prt[2].rctl = FC_RCTL_DD_UNSOL_CTL;
8892 			/* NameServer */
8893 			pring->prt[2].type = FC_TYPE_CT;
8894 			pring->prt[2].lpfc_sli_rcv_unsol_event =
8895 			    lpfc_ct_unsol_event;
8896 			pring->prt[3].profile = 0;	/* Mask 3 */
8897 			/* NameServer response */
8898 			pring->prt[3].rctl = FC_RCTL_DD_SOL_CTL;
8899 			/* NameServer */
8900 			pring->prt[3].type = FC_TYPE_CT;
8901 			pring->prt[3].lpfc_sli_rcv_unsol_event =
8902 			    lpfc_ct_unsol_event;
8903 			break;
8904 		}
8905 		totiocbsize += (pring->sli.sli3.numCiocb *
8906 			pring->sli.sli3.sizeCiocb) +
8907 			(pring->sli.sli3.numRiocb * pring->sli.sli3.sizeRiocb);
8908 	}
8909 	if (totiocbsize > MAX_SLIM_IOCB_SIZE) {
8910 		/* Too many cmd / rsp ring entries in SLI2 SLIM */
8911 		printk(KERN_ERR "%d:0462 Too many cmd / rsp ring entries in "
8912 		       "SLI2 SLIM Data: x%x x%lx\n",
8913 		       phba->brd_no, totiocbsize,
8914 		       (unsigned long) MAX_SLIM_IOCB_SIZE);
8915 	}
8916 	if (phba->cfg_multi_ring_support == 2)
8917 		lpfc_extra_ring_setup(phba);
8918 
8919 	return 0;
8920 }
8921 
8922 /**
8923  * lpfc_sli_queue_setup - Queue initialization function
8924  * @phba: Pointer to HBA context object.
8925  *
8926  * lpfc_sli_queue_setup sets up mailbox queues and iocb queues for each
8927  * ring. This function also initializes ring indices of each ring.
8928  * This function is called during the initialization of the SLI
8929  * interface of an HBA.
8930  * This function is called with no lock held and always returns
8931  * 1.
8932  **/
8933 int
8934 lpfc_sli_queue_setup(struct lpfc_hba *phba)
8935 {
8936 	struct lpfc_sli *psli;
8937 	struct lpfc_sli_ring *pring;
8938 	int i;
8939 
8940 	psli = &phba->sli;
8941 	spin_lock_irq(&phba->hbalock);
8942 	INIT_LIST_HEAD(&psli->mboxq);
8943 	INIT_LIST_HEAD(&psli->mboxq_cmpl);
8944 	/* Initialize list headers for txq and txcmplq as double linked lists */
8945 	for (i = 0; i < psli->num_rings; i++) {
8946 		pring = &psli->ring[i];
8947 		pring->ringno = i;
8948 		pring->sli.sli3.next_cmdidx  = 0;
8949 		pring->sli.sli3.local_getidx = 0;
8950 		pring->sli.sli3.cmdidx = 0;
8951 		INIT_LIST_HEAD(&pring->txq);
8952 		INIT_LIST_HEAD(&pring->txcmplq);
8953 		INIT_LIST_HEAD(&pring->iocb_continueq);
8954 		INIT_LIST_HEAD(&pring->iocb_continue_saveq);
8955 		INIT_LIST_HEAD(&pring->postbufq);
8956 		spin_lock_init(&pring->ring_lock);
8957 	}
8958 	spin_unlock_irq(&phba->hbalock);
8959 	return 1;
8960 }
8961 
8962 /**
8963  * lpfc_sli_mbox_sys_flush - Flush mailbox command sub-system
8964  * @phba: Pointer to HBA context object.
8965  *
8966  * This routine flushes the mailbox command subsystem. It will unconditionally
8967  * flush all the mailbox commands in the three possible stages in the mailbox
8968  * command sub-system: pending mailbox command queue; the outstanding mailbox
8969  * command; and completed mailbox command queue. It is caller's responsibility
8970  * to make sure that the driver is in the proper state to flush the mailbox
8971  * command sub-system. Namely, the posting of mailbox commands into the
8972  * pending mailbox command queue from the various clients must be stopped;
8973  * either the HBA is in a state that it will never works on the outstanding
8974  * mailbox command (such as in EEH or ERATT conditions) or the outstanding
8975  * mailbox command has been completed.
8976  **/
8977 static void
8978 lpfc_sli_mbox_sys_flush(struct lpfc_hba *phba)
8979 {
8980 	LIST_HEAD(completions);
8981 	struct lpfc_sli *psli = &phba->sli;
8982 	LPFC_MBOXQ_t *pmb;
8983 	unsigned long iflag;
8984 
8985 	/* Flush all the mailbox commands in the mbox system */
8986 	spin_lock_irqsave(&phba->hbalock, iflag);
8987 	/* The pending mailbox command queue */
8988 	list_splice_init(&phba->sli.mboxq, &completions);
8989 	/* The outstanding active mailbox command */
8990 	if (psli->mbox_active) {
8991 		list_add_tail(&psli->mbox_active->list, &completions);
8992 		psli->mbox_active = NULL;
8993 		psli->sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
8994 	}
8995 	/* The completed mailbox command queue */
8996 	list_splice_init(&phba->sli.mboxq_cmpl, &completions);
8997 	spin_unlock_irqrestore(&phba->hbalock, iflag);
8998 
8999 	/* Return all flushed mailbox commands with MBX_NOT_FINISHED status */
9000 	while (!list_empty(&completions)) {
9001 		list_remove_head(&completions, pmb, LPFC_MBOXQ_t, list);
9002 		pmb->u.mb.mbxStatus = MBX_NOT_FINISHED;
9003 		if (pmb->mbox_cmpl)
9004 			pmb->mbox_cmpl(phba, pmb);
9005 	}
9006 }
9007 
9008 /**
9009  * lpfc_sli_host_down - Vport cleanup function
9010  * @vport: Pointer to virtual port object.
9011  *
9012  * lpfc_sli_host_down is called to clean up the resources
9013  * associated with a vport before destroying virtual
9014  * port data structures.
9015  * This function does following operations:
9016  * - Free discovery resources associated with this virtual
9017  *   port.
9018  * - Free iocbs associated with this virtual port in
9019  *   the txq.
9020  * - Send abort for all iocb commands associated with this
9021  *   vport in txcmplq.
9022  *
9023  * This function is called with no lock held and always returns 1.
9024  **/
9025 int
9026 lpfc_sli_host_down(struct lpfc_vport *vport)
9027 {
9028 	LIST_HEAD(completions);
9029 	struct lpfc_hba *phba = vport->phba;
9030 	struct lpfc_sli *psli = &phba->sli;
9031 	struct lpfc_sli_ring *pring;
9032 	struct lpfc_iocbq *iocb, *next_iocb;
9033 	int i;
9034 	unsigned long flags = 0;
9035 	uint16_t prev_pring_flag;
9036 
9037 	lpfc_cleanup_discovery_resources(vport);
9038 
9039 	spin_lock_irqsave(&phba->hbalock, flags);
9040 	for (i = 0; i < psli->num_rings; i++) {
9041 		pring = &psli->ring[i];
9042 		prev_pring_flag = pring->flag;
9043 		/* Only slow rings */
9044 		if (pring->ringno == LPFC_ELS_RING) {
9045 			pring->flag |= LPFC_DEFERRED_RING_EVENT;
9046 			/* Set the lpfc data pending flag */
9047 			set_bit(LPFC_DATA_READY, &phba->data_flags);
9048 		}
9049 		/*
9050 		 * Error everything on the txq since these iocbs have not been
9051 		 * given to the FW yet.
9052 		 */
9053 		list_for_each_entry_safe(iocb, next_iocb, &pring->txq, list) {
9054 			if (iocb->vport != vport)
9055 				continue;
9056 			list_move_tail(&iocb->list, &completions);
9057 			pring->txq_cnt--;
9058 		}
9059 
9060 		/* Next issue ABTS for everything on the txcmplq */
9061 		list_for_each_entry_safe(iocb, next_iocb, &pring->txcmplq,
9062 									list) {
9063 			if (iocb->vport != vport)
9064 				continue;
9065 			lpfc_sli_issue_abort_iotag(phba, pring, iocb);
9066 		}
9067 
9068 		pring->flag = prev_pring_flag;
9069 	}
9070 
9071 	spin_unlock_irqrestore(&phba->hbalock, flags);
9072 
9073 	/* Cancel all the IOCBs from the completions list */
9074 	lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
9075 			      IOERR_SLI_DOWN);
9076 	return 1;
9077 }
9078 
9079 /**
9080  * lpfc_sli_hba_down - Resource cleanup function for the HBA
9081  * @phba: Pointer to HBA context object.
9082  *
9083  * This function cleans up all iocb, buffers, mailbox commands
9084  * while shutting down the HBA. This function is called with no
9085  * lock held and always returns 1.
9086  * This function does the following to cleanup driver resources:
9087  * - Free discovery resources for each virtual port
9088  * - Cleanup any pending fabric iocbs
9089  * - Iterate through the iocb txq and free each entry
9090  *   in the list.
9091  * - Free up any buffer posted to the HBA
9092  * - Free mailbox commands in the mailbox queue.
9093  **/
9094 int
9095 lpfc_sli_hba_down(struct lpfc_hba *phba)
9096 {
9097 	LIST_HEAD(completions);
9098 	struct lpfc_sli *psli = &phba->sli;
9099 	struct lpfc_sli_ring *pring;
9100 	struct lpfc_dmabuf *buf_ptr;
9101 	unsigned long flags = 0;
9102 	int i;
9103 
9104 	/* Shutdown the mailbox command sub-system */
9105 	lpfc_sli_mbox_sys_shutdown(phba, LPFC_MBX_WAIT);
9106 
9107 	lpfc_hba_down_prep(phba);
9108 
9109 	lpfc_fabric_abort_hba(phba);
9110 
9111 	spin_lock_irqsave(&phba->hbalock, flags);
9112 	for (i = 0; i < psli->num_rings; i++) {
9113 		pring = &psli->ring[i];
9114 		/* Only slow rings */
9115 		if (pring->ringno == LPFC_ELS_RING) {
9116 			pring->flag |= LPFC_DEFERRED_RING_EVENT;
9117 			/* Set the lpfc data pending flag */
9118 			set_bit(LPFC_DATA_READY, &phba->data_flags);
9119 		}
9120 
9121 		/*
9122 		 * Error everything on the txq since these iocbs have not been
9123 		 * given to the FW yet.
9124 		 */
9125 		list_splice_init(&pring->txq, &completions);
9126 		pring->txq_cnt = 0;
9127 
9128 	}
9129 	spin_unlock_irqrestore(&phba->hbalock, flags);
9130 
9131 	/* Cancel all the IOCBs from the completions list */
9132 	lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
9133 			      IOERR_SLI_DOWN);
9134 
9135 	spin_lock_irqsave(&phba->hbalock, flags);
9136 	list_splice_init(&phba->elsbuf, &completions);
9137 	phba->elsbuf_cnt = 0;
9138 	phba->elsbuf_prev_cnt = 0;
9139 	spin_unlock_irqrestore(&phba->hbalock, flags);
9140 
9141 	while (!list_empty(&completions)) {
9142 		list_remove_head(&completions, buf_ptr,
9143 			struct lpfc_dmabuf, list);
9144 		lpfc_mbuf_free(phba, buf_ptr->virt, buf_ptr->phys);
9145 		kfree(buf_ptr);
9146 	}
9147 
9148 	/* Return any active mbox cmds */
9149 	del_timer_sync(&psli->mbox_tmo);
9150 
9151 	spin_lock_irqsave(&phba->pport->work_port_lock, flags);
9152 	phba->pport->work_port_events &= ~WORKER_MBOX_TMO;
9153 	spin_unlock_irqrestore(&phba->pport->work_port_lock, flags);
9154 
9155 	return 1;
9156 }
9157 
9158 /**
9159  * lpfc_sli_pcimem_bcopy - SLI memory copy function
9160  * @srcp: Source memory pointer.
9161  * @destp: Destination memory pointer.
9162  * @cnt: Number of words required to be copied.
9163  *
9164  * This function is used for copying data between driver memory
9165  * and the SLI memory. This function also changes the endianness
9166  * of each word if native endianness is different from SLI
9167  * endianness. This function can be called with or without
9168  * lock.
9169  **/
9170 void
9171 lpfc_sli_pcimem_bcopy(void *srcp, void *destp, uint32_t cnt)
9172 {
9173 	uint32_t *src = srcp;
9174 	uint32_t *dest = destp;
9175 	uint32_t ldata;
9176 	int i;
9177 
9178 	for (i = 0; i < (int)cnt; i += sizeof (uint32_t)) {
9179 		ldata = *src;
9180 		ldata = le32_to_cpu(ldata);
9181 		*dest = ldata;
9182 		src++;
9183 		dest++;
9184 	}
9185 }
9186 
9187 
9188 /**
9189  * lpfc_sli_bemem_bcopy - SLI memory copy function
9190  * @srcp: Source memory pointer.
9191  * @destp: Destination memory pointer.
9192  * @cnt: Number of words required to be copied.
9193  *
9194  * This function is used for copying data between a data structure
9195  * with big endian representation to local endianness.
9196  * This function can be called with or without lock.
9197  **/
9198 void
9199 lpfc_sli_bemem_bcopy(void *srcp, void *destp, uint32_t cnt)
9200 {
9201 	uint32_t *src = srcp;
9202 	uint32_t *dest = destp;
9203 	uint32_t ldata;
9204 	int i;
9205 
9206 	for (i = 0; i < (int)cnt; i += sizeof(uint32_t)) {
9207 		ldata = *src;
9208 		ldata = be32_to_cpu(ldata);
9209 		*dest = ldata;
9210 		src++;
9211 		dest++;
9212 	}
9213 }
9214 
9215 /**
9216  * lpfc_sli_ringpostbuf_put - Function to add a buffer to postbufq
9217  * @phba: Pointer to HBA context object.
9218  * @pring: Pointer to driver SLI ring object.
9219  * @mp: Pointer to driver buffer object.
9220  *
9221  * This function is called with no lock held.
9222  * It always return zero after adding the buffer to the postbufq
9223  * buffer list.
9224  **/
9225 int
9226 lpfc_sli_ringpostbuf_put(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
9227 			 struct lpfc_dmabuf *mp)
9228 {
9229 	/* Stick struct lpfc_dmabuf at end of postbufq so driver can look it up
9230 	   later */
9231 	spin_lock_irq(&phba->hbalock);
9232 	list_add_tail(&mp->list, &pring->postbufq);
9233 	pring->postbufq_cnt++;
9234 	spin_unlock_irq(&phba->hbalock);
9235 	return 0;
9236 }
9237 
9238 /**
9239  * lpfc_sli_get_buffer_tag - allocates a tag for a CMD_QUE_XRI64_CX buffer
9240  * @phba: Pointer to HBA context object.
9241  *
9242  * When HBQ is enabled, buffers are searched based on tags. This function
9243  * allocates a tag for buffer posted using CMD_QUE_XRI64_CX iocb. The
9244  * tag is bit wise or-ed with QUE_BUFTAG_BIT to make sure that the tag
9245  * does not conflict with tags of buffer posted for unsolicited events.
9246  * The function returns the allocated tag. The function is called with
9247  * no locks held.
9248  **/
9249 uint32_t
9250 lpfc_sli_get_buffer_tag(struct lpfc_hba *phba)
9251 {
9252 	spin_lock_irq(&phba->hbalock);
9253 	phba->buffer_tag_count++;
9254 	/*
9255 	 * Always set the QUE_BUFTAG_BIT to distiguish between
9256 	 * a tag assigned by HBQ.
9257 	 */
9258 	phba->buffer_tag_count |= QUE_BUFTAG_BIT;
9259 	spin_unlock_irq(&phba->hbalock);
9260 	return phba->buffer_tag_count;
9261 }
9262 
9263 /**
9264  * lpfc_sli_ring_taggedbuf_get - find HBQ buffer associated with given tag
9265  * @phba: Pointer to HBA context object.
9266  * @pring: Pointer to driver SLI ring object.
9267  * @tag: Buffer tag.
9268  *
9269  * Buffers posted using CMD_QUE_XRI64_CX iocb are in pring->postbufq
9270  * list. After HBA DMA data to these buffers, CMD_IOCB_RET_XRI64_CX
9271  * iocb is posted to the response ring with the tag of the buffer.
9272  * This function searches the pring->postbufq list using the tag
9273  * to find buffer associated with CMD_IOCB_RET_XRI64_CX
9274  * iocb. If the buffer is found then lpfc_dmabuf object of the
9275  * buffer is returned to the caller else NULL is returned.
9276  * This function is called with no lock held.
9277  **/
9278 struct lpfc_dmabuf *
9279 lpfc_sli_ring_taggedbuf_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
9280 			uint32_t tag)
9281 {
9282 	struct lpfc_dmabuf *mp, *next_mp;
9283 	struct list_head *slp = &pring->postbufq;
9284 
9285 	/* Search postbufq, from the beginning, looking for a match on tag */
9286 	spin_lock_irq(&phba->hbalock);
9287 	list_for_each_entry_safe(mp, next_mp, &pring->postbufq, list) {
9288 		if (mp->buffer_tag == tag) {
9289 			list_del_init(&mp->list);
9290 			pring->postbufq_cnt--;
9291 			spin_unlock_irq(&phba->hbalock);
9292 			return mp;
9293 		}
9294 	}
9295 
9296 	spin_unlock_irq(&phba->hbalock);
9297 	lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
9298 			"0402 Cannot find virtual addr for buffer tag on "
9299 			"ring %d Data x%lx x%p x%p x%x\n",
9300 			pring->ringno, (unsigned long) tag,
9301 			slp->next, slp->prev, pring->postbufq_cnt);
9302 
9303 	return NULL;
9304 }
9305 
9306 /**
9307  * lpfc_sli_ringpostbuf_get - search buffers for unsolicited CT and ELS events
9308  * @phba: Pointer to HBA context object.
9309  * @pring: Pointer to driver SLI ring object.
9310  * @phys: DMA address of the buffer.
9311  *
9312  * This function searches the buffer list using the dma_address
9313  * of unsolicited event to find the driver's lpfc_dmabuf object
9314  * corresponding to the dma_address. The function returns the
9315  * lpfc_dmabuf object if a buffer is found else it returns NULL.
9316  * This function is called by the ct and els unsolicited event
9317  * handlers to get the buffer associated with the unsolicited
9318  * event.
9319  *
9320  * This function is called with no lock held.
9321  **/
9322 struct lpfc_dmabuf *
9323 lpfc_sli_ringpostbuf_get(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
9324 			 dma_addr_t phys)
9325 {
9326 	struct lpfc_dmabuf *mp, *next_mp;
9327 	struct list_head *slp = &pring->postbufq;
9328 
9329 	/* Search postbufq, from the beginning, looking for a match on phys */
9330 	spin_lock_irq(&phba->hbalock);
9331 	list_for_each_entry_safe(mp, next_mp, &pring->postbufq, list) {
9332 		if (mp->phys == phys) {
9333 			list_del_init(&mp->list);
9334 			pring->postbufq_cnt--;
9335 			spin_unlock_irq(&phba->hbalock);
9336 			return mp;
9337 		}
9338 	}
9339 
9340 	spin_unlock_irq(&phba->hbalock);
9341 	lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
9342 			"0410 Cannot find virtual addr for mapped buf on "
9343 			"ring %d Data x%llx x%p x%p x%x\n",
9344 			pring->ringno, (unsigned long long)phys,
9345 			slp->next, slp->prev, pring->postbufq_cnt);
9346 	return NULL;
9347 }
9348 
9349 /**
9350  * lpfc_sli_abort_els_cmpl - Completion handler for the els abort iocbs
9351  * @phba: Pointer to HBA context object.
9352  * @cmdiocb: Pointer to driver command iocb object.
9353  * @rspiocb: Pointer to driver response iocb object.
9354  *
9355  * This function is the completion handler for the abort iocbs for
9356  * ELS commands. This function is called from the ELS ring event
9357  * handler with no lock held. This function frees memory resources
9358  * associated with the abort iocb.
9359  **/
9360 static void
9361 lpfc_sli_abort_els_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
9362 			struct lpfc_iocbq *rspiocb)
9363 {
9364 	IOCB_t *irsp = &rspiocb->iocb;
9365 	uint16_t abort_iotag, abort_context;
9366 	struct lpfc_iocbq *abort_iocb = NULL;
9367 
9368 	if (irsp->ulpStatus) {
9369 
9370 		/*
9371 		 * Assume that the port already completed and returned, or
9372 		 * will return the iocb. Just Log the message.
9373 		 */
9374 		abort_context = cmdiocb->iocb.un.acxri.abortContextTag;
9375 		abort_iotag = cmdiocb->iocb.un.acxri.abortIoTag;
9376 
9377 		spin_lock_irq(&phba->hbalock);
9378 		if (phba->sli_rev < LPFC_SLI_REV4) {
9379 			if (abort_iotag != 0 &&
9380 				abort_iotag <= phba->sli.last_iotag)
9381 				abort_iocb =
9382 					phba->sli.iocbq_lookup[abort_iotag];
9383 		} else
9384 			/* For sli4 the abort_tag is the XRI,
9385 			 * so the abort routine puts the iotag  of the iocb
9386 			 * being aborted in the context field of the abort
9387 			 * IOCB.
9388 			 */
9389 			abort_iocb = phba->sli.iocbq_lookup[abort_context];
9390 
9391 		lpfc_printf_log(phba, KERN_WARNING, LOG_ELS | LOG_SLI,
9392 				"0327 Cannot abort els iocb %p "
9393 				"with tag %x context %x, abort status %x, "
9394 				"abort code %x\n",
9395 				abort_iocb, abort_iotag, abort_context,
9396 				irsp->ulpStatus, irsp->un.ulpWord[4]);
9397 
9398 		spin_unlock_irq(&phba->hbalock);
9399 	}
9400 	lpfc_sli_release_iocbq(phba, cmdiocb);
9401 	return;
9402 }
9403 
9404 /**
9405  * lpfc_ignore_els_cmpl - Completion handler for aborted ELS command
9406  * @phba: Pointer to HBA context object.
9407  * @cmdiocb: Pointer to driver command iocb object.
9408  * @rspiocb: Pointer to driver response iocb object.
9409  *
9410  * The function is called from SLI ring event handler with no
9411  * lock held. This function is the completion handler for ELS commands
9412  * which are aborted. The function frees memory resources used for
9413  * the aborted ELS commands.
9414  **/
9415 static void
9416 lpfc_ignore_els_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
9417 		     struct lpfc_iocbq *rspiocb)
9418 {
9419 	IOCB_t *irsp = &rspiocb->iocb;
9420 
9421 	/* ELS cmd tag <ulpIoTag> completes */
9422 	lpfc_printf_log(phba, KERN_INFO, LOG_ELS,
9423 			"0139 Ignoring ELS cmd tag x%x completion Data: "
9424 			"x%x x%x x%x\n",
9425 			irsp->ulpIoTag, irsp->ulpStatus,
9426 			irsp->un.ulpWord[4], irsp->ulpTimeout);
9427 	if (cmdiocb->iocb.ulpCommand == CMD_GEN_REQUEST64_CR)
9428 		lpfc_ct_free_iocb(phba, cmdiocb);
9429 	else
9430 		lpfc_els_free_iocb(phba, cmdiocb);
9431 	return;
9432 }
9433 
9434 /**
9435  * lpfc_sli_abort_iotag_issue - Issue abort for a command iocb
9436  * @phba: Pointer to HBA context object.
9437  * @pring: Pointer to driver SLI ring object.
9438  * @cmdiocb: Pointer to driver command iocb object.
9439  *
9440  * This function issues an abort iocb for the provided command iocb down to
9441  * the port. Other than the case the outstanding command iocb is an abort
9442  * request, this function issues abort out unconditionally. This function is
9443  * called with hbalock held. The function returns 0 when it fails due to
9444  * memory allocation failure or when the command iocb is an abort request.
9445  **/
9446 static int
9447 lpfc_sli_abort_iotag_issue(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
9448 			   struct lpfc_iocbq *cmdiocb)
9449 {
9450 	struct lpfc_vport *vport = cmdiocb->vport;
9451 	struct lpfc_iocbq *abtsiocbp;
9452 	IOCB_t *icmd = NULL;
9453 	IOCB_t *iabt = NULL;
9454 	int retval;
9455 	unsigned long iflags;
9456 
9457 	/*
9458 	 * There are certain command types we don't want to abort.  And we
9459 	 * don't want to abort commands that are already in the process of
9460 	 * being aborted.
9461 	 */
9462 	icmd = &cmdiocb->iocb;
9463 	if (icmd->ulpCommand == CMD_ABORT_XRI_CN ||
9464 	    icmd->ulpCommand == CMD_CLOSE_XRI_CN ||
9465 	    (cmdiocb->iocb_flag & LPFC_DRIVER_ABORTED) != 0)
9466 		return 0;
9467 
9468 	/* issue ABTS for this IOCB based on iotag */
9469 	abtsiocbp = __lpfc_sli_get_iocbq(phba);
9470 	if (abtsiocbp == NULL)
9471 		return 0;
9472 
9473 	/* This signals the response to set the correct status
9474 	 * before calling the completion handler
9475 	 */
9476 	cmdiocb->iocb_flag |= LPFC_DRIVER_ABORTED;
9477 
9478 	iabt = &abtsiocbp->iocb;
9479 	iabt->un.acxri.abortType = ABORT_TYPE_ABTS;
9480 	iabt->un.acxri.abortContextTag = icmd->ulpContext;
9481 	if (phba->sli_rev == LPFC_SLI_REV4) {
9482 		iabt->un.acxri.abortIoTag = cmdiocb->sli4_xritag;
9483 		iabt->un.acxri.abortContextTag = cmdiocb->iotag;
9484 	}
9485 	else
9486 		iabt->un.acxri.abortIoTag = icmd->ulpIoTag;
9487 	iabt->ulpLe = 1;
9488 	iabt->ulpClass = icmd->ulpClass;
9489 
9490 	/* ABTS WQE must go to the same WQ as the WQE to be aborted */
9491 	abtsiocbp->fcp_wqidx = cmdiocb->fcp_wqidx;
9492 	if (cmdiocb->iocb_flag & LPFC_IO_FCP)
9493 		abtsiocbp->iocb_flag |= LPFC_USE_FCPWQIDX;
9494 
9495 	if (phba->link_state >= LPFC_LINK_UP)
9496 		iabt->ulpCommand = CMD_ABORT_XRI_CN;
9497 	else
9498 		iabt->ulpCommand = CMD_CLOSE_XRI_CN;
9499 
9500 	abtsiocbp->iocb_cmpl = lpfc_sli_abort_els_cmpl;
9501 
9502 	lpfc_printf_vlog(vport, KERN_INFO, LOG_SLI,
9503 			 "0339 Abort xri x%x, original iotag x%x, "
9504 			 "abort cmd iotag x%x\n",
9505 			 iabt->un.acxri.abortIoTag,
9506 			 iabt->un.acxri.abortContextTag,
9507 			 abtsiocbp->iotag);
9508 
9509 	if (phba->sli_rev == LPFC_SLI_REV4) {
9510 		/* Note: both hbalock and ring_lock need to be set here */
9511 		spin_lock_irqsave(&pring->ring_lock, iflags);
9512 		retval = __lpfc_sli_issue_iocb(phba, pring->ringno,
9513 			abtsiocbp, 0);
9514 		spin_unlock_irqrestore(&pring->ring_lock, iflags);
9515 	} else {
9516 		retval = __lpfc_sli_issue_iocb(phba, pring->ringno,
9517 			abtsiocbp, 0);
9518 	}
9519 
9520 	if (retval)
9521 		__lpfc_sli_release_iocbq(phba, abtsiocbp);
9522 
9523 	/*
9524 	 * Caller to this routine should check for IOCB_ERROR
9525 	 * and handle it properly.  This routine no longer removes
9526 	 * iocb off txcmplq and call compl in case of IOCB_ERROR.
9527 	 */
9528 	return retval;
9529 }
9530 
9531 /**
9532  * lpfc_sli_issue_abort_iotag - Abort function for a command iocb
9533  * @phba: Pointer to HBA context object.
9534  * @pring: Pointer to driver SLI ring object.
9535  * @cmdiocb: Pointer to driver command iocb object.
9536  *
9537  * This function issues an abort iocb for the provided command iocb. In case
9538  * of unloading, the abort iocb will not be issued to commands on the ELS
9539  * ring. Instead, the callback function shall be changed to those commands
9540  * so that nothing happens when them finishes. This function is called with
9541  * hbalock held. The function returns 0 when the command iocb is an abort
9542  * request.
9543  **/
9544 int
9545 lpfc_sli_issue_abort_iotag(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
9546 			   struct lpfc_iocbq *cmdiocb)
9547 {
9548 	struct lpfc_vport *vport = cmdiocb->vport;
9549 	int retval = IOCB_ERROR;
9550 	IOCB_t *icmd = NULL;
9551 
9552 	/*
9553 	 * There are certain command types we don't want to abort.  And we
9554 	 * don't want to abort commands that are already in the process of
9555 	 * being aborted.
9556 	 */
9557 	icmd = &cmdiocb->iocb;
9558 	if (icmd->ulpCommand == CMD_ABORT_XRI_CN ||
9559 	    icmd->ulpCommand == CMD_CLOSE_XRI_CN ||
9560 	    (cmdiocb->iocb_flag & LPFC_DRIVER_ABORTED) != 0)
9561 		return 0;
9562 
9563 	/*
9564 	 * If we're unloading, don't abort iocb on the ELS ring, but change
9565 	 * the callback so that nothing happens when it finishes.
9566 	 */
9567 	if ((vport->load_flag & FC_UNLOADING) &&
9568 	    (pring->ringno == LPFC_ELS_RING)) {
9569 		if (cmdiocb->iocb_flag & LPFC_IO_FABRIC)
9570 			cmdiocb->fabric_iocb_cmpl = lpfc_ignore_els_cmpl;
9571 		else
9572 			cmdiocb->iocb_cmpl = lpfc_ignore_els_cmpl;
9573 		goto abort_iotag_exit;
9574 	}
9575 
9576 	/* Now, we try to issue the abort to the cmdiocb out */
9577 	retval = lpfc_sli_abort_iotag_issue(phba, pring, cmdiocb);
9578 
9579 abort_iotag_exit:
9580 	/*
9581 	 * Caller to this routine should check for IOCB_ERROR
9582 	 * and handle it properly.  This routine no longer removes
9583 	 * iocb off txcmplq and call compl in case of IOCB_ERROR.
9584 	 */
9585 	return retval;
9586 }
9587 
9588 /**
9589  * lpfc_sli_iocb_ring_abort - Unconditionally abort all iocbs on an iocb ring
9590  * @phba: Pointer to HBA context object.
9591  * @pring: Pointer to driver SLI ring object.
9592  *
9593  * This function aborts all iocbs in the given ring and frees all the iocb
9594  * objects in txq. This function issues abort iocbs unconditionally for all
9595  * the iocb commands in txcmplq. The iocbs in the txcmplq is not guaranteed
9596  * to complete before the return of this function. The caller is not required
9597  * to hold any locks.
9598  **/
9599 static void
9600 lpfc_sli_iocb_ring_abort(struct lpfc_hba *phba, struct lpfc_sli_ring *pring)
9601 {
9602 	LIST_HEAD(completions);
9603 	struct lpfc_iocbq *iocb, *next_iocb;
9604 
9605 	if (pring->ringno == LPFC_ELS_RING)
9606 		lpfc_fabric_abort_hba(phba);
9607 
9608 	spin_lock_irq(&phba->hbalock);
9609 
9610 	/* Take off all the iocbs on txq for cancelling */
9611 	list_splice_init(&pring->txq, &completions);
9612 	pring->txq_cnt = 0;
9613 
9614 	/* Next issue ABTS for everything on the txcmplq */
9615 	list_for_each_entry_safe(iocb, next_iocb, &pring->txcmplq, list)
9616 		lpfc_sli_abort_iotag_issue(phba, pring, iocb);
9617 
9618 	spin_unlock_irq(&phba->hbalock);
9619 
9620 	/* Cancel all the IOCBs from the completions list */
9621 	lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
9622 			      IOERR_SLI_ABORTED);
9623 }
9624 
9625 /**
9626  * lpfc_sli_hba_iocb_abort - Abort all iocbs to an hba.
9627  * @phba: pointer to lpfc HBA data structure.
9628  *
9629  * This routine will abort all pending and outstanding iocbs to an HBA.
9630  **/
9631 void
9632 lpfc_sli_hba_iocb_abort(struct lpfc_hba *phba)
9633 {
9634 	struct lpfc_sli *psli = &phba->sli;
9635 	struct lpfc_sli_ring *pring;
9636 	int i;
9637 
9638 	for (i = 0; i < psli->num_rings; i++) {
9639 		pring = &psli->ring[i];
9640 		lpfc_sli_iocb_ring_abort(phba, pring);
9641 	}
9642 }
9643 
9644 /**
9645  * lpfc_sli_validate_fcp_iocb - find commands associated with a vport or LUN
9646  * @iocbq: Pointer to driver iocb object.
9647  * @vport: Pointer to driver virtual port object.
9648  * @tgt_id: SCSI ID of the target.
9649  * @lun_id: LUN ID of the scsi device.
9650  * @ctx_cmd: LPFC_CTX_LUN/LPFC_CTX_TGT/LPFC_CTX_HOST
9651  *
9652  * This function acts as an iocb filter for functions which abort or count
9653  * all FCP iocbs pending on a lun/SCSI target/SCSI host. It will return
9654  * 0 if the filtering criteria is met for the given iocb and will return
9655  * 1 if the filtering criteria is not met.
9656  * If ctx_cmd == LPFC_CTX_LUN, the function returns 0 only if the
9657  * given iocb is for the SCSI device specified by vport, tgt_id and
9658  * lun_id parameter.
9659  * If ctx_cmd == LPFC_CTX_TGT,  the function returns 0 only if the
9660  * given iocb is for the SCSI target specified by vport and tgt_id
9661  * parameters.
9662  * If ctx_cmd == LPFC_CTX_HOST, the function returns 0 only if the
9663  * given iocb is for the SCSI host associated with the given vport.
9664  * This function is called with no locks held.
9665  **/
9666 static int
9667 lpfc_sli_validate_fcp_iocb(struct lpfc_iocbq *iocbq, struct lpfc_vport *vport,
9668 			   uint16_t tgt_id, uint64_t lun_id,
9669 			   lpfc_ctx_cmd ctx_cmd)
9670 {
9671 	struct lpfc_scsi_buf *lpfc_cmd;
9672 	int rc = 1;
9673 
9674 	if (!(iocbq->iocb_flag &  LPFC_IO_FCP))
9675 		return rc;
9676 
9677 	if (iocbq->vport != vport)
9678 		return rc;
9679 
9680 	lpfc_cmd = container_of(iocbq, struct lpfc_scsi_buf, cur_iocbq);
9681 
9682 	if (lpfc_cmd->pCmd == NULL)
9683 		return rc;
9684 
9685 	switch (ctx_cmd) {
9686 	case LPFC_CTX_LUN:
9687 		if ((lpfc_cmd->rdata->pnode) &&
9688 		    (lpfc_cmd->rdata->pnode->nlp_sid == tgt_id) &&
9689 		    (scsilun_to_int(&lpfc_cmd->fcp_cmnd->fcp_lun) == lun_id))
9690 			rc = 0;
9691 		break;
9692 	case LPFC_CTX_TGT:
9693 		if ((lpfc_cmd->rdata->pnode) &&
9694 		    (lpfc_cmd->rdata->pnode->nlp_sid == tgt_id))
9695 			rc = 0;
9696 		break;
9697 	case LPFC_CTX_HOST:
9698 		rc = 0;
9699 		break;
9700 	default:
9701 		printk(KERN_ERR "%s: Unknown context cmd type, value %d\n",
9702 			__func__, ctx_cmd);
9703 		break;
9704 	}
9705 
9706 	return rc;
9707 }
9708 
9709 /**
9710  * lpfc_sli_sum_iocb - Function to count the number of FCP iocbs pending
9711  * @vport: Pointer to virtual port.
9712  * @tgt_id: SCSI ID of the target.
9713  * @lun_id: LUN ID of the scsi device.
9714  * @ctx_cmd: LPFC_CTX_LUN/LPFC_CTX_TGT/LPFC_CTX_HOST.
9715  *
9716  * This function returns number of FCP commands pending for the vport.
9717  * When ctx_cmd == LPFC_CTX_LUN, the function returns number of FCP
9718  * commands pending on the vport associated with SCSI device specified
9719  * by tgt_id and lun_id parameters.
9720  * When ctx_cmd == LPFC_CTX_TGT, the function returns number of FCP
9721  * commands pending on the vport associated with SCSI target specified
9722  * by tgt_id parameter.
9723  * When ctx_cmd == LPFC_CTX_HOST, the function returns number of FCP
9724  * commands pending on the vport.
9725  * This function returns the number of iocbs which satisfy the filter.
9726  * This function is called without any lock held.
9727  **/
9728 int
9729 lpfc_sli_sum_iocb(struct lpfc_vport *vport, uint16_t tgt_id, uint64_t lun_id,
9730 		  lpfc_ctx_cmd ctx_cmd)
9731 {
9732 	struct lpfc_hba *phba = vport->phba;
9733 	struct lpfc_iocbq *iocbq;
9734 	int sum, i;
9735 
9736 	for (i = 1, sum = 0; i <= phba->sli.last_iotag; i++) {
9737 		iocbq = phba->sli.iocbq_lookup[i];
9738 
9739 		if (lpfc_sli_validate_fcp_iocb (iocbq, vport, tgt_id, lun_id,
9740 						ctx_cmd) == 0)
9741 			sum++;
9742 	}
9743 
9744 	return sum;
9745 }
9746 
9747 /**
9748  * lpfc_sli_abort_fcp_cmpl - Completion handler function for aborted FCP IOCBs
9749  * @phba: Pointer to HBA context object
9750  * @cmdiocb: Pointer to command iocb object.
9751  * @rspiocb: Pointer to response iocb object.
9752  *
9753  * This function is called when an aborted FCP iocb completes. This
9754  * function is called by the ring event handler with no lock held.
9755  * This function frees the iocb.
9756  **/
9757 void
9758 lpfc_sli_abort_fcp_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
9759 			struct lpfc_iocbq *rspiocb)
9760 {
9761 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
9762 			"3096 ABORT_XRI_CN completing on xri x%x "
9763 			"original iotag x%x, abort cmd iotag x%x "
9764 			"status 0x%x, reason 0x%x\n",
9765 			cmdiocb->iocb.un.acxri.abortContextTag,
9766 			cmdiocb->iocb.un.acxri.abortIoTag,
9767 			cmdiocb->iotag, rspiocb->iocb.ulpStatus,
9768 			rspiocb->iocb.un.ulpWord[4]);
9769 	lpfc_sli_release_iocbq(phba, cmdiocb);
9770 	return;
9771 }
9772 
9773 /**
9774  * lpfc_sli_abort_iocb - issue abort for all commands on a host/target/LUN
9775  * @vport: Pointer to virtual port.
9776  * @pring: Pointer to driver SLI ring object.
9777  * @tgt_id: SCSI ID of the target.
9778  * @lun_id: LUN ID of the scsi device.
9779  * @abort_cmd: LPFC_CTX_LUN/LPFC_CTX_TGT/LPFC_CTX_HOST.
9780  *
9781  * This function sends an abort command for every SCSI command
9782  * associated with the given virtual port pending on the ring
9783  * filtered by lpfc_sli_validate_fcp_iocb function.
9784  * When abort_cmd == LPFC_CTX_LUN, the function sends abort only to the
9785  * FCP iocbs associated with lun specified by tgt_id and lun_id
9786  * parameters
9787  * When abort_cmd == LPFC_CTX_TGT, the function sends abort only to the
9788  * FCP iocbs associated with SCSI target specified by tgt_id parameter.
9789  * When abort_cmd == LPFC_CTX_HOST, the function sends abort to all
9790  * FCP iocbs associated with virtual port.
9791  * This function returns number of iocbs it failed to abort.
9792  * This function is called with no locks held.
9793  **/
9794 int
9795 lpfc_sli_abort_iocb(struct lpfc_vport *vport, struct lpfc_sli_ring *pring,
9796 		    uint16_t tgt_id, uint64_t lun_id, lpfc_ctx_cmd abort_cmd)
9797 {
9798 	struct lpfc_hba *phba = vport->phba;
9799 	struct lpfc_iocbq *iocbq;
9800 	struct lpfc_iocbq *abtsiocb;
9801 	IOCB_t *cmd = NULL;
9802 	int errcnt = 0, ret_val = 0;
9803 	int i;
9804 
9805 	for (i = 1; i <= phba->sli.last_iotag; i++) {
9806 		iocbq = phba->sli.iocbq_lookup[i];
9807 
9808 		if (lpfc_sli_validate_fcp_iocb(iocbq, vport, tgt_id, lun_id,
9809 					       abort_cmd) != 0)
9810 			continue;
9811 
9812 		/* issue ABTS for this IOCB based on iotag */
9813 		abtsiocb = lpfc_sli_get_iocbq(phba);
9814 		if (abtsiocb == NULL) {
9815 			errcnt++;
9816 			continue;
9817 		}
9818 
9819 		cmd = &iocbq->iocb;
9820 		abtsiocb->iocb.un.acxri.abortType = ABORT_TYPE_ABTS;
9821 		abtsiocb->iocb.un.acxri.abortContextTag = cmd->ulpContext;
9822 		if (phba->sli_rev == LPFC_SLI_REV4)
9823 			abtsiocb->iocb.un.acxri.abortIoTag = iocbq->sli4_xritag;
9824 		else
9825 			abtsiocb->iocb.un.acxri.abortIoTag = cmd->ulpIoTag;
9826 		abtsiocb->iocb.ulpLe = 1;
9827 		abtsiocb->iocb.ulpClass = cmd->ulpClass;
9828 		abtsiocb->vport = phba->pport;
9829 
9830 		/* ABTS WQE must go to the same WQ as the WQE to be aborted */
9831 		abtsiocb->fcp_wqidx = iocbq->fcp_wqidx;
9832 		if (iocbq->iocb_flag & LPFC_IO_FCP)
9833 			abtsiocb->iocb_flag |= LPFC_USE_FCPWQIDX;
9834 
9835 		if (lpfc_is_link_up(phba))
9836 			abtsiocb->iocb.ulpCommand = CMD_ABORT_XRI_CN;
9837 		else
9838 			abtsiocb->iocb.ulpCommand = CMD_CLOSE_XRI_CN;
9839 
9840 		/* Setup callback routine and issue the command. */
9841 		abtsiocb->iocb_cmpl = lpfc_sli_abort_fcp_cmpl;
9842 		ret_val = lpfc_sli_issue_iocb(phba, pring->ringno,
9843 					      abtsiocb, 0);
9844 		if (ret_val == IOCB_ERROR) {
9845 			lpfc_sli_release_iocbq(phba, abtsiocb);
9846 			errcnt++;
9847 			continue;
9848 		}
9849 	}
9850 
9851 	return errcnt;
9852 }
9853 
9854 /**
9855  * lpfc_sli_wake_iocb_wait - lpfc_sli_issue_iocb_wait's completion handler
9856  * @phba: Pointer to HBA context object.
9857  * @cmdiocbq: Pointer to command iocb.
9858  * @rspiocbq: Pointer to response iocb.
9859  *
9860  * This function is the completion handler for iocbs issued using
9861  * lpfc_sli_issue_iocb_wait function. This function is called by the
9862  * ring event handler function without any lock held. This function
9863  * can be called from both worker thread context and interrupt
9864  * context. This function also can be called from other thread which
9865  * cleans up the SLI layer objects.
9866  * This function copy the contents of the response iocb to the
9867  * response iocb memory object provided by the caller of
9868  * lpfc_sli_issue_iocb_wait and then wakes up the thread which
9869  * sleeps for the iocb completion.
9870  **/
9871 static void
9872 lpfc_sli_wake_iocb_wait(struct lpfc_hba *phba,
9873 			struct lpfc_iocbq *cmdiocbq,
9874 			struct lpfc_iocbq *rspiocbq)
9875 {
9876 	wait_queue_head_t *pdone_q;
9877 	unsigned long iflags;
9878 	struct lpfc_scsi_buf *lpfc_cmd;
9879 
9880 	spin_lock_irqsave(&phba->hbalock, iflags);
9881 	cmdiocbq->iocb_flag |= LPFC_IO_WAKE;
9882 	if (cmdiocbq->context2 && rspiocbq)
9883 		memcpy(&((struct lpfc_iocbq *)cmdiocbq->context2)->iocb,
9884 		       &rspiocbq->iocb, sizeof(IOCB_t));
9885 
9886 	/* Set the exchange busy flag for task management commands */
9887 	if ((cmdiocbq->iocb_flag & LPFC_IO_FCP) &&
9888 		!(cmdiocbq->iocb_flag & LPFC_IO_LIBDFC)) {
9889 		lpfc_cmd = container_of(cmdiocbq, struct lpfc_scsi_buf,
9890 			cur_iocbq);
9891 		lpfc_cmd->exch_busy = rspiocbq->iocb_flag & LPFC_EXCHANGE_BUSY;
9892 	}
9893 
9894 	pdone_q = cmdiocbq->context_un.wait_queue;
9895 	if (pdone_q)
9896 		wake_up(pdone_q);
9897 	spin_unlock_irqrestore(&phba->hbalock, iflags);
9898 	return;
9899 }
9900 
9901 /**
9902  * lpfc_chk_iocb_flg - Test IOCB flag with lock held.
9903  * @phba: Pointer to HBA context object..
9904  * @piocbq: Pointer to command iocb.
9905  * @flag: Flag to test.
9906  *
9907  * This routine grabs the hbalock and then test the iocb_flag to
9908  * see if the passed in flag is set.
9909  * Returns:
9910  * 1 if flag is set.
9911  * 0 if flag is not set.
9912  **/
9913 static int
9914 lpfc_chk_iocb_flg(struct lpfc_hba *phba,
9915 		 struct lpfc_iocbq *piocbq, uint32_t flag)
9916 {
9917 	unsigned long iflags;
9918 	int ret;
9919 
9920 	spin_lock_irqsave(&phba->hbalock, iflags);
9921 	ret = piocbq->iocb_flag & flag;
9922 	spin_unlock_irqrestore(&phba->hbalock, iflags);
9923 	return ret;
9924 
9925 }
9926 
9927 /**
9928  * lpfc_sli_issue_iocb_wait - Synchronous function to issue iocb commands
9929  * @phba: Pointer to HBA context object..
9930  * @pring: Pointer to sli ring.
9931  * @piocb: Pointer to command iocb.
9932  * @prspiocbq: Pointer to response iocb.
9933  * @timeout: Timeout in number of seconds.
9934  *
9935  * This function issues the iocb to firmware and waits for the
9936  * iocb to complete. If the iocb command is not
9937  * completed within timeout seconds, it returns IOCB_TIMEDOUT.
9938  * Caller should not free the iocb resources if this function
9939  * returns IOCB_TIMEDOUT.
9940  * The function waits for the iocb completion using an
9941  * non-interruptible wait.
9942  * This function will sleep while waiting for iocb completion.
9943  * So, this function should not be called from any context which
9944  * does not allow sleeping. Due to the same reason, this function
9945  * cannot be called with interrupt disabled.
9946  * This function assumes that the iocb completions occur while
9947  * this function sleep. So, this function cannot be called from
9948  * the thread which process iocb completion for this ring.
9949  * This function clears the iocb_flag of the iocb object before
9950  * issuing the iocb and the iocb completion handler sets this
9951  * flag and wakes this thread when the iocb completes.
9952  * The contents of the response iocb will be copied to prspiocbq
9953  * by the completion handler when the command completes.
9954  * This function returns IOCB_SUCCESS when success.
9955  * This function is called with no lock held.
9956  **/
9957 int
9958 lpfc_sli_issue_iocb_wait(struct lpfc_hba *phba,
9959 			 uint32_t ring_number,
9960 			 struct lpfc_iocbq *piocb,
9961 			 struct lpfc_iocbq *prspiocbq,
9962 			 uint32_t timeout)
9963 {
9964 	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(done_q);
9965 	long timeleft, timeout_req = 0;
9966 	int retval = IOCB_SUCCESS;
9967 	uint32_t creg_val;
9968 	struct lpfc_sli_ring *pring = &phba->sli.ring[LPFC_ELS_RING];
9969 	/*
9970 	 * If the caller has provided a response iocbq buffer, then context2
9971 	 * is NULL or its an error.
9972 	 */
9973 	if (prspiocbq) {
9974 		if (piocb->context2)
9975 			return IOCB_ERROR;
9976 		piocb->context2 = prspiocbq;
9977 	}
9978 
9979 	piocb->iocb_cmpl = lpfc_sli_wake_iocb_wait;
9980 	piocb->context_un.wait_queue = &done_q;
9981 	piocb->iocb_flag &= ~LPFC_IO_WAKE;
9982 
9983 	if (phba->cfg_poll & DISABLE_FCP_RING_INT) {
9984 		if (lpfc_readl(phba->HCregaddr, &creg_val))
9985 			return IOCB_ERROR;
9986 		creg_val |= (HC_R0INT_ENA << LPFC_FCP_RING);
9987 		writel(creg_val, phba->HCregaddr);
9988 		readl(phba->HCregaddr); /* flush */
9989 	}
9990 
9991 	retval = lpfc_sli_issue_iocb(phba, ring_number, piocb,
9992 				     SLI_IOCB_RET_IOCB);
9993 	if (retval == IOCB_SUCCESS) {
9994 		timeout_req = timeout * HZ;
9995 		timeleft = wait_event_timeout(done_q,
9996 				lpfc_chk_iocb_flg(phba, piocb, LPFC_IO_WAKE),
9997 				timeout_req);
9998 
9999 		if (piocb->iocb_flag & LPFC_IO_WAKE) {
10000 			lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
10001 					"0331 IOCB wake signaled\n");
10002 		} else if (timeleft == 0) {
10003 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
10004 					"0338 IOCB wait timeout error - no "
10005 					"wake response Data x%x\n", timeout);
10006 			retval = IOCB_TIMEDOUT;
10007 		} else {
10008 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
10009 					"0330 IOCB wake NOT set, "
10010 					"Data x%x x%lx\n",
10011 					timeout, (timeleft / jiffies));
10012 			retval = IOCB_TIMEDOUT;
10013 		}
10014 	} else if (retval == IOCB_BUSY) {
10015 		lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
10016 			"2818 Max IOCBs %d txq cnt %d txcmplq cnt %d\n",
10017 			phba->iocb_cnt, pring->txq_cnt, pring->txcmplq_cnt);
10018 		return retval;
10019 	} else {
10020 		lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
10021 				"0332 IOCB wait issue failed, Data x%x\n",
10022 				retval);
10023 		retval = IOCB_ERROR;
10024 	}
10025 
10026 	if (phba->cfg_poll & DISABLE_FCP_RING_INT) {
10027 		if (lpfc_readl(phba->HCregaddr, &creg_val))
10028 			return IOCB_ERROR;
10029 		creg_val &= ~(HC_R0INT_ENA << LPFC_FCP_RING);
10030 		writel(creg_val, phba->HCregaddr);
10031 		readl(phba->HCregaddr); /* flush */
10032 	}
10033 
10034 	if (prspiocbq)
10035 		piocb->context2 = NULL;
10036 
10037 	piocb->context_un.wait_queue = NULL;
10038 	piocb->iocb_cmpl = NULL;
10039 	return retval;
10040 }
10041 
10042 /**
10043  * lpfc_sli_issue_mbox_wait - Synchronous function to issue mailbox
10044  * @phba: Pointer to HBA context object.
10045  * @pmboxq: Pointer to driver mailbox object.
10046  * @timeout: Timeout in number of seconds.
10047  *
10048  * This function issues the mailbox to firmware and waits for the
10049  * mailbox command to complete. If the mailbox command is not
10050  * completed within timeout seconds, it returns MBX_TIMEOUT.
10051  * The function waits for the mailbox completion using an
10052  * interruptible wait. If the thread is woken up due to a
10053  * signal, MBX_TIMEOUT error is returned to the caller. Caller
10054  * should not free the mailbox resources, if this function returns
10055  * MBX_TIMEOUT.
10056  * This function will sleep while waiting for mailbox completion.
10057  * So, this function should not be called from any context which
10058  * does not allow sleeping. Due to the same reason, this function
10059  * cannot be called with interrupt disabled.
10060  * This function assumes that the mailbox completion occurs while
10061  * this function sleep. So, this function cannot be called from
10062  * the worker thread which processes mailbox completion.
10063  * This function is called in the context of HBA management
10064  * applications.
10065  * This function returns MBX_SUCCESS when successful.
10066  * This function is called with no lock held.
10067  **/
10068 int
10069 lpfc_sli_issue_mbox_wait(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq,
10070 			 uint32_t timeout)
10071 {
10072 	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(done_q);
10073 	int retval;
10074 	unsigned long flag;
10075 
10076 	/* The caller must leave context1 empty. */
10077 	if (pmboxq->context1)
10078 		return MBX_NOT_FINISHED;
10079 
10080 	pmboxq->mbox_flag &= ~LPFC_MBX_WAKE;
10081 	/* setup wake call as IOCB callback */
10082 	pmboxq->mbox_cmpl = lpfc_sli_wake_mbox_wait;
10083 	/* setup context field to pass wait_queue pointer to wake function  */
10084 	pmboxq->context1 = &done_q;
10085 
10086 	/* now issue the command */
10087 	retval = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT);
10088 	if (retval == MBX_BUSY || retval == MBX_SUCCESS) {
10089 		wait_event_interruptible_timeout(done_q,
10090 				pmboxq->mbox_flag & LPFC_MBX_WAKE,
10091 				timeout * HZ);
10092 
10093 		spin_lock_irqsave(&phba->hbalock, flag);
10094 		pmboxq->context1 = NULL;
10095 		/*
10096 		 * if LPFC_MBX_WAKE flag is set the mailbox is completed
10097 		 * else do not free the resources.
10098 		 */
10099 		if (pmboxq->mbox_flag & LPFC_MBX_WAKE) {
10100 			retval = MBX_SUCCESS;
10101 			lpfc_sli4_swap_str(phba, pmboxq);
10102 		} else {
10103 			retval = MBX_TIMEOUT;
10104 			pmboxq->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
10105 		}
10106 		spin_unlock_irqrestore(&phba->hbalock, flag);
10107 	}
10108 
10109 	return retval;
10110 }
10111 
10112 /**
10113  * lpfc_sli_mbox_sys_shutdown - shutdown mailbox command sub-system
10114  * @phba: Pointer to HBA context.
10115  *
10116  * This function is called to shutdown the driver's mailbox sub-system.
10117  * It first marks the mailbox sub-system is in a block state to prevent
10118  * the asynchronous mailbox command from issued off the pending mailbox
10119  * command queue. If the mailbox command sub-system shutdown is due to
10120  * HBA error conditions such as EEH or ERATT, this routine shall invoke
10121  * the mailbox sub-system flush routine to forcefully bring down the
10122  * mailbox sub-system. Otherwise, if it is due to normal condition (such
10123  * as with offline or HBA function reset), this routine will wait for the
10124  * outstanding mailbox command to complete before invoking the mailbox
10125  * sub-system flush routine to gracefully bring down mailbox sub-system.
10126  **/
10127 void
10128 lpfc_sli_mbox_sys_shutdown(struct lpfc_hba *phba, int mbx_action)
10129 {
10130 	struct lpfc_sli *psli = &phba->sli;
10131 	unsigned long timeout;
10132 
10133 	if (mbx_action == LPFC_MBX_NO_WAIT) {
10134 		/* delay 100ms for port state */
10135 		msleep(100);
10136 		lpfc_sli_mbox_sys_flush(phba);
10137 		return;
10138 	}
10139 	timeout = msecs_to_jiffies(LPFC_MBOX_TMO * 1000) + jiffies;
10140 
10141 	spin_lock_irq(&phba->hbalock);
10142 	psli->sli_flag |= LPFC_SLI_ASYNC_MBX_BLK;
10143 
10144 	if (psli->sli_flag & LPFC_SLI_ACTIVE) {
10145 		/* Determine how long we might wait for the active mailbox
10146 		 * command to be gracefully completed by firmware.
10147 		 */
10148 		if (phba->sli.mbox_active)
10149 			timeout = msecs_to_jiffies(lpfc_mbox_tmo_val(phba,
10150 						phba->sli.mbox_active) *
10151 						1000) + jiffies;
10152 		spin_unlock_irq(&phba->hbalock);
10153 
10154 		while (phba->sli.mbox_active) {
10155 			/* Check active mailbox complete status every 2ms */
10156 			msleep(2);
10157 			if (time_after(jiffies, timeout))
10158 				/* Timeout, let the mailbox flush routine to
10159 				 * forcefully release active mailbox command
10160 				 */
10161 				break;
10162 		}
10163 	} else
10164 		spin_unlock_irq(&phba->hbalock);
10165 
10166 	lpfc_sli_mbox_sys_flush(phba);
10167 }
10168 
10169 /**
10170  * lpfc_sli_eratt_read - read sli-3 error attention events
10171  * @phba: Pointer to HBA context.
10172  *
10173  * This function is called to read the SLI3 device error attention registers
10174  * for possible error attention events. The caller must hold the hostlock
10175  * with spin_lock_irq().
10176  *
10177  * This function returns 1 when there is Error Attention in the Host Attention
10178  * Register and returns 0 otherwise.
10179  **/
10180 static int
10181 lpfc_sli_eratt_read(struct lpfc_hba *phba)
10182 {
10183 	uint32_t ha_copy;
10184 
10185 	/* Read chip Host Attention (HA) register */
10186 	if (lpfc_readl(phba->HAregaddr, &ha_copy))
10187 		goto unplug_err;
10188 
10189 	if (ha_copy & HA_ERATT) {
10190 		/* Read host status register to retrieve error event */
10191 		if (lpfc_sli_read_hs(phba))
10192 			goto unplug_err;
10193 
10194 		/* Check if there is a deferred error condition is active */
10195 		if ((HS_FFER1 & phba->work_hs) &&
10196 		    ((HS_FFER2 | HS_FFER3 | HS_FFER4 | HS_FFER5 |
10197 		      HS_FFER6 | HS_FFER7 | HS_FFER8) & phba->work_hs)) {
10198 			phba->hba_flag |= DEFER_ERATT;
10199 			/* Clear all interrupt enable conditions */
10200 			writel(0, phba->HCregaddr);
10201 			readl(phba->HCregaddr);
10202 		}
10203 
10204 		/* Set the driver HA work bitmap */
10205 		phba->work_ha |= HA_ERATT;
10206 		/* Indicate polling handles this ERATT */
10207 		phba->hba_flag |= HBA_ERATT_HANDLED;
10208 		return 1;
10209 	}
10210 	return 0;
10211 
10212 unplug_err:
10213 	/* Set the driver HS work bitmap */
10214 	phba->work_hs |= UNPLUG_ERR;
10215 	/* Set the driver HA work bitmap */
10216 	phba->work_ha |= HA_ERATT;
10217 	/* Indicate polling handles this ERATT */
10218 	phba->hba_flag |= HBA_ERATT_HANDLED;
10219 	return 1;
10220 }
10221 
10222 /**
10223  * lpfc_sli4_eratt_read - read sli-4 error attention events
10224  * @phba: Pointer to HBA context.
10225  *
10226  * This function is called to read the SLI4 device error attention registers
10227  * for possible error attention events. The caller must hold the hostlock
10228  * with spin_lock_irq().
10229  *
10230  * This function returns 1 when there is Error Attention in the Host Attention
10231  * Register and returns 0 otherwise.
10232  **/
10233 static int
10234 lpfc_sli4_eratt_read(struct lpfc_hba *phba)
10235 {
10236 	uint32_t uerr_sta_hi, uerr_sta_lo;
10237 	uint32_t if_type, portsmphr;
10238 	struct lpfc_register portstat_reg;
10239 
10240 	/*
10241 	 * For now, use the SLI4 device internal unrecoverable error
10242 	 * registers for error attention. This can be changed later.
10243 	 */
10244 	if_type = bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf);
10245 	switch (if_type) {
10246 	case LPFC_SLI_INTF_IF_TYPE_0:
10247 		if (lpfc_readl(phba->sli4_hba.u.if_type0.UERRLOregaddr,
10248 			&uerr_sta_lo) ||
10249 			lpfc_readl(phba->sli4_hba.u.if_type0.UERRHIregaddr,
10250 			&uerr_sta_hi)) {
10251 			phba->work_hs |= UNPLUG_ERR;
10252 			phba->work_ha |= HA_ERATT;
10253 			phba->hba_flag |= HBA_ERATT_HANDLED;
10254 			return 1;
10255 		}
10256 		if ((~phba->sli4_hba.ue_mask_lo & uerr_sta_lo) ||
10257 		    (~phba->sli4_hba.ue_mask_hi & uerr_sta_hi)) {
10258 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
10259 					"1423 HBA Unrecoverable error: "
10260 					"uerr_lo_reg=0x%x, uerr_hi_reg=0x%x, "
10261 					"ue_mask_lo_reg=0x%x, "
10262 					"ue_mask_hi_reg=0x%x\n",
10263 					uerr_sta_lo, uerr_sta_hi,
10264 					phba->sli4_hba.ue_mask_lo,
10265 					phba->sli4_hba.ue_mask_hi);
10266 			phba->work_status[0] = uerr_sta_lo;
10267 			phba->work_status[1] = uerr_sta_hi;
10268 			phba->work_ha |= HA_ERATT;
10269 			phba->hba_flag |= HBA_ERATT_HANDLED;
10270 			return 1;
10271 		}
10272 		break;
10273 	case LPFC_SLI_INTF_IF_TYPE_2:
10274 		if (lpfc_readl(phba->sli4_hba.u.if_type2.STATUSregaddr,
10275 			&portstat_reg.word0) ||
10276 			lpfc_readl(phba->sli4_hba.PSMPHRregaddr,
10277 			&portsmphr)){
10278 			phba->work_hs |= UNPLUG_ERR;
10279 			phba->work_ha |= HA_ERATT;
10280 			phba->hba_flag |= HBA_ERATT_HANDLED;
10281 			return 1;
10282 		}
10283 		if (bf_get(lpfc_sliport_status_err, &portstat_reg)) {
10284 			phba->work_status[0] =
10285 				readl(phba->sli4_hba.u.if_type2.ERR1regaddr);
10286 			phba->work_status[1] =
10287 				readl(phba->sli4_hba.u.if_type2.ERR2regaddr);
10288 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
10289 					"2885 Port Status Event: "
10290 					"port status reg 0x%x, "
10291 					"port smphr reg 0x%x, "
10292 					"error 1=0x%x, error 2=0x%x\n",
10293 					portstat_reg.word0,
10294 					portsmphr,
10295 					phba->work_status[0],
10296 					phba->work_status[1]);
10297 			phba->work_ha |= HA_ERATT;
10298 			phba->hba_flag |= HBA_ERATT_HANDLED;
10299 			return 1;
10300 		}
10301 		break;
10302 	case LPFC_SLI_INTF_IF_TYPE_1:
10303 	default:
10304 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
10305 				"2886 HBA Error Attention on unsupported "
10306 				"if type %d.", if_type);
10307 		return 1;
10308 	}
10309 
10310 	return 0;
10311 }
10312 
10313 /**
10314  * lpfc_sli_check_eratt - check error attention events
10315  * @phba: Pointer to HBA context.
10316  *
10317  * This function is called from timer soft interrupt context to check HBA's
10318  * error attention register bit for error attention events.
10319  *
10320  * This function returns 1 when there is Error Attention in the Host Attention
10321  * Register and returns 0 otherwise.
10322  **/
10323 int
10324 lpfc_sli_check_eratt(struct lpfc_hba *phba)
10325 {
10326 	uint32_t ha_copy;
10327 
10328 	/* If somebody is waiting to handle an eratt, don't process it
10329 	 * here. The brdkill function will do this.
10330 	 */
10331 	if (phba->link_flag & LS_IGNORE_ERATT)
10332 		return 0;
10333 
10334 	/* Check if interrupt handler handles this ERATT */
10335 	spin_lock_irq(&phba->hbalock);
10336 	if (phba->hba_flag & HBA_ERATT_HANDLED) {
10337 		/* Interrupt handler has handled ERATT */
10338 		spin_unlock_irq(&phba->hbalock);
10339 		return 0;
10340 	}
10341 
10342 	/*
10343 	 * If there is deferred error attention, do not check for error
10344 	 * attention
10345 	 */
10346 	if (unlikely(phba->hba_flag & DEFER_ERATT)) {
10347 		spin_unlock_irq(&phba->hbalock);
10348 		return 0;
10349 	}
10350 
10351 	/* If PCI channel is offline, don't process it */
10352 	if (unlikely(pci_channel_offline(phba->pcidev))) {
10353 		spin_unlock_irq(&phba->hbalock);
10354 		return 0;
10355 	}
10356 
10357 	switch (phba->sli_rev) {
10358 	case LPFC_SLI_REV2:
10359 	case LPFC_SLI_REV3:
10360 		/* Read chip Host Attention (HA) register */
10361 		ha_copy = lpfc_sli_eratt_read(phba);
10362 		break;
10363 	case LPFC_SLI_REV4:
10364 		/* Read device Uncoverable Error (UERR) registers */
10365 		ha_copy = lpfc_sli4_eratt_read(phba);
10366 		break;
10367 	default:
10368 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
10369 				"0299 Invalid SLI revision (%d)\n",
10370 				phba->sli_rev);
10371 		ha_copy = 0;
10372 		break;
10373 	}
10374 	spin_unlock_irq(&phba->hbalock);
10375 
10376 	return ha_copy;
10377 }
10378 
10379 /**
10380  * lpfc_intr_state_check - Check device state for interrupt handling
10381  * @phba: Pointer to HBA context.
10382  *
10383  * This inline routine checks whether a device or its PCI slot is in a state
10384  * that the interrupt should be handled.
10385  *
10386  * This function returns 0 if the device or the PCI slot is in a state that
10387  * interrupt should be handled, otherwise -EIO.
10388  */
10389 static inline int
10390 lpfc_intr_state_check(struct lpfc_hba *phba)
10391 {
10392 	/* If the pci channel is offline, ignore all the interrupts */
10393 	if (unlikely(pci_channel_offline(phba->pcidev)))
10394 		return -EIO;
10395 
10396 	/* Update device level interrupt statistics */
10397 	phba->sli.slistat.sli_intr++;
10398 
10399 	/* Ignore all interrupts during initialization. */
10400 	if (unlikely(phba->link_state < LPFC_LINK_DOWN))
10401 		return -EIO;
10402 
10403 	return 0;
10404 }
10405 
10406 /**
10407  * lpfc_sli_sp_intr_handler - Slow-path interrupt handler to SLI-3 device
10408  * @irq: Interrupt number.
10409  * @dev_id: The device context pointer.
10410  *
10411  * This function is directly called from the PCI layer as an interrupt
10412  * service routine when device with SLI-3 interface spec is enabled with
10413  * MSI-X multi-message interrupt mode and there are slow-path events in
10414  * the HBA. However, when the device is enabled with either MSI or Pin-IRQ
10415  * interrupt mode, this function is called as part of the device-level
10416  * interrupt handler. When the PCI slot is in error recovery or the HBA
10417  * is undergoing initialization, the interrupt handler will not process
10418  * the interrupt. The link attention and ELS ring attention events are
10419  * handled by the worker thread. The interrupt handler signals the worker
10420  * thread and returns for these events. This function is called without
10421  * any lock held. It gets the hbalock to access and update SLI data
10422  * structures.
10423  *
10424  * This function returns IRQ_HANDLED when interrupt is handled else it
10425  * returns IRQ_NONE.
10426  **/
10427 irqreturn_t
10428 lpfc_sli_sp_intr_handler(int irq, void *dev_id)
10429 {
10430 	struct lpfc_hba  *phba;
10431 	uint32_t ha_copy, hc_copy;
10432 	uint32_t work_ha_copy;
10433 	unsigned long status;
10434 	unsigned long iflag;
10435 	uint32_t control;
10436 
10437 	MAILBOX_t *mbox, *pmbox;
10438 	struct lpfc_vport *vport;
10439 	struct lpfc_nodelist *ndlp;
10440 	struct lpfc_dmabuf *mp;
10441 	LPFC_MBOXQ_t *pmb;
10442 	int rc;
10443 
10444 	/*
10445 	 * Get the driver's phba structure from the dev_id and
10446 	 * assume the HBA is not interrupting.
10447 	 */
10448 	phba = (struct lpfc_hba *)dev_id;
10449 
10450 	if (unlikely(!phba))
10451 		return IRQ_NONE;
10452 
10453 	/*
10454 	 * Stuff needs to be attented to when this function is invoked as an
10455 	 * individual interrupt handler in MSI-X multi-message interrupt mode
10456 	 */
10457 	if (phba->intr_type == MSIX) {
10458 		/* Check device state for handling interrupt */
10459 		if (lpfc_intr_state_check(phba))
10460 			return IRQ_NONE;
10461 		/* Need to read HA REG for slow-path events */
10462 		spin_lock_irqsave(&phba->hbalock, iflag);
10463 		if (lpfc_readl(phba->HAregaddr, &ha_copy))
10464 			goto unplug_error;
10465 		/* If somebody is waiting to handle an eratt don't process it
10466 		 * here. The brdkill function will do this.
10467 		 */
10468 		if (phba->link_flag & LS_IGNORE_ERATT)
10469 			ha_copy &= ~HA_ERATT;
10470 		/* Check the need for handling ERATT in interrupt handler */
10471 		if (ha_copy & HA_ERATT) {
10472 			if (phba->hba_flag & HBA_ERATT_HANDLED)
10473 				/* ERATT polling has handled ERATT */
10474 				ha_copy &= ~HA_ERATT;
10475 			else
10476 				/* Indicate interrupt handler handles ERATT */
10477 				phba->hba_flag |= HBA_ERATT_HANDLED;
10478 		}
10479 
10480 		/*
10481 		 * If there is deferred error attention, do not check for any
10482 		 * interrupt.
10483 		 */
10484 		if (unlikely(phba->hba_flag & DEFER_ERATT)) {
10485 			spin_unlock_irqrestore(&phba->hbalock, iflag);
10486 			return IRQ_NONE;
10487 		}
10488 
10489 		/* Clear up only attention source related to slow-path */
10490 		if (lpfc_readl(phba->HCregaddr, &hc_copy))
10491 			goto unplug_error;
10492 
10493 		writel(hc_copy & ~(HC_MBINT_ENA | HC_R2INT_ENA |
10494 			HC_LAINT_ENA | HC_ERINT_ENA),
10495 			phba->HCregaddr);
10496 		writel((ha_copy & (HA_MBATT | HA_R2_CLR_MSK)),
10497 			phba->HAregaddr);
10498 		writel(hc_copy, phba->HCregaddr);
10499 		readl(phba->HAregaddr); /* flush */
10500 		spin_unlock_irqrestore(&phba->hbalock, iflag);
10501 	} else
10502 		ha_copy = phba->ha_copy;
10503 
10504 	work_ha_copy = ha_copy & phba->work_ha_mask;
10505 
10506 	if (work_ha_copy) {
10507 		if (work_ha_copy & HA_LATT) {
10508 			if (phba->sli.sli_flag & LPFC_PROCESS_LA) {
10509 				/*
10510 				 * Turn off Link Attention interrupts
10511 				 * until CLEAR_LA done
10512 				 */
10513 				spin_lock_irqsave(&phba->hbalock, iflag);
10514 				phba->sli.sli_flag &= ~LPFC_PROCESS_LA;
10515 				if (lpfc_readl(phba->HCregaddr, &control))
10516 					goto unplug_error;
10517 				control &= ~HC_LAINT_ENA;
10518 				writel(control, phba->HCregaddr);
10519 				readl(phba->HCregaddr); /* flush */
10520 				spin_unlock_irqrestore(&phba->hbalock, iflag);
10521 			}
10522 			else
10523 				work_ha_copy &= ~HA_LATT;
10524 		}
10525 
10526 		if (work_ha_copy & ~(HA_ERATT | HA_MBATT | HA_LATT)) {
10527 			/*
10528 			 * Turn off Slow Rings interrupts, LPFC_ELS_RING is
10529 			 * the only slow ring.
10530 			 */
10531 			status = (work_ha_copy &
10532 				(HA_RXMASK  << (4*LPFC_ELS_RING)));
10533 			status >>= (4*LPFC_ELS_RING);
10534 			if (status & HA_RXMASK) {
10535 				spin_lock_irqsave(&phba->hbalock, iflag);
10536 				if (lpfc_readl(phba->HCregaddr, &control))
10537 					goto unplug_error;
10538 
10539 				lpfc_debugfs_slow_ring_trc(phba,
10540 				"ISR slow ring:   ctl:x%x stat:x%x isrcnt:x%x",
10541 				control, status,
10542 				(uint32_t)phba->sli.slistat.sli_intr);
10543 
10544 				if (control & (HC_R0INT_ENA << LPFC_ELS_RING)) {
10545 					lpfc_debugfs_slow_ring_trc(phba,
10546 						"ISR Disable ring:"
10547 						"pwork:x%x hawork:x%x wait:x%x",
10548 						phba->work_ha, work_ha_copy,
10549 						(uint32_t)((unsigned long)
10550 						&phba->work_waitq));
10551 
10552 					control &=
10553 					    ~(HC_R0INT_ENA << LPFC_ELS_RING);
10554 					writel(control, phba->HCregaddr);
10555 					readl(phba->HCregaddr); /* flush */
10556 				}
10557 				else {
10558 					lpfc_debugfs_slow_ring_trc(phba,
10559 						"ISR slow ring:   pwork:"
10560 						"x%x hawork:x%x wait:x%x",
10561 						phba->work_ha, work_ha_copy,
10562 						(uint32_t)((unsigned long)
10563 						&phba->work_waitq));
10564 				}
10565 				spin_unlock_irqrestore(&phba->hbalock, iflag);
10566 			}
10567 		}
10568 		spin_lock_irqsave(&phba->hbalock, iflag);
10569 		if (work_ha_copy & HA_ERATT) {
10570 			if (lpfc_sli_read_hs(phba))
10571 				goto unplug_error;
10572 			/*
10573 			 * Check if there is a deferred error condition
10574 			 * is active
10575 			 */
10576 			if ((HS_FFER1 & phba->work_hs) &&
10577 				((HS_FFER2 | HS_FFER3 | HS_FFER4 | HS_FFER5 |
10578 				  HS_FFER6 | HS_FFER7 | HS_FFER8) &
10579 				  phba->work_hs)) {
10580 				phba->hba_flag |= DEFER_ERATT;
10581 				/* Clear all interrupt enable conditions */
10582 				writel(0, phba->HCregaddr);
10583 				readl(phba->HCregaddr);
10584 			}
10585 		}
10586 
10587 		if ((work_ha_copy & HA_MBATT) && (phba->sli.mbox_active)) {
10588 			pmb = phba->sli.mbox_active;
10589 			pmbox = &pmb->u.mb;
10590 			mbox = phba->mbox;
10591 			vport = pmb->vport;
10592 
10593 			/* First check out the status word */
10594 			lpfc_sli_pcimem_bcopy(mbox, pmbox, sizeof(uint32_t));
10595 			if (pmbox->mbxOwner != OWN_HOST) {
10596 				spin_unlock_irqrestore(&phba->hbalock, iflag);
10597 				/*
10598 				 * Stray Mailbox Interrupt, mbxCommand <cmd>
10599 				 * mbxStatus <status>
10600 				 */
10601 				lpfc_printf_log(phba, KERN_ERR, LOG_MBOX |
10602 						LOG_SLI,
10603 						"(%d):0304 Stray Mailbox "
10604 						"Interrupt mbxCommand x%x "
10605 						"mbxStatus x%x\n",
10606 						(vport ? vport->vpi : 0),
10607 						pmbox->mbxCommand,
10608 						pmbox->mbxStatus);
10609 				/* clear mailbox attention bit */
10610 				work_ha_copy &= ~HA_MBATT;
10611 			} else {
10612 				phba->sli.mbox_active = NULL;
10613 				spin_unlock_irqrestore(&phba->hbalock, iflag);
10614 				phba->last_completion_time = jiffies;
10615 				del_timer(&phba->sli.mbox_tmo);
10616 				if (pmb->mbox_cmpl) {
10617 					lpfc_sli_pcimem_bcopy(mbox, pmbox,
10618 							MAILBOX_CMD_SIZE);
10619 					if (pmb->out_ext_byte_len &&
10620 						pmb->context2)
10621 						lpfc_sli_pcimem_bcopy(
10622 						phba->mbox_ext,
10623 						pmb->context2,
10624 						pmb->out_ext_byte_len);
10625 				}
10626 				if (pmb->mbox_flag & LPFC_MBX_IMED_UNREG) {
10627 					pmb->mbox_flag &= ~LPFC_MBX_IMED_UNREG;
10628 
10629 					lpfc_debugfs_disc_trc(vport,
10630 						LPFC_DISC_TRC_MBOX_VPORT,
10631 						"MBOX dflt rpi: : "
10632 						"status:x%x rpi:x%x",
10633 						(uint32_t)pmbox->mbxStatus,
10634 						pmbox->un.varWords[0], 0);
10635 
10636 					if (!pmbox->mbxStatus) {
10637 						mp = (struct lpfc_dmabuf *)
10638 							(pmb->context1);
10639 						ndlp = (struct lpfc_nodelist *)
10640 							pmb->context2;
10641 
10642 						/* Reg_LOGIN of dflt RPI was
10643 						 * successful. new lets get
10644 						 * rid of the RPI using the
10645 						 * same mbox buffer.
10646 						 */
10647 						lpfc_unreg_login(phba,
10648 							vport->vpi,
10649 							pmbox->un.varWords[0],
10650 							pmb);
10651 						pmb->mbox_cmpl =
10652 							lpfc_mbx_cmpl_dflt_rpi;
10653 						pmb->context1 = mp;
10654 						pmb->context2 = ndlp;
10655 						pmb->vport = vport;
10656 						rc = lpfc_sli_issue_mbox(phba,
10657 								pmb,
10658 								MBX_NOWAIT);
10659 						if (rc != MBX_BUSY)
10660 							lpfc_printf_log(phba,
10661 							KERN_ERR,
10662 							LOG_MBOX | LOG_SLI,
10663 							"0350 rc should have"
10664 							"been MBX_BUSY\n");
10665 						if (rc != MBX_NOT_FINISHED)
10666 							goto send_current_mbox;
10667 					}
10668 				}
10669 				spin_lock_irqsave(
10670 						&phba->pport->work_port_lock,
10671 						iflag);
10672 				phba->pport->work_port_events &=
10673 					~WORKER_MBOX_TMO;
10674 				spin_unlock_irqrestore(
10675 						&phba->pport->work_port_lock,
10676 						iflag);
10677 				lpfc_mbox_cmpl_put(phba, pmb);
10678 			}
10679 		} else
10680 			spin_unlock_irqrestore(&phba->hbalock, iflag);
10681 
10682 		if ((work_ha_copy & HA_MBATT) &&
10683 		    (phba->sli.mbox_active == NULL)) {
10684 send_current_mbox:
10685 			/* Process next mailbox command if there is one */
10686 			do {
10687 				rc = lpfc_sli_issue_mbox(phba, NULL,
10688 							 MBX_NOWAIT);
10689 			} while (rc == MBX_NOT_FINISHED);
10690 			if (rc != MBX_SUCCESS)
10691 				lpfc_printf_log(phba, KERN_ERR, LOG_MBOX |
10692 						LOG_SLI, "0349 rc should be "
10693 						"MBX_SUCCESS\n");
10694 		}
10695 
10696 		spin_lock_irqsave(&phba->hbalock, iflag);
10697 		phba->work_ha |= work_ha_copy;
10698 		spin_unlock_irqrestore(&phba->hbalock, iflag);
10699 		lpfc_worker_wake_up(phba);
10700 	}
10701 	return IRQ_HANDLED;
10702 unplug_error:
10703 	spin_unlock_irqrestore(&phba->hbalock, iflag);
10704 	return IRQ_HANDLED;
10705 
10706 } /* lpfc_sli_sp_intr_handler */
10707 
10708 /**
10709  * lpfc_sli_fp_intr_handler - Fast-path interrupt handler to SLI-3 device.
10710  * @irq: Interrupt number.
10711  * @dev_id: The device context pointer.
10712  *
10713  * This function is directly called from the PCI layer as an interrupt
10714  * service routine when device with SLI-3 interface spec is enabled with
10715  * MSI-X multi-message interrupt mode and there is a fast-path FCP IOCB
10716  * ring event in the HBA. However, when the device is enabled with either
10717  * MSI or Pin-IRQ interrupt mode, this function is called as part of the
10718  * device-level interrupt handler. When the PCI slot is in error recovery
10719  * or the HBA is undergoing initialization, the interrupt handler will not
10720  * process the interrupt. The SCSI FCP fast-path ring event are handled in
10721  * the intrrupt context. This function is called without any lock held.
10722  * It gets the hbalock to access and update SLI data structures.
10723  *
10724  * This function returns IRQ_HANDLED when interrupt is handled else it
10725  * returns IRQ_NONE.
10726  **/
10727 irqreturn_t
10728 lpfc_sli_fp_intr_handler(int irq, void *dev_id)
10729 {
10730 	struct lpfc_hba  *phba;
10731 	uint32_t ha_copy;
10732 	unsigned long status;
10733 	unsigned long iflag;
10734 
10735 	/* Get the driver's phba structure from the dev_id and
10736 	 * assume the HBA is not interrupting.
10737 	 */
10738 	phba = (struct lpfc_hba *) dev_id;
10739 
10740 	if (unlikely(!phba))
10741 		return IRQ_NONE;
10742 
10743 	/*
10744 	 * Stuff needs to be attented to when this function is invoked as an
10745 	 * individual interrupt handler in MSI-X multi-message interrupt mode
10746 	 */
10747 	if (phba->intr_type == MSIX) {
10748 		/* Check device state for handling interrupt */
10749 		if (lpfc_intr_state_check(phba))
10750 			return IRQ_NONE;
10751 		/* Need to read HA REG for FCP ring and other ring events */
10752 		if (lpfc_readl(phba->HAregaddr, &ha_copy))
10753 			return IRQ_HANDLED;
10754 		/* Clear up only attention source related to fast-path */
10755 		spin_lock_irqsave(&phba->hbalock, iflag);
10756 		/*
10757 		 * If there is deferred error attention, do not check for
10758 		 * any interrupt.
10759 		 */
10760 		if (unlikely(phba->hba_flag & DEFER_ERATT)) {
10761 			spin_unlock_irqrestore(&phba->hbalock, iflag);
10762 			return IRQ_NONE;
10763 		}
10764 		writel((ha_copy & (HA_R0_CLR_MSK | HA_R1_CLR_MSK)),
10765 			phba->HAregaddr);
10766 		readl(phba->HAregaddr); /* flush */
10767 		spin_unlock_irqrestore(&phba->hbalock, iflag);
10768 	} else
10769 		ha_copy = phba->ha_copy;
10770 
10771 	/*
10772 	 * Process all events on FCP ring. Take the optimized path for FCP IO.
10773 	 */
10774 	ha_copy &= ~(phba->work_ha_mask);
10775 
10776 	status = (ha_copy & (HA_RXMASK << (4*LPFC_FCP_RING)));
10777 	status >>= (4*LPFC_FCP_RING);
10778 	if (status & HA_RXMASK)
10779 		lpfc_sli_handle_fast_ring_event(phba,
10780 						&phba->sli.ring[LPFC_FCP_RING],
10781 						status);
10782 
10783 	if (phba->cfg_multi_ring_support == 2) {
10784 		/*
10785 		 * Process all events on extra ring. Take the optimized path
10786 		 * for extra ring IO.
10787 		 */
10788 		status = (ha_copy & (HA_RXMASK << (4*LPFC_EXTRA_RING)));
10789 		status >>= (4*LPFC_EXTRA_RING);
10790 		if (status & HA_RXMASK) {
10791 			lpfc_sli_handle_fast_ring_event(phba,
10792 					&phba->sli.ring[LPFC_EXTRA_RING],
10793 					status);
10794 		}
10795 	}
10796 	return IRQ_HANDLED;
10797 }  /* lpfc_sli_fp_intr_handler */
10798 
10799 /**
10800  * lpfc_sli_intr_handler - Device-level interrupt handler to SLI-3 device
10801  * @irq: Interrupt number.
10802  * @dev_id: The device context pointer.
10803  *
10804  * This function is the HBA device-level interrupt handler to device with
10805  * SLI-3 interface spec, called from the PCI layer when either MSI or
10806  * Pin-IRQ interrupt mode is enabled and there is an event in the HBA which
10807  * requires driver attention. This function invokes the slow-path interrupt
10808  * attention handling function and fast-path interrupt attention handling
10809  * function in turn to process the relevant HBA attention events. This
10810  * function is called without any lock held. It gets the hbalock to access
10811  * and update SLI data structures.
10812  *
10813  * This function returns IRQ_HANDLED when interrupt is handled, else it
10814  * returns IRQ_NONE.
10815  **/
10816 irqreturn_t
10817 lpfc_sli_intr_handler(int irq, void *dev_id)
10818 {
10819 	struct lpfc_hba  *phba;
10820 	irqreturn_t sp_irq_rc, fp_irq_rc;
10821 	unsigned long status1, status2;
10822 	uint32_t hc_copy;
10823 
10824 	/*
10825 	 * Get the driver's phba structure from the dev_id and
10826 	 * assume the HBA is not interrupting.
10827 	 */
10828 	phba = (struct lpfc_hba *) dev_id;
10829 
10830 	if (unlikely(!phba))
10831 		return IRQ_NONE;
10832 
10833 	/* Check device state for handling interrupt */
10834 	if (lpfc_intr_state_check(phba))
10835 		return IRQ_NONE;
10836 
10837 	spin_lock(&phba->hbalock);
10838 	if (lpfc_readl(phba->HAregaddr, &phba->ha_copy)) {
10839 		spin_unlock(&phba->hbalock);
10840 		return IRQ_HANDLED;
10841 	}
10842 
10843 	if (unlikely(!phba->ha_copy)) {
10844 		spin_unlock(&phba->hbalock);
10845 		return IRQ_NONE;
10846 	} else if (phba->ha_copy & HA_ERATT) {
10847 		if (phba->hba_flag & HBA_ERATT_HANDLED)
10848 			/* ERATT polling has handled ERATT */
10849 			phba->ha_copy &= ~HA_ERATT;
10850 		else
10851 			/* Indicate interrupt handler handles ERATT */
10852 			phba->hba_flag |= HBA_ERATT_HANDLED;
10853 	}
10854 
10855 	/*
10856 	 * If there is deferred error attention, do not check for any interrupt.
10857 	 */
10858 	if (unlikely(phba->hba_flag & DEFER_ERATT)) {
10859 		spin_unlock(&phba->hbalock);
10860 		return IRQ_NONE;
10861 	}
10862 
10863 	/* Clear attention sources except link and error attentions */
10864 	if (lpfc_readl(phba->HCregaddr, &hc_copy)) {
10865 		spin_unlock(&phba->hbalock);
10866 		return IRQ_HANDLED;
10867 	}
10868 	writel(hc_copy & ~(HC_MBINT_ENA | HC_R0INT_ENA | HC_R1INT_ENA
10869 		| HC_R2INT_ENA | HC_LAINT_ENA | HC_ERINT_ENA),
10870 		phba->HCregaddr);
10871 	writel((phba->ha_copy & ~(HA_LATT | HA_ERATT)), phba->HAregaddr);
10872 	writel(hc_copy, phba->HCregaddr);
10873 	readl(phba->HAregaddr); /* flush */
10874 	spin_unlock(&phba->hbalock);
10875 
10876 	/*
10877 	 * Invokes slow-path host attention interrupt handling as appropriate.
10878 	 */
10879 
10880 	/* status of events with mailbox and link attention */
10881 	status1 = phba->ha_copy & (HA_MBATT | HA_LATT | HA_ERATT);
10882 
10883 	/* status of events with ELS ring */
10884 	status2 = (phba->ha_copy & (HA_RXMASK  << (4*LPFC_ELS_RING)));
10885 	status2 >>= (4*LPFC_ELS_RING);
10886 
10887 	if (status1 || (status2 & HA_RXMASK))
10888 		sp_irq_rc = lpfc_sli_sp_intr_handler(irq, dev_id);
10889 	else
10890 		sp_irq_rc = IRQ_NONE;
10891 
10892 	/*
10893 	 * Invoke fast-path host attention interrupt handling as appropriate.
10894 	 */
10895 
10896 	/* status of events with FCP ring */
10897 	status1 = (phba->ha_copy & (HA_RXMASK << (4*LPFC_FCP_RING)));
10898 	status1 >>= (4*LPFC_FCP_RING);
10899 
10900 	/* status of events with extra ring */
10901 	if (phba->cfg_multi_ring_support == 2) {
10902 		status2 = (phba->ha_copy & (HA_RXMASK << (4*LPFC_EXTRA_RING)));
10903 		status2 >>= (4*LPFC_EXTRA_RING);
10904 	} else
10905 		status2 = 0;
10906 
10907 	if ((status1 & HA_RXMASK) || (status2 & HA_RXMASK))
10908 		fp_irq_rc = lpfc_sli_fp_intr_handler(irq, dev_id);
10909 	else
10910 		fp_irq_rc = IRQ_NONE;
10911 
10912 	/* Return device-level interrupt handling status */
10913 	return (sp_irq_rc == IRQ_HANDLED) ? sp_irq_rc : fp_irq_rc;
10914 }  /* lpfc_sli_intr_handler */
10915 
10916 /**
10917  * lpfc_sli4_fcp_xri_abort_event_proc - Process fcp xri abort event
10918  * @phba: pointer to lpfc hba data structure.
10919  *
10920  * This routine is invoked by the worker thread to process all the pending
10921  * SLI4 FCP abort XRI events.
10922  **/
10923 void lpfc_sli4_fcp_xri_abort_event_proc(struct lpfc_hba *phba)
10924 {
10925 	struct lpfc_cq_event *cq_event;
10926 
10927 	/* First, declare the fcp xri abort event has been handled */
10928 	spin_lock_irq(&phba->hbalock);
10929 	phba->hba_flag &= ~FCP_XRI_ABORT_EVENT;
10930 	spin_unlock_irq(&phba->hbalock);
10931 	/* Now, handle all the fcp xri abort events */
10932 	while (!list_empty(&phba->sli4_hba.sp_fcp_xri_aborted_work_queue)) {
10933 		/* Get the first event from the head of the event queue */
10934 		spin_lock_irq(&phba->hbalock);
10935 		list_remove_head(&phba->sli4_hba.sp_fcp_xri_aborted_work_queue,
10936 				 cq_event, struct lpfc_cq_event, list);
10937 		spin_unlock_irq(&phba->hbalock);
10938 		/* Notify aborted XRI for FCP work queue */
10939 		lpfc_sli4_fcp_xri_aborted(phba, &cq_event->cqe.wcqe_axri);
10940 		/* Free the event processed back to the free pool */
10941 		lpfc_sli4_cq_event_release(phba, cq_event);
10942 	}
10943 }
10944 
10945 /**
10946  * lpfc_sli4_els_xri_abort_event_proc - Process els xri abort event
10947  * @phba: pointer to lpfc hba data structure.
10948  *
10949  * This routine is invoked by the worker thread to process all the pending
10950  * SLI4 els abort xri events.
10951  **/
10952 void lpfc_sli4_els_xri_abort_event_proc(struct lpfc_hba *phba)
10953 {
10954 	struct lpfc_cq_event *cq_event;
10955 
10956 	/* First, declare the els xri abort event has been handled */
10957 	spin_lock_irq(&phba->hbalock);
10958 	phba->hba_flag &= ~ELS_XRI_ABORT_EVENT;
10959 	spin_unlock_irq(&phba->hbalock);
10960 	/* Now, handle all the els xri abort events */
10961 	while (!list_empty(&phba->sli4_hba.sp_els_xri_aborted_work_queue)) {
10962 		/* Get the first event from the head of the event queue */
10963 		spin_lock_irq(&phba->hbalock);
10964 		list_remove_head(&phba->sli4_hba.sp_els_xri_aborted_work_queue,
10965 				 cq_event, struct lpfc_cq_event, list);
10966 		spin_unlock_irq(&phba->hbalock);
10967 		/* Notify aborted XRI for ELS work queue */
10968 		lpfc_sli4_els_xri_aborted(phba, &cq_event->cqe.wcqe_axri);
10969 		/* Free the event processed back to the free pool */
10970 		lpfc_sli4_cq_event_release(phba, cq_event);
10971 	}
10972 }
10973 
10974 /**
10975  * lpfc_sli4_iocb_param_transfer - Transfer pIocbOut and cmpl status to pIocbIn
10976  * @phba: pointer to lpfc hba data structure
10977  * @pIocbIn: pointer to the rspiocbq
10978  * @pIocbOut: pointer to the cmdiocbq
10979  * @wcqe: pointer to the complete wcqe
10980  *
10981  * This routine transfers the fields of a command iocbq to a response iocbq
10982  * by copying all the IOCB fields from command iocbq and transferring the
10983  * completion status information from the complete wcqe.
10984  **/
10985 static void
10986 lpfc_sli4_iocb_param_transfer(struct lpfc_hba *phba,
10987 			      struct lpfc_iocbq *pIocbIn,
10988 			      struct lpfc_iocbq *pIocbOut,
10989 			      struct lpfc_wcqe_complete *wcqe)
10990 {
10991 	unsigned long iflags;
10992 	uint32_t status;
10993 	size_t offset = offsetof(struct lpfc_iocbq, iocb);
10994 
10995 	memcpy((char *)pIocbIn + offset, (char *)pIocbOut + offset,
10996 	       sizeof(struct lpfc_iocbq) - offset);
10997 	/* Map WCQE parameters into irspiocb parameters */
10998 	status = bf_get(lpfc_wcqe_c_status, wcqe);
10999 	pIocbIn->iocb.ulpStatus = (status & LPFC_IOCB_STATUS_MASK);
11000 	if (pIocbOut->iocb_flag & LPFC_IO_FCP)
11001 		if (pIocbIn->iocb.ulpStatus == IOSTAT_FCP_RSP_ERROR)
11002 			pIocbIn->iocb.un.fcpi.fcpi_parm =
11003 					pIocbOut->iocb.un.fcpi.fcpi_parm -
11004 					wcqe->total_data_placed;
11005 		else
11006 			pIocbIn->iocb.un.ulpWord[4] = wcqe->parameter;
11007 	else {
11008 		pIocbIn->iocb.un.ulpWord[4] = wcqe->parameter;
11009 		pIocbIn->iocb.un.genreq64.bdl.bdeSize = wcqe->total_data_placed;
11010 	}
11011 
11012 	/* Convert BG errors for completion status */
11013 	if (status == CQE_STATUS_DI_ERROR) {
11014 		pIocbIn->iocb.ulpStatus = IOSTAT_LOCAL_REJECT;
11015 
11016 		if (bf_get(lpfc_wcqe_c_bg_edir, wcqe))
11017 			pIocbIn->iocb.un.ulpWord[4] = IOERR_RX_DMA_FAILED;
11018 		else
11019 			pIocbIn->iocb.un.ulpWord[4] = IOERR_TX_DMA_FAILED;
11020 
11021 		pIocbIn->iocb.unsli3.sli3_bg.bgstat = 0;
11022 		if (bf_get(lpfc_wcqe_c_bg_ge, wcqe)) /* Guard Check failed */
11023 			pIocbIn->iocb.unsli3.sli3_bg.bgstat |=
11024 				BGS_GUARD_ERR_MASK;
11025 		if (bf_get(lpfc_wcqe_c_bg_ae, wcqe)) /* App Tag Check failed */
11026 			pIocbIn->iocb.unsli3.sli3_bg.bgstat |=
11027 				BGS_APPTAG_ERR_MASK;
11028 		if (bf_get(lpfc_wcqe_c_bg_re, wcqe)) /* Ref Tag Check failed */
11029 			pIocbIn->iocb.unsli3.sli3_bg.bgstat |=
11030 				BGS_REFTAG_ERR_MASK;
11031 
11032 		/* Check to see if there was any good data before the error */
11033 		if (bf_get(lpfc_wcqe_c_bg_tdpv, wcqe)) {
11034 			pIocbIn->iocb.unsli3.sli3_bg.bgstat |=
11035 				BGS_HI_WATER_MARK_PRESENT_MASK;
11036 			pIocbIn->iocb.unsli3.sli3_bg.bghm =
11037 				wcqe->total_data_placed;
11038 		}
11039 
11040 		/*
11041 		* Set ALL the error bits to indicate we don't know what
11042 		* type of error it is.
11043 		*/
11044 		if (!pIocbIn->iocb.unsli3.sli3_bg.bgstat)
11045 			pIocbIn->iocb.unsli3.sli3_bg.bgstat |=
11046 				(BGS_REFTAG_ERR_MASK | BGS_APPTAG_ERR_MASK |
11047 				BGS_GUARD_ERR_MASK);
11048 	}
11049 
11050 	/* Pick up HBA exchange busy condition */
11051 	if (bf_get(lpfc_wcqe_c_xb, wcqe)) {
11052 		spin_lock_irqsave(&phba->hbalock, iflags);
11053 		pIocbIn->iocb_flag |= LPFC_EXCHANGE_BUSY;
11054 		spin_unlock_irqrestore(&phba->hbalock, iflags);
11055 	}
11056 }
11057 
11058 /**
11059  * lpfc_sli4_els_wcqe_to_rspiocbq - Get response iocbq from els wcqe
11060  * @phba: Pointer to HBA context object.
11061  * @wcqe: Pointer to work-queue completion queue entry.
11062  *
11063  * This routine handles an ELS work-queue completion event and construct
11064  * a pseudo response ELS IODBQ from the SLI4 ELS WCQE for the common
11065  * discovery engine to handle.
11066  *
11067  * Return: Pointer to the receive IOCBQ, NULL otherwise.
11068  **/
11069 static struct lpfc_iocbq *
11070 lpfc_sli4_els_wcqe_to_rspiocbq(struct lpfc_hba *phba,
11071 			       struct lpfc_iocbq *irspiocbq)
11072 {
11073 	struct lpfc_sli_ring *pring = &phba->sli.ring[LPFC_ELS_RING];
11074 	struct lpfc_iocbq *cmdiocbq;
11075 	struct lpfc_wcqe_complete *wcqe;
11076 	unsigned long iflags;
11077 
11078 	wcqe = &irspiocbq->cq_event.cqe.wcqe_cmpl;
11079 	spin_lock_irqsave(&pring->ring_lock, iflags);
11080 	pring->stats.iocb_event++;
11081 	/* Look up the ELS command IOCB and create pseudo response IOCB */
11082 	cmdiocbq = lpfc_sli_iocbq_lookup_by_tag(phba, pring,
11083 				bf_get(lpfc_wcqe_c_request_tag, wcqe));
11084 	spin_unlock_irqrestore(&pring->ring_lock, iflags);
11085 
11086 	if (unlikely(!cmdiocbq)) {
11087 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
11088 				"0386 ELS complete with no corresponding "
11089 				"cmdiocb: iotag (%d)\n",
11090 				bf_get(lpfc_wcqe_c_request_tag, wcqe));
11091 		lpfc_sli_release_iocbq(phba, irspiocbq);
11092 		return NULL;
11093 	}
11094 
11095 	/* Fake the irspiocbq and copy necessary response information */
11096 	lpfc_sli4_iocb_param_transfer(phba, irspiocbq, cmdiocbq, wcqe);
11097 
11098 	return irspiocbq;
11099 }
11100 
11101 /**
11102  * lpfc_sli4_sp_handle_async_event - Handle an asynchroous event
11103  * @phba: Pointer to HBA context object.
11104  * @cqe: Pointer to mailbox completion queue entry.
11105  *
11106  * This routine process a mailbox completion queue entry with asynchrous
11107  * event.
11108  *
11109  * Return: true if work posted to worker thread, otherwise false.
11110  **/
11111 static bool
11112 lpfc_sli4_sp_handle_async_event(struct lpfc_hba *phba, struct lpfc_mcqe *mcqe)
11113 {
11114 	struct lpfc_cq_event *cq_event;
11115 	unsigned long iflags;
11116 
11117 	lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
11118 			"0392 Async Event: word0:x%x, word1:x%x, "
11119 			"word2:x%x, word3:x%x\n", mcqe->word0,
11120 			mcqe->mcqe_tag0, mcqe->mcqe_tag1, mcqe->trailer);
11121 
11122 	/* Allocate a new internal CQ_EVENT entry */
11123 	cq_event = lpfc_sli4_cq_event_alloc(phba);
11124 	if (!cq_event) {
11125 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11126 				"0394 Failed to allocate CQ_EVENT entry\n");
11127 		return false;
11128 	}
11129 
11130 	/* Move the CQE into an asynchronous event entry */
11131 	memcpy(&cq_event->cqe, mcqe, sizeof(struct lpfc_mcqe));
11132 	spin_lock_irqsave(&phba->hbalock, iflags);
11133 	list_add_tail(&cq_event->list, &phba->sli4_hba.sp_asynce_work_queue);
11134 	/* Set the async event flag */
11135 	phba->hba_flag |= ASYNC_EVENT;
11136 	spin_unlock_irqrestore(&phba->hbalock, iflags);
11137 
11138 	return true;
11139 }
11140 
11141 /**
11142  * lpfc_sli4_sp_handle_mbox_event - Handle a mailbox completion event
11143  * @phba: Pointer to HBA context object.
11144  * @cqe: Pointer to mailbox completion queue entry.
11145  *
11146  * This routine process a mailbox completion queue entry with mailbox
11147  * completion event.
11148  *
11149  * Return: true if work posted to worker thread, otherwise false.
11150  **/
11151 static bool
11152 lpfc_sli4_sp_handle_mbox_event(struct lpfc_hba *phba, struct lpfc_mcqe *mcqe)
11153 {
11154 	uint32_t mcqe_status;
11155 	MAILBOX_t *mbox, *pmbox;
11156 	struct lpfc_mqe *mqe;
11157 	struct lpfc_vport *vport;
11158 	struct lpfc_nodelist *ndlp;
11159 	struct lpfc_dmabuf *mp;
11160 	unsigned long iflags;
11161 	LPFC_MBOXQ_t *pmb;
11162 	bool workposted = false;
11163 	int rc;
11164 
11165 	/* If not a mailbox complete MCQE, out by checking mailbox consume */
11166 	if (!bf_get(lpfc_trailer_completed, mcqe))
11167 		goto out_no_mqe_complete;
11168 
11169 	/* Get the reference to the active mbox command */
11170 	spin_lock_irqsave(&phba->hbalock, iflags);
11171 	pmb = phba->sli.mbox_active;
11172 	if (unlikely(!pmb)) {
11173 		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
11174 				"1832 No pending MBOX command to handle\n");
11175 		spin_unlock_irqrestore(&phba->hbalock, iflags);
11176 		goto out_no_mqe_complete;
11177 	}
11178 	spin_unlock_irqrestore(&phba->hbalock, iflags);
11179 	mqe = &pmb->u.mqe;
11180 	pmbox = (MAILBOX_t *)&pmb->u.mqe;
11181 	mbox = phba->mbox;
11182 	vport = pmb->vport;
11183 
11184 	/* Reset heartbeat timer */
11185 	phba->last_completion_time = jiffies;
11186 	del_timer(&phba->sli.mbox_tmo);
11187 
11188 	/* Move mbox data to caller's mailbox region, do endian swapping */
11189 	if (pmb->mbox_cmpl && mbox)
11190 		lpfc_sli_pcimem_bcopy(mbox, mqe, sizeof(struct lpfc_mqe));
11191 
11192 	/*
11193 	 * For mcqe errors, conditionally move a modified error code to
11194 	 * the mbox so that the error will not be missed.
11195 	 */
11196 	mcqe_status = bf_get(lpfc_mcqe_status, mcqe);
11197 	if (mcqe_status != MB_CQE_STATUS_SUCCESS) {
11198 		if (bf_get(lpfc_mqe_status, mqe) == MBX_SUCCESS)
11199 			bf_set(lpfc_mqe_status, mqe,
11200 			       (LPFC_MBX_ERROR_RANGE | mcqe_status));
11201 	}
11202 	if (pmb->mbox_flag & LPFC_MBX_IMED_UNREG) {
11203 		pmb->mbox_flag &= ~LPFC_MBX_IMED_UNREG;
11204 		lpfc_debugfs_disc_trc(vport, LPFC_DISC_TRC_MBOX_VPORT,
11205 				      "MBOX dflt rpi: status:x%x rpi:x%x",
11206 				      mcqe_status,
11207 				      pmbox->un.varWords[0], 0);
11208 		if (mcqe_status == MB_CQE_STATUS_SUCCESS) {
11209 			mp = (struct lpfc_dmabuf *)(pmb->context1);
11210 			ndlp = (struct lpfc_nodelist *)pmb->context2;
11211 			/* Reg_LOGIN of dflt RPI was successful. Now lets get
11212 			 * RID of the PPI using the same mbox buffer.
11213 			 */
11214 			lpfc_unreg_login(phba, vport->vpi,
11215 					 pmbox->un.varWords[0], pmb);
11216 			pmb->mbox_cmpl = lpfc_mbx_cmpl_dflt_rpi;
11217 			pmb->context1 = mp;
11218 			pmb->context2 = ndlp;
11219 			pmb->vport = vport;
11220 			rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
11221 			if (rc != MBX_BUSY)
11222 				lpfc_printf_log(phba, KERN_ERR, LOG_MBOX |
11223 						LOG_SLI, "0385 rc should "
11224 						"have been MBX_BUSY\n");
11225 			if (rc != MBX_NOT_FINISHED)
11226 				goto send_current_mbox;
11227 		}
11228 	}
11229 	spin_lock_irqsave(&phba->pport->work_port_lock, iflags);
11230 	phba->pport->work_port_events &= ~WORKER_MBOX_TMO;
11231 	spin_unlock_irqrestore(&phba->pport->work_port_lock, iflags);
11232 
11233 	/* There is mailbox completion work to do */
11234 	spin_lock_irqsave(&phba->hbalock, iflags);
11235 	__lpfc_mbox_cmpl_put(phba, pmb);
11236 	phba->work_ha |= HA_MBATT;
11237 	spin_unlock_irqrestore(&phba->hbalock, iflags);
11238 	workposted = true;
11239 
11240 send_current_mbox:
11241 	spin_lock_irqsave(&phba->hbalock, iflags);
11242 	/* Release the mailbox command posting token */
11243 	phba->sli.sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
11244 	/* Setting active mailbox pointer need to be in sync to flag clear */
11245 	phba->sli.mbox_active = NULL;
11246 	spin_unlock_irqrestore(&phba->hbalock, iflags);
11247 	/* Wake up worker thread to post the next pending mailbox command */
11248 	lpfc_worker_wake_up(phba);
11249 out_no_mqe_complete:
11250 	if (bf_get(lpfc_trailer_consumed, mcqe))
11251 		lpfc_sli4_mq_release(phba->sli4_hba.mbx_wq);
11252 	return workposted;
11253 }
11254 
11255 /**
11256  * lpfc_sli4_sp_handle_mcqe - Process a mailbox completion queue entry
11257  * @phba: Pointer to HBA context object.
11258  * @cqe: Pointer to mailbox completion queue entry.
11259  *
11260  * This routine process a mailbox completion queue entry, it invokes the
11261  * proper mailbox complete handling or asynchrous event handling routine
11262  * according to the MCQE's async bit.
11263  *
11264  * Return: true if work posted to worker thread, otherwise false.
11265  **/
11266 static bool
11267 lpfc_sli4_sp_handle_mcqe(struct lpfc_hba *phba, struct lpfc_cqe *cqe)
11268 {
11269 	struct lpfc_mcqe mcqe;
11270 	bool workposted;
11271 
11272 	/* Copy the mailbox MCQE and convert endian order as needed */
11273 	lpfc_sli_pcimem_bcopy(cqe, &mcqe, sizeof(struct lpfc_mcqe));
11274 
11275 	/* Invoke the proper event handling routine */
11276 	if (!bf_get(lpfc_trailer_async, &mcqe))
11277 		workposted = lpfc_sli4_sp_handle_mbox_event(phba, &mcqe);
11278 	else
11279 		workposted = lpfc_sli4_sp_handle_async_event(phba, &mcqe);
11280 	return workposted;
11281 }
11282 
11283 /**
11284  * lpfc_sli4_sp_handle_els_wcqe - Handle els work-queue completion event
11285  * @phba: Pointer to HBA context object.
11286  * @cq: Pointer to associated CQ
11287  * @wcqe: Pointer to work-queue completion queue entry.
11288  *
11289  * This routine handles an ELS work-queue completion event.
11290  *
11291  * Return: true if work posted to worker thread, otherwise false.
11292  **/
11293 static bool
11294 lpfc_sli4_sp_handle_els_wcqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
11295 			     struct lpfc_wcqe_complete *wcqe)
11296 {
11297 	struct lpfc_iocbq *irspiocbq;
11298 	unsigned long iflags;
11299 	struct lpfc_sli_ring *pring = cq->pring;
11300 
11301 	/* Get an irspiocbq for later ELS response processing use */
11302 	irspiocbq = lpfc_sli_get_iocbq(phba);
11303 	if (!irspiocbq) {
11304 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11305 			"0387 NO IOCBQ data: txq_cnt=%d iocb_cnt=%d "
11306 			"fcp_txcmplq_cnt=%d, els_txcmplq_cnt=%d\n",
11307 			pring->txq_cnt, phba->iocb_cnt,
11308 			phba->sli.ring[LPFC_FCP_RING].txcmplq_cnt,
11309 			phba->sli.ring[LPFC_ELS_RING].txcmplq_cnt);
11310 		return false;
11311 	}
11312 
11313 	/* Save off the slow-path queue event for work thread to process */
11314 	memcpy(&irspiocbq->cq_event.cqe.wcqe_cmpl, wcqe, sizeof(*wcqe));
11315 	spin_lock_irqsave(&phba->hbalock, iflags);
11316 	list_add_tail(&irspiocbq->cq_event.list,
11317 		      &phba->sli4_hba.sp_queue_event);
11318 	phba->hba_flag |= HBA_SP_QUEUE_EVT;
11319 	spin_unlock_irqrestore(&phba->hbalock, iflags);
11320 
11321 	return true;
11322 }
11323 
11324 /**
11325  * lpfc_sli4_sp_handle_rel_wcqe - Handle slow-path WQ entry consumed event
11326  * @phba: Pointer to HBA context object.
11327  * @wcqe: Pointer to work-queue completion queue entry.
11328  *
11329  * This routine handles slow-path WQ entry comsumed event by invoking the
11330  * proper WQ release routine to the slow-path WQ.
11331  **/
11332 static void
11333 lpfc_sli4_sp_handle_rel_wcqe(struct lpfc_hba *phba,
11334 			     struct lpfc_wcqe_release *wcqe)
11335 {
11336 	/* sanity check on queue memory */
11337 	if (unlikely(!phba->sli4_hba.els_wq))
11338 		return;
11339 	/* Check for the slow-path ELS work queue */
11340 	if (bf_get(lpfc_wcqe_r_wq_id, wcqe) == phba->sli4_hba.els_wq->queue_id)
11341 		lpfc_sli4_wq_release(phba->sli4_hba.els_wq,
11342 				     bf_get(lpfc_wcqe_r_wqe_index, wcqe));
11343 	else
11344 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
11345 				"2579 Slow-path wqe consume event carries "
11346 				"miss-matched qid: wcqe-qid=x%x, sp-qid=x%x\n",
11347 				bf_get(lpfc_wcqe_r_wqe_index, wcqe),
11348 				phba->sli4_hba.els_wq->queue_id);
11349 }
11350 
11351 /**
11352  * lpfc_sli4_sp_handle_abort_xri_wcqe - Handle a xri abort event
11353  * @phba: Pointer to HBA context object.
11354  * @cq: Pointer to a WQ completion queue.
11355  * @wcqe: Pointer to work-queue completion queue entry.
11356  *
11357  * This routine handles an XRI abort event.
11358  *
11359  * Return: true if work posted to worker thread, otherwise false.
11360  **/
11361 static bool
11362 lpfc_sli4_sp_handle_abort_xri_wcqe(struct lpfc_hba *phba,
11363 				   struct lpfc_queue *cq,
11364 				   struct sli4_wcqe_xri_aborted *wcqe)
11365 {
11366 	bool workposted = false;
11367 	struct lpfc_cq_event *cq_event;
11368 	unsigned long iflags;
11369 
11370 	/* Allocate a new internal CQ_EVENT entry */
11371 	cq_event = lpfc_sli4_cq_event_alloc(phba);
11372 	if (!cq_event) {
11373 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11374 				"0602 Failed to allocate CQ_EVENT entry\n");
11375 		return false;
11376 	}
11377 
11378 	/* Move the CQE into the proper xri abort event list */
11379 	memcpy(&cq_event->cqe, wcqe, sizeof(struct sli4_wcqe_xri_aborted));
11380 	switch (cq->subtype) {
11381 	case LPFC_FCP:
11382 		spin_lock_irqsave(&phba->hbalock, iflags);
11383 		list_add_tail(&cq_event->list,
11384 			      &phba->sli4_hba.sp_fcp_xri_aborted_work_queue);
11385 		/* Set the fcp xri abort event flag */
11386 		phba->hba_flag |= FCP_XRI_ABORT_EVENT;
11387 		spin_unlock_irqrestore(&phba->hbalock, iflags);
11388 		workposted = true;
11389 		break;
11390 	case LPFC_ELS:
11391 		spin_lock_irqsave(&phba->hbalock, iflags);
11392 		list_add_tail(&cq_event->list,
11393 			      &phba->sli4_hba.sp_els_xri_aborted_work_queue);
11394 		/* Set the els xri abort event flag */
11395 		phba->hba_flag |= ELS_XRI_ABORT_EVENT;
11396 		spin_unlock_irqrestore(&phba->hbalock, iflags);
11397 		workposted = true;
11398 		break;
11399 	default:
11400 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11401 				"0603 Invalid work queue CQE subtype (x%x)\n",
11402 				cq->subtype);
11403 		workposted = false;
11404 		break;
11405 	}
11406 	return workposted;
11407 }
11408 
11409 /**
11410  * lpfc_sli4_sp_handle_rcqe - Process a receive-queue completion queue entry
11411  * @phba: Pointer to HBA context object.
11412  * @rcqe: Pointer to receive-queue completion queue entry.
11413  *
11414  * This routine process a receive-queue completion queue entry.
11415  *
11416  * Return: true if work posted to worker thread, otherwise false.
11417  **/
11418 static bool
11419 lpfc_sli4_sp_handle_rcqe(struct lpfc_hba *phba, struct lpfc_rcqe *rcqe)
11420 {
11421 	bool workposted = false;
11422 	struct lpfc_queue *hrq = phba->sli4_hba.hdr_rq;
11423 	struct lpfc_queue *drq = phba->sli4_hba.dat_rq;
11424 	struct hbq_dmabuf *dma_buf;
11425 	uint32_t status, rq_id;
11426 	unsigned long iflags;
11427 
11428 	/* sanity check on queue memory */
11429 	if (unlikely(!hrq) || unlikely(!drq))
11430 		return workposted;
11431 
11432 	if (bf_get(lpfc_cqe_code, rcqe) == CQE_CODE_RECEIVE_V1)
11433 		rq_id = bf_get(lpfc_rcqe_rq_id_v1, rcqe);
11434 	else
11435 		rq_id = bf_get(lpfc_rcqe_rq_id, rcqe);
11436 	if (rq_id != hrq->queue_id)
11437 		goto out;
11438 
11439 	status = bf_get(lpfc_rcqe_status, rcqe);
11440 	switch (status) {
11441 	case FC_STATUS_RQ_BUF_LEN_EXCEEDED:
11442 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11443 				"2537 Receive Frame Truncated!!\n");
11444 		hrq->RQ_buf_trunc++;
11445 	case FC_STATUS_RQ_SUCCESS:
11446 		lpfc_sli4_rq_release(hrq, drq);
11447 		spin_lock_irqsave(&phba->hbalock, iflags);
11448 		dma_buf = lpfc_sli_hbqbuf_get(&phba->hbqs[0].hbq_buffer_list);
11449 		if (!dma_buf) {
11450 			hrq->RQ_no_buf_found++;
11451 			spin_unlock_irqrestore(&phba->hbalock, iflags);
11452 			goto out;
11453 		}
11454 		hrq->RQ_rcv_buf++;
11455 		memcpy(&dma_buf->cq_event.cqe.rcqe_cmpl, rcqe, sizeof(*rcqe));
11456 		/* save off the frame for the word thread to process */
11457 		list_add_tail(&dma_buf->cq_event.list,
11458 			      &phba->sli4_hba.sp_queue_event);
11459 		/* Frame received */
11460 		phba->hba_flag |= HBA_SP_QUEUE_EVT;
11461 		spin_unlock_irqrestore(&phba->hbalock, iflags);
11462 		workposted = true;
11463 		break;
11464 	case FC_STATUS_INSUFF_BUF_NEED_BUF:
11465 	case FC_STATUS_INSUFF_BUF_FRM_DISC:
11466 		hrq->RQ_no_posted_buf++;
11467 		/* Post more buffers if possible */
11468 		spin_lock_irqsave(&phba->hbalock, iflags);
11469 		phba->hba_flag |= HBA_POST_RECEIVE_BUFFER;
11470 		spin_unlock_irqrestore(&phba->hbalock, iflags);
11471 		workposted = true;
11472 		break;
11473 	}
11474 out:
11475 	return workposted;
11476 }
11477 
11478 /**
11479  * lpfc_sli4_sp_handle_cqe - Process a slow path completion queue entry
11480  * @phba: Pointer to HBA context object.
11481  * @cq: Pointer to the completion queue.
11482  * @wcqe: Pointer to a completion queue entry.
11483  *
11484  * This routine process a slow-path work-queue or receive queue completion queue
11485  * entry.
11486  *
11487  * Return: true if work posted to worker thread, otherwise false.
11488  **/
11489 static bool
11490 lpfc_sli4_sp_handle_cqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
11491 			 struct lpfc_cqe *cqe)
11492 {
11493 	struct lpfc_cqe cqevt;
11494 	bool workposted = false;
11495 
11496 	/* Copy the work queue CQE and convert endian order if needed */
11497 	lpfc_sli_pcimem_bcopy(cqe, &cqevt, sizeof(struct lpfc_cqe));
11498 
11499 	/* Check and process for different type of WCQE and dispatch */
11500 	switch (bf_get(lpfc_cqe_code, &cqevt)) {
11501 	case CQE_CODE_COMPL_WQE:
11502 		/* Process the WQ/RQ complete event */
11503 		phba->last_completion_time = jiffies;
11504 		workposted = lpfc_sli4_sp_handle_els_wcqe(phba, cq,
11505 				(struct lpfc_wcqe_complete *)&cqevt);
11506 		break;
11507 	case CQE_CODE_RELEASE_WQE:
11508 		/* Process the WQ release event */
11509 		lpfc_sli4_sp_handle_rel_wcqe(phba,
11510 				(struct lpfc_wcqe_release *)&cqevt);
11511 		break;
11512 	case CQE_CODE_XRI_ABORTED:
11513 		/* Process the WQ XRI abort event */
11514 		phba->last_completion_time = jiffies;
11515 		workposted = lpfc_sli4_sp_handle_abort_xri_wcqe(phba, cq,
11516 				(struct sli4_wcqe_xri_aborted *)&cqevt);
11517 		break;
11518 	case CQE_CODE_RECEIVE:
11519 	case CQE_CODE_RECEIVE_V1:
11520 		/* Process the RQ event */
11521 		phba->last_completion_time = jiffies;
11522 		workposted = lpfc_sli4_sp_handle_rcqe(phba,
11523 				(struct lpfc_rcqe *)&cqevt);
11524 		break;
11525 	default:
11526 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11527 				"0388 Not a valid WCQE code: x%x\n",
11528 				bf_get(lpfc_cqe_code, &cqevt));
11529 		break;
11530 	}
11531 	return workposted;
11532 }
11533 
11534 /**
11535  * lpfc_sli4_sp_handle_eqe - Process a slow-path event queue entry
11536  * @phba: Pointer to HBA context object.
11537  * @eqe: Pointer to fast-path event queue entry.
11538  *
11539  * This routine process a event queue entry from the slow-path event queue.
11540  * It will check the MajorCode and MinorCode to determine this is for a
11541  * completion event on a completion queue, if not, an error shall be logged
11542  * and just return. Otherwise, it will get to the corresponding completion
11543  * queue and process all the entries on that completion queue, rearm the
11544  * completion queue, and then return.
11545  *
11546  **/
11547 static void
11548 lpfc_sli4_sp_handle_eqe(struct lpfc_hba *phba, struct lpfc_eqe *eqe,
11549 	struct lpfc_queue *speq)
11550 {
11551 	struct lpfc_queue *cq = NULL, *childq;
11552 	struct lpfc_cqe *cqe;
11553 	bool workposted = false;
11554 	int ecount = 0;
11555 	uint16_t cqid;
11556 
11557 	/* Get the reference to the corresponding CQ */
11558 	cqid = bf_get_le32(lpfc_eqe_resource_id, eqe);
11559 
11560 	list_for_each_entry(childq, &speq->child_list, list) {
11561 		if (childq->queue_id == cqid) {
11562 			cq = childq;
11563 			break;
11564 		}
11565 	}
11566 	if (unlikely(!cq)) {
11567 		if (phba->sli.sli_flag & LPFC_SLI_ACTIVE)
11568 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11569 					"0365 Slow-path CQ identifier "
11570 					"(%d) does not exist\n", cqid);
11571 		return;
11572 	}
11573 
11574 	/* Process all the entries to the CQ */
11575 	switch (cq->type) {
11576 	case LPFC_MCQ:
11577 		while ((cqe = lpfc_sli4_cq_get(cq))) {
11578 			workposted |= lpfc_sli4_sp_handle_mcqe(phba, cqe);
11579 			if (!(++ecount % cq->entry_repost))
11580 				lpfc_sli4_cq_release(cq, LPFC_QUEUE_NOARM);
11581 			cq->CQ_mbox++;
11582 		}
11583 		break;
11584 	case LPFC_WCQ:
11585 		while ((cqe = lpfc_sli4_cq_get(cq))) {
11586 			if (cq->subtype == LPFC_FCP)
11587 				workposted |= lpfc_sli4_fp_handle_wcqe(phba, cq,
11588 								       cqe);
11589 			else
11590 				workposted |= lpfc_sli4_sp_handle_cqe(phba, cq,
11591 								      cqe);
11592 			if (!(++ecount % cq->entry_repost))
11593 				lpfc_sli4_cq_release(cq, LPFC_QUEUE_NOARM);
11594 		}
11595 
11596 		/* Track the max number of CQEs processed in 1 EQ */
11597 		if (ecount > cq->CQ_max_cqe)
11598 			cq->CQ_max_cqe = ecount;
11599 		break;
11600 	default:
11601 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11602 				"0370 Invalid completion queue type (%d)\n",
11603 				cq->type);
11604 		return;
11605 	}
11606 
11607 	/* Catch the no cq entry condition, log an error */
11608 	if (unlikely(ecount == 0))
11609 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11610 				"0371 No entry from the CQ: identifier "
11611 				"(x%x), type (%d)\n", cq->queue_id, cq->type);
11612 
11613 	/* In any case, flash and re-arm the RCQ */
11614 	lpfc_sli4_cq_release(cq, LPFC_QUEUE_REARM);
11615 
11616 	/* wake up worker thread if there are works to be done */
11617 	if (workposted)
11618 		lpfc_worker_wake_up(phba);
11619 }
11620 
11621 /**
11622  * lpfc_sli4_fp_handle_fcp_wcqe - Process fast-path work queue completion entry
11623  * @phba: Pointer to HBA context object.
11624  * @cq: Pointer to associated CQ
11625  * @wcqe: Pointer to work-queue completion queue entry.
11626  *
11627  * This routine process a fast-path work queue completion entry from fast-path
11628  * event queue for FCP command response completion.
11629  **/
11630 static void
11631 lpfc_sli4_fp_handle_fcp_wcqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
11632 			     struct lpfc_wcqe_complete *wcqe)
11633 {
11634 	struct lpfc_sli_ring *pring = cq->pring;
11635 	struct lpfc_iocbq *cmdiocbq;
11636 	struct lpfc_iocbq irspiocbq;
11637 	unsigned long iflags;
11638 
11639 	/* Check for response status */
11640 	if (unlikely(bf_get(lpfc_wcqe_c_status, wcqe))) {
11641 		/* If resource errors reported from HBA, reduce queue
11642 		 * depth of the SCSI device.
11643 		 */
11644 		if (((bf_get(lpfc_wcqe_c_status, wcqe) ==
11645 		     IOSTAT_LOCAL_REJECT)) &&
11646 		    ((wcqe->parameter & IOERR_PARAM_MASK) ==
11647 		     IOERR_NO_RESOURCES))
11648 			phba->lpfc_rampdown_queue_depth(phba);
11649 
11650 		/* Log the error status */
11651 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
11652 				"0373 FCP complete error: status=x%x, "
11653 				"hw_status=x%x, total_data_specified=%d, "
11654 				"parameter=x%x, word3=x%x\n",
11655 				bf_get(lpfc_wcqe_c_status, wcqe),
11656 				bf_get(lpfc_wcqe_c_hw_status, wcqe),
11657 				wcqe->total_data_placed, wcqe->parameter,
11658 				wcqe->word3);
11659 	}
11660 
11661 	/* Look up the FCP command IOCB and create pseudo response IOCB */
11662 	spin_lock_irqsave(&pring->ring_lock, iflags);
11663 	pring->stats.iocb_event++;
11664 	cmdiocbq = lpfc_sli_iocbq_lookup_by_tag(phba, pring,
11665 				bf_get(lpfc_wcqe_c_request_tag, wcqe));
11666 	spin_unlock_irqrestore(&pring->ring_lock, iflags);
11667 	if (unlikely(!cmdiocbq)) {
11668 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
11669 				"0374 FCP complete with no corresponding "
11670 				"cmdiocb: iotag (%d)\n",
11671 				bf_get(lpfc_wcqe_c_request_tag, wcqe));
11672 		return;
11673 	}
11674 	if (unlikely(!cmdiocbq->iocb_cmpl)) {
11675 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
11676 				"0375 FCP cmdiocb not callback function "
11677 				"iotag: (%d)\n",
11678 				bf_get(lpfc_wcqe_c_request_tag, wcqe));
11679 		return;
11680 	}
11681 
11682 	/* Fake the irspiocb and copy necessary response information */
11683 	lpfc_sli4_iocb_param_transfer(phba, &irspiocbq, cmdiocbq, wcqe);
11684 
11685 	if (cmdiocbq->iocb_flag & LPFC_DRIVER_ABORTED) {
11686 		spin_lock_irqsave(&phba->hbalock, iflags);
11687 		cmdiocbq->iocb_flag &= ~LPFC_DRIVER_ABORTED;
11688 		spin_unlock_irqrestore(&phba->hbalock, iflags);
11689 	}
11690 
11691 	/* Pass the cmd_iocb and the rsp state to the upper layer */
11692 	(cmdiocbq->iocb_cmpl)(phba, cmdiocbq, &irspiocbq);
11693 }
11694 
11695 /**
11696  * lpfc_sli4_fp_handle_rel_wcqe - Handle fast-path WQ entry consumed event
11697  * @phba: Pointer to HBA context object.
11698  * @cq: Pointer to completion queue.
11699  * @wcqe: Pointer to work-queue completion queue entry.
11700  *
11701  * This routine handles an fast-path WQ entry comsumed event by invoking the
11702  * proper WQ release routine to the slow-path WQ.
11703  **/
11704 static void
11705 lpfc_sli4_fp_handle_rel_wcqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
11706 			     struct lpfc_wcqe_release *wcqe)
11707 {
11708 	struct lpfc_queue *childwq;
11709 	bool wqid_matched = false;
11710 	uint16_t fcp_wqid;
11711 
11712 	/* Check for fast-path FCP work queue release */
11713 	fcp_wqid = bf_get(lpfc_wcqe_r_wq_id, wcqe);
11714 	list_for_each_entry(childwq, &cq->child_list, list) {
11715 		if (childwq->queue_id == fcp_wqid) {
11716 			lpfc_sli4_wq_release(childwq,
11717 					bf_get(lpfc_wcqe_r_wqe_index, wcqe));
11718 			wqid_matched = true;
11719 			break;
11720 		}
11721 	}
11722 	/* Report warning log message if no match found */
11723 	if (wqid_matched != true)
11724 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
11725 				"2580 Fast-path wqe consume event carries "
11726 				"miss-matched qid: wcqe-qid=x%x\n", fcp_wqid);
11727 }
11728 
11729 /**
11730  * lpfc_sli4_fp_handle_wcqe - Process fast-path work queue completion entry
11731  * @cq: Pointer to the completion queue.
11732  * @eqe: Pointer to fast-path completion queue entry.
11733  *
11734  * This routine process a fast-path work queue completion entry from fast-path
11735  * event queue for FCP command response completion.
11736  **/
11737 static int
11738 lpfc_sli4_fp_handle_wcqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
11739 			 struct lpfc_cqe *cqe)
11740 {
11741 	struct lpfc_wcqe_release wcqe;
11742 	bool workposted = false;
11743 
11744 	/* Copy the work queue CQE and convert endian order if needed */
11745 	lpfc_sli_pcimem_bcopy(cqe, &wcqe, sizeof(struct lpfc_cqe));
11746 
11747 	/* Check and process for different type of WCQE and dispatch */
11748 	switch (bf_get(lpfc_wcqe_c_code, &wcqe)) {
11749 	case CQE_CODE_COMPL_WQE:
11750 		cq->CQ_wq++;
11751 		/* Process the WQ complete event */
11752 		phba->last_completion_time = jiffies;
11753 		lpfc_sli4_fp_handle_fcp_wcqe(phba, cq,
11754 				(struct lpfc_wcqe_complete *)&wcqe);
11755 		break;
11756 	case CQE_CODE_RELEASE_WQE:
11757 		cq->CQ_release_wqe++;
11758 		/* Process the WQ release event */
11759 		lpfc_sli4_fp_handle_rel_wcqe(phba, cq,
11760 				(struct lpfc_wcqe_release *)&wcqe);
11761 		break;
11762 	case CQE_CODE_XRI_ABORTED:
11763 		cq->CQ_xri_aborted++;
11764 		/* Process the WQ XRI abort event */
11765 		phba->last_completion_time = jiffies;
11766 		workposted = lpfc_sli4_sp_handle_abort_xri_wcqe(phba, cq,
11767 				(struct sli4_wcqe_xri_aborted *)&wcqe);
11768 		break;
11769 	default:
11770 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11771 				"0144 Not a valid WCQE code: x%x\n",
11772 				bf_get(lpfc_wcqe_c_code, &wcqe));
11773 		break;
11774 	}
11775 	return workposted;
11776 }
11777 
11778 /**
11779  * lpfc_sli4_hba_handle_eqe - Process a fast-path event queue entry
11780  * @phba: Pointer to HBA context object.
11781  * @eqe: Pointer to fast-path event queue entry.
11782  *
11783  * This routine process a event queue entry from the fast-path event queue.
11784  * It will check the MajorCode and MinorCode to determine this is for a
11785  * completion event on a completion queue, if not, an error shall be logged
11786  * and just return. Otherwise, it will get to the corresponding completion
11787  * queue and process all the entries on the completion queue, rearm the
11788  * completion queue, and then return.
11789  **/
11790 static void
11791 lpfc_sli4_hba_handle_eqe(struct lpfc_hba *phba, struct lpfc_eqe *eqe,
11792 			uint32_t qidx)
11793 {
11794 	struct lpfc_queue *cq;
11795 	struct lpfc_cqe *cqe;
11796 	bool workposted = false;
11797 	uint16_t cqid;
11798 	int ecount = 0;
11799 
11800 	if (unlikely(bf_get_le32(lpfc_eqe_major_code, eqe) != 0)) {
11801 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11802 				"0366 Not a valid completion "
11803 				"event: majorcode=x%x, minorcode=x%x\n",
11804 				bf_get_le32(lpfc_eqe_major_code, eqe),
11805 				bf_get_le32(lpfc_eqe_minor_code, eqe));
11806 		return;
11807 	}
11808 
11809 	/* Get the reference to the corresponding CQ */
11810 	cqid = bf_get_le32(lpfc_eqe_resource_id, eqe);
11811 
11812 	/* Check if this is a Slow path event */
11813 	if (unlikely(cqid != phba->sli4_hba.fcp_cq_map[qidx])) {
11814 		lpfc_sli4_sp_handle_eqe(phba, eqe,
11815 			phba->sli4_hba.hba_eq[qidx]);
11816 		return;
11817 	}
11818 
11819 	if (unlikely(!phba->sli4_hba.fcp_cq)) {
11820 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
11821 				"3146 Fast-path completion queues "
11822 				"does not exist\n");
11823 		return;
11824 	}
11825 	cq = phba->sli4_hba.fcp_cq[qidx];
11826 	if (unlikely(!cq)) {
11827 		if (phba->sli.sli_flag & LPFC_SLI_ACTIVE)
11828 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11829 					"0367 Fast-path completion queue "
11830 					"(%d) does not exist\n", qidx);
11831 		return;
11832 	}
11833 
11834 	if (unlikely(cqid != cq->queue_id)) {
11835 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11836 				"0368 Miss-matched fast-path completion "
11837 				"queue identifier: eqcqid=%d, fcpcqid=%d\n",
11838 				cqid, cq->queue_id);
11839 		return;
11840 	}
11841 
11842 	/* Process all the entries to the CQ */
11843 	while ((cqe = lpfc_sli4_cq_get(cq))) {
11844 		workposted |= lpfc_sli4_fp_handle_wcqe(phba, cq, cqe);
11845 		if (!(++ecount % cq->entry_repost))
11846 			lpfc_sli4_cq_release(cq, LPFC_QUEUE_NOARM);
11847 	}
11848 
11849 	/* Track the max number of CQEs processed in 1 EQ */
11850 	if (ecount > cq->CQ_max_cqe)
11851 		cq->CQ_max_cqe = ecount;
11852 
11853 	/* Catch the no cq entry condition */
11854 	if (unlikely(ecount == 0))
11855 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
11856 				"0369 No entry from fast-path completion "
11857 				"queue fcpcqid=%d\n", cq->queue_id);
11858 
11859 	/* In any case, flash and re-arm the CQ */
11860 	lpfc_sli4_cq_release(cq, LPFC_QUEUE_REARM);
11861 
11862 	/* wake up worker thread if there are works to be done */
11863 	if (workposted)
11864 		lpfc_worker_wake_up(phba);
11865 }
11866 
11867 static void
11868 lpfc_sli4_eq_flush(struct lpfc_hba *phba, struct lpfc_queue *eq)
11869 {
11870 	struct lpfc_eqe *eqe;
11871 
11872 	/* walk all the EQ entries and drop on the floor */
11873 	while ((eqe = lpfc_sli4_eq_get(eq)))
11874 		;
11875 
11876 	/* Clear and re-arm the EQ */
11877 	lpfc_sli4_eq_release(eq, LPFC_QUEUE_REARM);
11878 }
11879 
11880 /**
11881  * lpfc_sli4_hba_intr_handler - HBA interrupt handler to SLI-4 device
11882  * @irq: Interrupt number.
11883  * @dev_id: The device context pointer.
11884  *
11885  * This function is directly called from the PCI layer as an interrupt
11886  * service routine when device with SLI-4 interface spec is enabled with
11887  * MSI-X multi-message interrupt mode and there is a fast-path FCP IOCB
11888  * ring event in the HBA. However, when the device is enabled with either
11889  * MSI or Pin-IRQ interrupt mode, this function is called as part of the
11890  * device-level interrupt handler. When the PCI slot is in error recovery
11891  * or the HBA is undergoing initialization, the interrupt handler will not
11892  * process the interrupt. The SCSI FCP fast-path ring event are handled in
11893  * the intrrupt context. This function is called without any lock held.
11894  * It gets the hbalock to access and update SLI data structures. Note that,
11895  * the FCP EQ to FCP CQ are one-to-one map such that the FCP EQ index is
11896  * equal to that of FCP CQ index.
11897  *
11898  * The link attention and ELS ring attention events are handled
11899  * by the worker thread. The interrupt handler signals the worker thread
11900  * and returns for these events. This function is called without any lock
11901  * held. It gets the hbalock to access and update SLI data structures.
11902  *
11903  * This function returns IRQ_HANDLED when interrupt is handled else it
11904  * returns IRQ_NONE.
11905  **/
11906 irqreturn_t
11907 lpfc_sli4_hba_intr_handler(int irq, void *dev_id)
11908 {
11909 	struct lpfc_hba *phba;
11910 	struct lpfc_fcp_eq_hdl *fcp_eq_hdl;
11911 	struct lpfc_queue *fpeq;
11912 	struct lpfc_eqe *eqe;
11913 	unsigned long iflag;
11914 	int ecount = 0;
11915 	int fcp_eqidx;
11916 
11917 	/* Get the driver's phba structure from the dev_id */
11918 	fcp_eq_hdl = (struct lpfc_fcp_eq_hdl *)dev_id;
11919 	phba = fcp_eq_hdl->phba;
11920 	fcp_eqidx = fcp_eq_hdl->idx;
11921 
11922 	if (unlikely(!phba))
11923 		return IRQ_NONE;
11924 	if (unlikely(!phba->sli4_hba.hba_eq))
11925 		return IRQ_NONE;
11926 
11927 	/* Get to the EQ struct associated with this vector */
11928 	fpeq = phba->sli4_hba.hba_eq[fcp_eqidx];
11929 	if (unlikely(!fpeq))
11930 		return IRQ_NONE;
11931 
11932 	if (lpfc_fcp_look_ahead) {
11933 		if (atomic_dec_and_test(&fcp_eq_hdl->fcp_eq_in_use))
11934 			lpfc_sli4_eq_clr_intr(fpeq);
11935 		else {
11936 			atomic_inc(&fcp_eq_hdl->fcp_eq_in_use);
11937 			return IRQ_NONE;
11938 		}
11939 	}
11940 
11941 	/* Check device state for handling interrupt */
11942 	if (unlikely(lpfc_intr_state_check(phba))) {
11943 		fpeq->EQ_badstate++;
11944 		/* Check again for link_state with lock held */
11945 		spin_lock_irqsave(&phba->hbalock, iflag);
11946 		if (phba->link_state < LPFC_LINK_DOWN)
11947 			/* Flush, clear interrupt, and rearm the EQ */
11948 			lpfc_sli4_eq_flush(phba, fpeq);
11949 		spin_unlock_irqrestore(&phba->hbalock, iflag);
11950 		if (lpfc_fcp_look_ahead)
11951 			atomic_inc(&fcp_eq_hdl->fcp_eq_in_use);
11952 		return IRQ_NONE;
11953 	}
11954 
11955 	/*
11956 	 * Process all the event on FCP fast-path EQ
11957 	 */
11958 	while ((eqe = lpfc_sli4_eq_get(fpeq))) {
11959 		lpfc_sli4_hba_handle_eqe(phba, eqe, fcp_eqidx);
11960 		if (!(++ecount % fpeq->entry_repost))
11961 			lpfc_sli4_eq_release(fpeq, LPFC_QUEUE_NOARM);
11962 		fpeq->EQ_processed++;
11963 	}
11964 
11965 	/* Track the max number of EQEs processed in 1 intr */
11966 	if (ecount > fpeq->EQ_max_eqe)
11967 		fpeq->EQ_max_eqe = ecount;
11968 
11969 	/* Always clear and re-arm the fast-path EQ */
11970 	lpfc_sli4_eq_release(fpeq, LPFC_QUEUE_REARM);
11971 
11972 	if (unlikely(ecount == 0)) {
11973 		fpeq->EQ_no_entry++;
11974 
11975 		if (lpfc_fcp_look_ahead) {
11976 			atomic_inc(&fcp_eq_hdl->fcp_eq_in_use);
11977 			return IRQ_NONE;
11978 		}
11979 
11980 		if (phba->intr_type == MSIX)
11981 			/* MSI-X treated interrupt served as no EQ share INT */
11982 			lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
11983 					"0358 MSI-X interrupt with no EQE\n");
11984 		else
11985 			/* Non MSI-X treated on interrupt as EQ share INT */
11986 			return IRQ_NONE;
11987 	}
11988 
11989 	if (lpfc_fcp_look_ahead)
11990 		atomic_inc(&fcp_eq_hdl->fcp_eq_in_use);
11991 	return IRQ_HANDLED;
11992 } /* lpfc_sli4_fp_intr_handler */
11993 
11994 /**
11995  * lpfc_sli4_intr_handler - Device-level interrupt handler for SLI-4 device
11996  * @irq: Interrupt number.
11997  * @dev_id: The device context pointer.
11998  *
11999  * This function is the device-level interrupt handler to device with SLI-4
12000  * interface spec, called from the PCI layer when either MSI or Pin-IRQ
12001  * interrupt mode is enabled and there is an event in the HBA which requires
12002  * driver attention. This function invokes the slow-path interrupt attention
12003  * handling function and fast-path interrupt attention handling function in
12004  * turn to process the relevant HBA attention events. This function is called
12005  * without any lock held. It gets the hbalock to access and update SLI data
12006  * structures.
12007  *
12008  * This function returns IRQ_HANDLED when interrupt is handled, else it
12009  * returns IRQ_NONE.
12010  **/
12011 irqreturn_t
12012 lpfc_sli4_intr_handler(int irq, void *dev_id)
12013 {
12014 	struct lpfc_hba  *phba;
12015 	irqreturn_t hba_irq_rc;
12016 	bool hba_handled = false;
12017 	int fcp_eqidx;
12018 
12019 	/* Get the driver's phba structure from the dev_id */
12020 	phba = (struct lpfc_hba *)dev_id;
12021 
12022 	if (unlikely(!phba))
12023 		return IRQ_NONE;
12024 
12025 	/*
12026 	 * Invoke fast-path host attention interrupt handling as appropriate.
12027 	 */
12028 	for (fcp_eqidx = 0; fcp_eqidx < phba->cfg_fcp_io_channel; fcp_eqidx++) {
12029 		hba_irq_rc = lpfc_sli4_hba_intr_handler(irq,
12030 					&phba->sli4_hba.fcp_eq_hdl[fcp_eqidx]);
12031 		if (hba_irq_rc == IRQ_HANDLED)
12032 			hba_handled |= true;
12033 	}
12034 
12035 	return (hba_handled == true) ? IRQ_HANDLED : IRQ_NONE;
12036 } /* lpfc_sli4_intr_handler */
12037 
12038 /**
12039  * lpfc_sli4_queue_free - free a queue structure and associated memory
12040  * @queue: The queue structure to free.
12041  *
12042  * This function frees a queue structure and the DMAable memory used for
12043  * the host resident queue. This function must be called after destroying the
12044  * queue on the HBA.
12045  **/
12046 void
12047 lpfc_sli4_queue_free(struct lpfc_queue *queue)
12048 {
12049 	struct lpfc_dmabuf *dmabuf;
12050 
12051 	if (!queue)
12052 		return;
12053 
12054 	while (!list_empty(&queue->page_list)) {
12055 		list_remove_head(&queue->page_list, dmabuf, struct lpfc_dmabuf,
12056 				 list);
12057 		dma_free_coherent(&queue->phba->pcidev->dev, SLI4_PAGE_SIZE,
12058 				  dmabuf->virt, dmabuf->phys);
12059 		kfree(dmabuf);
12060 	}
12061 	kfree(queue);
12062 	return;
12063 }
12064 
12065 /**
12066  * lpfc_sli4_queue_alloc - Allocate and initialize a queue structure
12067  * @phba: The HBA that this queue is being created on.
12068  * @entry_size: The size of each queue entry for this queue.
12069  * @entry count: The number of entries that this queue will handle.
12070  *
12071  * This function allocates a queue structure and the DMAable memory used for
12072  * the host resident queue. This function must be called before creating the
12073  * queue on the HBA.
12074  **/
12075 struct lpfc_queue *
12076 lpfc_sli4_queue_alloc(struct lpfc_hba *phba, uint32_t entry_size,
12077 		      uint32_t entry_count)
12078 {
12079 	struct lpfc_queue *queue;
12080 	struct lpfc_dmabuf *dmabuf;
12081 	int x, total_qe_count;
12082 	void *dma_pointer;
12083 	uint32_t hw_page_size = phba->sli4_hba.pc_sli4_params.if_page_sz;
12084 
12085 	if (!phba->sli4_hba.pc_sli4_params.supported)
12086 		hw_page_size = SLI4_PAGE_SIZE;
12087 
12088 	queue = kzalloc(sizeof(struct lpfc_queue) +
12089 			(sizeof(union sli4_qe) * entry_count), GFP_KERNEL);
12090 	if (!queue)
12091 		return NULL;
12092 	queue->page_count = (ALIGN(entry_size * entry_count,
12093 			hw_page_size))/hw_page_size;
12094 	INIT_LIST_HEAD(&queue->list);
12095 	INIT_LIST_HEAD(&queue->page_list);
12096 	INIT_LIST_HEAD(&queue->child_list);
12097 	for (x = 0, total_qe_count = 0; x < queue->page_count; x++) {
12098 		dmabuf = kzalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
12099 		if (!dmabuf)
12100 			goto out_fail;
12101 		dmabuf->virt = dma_alloc_coherent(&phba->pcidev->dev,
12102 						  hw_page_size, &dmabuf->phys,
12103 						  GFP_KERNEL);
12104 		if (!dmabuf->virt) {
12105 			kfree(dmabuf);
12106 			goto out_fail;
12107 		}
12108 		memset(dmabuf->virt, 0, hw_page_size);
12109 		dmabuf->buffer_tag = x;
12110 		list_add_tail(&dmabuf->list, &queue->page_list);
12111 		/* initialize queue's entry array */
12112 		dma_pointer = dmabuf->virt;
12113 		for (; total_qe_count < entry_count &&
12114 		     dma_pointer < (hw_page_size + dmabuf->virt);
12115 		     total_qe_count++, dma_pointer += entry_size) {
12116 			queue->qe[total_qe_count].address = dma_pointer;
12117 		}
12118 	}
12119 	queue->entry_size = entry_size;
12120 	queue->entry_count = entry_count;
12121 
12122 	/*
12123 	 * entry_repost is calculated based on the number of entries in the
12124 	 * queue. This works out except for RQs. If buffers are NOT initially
12125 	 * posted for every RQE, entry_repost should be adjusted accordingly.
12126 	 */
12127 	queue->entry_repost = (entry_count >> 3);
12128 	if (queue->entry_repost < LPFC_QUEUE_MIN_REPOST)
12129 		queue->entry_repost = LPFC_QUEUE_MIN_REPOST;
12130 	queue->phba = phba;
12131 
12132 	return queue;
12133 out_fail:
12134 	lpfc_sli4_queue_free(queue);
12135 	return NULL;
12136 }
12137 
12138 /**
12139  * lpfc_dual_chute_pci_bar_map - Map pci base address register to host memory
12140  * @phba: HBA structure that indicates port to create a queue on.
12141  * @pci_barset: PCI BAR set flag.
12142  *
12143  * This function shall perform iomap of the specified PCI BAR address to host
12144  * memory address if not already done so and return it. The returned host
12145  * memory address can be NULL.
12146  */
12147 static void __iomem *
12148 lpfc_dual_chute_pci_bar_map(struct lpfc_hba *phba, uint16_t pci_barset)
12149 {
12150 	struct pci_dev *pdev;
12151 	unsigned long bar_map, bar_map_len;
12152 
12153 	if (!phba->pcidev)
12154 		return NULL;
12155 	else
12156 		pdev = phba->pcidev;
12157 
12158 	switch (pci_barset) {
12159 	case WQ_PCI_BAR_0_AND_1:
12160 		if (!phba->pci_bar0_memmap_p) {
12161 			bar_map = pci_resource_start(pdev, PCI_64BIT_BAR0);
12162 			bar_map_len = pci_resource_len(pdev, PCI_64BIT_BAR0);
12163 			phba->pci_bar0_memmap_p = ioremap(bar_map, bar_map_len);
12164 		}
12165 		return phba->pci_bar0_memmap_p;
12166 	case WQ_PCI_BAR_2_AND_3:
12167 		if (!phba->pci_bar2_memmap_p) {
12168 			bar_map = pci_resource_start(pdev, PCI_64BIT_BAR2);
12169 			bar_map_len = pci_resource_len(pdev, PCI_64BIT_BAR2);
12170 			phba->pci_bar2_memmap_p = ioremap(bar_map, bar_map_len);
12171 		}
12172 		return phba->pci_bar2_memmap_p;
12173 	case WQ_PCI_BAR_4_AND_5:
12174 		if (!phba->pci_bar4_memmap_p) {
12175 			bar_map = pci_resource_start(pdev, PCI_64BIT_BAR4);
12176 			bar_map_len = pci_resource_len(pdev, PCI_64BIT_BAR4);
12177 			phba->pci_bar4_memmap_p = ioremap(bar_map, bar_map_len);
12178 		}
12179 		return phba->pci_bar4_memmap_p;
12180 	default:
12181 		break;
12182 	}
12183 	return NULL;
12184 }
12185 
12186 /**
12187  * lpfc_modify_fcp_eq_delay - Modify Delay Multiplier on FCP EQs
12188  * @phba: HBA structure that indicates port to create a queue on.
12189  * @startq: The starting FCP EQ to modify
12190  *
12191  * This function sends an MODIFY_EQ_DELAY mailbox command to the HBA.
12192  *
12193  * The @phba struct is used to send mailbox command to HBA. The @startq
12194  * is used to get the starting FCP EQ to change.
12195  * This function is asynchronous and will wait for the mailbox
12196  * command to finish before continuing.
12197  *
12198  * On success this function will return a zero. If unable to allocate enough
12199  * memory this function will return -ENOMEM. If the queue create mailbox command
12200  * fails this function will return -ENXIO.
12201  **/
12202 uint32_t
12203 lpfc_modify_fcp_eq_delay(struct lpfc_hba *phba, uint16_t startq)
12204 {
12205 	struct lpfc_mbx_modify_eq_delay *eq_delay;
12206 	LPFC_MBOXQ_t *mbox;
12207 	struct lpfc_queue *eq;
12208 	int cnt, rc, length, status = 0;
12209 	uint32_t shdr_status, shdr_add_status;
12210 	uint32_t result;
12211 	int fcp_eqidx;
12212 	union lpfc_sli4_cfg_shdr *shdr;
12213 	uint16_t dmult;
12214 
12215 	if (startq >= phba->cfg_fcp_io_channel)
12216 		return 0;
12217 
12218 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
12219 	if (!mbox)
12220 		return -ENOMEM;
12221 	length = (sizeof(struct lpfc_mbx_modify_eq_delay) -
12222 		  sizeof(struct lpfc_sli4_cfg_mhdr));
12223 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
12224 			 LPFC_MBOX_OPCODE_MODIFY_EQ_DELAY,
12225 			 length, LPFC_SLI4_MBX_EMBED);
12226 	eq_delay = &mbox->u.mqe.un.eq_delay;
12227 
12228 	/* Calculate delay multiper from maximum interrupt per second */
12229 	result = phba->cfg_fcp_imax / phba->cfg_fcp_io_channel;
12230 	if (result > LPFC_DMULT_CONST)
12231 		dmult = 0;
12232 	else
12233 		dmult = LPFC_DMULT_CONST/result - 1;
12234 
12235 	cnt = 0;
12236 	for (fcp_eqidx = startq; fcp_eqidx < phba->cfg_fcp_io_channel;
12237 	    fcp_eqidx++) {
12238 		eq = phba->sli4_hba.hba_eq[fcp_eqidx];
12239 		if (!eq)
12240 			continue;
12241 		eq_delay->u.request.eq[cnt].eq_id = eq->queue_id;
12242 		eq_delay->u.request.eq[cnt].phase = 0;
12243 		eq_delay->u.request.eq[cnt].delay_multi = dmult;
12244 		cnt++;
12245 		if (cnt >= LPFC_MAX_EQ_DELAY)
12246 			break;
12247 	}
12248 	eq_delay->u.request.num_eq = cnt;
12249 
12250 	mbox->vport = phba->pport;
12251 	mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
12252 	mbox->context1 = NULL;
12253 	rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
12254 	shdr = (union lpfc_sli4_cfg_shdr *) &eq_delay->header.cfg_shdr;
12255 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
12256 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
12257 	if (shdr_status || shdr_add_status || rc) {
12258 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
12259 				"2512 MODIFY_EQ_DELAY mailbox failed with "
12260 				"status x%x add_status x%x, mbx status x%x\n",
12261 				shdr_status, shdr_add_status, rc);
12262 		status = -ENXIO;
12263 	}
12264 	mempool_free(mbox, phba->mbox_mem_pool);
12265 	return status;
12266 }
12267 
12268 /**
12269  * lpfc_eq_create - Create an Event Queue on the HBA
12270  * @phba: HBA structure that indicates port to create a queue on.
12271  * @eq: The queue structure to use to create the event queue.
12272  * @imax: The maximum interrupt per second limit.
12273  *
12274  * This function creates an event queue, as detailed in @eq, on a port,
12275  * described by @phba by sending an EQ_CREATE mailbox command to the HBA.
12276  *
12277  * The @phba struct is used to send mailbox command to HBA. The @eq struct
12278  * is used to get the entry count and entry size that are necessary to
12279  * determine the number of pages to allocate and use for this queue. This
12280  * function will send the EQ_CREATE mailbox command to the HBA to setup the
12281  * event queue. This function is asynchronous and will wait for the mailbox
12282  * command to finish before continuing.
12283  *
12284  * On success this function will return a zero. If unable to allocate enough
12285  * memory this function will return -ENOMEM. If the queue create mailbox command
12286  * fails this function will return -ENXIO.
12287  **/
12288 uint32_t
12289 lpfc_eq_create(struct lpfc_hba *phba, struct lpfc_queue *eq, uint32_t imax)
12290 {
12291 	struct lpfc_mbx_eq_create *eq_create;
12292 	LPFC_MBOXQ_t *mbox;
12293 	int rc, length, status = 0;
12294 	struct lpfc_dmabuf *dmabuf;
12295 	uint32_t shdr_status, shdr_add_status;
12296 	union lpfc_sli4_cfg_shdr *shdr;
12297 	uint16_t dmult;
12298 	uint32_t hw_page_size = phba->sli4_hba.pc_sli4_params.if_page_sz;
12299 
12300 	/* sanity check on queue memory */
12301 	if (!eq)
12302 		return -ENODEV;
12303 	if (!phba->sli4_hba.pc_sli4_params.supported)
12304 		hw_page_size = SLI4_PAGE_SIZE;
12305 
12306 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
12307 	if (!mbox)
12308 		return -ENOMEM;
12309 	length = (sizeof(struct lpfc_mbx_eq_create) -
12310 		  sizeof(struct lpfc_sli4_cfg_mhdr));
12311 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
12312 			 LPFC_MBOX_OPCODE_EQ_CREATE,
12313 			 length, LPFC_SLI4_MBX_EMBED);
12314 	eq_create = &mbox->u.mqe.un.eq_create;
12315 	bf_set(lpfc_mbx_eq_create_num_pages, &eq_create->u.request,
12316 	       eq->page_count);
12317 	bf_set(lpfc_eq_context_size, &eq_create->u.request.context,
12318 	       LPFC_EQE_SIZE);
12319 	bf_set(lpfc_eq_context_valid, &eq_create->u.request.context, 1);
12320 	/* Calculate delay multiper from maximum interrupt per second */
12321 	if (imax > LPFC_DMULT_CONST)
12322 		dmult = 0;
12323 	else
12324 		dmult = LPFC_DMULT_CONST/imax - 1;
12325 	bf_set(lpfc_eq_context_delay_multi, &eq_create->u.request.context,
12326 	       dmult);
12327 	switch (eq->entry_count) {
12328 	default:
12329 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
12330 				"0360 Unsupported EQ count. (%d)\n",
12331 				eq->entry_count);
12332 		if (eq->entry_count < 256)
12333 			return -EINVAL;
12334 		/* otherwise default to smallest count (drop through) */
12335 	case 256:
12336 		bf_set(lpfc_eq_context_count, &eq_create->u.request.context,
12337 		       LPFC_EQ_CNT_256);
12338 		break;
12339 	case 512:
12340 		bf_set(lpfc_eq_context_count, &eq_create->u.request.context,
12341 		       LPFC_EQ_CNT_512);
12342 		break;
12343 	case 1024:
12344 		bf_set(lpfc_eq_context_count, &eq_create->u.request.context,
12345 		       LPFC_EQ_CNT_1024);
12346 		break;
12347 	case 2048:
12348 		bf_set(lpfc_eq_context_count, &eq_create->u.request.context,
12349 		       LPFC_EQ_CNT_2048);
12350 		break;
12351 	case 4096:
12352 		bf_set(lpfc_eq_context_count, &eq_create->u.request.context,
12353 		       LPFC_EQ_CNT_4096);
12354 		break;
12355 	}
12356 	list_for_each_entry(dmabuf, &eq->page_list, list) {
12357 		memset(dmabuf->virt, 0, hw_page_size);
12358 		eq_create->u.request.page[dmabuf->buffer_tag].addr_lo =
12359 					putPaddrLow(dmabuf->phys);
12360 		eq_create->u.request.page[dmabuf->buffer_tag].addr_hi =
12361 					putPaddrHigh(dmabuf->phys);
12362 	}
12363 	mbox->vport = phba->pport;
12364 	mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
12365 	mbox->context1 = NULL;
12366 	rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
12367 	shdr = (union lpfc_sli4_cfg_shdr *) &eq_create->header.cfg_shdr;
12368 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
12369 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
12370 	if (shdr_status || shdr_add_status || rc) {
12371 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
12372 				"2500 EQ_CREATE mailbox failed with "
12373 				"status x%x add_status x%x, mbx status x%x\n",
12374 				shdr_status, shdr_add_status, rc);
12375 		status = -ENXIO;
12376 	}
12377 	eq->type = LPFC_EQ;
12378 	eq->subtype = LPFC_NONE;
12379 	eq->queue_id = bf_get(lpfc_mbx_eq_create_q_id, &eq_create->u.response);
12380 	if (eq->queue_id == 0xFFFF)
12381 		status = -ENXIO;
12382 	eq->host_index = 0;
12383 	eq->hba_index = 0;
12384 
12385 	mempool_free(mbox, phba->mbox_mem_pool);
12386 	return status;
12387 }
12388 
12389 /**
12390  * lpfc_cq_create - Create a Completion Queue on the HBA
12391  * @phba: HBA structure that indicates port to create a queue on.
12392  * @cq: The queue structure to use to create the completion queue.
12393  * @eq: The event queue to bind this completion queue to.
12394  *
12395  * This function creates a completion queue, as detailed in @wq, on a port,
12396  * described by @phba by sending a CQ_CREATE mailbox command to the HBA.
12397  *
12398  * The @phba struct is used to send mailbox command to HBA. The @cq struct
12399  * is used to get the entry count and entry size that are necessary to
12400  * determine the number of pages to allocate and use for this queue. The @eq
12401  * is used to indicate which event queue to bind this completion queue to. This
12402  * function will send the CQ_CREATE mailbox command to the HBA to setup the
12403  * completion queue. This function is asynchronous and will wait for the mailbox
12404  * command to finish before continuing.
12405  *
12406  * On success this function will return a zero. If unable to allocate enough
12407  * memory this function will return -ENOMEM. If the queue create mailbox command
12408  * fails this function will return -ENXIO.
12409  **/
12410 uint32_t
12411 lpfc_cq_create(struct lpfc_hba *phba, struct lpfc_queue *cq,
12412 	       struct lpfc_queue *eq, uint32_t type, uint32_t subtype)
12413 {
12414 	struct lpfc_mbx_cq_create *cq_create;
12415 	struct lpfc_dmabuf *dmabuf;
12416 	LPFC_MBOXQ_t *mbox;
12417 	int rc, length, status = 0;
12418 	uint32_t shdr_status, shdr_add_status;
12419 	union lpfc_sli4_cfg_shdr *shdr;
12420 	uint32_t hw_page_size = phba->sli4_hba.pc_sli4_params.if_page_sz;
12421 
12422 	/* sanity check on queue memory */
12423 	if (!cq || !eq)
12424 		return -ENODEV;
12425 	if (!phba->sli4_hba.pc_sli4_params.supported)
12426 		hw_page_size = SLI4_PAGE_SIZE;
12427 
12428 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
12429 	if (!mbox)
12430 		return -ENOMEM;
12431 	length = (sizeof(struct lpfc_mbx_cq_create) -
12432 		  sizeof(struct lpfc_sli4_cfg_mhdr));
12433 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
12434 			 LPFC_MBOX_OPCODE_CQ_CREATE,
12435 			 length, LPFC_SLI4_MBX_EMBED);
12436 	cq_create = &mbox->u.mqe.un.cq_create;
12437 	shdr = (union lpfc_sli4_cfg_shdr *) &cq_create->header.cfg_shdr;
12438 	bf_set(lpfc_mbx_cq_create_num_pages, &cq_create->u.request,
12439 		    cq->page_count);
12440 	bf_set(lpfc_cq_context_event, &cq_create->u.request.context, 1);
12441 	bf_set(lpfc_cq_context_valid, &cq_create->u.request.context, 1);
12442 	bf_set(lpfc_mbox_hdr_version, &shdr->request,
12443 	       phba->sli4_hba.pc_sli4_params.cqv);
12444 	if (phba->sli4_hba.pc_sli4_params.cqv == LPFC_Q_CREATE_VERSION_2) {
12445 		/* FW only supports 1. Should be PAGE_SIZE/SLI4_PAGE_SIZE */
12446 		bf_set(lpfc_mbx_cq_create_page_size, &cq_create->u.request, 1);
12447 		bf_set(lpfc_cq_eq_id_2, &cq_create->u.request.context,
12448 		       eq->queue_id);
12449 	} else {
12450 		bf_set(lpfc_cq_eq_id, &cq_create->u.request.context,
12451 		       eq->queue_id);
12452 	}
12453 	switch (cq->entry_count) {
12454 	default:
12455 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
12456 				"0361 Unsupported CQ count. (%d)\n",
12457 				cq->entry_count);
12458 		if (cq->entry_count < 256) {
12459 			status = -EINVAL;
12460 			goto out;
12461 		}
12462 		/* otherwise default to smallest count (drop through) */
12463 	case 256:
12464 		bf_set(lpfc_cq_context_count, &cq_create->u.request.context,
12465 		       LPFC_CQ_CNT_256);
12466 		break;
12467 	case 512:
12468 		bf_set(lpfc_cq_context_count, &cq_create->u.request.context,
12469 		       LPFC_CQ_CNT_512);
12470 		break;
12471 	case 1024:
12472 		bf_set(lpfc_cq_context_count, &cq_create->u.request.context,
12473 		       LPFC_CQ_CNT_1024);
12474 		break;
12475 	}
12476 	list_for_each_entry(dmabuf, &cq->page_list, list) {
12477 		memset(dmabuf->virt, 0, hw_page_size);
12478 		cq_create->u.request.page[dmabuf->buffer_tag].addr_lo =
12479 					putPaddrLow(dmabuf->phys);
12480 		cq_create->u.request.page[dmabuf->buffer_tag].addr_hi =
12481 					putPaddrHigh(dmabuf->phys);
12482 	}
12483 	rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
12484 
12485 	/* The IOCTL status is embedded in the mailbox subheader. */
12486 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
12487 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
12488 	if (shdr_status || shdr_add_status || rc) {
12489 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
12490 				"2501 CQ_CREATE mailbox failed with "
12491 				"status x%x add_status x%x, mbx status x%x\n",
12492 				shdr_status, shdr_add_status, rc);
12493 		status = -ENXIO;
12494 		goto out;
12495 	}
12496 	cq->queue_id = bf_get(lpfc_mbx_cq_create_q_id, &cq_create->u.response);
12497 	if (cq->queue_id == 0xFFFF) {
12498 		status = -ENXIO;
12499 		goto out;
12500 	}
12501 	/* link the cq onto the parent eq child list */
12502 	list_add_tail(&cq->list, &eq->child_list);
12503 	/* Set up completion queue's type and subtype */
12504 	cq->type = type;
12505 	cq->subtype = subtype;
12506 	cq->queue_id = bf_get(lpfc_mbx_cq_create_q_id, &cq_create->u.response);
12507 	cq->assoc_qid = eq->queue_id;
12508 	cq->host_index = 0;
12509 	cq->hba_index = 0;
12510 
12511 out:
12512 	mempool_free(mbox, phba->mbox_mem_pool);
12513 	return status;
12514 }
12515 
12516 /**
12517  * lpfc_mq_create_fb_init - Send MCC_CREATE without async events registration
12518  * @phba: HBA structure that indicates port to create a queue on.
12519  * @mq: The queue structure to use to create the mailbox queue.
12520  * @mbox: An allocated pointer to type LPFC_MBOXQ_t
12521  * @cq: The completion queue to associate with this cq.
12522  *
12523  * This function provides failback (fb) functionality when the
12524  * mq_create_ext fails on older FW generations.  It's purpose is identical
12525  * to mq_create_ext otherwise.
12526  *
12527  * This routine cannot fail as all attributes were previously accessed and
12528  * initialized in mq_create_ext.
12529  **/
12530 static void
12531 lpfc_mq_create_fb_init(struct lpfc_hba *phba, struct lpfc_queue *mq,
12532 		       LPFC_MBOXQ_t *mbox, struct lpfc_queue *cq)
12533 {
12534 	struct lpfc_mbx_mq_create *mq_create;
12535 	struct lpfc_dmabuf *dmabuf;
12536 	int length;
12537 
12538 	length = (sizeof(struct lpfc_mbx_mq_create) -
12539 		  sizeof(struct lpfc_sli4_cfg_mhdr));
12540 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
12541 			 LPFC_MBOX_OPCODE_MQ_CREATE,
12542 			 length, LPFC_SLI4_MBX_EMBED);
12543 	mq_create = &mbox->u.mqe.un.mq_create;
12544 	bf_set(lpfc_mbx_mq_create_num_pages, &mq_create->u.request,
12545 	       mq->page_count);
12546 	bf_set(lpfc_mq_context_cq_id, &mq_create->u.request.context,
12547 	       cq->queue_id);
12548 	bf_set(lpfc_mq_context_valid, &mq_create->u.request.context, 1);
12549 	switch (mq->entry_count) {
12550 	case 16:
12551 		bf_set(lpfc_mq_context_ring_size, &mq_create->u.request.context,
12552 		       LPFC_MQ_RING_SIZE_16);
12553 		break;
12554 	case 32:
12555 		bf_set(lpfc_mq_context_ring_size, &mq_create->u.request.context,
12556 		       LPFC_MQ_RING_SIZE_32);
12557 		break;
12558 	case 64:
12559 		bf_set(lpfc_mq_context_ring_size, &mq_create->u.request.context,
12560 		       LPFC_MQ_RING_SIZE_64);
12561 		break;
12562 	case 128:
12563 		bf_set(lpfc_mq_context_ring_size, &mq_create->u.request.context,
12564 		       LPFC_MQ_RING_SIZE_128);
12565 		break;
12566 	}
12567 	list_for_each_entry(dmabuf, &mq->page_list, list) {
12568 		mq_create->u.request.page[dmabuf->buffer_tag].addr_lo =
12569 			putPaddrLow(dmabuf->phys);
12570 		mq_create->u.request.page[dmabuf->buffer_tag].addr_hi =
12571 			putPaddrHigh(dmabuf->phys);
12572 	}
12573 }
12574 
12575 /**
12576  * lpfc_mq_create - Create a mailbox Queue on the HBA
12577  * @phba: HBA structure that indicates port to create a queue on.
12578  * @mq: The queue structure to use to create the mailbox queue.
12579  * @cq: The completion queue to associate with this cq.
12580  * @subtype: The queue's subtype.
12581  *
12582  * This function creates a mailbox queue, as detailed in @mq, on a port,
12583  * described by @phba by sending a MQ_CREATE mailbox command to the HBA.
12584  *
12585  * The @phba struct is used to send mailbox command to HBA. The @cq struct
12586  * is used to get the entry count and entry size that are necessary to
12587  * determine the number of pages to allocate and use for this queue. This
12588  * function will send the MQ_CREATE mailbox command to the HBA to setup the
12589  * mailbox queue. This function is asynchronous and will wait for the mailbox
12590  * command to finish before continuing.
12591  *
12592  * On success this function will return a zero. If unable to allocate enough
12593  * memory this function will return -ENOMEM. If the queue create mailbox command
12594  * fails this function will return -ENXIO.
12595  **/
12596 int32_t
12597 lpfc_mq_create(struct lpfc_hba *phba, struct lpfc_queue *mq,
12598 	       struct lpfc_queue *cq, uint32_t subtype)
12599 {
12600 	struct lpfc_mbx_mq_create *mq_create;
12601 	struct lpfc_mbx_mq_create_ext *mq_create_ext;
12602 	struct lpfc_dmabuf *dmabuf;
12603 	LPFC_MBOXQ_t *mbox;
12604 	int rc, length, status = 0;
12605 	uint32_t shdr_status, shdr_add_status;
12606 	union lpfc_sli4_cfg_shdr *shdr;
12607 	uint32_t hw_page_size = phba->sli4_hba.pc_sli4_params.if_page_sz;
12608 
12609 	/* sanity check on queue memory */
12610 	if (!mq || !cq)
12611 		return -ENODEV;
12612 	if (!phba->sli4_hba.pc_sli4_params.supported)
12613 		hw_page_size = SLI4_PAGE_SIZE;
12614 
12615 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
12616 	if (!mbox)
12617 		return -ENOMEM;
12618 	length = (sizeof(struct lpfc_mbx_mq_create_ext) -
12619 		  sizeof(struct lpfc_sli4_cfg_mhdr));
12620 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
12621 			 LPFC_MBOX_OPCODE_MQ_CREATE_EXT,
12622 			 length, LPFC_SLI4_MBX_EMBED);
12623 
12624 	mq_create_ext = &mbox->u.mqe.un.mq_create_ext;
12625 	shdr = (union lpfc_sli4_cfg_shdr *) &mq_create_ext->header.cfg_shdr;
12626 	bf_set(lpfc_mbx_mq_create_ext_num_pages,
12627 	       &mq_create_ext->u.request, mq->page_count);
12628 	bf_set(lpfc_mbx_mq_create_ext_async_evt_link,
12629 	       &mq_create_ext->u.request, 1);
12630 	bf_set(lpfc_mbx_mq_create_ext_async_evt_fip,
12631 	       &mq_create_ext->u.request, 1);
12632 	bf_set(lpfc_mbx_mq_create_ext_async_evt_group5,
12633 	       &mq_create_ext->u.request, 1);
12634 	bf_set(lpfc_mbx_mq_create_ext_async_evt_fc,
12635 	       &mq_create_ext->u.request, 1);
12636 	bf_set(lpfc_mbx_mq_create_ext_async_evt_sli,
12637 	       &mq_create_ext->u.request, 1);
12638 	bf_set(lpfc_mq_context_valid, &mq_create_ext->u.request.context, 1);
12639 	bf_set(lpfc_mbox_hdr_version, &shdr->request,
12640 	       phba->sli4_hba.pc_sli4_params.mqv);
12641 	if (phba->sli4_hba.pc_sli4_params.mqv == LPFC_Q_CREATE_VERSION_1)
12642 		bf_set(lpfc_mbx_mq_create_ext_cq_id, &mq_create_ext->u.request,
12643 		       cq->queue_id);
12644 	else
12645 		bf_set(lpfc_mq_context_cq_id, &mq_create_ext->u.request.context,
12646 		       cq->queue_id);
12647 	switch (mq->entry_count) {
12648 	default:
12649 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
12650 				"0362 Unsupported MQ count. (%d)\n",
12651 				mq->entry_count);
12652 		if (mq->entry_count < 16) {
12653 			status = -EINVAL;
12654 			goto out;
12655 		}
12656 		/* otherwise default to smallest count (drop through) */
12657 	case 16:
12658 		bf_set(lpfc_mq_context_ring_size,
12659 		       &mq_create_ext->u.request.context,
12660 		       LPFC_MQ_RING_SIZE_16);
12661 		break;
12662 	case 32:
12663 		bf_set(lpfc_mq_context_ring_size,
12664 		       &mq_create_ext->u.request.context,
12665 		       LPFC_MQ_RING_SIZE_32);
12666 		break;
12667 	case 64:
12668 		bf_set(lpfc_mq_context_ring_size,
12669 		       &mq_create_ext->u.request.context,
12670 		       LPFC_MQ_RING_SIZE_64);
12671 		break;
12672 	case 128:
12673 		bf_set(lpfc_mq_context_ring_size,
12674 		       &mq_create_ext->u.request.context,
12675 		       LPFC_MQ_RING_SIZE_128);
12676 		break;
12677 	}
12678 	list_for_each_entry(dmabuf, &mq->page_list, list) {
12679 		memset(dmabuf->virt, 0, hw_page_size);
12680 		mq_create_ext->u.request.page[dmabuf->buffer_tag].addr_lo =
12681 					putPaddrLow(dmabuf->phys);
12682 		mq_create_ext->u.request.page[dmabuf->buffer_tag].addr_hi =
12683 					putPaddrHigh(dmabuf->phys);
12684 	}
12685 	rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
12686 	mq->queue_id = bf_get(lpfc_mbx_mq_create_q_id,
12687 			      &mq_create_ext->u.response);
12688 	if (rc != MBX_SUCCESS) {
12689 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
12690 				"2795 MQ_CREATE_EXT failed with "
12691 				"status x%x. Failback to MQ_CREATE.\n",
12692 				rc);
12693 		lpfc_mq_create_fb_init(phba, mq, mbox, cq);
12694 		mq_create = &mbox->u.mqe.un.mq_create;
12695 		rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
12696 		shdr = (union lpfc_sli4_cfg_shdr *) &mq_create->header.cfg_shdr;
12697 		mq->queue_id = bf_get(lpfc_mbx_mq_create_q_id,
12698 				      &mq_create->u.response);
12699 	}
12700 
12701 	/* The IOCTL status is embedded in the mailbox subheader. */
12702 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
12703 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
12704 	if (shdr_status || shdr_add_status || rc) {
12705 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
12706 				"2502 MQ_CREATE mailbox failed with "
12707 				"status x%x add_status x%x, mbx status x%x\n",
12708 				shdr_status, shdr_add_status, rc);
12709 		status = -ENXIO;
12710 		goto out;
12711 	}
12712 	if (mq->queue_id == 0xFFFF) {
12713 		status = -ENXIO;
12714 		goto out;
12715 	}
12716 	mq->type = LPFC_MQ;
12717 	mq->assoc_qid = cq->queue_id;
12718 	mq->subtype = subtype;
12719 	mq->host_index = 0;
12720 	mq->hba_index = 0;
12721 
12722 	/* link the mq onto the parent cq child list */
12723 	list_add_tail(&mq->list, &cq->child_list);
12724 out:
12725 	mempool_free(mbox, phba->mbox_mem_pool);
12726 	return status;
12727 }
12728 
12729 /**
12730  * lpfc_wq_create - Create a Work Queue on the HBA
12731  * @phba: HBA structure that indicates port to create a queue on.
12732  * @wq: The queue structure to use to create the work queue.
12733  * @cq: The completion queue to bind this work queue to.
12734  * @subtype: The subtype of the work queue indicating its functionality.
12735  *
12736  * This function creates a work queue, as detailed in @wq, on a port, described
12737  * by @phba by sending a WQ_CREATE mailbox command to the HBA.
12738  *
12739  * The @phba struct is used to send mailbox command to HBA. The @wq struct
12740  * is used to get the entry count and entry size that are necessary to
12741  * determine the number of pages to allocate and use for this queue. The @cq
12742  * is used to indicate which completion queue to bind this work queue to. This
12743  * function will send the WQ_CREATE mailbox command to the HBA to setup the
12744  * work queue. This function is asynchronous and will wait for the mailbox
12745  * command to finish before continuing.
12746  *
12747  * On success this function will return a zero. If unable to allocate enough
12748  * memory this function will return -ENOMEM. If the queue create mailbox command
12749  * fails this function will return -ENXIO.
12750  **/
12751 uint32_t
12752 lpfc_wq_create(struct lpfc_hba *phba, struct lpfc_queue *wq,
12753 	       struct lpfc_queue *cq, uint32_t subtype)
12754 {
12755 	struct lpfc_mbx_wq_create *wq_create;
12756 	struct lpfc_dmabuf *dmabuf;
12757 	LPFC_MBOXQ_t *mbox;
12758 	int rc, length, status = 0;
12759 	uint32_t shdr_status, shdr_add_status;
12760 	union lpfc_sli4_cfg_shdr *shdr;
12761 	uint32_t hw_page_size = phba->sli4_hba.pc_sli4_params.if_page_sz;
12762 	struct dma_address *page;
12763 	void __iomem *bar_memmap_p;
12764 	uint32_t db_offset;
12765 	uint16_t pci_barset;
12766 
12767 	/* sanity check on queue memory */
12768 	if (!wq || !cq)
12769 		return -ENODEV;
12770 	if (!phba->sli4_hba.pc_sli4_params.supported)
12771 		hw_page_size = SLI4_PAGE_SIZE;
12772 
12773 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
12774 	if (!mbox)
12775 		return -ENOMEM;
12776 	length = (sizeof(struct lpfc_mbx_wq_create) -
12777 		  sizeof(struct lpfc_sli4_cfg_mhdr));
12778 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE,
12779 			 LPFC_MBOX_OPCODE_FCOE_WQ_CREATE,
12780 			 length, LPFC_SLI4_MBX_EMBED);
12781 	wq_create = &mbox->u.mqe.un.wq_create;
12782 	shdr = (union lpfc_sli4_cfg_shdr *) &wq_create->header.cfg_shdr;
12783 	bf_set(lpfc_mbx_wq_create_num_pages, &wq_create->u.request,
12784 		    wq->page_count);
12785 	bf_set(lpfc_mbx_wq_create_cq_id, &wq_create->u.request,
12786 		    cq->queue_id);
12787 	bf_set(lpfc_mbox_hdr_version, &shdr->request,
12788 	       phba->sli4_hba.pc_sli4_params.wqv);
12789 
12790 	if (phba->sli4_hba.pc_sli4_params.wqv == LPFC_Q_CREATE_VERSION_1) {
12791 		bf_set(lpfc_mbx_wq_create_wqe_count, &wq_create->u.request_1,
12792 		       wq->entry_count);
12793 		switch (wq->entry_size) {
12794 		default:
12795 		case 64:
12796 			bf_set(lpfc_mbx_wq_create_wqe_size,
12797 			       &wq_create->u.request_1,
12798 			       LPFC_WQ_WQE_SIZE_64);
12799 			break;
12800 		case 128:
12801 			bf_set(lpfc_mbx_wq_create_wqe_size,
12802 			       &wq_create->u.request_1,
12803 			       LPFC_WQ_WQE_SIZE_128);
12804 			break;
12805 		}
12806 		bf_set(lpfc_mbx_wq_create_page_size, &wq_create->u.request_1,
12807 		       (PAGE_SIZE/SLI4_PAGE_SIZE));
12808 		page = wq_create->u.request_1.page;
12809 	} else {
12810 		page = wq_create->u.request.page;
12811 	}
12812 	list_for_each_entry(dmabuf, &wq->page_list, list) {
12813 		memset(dmabuf->virt, 0, hw_page_size);
12814 		page[dmabuf->buffer_tag].addr_lo = putPaddrLow(dmabuf->phys);
12815 		page[dmabuf->buffer_tag].addr_hi = putPaddrHigh(dmabuf->phys);
12816 	}
12817 
12818 	if (phba->sli4_hba.fw_func_mode & LPFC_DUA_MODE)
12819 		bf_set(lpfc_mbx_wq_create_dua, &wq_create->u.request, 1);
12820 
12821 	rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
12822 	/* The IOCTL status is embedded in the mailbox subheader. */
12823 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
12824 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
12825 	if (shdr_status || shdr_add_status || rc) {
12826 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
12827 				"2503 WQ_CREATE mailbox failed with "
12828 				"status x%x add_status x%x, mbx status x%x\n",
12829 				shdr_status, shdr_add_status, rc);
12830 		status = -ENXIO;
12831 		goto out;
12832 	}
12833 	wq->queue_id = bf_get(lpfc_mbx_wq_create_q_id, &wq_create->u.response);
12834 	if (wq->queue_id == 0xFFFF) {
12835 		status = -ENXIO;
12836 		goto out;
12837 	}
12838 	if (phba->sli4_hba.fw_func_mode & LPFC_DUA_MODE) {
12839 		wq->db_format = bf_get(lpfc_mbx_wq_create_db_format,
12840 				       &wq_create->u.response);
12841 		if ((wq->db_format != LPFC_DB_LIST_FORMAT) &&
12842 		    (wq->db_format != LPFC_DB_RING_FORMAT)) {
12843 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
12844 					"3265 WQ[%d] doorbell format not "
12845 					"supported: x%x\n", wq->queue_id,
12846 					wq->db_format);
12847 			status = -EINVAL;
12848 			goto out;
12849 		}
12850 		pci_barset = bf_get(lpfc_mbx_wq_create_bar_set,
12851 				    &wq_create->u.response);
12852 		bar_memmap_p = lpfc_dual_chute_pci_bar_map(phba, pci_barset);
12853 		if (!bar_memmap_p) {
12854 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
12855 					"3263 WQ[%d] failed to memmap pci "
12856 					"barset:x%x\n", wq->queue_id,
12857 					pci_barset);
12858 			status = -ENOMEM;
12859 			goto out;
12860 		}
12861 		db_offset = wq_create->u.response.doorbell_offset;
12862 		if ((db_offset != LPFC_ULP0_WQ_DOORBELL) &&
12863 		    (db_offset != LPFC_ULP1_WQ_DOORBELL)) {
12864 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
12865 					"3252 WQ[%d] doorbell offset not "
12866 					"supported: x%x\n", wq->queue_id,
12867 					db_offset);
12868 			status = -EINVAL;
12869 			goto out;
12870 		}
12871 		wq->db_regaddr = bar_memmap_p + db_offset;
12872 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
12873 				"3264 WQ[%d]: barset:x%x, offset:x%x\n",
12874 				wq->queue_id, pci_barset, db_offset);
12875 	} else {
12876 		wq->db_format = LPFC_DB_LIST_FORMAT;
12877 		wq->db_regaddr = phba->sli4_hba.WQDBregaddr;
12878 	}
12879 	wq->type = LPFC_WQ;
12880 	wq->assoc_qid = cq->queue_id;
12881 	wq->subtype = subtype;
12882 	wq->host_index = 0;
12883 	wq->hba_index = 0;
12884 	wq->entry_repost = LPFC_RELEASE_NOTIFICATION_INTERVAL;
12885 
12886 	/* link the wq onto the parent cq child list */
12887 	list_add_tail(&wq->list, &cq->child_list);
12888 out:
12889 	mempool_free(mbox, phba->mbox_mem_pool);
12890 	return status;
12891 }
12892 
12893 /**
12894  * lpfc_rq_adjust_repost - Adjust entry_repost for an RQ
12895  * @phba: HBA structure that indicates port to create a queue on.
12896  * @rq:   The queue structure to use for the receive queue.
12897  * @qno:  The associated HBQ number
12898  *
12899  *
12900  * For SLI4 we need to adjust the RQ repost value based on
12901  * the number of buffers that are initially posted to the RQ.
12902  */
12903 void
12904 lpfc_rq_adjust_repost(struct lpfc_hba *phba, struct lpfc_queue *rq, int qno)
12905 {
12906 	uint32_t cnt;
12907 
12908 	/* sanity check on queue memory */
12909 	if (!rq)
12910 		return;
12911 	cnt = lpfc_hbq_defs[qno]->entry_count;
12912 
12913 	/* Recalc repost for RQs based on buffers initially posted */
12914 	cnt = (cnt >> 3);
12915 	if (cnt < LPFC_QUEUE_MIN_REPOST)
12916 		cnt = LPFC_QUEUE_MIN_REPOST;
12917 
12918 	rq->entry_repost = cnt;
12919 }
12920 
12921 /**
12922  * lpfc_rq_create - Create a Receive Queue on the HBA
12923  * @phba: HBA structure that indicates port to create a queue on.
12924  * @hrq: The queue structure to use to create the header receive queue.
12925  * @drq: The queue structure to use to create the data receive queue.
12926  * @cq: The completion queue to bind this work queue to.
12927  *
12928  * This function creates a receive buffer queue pair , as detailed in @hrq and
12929  * @drq, on a port, described by @phba by sending a RQ_CREATE mailbox command
12930  * to the HBA.
12931  *
12932  * The @phba struct is used to send mailbox command to HBA. The @drq and @hrq
12933  * struct is used to get the entry count that is necessary to determine the
12934  * number of pages to use for this queue. The @cq is used to indicate which
12935  * completion queue to bind received buffers that are posted to these queues to.
12936  * This function will send the RQ_CREATE mailbox command to the HBA to setup the
12937  * receive queue pair. This function is asynchronous and will wait for the
12938  * mailbox command to finish before continuing.
12939  *
12940  * On success this function will return a zero. If unable to allocate enough
12941  * memory this function will return -ENOMEM. If the queue create mailbox command
12942  * fails this function will return -ENXIO.
12943  **/
12944 uint32_t
12945 lpfc_rq_create(struct lpfc_hba *phba, struct lpfc_queue *hrq,
12946 	       struct lpfc_queue *drq, struct lpfc_queue *cq, uint32_t subtype)
12947 {
12948 	struct lpfc_mbx_rq_create *rq_create;
12949 	struct lpfc_dmabuf *dmabuf;
12950 	LPFC_MBOXQ_t *mbox;
12951 	int rc, length, status = 0;
12952 	uint32_t shdr_status, shdr_add_status;
12953 	union lpfc_sli4_cfg_shdr *shdr;
12954 	uint32_t hw_page_size = phba->sli4_hba.pc_sli4_params.if_page_sz;
12955 	void __iomem *bar_memmap_p;
12956 	uint32_t db_offset;
12957 	uint16_t pci_barset;
12958 
12959 	/* sanity check on queue memory */
12960 	if (!hrq || !drq || !cq)
12961 		return -ENODEV;
12962 	if (!phba->sli4_hba.pc_sli4_params.supported)
12963 		hw_page_size = SLI4_PAGE_SIZE;
12964 
12965 	if (hrq->entry_count != drq->entry_count)
12966 		return -EINVAL;
12967 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
12968 	if (!mbox)
12969 		return -ENOMEM;
12970 	length = (sizeof(struct lpfc_mbx_rq_create) -
12971 		  sizeof(struct lpfc_sli4_cfg_mhdr));
12972 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE,
12973 			 LPFC_MBOX_OPCODE_FCOE_RQ_CREATE,
12974 			 length, LPFC_SLI4_MBX_EMBED);
12975 	rq_create = &mbox->u.mqe.un.rq_create;
12976 	shdr = (union lpfc_sli4_cfg_shdr *) &rq_create->header.cfg_shdr;
12977 	bf_set(lpfc_mbox_hdr_version, &shdr->request,
12978 	       phba->sli4_hba.pc_sli4_params.rqv);
12979 	if (phba->sli4_hba.pc_sli4_params.rqv == LPFC_Q_CREATE_VERSION_1) {
12980 		bf_set(lpfc_rq_context_rqe_count_1,
12981 		       &rq_create->u.request.context,
12982 		       hrq->entry_count);
12983 		rq_create->u.request.context.buffer_size = LPFC_HDR_BUF_SIZE;
12984 		bf_set(lpfc_rq_context_rqe_size,
12985 		       &rq_create->u.request.context,
12986 		       LPFC_RQE_SIZE_8);
12987 		bf_set(lpfc_rq_context_page_size,
12988 		       &rq_create->u.request.context,
12989 		       (PAGE_SIZE/SLI4_PAGE_SIZE));
12990 	} else {
12991 		switch (hrq->entry_count) {
12992 		default:
12993 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
12994 					"2535 Unsupported RQ count. (%d)\n",
12995 					hrq->entry_count);
12996 			if (hrq->entry_count < 512) {
12997 				status = -EINVAL;
12998 				goto out;
12999 			}
13000 			/* otherwise default to smallest count (drop through) */
13001 		case 512:
13002 			bf_set(lpfc_rq_context_rqe_count,
13003 			       &rq_create->u.request.context,
13004 			       LPFC_RQ_RING_SIZE_512);
13005 			break;
13006 		case 1024:
13007 			bf_set(lpfc_rq_context_rqe_count,
13008 			       &rq_create->u.request.context,
13009 			       LPFC_RQ_RING_SIZE_1024);
13010 			break;
13011 		case 2048:
13012 			bf_set(lpfc_rq_context_rqe_count,
13013 			       &rq_create->u.request.context,
13014 			       LPFC_RQ_RING_SIZE_2048);
13015 			break;
13016 		case 4096:
13017 			bf_set(lpfc_rq_context_rqe_count,
13018 			       &rq_create->u.request.context,
13019 			       LPFC_RQ_RING_SIZE_4096);
13020 			break;
13021 		}
13022 		bf_set(lpfc_rq_context_buf_size, &rq_create->u.request.context,
13023 		       LPFC_HDR_BUF_SIZE);
13024 	}
13025 	bf_set(lpfc_rq_context_cq_id, &rq_create->u.request.context,
13026 	       cq->queue_id);
13027 	bf_set(lpfc_mbx_rq_create_num_pages, &rq_create->u.request,
13028 	       hrq->page_count);
13029 	list_for_each_entry(dmabuf, &hrq->page_list, list) {
13030 		memset(dmabuf->virt, 0, hw_page_size);
13031 		rq_create->u.request.page[dmabuf->buffer_tag].addr_lo =
13032 					putPaddrLow(dmabuf->phys);
13033 		rq_create->u.request.page[dmabuf->buffer_tag].addr_hi =
13034 					putPaddrHigh(dmabuf->phys);
13035 	}
13036 	if (phba->sli4_hba.fw_func_mode & LPFC_DUA_MODE)
13037 		bf_set(lpfc_mbx_rq_create_dua, &rq_create->u.request, 1);
13038 
13039 	rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
13040 	/* The IOCTL status is embedded in the mailbox subheader. */
13041 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13042 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13043 	if (shdr_status || shdr_add_status || rc) {
13044 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13045 				"2504 RQ_CREATE mailbox failed with "
13046 				"status x%x add_status x%x, mbx status x%x\n",
13047 				shdr_status, shdr_add_status, rc);
13048 		status = -ENXIO;
13049 		goto out;
13050 	}
13051 	hrq->queue_id = bf_get(lpfc_mbx_rq_create_q_id, &rq_create->u.response);
13052 	if (hrq->queue_id == 0xFFFF) {
13053 		status = -ENXIO;
13054 		goto out;
13055 	}
13056 
13057 	if (phba->sli4_hba.fw_func_mode & LPFC_DUA_MODE) {
13058 		hrq->db_format = bf_get(lpfc_mbx_rq_create_db_format,
13059 					&rq_create->u.response);
13060 		if ((hrq->db_format != LPFC_DB_LIST_FORMAT) &&
13061 		    (hrq->db_format != LPFC_DB_RING_FORMAT)) {
13062 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13063 					"3262 RQ [%d] doorbell format not "
13064 					"supported: x%x\n", hrq->queue_id,
13065 					hrq->db_format);
13066 			status = -EINVAL;
13067 			goto out;
13068 		}
13069 
13070 		pci_barset = bf_get(lpfc_mbx_rq_create_bar_set,
13071 				    &rq_create->u.response);
13072 		bar_memmap_p = lpfc_dual_chute_pci_bar_map(phba, pci_barset);
13073 		if (!bar_memmap_p) {
13074 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13075 					"3269 RQ[%d] failed to memmap pci "
13076 					"barset:x%x\n", hrq->queue_id,
13077 					pci_barset);
13078 			status = -ENOMEM;
13079 			goto out;
13080 		}
13081 
13082 		db_offset = rq_create->u.response.doorbell_offset;
13083 		if ((db_offset != LPFC_ULP0_RQ_DOORBELL) &&
13084 		    (db_offset != LPFC_ULP1_RQ_DOORBELL)) {
13085 			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13086 					"3270 RQ[%d] doorbell offset not "
13087 					"supported: x%x\n", hrq->queue_id,
13088 					db_offset);
13089 			status = -EINVAL;
13090 			goto out;
13091 		}
13092 		hrq->db_regaddr = bar_memmap_p + db_offset;
13093 		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
13094 				"3266 RQ[qid:%d]: barset:x%x, offset:x%x\n",
13095 				hrq->queue_id, pci_barset, db_offset);
13096 	} else {
13097 		hrq->db_format = LPFC_DB_RING_FORMAT;
13098 		hrq->db_regaddr = phba->sli4_hba.RQDBregaddr;
13099 	}
13100 	hrq->type = LPFC_HRQ;
13101 	hrq->assoc_qid = cq->queue_id;
13102 	hrq->subtype = subtype;
13103 	hrq->host_index = 0;
13104 	hrq->hba_index = 0;
13105 
13106 	/* now create the data queue */
13107 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE,
13108 			 LPFC_MBOX_OPCODE_FCOE_RQ_CREATE,
13109 			 length, LPFC_SLI4_MBX_EMBED);
13110 	bf_set(lpfc_mbox_hdr_version, &shdr->request,
13111 	       phba->sli4_hba.pc_sli4_params.rqv);
13112 	if (phba->sli4_hba.pc_sli4_params.rqv == LPFC_Q_CREATE_VERSION_1) {
13113 		bf_set(lpfc_rq_context_rqe_count_1,
13114 		       &rq_create->u.request.context, hrq->entry_count);
13115 		rq_create->u.request.context.buffer_size = LPFC_DATA_BUF_SIZE;
13116 		bf_set(lpfc_rq_context_rqe_size, &rq_create->u.request.context,
13117 		       LPFC_RQE_SIZE_8);
13118 		bf_set(lpfc_rq_context_page_size, &rq_create->u.request.context,
13119 		       (PAGE_SIZE/SLI4_PAGE_SIZE));
13120 	} else {
13121 		switch (drq->entry_count) {
13122 		default:
13123 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
13124 					"2536 Unsupported RQ count. (%d)\n",
13125 					drq->entry_count);
13126 			if (drq->entry_count < 512) {
13127 				status = -EINVAL;
13128 				goto out;
13129 			}
13130 			/* otherwise default to smallest count (drop through) */
13131 		case 512:
13132 			bf_set(lpfc_rq_context_rqe_count,
13133 			       &rq_create->u.request.context,
13134 			       LPFC_RQ_RING_SIZE_512);
13135 			break;
13136 		case 1024:
13137 			bf_set(lpfc_rq_context_rqe_count,
13138 			       &rq_create->u.request.context,
13139 			       LPFC_RQ_RING_SIZE_1024);
13140 			break;
13141 		case 2048:
13142 			bf_set(lpfc_rq_context_rqe_count,
13143 			       &rq_create->u.request.context,
13144 			       LPFC_RQ_RING_SIZE_2048);
13145 			break;
13146 		case 4096:
13147 			bf_set(lpfc_rq_context_rqe_count,
13148 			       &rq_create->u.request.context,
13149 			       LPFC_RQ_RING_SIZE_4096);
13150 			break;
13151 		}
13152 		bf_set(lpfc_rq_context_buf_size, &rq_create->u.request.context,
13153 		       LPFC_DATA_BUF_SIZE);
13154 	}
13155 	bf_set(lpfc_rq_context_cq_id, &rq_create->u.request.context,
13156 	       cq->queue_id);
13157 	bf_set(lpfc_mbx_rq_create_num_pages, &rq_create->u.request,
13158 	       drq->page_count);
13159 	list_for_each_entry(dmabuf, &drq->page_list, list) {
13160 		rq_create->u.request.page[dmabuf->buffer_tag].addr_lo =
13161 					putPaddrLow(dmabuf->phys);
13162 		rq_create->u.request.page[dmabuf->buffer_tag].addr_hi =
13163 					putPaddrHigh(dmabuf->phys);
13164 	}
13165 	if (phba->sli4_hba.fw_func_mode & LPFC_DUA_MODE)
13166 		bf_set(lpfc_mbx_rq_create_dua, &rq_create->u.request, 1);
13167 	rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
13168 	/* The IOCTL status is embedded in the mailbox subheader. */
13169 	shdr = (union lpfc_sli4_cfg_shdr *) &rq_create->header.cfg_shdr;
13170 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13171 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13172 	if (shdr_status || shdr_add_status || rc) {
13173 		status = -ENXIO;
13174 		goto out;
13175 	}
13176 	drq->queue_id = bf_get(lpfc_mbx_rq_create_q_id, &rq_create->u.response);
13177 	if (drq->queue_id == 0xFFFF) {
13178 		status = -ENXIO;
13179 		goto out;
13180 	}
13181 	drq->type = LPFC_DRQ;
13182 	drq->assoc_qid = cq->queue_id;
13183 	drq->subtype = subtype;
13184 	drq->host_index = 0;
13185 	drq->hba_index = 0;
13186 
13187 	/* link the header and data RQs onto the parent cq child list */
13188 	list_add_tail(&hrq->list, &cq->child_list);
13189 	list_add_tail(&drq->list, &cq->child_list);
13190 
13191 out:
13192 	mempool_free(mbox, phba->mbox_mem_pool);
13193 	return status;
13194 }
13195 
13196 /**
13197  * lpfc_eq_destroy - Destroy an event Queue on the HBA
13198  * @eq: The queue structure associated with the queue to destroy.
13199  *
13200  * This function destroys a queue, as detailed in @eq by sending an mailbox
13201  * command, specific to the type of queue, to the HBA.
13202  *
13203  * The @eq struct is used to get the queue ID of the queue to destroy.
13204  *
13205  * On success this function will return a zero. If the queue destroy mailbox
13206  * command fails this function will return -ENXIO.
13207  **/
13208 uint32_t
13209 lpfc_eq_destroy(struct lpfc_hba *phba, struct lpfc_queue *eq)
13210 {
13211 	LPFC_MBOXQ_t *mbox;
13212 	int rc, length, status = 0;
13213 	uint32_t shdr_status, shdr_add_status;
13214 	union lpfc_sli4_cfg_shdr *shdr;
13215 
13216 	/* sanity check on queue memory */
13217 	if (!eq)
13218 		return -ENODEV;
13219 	mbox = mempool_alloc(eq->phba->mbox_mem_pool, GFP_KERNEL);
13220 	if (!mbox)
13221 		return -ENOMEM;
13222 	length = (sizeof(struct lpfc_mbx_eq_destroy) -
13223 		  sizeof(struct lpfc_sli4_cfg_mhdr));
13224 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
13225 			 LPFC_MBOX_OPCODE_EQ_DESTROY,
13226 			 length, LPFC_SLI4_MBX_EMBED);
13227 	bf_set(lpfc_mbx_eq_destroy_q_id, &mbox->u.mqe.un.eq_destroy.u.request,
13228 	       eq->queue_id);
13229 	mbox->vport = eq->phba->pport;
13230 	mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
13231 
13232 	rc = lpfc_sli_issue_mbox(eq->phba, mbox, MBX_POLL);
13233 	/* The IOCTL status is embedded in the mailbox subheader. */
13234 	shdr = (union lpfc_sli4_cfg_shdr *)
13235 		&mbox->u.mqe.un.eq_destroy.header.cfg_shdr;
13236 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13237 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13238 	if (shdr_status || shdr_add_status || rc) {
13239 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13240 				"2505 EQ_DESTROY mailbox failed with "
13241 				"status x%x add_status x%x, mbx status x%x\n",
13242 				shdr_status, shdr_add_status, rc);
13243 		status = -ENXIO;
13244 	}
13245 
13246 	/* Remove eq from any list */
13247 	list_del_init(&eq->list);
13248 	mempool_free(mbox, eq->phba->mbox_mem_pool);
13249 	return status;
13250 }
13251 
13252 /**
13253  * lpfc_cq_destroy - Destroy a Completion Queue on the HBA
13254  * @cq: The queue structure associated with the queue to destroy.
13255  *
13256  * This function destroys a queue, as detailed in @cq by sending an mailbox
13257  * command, specific to the type of queue, to the HBA.
13258  *
13259  * The @cq struct is used to get the queue ID of the queue to destroy.
13260  *
13261  * On success this function will return a zero. If the queue destroy mailbox
13262  * command fails this function will return -ENXIO.
13263  **/
13264 uint32_t
13265 lpfc_cq_destroy(struct lpfc_hba *phba, struct lpfc_queue *cq)
13266 {
13267 	LPFC_MBOXQ_t *mbox;
13268 	int rc, length, status = 0;
13269 	uint32_t shdr_status, shdr_add_status;
13270 	union lpfc_sli4_cfg_shdr *shdr;
13271 
13272 	/* sanity check on queue memory */
13273 	if (!cq)
13274 		return -ENODEV;
13275 	mbox = mempool_alloc(cq->phba->mbox_mem_pool, GFP_KERNEL);
13276 	if (!mbox)
13277 		return -ENOMEM;
13278 	length = (sizeof(struct lpfc_mbx_cq_destroy) -
13279 		  sizeof(struct lpfc_sli4_cfg_mhdr));
13280 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
13281 			 LPFC_MBOX_OPCODE_CQ_DESTROY,
13282 			 length, LPFC_SLI4_MBX_EMBED);
13283 	bf_set(lpfc_mbx_cq_destroy_q_id, &mbox->u.mqe.un.cq_destroy.u.request,
13284 	       cq->queue_id);
13285 	mbox->vport = cq->phba->pport;
13286 	mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
13287 	rc = lpfc_sli_issue_mbox(cq->phba, mbox, MBX_POLL);
13288 	/* The IOCTL status is embedded in the mailbox subheader. */
13289 	shdr = (union lpfc_sli4_cfg_shdr *)
13290 		&mbox->u.mqe.un.wq_create.header.cfg_shdr;
13291 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13292 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13293 	if (shdr_status || shdr_add_status || rc) {
13294 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13295 				"2506 CQ_DESTROY mailbox failed with "
13296 				"status x%x add_status x%x, mbx status x%x\n",
13297 				shdr_status, shdr_add_status, rc);
13298 		status = -ENXIO;
13299 	}
13300 	/* Remove cq from any list */
13301 	list_del_init(&cq->list);
13302 	mempool_free(mbox, cq->phba->mbox_mem_pool);
13303 	return status;
13304 }
13305 
13306 /**
13307  * lpfc_mq_destroy - Destroy a Mailbox Queue on the HBA
13308  * @qm: The queue structure associated with the queue to destroy.
13309  *
13310  * This function destroys a queue, as detailed in @mq by sending an mailbox
13311  * command, specific to the type of queue, to the HBA.
13312  *
13313  * The @mq struct is used to get the queue ID of the queue to destroy.
13314  *
13315  * On success this function will return a zero. If the queue destroy mailbox
13316  * command fails this function will return -ENXIO.
13317  **/
13318 uint32_t
13319 lpfc_mq_destroy(struct lpfc_hba *phba, struct lpfc_queue *mq)
13320 {
13321 	LPFC_MBOXQ_t *mbox;
13322 	int rc, length, status = 0;
13323 	uint32_t shdr_status, shdr_add_status;
13324 	union lpfc_sli4_cfg_shdr *shdr;
13325 
13326 	/* sanity check on queue memory */
13327 	if (!mq)
13328 		return -ENODEV;
13329 	mbox = mempool_alloc(mq->phba->mbox_mem_pool, GFP_KERNEL);
13330 	if (!mbox)
13331 		return -ENOMEM;
13332 	length = (sizeof(struct lpfc_mbx_mq_destroy) -
13333 		  sizeof(struct lpfc_sli4_cfg_mhdr));
13334 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
13335 			 LPFC_MBOX_OPCODE_MQ_DESTROY,
13336 			 length, LPFC_SLI4_MBX_EMBED);
13337 	bf_set(lpfc_mbx_mq_destroy_q_id, &mbox->u.mqe.un.mq_destroy.u.request,
13338 	       mq->queue_id);
13339 	mbox->vport = mq->phba->pport;
13340 	mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
13341 	rc = lpfc_sli_issue_mbox(mq->phba, mbox, MBX_POLL);
13342 	/* The IOCTL status is embedded in the mailbox subheader. */
13343 	shdr = (union lpfc_sli4_cfg_shdr *)
13344 		&mbox->u.mqe.un.mq_destroy.header.cfg_shdr;
13345 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13346 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13347 	if (shdr_status || shdr_add_status || rc) {
13348 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13349 				"2507 MQ_DESTROY mailbox failed with "
13350 				"status x%x add_status x%x, mbx status x%x\n",
13351 				shdr_status, shdr_add_status, rc);
13352 		status = -ENXIO;
13353 	}
13354 	/* Remove mq from any list */
13355 	list_del_init(&mq->list);
13356 	mempool_free(mbox, mq->phba->mbox_mem_pool);
13357 	return status;
13358 }
13359 
13360 /**
13361  * lpfc_wq_destroy - Destroy a Work Queue on the HBA
13362  * @wq: The queue structure associated with the queue to destroy.
13363  *
13364  * This function destroys a queue, as detailed in @wq by sending an mailbox
13365  * command, specific to the type of queue, to the HBA.
13366  *
13367  * The @wq struct is used to get the queue ID of the queue to destroy.
13368  *
13369  * On success this function will return a zero. If the queue destroy mailbox
13370  * command fails this function will return -ENXIO.
13371  **/
13372 uint32_t
13373 lpfc_wq_destroy(struct lpfc_hba *phba, struct lpfc_queue *wq)
13374 {
13375 	LPFC_MBOXQ_t *mbox;
13376 	int rc, length, status = 0;
13377 	uint32_t shdr_status, shdr_add_status;
13378 	union lpfc_sli4_cfg_shdr *shdr;
13379 
13380 	/* sanity check on queue memory */
13381 	if (!wq)
13382 		return -ENODEV;
13383 	mbox = mempool_alloc(wq->phba->mbox_mem_pool, GFP_KERNEL);
13384 	if (!mbox)
13385 		return -ENOMEM;
13386 	length = (sizeof(struct lpfc_mbx_wq_destroy) -
13387 		  sizeof(struct lpfc_sli4_cfg_mhdr));
13388 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE,
13389 			 LPFC_MBOX_OPCODE_FCOE_WQ_DESTROY,
13390 			 length, LPFC_SLI4_MBX_EMBED);
13391 	bf_set(lpfc_mbx_wq_destroy_q_id, &mbox->u.mqe.un.wq_destroy.u.request,
13392 	       wq->queue_id);
13393 	mbox->vport = wq->phba->pport;
13394 	mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
13395 	rc = lpfc_sli_issue_mbox(wq->phba, mbox, MBX_POLL);
13396 	shdr = (union lpfc_sli4_cfg_shdr *)
13397 		&mbox->u.mqe.un.wq_destroy.header.cfg_shdr;
13398 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13399 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13400 	if (shdr_status || shdr_add_status || rc) {
13401 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13402 				"2508 WQ_DESTROY mailbox failed with "
13403 				"status x%x add_status x%x, mbx status x%x\n",
13404 				shdr_status, shdr_add_status, rc);
13405 		status = -ENXIO;
13406 	}
13407 	/* Remove wq from any list */
13408 	list_del_init(&wq->list);
13409 	mempool_free(mbox, wq->phba->mbox_mem_pool);
13410 	return status;
13411 }
13412 
13413 /**
13414  * lpfc_rq_destroy - Destroy a Receive Queue on the HBA
13415  * @rq: The queue structure associated with the queue to destroy.
13416  *
13417  * This function destroys a queue, as detailed in @rq by sending an mailbox
13418  * command, specific to the type of queue, to the HBA.
13419  *
13420  * The @rq struct is used to get the queue ID of the queue to destroy.
13421  *
13422  * On success this function will return a zero. If the queue destroy mailbox
13423  * command fails this function will return -ENXIO.
13424  **/
13425 uint32_t
13426 lpfc_rq_destroy(struct lpfc_hba *phba, struct lpfc_queue *hrq,
13427 		struct lpfc_queue *drq)
13428 {
13429 	LPFC_MBOXQ_t *mbox;
13430 	int rc, length, status = 0;
13431 	uint32_t shdr_status, shdr_add_status;
13432 	union lpfc_sli4_cfg_shdr *shdr;
13433 
13434 	/* sanity check on queue memory */
13435 	if (!hrq || !drq)
13436 		return -ENODEV;
13437 	mbox = mempool_alloc(hrq->phba->mbox_mem_pool, GFP_KERNEL);
13438 	if (!mbox)
13439 		return -ENOMEM;
13440 	length = (sizeof(struct lpfc_mbx_rq_destroy) -
13441 		  sizeof(struct lpfc_sli4_cfg_mhdr));
13442 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE,
13443 			 LPFC_MBOX_OPCODE_FCOE_RQ_DESTROY,
13444 			 length, LPFC_SLI4_MBX_EMBED);
13445 	bf_set(lpfc_mbx_rq_destroy_q_id, &mbox->u.mqe.un.rq_destroy.u.request,
13446 	       hrq->queue_id);
13447 	mbox->vport = hrq->phba->pport;
13448 	mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
13449 	rc = lpfc_sli_issue_mbox(hrq->phba, mbox, MBX_POLL);
13450 	/* The IOCTL status is embedded in the mailbox subheader. */
13451 	shdr = (union lpfc_sli4_cfg_shdr *)
13452 		&mbox->u.mqe.un.rq_destroy.header.cfg_shdr;
13453 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13454 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13455 	if (shdr_status || shdr_add_status || rc) {
13456 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13457 				"2509 RQ_DESTROY mailbox failed with "
13458 				"status x%x add_status x%x, mbx status x%x\n",
13459 				shdr_status, shdr_add_status, rc);
13460 		if (rc != MBX_TIMEOUT)
13461 			mempool_free(mbox, hrq->phba->mbox_mem_pool);
13462 		return -ENXIO;
13463 	}
13464 	bf_set(lpfc_mbx_rq_destroy_q_id, &mbox->u.mqe.un.rq_destroy.u.request,
13465 	       drq->queue_id);
13466 	rc = lpfc_sli_issue_mbox(drq->phba, mbox, MBX_POLL);
13467 	shdr = (union lpfc_sli4_cfg_shdr *)
13468 		&mbox->u.mqe.un.rq_destroy.header.cfg_shdr;
13469 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13470 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13471 	if (shdr_status || shdr_add_status || rc) {
13472 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13473 				"2510 RQ_DESTROY mailbox failed with "
13474 				"status x%x add_status x%x, mbx status x%x\n",
13475 				shdr_status, shdr_add_status, rc);
13476 		status = -ENXIO;
13477 	}
13478 	list_del_init(&hrq->list);
13479 	list_del_init(&drq->list);
13480 	mempool_free(mbox, hrq->phba->mbox_mem_pool);
13481 	return status;
13482 }
13483 
13484 /**
13485  * lpfc_sli4_post_sgl - Post scatter gather list for an XRI to HBA
13486  * @phba: The virtual port for which this call being executed.
13487  * @pdma_phys_addr0: Physical address of the 1st SGL page.
13488  * @pdma_phys_addr1: Physical address of the 2nd SGL page.
13489  * @xritag: the xritag that ties this io to the SGL pages.
13490  *
13491  * This routine will post the sgl pages for the IO that has the xritag
13492  * that is in the iocbq structure. The xritag is assigned during iocbq
13493  * creation and persists for as long as the driver is loaded.
13494  * if the caller has fewer than 256 scatter gather segments to map then
13495  * pdma_phys_addr1 should be 0.
13496  * If the caller needs to map more than 256 scatter gather segment then
13497  * pdma_phys_addr1 should be a valid physical address.
13498  * physical address for SGLs must be 64 byte aligned.
13499  * If you are going to map 2 SGL's then the first one must have 256 entries
13500  * the second sgl can have between 1 and 256 entries.
13501  *
13502  * Return codes:
13503  * 	0 - Success
13504  * 	-ENXIO, -ENOMEM - Failure
13505  **/
13506 int
13507 lpfc_sli4_post_sgl(struct lpfc_hba *phba,
13508 		dma_addr_t pdma_phys_addr0,
13509 		dma_addr_t pdma_phys_addr1,
13510 		uint16_t xritag)
13511 {
13512 	struct lpfc_mbx_post_sgl_pages *post_sgl_pages;
13513 	LPFC_MBOXQ_t *mbox;
13514 	int rc;
13515 	uint32_t shdr_status, shdr_add_status;
13516 	uint32_t mbox_tmo;
13517 	union lpfc_sli4_cfg_shdr *shdr;
13518 
13519 	if (xritag == NO_XRI) {
13520 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
13521 				"0364 Invalid param:\n");
13522 		return -EINVAL;
13523 	}
13524 
13525 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
13526 	if (!mbox)
13527 		return -ENOMEM;
13528 
13529 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE,
13530 			LPFC_MBOX_OPCODE_FCOE_POST_SGL_PAGES,
13531 			sizeof(struct lpfc_mbx_post_sgl_pages) -
13532 			sizeof(struct lpfc_sli4_cfg_mhdr), LPFC_SLI4_MBX_EMBED);
13533 
13534 	post_sgl_pages = (struct lpfc_mbx_post_sgl_pages *)
13535 				&mbox->u.mqe.un.post_sgl_pages;
13536 	bf_set(lpfc_post_sgl_pages_xri, post_sgl_pages, xritag);
13537 	bf_set(lpfc_post_sgl_pages_xricnt, post_sgl_pages, 1);
13538 
13539 	post_sgl_pages->sgl_pg_pairs[0].sgl_pg0_addr_lo	=
13540 				cpu_to_le32(putPaddrLow(pdma_phys_addr0));
13541 	post_sgl_pages->sgl_pg_pairs[0].sgl_pg0_addr_hi =
13542 				cpu_to_le32(putPaddrHigh(pdma_phys_addr0));
13543 
13544 	post_sgl_pages->sgl_pg_pairs[0].sgl_pg1_addr_lo	=
13545 				cpu_to_le32(putPaddrLow(pdma_phys_addr1));
13546 	post_sgl_pages->sgl_pg_pairs[0].sgl_pg1_addr_hi =
13547 				cpu_to_le32(putPaddrHigh(pdma_phys_addr1));
13548 	if (!phba->sli4_hba.intr_enable)
13549 		rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
13550 	else {
13551 		mbox_tmo = lpfc_mbox_tmo_val(phba, mbox);
13552 		rc = lpfc_sli_issue_mbox_wait(phba, mbox, mbox_tmo);
13553 	}
13554 	/* The IOCTL status is embedded in the mailbox subheader. */
13555 	shdr = (union lpfc_sli4_cfg_shdr *) &post_sgl_pages->header.cfg_shdr;
13556 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13557 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13558 	if (rc != MBX_TIMEOUT)
13559 		mempool_free(mbox, phba->mbox_mem_pool);
13560 	if (shdr_status || shdr_add_status || rc) {
13561 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13562 				"2511 POST_SGL mailbox failed with "
13563 				"status x%x add_status x%x, mbx status x%x\n",
13564 				shdr_status, shdr_add_status, rc);
13565 		rc = -ENXIO;
13566 	}
13567 	return 0;
13568 }
13569 
13570 /**
13571  * lpfc_sli4_alloc_xri - Get an available rpi in the device's range
13572  * @phba: pointer to lpfc hba data structure.
13573  *
13574  * This routine is invoked to post rpi header templates to the
13575  * HBA consistent with the SLI-4 interface spec.  This routine
13576  * posts a SLI4_PAGE_SIZE memory region to the port to hold up to
13577  * SLI4_PAGE_SIZE modulo 64 rpi context headers.
13578  *
13579  * Returns
13580  *	A nonzero rpi defined as rpi_base <= rpi < max_rpi if successful
13581  *	LPFC_RPI_ALLOC_ERROR if no rpis are available.
13582  **/
13583 uint16_t
13584 lpfc_sli4_alloc_xri(struct lpfc_hba *phba)
13585 {
13586 	unsigned long xri;
13587 
13588 	/*
13589 	 * Fetch the next logical xri.  Because this index is logical,
13590 	 * the driver starts at 0 each time.
13591 	 */
13592 	spin_lock_irq(&phba->hbalock);
13593 	xri = find_next_zero_bit(phba->sli4_hba.xri_bmask,
13594 				 phba->sli4_hba.max_cfg_param.max_xri, 0);
13595 	if (xri >= phba->sli4_hba.max_cfg_param.max_xri) {
13596 		spin_unlock_irq(&phba->hbalock);
13597 		return NO_XRI;
13598 	} else {
13599 		set_bit(xri, phba->sli4_hba.xri_bmask);
13600 		phba->sli4_hba.max_cfg_param.xri_used++;
13601 	}
13602 	spin_unlock_irq(&phba->hbalock);
13603 	return xri;
13604 }
13605 
13606 /**
13607  * lpfc_sli4_free_xri - Release an xri for reuse.
13608  * @phba: pointer to lpfc hba data structure.
13609  *
13610  * This routine is invoked to release an xri to the pool of
13611  * available rpis maintained by the driver.
13612  **/
13613 void
13614 __lpfc_sli4_free_xri(struct lpfc_hba *phba, int xri)
13615 {
13616 	if (test_and_clear_bit(xri, phba->sli4_hba.xri_bmask)) {
13617 		phba->sli4_hba.max_cfg_param.xri_used--;
13618 	}
13619 }
13620 
13621 /**
13622  * lpfc_sli4_free_xri - Release an xri for reuse.
13623  * @phba: pointer to lpfc hba data structure.
13624  *
13625  * This routine is invoked to release an xri to the pool of
13626  * available rpis maintained by the driver.
13627  **/
13628 void
13629 lpfc_sli4_free_xri(struct lpfc_hba *phba, int xri)
13630 {
13631 	spin_lock_irq(&phba->hbalock);
13632 	__lpfc_sli4_free_xri(phba, xri);
13633 	spin_unlock_irq(&phba->hbalock);
13634 }
13635 
13636 /**
13637  * lpfc_sli4_next_xritag - Get an xritag for the io
13638  * @phba: Pointer to HBA context object.
13639  *
13640  * This function gets an xritag for the iocb. If there is no unused xritag
13641  * it will return 0xffff.
13642  * The function returns the allocated xritag if successful, else returns zero.
13643  * Zero is not a valid xritag.
13644  * The caller is not required to hold any lock.
13645  **/
13646 uint16_t
13647 lpfc_sli4_next_xritag(struct lpfc_hba *phba)
13648 {
13649 	uint16_t xri_index;
13650 
13651 	xri_index = lpfc_sli4_alloc_xri(phba);
13652 	if (xri_index == NO_XRI)
13653 		lpfc_printf_log(phba, KERN_WARNING, LOG_SLI,
13654 				"2004 Failed to allocate XRI.last XRITAG is %d"
13655 				" Max XRI is %d, Used XRI is %d\n",
13656 				xri_index,
13657 				phba->sli4_hba.max_cfg_param.max_xri,
13658 				phba->sli4_hba.max_cfg_param.xri_used);
13659 	return xri_index;
13660 }
13661 
13662 /**
13663  * lpfc_sli4_post_els_sgl_list - post a block of ELS sgls to the port.
13664  * @phba: pointer to lpfc hba data structure.
13665  * @post_sgl_list: pointer to els sgl entry list.
13666  * @count: number of els sgl entries on the list.
13667  *
13668  * This routine is invoked to post a block of driver's sgl pages to the
13669  * HBA using non-embedded mailbox command. No Lock is held. This routine
13670  * is only called when the driver is loading and after all IO has been
13671  * stopped.
13672  **/
13673 static int
13674 lpfc_sli4_post_els_sgl_list(struct lpfc_hba *phba,
13675 			    struct list_head *post_sgl_list,
13676 			    int post_cnt)
13677 {
13678 	struct lpfc_sglq *sglq_entry = NULL, *sglq_next = NULL;
13679 	struct lpfc_mbx_post_uembed_sgl_page1 *sgl;
13680 	struct sgl_page_pairs *sgl_pg_pairs;
13681 	void *viraddr;
13682 	LPFC_MBOXQ_t *mbox;
13683 	uint32_t reqlen, alloclen, pg_pairs;
13684 	uint32_t mbox_tmo;
13685 	uint16_t xritag_start = 0;
13686 	int rc = 0;
13687 	uint32_t shdr_status, shdr_add_status;
13688 	union lpfc_sli4_cfg_shdr *shdr;
13689 
13690 	reqlen = phba->sli4_hba.els_xri_cnt * sizeof(struct sgl_page_pairs) +
13691 		 sizeof(union lpfc_sli4_cfg_shdr) + sizeof(uint32_t);
13692 	if (reqlen > SLI4_PAGE_SIZE) {
13693 		lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
13694 				"2559 Block sgl registration required DMA "
13695 				"size (%d) great than a page\n", reqlen);
13696 		return -ENOMEM;
13697 	}
13698 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
13699 	if (!mbox)
13700 		return -ENOMEM;
13701 
13702 	/* Allocate DMA memory and set up the non-embedded mailbox command */
13703 	alloclen = lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE,
13704 			 LPFC_MBOX_OPCODE_FCOE_POST_SGL_PAGES, reqlen,
13705 			 LPFC_SLI4_MBX_NEMBED);
13706 
13707 	if (alloclen < reqlen) {
13708 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13709 				"0285 Allocated DMA memory size (%d) is "
13710 				"less than the requested DMA memory "
13711 				"size (%d)\n", alloclen, reqlen);
13712 		lpfc_sli4_mbox_cmd_free(phba, mbox);
13713 		return -ENOMEM;
13714 	}
13715 	/* Set up the SGL pages in the non-embedded DMA pages */
13716 	viraddr = mbox->sge_array->addr[0];
13717 	sgl = (struct lpfc_mbx_post_uembed_sgl_page1 *)viraddr;
13718 	sgl_pg_pairs = &sgl->sgl_pg_pairs;
13719 
13720 	pg_pairs = 0;
13721 	list_for_each_entry_safe(sglq_entry, sglq_next, post_sgl_list, list) {
13722 		/* Set up the sge entry */
13723 		sgl_pg_pairs->sgl_pg0_addr_lo =
13724 				cpu_to_le32(putPaddrLow(sglq_entry->phys));
13725 		sgl_pg_pairs->sgl_pg0_addr_hi =
13726 				cpu_to_le32(putPaddrHigh(sglq_entry->phys));
13727 		sgl_pg_pairs->sgl_pg1_addr_lo =
13728 				cpu_to_le32(putPaddrLow(0));
13729 		sgl_pg_pairs->sgl_pg1_addr_hi =
13730 				cpu_to_le32(putPaddrHigh(0));
13731 
13732 		/* Keep the first xritag on the list */
13733 		if (pg_pairs == 0)
13734 			xritag_start = sglq_entry->sli4_xritag;
13735 		sgl_pg_pairs++;
13736 		pg_pairs++;
13737 	}
13738 
13739 	/* Complete initialization and perform endian conversion. */
13740 	bf_set(lpfc_post_sgl_pages_xri, sgl, xritag_start);
13741 	bf_set(lpfc_post_sgl_pages_xricnt, sgl, phba->sli4_hba.els_xri_cnt);
13742 	sgl->word0 = cpu_to_le32(sgl->word0);
13743 	if (!phba->sli4_hba.intr_enable)
13744 		rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
13745 	else {
13746 		mbox_tmo = lpfc_mbox_tmo_val(phba, mbox);
13747 		rc = lpfc_sli_issue_mbox_wait(phba, mbox, mbox_tmo);
13748 	}
13749 	shdr = (union lpfc_sli4_cfg_shdr *) &sgl->cfg_shdr;
13750 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13751 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13752 	if (rc != MBX_TIMEOUT)
13753 		lpfc_sli4_mbox_cmd_free(phba, mbox);
13754 	if (shdr_status || shdr_add_status || rc) {
13755 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
13756 				"2513 POST_SGL_BLOCK mailbox command failed "
13757 				"status x%x add_status x%x mbx status x%x\n",
13758 				shdr_status, shdr_add_status, rc);
13759 		rc = -ENXIO;
13760 	}
13761 	return rc;
13762 }
13763 
13764 /**
13765  * lpfc_sli4_post_scsi_sgl_block - post a block of scsi sgl list to firmware
13766  * @phba: pointer to lpfc hba data structure.
13767  * @sblist: pointer to scsi buffer list.
13768  * @count: number of scsi buffers on the list.
13769  *
13770  * This routine is invoked to post a block of @count scsi sgl pages from a
13771  * SCSI buffer list @sblist to the HBA using non-embedded mailbox command.
13772  * No Lock is held.
13773  *
13774  **/
13775 int
13776 lpfc_sli4_post_scsi_sgl_block(struct lpfc_hba *phba,
13777 			      struct list_head *sblist,
13778 			      int count)
13779 {
13780 	struct lpfc_scsi_buf *psb;
13781 	struct lpfc_mbx_post_uembed_sgl_page1 *sgl;
13782 	struct sgl_page_pairs *sgl_pg_pairs;
13783 	void *viraddr;
13784 	LPFC_MBOXQ_t *mbox;
13785 	uint32_t reqlen, alloclen, pg_pairs;
13786 	uint32_t mbox_tmo;
13787 	uint16_t xritag_start = 0;
13788 	int rc = 0;
13789 	uint32_t shdr_status, shdr_add_status;
13790 	dma_addr_t pdma_phys_bpl1;
13791 	union lpfc_sli4_cfg_shdr *shdr;
13792 
13793 	/* Calculate the requested length of the dma memory */
13794 	reqlen = count * sizeof(struct sgl_page_pairs) +
13795 		 sizeof(union lpfc_sli4_cfg_shdr) + sizeof(uint32_t);
13796 	if (reqlen > SLI4_PAGE_SIZE) {
13797 		lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
13798 				"0217 Block sgl registration required DMA "
13799 				"size (%d) great than a page\n", reqlen);
13800 		return -ENOMEM;
13801 	}
13802 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
13803 	if (!mbox) {
13804 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13805 				"0283 Failed to allocate mbox cmd memory\n");
13806 		return -ENOMEM;
13807 	}
13808 
13809 	/* Allocate DMA memory and set up the non-embedded mailbox command */
13810 	alloclen = lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE,
13811 				LPFC_MBOX_OPCODE_FCOE_POST_SGL_PAGES, reqlen,
13812 				LPFC_SLI4_MBX_NEMBED);
13813 
13814 	if (alloclen < reqlen) {
13815 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
13816 				"2561 Allocated DMA memory size (%d) is "
13817 				"less than the requested DMA memory "
13818 				"size (%d)\n", alloclen, reqlen);
13819 		lpfc_sli4_mbox_cmd_free(phba, mbox);
13820 		return -ENOMEM;
13821 	}
13822 
13823 	/* Get the first SGE entry from the non-embedded DMA memory */
13824 	viraddr = mbox->sge_array->addr[0];
13825 
13826 	/* Set up the SGL pages in the non-embedded DMA pages */
13827 	sgl = (struct lpfc_mbx_post_uembed_sgl_page1 *)viraddr;
13828 	sgl_pg_pairs = &sgl->sgl_pg_pairs;
13829 
13830 	pg_pairs = 0;
13831 	list_for_each_entry(psb, sblist, list) {
13832 		/* Set up the sge entry */
13833 		sgl_pg_pairs->sgl_pg0_addr_lo =
13834 			cpu_to_le32(putPaddrLow(psb->dma_phys_bpl));
13835 		sgl_pg_pairs->sgl_pg0_addr_hi =
13836 			cpu_to_le32(putPaddrHigh(psb->dma_phys_bpl));
13837 		if (phba->cfg_sg_dma_buf_size > SGL_PAGE_SIZE)
13838 			pdma_phys_bpl1 = psb->dma_phys_bpl + SGL_PAGE_SIZE;
13839 		else
13840 			pdma_phys_bpl1 = 0;
13841 		sgl_pg_pairs->sgl_pg1_addr_lo =
13842 			cpu_to_le32(putPaddrLow(pdma_phys_bpl1));
13843 		sgl_pg_pairs->sgl_pg1_addr_hi =
13844 			cpu_to_le32(putPaddrHigh(pdma_phys_bpl1));
13845 		/* Keep the first xritag on the list */
13846 		if (pg_pairs == 0)
13847 			xritag_start = psb->cur_iocbq.sli4_xritag;
13848 		sgl_pg_pairs++;
13849 		pg_pairs++;
13850 	}
13851 	bf_set(lpfc_post_sgl_pages_xri, sgl, xritag_start);
13852 	bf_set(lpfc_post_sgl_pages_xricnt, sgl, pg_pairs);
13853 	/* Perform endian conversion if necessary */
13854 	sgl->word0 = cpu_to_le32(sgl->word0);
13855 
13856 	if (!phba->sli4_hba.intr_enable)
13857 		rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
13858 	else {
13859 		mbox_tmo = lpfc_mbox_tmo_val(phba, mbox);
13860 		rc = lpfc_sli_issue_mbox_wait(phba, mbox, mbox_tmo);
13861 	}
13862 	shdr = (union lpfc_sli4_cfg_shdr *) &sgl->cfg_shdr;
13863 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
13864 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
13865 	if (rc != MBX_TIMEOUT)
13866 		lpfc_sli4_mbox_cmd_free(phba, mbox);
13867 	if (shdr_status || shdr_add_status || rc) {
13868 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
13869 				"2564 POST_SGL_BLOCK mailbox command failed "
13870 				"status x%x add_status x%x mbx status x%x\n",
13871 				shdr_status, shdr_add_status, rc);
13872 		rc = -ENXIO;
13873 	}
13874 	return rc;
13875 }
13876 
13877 /**
13878  * lpfc_fc_frame_check - Check that this frame is a valid frame to handle
13879  * @phba: pointer to lpfc_hba struct that the frame was received on
13880  * @fc_hdr: A pointer to the FC Header data (In Big Endian Format)
13881  *
13882  * This function checks the fields in the @fc_hdr to see if the FC frame is a
13883  * valid type of frame that the LPFC driver will handle. This function will
13884  * return a zero if the frame is a valid frame or a non zero value when the
13885  * frame does not pass the check.
13886  **/
13887 static int
13888 lpfc_fc_frame_check(struct lpfc_hba *phba, struct fc_frame_header *fc_hdr)
13889 {
13890 	/*  make rctl_names static to save stack space */
13891 	static char *rctl_names[] = FC_RCTL_NAMES_INIT;
13892 	char *type_names[] = FC_TYPE_NAMES_INIT;
13893 	struct fc_vft_header *fc_vft_hdr;
13894 	uint32_t *header = (uint32_t *) fc_hdr;
13895 
13896 	switch (fc_hdr->fh_r_ctl) {
13897 	case FC_RCTL_DD_UNCAT:		/* uncategorized information */
13898 	case FC_RCTL_DD_SOL_DATA:	/* solicited data */
13899 	case FC_RCTL_DD_UNSOL_CTL:	/* unsolicited control */
13900 	case FC_RCTL_DD_SOL_CTL:	/* solicited control or reply */
13901 	case FC_RCTL_DD_UNSOL_DATA:	/* unsolicited data */
13902 	case FC_RCTL_DD_DATA_DESC:	/* data descriptor */
13903 	case FC_RCTL_DD_UNSOL_CMD:	/* unsolicited command */
13904 	case FC_RCTL_DD_CMD_STATUS:	/* command status */
13905 	case FC_RCTL_ELS_REQ:	/* extended link services request */
13906 	case FC_RCTL_ELS_REP:	/* extended link services reply */
13907 	case FC_RCTL_ELS4_REQ:	/* FC-4 ELS request */
13908 	case FC_RCTL_ELS4_REP:	/* FC-4 ELS reply */
13909 	case FC_RCTL_BA_NOP:  	/* basic link service NOP */
13910 	case FC_RCTL_BA_ABTS: 	/* basic link service abort */
13911 	case FC_RCTL_BA_RMC: 	/* remove connection */
13912 	case FC_RCTL_BA_ACC:	/* basic accept */
13913 	case FC_RCTL_BA_RJT:	/* basic reject */
13914 	case FC_RCTL_BA_PRMT:
13915 	case FC_RCTL_ACK_1:	/* acknowledge_1 */
13916 	case FC_RCTL_ACK_0:	/* acknowledge_0 */
13917 	case FC_RCTL_P_RJT:	/* port reject */
13918 	case FC_RCTL_F_RJT:	/* fabric reject */
13919 	case FC_RCTL_P_BSY:	/* port busy */
13920 	case FC_RCTL_F_BSY:	/* fabric busy to data frame */
13921 	case FC_RCTL_F_BSYL:	/* fabric busy to link control frame */
13922 	case FC_RCTL_LCR:	/* link credit reset */
13923 	case FC_RCTL_END:	/* end */
13924 		break;
13925 	case FC_RCTL_VFTH:	/* Virtual Fabric tagging Header */
13926 		fc_vft_hdr = (struct fc_vft_header *)fc_hdr;
13927 		fc_hdr = &((struct fc_frame_header *)fc_vft_hdr)[1];
13928 		return lpfc_fc_frame_check(phba, fc_hdr);
13929 	default:
13930 		goto drop;
13931 	}
13932 	switch (fc_hdr->fh_type) {
13933 	case FC_TYPE_BLS:
13934 	case FC_TYPE_ELS:
13935 	case FC_TYPE_FCP:
13936 	case FC_TYPE_CT:
13937 		break;
13938 	case FC_TYPE_IP:
13939 	case FC_TYPE_ILS:
13940 	default:
13941 		goto drop;
13942 	}
13943 
13944 	lpfc_printf_log(phba, KERN_INFO, LOG_ELS,
13945 			"2538 Received frame rctl:%s type:%s "
13946 			"Frame Data:%08x %08x %08x %08x %08x %08x\n",
13947 			rctl_names[fc_hdr->fh_r_ctl],
13948 			type_names[fc_hdr->fh_type],
13949 			be32_to_cpu(header[0]), be32_to_cpu(header[1]),
13950 			be32_to_cpu(header[2]), be32_to_cpu(header[3]),
13951 			be32_to_cpu(header[4]), be32_to_cpu(header[5]));
13952 	return 0;
13953 drop:
13954 	lpfc_printf_log(phba, KERN_WARNING, LOG_ELS,
13955 			"2539 Dropped frame rctl:%s type:%s\n",
13956 			rctl_names[fc_hdr->fh_r_ctl],
13957 			type_names[fc_hdr->fh_type]);
13958 	return 1;
13959 }
13960 
13961 /**
13962  * lpfc_fc_hdr_get_vfi - Get the VFI from an FC frame
13963  * @fc_hdr: A pointer to the FC Header data (In Big Endian Format)
13964  *
13965  * This function processes the FC header to retrieve the VFI from the VF
13966  * header, if one exists. This function will return the VFI if one exists
13967  * or 0 if no VSAN Header exists.
13968  **/
13969 static uint32_t
13970 lpfc_fc_hdr_get_vfi(struct fc_frame_header *fc_hdr)
13971 {
13972 	struct fc_vft_header *fc_vft_hdr = (struct fc_vft_header *)fc_hdr;
13973 
13974 	if (fc_hdr->fh_r_ctl != FC_RCTL_VFTH)
13975 		return 0;
13976 	return bf_get(fc_vft_hdr_vf_id, fc_vft_hdr);
13977 }
13978 
13979 /**
13980  * lpfc_fc_frame_to_vport - Finds the vport that a frame is destined to
13981  * @phba: Pointer to the HBA structure to search for the vport on
13982  * @fc_hdr: A pointer to the FC Header data (In Big Endian Format)
13983  * @fcfi: The FC Fabric ID that the frame came from
13984  *
13985  * This function searches the @phba for a vport that matches the content of the
13986  * @fc_hdr passed in and the @fcfi. This function uses the @fc_hdr to fetch the
13987  * VFI, if the Virtual Fabric Tagging Header exists, and the DID. This function
13988  * returns the matching vport pointer or NULL if unable to match frame to a
13989  * vport.
13990  **/
13991 static struct lpfc_vport *
13992 lpfc_fc_frame_to_vport(struct lpfc_hba *phba, struct fc_frame_header *fc_hdr,
13993 		       uint16_t fcfi)
13994 {
13995 	struct lpfc_vport **vports;
13996 	struct lpfc_vport *vport = NULL;
13997 	int i;
13998 	uint32_t did = (fc_hdr->fh_d_id[0] << 16 |
13999 			fc_hdr->fh_d_id[1] << 8 |
14000 			fc_hdr->fh_d_id[2]);
14001 
14002 	if (did == Fabric_DID)
14003 		return phba->pport;
14004 	if ((phba->pport->fc_flag & FC_PT2PT) &&
14005 		!(phba->link_state == LPFC_HBA_READY))
14006 		return phba->pport;
14007 
14008 	vports = lpfc_create_vport_work_array(phba);
14009 	if (vports != NULL)
14010 		for (i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) {
14011 			if (phba->fcf.fcfi == fcfi &&
14012 			    vports[i]->vfi == lpfc_fc_hdr_get_vfi(fc_hdr) &&
14013 			    vports[i]->fc_myDID == did) {
14014 				vport = vports[i];
14015 				break;
14016 			}
14017 		}
14018 	lpfc_destroy_vport_work_array(phba, vports);
14019 	return vport;
14020 }
14021 
14022 /**
14023  * lpfc_update_rcv_time_stamp - Update vport's rcv seq time stamp
14024  * @vport: The vport to work on.
14025  *
14026  * This function updates the receive sequence time stamp for this vport. The
14027  * receive sequence time stamp indicates the time that the last frame of the
14028  * the sequence that has been idle for the longest amount of time was received.
14029  * the driver uses this time stamp to indicate if any received sequences have
14030  * timed out.
14031  **/
14032 void
14033 lpfc_update_rcv_time_stamp(struct lpfc_vport *vport)
14034 {
14035 	struct lpfc_dmabuf *h_buf;
14036 	struct hbq_dmabuf *dmabuf = NULL;
14037 
14038 	/* get the oldest sequence on the rcv list */
14039 	h_buf = list_get_first(&vport->rcv_buffer_list,
14040 			       struct lpfc_dmabuf, list);
14041 	if (!h_buf)
14042 		return;
14043 	dmabuf = container_of(h_buf, struct hbq_dmabuf, hbuf);
14044 	vport->rcv_buffer_time_stamp = dmabuf->time_stamp;
14045 }
14046 
14047 /**
14048  * lpfc_cleanup_rcv_buffers - Cleans up all outstanding receive sequences.
14049  * @vport: The vport that the received sequences were sent to.
14050  *
14051  * This function cleans up all outstanding received sequences. This is called
14052  * by the driver when a link event or user action invalidates all the received
14053  * sequences.
14054  **/
14055 void
14056 lpfc_cleanup_rcv_buffers(struct lpfc_vport *vport)
14057 {
14058 	struct lpfc_dmabuf *h_buf, *hnext;
14059 	struct lpfc_dmabuf *d_buf, *dnext;
14060 	struct hbq_dmabuf *dmabuf = NULL;
14061 
14062 	/* start with the oldest sequence on the rcv list */
14063 	list_for_each_entry_safe(h_buf, hnext, &vport->rcv_buffer_list, list) {
14064 		dmabuf = container_of(h_buf, struct hbq_dmabuf, hbuf);
14065 		list_del_init(&dmabuf->hbuf.list);
14066 		list_for_each_entry_safe(d_buf, dnext,
14067 					 &dmabuf->dbuf.list, list) {
14068 			list_del_init(&d_buf->list);
14069 			lpfc_in_buf_free(vport->phba, d_buf);
14070 		}
14071 		lpfc_in_buf_free(vport->phba, &dmabuf->dbuf);
14072 	}
14073 }
14074 
14075 /**
14076  * lpfc_rcv_seq_check_edtov - Cleans up timed out receive sequences.
14077  * @vport: The vport that the received sequences were sent to.
14078  *
14079  * This function determines whether any received sequences have timed out by
14080  * first checking the vport's rcv_buffer_time_stamp. If this time_stamp
14081  * indicates that there is at least one timed out sequence this routine will
14082  * go through the received sequences one at a time from most inactive to most
14083  * active to determine which ones need to be cleaned up. Once it has determined
14084  * that a sequence needs to be cleaned up it will simply free up the resources
14085  * without sending an abort.
14086  **/
14087 void
14088 lpfc_rcv_seq_check_edtov(struct lpfc_vport *vport)
14089 {
14090 	struct lpfc_dmabuf *h_buf, *hnext;
14091 	struct lpfc_dmabuf *d_buf, *dnext;
14092 	struct hbq_dmabuf *dmabuf = NULL;
14093 	unsigned long timeout;
14094 	int abort_count = 0;
14095 
14096 	timeout = (msecs_to_jiffies(vport->phba->fc_edtov) +
14097 		   vport->rcv_buffer_time_stamp);
14098 	if (list_empty(&vport->rcv_buffer_list) ||
14099 	    time_before(jiffies, timeout))
14100 		return;
14101 	/* start with the oldest sequence on the rcv list */
14102 	list_for_each_entry_safe(h_buf, hnext, &vport->rcv_buffer_list, list) {
14103 		dmabuf = container_of(h_buf, struct hbq_dmabuf, hbuf);
14104 		timeout = (msecs_to_jiffies(vport->phba->fc_edtov) +
14105 			   dmabuf->time_stamp);
14106 		if (time_before(jiffies, timeout))
14107 			break;
14108 		abort_count++;
14109 		list_del_init(&dmabuf->hbuf.list);
14110 		list_for_each_entry_safe(d_buf, dnext,
14111 					 &dmabuf->dbuf.list, list) {
14112 			list_del_init(&d_buf->list);
14113 			lpfc_in_buf_free(vport->phba, d_buf);
14114 		}
14115 		lpfc_in_buf_free(vport->phba, &dmabuf->dbuf);
14116 	}
14117 	if (abort_count)
14118 		lpfc_update_rcv_time_stamp(vport);
14119 }
14120 
14121 /**
14122  * lpfc_fc_frame_add - Adds a frame to the vport's list of received sequences
14123  * @dmabuf: pointer to a dmabuf that describes the hdr and data of the FC frame
14124  *
14125  * This function searches through the existing incomplete sequences that have
14126  * been sent to this @vport. If the frame matches one of the incomplete
14127  * sequences then the dbuf in the @dmabuf is added to the list of frames that
14128  * make up that sequence. If no sequence is found that matches this frame then
14129  * the function will add the hbuf in the @dmabuf to the @vport's rcv_buffer_list
14130  * This function returns a pointer to the first dmabuf in the sequence list that
14131  * the frame was linked to.
14132  **/
14133 static struct hbq_dmabuf *
14134 lpfc_fc_frame_add(struct lpfc_vport *vport, struct hbq_dmabuf *dmabuf)
14135 {
14136 	struct fc_frame_header *new_hdr;
14137 	struct fc_frame_header *temp_hdr;
14138 	struct lpfc_dmabuf *d_buf;
14139 	struct lpfc_dmabuf *h_buf;
14140 	struct hbq_dmabuf *seq_dmabuf = NULL;
14141 	struct hbq_dmabuf *temp_dmabuf = NULL;
14142 
14143 	INIT_LIST_HEAD(&dmabuf->dbuf.list);
14144 	dmabuf->time_stamp = jiffies;
14145 	new_hdr = (struct fc_frame_header *)dmabuf->hbuf.virt;
14146 	/* Use the hdr_buf to find the sequence that this frame belongs to */
14147 	list_for_each_entry(h_buf, &vport->rcv_buffer_list, list) {
14148 		temp_hdr = (struct fc_frame_header *)h_buf->virt;
14149 		if ((temp_hdr->fh_seq_id != new_hdr->fh_seq_id) ||
14150 		    (temp_hdr->fh_ox_id != new_hdr->fh_ox_id) ||
14151 		    (memcmp(&temp_hdr->fh_s_id, &new_hdr->fh_s_id, 3)))
14152 			continue;
14153 		/* found a pending sequence that matches this frame */
14154 		seq_dmabuf = container_of(h_buf, struct hbq_dmabuf, hbuf);
14155 		break;
14156 	}
14157 	if (!seq_dmabuf) {
14158 		/*
14159 		 * This indicates first frame received for this sequence.
14160 		 * Queue the buffer on the vport's rcv_buffer_list.
14161 		 */
14162 		list_add_tail(&dmabuf->hbuf.list, &vport->rcv_buffer_list);
14163 		lpfc_update_rcv_time_stamp(vport);
14164 		return dmabuf;
14165 	}
14166 	temp_hdr = seq_dmabuf->hbuf.virt;
14167 	if (be16_to_cpu(new_hdr->fh_seq_cnt) <
14168 		be16_to_cpu(temp_hdr->fh_seq_cnt)) {
14169 		list_del_init(&seq_dmabuf->hbuf.list);
14170 		list_add_tail(&dmabuf->hbuf.list, &vport->rcv_buffer_list);
14171 		list_add_tail(&dmabuf->dbuf.list, &seq_dmabuf->dbuf.list);
14172 		lpfc_update_rcv_time_stamp(vport);
14173 		return dmabuf;
14174 	}
14175 	/* move this sequence to the tail to indicate a young sequence */
14176 	list_move_tail(&seq_dmabuf->hbuf.list, &vport->rcv_buffer_list);
14177 	seq_dmabuf->time_stamp = jiffies;
14178 	lpfc_update_rcv_time_stamp(vport);
14179 	if (list_empty(&seq_dmabuf->dbuf.list)) {
14180 		temp_hdr = dmabuf->hbuf.virt;
14181 		list_add_tail(&dmabuf->dbuf.list, &seq_dmabuf->dbuf.list);
14182 		return seq_dmabuf;
14183 	}
14184 	/* find the correct place in the sequence to insert this frame */
14185 	list_for_each_entry_reverse(d_buf, &seq_dmabuf->dbuf.list, list) {
14186 		temp_dmabuf = container_of(d_buf, struct hbq_dmabuf, dbuf);
14187 		temp_hdr = (struct fc_frame_header *)temp_dmabuf->hbuf.virt;
14188 		/*
14189 		 * If the frame's sequence count is greater than the frame on
14190 		 * the list then insert the frame right after this frame
14191 		 */
14192 		if (be16_to_cpu(new_hdr->fh_seq_cnt) >
14193 			be16_to_cpu(temp_hdr->fh_seq_cnt)) {
14194 			list_add(&dmabuf->dbuf.list, &temp_dmabuf->dbuf.list);
14195 			return seq_dmabuf;
14196 		}
14197 	}
14198 	return NULL;
14199 }
14200 
14201 /**
14202  * lpfc_sli4_abort_partial_seq - Abort partially assembled unsol sequence
14203  * @vport: pointer to a vitural port
14204  * @dmabuf: pointer to a dmabuf that describes the FC sequence
14205  *
14206  * This function tries to abort from the partially assembed sequence, described
14207  * by the information from basic abbort @dmabuf. It checks to see whether such
14208  * partially assembled sequence held by the driver. If so, it shall free up all
14209  * the frames from the partially assembled sequence.
14210  *
14211  * Return
14212  * true  -- if there is matching partially assembled sequence present and all
14213  *          the frames freed with the sequence;
14214  * false -- if there is no matching partially assembled sequence present so
14215  *          nothing got aborted in the lower layer driver
14216  **/
14217 static bool
14218 lpfc_sli4_abort_partial_seq(struct lpfc_vport *vport,
14219 			    struct hbq_dmabuf *dmabuf)
14220 {
14221 	struct fc_frame_header *new_hdr;
14222 	struct fc_frame_header *temp_hdr;
14223 	struct lpfc_dmabuf *d_buf, *n_buf, *h_buf;
14224 	struct hbq_dmabuf *seq_dmabuf = NULL;
14225 
14226 	/* Use the hdr_buf to find the sequence that matches this frame */
14227 	INIT_LIST_HEAD(&dmabuf->dbuf.list);
14228 	INIT_LIST_HEAD(&dmabuf->hbuf.list);
14229 	new_hdr = (struct fc_frame_header *)dmabuf->hbuf.virt;
14230 	list_for_each_entry(h_buf, &vport->rcv_buffer_list, list) {
14231 		temp_hdr = (struct fc_frame_header *)h_buf->virt;
14232 		if ((temp_hdr->fh_seq_id != new_hdr->fh_seq_id) ||
14233 		    (temp_hdr->fh_ox_id != new_hdr->fh_ox_id) ||
14234 		    (memcmp(&temp_hdr->fh_s_id, &new_hdr->fh_s_id, 3)))
14235 			continue;
14236 		/* found a pending sequence that matches this frame */
14237 		seq_dmabuf = container_of(h_buf, struct hbq_dmabuf, hbuf);
14238 		break;
14239 	}
14240 
14241 	/* Free up all the frames from the partially assembled sequence */
14242 	if (seq_dmabuf) {
14243 		list_for_each_entry_safe(d_buf, n_buf,
14244 					 &seq_dmabuf->dbuf.list, list) {
14245 			list_del_init(&d_buf->list);
14246 			lpfc_in_buf_free(vport->phba, d_buf);
14247 		}
14248 		return true;
14249 	}
14250 	return false;
14251 }
14252 
14253 /**
14254  * lpfc_sli4_abort_ulp_seq - Abort assembled unsol sequence from ulp
14255  * @vport: pointer to a vitural port
14256  * @dmabuf: pointer to a dmabuf that describes the FC sequence
14257  *
14258  * This function tries to abort from the assembed sequence from upper level
14259  * protocol, described by the information from basic abbort @dmabuf. It
14260  * checks to see whether such pending context exists at upper level protocol.
14261  * If so, it shall clean up the pending context.
14262  *
14263  * Return
14264  * true  -- if there is matching pending context of the sequence cleaned
14265  *          at ulp;
14266  * false -- if there is no matching pending context of the sequence present
14267  *          at ulp.
14268  **/
14269 static bool
14270 lpfc_sli4_abort_ulp_seq(struct lpfc_vport *vport, struct hbq_dmabuf *dmabuf)
14271 {
14272 	struct lpfc_hba *phba = vport->phba;
14273 	int handled;
14274 
14275 	/* Accepting abort at ulp with SLI4 only */
14276 	if (phba->sli_rev < LPFC_SLI_REV4)
14277 		return false;
14278 
14279 	/* Register all caring upper level protocols to attend abort */
14280 	handled = lpfc_ct_handle_unsol_abort(phba, dmabuf);
14281 	if (handled)
14282 		return true;
14283 
14284 	return false;
14285 }
14286 
14287 /**
14288  * lpfc_sli4_seq_abort_rsp_cmpl - BLS ABORT RSP seq abort iocb complete handler
14289  * @phba: Pointer to HBA context object.
14290  * @cmd_iocbq: pointer to the command iocbq structure.
14291  * @rsp_iocbq: pointer to the response iocbq structure.
14292  *
14293  * This function handles the sequence abort response iocb command complete
14294  * event. It properly releases the memory allocated to the sequence abort
14295  * accept iocb.
14296  **/
14297 static void
14298 lpfc_sli4_seq_abort_rsp_cmpl(struct lpfc_hba *phba,
14299 			     struct lpfc_iocbq *cmd_iocbq,
14300 			     struct lpfc_iocbq *rsp_iocbq)
14301 {
14302 	struct lpfc_nodelist *ndlp;
14303 
14304 	if (cmd_iocbq) {
14305 		ndlp = (struct lpfc_nodelist *)cmd_iocbq->context1;
14306 		lpfc_nlp_put(ndlp);
14307 		lpfc_nlp_not_used(ndlp);
14308 		lpfc_sli_release_iocbq(phba, cmd_iocbq);
14309 	}
14310 
14311 	/* Failure means BLS ABORT RSP did not get delivered to remote node*/
14312 	if (rsp_iocbq && rsp_iocbq->iocb.ulpStatus)
14313 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
14314 			"3154 BLS ABORT RSP failed, data:  x%x/x%x\n",
14315 			rsp_iocbq->iocb.ulpStatus,
14316 			rsp_iocbq->iocb.un.ulpWord[4]);
14317 }
14318 
14319 /**
14320  * lpfc_sli4_xri_inrange - check xri is in range of xris owned by driver.
14321  * @phba: Pointer to HBA context object.
14322  * @xri: xri id in transaction.
14323  *
14324  * This function validates the xri maps to the known range of XRIs allocated an
14325  * used by the driver.
14326  **/
14327 uint16_t
14328 lpfc_sli4_xri_inrange(struct lpfc_hba *phba,
14329 		      uint16_t xri)
14330 {
14331 	int i;
14332 
14333 	for (i = 0; i < phba->sli4_hba.max_cfg_param.max_xri; i++) {
14334 		if (xri == phba->sli4_hba.xri_ids[i])
14335 			return i;
14336 	}
14337 	return NO_XRI;
14338 }
14339 
14340 /**
14341  * lpfc_sli4_seq_abort_rsp - bls rsp to sequence abort
14342  * @phba: Pointer to HBA context object.
14343  * @fc_hdr: pointer to a FC frame header.
14344  *
14345  * This function sends a basic response to a previous unsol sequence abort
14346  * event after aborting the sequence handling.
14347  **/
14348 static void
14349 lpfc_sli4_seq_abort_rsp(struct lpfc_vport *vport,
14350 			struct fc_frame_header *fc_hdr, bool aborted)
14351 {
14352 	struct lpfc_hba *phba = vport->phba;
14353 	struct lpfc_iocbq *ctiocb = NULL;
14354 	struct lpfc_nodelist *ndlp;
14355 	uint16_t oxid, rxid, xri, lxri;
14356 	uint32_t sid, fctl;
14357 	IOCB_t *icmd;
14358 	int rc;
14359 
14360 	if (!lpfc_is_link_up(phba))
14361 		return;
14362 
14363 	sid = sli4_sid_from_fc_hdr(fc_hdr);
14364 	oxid = be16_to_cpu(fc_hdr->fh_ox_id);
14365 	rxid = be16_to_cpu(fc_hdr->fh_rx_id);
14366 
14367 	ndlp = lpfc_findnode_did(vport, sid);
14368 	if (!ndlp) {
14369 		ndlp = mempool_alloc(phba->nlp_mem_pool, GFP_KERNEL);
14370 		if (!ndlp) {
14371 			lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS,
14372 					 "1268 Failed to allocate ndlp for "
14373 					 "oxid:x%x SID:x%x\n", oxid, sid);
14374 			return;
14375 		}
14376 		lpfc_nlp_init(vport, ndlp, sid);
14377 		/* Put ndlp onto pport node list */
14378 		lpfc_enqueue_node(vport, ndlp);
14379 	} else if (!NLP_CHK_NODE_ACT(ndlp)) {
14380 		/* re-setup ndlp without removing from node list */
14381 		ndlp = lpfc_enable_node(vport, ndlp, NLP_STE_UNUSED_NODE);
14382 		if (!ndlp) {
14383 			lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS,
14384 					 "3275 Failed to active ndlp found "
14385 					 "for oxid:x%x SID:x%x\n", oxid, sid);
14386 			return;
14387 		}
14388 	}
14389 
14390 	/* Allocate buffer for rsp iocb */
14391 	ctiocb = lpfc_sli_get_iocbq(phba);
14392 	if (!ctiocb)
14393 		return;
14394 
14395 	/* Extract the F_CTL field from FC_HDR */
14396 	fctl = sli4_fctl_from_fc_hdr(fc_hdr);
14397 
14398 	icmd = &ctiocb->iocb;
14399 	icmd->un.xseq64.bdl.bdeSize = 0;
14400 	icmd->un.xseq64.bdl.ulpIoTag32 = 0;
14401 	icmd->un.xseq64.w5.hcsw.Dfctl = 0;
14402 	icmd->un.xseq64.w5.hcsw.Rctl = FC_RCTL_BA_ACC;
14403 	icmd->un.xseq64.w5.hcsw.Type = FC_TYPE_BLS;
14404 
14405 	/* Fill in the rest of iocb fields */
14406 	icmd->ulpCommand = CMD_XMIT_BLS_RSP64_CX;
14407 	icmd->ulpBdeCount = 0;
14408 	icmd->ulpLe = 1;
14409 	icmd->ulpClass = CLASS3;
14410 	icmd->ulpContext = phba->sli4_hba.rpi_ids[ndlp->nlp_rpi];
14411 	ctiocb->context1 = lpfc_nlp_get(ndlp);
14412 
14413 	ctiocb->iocb_cmpl = NULL;
14414 	ctiocb->vport = phba->pport;
14415 	ctiocb->iocb_cmpl = lpfc_sli4_seq_abort_rsp_cmpl;
14416 	ctiocb->sli4_lxritag = NO_XRI;
14417 	ctiocb->sli4_xritag = NO_XRI;
14418 
14419 	if (fctl & FC_FC_EX_CTX)
14420 		/* Exchange responder sent the abort so we
14421 		 * own the oxid.
14422 		 */
14423 		xri = oxid;
14424 	else
14425 		xri = rxid;
14426 	lxri = lpfc_sli4_xri_inrange(phba, xri);
14427 	if (lxri != NO_XRI)
14428 		lpfc_set_rrq_active(phba, ndlp, lxri,
14429 			(xri == oxid) ? rxid : oxid, 0);
14430 	/* For BA_ABTS from exchange responder, if the logical xri with
14431 	 * the oxid maps to the FCP XRI range, the port no longer has
14432 	 * that exchange context, send a BLS_RJT. Override the IOCB for
14433 	 * a BA_RJT.
14434 	 */
14435 	if ((fctl & FC_FC_EX_CTX) &&
14436 	    (lxri > lpfc_sli4_get_els_iocb_cnt(phba))) {
14437 		icmd->un.xseq64.w5.hcsw.Rctl = FC_RCTL_BA_RJT;
14438 		bf_set(lpfc_vndr_code, &icmd->un.bls_rsp, 0);
14439 		bf_set(lpfc_rsn_expln, &icmd->un.bls_rsp, FC_BA_RJT_INV_XID);
14440 		bf_set(lpfc_rsn_code, &icmd->un.bls_rsp, FC_BA_RJT_UNABLE);
14441 	}
14442 
14443 	/* If BA_ABTS failed to abort a partially assembled receive sequence,
14444 	 * the driver no longer has that exchange, send a BLS_RJT. Override
14445 	 * the IOCB for a BA_RJT.
14446 	 */
14447 	if (aborted == false) {
14448 		icmd->un.xseq64.w5.hcsw.Rctl = FC_RCTL_BA_RJT;
14449 		bf_set(lpfc_vndr_code, &icmd->un.bls_rsp, 0);
14450 		bf_set(lpfc_rsn_expln, &icmd->un.bls_rsp, FC_BA_RJT_INV_XID);
14451 		bf_set(lpfc_rsn_code, &icmd->un.bls_rsp, FC_BA_RJT_UNABLE);
14452 	}
14453 
14454 	if (fctl & FC_FC_EX_CTX) {
14455 		/* ABTS sent by responder to CT exchange, construction
14456 		 * of BA_ACC will use OX_ID from ABTS for the XRI_TAG
14457 		 * field and RX_ID from ABTS for RX_ID field.
14458 		 */
14459 		bf_set(lpfc_abts_orig, &icmd->un.bls_rsp, LPFC_ABTS_UNSOL_RSP);
14460 	} else {
14461 		/* ABTS sent by initiator to CT exchange, construction
14462 		 * of BA_ACC will need to allocate a new XRI as for the
14463 		 * XRI_TAG field.
14464 		 */
14465 		bf_set(lpfc_abts_orig, &icmd->un.bls_rsp, LPFC_ABTS_UNSOL_INT);
14466 	}
14467 	bf_set(lpfc_abts_rxid, &icmd->un.bls_rsp, rxid);
14468 	bf_set(lpfc_abts_oxid, &icmd->un.bls_rsp, oxid);
14469 
14470 	/* Xmit CT abts response on exchange <xid> */
14471 	lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS,
14472 			 "1200 Send BLS cmd x%x on oxid x%x Data: x%x\n",
14473 			 icmd->un.xseq64.w5.hcsw.Rctl, oxid, phba->link_state);
14474 
14475 	rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, ctiocb, 0);
14476 	if (rc == IOCB_ERROR) {
14477 		lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
14478 				 "2925 Failed to issue CT ABTS RSP x%x on "
14479 				 "xri x%x, Data x%x\n",
14480 				 icmd->un.xseq64.w5.hcsw.Rctl, oxid,
14481 				 phba->link_state);
14482 		lpfc_nlp_put(ndlp);
14483 		ctiocb->context1 = NULL;
14484 		lpfc_sli_release_iocbq(phba, ctiocb);
14485 	}
14486 }
14487 
14488 /**
14489  * lpfc_sli4_handle_unsol_abort - Handle sli-4 unsolicited abort event
14490  * @vport: Pointer to the vport on which this sequence was received
14491  * @dmabuf: pointer to a dmabuf that describes the FC sequence
14492  *
14493  * This function handles an SLI-4 unsolicited abort event. If the unsolicited
14494  * receive sequence is only partially assembed by the driver, it shall abort
14495  * the partially assembled frames for the sequence. Otherwise, if the
14496  * unsolicited receive sequence has been completely assembled and passed to
14497  * the Upper Layer Protocol (UPL), it then mark the per oxid status for the
14498  * unsolicited sequence has been aborted. After that, it will issue a basic
14499  * accept to accept the abort.
14500  **/
14501 void
14502 lpfc_sli4_handle_unsol_abort(struct lpfc_vport *vport,
14503 			     struct hbq_dmabuf *dmabuf)
14504 {
14505 	struct lpfc_hba *phba = vport->phba;
14506 	struct fc_frame_header fc_hdr;
14507 	uint32_t fctl;
14508 	bool aborted;
14509 
14510 	/* Make a copy of fc_hdr before the dmabuf being released */
14511 	memcpy(&fc_hdr, dmabuf->hbuf.virt, sizeof(struct fc_frame_header));
14512 	fctl = sli4_fctl_from_fc_hdr(&fc_hdr);
14513 
14514 	if (fctl & FC_FC_EX_CTX) {
14515 		/* ABTS by responder to exchange, no cleanup needed */
14516 		aborted = true;
14517 	} else {
14518 		/* ABTS by initiator to exchange, need to do cleanup */
14519 		aborted = lpfc_sli4_abort_partial_seq(vport, dmabuf);
14520 		if (aborted == false)
14521 			aborted = lpfc_sli4_abort_ulp_seq(vport, dmabuf);
14522 	}
14523 	lpfc_in_buf_free(phba, &dmabuf->dbuf);
14524 
14525 	/* Respond with BA_ACC or BA_RJT accordingly */
14526 	lpfc_sli4_seq_abort_rsp(vport, &fc_hdr, aborted);
14527 }
14528 
14529 /**
14530  * lpfc_seq_complete - Indicates if a sequence is complete
14531  * @dmabuf: pointer to a dmabuf that describes the FC sequence
14532  *
14533  * This function checks the sequence, starting with the frame described by
14534  * @dmabuf, to see if all the frames associated with this sequence are present.
14535  * the frames associated with this sequence are linked to the @dmabuf using the
14536  * dbuf list. This function looks for two major things. 1) That the first frame
14537  * has a sequence count of zero. 2) There is a frame with last frame of sequence
14538  * set. 3) That there are no holes in the sequence count. The function will
14539  * return 1 when the sequence is complete, otherwise it will return 0.
14540  **/
14541 static int
14542 lpfc_seq_complete(struct hbq_dmabuf *dmabuf)
14543 {
14544 	struct fc_frame_header *hdr;
14545 	struct lpfc_dmabuf *d_buf;
14546 	struct hbq_dmabuf *seq_dmabuf;
14547 	uint32_t fctl;
14548 	int seq_count = 0;
14549 
14550 	hdr = (struct fc_frame_header *)dmabuf->hbuf.virt;
14551 	/* make sure first fame of sequence has a sequence count of zero */
14552 	if (hdr->fh_seq_cnt != seq_count)
14553 		return 0;
14554 	fctl = (hdr->fh_f_ctl[0] << 16 |
14555 		hdr->fh_f_ctl[1] << 8 |
14556 		hdr->fh_f_ctl[2]);
14557 	/* If last frame of sequence we can return success. */
14558 	if (fctl & FC_FC_END_SEQ)
14559 		return 1;
14560 	list_for_each_entry(d_buf, &dmabuf->dbuf.list, list) {
14561 		seq_dmabuf = container_of(d_buf, struct hbq_dmabuf, dbuf);
14562 		hdr = (struct fc_frame_header *)seq_dmabuf->hbuf.virt;
14563 		/* If there is a hole in the sequence count then fail. */
14564 		if (++seq_count != be16_to_cpu(hdr->fh_seq_cnt))
14565 			return 0;
14566 		fctl = (hdr->fh_f_ctl[0] << 16 |
14567 			hdr->fh_f_ctl[1] << 8 |
14568 			hdr->fh_f_ctl[2]);
14569 		/* If last frame of sequence we can return success. */
14570 		if (fctl & FC_FC_END_SEQ)
14571 			return 1;
14572 	}
14573 	return 0;
14574 }
14575 
14576 /**
14577  * lpfc_prep_seq - Prep sequence for ULP processing
14578  * @vport: Pointer to the vport on which this sequence was received
14579  * @dmabuf: pointer to a dmabuf that describes the FC sequence
14580  *
14581  * This function takes a sequence, described by a list of frames, and creates
14582  * a list of iocbq structures to describe the sequence. This iocbq list will be
14583  * used to issue to the generic unsolicited sequence handler. This routine
14584  * returns a pointer to the first iocbq in the list. If the function is unable
14585  * to allocate an iocbq then it throw out the received frames that were not
14586  * able to be described and return a pointer to the first iocbq. If unable to
14587  * allocate any iocbqs (including the first) this function will return NULL.
14588  **/
14589 static struct lpfc_iocbq *
14590 lpfc_prep_seq(struct lpfc_vport *vport, struct hbq_dmabuf *seq_dmabuf)
14591 {
14592 	struct hbq_dmabuf *hbq_buf;
14593 	struct lpfc_dmabuf *d_buf, *n_buf;
14594 	struct lpfc_iocbq *first_iocbq, *iocbq;
14595 	struct fc_frame_header *fc_hdr;
14596 	uint32_t sid;
14597 	uint32_t len, tot_len;
14598 	struct ulp_bde64 *pbde;
14599 
14600 	fc_hdr = (struct fc_frame_header *)seq_dmabuf->hbuf.virt;
14601 	/* remove from receive buffer list */
14602 	list_del_init(&seq_dmabuf->hbuf.list);
14603 	lpfc_update_rcv_time_stamp(vport);
14604 	/* get the Remote Port's SID */
14605 	sid = sli4_sid_from_fc_hdr(fc_hdr);
14606 	tot_len = 0;
14607 	/* Get an iocbq struct to fill in. */
14608 	first_iocbq = lpfc_sli_get_iocbq(vport->phba);
14609 	if (first_iocbq) {
14610 		/* Initialize the first IOCB. */
14611 		first_iocbq->iocb.unsli3.rcvsli3.acc_len = 0;
14612 		first_iocbq->iocb.ulpStatus = IOSTAT_SUCCESS;
14613 
14614 		/* Check FC Header to see what TYPE of frame we are rcv'ing */
14615 		if (sli4_type_from_fc_hdr(fc_hdr) == FC_TYPE_ELS) {
14616 			first_iocbq->iocb.ulpCommand = CMD_IOCB_RCV_ELS64_CX;
14617 			first_iocbq->iocb.un.rcvels.parmRo =
14618 				sli4_did_from_fc_hdr(fc_hdr);
14619 			first_iocbq->iocb.ulpPU = PARM_NPIV_DID;
14620 		} else
14621 			first_iocbq->iocb.ulpCommand = CMD_IOCB_RCV_SEQ64_CX;
14622 		first_iocbq->iocb.ulpContext = NO_XRI;
14623 		first_iocbq->iocb.unsli3.rcvsli3.ox_id =
14624 			be16_to_cpu(fc_hdr->fh_ox_id);
14625 		/* iocbq is prepped for internal consumption.  Physical vpi. */
14626 		first_iocbq->iocb.unsli3.rcvsli3.vpi =
14627 			vport->phba->vpi_ids[vport->vpi];
14628 		/* put the first buffer into the first IOCBq */
14629 		first_iocbq->context2 = &seq_dmabuf->dbuf;
14630 		first_iocbq->context3 = NULL;
14631 		first_iocbq->iocb.ulpBdeCount = 1;
14632 		first_iocbq->iocb.un.cont64[0].tus.f.bdeSize =
14633 							LPFC_DATA_BUF_SIZE;
14634 		first_iocbq->iocb.un.rcvels.remoteID = sid;
14635 		tot_len = bf_get(lpfc_rcqe_length,
14636 				       &seq_dmabuf->cq_event.cqe.rcqe_cmpl);
14637 		first_iocbq->iocb.unsli3.rcvsli3.acc_len = tot_len;
14638 	}
14639 	iocbq = first_iocbq;
14640 	/*
14641 	 * Each IOCBq can have two Buffers assigned, so go through the list
14642 	 * of buffers for this sequence and save two buffers in each IOCBq
14643 	 */
14644 	list_for_each_entry_safe(d_buf, n_buf, &seq_dmabuf->dbuf.list, list) {
14645 		if (!iocbq) {
14646 			lpfc_in_buf_free(vport->phba, d_buf);
14647 			continue;
14648 		}
14649 		if (!iocbq->context3) {
14650 			iocbq->context3 = d_buf;
14651 			iocbq->iocb.ulpBdeCount++;
14652 			pbde = (struct ulp_bde64 *)
14653 					&iocbq->iocb.unsli3.sli3Words[4];
14654 			pbde->tus.f.bdeSize = LPFC_DATA_BUF_SIZE;
14655 
14656 			/* We need to get the size out of the right CQE */
14657 			hbq_buf = container_of(d_buf, struct hbq_dmabuf, dbuf);
14658 			len = bf_get(lpfc_rcqe_length,
14659 				       &hbq_buf->cq_event.cqe.rcqe_cmpl);
14660 			iocbq->iocb.unsli3.rcvsli3.acc_len += len;
14661 			tot_len += len;
14662 		} else {
14663 			iocbq = lpfc_sli_get_iocbq(vport->phba);
14664 			if (!iocbq) {
14665 				if (first_iocbq) {
14666 					first_iocbq->iocb.ulpStatus =
14667 							IOSTAT_FCP_RSP_ERROR;
14668 					first_iocbq->iocb.un.ulpWord[4] =
14669 							IOERR_NO_RESOURCES;
14670 				}
14671 				lpfc_in_buf_free(vport->phba, d_buf);
14672 				continue;
14673 			}
14674 			iocbq->context2 = d_buf;
14675 			iocbq->context3 = NULL;
14676 			iocbq->iocb.ulpBdeCount = 1;
14677 			iocbq->iocb.un.cont64[0].tus.f.bdeSize =
14678 							LPFC_DATA_BUF_SIZE;
14679 
14680 			/* We need to get the size out of the right CQE */
14681 			hbq_buf = container_of(d_buf, struct hbq_dmabuf, dbuf);
14682 			len = bf_get(lpfc_rcqe_length,
14683 				       &hbq_buf->cq_event.cqe.rcqe_cmpl);
14684 			tot_len += len;
14685 			iocbq->iocb.unsli3.rcvsli3.acc_len = tot_len;
14686 
14687 			iocbq->iocb.un.rcvels.remoteID = sid;
14688 			list_add_tail(&iocbq->list, &first_iocbq->list);
14689 		}
14690 	}
14691 	return first_iocbq;
14692 }
14693 
14694 static void
14695 lpfc_sli4_send_seq_to_ulp(struct lpfc_vport *vport,
14696 			  struct hbq_dmabuf *seq_dmabuf)
14697 {
14698 	struct fc_frame_header *fc_hdr;
14699 	struct lpfc_iocbq *iocbq, *curr_iocb, *next_iocb;
14700 	struct lpfc_hba *phba = vport->phba;
14701 
14702 	fc_hdr = (struct fc_frame_header *)seq_dmabuf->hbuf.virt;
14703 	iocbq = lpfc_prep_seq(vport, seq_dmabuf);
14704 	if (!iocbq) {
14705 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
14706 				"2707 Ring %d handler: Failed to allocate "
14707 				"iocb Rctl x%x Type x%x received\n",
14708 				LPFC_ELS_RING,
14709 				fc_hdr->fh_r_ctl, fc_hdr->fh_type);
14710 		return;
14711 	}
14712 	if (!lpfc_complete_unsol_iocb(phba,
14713 				      &phba->sli.ring[LPFC_ELS_RING],
14714 				      iocbq, fc_hdr->fh_r_ctl,
14715 				      fc_hdr->fh_type))
14716 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
14717 				"2540 Ring %d handler: unexpected Rctl "
14718 				"x%x Type x%x received\n",
14719 				LPFC_ELS_RING,
14720 				fc_hdr->fh_r_ctl, fc_hdr->fh_type);
14721 
14722 	/* Free iocb created in lpfc_prep_seq */
14723 	list_for_each_entry_safe(curr_iocb, next_iocb,
14724 		&iocbq->list, list) {
14725 		list_del_init(&curr_iocb->list);
14726 		lpfc_sli_release_iocbq(phba, curr_iocb);
14727 	}
14728 	lpfc_sli_release_iocbq(phba, iocbq);
14729 }
14730 
14731 /**
14732  * lpfc_sli4_handle_received_buffer - Handle received buffers from firmware
14733  * @phba: Pointer to HBA context object.
14734  *
14735  * This function is called with no lock held. This function processes all
14736  * the received buffers and gives it to upper layers when a received buffer
14737  * indicates that it is the final frame in the sequence. The interrupt
14738  * service routine processes received buffers at interrupt contexts and adds
14739  * received dma buffers to the rb_pend_list queue and signals the worker thread.
14740  * Worker thread calls lpfc_sli4_handle_received_buffer, which will call the
14741  * appropriate receive function when the final frame in a sequence is received.
14742  **/
14743 void
14744 lpfc_sli4_handle_received_buffer(struct lpfc_hba *phba,
14745 				 struct hbq_dmabuf *dmabuf)
14746 {
14747 	struct hbq_dmabuf *seq_dmabuf;
14748 	struct fc_frame_header *fc_hdr;
14749 	struct lpfc_vport *vport;
14750 	uint32_t fcfi;
14751 	uint32_t did;
14752 
14753 	/* Process each received buffer */
14754 	fc_hdr = (struct fc_frame_header *)dmabuf->hbuf.virt;
14755 	/* check to see if this a valid type of frame */
14756 	if (lpfc_fc_frame_check(phba, fc_hdr)) {
14757 		lpfc_in_buf_free(phba, &dmabuf->dbuf);
14758 		return;
14759 	}
14760 	if ((bf_get(lpfc_cqe_code,
14761 		    &dmabuf->cq_event.cqe.rcqe_cmpl) == CQE_CODE_RECEIVE_V1))
14762 		fcfi = bf_get(lpfc_rcqe_fcf_id_v1,
14763 			      &dmabuf->cq_event.cqe.rcqe_cmpl);
14764 	else
14765 		fcfi = bf_get(lpfc_rcqe_fcf_id,
14766 			      &dmabuf->cq_event.cqe.rcqe_cmpl);
14767 
14768 	vport = lpfc_fc_frame_to_vport(phba, fc_hdr, fcfi);
14769 	if (!vport) {
14770 		/* throw out the frame */
14771 		lpfc_in_buf_free(phba, &dmabuf->dbuf);
14772 		return;
14773 	}
14774 
14775 	/* d_id this frame is directed to */
14776 	did = sli4_did_from_fc_hdr(fc_hdr);
14777 
14778 	/* vport is registered unless we rcv a FLOGI directed to Fabric_DID */
14779 	if (!(vport->vpi_state & LPFC_VPI_REGISTERED) &&
14780 		(did != Fabric_DID)) {
14781 		/*
14782 		 * Throw out the frame if we are not pt2pt.
14783 		 * The pt2pt protocol allows for discovery frames
14784 		 * to be received without a registered VPI.
14785 		 */
14786 		if (!(vport->fc_flag & FC_PT2PT) ||
14787 			(phba->link_state == LPFC_HBA_READY)) {
14788 			lpfc_in_buf_free(phba, &dmabuf->dbuf);
14789 			return;
14790 		}
14791 	}
14792 
14793 	/* Handle the basic abort sequence (BA_ABTS) event */
14794 	if (fc_hdr->fh_r_ctl == FC_RCTL_BA_ABTS) {
14795 		lpfc_sli4_handle_unsol_abort(vport, dmabuf);
14796 		return;
14797 	}
14798 
14799 	/* Link this frame */
14800 	seq_dmabuf = lpfc_fc_frame_add(vport, dmabuf);
14801 	if (!seq_dmabuf) {
14802 		/* unable to add frame to vport - throw it out */
14803 		lpfc_in_buf_free(phba, &dmabuf->dbuf);
14804 		return;
14805 	}
14806 	/* If not last frame in sequence continue processing frames. */
14807 	if (!lpfc_seq_complete(seq_dmabuf))
14808 		return;
14809 
14810 	/* Send the complete sequence to the upper layer protocol */
14811 	lpfc_sli4_send_seq_to_ulp(vport, seq_dmabuf);
14812 }
14813 
14814 /**
14815  * lpfc_sli4_post_all_rpi_hdrs - Post the rpi header memory region to the port
14816  * @phba: pointer to lpfc hba data structure.
14817  *
14818  * This routine is invoked to post rpi header templates to the
14819  * HBA consistent with the SLI-4 interface spec.  This routine
14820  * posts a SLI4_PAGE_SIZE memory region to the port to hold up to
14821  * SLI4_PAGE_SIZE modulo 64 rpi context headers.
14822  *
14823  * This routine does not require any locks.  It's usage is expected
14824  * to be driver load or reset recovery when the driver is
14825  * sequential.
14826  *
14827  * Return codes
14828  * 	0 - successful
14829  *      -EIO - The mailbox failed to complete successfully.
14830  * 	When this error occurs, the driver is not guaranteed
14831  *	to have any rpi regions posted to the device and
14832  *	must either attempt to repost the regions or take a
14833  *	fatal error.
14834  **/
14835 int
14836 lpfc_sli4_post_all_rpi_hdrs(struct lpfc_hba *phba)
14837 {
14838 	struct lpfc_rpi_hdr *rpi_page;
14839 	uint32_t rc = 0;
14840 	uint16_t lrpi = 0;
14841 
14842 	/* SLI4 ports that support extents do not require RPI headers. */
14843 	if (!phba->sli4_hba.rpi_hdrs_in_use)
14844 		goto exit;
14845 	if (phba->sli4_hba.extents_in_use)
14846 		return -EIO;
14847 
14848 	list_for_each_entry(rpi_page, &phba->sli4_hba.lpfc_rpi_hdr_list, list) {
14849 		/*
14850 		 * Assign the rpi headers a physical rpi only if the driver
14851 		 * has not initialized those resources.  A port reset only
14852 		 * needs the headers posted.
14853 		 */
14854 		if (bf_get(lpfc_rpi_rsrc_rdy, &phba->sli4_hba.sli4_flags) !=
14855 		    LPFC_RPI_RSRC_RDY)
14856 			rpi_page->start_rpi = phba->sli4_hba.rpi_ids[lrpi];
14857 
14858 		rc = lpfc_sli4_post_rpi_hdr(phba, rpi_page);
14859 		if (rc != MBX_SUCCESS) {
14860 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
14861 					"2008 Error %d posting all rpi "
14862 					"headers\n", rc);
14863 			rc = -EIO;
14864 			break;
14865 		}
14866 	}
14867 
14868  exit:
14869 	bf_set(lpfc_rpi_rsrc_rdy, &phba->sli4_hba.sli4_flags,
14870 	       LPFC_RPI_RSRC_RDY);
14871 	return rc;
14872 }
14873 
14874 /**
14875  * lpfc_sli4_post_rpi_hdr - Post an rpi header memory region to the port
14876  * @phba: pointer to lpfc hba data structure.
14877  * @rpi_page:  pointer to the rpi memory region.
14878  *
14879  * This routine is invoked to post a single rpi header to the
14880  * HBA consistent with the SLI-4 interface spec.  This memory region
14881  * maps up to 64 rpi context regions.
14882  *
14883  * Return codes
14884  * 	0 - successful
14885  * 	-ENOMEM - No available memory
14886  *      -EIO - The mailbox failed to complete successfully.
14887  **/
14888 int
14889 lpfc_sli4_post_rpi_hdr(struct lpfc_hba *phba, struct lpfc_rpi_hdr *rpi_page)
14890 {
14891 	LPFC_MBOXQ_t *mboxq;
14892 	struct lpfc_mbx_post_hdr_tmpl *hdr_tmpl;
14893 	uint32_t rc = 0;
14894 	uint32_t shdr_status, shdr_add_status;
14895 	union lpfc_sli4_cfg_shdr *shdr;
14896 
14897 	/* SLI4 ports that support extents do not require RPI headers. */
14898 	if (!phba->sli4_hba.rpi_hdrs_in_use)
14899 		return rc;
14900 	if (phba->sli4_hba.extents_in_use)
14901 		return -EIO;
14902 
14903 	/* The port is notified of the header region via a mailbox command. */
14904 	mboxq = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
14905 	if (!mboxq) {
14906 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
14907 				"2001 Unable to allocate memory for issuing "
14908 				"SLI_CONFIG_SPECIAL mailbox command\n");
14909 		return -ENOMEM;
14910 	}
14911 
14912 	/* Post all rpi memory regions to the port. */
14913 	hdr_tmpl = &mboxq->u.mqe.un.hdr_tmpl;
14914 	lpfc_sli4_config(phba, mboxq, LPFC_MBOX_SUBSYSTEM_FCOE,
14915 			 LPFC_MBOX_OPCODE_FCOE_POST_HDR_TEMPLATE,
14916 			 sizeof(struct lpfc_mbx_post_hdr_tmpl) -
14917 			 sizeof(struct lpfc_sli4_cfg_mhdr),
14918 			 LPFC_SLI4_MBX_EMBED);
14919 
14920 
14921 	/* Post the physical rpi to the port for this rpi header. */
14922 	bf_set(lpfc_mbx_post_hdr_tmpl_rpi_offset, hdr_tmpl,
14923 	       rpi_page->start_rpi);
14924 	bf_set(lpfc_mbx_post_hdr_tmpl_page_cnt,
14925 	       hdr_tmpl, rpi_page->page_count);
14926 
14927 	hdr_tmpl->rpi_paddr_lo = putPaddrLow(rpi_page->dmabuf->phys);
14928 	hdr_tmpl->rpi_paddr_hi = putPaddrHigh(rpi_page->dmabuf->phys);
14929 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
14930 	shdr = (union lpfc_sli4_cfg_shdr *) &hdr_tmpl->header.cfg_shdr;
14931 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
14932 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
14933 	if (rc != MBX_TIMEOUT)
14934 		mempool_free(mboxq, phba->mbox_mem_pool);
14935 	if (shdr_status || shdr_add_status || rc) {
14936 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
14937 				"2514 POST_RPI_HDR mailbox failed with "
14938 				"status x%x add_status x%x, mbx status x%x\n",
14939 				shdr_status, shdr_add_status, rc);
14940 		rc = -ENXIO;
14941 	}
14942 	return rc;
14943 }
14944 
14945 /**
14946  * lpfc_sli4_alloc_rpi - Get an available rpi in the device's range
14947  * @phba: pointer to lpfc hba data structure.
14948  *
14949  * This routine is invoked to post rpi header templates to the
14950  * HBA consistent with the SLI-4 interface spec.  This routine
14951  * posts a SLI4_PAGE_SIZE memory region to the port to hold up to
14952  * SLI4_PAGE_SIZE modulo 64 rpi context headers.
14953  *
14954  * Returns
14955  * 	A nonzero rpi defined as rpi_base <= rpi < max_rpi if successful
14956  * 	LPFC_RPI_ALLOC_ERROR if no rpis are available.
14957  **/
14958 int
14959 lpfc_sli4_alloc_rpi(struct lpfc_hba *phba)
14960 {
14961 	unsigned long rpi;
14962 	uint16_t max_rpi, rpi_limit;
14963 	uint16_t rpi_remaining, lrpi = 0;
14964 	struct lpfc_rpi_hdr *rpi_hdr;
14965 
14966 	max_rpi = phba->sli4_hba.max_cfg_param.max_rpi;
14967 	rpi_limit = phba->sli4_hba.next_rpi;
14968 
14969 	/*
14970 	 * Fetch the next logical rpi.  Because this index is logical,
14971 	 * the  driver starts at 0 each time.
14972 	 */
14973 	spin_lock_irq(&phba->hbalock);
14974 	rpi = find_next_zero_bit(phba->sli4_hba.rpi_bmask, rpi_limit, 0);
14975 	if (rpi >= rpi_limit)
14976 		rpi = LPFC_RPI_ALLOC_ERROR;
14977 	else {
14978 		set_bit(rpi, phba->sli4_hba.rpi_bmask);
14979 		phba->sli4_hba.max_cfg_param.rpi_used++;
14980 		phba->sli4_hba.rpi_count++;
14981 	}
14982 
14983 	/*
14984 	 * Don't try to allocate more rpi header regions if the device limit
14985 	 * has been exhausted.
14986 	 */
14987 	if ((rpi == LPFC_RPI_ALLOC_ERROR) &&
14988 	    (phba->sli4_hba.rpi_count >= max_rpi)) {
14989 		spin_unlock_irq(&phba->hbalock);
14990 		return rpi;
14991 	}
14992 
14993 	/*
14994 	 * RPI header postings are not required for SLI4 ports capable of
14995 	 * extents.
14996 	 */
14997 	if (!phba->sli4_hba.rpi_hdrs_in_use) {
14998 		spin_unlock_irq(&phba->hbalock);
14999 		return rpi;
15000 	}
15001 
15002 	/*
15003 	 * If the driver is running low on rpi resources, allocate another
15004 	 * page now.  Note that the next_rpi value is used because
15005 	 * it represents how many are actually in use whereas max_rpi notes
15006 	 * how many are supported max by the device.
15007 	 */
15008 	rpi_remaining = phba->sli4_hba.next_rpi - phba->sli4_hba.rpi_count;
15009 	spin_unlock_irq(&phba->hbalock);
15010 	if (rpi_remaining < LPFC_RPI_LOW_WATER_MARK) {
15011 		rpi_hdr = lpfc_sli4_create_rpi_hdr(phba);
15012 		if (!rpi_hdr) {
15013 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
15014 					"2002 Error Could not grow rpi "
15015 					"count\n");
15016 		} else {
15017 			lrpi = rpi_hdr->start_rpi;
15018 			rpi_hdr->start_rpi = phba->sli4_hba.rpi_ids[lrpi];
15019 			lpfc_sli4_post_rpi_hdr(phba, rpi_hdr);
15020 		}
15021 	}
15022 
15023 	return rpi;
15024 }
15025 
15026 /**
15027  * lpfc_sli4_free_rpi - Release an rpi for reuse.
15028  * @phba: pointer to lpfc hba data structure.
15029  *
15030  * This routine is invoked to release an rpi to the pool of
15031  * available rpis maintained by the driver.
15032  **/
15033 void
15034 __lpfc_sli4_free_rpi(struct lpfc_hba *phba, int rpi)
15035 {
15036 	if (test_and_clear_bit(rpi, phba->sli4_hba.rpi_bmask)) {
15037 		phba->sli4_hba.rpi_count--;
15038 		phba->sli4_hba.max_cfg_param.rpi_used--;
15039 	}
15040 }
15041 
15042 /**
15043  * lpfc_sli4_free_rpi - Release an rpi for reuse.
15044  * @phba: pointer to lpfc hba data structure.
15045  *
15046  * This routine is invoked to release an rpi to the pool of
15047  * available rpis maintained by the driver.
15048  **/
15049 void
15050 lpfc_sli4_free_rpi(struct lpfc_hba *phba, int rpi)
15051 {
15052 	spin_lock_irq(&phba->hbalock);
15053 	__lpfc_sli4_free_rpi(phba, rpi);
15054 	spin_unlock_irq(&phba->hbalock);
15055 }
15056 
15057 /**
15058  * lpfc_sli4_remove_rpis - Remove the rpi bitmask region
15059  * @phba: pointer to lpfc hba data structure.
15060  *
15061  * This routine is invoked to remove the memory region that
15062  * provided rpi via a bitmask.
15063  **/
15064 void
15065 lpfc_sli4_remove_rpis(struct lpfc_hba *phba)
15066 {
15067 	kfree(phba->sli4_hba.rpi_bmask);
15068 	kfree(phba->sli4_hba.rpi_ids);
15069 	bf_set(lpfc_rpi_rsrc_rdy, &phba->sli4_hba.sli4_flags, 0);
15070 }
15071 
15072 /**
15073  * lpfc_sli4_resume_rpi - Remove the rpi bitmask region
15074  * @phba: pointer to lpfc hba data structure.
15075  *
15076  * This routine is invoked to remove the memory region that
15077  * provided rpi via a bitmask.
15078  **/
15079 int
15080 lpfc_sli4_resume_rpi(struct lpfc_nodelist *ndlp,
15081 	void (*cmpl)(struct lpfc_hba *, LPFC_MBOXQ_t *), void *arg)
15082 {
15083 	LPFC_MBOXQ_t *mboxq;
15084 	struct lpfc_hba *phba = ndlp->phba;
15085 	int rc;
15086 
15087 	/* The port is notified of the header region via a mailbox command. */
15088 	mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
15089 	if (!mboxq)
15090 		return -ENOMEM;
15091 
15092 	/* Post all rpi memory regions to the port. */
15093 	lpfc_resume_rpi(mboxq, ndlp);
15094 	if (cmpl) {
15095 		mboxq->mbox_cmpl = cmpl;
15096 		mboxq->context1 = arg;
15097 		mboxq->context2 = ndlp;
15098 	} else
15099 		mboxq->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
15100 	mboxq->vport = ndlp->vport;
15101 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT);
15102 	if (rc == MBX_NOT_FINISHED) {
15103 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
15104 				"2010 Resume RPI Mailbox failed "
15105 				"status %d, mbxStatus x%x\n", rc,
15106 				bf_get(lpfc_mqe_status, &mboxq->u.mqe));
15107 		mempool_free(mboxq, phba->mbox_mem_pool);
15108 		return -EIO;
15109 	}
15110 	return 0;
15111 }
15112 
15113 /**
15114  * lpfc_sli4_init_vpi - Initialize a vpi with the port
15115  * @vport: Pointer to the vport for which the vpi is being initialized
15116  *
15117  * This routine is invoked to activate a vpi with the port.
15118  *
15119  * Returns:
15120  *    0 success
15121  *    -Evalue otherwise
15122  **/
15123 int
15124 lpfc_sli4_init_vpi(struct lpfc_vport *vport)
15125 {
15126 	LPFC_MBOXQ_t *mboxq;
15127 	int rc = 0;
15128 	int retval = MBX_SUCCESS;
15129 	uint32_t mbox_tmo;
15130 	struct lpfc_hba *phba = vport->phba;
15131 	mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
15132 	if (!mboxq)
15133 		return -ENOMEM;
15134 	lpfc_init_vpi(phba, mboxq, vport->vpi);
15135 	mbox_tmo = lpfc_mbox_tmo_val(phba, mboxq);
15136 	rc = lpfc_sli_issue_mbox_wait(phba, mboxq, mbox_tmo);
15137 	if (rc != MBX_SUCCESS) {
15138 		lpfc_printf_vlog(vport, KERN_ERR, LOG_SLI,
15139 				"2022 INIT VPI Mailbox failed "
15140 				"status %d, mbxStatus x%x\n", rc,
15141 				bf_get(lpfc_mqe_status, &mboxq->u.mqe));
15142 		retval = -EIO;
15143 	}
15144 	if (rc != MBX_TIMEOUT)
15145 		mempool_free(mboxq, vport->phba->mbox_mem_pool);
15146 
15147 	return retval;
15148 }
15149 
15150 /**
15151  * lpfc_mbx_cmpl_add_fcf_record - add fcf mbox completion handler.
15152  * @phba: pointer to lpfc hba data structure.
15153  * @mboxq: Pointer to mailbox object.
15154  *
15155  * This routine is invoked to manually add a single FCF record. The caller
15156  * must pass a completely initialized FCF_Record.  This routine takes
15157  * care of the nonembedded mailbox operations.
15158  **/
15159 static void
15160 lpfc_mbx_cmpl_add_fcf_record(struct lpfc_hba *phba, LPFC_MBOXQ_t *mboxq)
15161 {
15162 	void *virt_addr;
15163 	union lpfc_sli4_cfg_shdr *shdr;
15164 	uint32_t shdr_status, shdr_add_status;
15165 
15166 	virt_addr = mboxq->sge_array->addr[0];
15167 	/* The IOCTL status is embedded in the mailbox subheader. */
15168 	shdr = (union lpfc_sli4_cfg_shdr *) virt_addr;
15169 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
15170 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
15171 
15172 	if ((shdr_status || shdr_add_status) &&
15173 		(shdr_status != STATUS_FCF_IN_USE))
15174 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
15175 			"2558 ADD_FCF_RECORD mailbox failed with "
15176 			"status x%x add_status x%x\n",
15177 			shdr_status, shdr_add_status);
15178 
15179 	lpfc_sli4_mbox_cmd_free(phba, mboxq);
15180 }
15181 
15182 /**
15183  * lpfc_sli4_add_fcf_record - Manually add an FCF Record.
15184  * @phba: pointer to lpfc hba data structure.
15185  * @fcf_record:  pointer to the initialized fcf record to add.
15186  *
15187  * This routine is invoked to manually add a single FCF record. The caller
15188  * must pass a completely initialized FCF_Record.  This routine takes
15189  * care of the nonembedded mailbox operations.
15190  **/
15191 int
15192 lpfc_sli4_add_fcf_record(struct lpfc_hba *phba, struct fcf_record *fcf_record)
15193 {
15194 	int rc = 0;
15195 	LPFC_MBOXQ_t *mboxq;
15196 	uint8_t *bytep;
15197 	void *virt_addr;
15198 	dma_addr_t phys_addr;
15199 	struct lpfc_mbx_sge sge;
15200 	uint32_t alloc_len, req_len;
15201 	uint32_t fcfindex;
15202 
15203 	mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
15204 	if (!mboxq) {
15205 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
15206 			"2009 Failed to allocate mbox for ADD_FCF cmd\n");
15207 		return -ENOMEM;
15208 	}
15209 
15210 	req_len = sizeof(struct fcf_record) + sizeof(union lpfc_sli4_cfg_shdr) +
15211 		  sizeof(uint32_t);
15212 
15213 	/* Allocate DMA memory and set up the non-embedded mailbox command */
15214 	alloc_len = lpfc_sli4_config(phba, mboxq, LPFC_MBOX_SUBSYSTEM_FCOE,
15215 				     LPFC_MBOX_OPCODE_FCOE_ADD_FCF,
15216 				     req_len, LPFC_SLI4_MBX_NEMBED);
15217 	if (alloc_len < req_len) {
15218 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
15219 			"2523 Allocated DMA memory size (x%x) is "
15220 			"less than the requested DMA memory "
15221 			"size (x%x)\n", alloc_len, req_len);
15222 		lpfc_sli4_mbox_cmd_free(phba, mboxq);
15223 		return -ENOMEM;
15224 	}
15225 
15226 	/*
15227 	 * Get the first SGE entry from the non-embedded DMA memory.  This
15228 	 * routine only uses a single SGE.
15229 	 */
15230 	lpfc_sli4_mbx_sge_get(mboxq, 0, &sge);
15231 	phys_addr = getPaddr(sge.pa_hi, sge.pa_lo);
15232 	virt_addr = mboxq->sge_array->addr[0];
15233 	/*
15234 	 * Configure the FCF record for FCFI 0.  This is the driver's
15235 	 * hardcoded default and gets used in nonFIP mode.
15236 	 */
15237 	fcfindex = bf_get(lpfc_fcf_record_fcf_index, fcf_record);
15238 	bytep = virt_addr + sizeof(union lpfc_sli4_cfg_shdr);
15239 	lpfc_sli_pcimem_bcopy(&fcfindex, bytep, sizeof(uint32_t));
15240 
15241 	/*
15242 	 * Copy the fcf_index and the FCF Record Data. The data starts after
15243 	 * the FCoE header plus word10. The data copy needs to be endian
15244 	 * correct.
15245 	 */
15246 	bytep += sizeof(uint32_t);
15247 	lpfc_sli_pcimem_bcopy(fcf_record, bytep, sizeof(struct fcf_record));
15248 	mboxq->vport = phba->pport;
15249 	mboxq->mbox_cmpl = lpfc_mbx_cmpl_add_fcf_record;
15250 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT);
15251 	if (rc == MBX_NOT_FINISHED) {
15252 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
15253 			"2515 ADD_FCF_RECORD mailbox failed with "
15254 			"status 0x%x\n", rc);
15255 		lpfc_sli4_mbox_cmd_free(phba, mboxq);
15256 		rc = -EIO;
15257 	} else
15258 		rc = 0;
15259 
15260 	return rc;
15261 }
15262 
15263 /**
15264  * lpfc_sli4_build_dflt_fcf_record - Build the driver's default FCF Record.
15265  * @phba: pointer to lpfc hba data structure.
15266  * @fcf_record:  pointer to the fcf record to write the default data.
15267  * @fcf_index: FCF table entry index.
15268  *
15269  * This routine is invoked to build the driver's default FCF record.  The
15270  * values used are hardcoded.  This routine handles memory initialization.
15271  *
15272  **/
15273 void
15274 lpfc_sli4_build_dflt_fcf_record(struct lpfc_hba *phba,
15275 				struct fcf_record *fcf_record,
15276 				uint16_t fcf_index)
15277 {
15278 	memset(fcf_record, 0, sizeof(struct fcf_record));
15279 	fcf_record->max_rcv_size = LPFC_FCOE_MAX_RCV_SIZE;
15280 	fcf_record->fka_adv_period = LPFC_FCOE_FKA_ADV_PER;
15281 	fcf_record->fip_priority = LPFC_FCOE_FIP_PRIORITY;
15282 	bf_set(lpfc_fcf_record_mac_0, fcf_record, phba->fc_map[0]);
15283 	bf_set(lpfc_fcf_record_mac_1, fcf_record, phba->fc_map[1]);
15284 	bf_set(lpfc_fcf_record_mac_2, fcf_record, phba->fc_map[2]);
15285 	bf_set(lpfc_fcf_record_mac_3, fcf_record, LPFC_FCOE_FCF_MAC3);
15286 	bf_set(lpfc_fcf_record_mac_4, fcf_record, LPFC_FCOE_FCF_MAC4);
15287 	bf_set(lpfc_fcf_record_mac_5, fcf_record, LPFC_FCOE_FCF_MAC5);
15288 	bf_set(lpfc_fcf_record_fc_map_0, fcf_record, phba->fc_map[0]);
15289 	bf_set(lpfc_fcf_record_fc_map_1, fcf_record, phba->fc_map[1]);
15290 	bf_set(lpfc_fcf_record_fc_map_2, fcf_record, phba->fc_map[2]);
15291 	bf_set(lpfc_fcf_record_fcf_valid, fcf_record, 1);
15292 	bf_set(lpfc_fcf_record_fcf_avail, fcf_record, 1);
15293 	bf_set(lpfc_fcf_record_fcf_index, fcf_record, fcf_index);
15294 	bf_set(lpfc_fcf_record_mac_addr_prov, fcf_record,
15295 		LPFC_FCF_FPMA | LPFC_FCF_SPMA);
15296 	/* Set the VLAN bit map */
15297 	if (phba->valid_vlan) {
15298 		fcf_record->vlan_bitmap[phba->vlan_id / 8]
15299 			= 1 << (phba->vlan_id % 8);
15300 	}
15301 }
15302 
15303 /**
15304  * lpfc_sli4_fcf_scan_read_fcf_rec - Read hba fcf record for fcf scan.
15305  * @phba: pointer to lpfc hba data structure.
15306  * @fcf_index: FCF table entry offset.
15307  *
15308  * This routine is invoked to scan the entire FCF table by reading FCF
15309  * record and processing it one at a time starting from the @fcf_index
15310  * for initial FCF discovery or fast FCF failover rediscovery.
15311  *
15312  * Return 0 if the mailbox command is submitted successfully, none 0
15313  * otherwise.
15314  **/
15315 int
15316 lpfc_sli4_fcf_scan_read_fcf_rec(struct lpfc_hba *phba, uint16_t fcf_index)
15317 {
15318 	int rc = 0, error;
15319 	LPFC_MBOXQ_t *mboxq;
15320 
15321 	phba->fcoe_eventtag_at_fcf_scan = phba->fcoe_eventtag;
15322 	phba->fcoe_cvl_eventtag_attn = phba->fcoe_cvl_eventtag;
15323 	mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
15324 	if (!mboxq) {
15325 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
15326 				"2000 Failed to allocate mbox for "
15327 				"READ_FCF cmd\n");
15328 		error = -ENOMEM;
15329 		goto fail_fcf_scan;
15330 	}
15331 	/* Construct the read FCF record mailbox command */
15332 	rc = lpfc_sli4_mbx_read_fcf_rec(phba, mboxq, fcf_index);
15333 	if (rc) {
15334 		error = -EINVAL;
15335 		goto fail_fcf_scan;
15336 	}
15337 	/* Issue the mailbox command asynchronously */
15338 	mboxq->vport = phba->pport;
15339 	mboxq->mbox_cmpl = lpfc_mbx_cmpl_fcf_scan_read_fcf_rec;
15340 
15341 	spin_lock_irq(&phba->hbalock);
15342 	phba->hba_flag |= FCF_TS_INPROG;
15343 	spin_unlock_irq(&phba->hbalock);
15344 
15345 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT);
15346 	if (rc == MBX_NOT_FINISHED)
15347 		error = -EIO;
15348 	else {
15349 		/* Reset eligible FCF count for new scan */
15350 		if (fcf_index == LPFC_FCOE_FCF_GET_FIRST)
15351 			phba->fcf.eligible_fcf_cnt = 0;
15352 		error = 0;
15353 	}
15354 fail_fcf_scan:
15355 	if (error) {
15356 		if (mboxq)
15357 			lpfc_sli4_mbox_cmd_free(phba, mboxq);
15358 		/* FCF scan failed, clear FCF_TS_INPROG flag */
15359 		spin_lock_irq(&phba->hbalock);
15360 		phba->hba_flag &= ~FCF_TS_INPROG;
15361 		spin_unlock_irq(&phba->hbalock);
15362 	}
15363 	return error;
15364 }
15365 
15366 /**
15367  * lpfc_sli4_fcf_rr_read_fcf_rec - Read hba fcf record for roundrobin fcf.
15368  * @phba: pointer to lpfc hba data structure.
15369  * @fcf_index: FCF table entry offset.
15370  *
15371  * This routine is invoked to read an FCF record indicated by @fcf_index
15372  * and to use it for FLOGI roundrobin FCF failover.
15373  *
15374  * Return 0 if the mailbox command is submitted successfully, none 0
15375  * otherwise.
15376  **/
15377 int
15378 lpfc_sli4_fcf_rr_read_fcf_rec(struct lpfc_hba *phba, uint16_t fcf_index)
15379 {
15380 	int rc = 0, error;
15381 	LPFC_MBOXQ_t *mboxq;
15382 
15383 	mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
15384 	if (!mboxq) {
15385 		lpfc_printf_log(phba, KERN_ERR, LOG_FIP | LOG_INIT,
15386 				"2763 Failed to allocate mbox for "
15387 				"READ_FCF cmd\n");
15388 		error = -ENOMEM;
15389 		goto fail_fcf_read;
15390 	}
15391 	/* Construct the read FCF record mailbox command */
15392 	rc = lpfc_sli4_mbx_read_fcf_rec(phba, mboxq, fcf_index);
15393 	if (rc) {
15394 		error = -EINVAL;
15395 		goto fail_fcf_read;
15396 	}
15397 	/* Issue the mailbox command asynchronously */
15398 	mboxq->vport = phba->pport;
15399 	mboxq->mbox_cmpl = lpfc_mbx_cmpl_fcf_rr_read_fcf_rec;
15400 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT);
15401 	if (rc == MBX_NOT_FINISHED)
15402 		error = -EIO;
15403 	else
15404 		error = 0;
15405 
15406 fail_fcf_read:
15407 	if (error && mboxq)
15408 		lpfc_sli4_mbox_cmd_free(phba, mboxq);
15409 	return error;
15410 }
15411 
15412 /**
15413  * lpfc_sli4_read_fcf_rec - Read hba fcf record for update eligible fcf bmask.
15414  * @phba: pointer to lpfc hba data structure.
15415  * @fcf_index: FCF table entry offset.
15416  *
15417  * This routine is invoked to read an FCF record indicated by @fcf_index to
15418  * determine whether it's eligible for FLOGI roundrobin failover list.
15419  *
15420  * Return 0 if the mailbox command is submitted successfully, none 0
15421  * otherwise.
15422  **/
15423 int
15424 lpfc_sli4_read_fcf_rec(struct lpfc_hba *phba, uint16_t fcf_index)
15425 {
15426 	int rc = 0, error;
15427 	LPFC_MBOXQ_t *mboxq;
15428 
15429 	mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
15430 	if (!mboxq) {
15431 		lpfc_printf_log(phba, KERN_ERR, LOG_FIP | LOG_INIT,
15432 				"2758 Failed to allocate mbox for "
15433 				"READ_FCF cmd\n");
15434 				error = -ENOMEM;
15435 				goto fail_fcf_read;
15436 	}
15437 	/* Construct the read FCF record mailbox command */
15438 	rc = lpfc_sli4_mbx_read_fcf_rec(phba, mboxq, fcf_index);
15439 	if (rc) {
15440 		error = -EINVAL;
15441 		goto fail_fcf_read;
15442 	}
15443 	/* Issue the mailbox command asynchronously */
15444 	mboxq->vport = phba->pport;
15445 	mboxq->mbox_cmpl = lpfc_mbx_cmpl_read_fcf_rec;
15446 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_NOWAIT);
15447 	if (rc == MBX_NOT_FINISHED)
15448 		error = -EIO;
15449 	else
15450 		error = 0;
15451 
15452 fail_fcf_read:
15453 	if (error && mboxq)
15454 		lpfc_sli4_mbox_cmd_free(phba, mboxq);
15455 	return error;
15456 }
15457 
15458 /**
15459  * lpfc_check_next_fcf_pri
15460  * phba pointer to the lpfc_hba struct for this port.
15461  * This routine is called from the lpfc_sli4_fcf_rr_next_index_get
15462  * routine when the rr_bmask is empty. The FCF indecies are put into the
15463  * rr_bmask based on their priority level. Starting from the highest priority
15464  * to the lowest. The most likely FCF candidate will be in the highest
15465  * priority group. When this routine is called it searches the fcf_pri list for
15466  * next lowest priority group and repopulates the rr_bmask with only those
15467  * fcf_indexes.
15468  * returns:
15469  * 1=success 0=failure
15470  **/
15471 int
15472 lpfc_check_next_fcf_pri_level(struct lpfc_hba *phba)
15473 {
15474 	uint16_t next_fcf_pri;
15475 	uint16_t last_index;
15476 	struct lpfc_fcf_pri *fcf_pri;
15477 	int rc;
15478 	int ret = 0;
15479 
15480 	last_index = find_first_bit(phba->fcf.fcf_rr_bmask,
15481 			LPFC_SLI4_FCF_TBL_INDX_MAX);
15482 	lpfc_printf_log(phba, KERN_INFO, LOG_FIP,
15483 			"3060 Last IDX %d\n", last_index);
15484 	if (list_empty(&phba->fcf.fcf_pri_list)) {
15485 		lpfc_printf_log(phba, KERN_ERR, LOG_FIP,
15486 			"3061 Last IDX %d\n", last_index);
15487 		return 0; /* Empty rr list */
15488 	}
15489 	next_fcf_pri = 0;
15490 	/*
15491 	 * Clear the rr_bmask and set all of the bits that are at this
15492 	 * priority.
15493 	 */
15494 	memset(phba->fcf.fcf_rr_bmask, 0,
15495 			sizeof(*phba->fcf.fcf_rr_bmask));
15496 	spin_lock_irq(&phba->hbalock);
15497 	list_for_each_entry(fcf_pri, &phba->fcf.fcf_pri_list, list) {
15498 		if (fcf_pri->fcf_rec.flag & LPFC_FCF_FLOGI_FAILED)
15499 			continue;
15500 		/*
15501 		 * the 1st priority that has not FLOGI failed
15502 		 * will be the highest.
15503 		 */
15504 		if (!next_fcf_pri)
15505 			next_fcf_pri = fcf_pri->fcf_rec.priority;
15506 		spin_unlock_irq(&phba->hbalock);
15507 		if (fcf_pri->fcf_rec.priority == next_fcf_pri) {
15508 			rc = lpfc_sli4_fcf_rr_index_set(phba,
15509 						fcf_pri->fcf_rec.fcf_index);
15510 			if (rc)
15511 				return 0;
15512 		}
15513 		spin_lock_irq(&phba->hbalock);
15514 	}
15515 	/*
15516 	 * if next_fcf_pri was not set above and the list is not empty then
15517 	 * we have failed flogis on all of them. So reset flogi failed
15518 	 * and start at the beginning.
15519 	 */
15520 	if (!next_fcf_pri && !list_empty(&phba->fcf.fcf_pri_list)) {
15521 		list_for_each_entry(fcf_pri, &phba->fcf.fcf_pri_list, list) {
15522 			fcf_pri->fcf_rec.flag &= ~LPFC_FCF_FLOGI_FAILED;
15523 			/*
15524 			 * the 1st priority that has not FLOGI failed
15525 			 * will be the highest.
15526 			 */
15527 			if (!next_fcf_pri)
15528 				next_fcf_pri = fcf_pri->fcf_rec.priority;
15529 			spin_unlock_irq(&phba->hbalock);
15530 			if (fcf_pri->fcf_rec.priority == next_fcf_pri) {
15531 				rc = lpfc_sli4_fcf_rr_index_set(phba,
15532 						fcf_pri->fcf_rec.fcf_index);
15533 				if (rc)
15534 					return 0;
15535 			}
15536 			spin_lock_irq(&phba->hbalock);
15537 		}
15538 	} else
15539 		ret = 1;
15540 	spin_unlock_irq(&phba->hbalock);
15541 
15542 	return ret;
15543 }
15544 /**
15545  * lpfc_sli4_fcf_rr_next_index_get - Get next eligible fcf record index
15546  * @phba: pointer to lpfc hba data structure.
15547  *
15548  * This routine is to get the next eligible FCF record index in a round
15549  * robin fashion. If the next eligible FCF record index equals to the
15550  * initial roundrobin FCF record index, LPFC_FCOE_FCF_NEXT_NONE (0xFFFF)
15551  * shall be returned, otherwise, the next eligible FCF record's index
15552  * shall be returned.
15553  **/
15554 uint16_t
15555 lpfc_sli4_fcf_rr_next_index_get(struct lpfc_hba *phba)
15556 {
15557 	uint16_t next_fcf_index;
15558 
15559 initial_priority:
15560 	/* Search start from next bit of currently registered FCF index */
15561 	next_fcf_index = phba->fcf.current_rec.fcf_indx;
15562 
15563 next_priority:
15564 	/* Determine the next fcf index to check */
15565 	next_fcf_index = (next_fcf_index + 1) % LPFC_SLI4_FCF_TBL_INDX_MAX;
15566 	next_fcf_index = find_next_bit(phba->fcf.fcf_rr_bmask,
15567 				       LPFC_SLI4_FCF_TBL_INDX_MAX,
15568 				       next_fcf_index);
15569 
15570 	/* Wrap around condition on phba->fcf.fcf_rr_bmask */
15571 	if (next_fcf_index >= LPFC_SLI4_FCF_TBL_INDX_MAX) {
15572 		/*
15573 		 * If we have wrapped then we need to clear the bits that
15574 		 * have been tested so that we can detect when we should
15575 		 * change the priority level.
15576 		 */
15577 		next_fcf_index = find_next_bit(phba->fcf.fcf_rr_bmask,
15578 					       LPFC_SLI4_FCF_TBL_INDX_MAX, 0);
15579 	}
15580 
15581 
15582 	/* Check roundrobin failover list empty condition */
15583 	if (next_fcf_index >= LPFC_SLI4_FCF_TBL_INDX_MAX ||
15584 		next_fcf_index == phba->fcf.current_rec.fcf_indx) {
15585 		/*
15586 		 * If next fcf index is not found check if there are lower
15587 		 * Priority level fcf's in the fcf_priority list.
15588 		 * Set up the rr_bmask with all of the avaiable fcf bits
15589 		 * at that level and continue the selection process.
15590 		 */
15591 		if (lpfc_check_next_fcf_pri_level(phba))
15592 			goto initial_priority;
15593 		lpfc_printf_log(phba, KERN_WARNING, LOG_FIP,
15594 				"2844 No roundrobin failover FCF available\n");
15595 		if (next_fcf_index >= LPFC_SLI4_FCF_TBL_INDX_MAX)
15596 			return LPFC_FCOE_FCF_NEXT_NONE;
15597 		else {
15598 			lpfc_printf_log(phba, KERN_WARNING, LOG_FIP,
15599 				"3063 Only FCF available idx %d, flag %x\n",
15600 				next_fcf_index,
15601 			phba->fcf.fcf_pri[next_fcf_index].fcf_rec.flag);
15602 			return next_fcf_index;
15603 		}
15604 	}
15605 
15606 	if (next_fcf_index < LPFC_SLI4_FCF_TBL_INDX_MAX &&
15607 		phba->fcf.fcf_pri[next_fcf_index].fcf_rec.flag &
15608 		LPFC_FCF_FLOGI_FAILED)
15609 		goto next_priority;
15610 
15611 	lpfc_printf_log(phba, KERN_INFO, LOG_FIP,
15612 			"2845 Get next roundrobin failover FCF (x%x)\n",
15613 			next_fcf_index);
15614 
15615 	return next_fcf_index;
15616 }
15617 
15618 /**
15619  * lpfc_sli4_fcf_rr_index_set - Set bmask with eligible fcf record index
15620  * @phba: pointer to lpfc hba data structure.
15621  *
15622  * This routine sets the FCF record index in to the eligible bmask for
15623  * roundrobin failover search. It checks to make sure that the index
15624  * does not go beyond the range of the driver allocated bmask dimension
15625  * before setting the bit.
15626  *
15627  * Returns 0 if the index bit successfully set, otherwise, it returns
15628  * -EINVAL.
15629  **/
15630 int
15631 lpfc_sli4_fcf_rr_index_set(struct lpfc_hba *phba, uint16_t fcf_index)
15632 {
15633 	if (fcf_index >= LPFC_SLI4_FCF_TBL_INDX_MAX) {
15634 		lpfc_printf_log(phba, KERN_ERR, LOG_FIP,
15635 				"2610 FCF (x%x) reached driver's book "
15636 				"keeping dimension:x%x\n",
15637 				fcf_index, LPFC_SLI4_FCF_TBL_INDX_MAX);
15638 		return -EINVAL;
15639 	}
15640 	/* Set the eligible FCF record index bmask */
15641 	set_bit(fcf_index, phba->fcf.fcf_rr_bmask);
15642 
15643 	lpfc_printf_log(phba, KERN_INFO, LOG_FIP,
15644 			"2790 Set FCF (x%x) to roundrobin FCF failover "
15645 			"bmask\n", fcf_index);
15646 
15647 	return 0;
15648 }
15649 
15650 /**
15651  * lpfc_sli4_fcf_rr_index_clear - Clear bmask from eligible fcf record index
15652  * @phba: pointer to lpfc hba data structure.
15653  *
15654  * This routine clears the FCF record index from the eligible bmask for
15655  * roundrobin failover search. It checks to make sure that the index
15656  * does not go beyond the range of the driver allocated bmask dimension
15657  * before clearing the bit.
15658  **/
15659 void
15660 lpfc_sli4_fcf_rr_index_clear(struct lpfc_hba *phba, uint16_t fcf_index)
15661 {
15662 	struct lpfc_fcf_pri *fcf_pri;
15663 	if (fcf_index >= LPFC_SLI4_FCF_TBL_INDX_MAX) {
15664 		lpfc_printf_log(phba, KERN_ERR, LOG_FIP,
15665 				"2762 FCF (x%x) reached driver's book "
15666 				"keeping dimension:x%x\n",
15667 				fcf_index, LPFC_SLI4_FCF_TBL_INDX_MAX);
15668 		return;
15669 	}
15670 	/* Clear the eligible FCF record index bmask */
15671 	spin_lock_irq(&phba->hbalock);
15672 	list_for_each_entry(fcf_pri, &phba->fcf.fcf_pri_list, list) {
15673 		if (fcf_pri->fcf_rec.fcf_index == fcf_index) {
15674 			list_del_init(&fcf_pri->list);
15675 			break;
15676 		}
15677 	}
15678 	spin_unlock_irq(&phba->hbalock);
15679 	clear_bit(fcf_index, phba->fcf.fcf_rr_bmask);
15680 
15681 	lpfc_printf_log(phba, KERN_INFO, LOG_FIP,
15682 			"2791 Clear FCF (x%x) from roundrobin failover "
15683 			"bmask\n", fcf_index);
15684 }
15685 
15686 /**
15687  * lpfc_mbx_cmpl_redisc_fcf_table - completion routine for rediscover FCF table
15688  * @phba: pointer to lpfc hba data structure.
15689  *
15690  * This routine is the completion routine for the rediscover FCF table mailbox
15691  * command. If the mailbox command returned failure, it will try to stop the
15692  * FCF rediscover wait timer.
15693  **/
15694 void
15695 lpfc_mbx_cmpl_redisc_fcf_table(struct lpfc_hba *phba, LPFC_MBOXQ_t *mbox)
15696 {
15697 	struct lpfc_mbx_redisc_fcf_tbl *redisc_fcf;
15698 	uint32_t shdr_status, shdr_add_status;
15699 
15700 	redisc_fcf = &mbox->u.mqe.un.redisc_fcf_tbl;
15701 
15702 	shdr_status = bf_get(lpfc_mbox_hdr_status,
15703 			     &redisc_fcf->header.cfg_shdr.response);
15704 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status,
15705 			     &redisc_fcf->header.cfg_shdr.response);
15706 	if (shdr_status || shdr_add_status) {
15707 		lpfc_printf_log(phba, KERN_ERR, LOG_FIP,
15708 				"2746 Requesting for FCF rediscovery failed "
15709 				"status x%x add_status x%x\n",
15710 				shdr_status, shdr_add_status);
15711 		if (phba->fcf.fcf_flag & FCF_ACVL_DISC) {
15712 			spin_lock_irq(&phba->hbalock);
15713 			phba->fcf.fcf_flag &= ~FCF_ACVL_DISC;
15714 			spin_unlock_irq(&phba->hbalock);
15715 			/*
15716 			 * CVL event triggered FCF rediscover request failed,
15717 			 * last resort to re-try current registered FCF entry.
15718 			 */
15719 			lpfc_retry_pport_discovery(phba);
15720 		} else {
15721 			spin_lock_irq(&phba->hbalock);
15722 			phba->fcf.fcf_flag &= ~FCF_DEAD_DISC;
15723 			spin_unlock_irq(&phba->hbalock);
15724 			/*
15725 			 * DEAD FCF event triggered FCF rediscover request
15726 			 * failed, last resort to fail over as a link down
15727 			 * to FCF registration.
15728 			 */
15729 			lpfc_sli4_fcf_dead_failthrough(phba);
15730 		}
15731 	} else {
15732 		lpfc_printf_log(phba, KERN_INFO, LOG_FIP,
15733 				"2775 Start FCF rediscover quiescent timer\n");
15734 		/*
15735 		 * Start FCF rediscovery wait timer for pending FCF
15736 		 * before rescan FCF record table.
15737 		 */
15738 		lpfc_fcf_redisc_wait_start_timer(phba);
15739 	}
15740 
15741 	mempool_free(mbox, phba->mbox_mem_pool);
15742 }
15743 
15744 /**
15745  * lpfc_sli4_redisc_fcf_table - Request to rediscover entire FCF table by port.
15746  * @phba: pointer to lpfc hba data structure.
15747  *
15748  * This routine is invoked to request for rediscovery of the entire FCF table
15749  * by the port.
15750  **/
15751 int
15752 lpfc_sli4_redisc_fcf_table(struct lpfc_hba *phba)
15753 {
15754 	LPFC_MBOXQ_t *mbox;
15755 	struct lpfc_mbx_redisc_fcf_tbl *redisc_fcf;
15756 	int rc, length;
15757 
15758 	/* Cancel retry delay timers to all vports before FCF rediscover */
15759 	lpfc_cancel_all_vport_retry_delay_timer(phba);
15760 
15761 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
15762 	if (!mbox) {
15763 		lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
15764 				"2745 Failed to allocate mbox for "
15765 				"requesting FCF rediscover.\n");
15766 		return -ENOMEM;
15767 	}
15768 
15769 	length = (sizeof(struct lpfc_mbx_redisc_fcf_tbl) -
15770 		  sizeof(struct lpfc_sli4_cfg_mhdr));
15771 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_FCOE,
15772 			 LPFC_MBOX_OPCODE_FCOE_REDISCOVER_FCF,
15773 			 length, LPFC_SLI4_MBX_EMBED);
15774 
15775 	redisc_fcf = &mbox->u.mqe.un.redisc_fcf_tbl;
15776 	/* Set count to 0 for invalidating the entire FCF database */
15777 	bf_set(lpfc_mbx_redisc_fcf_count, redisc_fcf, 0);
15778 
15779 	/* Issue the mailbox command asynchronously */
15780 	mbox->vport = phba->pport;
15781 	mbox->mbox_cmpl = lpfc_mbx_cmpl_redisc_fcf_table;
15782 	rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT);
15783 
15784 	if (rc == MBX_NOT_FINISHED) {
15785 		mempool_free(mbox, phba->mbox_mem_pool);
15786 		return -EIO;
15787 	}
15788 	return 0;
15789 }
15790 
15791 /**
15792  * lpfc_sli4_fcf_dead_failthrough - Failthrough routine to fcf dead event
15793  * @phba: pointer to lpfc hba data structure.
15794  *
15795  * This function is the failover routine as a last resort to the FCF DEAD
15796  * event when driver failed to perform fast FCF failover.
15797  **/
15798 void
15799 lpfc_sli4_fcf_dead_failthrough(struct lpfc_hba *phba)
15800 {
15801 	uint32_t link_state;
15802 
15803 	/*
15804 	 * Last resort as FCF DEAD event failover will treat this as
15805 	 * a link down, but save the link state because we don't want
15806 	 * it to be changed to Link Down unless it is already down.
15807 	 */
15808 	link_state = phba->link_state;
15809 	lpfc_linkdown(phba);
15810 	phba->link_state = link_state;
15811 
15812 	/* Unregister FCF if no devices connected to it */
15813 	lpfc_unregister_unused_fcf(phba);
15814 }
15815 
15816 /**
15817  * lpfc_sli_get_config_region23 - Get sli3 port region 23 data.
15818  * @phba: pointer to lpfc hba data structure.
15819  * @rgn23_data: pointer to configure region 23 data.
15820  *
15821  * This function gets SLI3 port configure region 23 data through memory dump
15822  * mailbox command. When it successfully retrieves data, the size of the data
15823  * will be returned, otherwise, 0 will be returned.
15824  **/
15825 static uint32_t
15826 lpfc_sli_get_config_region23(struct lpfc_hba *phba, char *rgn23_data)
15827 {
15828 	LPFC_MBOXQ_t *pmb = NULL;
15829 	MAILBOX_t *mb;
15830 	uint32_t offset = 0;
15831 	int rc;
15832 
15833 	if (!rgn23_data)
15834 		return 0;
15835 
15836 	pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
15837 	if (!pmb) {
15838 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
15839 				"2600 failed to allocate mailbox memory\n");
15840 		return 0;
15841 	}
15842 	mb = &pmb->u.mb;
15843 
15844 	do {
15845 		lpfc_dump_mem(phba, pmb, offset, DMP_REGION_23);
15846 		rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
15847 
15848 		if (rc != MBX_SUCCESS) {
15849 			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
15850 					"2601 failed to read config "
15851 					"region 23, rc 0x%x Status 0x%x\n",
15852 					rc, mb->mbxStatus);
15853 			mb->un.varDmp.word_cnt = 0;
15854 		}
15855 		/*
15856 		 * dump mem may return a zero when finished or we got a
15857 		 * mailbox error, either way we are done.
15858 		 */
15859 		if (mb->un.varDmp.word_cnt == 0)
15860 			break;
15861 		if (mb->un.varDmp.word_cnt > DMP_RGN23_SIZE - offset)
15862 			mb->un.varDmp.word_cnt = DMP_RGN23_SIZE - offset;
15863 
15864 		lpfc_sli_pcimem_bcopy(((uint8_t *)mb) + DMP_RSP_OFFSET,
15865 				       rgn23_data + offset,
15866 				       mb->un.varDmp.word_cnt);
15867 		offset += mb->un.varDmp.word_cnt;
15868 	} while (mb->un.varDmp.word_cnt && offset < DMP_RGN23_SIZE);
15869 
15870 	mempool_free(pmb, phba->mbox_mem_pool);
15871 	return offset;
15872 }
15873 
15874 /**
15875  * lpfc_sli4_get_config_region23 - Get sli4 port region 23 data.
15876  * @phba: pointer to lpfc hba data structure.
15877  * @rgn23_data: pointer to configure region 23 data.
15878  *
15879  * This function gets SLI4 port configure region 23 data through memory dump
15880  * mailbox command. When it successfully retrieves data, the size of the data
15881  * will be returned, otherwise, 0 will be returned.
15882  **/
15883 static uint32_t
15884 lpfc_sli4_get_config_region23(struct lpfc_hba *phba, char *rgn23_data)
15885 {
15886 	LPFC_MBOXQ_t *mboxq = NULL;
15887 	struct lpfc_dmabuf *mp = NULL;
15888 	struct lpfc_mqe *mqe;
15889 	uint32_t data_length = 0;
15890 	int rc;
15891 
15892 	if (!rgn23_data)
15893 		return 0;
15894 
15895 	mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
15896 	if (!mboxq) {
15897 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
15898 				"3105 failed to allocate mailbox memory\n");
15899 		return 0;
15900 	}
15901 
15902 	if (lpfc_sli4_dump_cfg_rg23(phba, mboxq))
15903 		goto out;
15904 	mqe = &mboxq->u.mqe;
15905 	mp = (struct lpfc_dmabuf *) mboxq->context1;
15906 	rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
15907 	if (rc)
15908 		goto out;
15909 	data_length = mqe->un.mb_words[5];
15910 	if (data_length == 0)
15911 		goto out;
15912 	if (data_length > DMP_RGN23_SIZE) {
15913 		data_length = 0;
15914 		goto out;
15915 	}
15916 	lpfc_sli_pcimem_bcopy((char *)mp->virt, rgn23_data, data_length);
15917 out:
15918 	mempool_free(mboxq, phba->mbox_mem_pool);
15919 	if (mp) {
15920 		lpfc_mbuf_free(phba, mp->virt, mp->phys);
15921 		kfree(mp);
15922 	}
15923 	return data_length;
15924 }
15925 
15926 /**
15927  * lpfc_sli_read_link_ste - Read region 23 to decide if link is disabled.
15928  * @phba: pointer to lpfc hba data structure.
15929  *
15930  * This function read region 23 and parse TLV for port status to
15931  * decide if the user disaled the port. If the TLV indicates the
15932  * port is disabled, the hba_flag is set accordingly.
15933  **/
15934 void
15935 lpfc_sli_read_link_ste(struct lpfc_hba *phba)
15936 {
15937 	uint8_t *rgn23_data = NULL;
15938 	uint32_t if_type, data_size, sub_tlv_len, tlv_offset;
15939 	uint32_t offset = 0;
15940 
15941 	/* Get adapter Region 23 data */
15942 	rgn23_data = kzalloc(DMP_RGN23_SIZE, GFP_KERNEL);
15943 	if (!rgn23_data)
15944 		goto out;
15945 
15946 	if (phba->sli_rev < LPFC_SLI_REV4)
15947 		data_size = lpfc_sli_get_config_region23(phba, rgn23_data);
15948 	else {
15949 		if_type = bf_get(lpfc_sli_intf_if_type,
15950 				 &phba->sli4_hba.sli_intf);
15951 		if (if_type == LPFC_SLI_INTF_IF_TYPE_0)
15952 			goto out;
15953 		data_size = lpfc_sli4_get_config_region23(phba, rgn23_data);
15954 	}
15955 
15956 	if (!data_size)
15957 		goto out;
15958 
15959 	/* Check the region signature first */
15960 	if (memcmp(&rgn23_data[offset], LPFC_REGION23_SIGNATURE, 4)) {
15961 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
15962 			"2619 Config region 23 has bad signature\n");
15963 			goto out;
15964 	}
15965 	offset += 4;
15966 
15967 	/* Check the data structure version */
15968 	if (rgn23_data[offset] != LPFC_REGION23_VERSION) {
15969 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
15970 			"2620 Config region 23 has bad version\n");
15971 		goto out;
15972 	}
15973 	offset += 4;
15974 
15975 	/* Parse TLV entries in the region */
15976 	while (offset < data_size) {
15977 		if (rgn23_data[offset] == LPFC_REGION23_LAST_REC)
15978 			break;
15979 		/*
15980 		 * If the TLV is not driver specific TLV or driver id is
15981 		 * not linux driver id, skip the record.
15982 		 */
15983 		if ((rgn23_data[offset] != DRIVER_SPECIFIC_TYPE) ||
15984 		    (rgn23_data[offset + 2] != LINUX_DRIVER_ID) ||
15985 		    (rgn23_data[offset + 3] != 0)) {
15986 			offset += rgn23_data[offset + 1] * 4 + 4;
15987 			continue;
15988 		}
15989 
15990 		/* Driver found a driver specific TLV in the config region */
15991 		sub_tlv_len = rgn23_data[offset + 1] * 4;
15992 		offset += 4;
15993 		tlv_offset = 0;
15994 
15995 		/*
15996 		 * Search for configured port state sub-TLV.
15997 		 */
15998 		while ((offset < data_size) &&
15999 			(tlv_offset < sub_tlv_len)) {
16000 			if (rgn23_data[offset] == LPFC_REGION23_LAST_REC) {
16001 				offset += 4;
16002 				tlv_offset += 4;
16003 				break;
16004 			}
16005 			if (rgn23_data[offset] != PORT_STE_TYPE) {
16006 				offset += rgn23_data[offset + 1] * 4 + 4;
16007 				tlv_offset += rgn23_data[offset + 1] * 4 + 4;
16008 				continue;
16009 			}
16010 
16011 			/* This HBA contains PORT_STE configured */
16012 			if (!rgn23_data[offset + 2])
16013 				phba->hba_flag |= LINK_DISABLED;
16014 
16015 			goto out;
16016 		}
16017 	}
16018 
16019 out:
16020 	kfree(rgn23_data);
16021 	return;
16022 }
16023 
16024 /**
16025  * lpfc_wr_object - write an object to the firmware
16026  * @phba: HBA structure that indicates port to create a queue on.
16027  * @dmabuf_list: list of dmabufs to write to the port.
16028  * @size: the total byte value of the objects to write to the port.
16029  * @offset: the current offset to be used to start the transfer.
16030  *
16031  * This routine will create a wr_object mailbox command to send to the port.
16032  * the mailbox command will be constructed using the dma buffers described in
16033  * @dmabuf_list to create a list of BDEs. This routine will fill in as many
16034  * BDEs that the imbedded mailbox can support. The @offset variable will be
16035  * used to indicate the starting offset of the transfer and will also return
16036  * the offset after the write object mailbox has completed. @size is used to
16037  * determine the end of the object and whether the eof bit should be set.
16038  *
16039  * Return 0 is successful and offset will contain the the new offset to use
16040  * for the next write.
16041  * Return negative value for error cases.
16042  **/
16043 int
16044 lpfc_wr_object(struct lpfc_hba *phba, struct list_head *dmabuf_list,
16045 	       uint32_t size, uint32_t *offset)
16046 {
16047 	struct lpfc_mbx_wr_object *wr_object;
16048 	LPFC_MBOXQ_t *mbox;
16049 	int rc = 0, i = 0;
16050 	uint32_t shdr_status, shdr_add_status;
16051 	uint32_t mbox_tmo;
16052 	union lpfc_sli4_cfg_shdr *shdr;
16053 	struct lpfc_dmabuf *dmabuf;
16054 	uint32_t written = 0;
16055 
16056 	mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
16057 	if (!mbox)
16058 		return -ENOMEM;
16059 
16060 	lpfc_sli4_config(phba, mbox, LPFC_MBOX_SUBSYSTEM_COMMON,
16061 			LPFC_MBOX_OPCODE_WRITE_OBJECT,
16062 			sizeof(struct lpfc_mbx_wr_object) -
16063 			sizeof(struct lpfc_sli4_cfg_mhdr), LPFC_SLI4_MBX_EMBED);
16064 
16065 	wr_object = (struct lpfc_mbx_wr_object *)&mbox->u.mqe.un.wr_object;
16066 	wr_object->u.request.write_offset = *offset;
16067 	sprintf((uint8_t *)wr_object->u.request.object_name, "/");
16068 	wr_object->u.request.object_name[0] =
16069 		cpu_to_le32(wr_object->u.request.object_name[0]);
16070 	bf_set(lpfc_wr_object_eof, &wr_object->u.request, 0);
16071 	list_for_each_entry(dmabuf, dmabuf_list, list) {
16072 		if (i >= LPFC_MBX_WR_CONFIG_MAX_BDE || written >= size)
16073 			break;
16074 		wr_object->u.request.bde[i].addrLow = putPaddrLow(dmabuf->phys);
16075 		wr_object->u.request.bde[i].addrHigh =
16076 			putPaddrHigh(dmabuf->phys);
16077 		if (written + SLI4_PAGE_SIZE >= size) {
16078 			wr_object->u.request.bde[i].tus.f.bdeSize =
16079 				(size - written);
16080 			written += (size - written);
16081 			bf_set(lpfc_wr_object_eof, &wr_object->u.request, 1);
16082 		} else {
16083 			wr_object->u.request.bde[i].tus.f.bdeSize =
16084 				SLI4_PAGE_SIZE;
16085 			written += SLI4_PAGE_SIZE;
16086 		}
16087 		i++;
16088 	}
16089 	wr_object->u.request.bde_count = i;
16090 	bf_set(lpfc_wr_object_write_length, &wr_object->u.request, written);
16091 	if (!phba->sli4_hba.intr_enable)
16092 		rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
16093 	else {
16094 		mbox_tmo = lpfc_mbox_tmo_val(phba, mbox);
16095 		rc = lpfc_sli_issue_mbox_wait(phba, mbox, mbox_tmo);
16096 	}
16097 	/* The IOCTL status is embedded in the mailbox subheader. */
16098 	shdr = (union lpfc_sli4_cfg_shdr *) &wr_object->header.cfg_shdr;
16099 	shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
16100 	shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
16101 	if (rc != MBX_TIMEOUT)
16102 		mempool_free(mbox, phba->mbox_mem_pool);
16103 	if (shdr_status || shdr_add_status || rc) {
16104 		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
16105 				"3025 Write Object mailbox failed with "
16106 				"status x%x add_status x%x, mbx status x%x\n",
16107 				shdr_status, shdr_add_status, rc);
16108 		rc = -ENXIO;
16109 	} else
16110 		*offset += wr_object->u.response.actual_write_length;
16111 	return rc;
16112 }
16113 
16114 /**
16115  * lpfc_cleanup_pending_mbox - Free up vport discovery mailbox commands.
16116  * @vport: pointer to vport data structure.
16117  *
16118  * This function iterate through the mailboxq and clean up all REG_LOGIN
16119  * and REG_VPI mailbox commands associated with the vport. This function
16120  * is called when driver want to restart discovery of the vport due to
16121  * a Clear Virtual Link event.
16122  **/
16123 void
16124 lpfc_cleanup_pending_mbox(struct lpfc_vport *vport)
16125 {
16126 	struct lpfc_hba *phba = vport->phba;
16127 	LPFC_MBOXQ_t *mb, *nextmb;
16128 	struct lpfc_dmabuf *mp;
16129 	struct lpfc_nodelist *ndlp;
16130 	struct lpfc_nodelist *act_mbx_ndlp = NULL;
16131 	struct Scsi_Host  *shost = lpfc_shost_from_vport(vport);
16132 	LIST_HEAD(mbox_cmd_list);
16133 	uint8_t restart_loop;
16134 
16135 	/* Clean up internally queued mailbox commands with the vport */
16136 	spin_lock_irq(&phba->hbalock);
16137 	list_for_each_entry_safe(mb, nextmb, &phba->sli.mboxq, list) {
16138 		if (mb->vport != vport)
16139 			continue;
16140 
16141 		if ((mb->u.mb.mbxCommand != MBX_REG_LOGIN64) &&
16142 			(mb->u.mb.mbxCommand != MBX_REG_VPI))
16143 			continue;
16144 
16145 		list_del(&mb->list);
16146 		list_add_tail(&mb->list, &mbox_cmd_list);
16147 	}
16148 	/* Clean up active mailbox command with the vport */
16149 	mb = phba->sli.mbox_active;
16150 	if (mb && (mb->vport == vport)) {
16151 		if ((mb->u.mb.mbxCommand == MBX_REG_LOGIN64) ||
16152 			(mb->u.mb.mbxCommand == MBX_REG_VPI))
16153 			mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
16154 		if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
16155 			act_mbx_ndlp = (struct lpfc_nodelist *)mb->context2;
16156 			/* Put reference count for delayed processing */
16157 			act_mbx_ndlp = lpfc_nlp_get(act_mbx_ndlp);
16158 			/* Unregister the RPI when mailbox complete */
16159 			mb->mbox_flag |= LPFC_MBX_IMED_UNREG;
16160 		}
16161 	}
16162 	/* Cleanup any mailbox completions which are not yet processed */
16163 	do {
16164 		restart_loop = 0;
16165 		list_for_each_entry(mb, &phba->sli.mboxq_cmpl, list) {
16166 			/*
16167 			 * If this mailox is already processed or it is
16168 			 * for another vport ignore it.
16169 			 */
16170 			if ((mb->vport != vport) ||
16171 				(mb->mbox_flag & LPFC_MBX_IMED_UNREG))
16172 				continue;
16173 
16174 			if ((mb->u.mb.mbxCommand != MBX_REG_LOGIN64) &&
16175 				(mb->u.mb.mbxCommand != MBX_REG_VPI))
16176 				continue;
16177 
16178 			mb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
16179 			if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
16180 				ndlp = (struct lpfc_nodelist *)mb->context2;
16181 				/* Unregister the RPI when mailbox complete */
16182 				mb->mbox_flag |= LPFC_MBX_IMED_UNREG;
16183 				restart_loop = 1;
16184 				spin_unlock_irq(&phba->hbalock);
16185 				spin_lock(shost->host_lock);
16186 				ndlp->nlp_flag &= ~NLP_IGNR_REG_CMPL;
16187 				spin_unlock(shost->host_lock);
16188 				spin_lock_irq(&phba->hbalock);
16189 				break;
16190 			}
16191 		}
16192 	} while (restart_loop);
16193 
16194 	spin_unlock_irq(&phba->hbalock);
16195 
16196 	/* Release the cleaned-up mailbox commands */
16197 	while (!list_empty(&mbox_cmd_list)) {
16198 		list_remove_head(&mbox_cmd_list, mb, LPFC_MBOXQ_t, list);
16199 		if (mb->u.mb.mbxCommand == MBX_REG_LOGIN64) {
16200 			mp = (struct lpfc_dmabuf *) (mb->context1);
16201 			if (mp) {
16202 				__lpfc_mbuf_free(phba, mp->virt, mp->phys);
16203 				kfree(mp);
16204 			}
16205 			ndlp = (struct lpfc_nodelist *) mb->context2;
16206 			mb->context2 = NULL;
16207 			if (ndlp) {
16208 				spin_lock(shost->host_lock);
16209 				ndlp->nlp_flag &= ~NLP_IGNR_REG_CMPL;
16210 				spin_unlock(shost->host_lock);
16211 				lpfc_nlp_put(ndlp);
16212 			}
16213 		}
16214 		mempool_free(mb, phba->mbox_mem_pool);
16215 	}
16216 
16217 	/* Release the ndlp with the cleaned-up active mailbox command */
16218 	if (act_mbx_ndlp) {
16219 		spin_lock(shost->host_lock);
16220 		act_mbx_ndlp->nlp_flag &= ~NLP_IGNR_REG_CMPL;
16221 		spin_unlock(shost->host_lock);
16222 		lpfc_nlp_put(act_mbx_ndlp);
16223 	}
16224 }
16225 
16226 /**
16227  * lpfc_drain_txq - Drain the txq
16228  * @phba: Pointer to HBA context object.
16229  *
16230  * This function attempt to submit IOCBs on the txq
16231  * to the adapter.  For SLI4 adapters, the txq contains
16232  * ELS IOCBs that have been deferred because the there
16233  * are no SGLs.  This congestion can occur with large
16234  * vport counts during node discovery.
16235  **/
16236 
16237 uint32_t
16238 lpfc_drain_txq(struct lpfc_hba *phba)
16239 {
16240 	LIST_HEAD(completions);
16241 	struct lpfc_sli_ring *pring = &phba->sli.ring[LPFC_ELS_RING];
16242 	struct lpfc_iocbq *piocbq = 0;
16243 	unsigned long iflags = 0;
16244 	char *fail_msg = NULL;
16245 	struct lpfc_sglq *sglq;
16246 	union lpfc_wqe wqe;
16247 
16248 	spin_lock_irqsave(&phba->hbalock, iflags);
16249 	if (pring->txq_cnt > pring->txq_max)
16250 		pring->txq_max = pring->txq_cnt;
16251 
16252 	spin_unlock_irqrestore(&phba->hbalock, iflags);
16253 
16254 	while (pring->txq_cnt) {
16255 		spin_lock_irqsave(&phba->hbalock, iflags);
16256 
16257 		piocbq = lpfc_sli_ringtx_get(phba, pring);
16258 		if (!piocbq) {
16259 			spin_unlock_irqrestore(&phba->hbalock, iflags);
16260 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
16261 				"2823 txq empty and txq_cnt is %d\n ",
16262 				pring->txq_cnt);
16263 			break;
16264 		}
16265 		sglq = __lpfc_sli_get_sglq(phba, piocbq);
16266 		if (!sglq) {
16267 			__lpfc_sli_ringtx_put(phba, pring, piocbq);
16268 			spin_unlock_irqrestore(&phba->hbalock, iflags);
16269 			break;
16270 		}
16271 
16272 		/* The xri and iocb resources secured,
16273 		 * attempt to issue request
16274 		 */
16275 		piocbq->sli4_lxritag = sglq->sli4_lxritag;
16276 		piocbq->sli4_xritag = sglq->sli4_xritag;
16277 		if (NO_XRI == lpfc_sli4_bpl2sgl(phba, piocbq, sglq))
16278 			fail_msg = "to convert bpl to sgl";
16279 		else if (lpfc_sli4_iocb2wqe(phba, piocbq, &wqe))
16280 			fail_msg = "to convert iocb to wqe";
16281 		else if (lpfc_sli4_wq_put(phba->sli4_hba.els_wq, &wqe))
16282 			fail_msg = " - Wq is full";
16283 		else
16284 			lpfc_sli_ringtxcmpl_put(phba, pring, piocbq);
16285 
16286 		if (fail_msg) {
16287 			/* Failed means we can't issue and need to cancel */
16288 			lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
16289 					"2822 IOCB failed %s iotag 0x%x "
16290 					"xri 0x%x\n",
16291 					fail_msg,
16292 					piocbq->iotag, piocbq->sli4_xritag);
16293 			list_add_tail(&piocbq->list, &completions);
16294 		}
16295 		spin_unlock_irqrestore(&phba->hbalock, iflags);
16296 	}
16297 
16298 	/* Cancel all the IOCBs that cannot be issued */
16299 	lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
16300 				IOERR_SLI_ABORTED);
16301 
16302 	return pring->txq_cnt;
16303 }
16304