lpfc_init.c revision 97207482fcdd120a60a44e9eb6bbad8da6f81c9d
1/*******************************************************************
2 * This file is part of the Emulex Linux Device Driver for         *
3 * Fibre Channel Host Bus Adapters.                                *
4 * Copyright (C) 2004-2008 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/delay.h>
24#include <linux/dma-mapping.h>
25#include <linux/idr.h>
26#include <linux/interrupt.h>
27#include <linux/kthread.h>
28#include <linux/pci.h>
29#include <linux/spinlock.h>
30#include <linux/ctype.h>
31
32#include <scsi/scsi.h>
33#include <scsi/scsi_device.h>
34#include <scsi/scsi_host.h>
35#include <scsi/scsi_transport_fc.h>
36
37#include "lpfc_hw.h"
38#include "lpfc_sli.h"
39#include "lpfc_nl.h"
40#include "lpfc_disc.h"
41#include "lpfc_scsi.h"
42#include "lpfc.h"
43#include "lpfc_logmsg.h"
44#include "lpfc_crtn.h"
45#include "lpfc_vport.h"
46#include "lpfc_version.h"
47
48static int lpfc_parse_vpd(struct lpfc_hba *, uint8_t *, int);
49static void lpfc_get_hba_model_desc(struct lpfc_hba *, uint8_t *, uint8_t *);
50static int lpfc_post_rcv_buf(struct lpfc_hba *);
51
52static struct scsi_transport_template *lpfc_transport_template = NULL;
53static struct scsi_transport_template *lpfc_vport_transport_template = NULL;
54static DEFINE_IDR(lpfc_hba_index);
55
56/**
57 * lpfc_config_port_prep: Perform lpfc initialization prior to config port.
58 * @phba: pointer to lpfc hba data structure.
59 *
60 * This routine will do LPFC initialization prior to issuing the CONFIG_PORT
61 * mailbox command. It retrieves the revision information from the HBA and
62 * collects the Vital Product Data (VPD) about the HBA for preparing the
63 * configuration of the HBA.
64 *
65 * Return codes:
66 *   0 - success.
67 *   -ERESTART - requests the SLI layer to reset the HBA and try again.
68 *   Any other value - indicates an error.
69 **/
70int
71lpfc_config_port_prep(struct lpfc_hba *phba)
72{
73	lpfc_vpd_t *vp = &phba->vpd;
74	int i = 0, rc;
75	LPFC_MBOXQ_t *pmb;
76	MAILBOX_t *mb;
77	char *lpfc_vpd_data = NULL;
78	uint16_t offset = 0;
79	static char licensed[56] =
80		    "key unlock for use with gnu public licensed code only\0";
81	static int init_key = 1;
82
83	pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
84	if (!pmb) {
85		phba->link_state = LPFC_HBA_ERROR;
86		return -ENOMEM;
87	}
88
89	mb = &pmb->mb;
90	phba->link_state = LPFC_INIT_MBX_CMDS;
91
92	if (lpfc_is_LC_HBA(phba->pcidev->device)) {
93		if (init_key) {
94			uint32_t *ptext = (uint32_t *) licensed;
95
96			for (i = 0; i < 56; i += sizeof (uint32_t), ptext++)
97				*ptext = cpu_to_be32(*ptext);
98			init_key = 0;
99		}
100
101		lpfc_read_nv(phba, pmb);
102		memset((char*)mb->un.varRDnvp.rsvd3, 0,
103			sizeof (mb->un.varRDnvp.rsvd3));
104		memcpy((char*)mb->un.varRDnvp.rsvd3, licensed,
105			 sizeof (licensed));
106
107		rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
108
109		if (rc != MBX_SUCCESS) {
110			lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
111					"0324 Config Port initialization "
112					"error, mbxCmd x%x READ_NVPARM, "
113					"mbxStatus x%x\n",
114					mb->mbxCommand, mb->mbxStatus);
115			mempool_free(pmb, phba->mbox_mem_pool);
116			return -ERESTART;
117		}
118		memcpy(phba->wwnn, (char *)mb->un.varRDnvp.nodename,
119		       sizeof(phba->wwnn));
120		memcpy(phba->wwpn, (char *)mb->un.varRDnvp.portname,
121		       sizeof(phba->wwpn));
122	}
123
124	phba->sli3_options = 0x0;
125
126	/* Setup and issue mailbox READ REV command */
127	lpfc_read_rev(phba, pmb);
128	rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
129	if (rc != MBX_SUCCESS) {
130		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
131				"0439 Adapter failed to init, mbxCmd x%x "
132				"READ_REV, mbxStatus x%x\n",
133				mb->mbxCommand, mb->mbxStatus);
134		mempool_free( pmb, phba->mbox_mem_pool);
135		return -ERESTART;
136	}
137
138
139	/*
140	 * The value of rr must be 1 since the driver set the cv field to 1.
141	 * This setting requires the FW to set all revision fields.
142	 */
143	if (mb->un.varRdRev.rr == 0) {
144		vp->rev.rBit = 0;
145		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
146				"0440 Adapter failed to init, READ_REV has "
147				"missing revision information.\n");
148		mempool_free(pmb, phba->mbox_mem_pool);
149		return -ERESTART;
150	}
151
152	if (phba->sli_rev == 3 && !mb->un.varRdRev.v3rsp) {
153		mempool_free(pmb, phba->mbox_mem_pool);
154		return -EINVAL;
155	}
156
157	/* Save information as VPD data */
158	vp->rev.rBit = 1;
159	memcpy(&vp->sli3Feat, &mb->un.varRdRev.sli3Feat, sizeof(uint32_t));
160	vp->rev.sli1FwRev = mb->un.varRdRev.sli1FwRev;
161	memcpy(vp->rev.sli1FwName, (char*) mb->un.varRdRev.sli1FwName, 16);
162	vp->rev.sli2FwRev = mb->un.varRdRev.sli2FwRev;
163	memcpy(vp->rev.sli2FwName, (char *) mb->un.varRdRev.sli2FwName, 16);
164	vp->rev.biuRev = mb->un.varRdRev.biuRev;
165	vp->rev.smRev = mb->un.varRdRev.smRev;
166	vp->rev.smFwRev = mb->un.varRdRev.un.smFwRev;
167	vp->rev.endecRev = mb->un.varRdRev.endecRev;
168	vp->rev.fcphHigh = mb->un.varRdRev.fcphHigh;
169	vp->rev.fcphLow = mb->un.varRdRev.fcphLow;
170	vp->rev.feaLevelHigh = mb->un.varRdRev.feaLevelHigh;
171	vp->rev.feaLevelLow = mb->un.varRdRev.feaLevelLow;
172	vp->rev.postKernRev = mb->un.varRdRev.postKernRev;
173	vp->rev.opFwRev = mb->un.varRdRev.opFwRev;
174
175	/* If the sli feature level is less then 9, we must
176	 * tear down all RPIs and VPIs on link down if NPIV
177	 * is enabled.
178	 */
179	if (vp->rev.feaLevelHigh < 9)
180		phba->sli3_options |= LPFC_SLI3_VPORT_TEARDOWN;
181
182	if (lpfc_is_LC_HBA(phba->pcidev->device))
183		memcpy(phba->RandomData, (char *)&mb->un.varWords[24],
184						sizeof (phba->RandomData));
185
186	/* Get adapter VPD information */
187	lpfc_vpd_data = kmalloc(DMP_VPD_SIZE, GFP_KERNEL);
188	if (!lpfc_vpd_data)
189		goto out_free_mbox;
190
191	do {
192		lpfc_dump_mem(phba, pmb, offset);
193		rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
194
195		if (rc != MBX_SUCCESS) {
196			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
197					"0441 VPD not present on adapter, "
198					"mbxCmd x%x DUMP VPD, mbxStatus x%x\n",
199					mb->mbxCommand, mb->mbxStatus);
200			mb->un.varDmp.word_cnt = 0;
201		}
202		if (mb->un.varDmp.word_cnt > DMP_VPD_SIZE - offset)
203			mb->un.varDmp.word_cnt = DMP_VPD_SIZE - offset;
204		lpfc_sli_pcimem_bcopy(((uint8_t *)mb) + DMP_RSP_OFFSET,
205				      lpfc_vpd_data + offset,
206				      mb->un.varDmp.word_cnt);
207		offset += mb->un.varDmp.word_cnt;
208	} while (mb->un.varDmp.word_cnt && offset < DMP_VPD_SIZE);
209	lpfc_parse_vpd(phba, lpfc_vpd_data, offset);
210
211	kfree(lpfc_vpd_data);
212out_free_mbox:
213	mempool_free(pmb, phba->mbox_mem_pool);
214	return 0;
215}
216
217/**
218 * lpfc_config_async_cmpl: Completion handler for config async event mbox cmd.
219 * @phba: pointer to lpfc hba data structure.
220 * @pmboxq: pointer to the driver internal queue element for mailbox command.
221 *
222 * This is the completion handler for driver's configuring asynchronous event
223 * mailbox command to the device. If the mailbox command returns successfully,
224 * it will set internal async event support flag to 1; otherwise, it will
225 * set internal async event support flag to 0.
226 **/
227static void
228lpfc_config_async_cmpl(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq)
229{
230	if (pmboxq->mb.mbxStatus == MBX_SUCCESS)
231		phba->temp_sensor_support = 1;
232	else
233		phba->temp_sensor_support = 0;
234	mempool_free(pmboxq, phba->mbox_mem_pool);
235	return;
236}
237
238/**
239 * lpfc_dump_wakeup_param_cmpl: Completion handler for dump memory mailbox
240 *     command used for getting wake up parameters.
241 * @phba: pointer to lpfc hba data structure.
242 * @pmboxq: pointer to the driver internal queue element for mailbox command.
243 *
244 * This is the completion handler for dump mailbox command for getting
245 * wake up parameters. When this command complete, the response contain
246 * Option rom version of the HBA. This function translate the version number
247 * into a human readable string and store it in OptionROMVersion.
248 **/
249static void
250lpfc_dump_wakeup_param_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
251{
252	struct prog_id *prg;
253	uint32_t prog_id_word;
254	char dist = ' ';
255	/* character array used for decoding dist type. */
256	char dist_char[] = "nabx";
257
258	if (pmboxq->mb.mbxStatus != MBX_SUCCESS)
259		return;
260
261	prg = (struct prog_id *) &prog_id_word;
262
263	/* word 7 contain option rom version */
264	prog_id_word = pmboxq->mb.un.varWords[7];
265
266	/* Decode the Option rom version word to a readable string */
267	if (prg->dist < 4)
268		dist = dist_char[prg->dist];
269
270	if ((prg->dist == 3) && (prg->num == 0))
271		sprintf(phba->OptionROMVersion, "%d.%d%d",
272			prg->ver, prg->rev, prg->lev);
273	else
274		sprintf(phba->OptionROMVersion, "%d.%d%d%c%d",
275			prg->ver, prg->rev, prg->lev,
276			dist, prg->num);
277	return;
278}
279
280/**
281 * lpfc_config_port_post: Perform lpfc initialization after config port.
282 * @phba: pointer to lpfc hba data structure.
283 *
284 * This routine will do LPFC initialization after the CONFIG_PORT mailbox
285 * command call. It performs all internal resource and state setups on the
286 * port: post IOCB buffers, enable appropriate host interrupt attentions,
287 * ELS ring timers, etc.
288 *
289 * Return codes
290 *   0 - success.
291 *   Any other value - error.
292 **/
293int
294lpfc_config_port_post(struct lpfc_hba *phba)
295{
296	struct lpfc_vport *vport = phba->pport;
297	LPFC_MBOXQ_t *pmb;
298	MAILBOX_t *mb;
299	struct lpfc_dmabuf *mp;
300	struct lpfc_sli *psli = &phba->sli;
301	uint32_t status, timeout;
302	int i, j;
303	int rc;
304
305	spin_lock_irq(&phba->hbalock);
306	/*
307	 * If the Config port completed correctly the HBA is not
308	 * over heated any more.
309	 */
310	if (phba->over_temp_state == HBA_OVER_TEMP)
311		phba->over_temp_state = HBA_NORMAL_TEMP;
312	spin_unlock_irq(&phba->hbalock);
313
314	pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
315	if (!pmb) {
316		phba->link_state = LPFC_HBA_ERROR;
317		return -ENOMEM;
318	}
319	mb = &pmb->mb;
320
321	/* Get login parameters for NID.  */
322	lpfc_read_sparam(phba, pmb, 0);
323	pmb->vport = vport;
324	if (lpfc_sli_issue_mbox(phba, pmb, MBX_POLL) != MBX_SUCCESS) {
325		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
326				"0448 Adapter failed init, mbxCmd x%x "
327				"READ_SPARM mbxStatus x%x\n",
328				mb->mbxCommand, mb->mbxStatus);
329		phba->link_state = LPFC_HBA_ERROR;
330		mp = (struct lpfc_dmabuf *) pmb->context1;
331		mempool_free( pmb, phba->mbox_mem_pool);
332		lpfc_mbuf_free(phba, mp->virt, mp->phys);
333		kfree(mp);
334		return -EIO;
335	}
336
337	mp = (struct lpfc_dmabuf *) pmb->context1;
338
339	memcpy(&vport->fc_sparam, mp->virt, sizeof (struct serv_parm));
340	lpfc_mbuf_free(phba, mp->virt, mp->phys);
341	kfree(mp);
342	pmb->context1 = NULL;
343
344	if (phba->cfg_soft_wwnn)
345		u64_to_wwn(phba->cfg_soft_wwnn,
346			   vport->fc_sparam.nodeName.u.wwn);
347	if (phba->cfg_soft_wwpn)
348		u64_to_wwn(phba->cfg_soft_wwpn,
349			   vport->fc_sparam.portName.u.wwn);
350	memcpy(&vport->fc_nodename, &vport->fc_sparam.nodeName,
351	       sizeof (struct lpfc_name));
352	memcpy(&vport->fc_portname, &vport->fc_sparam.portName,
353	       sizeof (struct lpfc_name));
354	/* If no serial number in VPD data, use low 6 bytes of WWNN */
355	/* This should be consolidated into parse_vpd ? - mr */
356	if (phba->SerialNumber[0] == 0) {
357		uint8_t *outptr;
358
359		outptr = &vport->fc_nodename.u.s.IEEE[0];
360		for (i = 0; i < 12; i++) {
361			status = *outptr++;
362			j = ((status & 0xf0) >> 4);
363			if (j <= 9)
364				phba->SerialNumber[i] =
365				    (char)((uint8_t) 0x30 + (uint8_t) j);
366			else
367				phba->SerialNumber[i] =
368				    (char)((uint8_t) 0x61 + (uint8_t) (j - 10));
369			i++;
370			j = (status & 0xf);
371			if (j <= 9)
372				phba->SerialNumber[i] =
373				    (char)((uint8_t) 0x30 + (uint8_t) j);
374			else
375				phba->SerialNumber[i] =
376				    (char)((uint8_t) 0x61 + (uint8_t) (j - 10));
377		}
378	}
379
380	lpfc_read_config(phba, pmb);
381	pmb->vport = vport;
382	if (lpfc_sli_issue_mbox(phba, pmb, MBX_POLL) != MBX_SUCCESS) {
383		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
384				"0453 Adapter failed to init, mbxCmd x%x "
385				"READ_CONFIG, mbxStatus x%x\n",
386				mb->mbxCommand, mb->mbxStatus);
387		phba->link_state = LPFC_HBA_ERROR;
388		mempool_free( pmb, phba->mbox_mem_pool);
389		return -EIO;
390	}
391
392	/* Reset the DFT_HBA_Q_DEPTH to the max xri  */
393	if (phba->cfg_hba_queue_depth > (mb->un.varRdConfig.max_xri+1))
394		phba->cfg_hba_queue_depth =
395			mb->un.varRdConfig.max_xri + 1;
396
397	phba->lmt = mb->un.varRdConfig.lmt;
398
399	/* Get the default values for Model Name and Description */
400	lpfc_get_hba_model_desc(phba, phba->ModelName, phba->ModelDesc);
401
402	if ((phba->cfg_link_speed > LINK_SPEED_10G)
403	    || ((phba->cfg_link_speed == LINK_SPEED_1G)
404		&& !(phba->lmt & LMT_1Gb))
405	    || ((phba->cfg_link_speed == LINK_SPEED_2G)
406		&& !(phba->lmt & LMT_2Gb))
407	    || ((phba->cfg_link_speed == LINK_SPEED_4G)
408		&& !(phba->lmt & LMT_4Gb))
409	    || ((phba->cfg_link_speed == LINK_SPEED_8G)
410		&& !(phba->lmt & LMT_8Gb))
411	    || ((phba->cfg_link_speed == LINK_SPEED_10G)
412		&& !(phba->lmt & LMT_10Gb))) {
413		/* Reset link speed to auto */
414		lpfc_printf_log(phba, KERN_WARNING, LOG_LINK_EVENT,
415			"1302 Invalid speed for this board: "
416			"Reset link speed to auto: x%x\n",
417			phba->cfg_link_speed);
418			phba->cfg_link_speed = LINK_SPEED_AUTO;
419	}
420
421	phba->link_state = LPFC_LINK_DOWN;
422
423	/* Only process IOCBs on ELS ring till hba_state is READY */
424	if (psli->ring[psli->extra_ring].cmdringaddr)
425		psli->ring[psli->extra_ring].flag |= LPFC_STOP_IOCB_EVENT;
426	if (psli->ring[psli->fcp_ring].cmdringaddr)
427		psli->ring[psli->fcp_ring].flag |= LPFC_STOP_IOCB_EVENT;
428	if (psli->ring[psli->next_ring].cmdringaddr)
429		psli->ring[psli->next_ring].flag |= LPFC_STOP_IOCB_EVENT;
430
431	/* Post receive buffers for desired rings */
432	if (phba->sli_rev != 3)
433		lpfc_post_rcv_buf(phba);
434
435	/*
436	 * Configure HBA MSI-X attention conditions to messages if MSI-X mode
437	 */
438	if (phba->intr_type == MSIX) {
439		rc = lpfc_config_msi(phba, pmb);
440		if (rc) {
441			mempool_free(pmb, phba->mbox_mem_pool);
442			return -EIO;
443		}
444		rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
445		if (rc != MBX_SUCCESS) {
446			lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
447					"0352 Config MSI mailbox command "
448					"failed, mbxCmd x%x, mbxStatus x%x\n",
449					pmb->mb.mbxCommand, pmb->mb.mbxStatus);
450			mempool_free(pmb, phba->mbox_mem_pool);
451			return -EIO;
452		}
453	}
454
455	/* Initialize ERATT handling flag */
456	phba->hba_flag &= ~HBA_ERATT_HANDLED;
457
458	/* Enable appropriate host interrupts */
459	spin_lock_irq(&phba->hbalock);
460	status = readl(phba->HCregaddr);
461	status |= HC_MBINT_ENA | HC_ERINT_ENA | HC_LAINT_ENA;
462	if (psli->num_rings > 0)
463		status |= HC_R0INT_ENA;
464	if (psli->num_rings > 1)
465		status |= HC_R1INT_ENA;
466	if (psli->num_rings > 2)
467		status |= HC_R2INT_ENA;
468	if (psli->num_rings > 3)
469		status |= HC_R3INT_ENA;
470
471	if ((phba->cfg_poll & ENABLE_FCP_RING_POLLING) &&
472	    (phba->cfg_poll & DISABLE_FCP_RING_INT))
473		status &= ~(HC_R0INT_ENA);
474
475	writel(status, phba->HCregaddr);
476	readl(phba->HCregaddr); /* flush */
477	spin_unlock_irq(&phba->hbalock);
478
479	/* Set up ring-0 (ELS) timer */
480	timeout = phba->fc_ratov * 2;
481	mod_timer(&vport->els_tmofunc, jiffies + HZ * timeout);
482	/* Set up heart beat (HB) timer */
483	mod_timer(&phba->hb_tmofunc, jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
484	phba->hb_outstanding = 0;
485	phba->last_completion_time = jiffies;
486	/* Set up error attention (ERATT) polling timer */
487	mod_timer(&phba->eratt_poll, jiffies + HZ * LPFC_ERATT_POLL_INTERVAL);
488
489	lpfc_init_link(phba, pmb, phba->cfg_topology, phba->cfg_link_speed);
490	pmb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
491	lpfc_set_loopback_flag(phba);
492	rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
493	if (rc != MBX_SUCCESS) {
494		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
495				"0454 Adapter failed to init, mbxCmd x%x "
496				"INIT_LINK, mbxStatus x%x\n",
497				mb->mbxCommand, mb->mbxStatus);
498
499		/* Clear all interrupt enable conditions */
500		writel(0, phba->HCregaddr);
501		readl(phba->HCregaddr); /* flush */
502		/* Clear all pending interrupts */
503		writel(0xffffffff, phba->HAregaddr);
504		readl(phba->HAregaddr); /* flush */
505
506		phba->link_state = LPFC_HBA_ERROR;
507		if (rc != MBX_BUSY)
508			mempool_free(pmb, phba->mbox_mem_pool);
509		return -EIO;
510	}
511	/* MBOX buffer will be freed in mbox compl */
512	pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
513	lpfc_config_async(phba, pmb, LPFC_ELS_RING);
514	pmb->mbox_cmpl = lpfc_config_async_cmpl;
515	pmb->vport = phba->pport;
516	rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
517
518	if ((rc != MBX_BUSY) && (rc != MBX_SUCCESS)) {
519		lpfc_printf_log(phba,
520				KERN_ERR,
521				LOG_INIT,
522				"0456 Adapter failed to issue "
523				"ASYNCEVT_ENABLE mbox status x%x \n.",
524				rc);
525		mempool_free(pmb, phba->mbox_mem_pool);
526	}
527
528	/* Get Option rom version */
529	pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
530	lpfc_dump_wakeup_param(phba, pmb);
531	pmb->mbox_cmpl = lpfc_dump_wakeup_param_cmpl;
532	pmb->vport = phba->pport;
533	rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
534
535	if ((rc != MBX_BUSY) && (rc != MBX_SUCCESS)) {
536		lpfc_printf_log(phba, KERN_ERR, LOG_INIT, "0435 Adapter failed "
537				"to get Option ROM version status x%x\n.", rc);
538		mempool_free(pmb, phba->mbox_mem_pool);
539	}
540
541	return 0;
542}
543
544/**
545 * lpfc_hba_down_prep: Perform lpfc uninitialization prior to HBA reset.
546 * @phba: pointer to lpfc HBA data structure.
547 *
548 * This routine will do LPFC uninitialization before the HBA is reset when
549 * bringing down the SLI Layer.
550 *
551 * Return codes
552 *   0 - success.
553 *   Any other value - error.
554 **/
555int
556lpfc_hba_down_prep(struct lpfc_hba *phba)
557{
558	struct lpfc_vport **vports;
559	int i;
560	/* Disable interrupts */
561	writel(0, phba->HCregaddr);
562	readl(phba->HCregaddr); /* flush */
563
564	if (phba->pport->load_flag & FC_UNLOADING)
565		lpfc_cleanup_discovery_resources(phba->pport);
566	else {
567		vports = lpfc_create_vport_work_array(phba);
568		if (vports != NULL)
569			for(i = 0; i <= phba->max_vpi && vports[i] != NULL; i++)
570				lpfc_cleanup_discovery_resources(vports[i]);
571		lpfc_destroy_vport_work_array(phba, vports);
572	}
573	return 0;
574}
575
576/**
577 * lpfc_hba_down_post: Perform lpfc uninitialization after HBA reset.
578 * @phba: pointer to lpfc HBA data structure.
579 *
580 * This routine will do uninitialization after the HBA is reset when bring
581 * down the SLI Layer.
582 *
583 * Return codes
584 *   0 - sucess.
585 *   Any other value - error.
586 **/
587int
588lpfc_hba_down_post(struct lpfc_hba *phba)
589{
590	struct lpfc_sli *psli = &phba->sli;
591	struct lpfc_sli_ring *pring;
592	struct lpfc_dmabuf *mp, *next_mp;
593	struct lpfc_iocbq *iocb;
594	IOCB_t *cmd = NULL;
595	LIST_HEAD(completions);
596	int i;
597
598	if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED)
599		lpfc_sli_hbqbuf_free_all(phba);
600	else {
601		/* Cleanup preposted buffers on the ELS ring */
602		pring = &psli->ring[LPFC_ELS_RING];
603		list_for_each_entry_safe(mp, next_mp, &pring->postbufq, list) {
604			list_del(&mp->list);
605			pring->postbufq_cnt--;
606			lpfc_mbuf_free(phba, mp->virt, mp->phys);
607			kfree(mp);
608		}
609	}
610
611	spin_lock_irq(&phba->hbalock);
612	for (i = 0; i < psli->num_rings; i++) {
613		pring = &psli->ring[i];
614
615		/* At this point in time the HBA is either reset or DOA. Either
616		 * way, nothing should be on txcmplq as it will NEVER complete.
617		 */
618		list_splice_init(&pring->txcmplq, &completions);
619		pring->txcmplq_cnt = 0;
620		spin_unlock_irq(&phba->hbalock);
621
622		while (!list_empty(&completions)) {
623			iocb = list_get_first(&completions, struct lpfc_iocbq,
624				list);
625			cmd = &iocb->iocb;
626			list_del_init(&iocb->list);
627
628			if (!iocb->iocb_cmpl)
629				lpfc_sli_release_iocbq(phba, iocb);
630			else {
631				cmd->ulpStatus = IOSTAT_LOCAL_REJECT;
632				cmd->un.ulpWord[4] = IOERR_SLI_ABORTED;
633				(iocb->iocb_cmpl) (phba, iocb, iocb);
634			}
635		}
636
637		lpfc_sli_abort_iocb_ring(phba, pring);
638		spin_lock_irq(&phba->hbalock);
639	}
640	spin_unlock_irq(&phba->hbalock);
641
642	return 0;
643}
644
645/**
646 * lpfc_hb_timeout: The HBA-timer timeout handler.
647 * @ptr: unsigned long holds the pointer to lpfc hba data structure.
648 *
649 * This is the HBA-timer timeout handler registered to the lpfc driver. When
650 * this timer fires, a HBA timeout event shall be posted to the lpfc driver
651 * work-port-events bitmap and the worker thread is notified. This timeout
652 * event will be used by the worker thread to invoke the actual timeout
653 * handler routine, lpfc_hb_timeout_handler. Any periodical operations will
654 * be performed in the timeout handler and the HBA timeout event bit shall
655 * be cleared by the worker thread after it has taken the event bitmap out.
656 **/
657static void
658lpfc_hb_timeout(unsigned long ptr)
659{
660	struct lpfc_hba *phba;
661	uint32_t tmo_posted;
662	unsigned long iflag;
663
664	phba = (struct lpfc_hba *)ptr;
665
666	/* Check for heart beat timeout conditions */
667	spin_lock_irqsave(&phba->pport->work_port_lock, iflag);
668	tmo_posted = phba->pport->work_port_events & WORKER_HB_TMO;
669	if (!tmo_posted)
670		phba->pport->work_port_events |= WORKER_HB_TMO;
671	spin_unlock_irqrestore(&phba->pport->work_port_lock, iflag);
672
673	/* Tell the worker thread there is work to do */
674	if (!tmo_posted)
675		lpfc_worker_wake_up(phba);
676	return;
677}
678
679/**
680 * lpfc_hb_mbox_cmpl: The lpfc heart-beat mailbox command callback function.
681 * @phba: pointer to lpfc hba data structure.
682 * @pmboxq: pointer to the driver internal queue element for mailbox command.
683 *
684 * This is the callback function to the lpfc heart-beat mailbox command.
685 * If configured, the lpfc driver issues the heart-beat mailbox command to
686 * the HBA every LPFC_HB_MBOX_INTERVAL (current 5) seconds. At the time the
687 * heart-beat mailbox command is issued, the driver shall set up heart-beat
688 * timeout timer to LPFC_HB_MBOX_TIMEOUT (current 30) seconds and marks
689 * heart-beat outstanding state. Once the mailbox command comes back and
690 * no error conditions detected, the heart-beat mailbox command timer is
691 * reset to LPFC_HB_MBOX_INTERVAL seconds and the heart-beat outstanding
692 * state is cleared for the next heart-beat. If the timer expired with the
693 * heart-beat outstanding state set, the driver will put the HBA offline.
694 **/
695static void
696lpfc_hb_mbox_cmpl(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq)
697{
698	unsigned long drvr_flag;
699
700	spin_lock_irqsave(&phba->hbalock, drvr_flag);
701	phba->hb_outstanding = 0;
702	spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
703
704	/* Check and reset heart-beat timer is necessary */
705	mempool_free(pmboxq, phba->mbox_mem_pool);
706	if (!(phba->pport->fc_flag & FC_OFFLINE_MODE) &&
707		!(phba->link_state == LPFC_HBA_ERROR) &&
708		!(phba->pport->load_flag & FC_UNLOADING))
709		mod_timer(&phba->hb_tmofunc,
710			jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
711	return;
712}
713
714/**
715 * lpfc_hb_timeout_handler: The HBA-timer timeout handler.
716 * @phba: pointer to lpfc hba data structure.
717 *
718 * This is the actual HBA-timer timeout handler to be invoked by the worker
719 * thread whenever the HBA timer fired and HBA-timeout event posted. This
720 * handler performs any periodic operations needed for the device. If such
721 * periodic event has already been attended to either in the interrupt handler
722 * or by processing slow-ring or fast-ring events within the HBA-timer
723 * timeout window (LPFC_HB_MBOX_INTERVAL), this handler just simply resets
724 * the timer for the next timeout period. If lpfc heart-beat mailbox command
725 * is configured and there is no heart-beat mailbox command outstanding, a
726 * heart-beat mailbox is issued and timer set properly. Otherwise, if there
727 * has been a heart-beat mailbox command outstanding, the HBA shall be put
728 * to offline.
729 **/
730void
731lpfc_hb_timeout_handler(struct lpfc_hba *phba)
732{
733	LPFC_MBOXQ_t *pmboxq;
734	struct lpfc_dmabuf *buf_ptr;
735	int retval;
736	struct lpfc_sli *psli = &phba->sli;
737	LIST_HEAD(completions);
738
739	if ((phba->link_state == LPFC_HBA_ERROR) ||
740		(phba->pport->load_flag & FC_UNLOADING) ||
741		(phba->pport->fc_flag & FC_OFFLINE_MODE))
742		return;
743
744	spin_lock_irq(&phba->pport->work_port_lock);
745	/* If the timer is already canceled do nothing */
746	if (!(phba->pport->work_port_events & WORKER_HB_TMO)) {
747		spin_unlock_irq(&phba->pport->work_port_lock);
748		return;
749	}
750
751	if (time_after(phba->last_completion_time + LPFC_HB_MBOX_INTERVAL * HZ,
752		jiffies)) {
753		spin_unlock_irq(&phba->pport->work_port_lock);
754		if (!phba->hb_outstanding)
755			mod_timer(&phba->hb_tmofunc,
756				jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
757		else
758			mod_timer(&phba->hb_tmofunc,
759				jiffies + HZ * LPFC_HB_MBOX_TIMEOUT);
760		return;
761	}
762	spin_unlock_irq(&phba->pport->work_port_lock);
763
764	if (phba->elsbuf_cnt &&
765		(phba->elsbuf_cnt == phba->elsbuf_prev_cnt)) {
766		spin_lock_irq(&phba->hbalock);
767		list_splice_init(&phba->elsbuf, &completions);
768		phba->elsbuf_cnt = 0;
769		phba->elsbuf_prev_cnt = 0;
770		spin_unlock_irq(&phba->hbalock);
771
772		while (!list_empty(&completions)) {
773			list_remove_head(&completions, buf_ptr,
774				struct lpfc_dmabuf, list);
775			lpfc_mbuf_free(phba, buf_ptr->virt, buf_ptr->phys);
776			kfree(buf_ptr);
777		}
778	}
779	phba->elsbuf_prev_cnt = phba->elsbuf_cnt;
780
781	/* If there is no heart beat outstanding, issue a heartbeat command */
782	if (phba->cfg_enable_hba_heartbeat) {
783		if (!phba->hb_outstanding) {
784			pmboxq = mempool_alloc(phba->mbox_mem_pool,GFP_KERNEL);
785			if (!pmboxq) {
786				mod_timer(&phba->hb_tmofunc,
787					  jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
788				return;
789			}
790
791			lpfc_heart_beat(phba, pmboxq);
792			pmboxq->mbox_cmpl = lpfc_hb_mbox_cmpl;
793			pmboxq->vport = phba->pport;
794			retval = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT);
795
796			if (retval != MBX_BUSY && retval != MBX_SUCCESS) {
797				mempool_free(pmboxq, phba->mbox_mem_pool);
798				mod_timer(&phba->hb_tmofunc,
799					  jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
800				return;
801			}
802			mod_timer(&phba->hb_tmofunc,
803				  jiffies + HZ * LPFC_HB_MBOX_TIMEOUT);
804			phba->hb_outstanding = 1;
805			return;
806		} else {
807			/*
808			* If heart beat timeout called with hb_outstanding set
809			* we need to take the HBA offline.
810			*/
811			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
812					"0459 Adapter heartbeat failure, "
813					"taking this port offline.\n");
814
815			spin_lock_irq(&phba->hbalock);
816			psli->sli_flag &= ~LPFC_SLI2_ACTIVE;
817			spin_unlock_irq(&phba->hbalock);
818
819			lpfc_offline_prep(phba);
820			lpfc_offline(phba);
821			lpfc_unblock_mgmt_io(phba);
822			phba->link_state = LPFC_HBA_ERROR;
823			lpfc_hba_down_post(phba);
824		}
825	}
826}
827
828/**
829 * lpfc_offline_eratt: Bring lpfc offline on hardware error attention.
830 * @phba: pointer to lpfc hba data structure.
831 *
832 * This routine is called to bring the HBA offline when HBA hardware error
833 * other than Port Error 6 has been detected.
834 **/
835static void
836lpfc_offline_eratt(struct lpfc_hba *phba)
837{
838	struct lpfc_sli   *psli = &phba->sli;
839
840	spin_lock_irq(&phba->hbalock);
841	psli->sli_flag &= ~LPFC_SLI2_ACTIVE;
842	spin_unlock_irq(&phba->hbalock);
843	lpfc_offline_prep(phba);
844
845	lpfc_offline(phba);
846	lpfc_reset_barrier(phba);
847	lpfc_sli_brdreset(phba);
848	lpfc_hba_down_post(phba);
849	lpfc_sli_brdready(phba, HS_MBRDY);
850	lpfc_unblock_mgmt_io(phba);
851	phba->link_state = LPFC_HBA_ERROR;
852	return;
853}
854
855/**
856 * lpfc_handle_eratt: The HBA hardware error handler.
857 * @phba: pointer to lpfc hba data structure.
858 *
859 * This routine is invoked to handle the following HBA hardware error
860 * conditions:
861 * 1 - HBA error attention interrupt
862 * 2 - DMA ring index out of range
863 * 3 - Mailbox command came back as unknown
864 **/
865void
866lpfc_handle_eratt(struct lpfc_hba *phba)
867{
868	struct lpfc_vport *vport = phba->pport;
869	struct lpfc_sli   *psli = &phba->sli;
870	struct lpfc_sli_ring  *pring;
871	uint32_t event_data;
872	unsigned long temperature;
873	struct temp_event temp_event_data;
874	struct Scsi_Host  *shost;
875	struct lpfc_board_event_header board_event;
876
877	/* If the pci channel is offline, ignore possible errors,
878	 * since we cannot communicate with the pci card anyway. */
879	if (pci_channel_offline(phba->pcidev))
880		return;
881	/* If resets are disabled then leave the HBA alone and return */
882	if (!phba->cfg_enable_hba_reset)
883		return;
884
885	/* Send an internal error event to mgmt application */
886	board_event.event_type = FC_REG_BOARD_EVENT;
887	board_event.subcategory = LPFC_EVENT_PORTINTERR;
888	shost = lpfc_shost_from_vport(phba->pport);
889	fc_host_post_vendor_event(shost, fc_get_event_number(),
890				  sizeof(board_event),
891				  (char *) &board_event,
892				  LPFC_NL_VENDOR_ID);
893
894	if (phba->work_hs & HS_FFER6) {
895		/* Re-establishing Link */
896		lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT,
897				"1301 Re-establishing Link "
898				"Data: x%x x%x x%x\n",
899				phba->work_hs,
900				phba->work_status[0], phba->work_status[1]);
901
902		spin_lock_irq(&phba->hbalock);
903		psli->sli_flag &= ~LPFC_SLI2_ACTIVE;
904		spin_unlock_irq(&phba->hbalock);
905
906		/*
907		* Firmware stops when it triggled erratt with HS_FFER6.
908		* That could cause the I/Os dropped by the firmware.
909		* Error iocb (I/O) on txcmplq and let the SCSI layer
910		* retry it after re-establishing link.
911		*/
912		pring = &psli->ring[psli->fcp_ring];
913		lpfc_sli_abort_iocb_ring(phba, pring);
914
915		/*
916		 * There was a firmware error.  Take the hba offline and then
917		 * attempt to restart it.
918		 */
919		lpfc_offline_prep(phba);
920		lpfc_offline(phba);
921		lpfc_sli_brdrestart(phba);
922		if (lpfc_online(phba) == 0) {	/* Initialize the HBA */
923			lpfc_unblock_mgmt_io(phba);
924			return;
925		}
926		lpfc_unblock_mgmt_io(phba);
927	} else if (phba->work_hs & HS_CRIT_TEMP) {
928		temperature = readl(phba->MBslimaddr + TEMPERATURE_OFFSET);
929		temp_event_data.event_type = FC_REG_TEMPERATURE_EVENT;
930		temp_event_data.event_code = LPFC_CRIT_TEMP;
931		temp_event_data.data = (uint32_t)temperature;
932
933		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
934				"0406 Adapter maximum temperature exceeded "
935				"(%ld), taking this port offline "
936				"Data: x%x x%x x%x\n",
937				temperature, phba->work_hs,
938				phba->work_status[0], phba->work_status[1]);
939
940		shost = lpfc_shost_from_vport(phba->pport);
941		fc_host_post_vendor_event(shost, fc_get_event_number(),
942					  sizeof(temp_event_data),
943					  (char *) &temp_event_data,
944					  SCSI_NL_VID_TYPE_PCI
945					  | PCI_VENDOR_ID_EMULEX);
946
947		spin_lock_irq(&phba->hbalock);
948		phba->over_temp_state = HBA_OVER_TEMP;
949		spin_unlock_irq(&phba->hbalock);
950		lpfc_offline_eratt(phba);
951
952	} else {
953		/* The if clause above forces this code path when the status
954		 * failure is a value other than FFER6. Do not call the offline
955		 * twice. This is the adapter hardware error path.
956		 */
957		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
958				"0457 Adapter Hardware Error "
959				"Data: x%x x%x x%x\n",
960				phba->work_hs,
961				phba->work_status[0], phba->work_status[1]);
962
963		event_data = FC_REG_DUMP_EVENT;
964		shost = lpfc_shost_from_vport(vport);
965		fc_host_post_vendor_event(shost, fc_get_event_number(),
966				sizeof(event_data), (char *) &event_data,
967				SCSI_NL_VID_TYPE_PCI | PCI_VENDOR_ID_EMULEX);
968
969		lpfc_offline_eratt(phba);
970	}
971	return;
972}
973
974/**
975 * lpfc_handle_latt: The HBA link event handler.
976 * @phba: pointer to lpfc hba data structure.
977 *
978 * This routine is invoked from the worker thread to handle a HBA host
979 * attention link event.
980 **/
981void
982lpfc_handle_latt(struct lpfc_hba *phba)
983{
984	struct lpfc_vport *vport = phba->pport;
985	struct lpfc_sli   *psli = &phba->sli;
986	LPFC_MBOXQ_t *pmb;
987	volatile uint32_t control;
988	struct lpfc_dmabuf *mp;
989	int rc = 0;
990
991	pmb = (LPFC_MBOXQ_t *)mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
992	if (!pmb) {
993		rc = 1;
994		goto lpfc_handle_latt_err_exit;
995	}
996
997	mp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
998	if (!mp) {
999		rc = 2;
1000		goto lpfc_handle_latt_free_pmb;
1001	}
1002
1003	mp->virt = lpfc_mbuf_alloc(phba, 0, &mp->phys);
1004	if (!mp->virt) {
1005		rc = 3;
1006		goto lpfc_handle_latt_free_mp;
1007	}
1008
1009	/* Cleanup any outstanding ELS commands */
1010	lpfc_els_flush_all_cmd(phba);
1011
1012	psli->slistat.link_event++;
1013	lpfc_read_la(phba, pmb, mp);
1014	pmb->mbox_cmpl = lpfc_mbx_cmpl_read_la;
1015	pmb->vport = vport;
1016	/* Block ELS IOCBs until we have processed this mbox command */
1017	phba->sli.ring[LPFC_ELS_RING].flag |= LPFC_STOP_IOCB_EVENT;
1018	rc = lpfc_sli_issue_mbox (phba, pmb, MBX_NOWAIT);
1019	if (rc == MBX_NOT_FINISHED) {
1020		rc = 4;
1021		goto lpfc_handle_latt_free_mbuf;
1022	}
1023
1024	/* Clear Link Attention in HA REG */
1025	spin_lock_irq(&phba->hbalock);
1026	writel(HA_LATT, phba->HAregaddr);
1027	readl(phba->HAregaddr); /* flush */
1028	spin_unlock_irq(&phba->hbalock);
1029
1030	return;
1031
1032lpfc_handle_latt_free_mbuf:
1033	phba->sli.ring[LPFC_ELS_RING].flag &= ~LPFC_STOP_IOCB_EVENT;
1034	lpfc_mbuf_free(phba, mp->virt, mp->phys);
1035lpfc_handle_latt_free_mp:
1036	kfree(mp);
1037lpfc_handle_latt_free_pmb:
1038	mempool_free(pmb, phba->mbox_mem_pool);
1039lpfc_handle_latt_err_exit:
1040	/* Enable Link attention interrupts */
1041	spin_lock_irq(&phba->hbalock);
1042	psli->sli_flag |= LPFC_PROCESS_LA;
1043	control = readl(phba->HCregaddr);
1044	control |= HC_LAINT_ENA;
1045	writel(control, phba->HCregaddr);
1046	readl(phba->HCregaddr); /* flush */
1047
1048	/* Clear Link Attention in HA REG */
1049	writel(HA_LATT, phba->HAregaddr);
1050	readl(phba->HAregaddr); /* flush */
1051	spin_unlock_irq(&phba->hbalock);
1052	lpfc_linkdown(phba);
1053	phba->link_state = LPFC_HBA_ERROR;
1054
1055	lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
1056		     "0300 LATT: Cannot issue READ_LA: Data:%d\n", rc);
1057
1058	return;
1059}
1060
1061/**
1062 * lpfc_parse_vpd: Parse VPD (Vital Product Data).
1063 * @phba: pointer to lpfc hba data structure.
1064 * @vpd: pointer to the vital product data.
1065 * @len: length of the vital product data in bytes.
1066 *
1067 * This routine parses the Vital Product Data (VPD). The VPD is treated as
1068 * an array of characters. In this routine, the ModelName, ProgramType, and
1069 * ModelDesc, etc. fields of the phba data structure will be populated.
1070 *
1071 * Return codes
1072 *   0 - pointer to the VPD passed in is NULL
1073 *   1 - success
1074 **/
1075static int
1076lpfc_parse_vpd(struct lpfc_hba *phba, uint8_t *vpd, int len)
1077{
1078	uint8_t lenlo, lenhi;
1079	int Length;
1080	int i, j;
1081	int finished = 0;
1082	int index = 0;
1083
1084	if (!vpd)
1085		return 0;
1086
1087	/* Vital Product */
1088	lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
1089			"0455 Vital Product Data: x%x x%x x%x x%x\n",
1090			(uint32_t) vpd[0], (uint32_t) vpd[1], (uint32_t) vpd[2],
1091			(uint32_t) vpd[3]);
1092	while (!finished && (index < (len - 4))) {
1093		switch (vpd[index]) {
1094		case 0x82:
1095		case 0x91:
1096			index += 1;
1097			lenlo = vpd[index];
1098			index += 1;
1099			lenhi = vpd[index];
1100			index += 1;
1101			i = ((((unsigned short)lenhi) << 8) + lenlo);
1102			index += i;
1103			break;
1104		case 0x90:
1105			index += 1;
1106			lenlo = vpd[index];
1107			index += 1;
1108			lenhi = vpd[index];
1109			index += 1;
1110			Length = ((((unsigned short)lenhi) << 8) + lenlo);
1111			if (Length > len - index)
1112				Length = len - index;
1113			while (Length > 0) {
1114			/* Look for Serial Number */
1115			if ((vpd[index] == 'S') && (vpd[index+1] == 'N')) {
1116				index += 2;
1117				i = vpd[index];
1118				index += 1;
1119				j = 0;
1120				Length -= (3+i);
1121				while(i--) {
1122					phba->SerialNumber[j++] = vpd[index++];
1123					if (j == 31)
1124						break;
1125				}
1126				phba->SerialNumber[j] = 0;
1127				continue;
1128			}
1129			else if ((vpd[index] == 'V') && (vpd[index+1] == '1')) {
1130				phba->vpd_flag |= VPD_MODEL_DESC;
1131				index += 2;
1132				i = vpd[index];
1133				index += 1;
1134				j = 0;
1135				Length -= (3+i);
1136				while(i--) {
1137					phba->ModelDesc[j++] = vpd[index++];
1138					if (j == 255)
1139						break;
1140				}
1141				phba->ModelDesc[j] = 0;
1142				continue;
1143			}
1144			else if ((vpd[index] == 'V') && (vpd[index+1] == '2')) {
1145				phba->vpd_flag |= VPD_MODEL_NAME;
1146				index += 2;
1147				i = vpd[index];
1148				index += 1;
1149				j = 0;
1150				Length -= (3+i);
1151				while(i--) {
1152					phba->ModelName[j++] = vpd[index++];
1153					if (j == 79)
1154						break;
1155				}
1156				phba->ModelName[j] = 0;
1157				continue;
1158			}
1159			else if ((vpd[index] == 'V') && (vpd[index+1] == '3')) {
1160				phba->vpd_flag |= VPD_PROGRAM_TYPE;
1161				index += 2;
1162				i = vpd[index];
1163				index += 1;
1164				j = 0;
1165				Length -= (3+i);
1166				while(i--) {
1167					phba->ProgramType[j++] = vpd[index++];
1168					if (j == 255)
1169						break;
1170				}
1171				phba->ProgramType[j] = 0;
1172				continue;
1173			}
1174			else if ((vpd[index] == 'V') && (vpd[index+1] == '4')) {
1175				phba->vpd_flag |= VPD_PORT;
1176				index += 2;
1177				i = vpd[index];
1178				index += 1;
1179				j = 0;
1180				Length -= (3+i);
1181				while(i--) {
1182				phba->Port[j++] = vpd[index++];
1183				if (j == 19)
1184					break;
1185				}
1186				phba->Port[j] = 0;
1187				continue;
1188			}
1189			else {
1190				index += 2;
1191				i = vpd[index];
1192				index += 1;
1193				index += i;
1194				Length -= (3 + i);
1195			}
1196		}
1197		finished = 0;
1198		break;
1199		case 0x78:
1200			finished = 1;
1201			break;
1202		default:
1203			index ++;
1204			break;
1205		}
1206	}
1207
1208	return(1);
1209}
1210
1211/**
1212 * lpfc_get_hba_model_desc: Retrieve HBA device model name and description.
1213 * @phba: pointer to lpfc hba data structure.
1214 * @mdp: pointer to the data structure to hold the derived model name.
1215 * @descp: pointer to the data structure to hold the derived description.
1216 *
1217 * This routine retrieves HBA's description based on its registered PCI device
1218 * ID. The @descp passed into this function points to an array of 256 chars. It
1219 * shall be returned with the model name, maximum speed, and the host bus type.
1220 * The @mdp passed into this function points to an array of 80 chars. When the
1221 * function returns, the @mdp will be filled with the model name.
1222 **/
1223static void
1224lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
1225{
1226	lpfc_vpd_t *vp;
1227	uint16_t dev_id = phba->pcidev->device;
1228	int max_speed;
1229	int GE = 0;
1230	struct {
1231		char * name;
1232		int    max_speed;
1233		char * bus;
1234	} m = {"<Unknown>", 0, ""};
1235
1236	if (mdp && mdp[0] != '\0'
1237		&& descp && descp[0] != '\0')
1238		return;
1239
1240	if (phba->lmt & LMT_10Gb)
1241		max_speed = 10;
1242	else if (phba->lmt & LMT_8Gb)
1243		max_speed = 8;
1244	else if (phba->lmt & LMT_4Gb)
1245		max_speed = 4;
1246	else if (phba->lmt & LMT_2Gb)
1247		max_speed = 2;
1248	else
1249		max_speed = 1;
1250
1251	vp = &phba->vpd;
1252
1253	switch (dev_id) {
1254	case PCI_DEVICE_ID_FIREFLY:
1255		m = (typeof(m)){"LP6000", max_speed, "PCI"};
1256		break;
1257	case PCI_DEVICE_ID_SUPERFLY:
1258		if (vp->rev.biuRev >= 1 && vp->rev.biuRev <= 3)
1259			m = (typeof(m)){"LP7000", max_speed,  "PCI"};
1260		else
1261			m = (typeof(m)){"LP7000E", max_speed, "PCI"};
1262		break;
1263	case PCI_DEVICE_ID_DRAGONFLY:
1264		m = (typeof(m)){"LP8000", max_speed, "PCI"};
1265		break;
1266	case PCI_DEVICE_ID_CENTAUR:
1267		if (FC_JEDEC_ID(vp->rev.biuRev) == CENTAUR_2G_JEDEC_ID)
1268			m = (typeof(m)){"LP9002", max_speed, "PCI"};
1269		else
1270			m = (typeof(m)){"LP9000", max_speed, "PCI"};
1271		break;
1272	case PCI_DEVICE_ID_RFLY:
1273		m = (typeof(m)){"LP952", max_speed, "PCI"};
1274		break;
1275	case PCI_DEVICE_ID_PEGASUS:
1276		m = (typeof(m)){"LP9802", max_speed, "PCI-X"};
1277		break;
1278	case PCI_DEVICE_ID_THOR:
1279		m = (typeof(m)){"LP10000", max_speed, "PCI-X"};
1280		break;
1281	case PCI_DEVICE_ID_VIPER:
1282		m = (typeof(m)){"LPX1000", max_speed,  "PCI-X"};
1283		break;
1284	case PCI_DEVICE_ID_PFLY:
1285		m = (typeof(m)){"LP982", max_speed, "PCI-X"};
1286		break;
1287	case PCI_DEVICE_ID_TFLY:
1288		m = (typeof(m)){"LP1050", max_speed, "PCI-X"};
1289		break;
1290	case PCI_DEVICE_ID_HELIOS:
1291		m = (typeof(m)){"LP11000", max_speed, "PCI-X2"};
1292		break;
1293	case PCI_DEVICE_ID_HELIOS_SCSP:
1294		m = (typeof(m)){"LP11000-SP", max_speed, "PCI-X2"};
1295		break;
1296	case PCI_DEVICE_ID_HELIOS_DCSP:
1297		m = (typeof(m)){"LP11002-SP", max_speed, "PCI-X2"};
1298		break;
1299	case PCI_DEVICE_ID_NEPTUNE:
1300		m = (typeof(m)){"LPe1000", max_speed, "PCIe"};
1301		break;
1302	case PCI_DEVICE_ID_NEPTUNE_SCSP:
1303		m = (typeof(m)){"LPe1000-SP", max_speed, "PCIe"};
1304		break;
1305	case PCI_DEVICE_ID_NEPTUNE_DCSP:
1306		m = (typeof(m)){"LPe1002-SP", max_speed, "PCIe"};
1307		break;
1308	case PCI_DEVICE_ID_BMID:
1309		m = (typeof(m)){"LP1150", max_speed, "PCI-X2"};
1310		break;
1311	case PCI_DEVICE_ID_BSMB:
1312		m = (typeof(m)){"LP111", max_speed, "PCI-X2"};
1313		break;
1314	case PCI_DEVICE_ID_ZEPHYR:
1315		m = (typeof(m)){"LPe11000", max_speed, "PCIe"};
1316		break;
1317	case PCI_DEVICE_ID_ZEPHYR_SCSP:
1318		m = (typeof(m)){"LPe11000", max_speed, "PCIe"};
1319		break;
1320	case PCI_DEVICE_ID_ZEPHYR_DCSP:
1321		m = (typeof(m)){"LPe11002-SP", max_speed, "PCIe"};
1322		break;
1323	case PCI_DEVICE_ID_ZMID:
1324		m = (typeof(m)){"LPe1150", max_speed, "PCIe"};
1325		break;
1326	case PCI_DEVICE_ID_ZSMB:
1327		m = (typeof(m)){"LPe111", max_speed, "PCIe"};
1328		break;
1329	case PCI_DEVICE_ID_LP101:
1330		m = (typeof(m)){"LP101", max_speed, "PCI-X"};
1331		break;
1332	case PCI_DEVICE_ID_LP10000S:
1333		m = (typeof(m)){"LP10000-S", max_speed, "PCI"};
1334		break;
1335	case PCI_DEVICE_ID_LP11000S:
1336		m = (typeof(m)){"LP11000-S", max_speed,
1337			"PCI-X2"};
1338		break;
1339	case PCI_DEVICE_ID_LPE11000S:
1340		m = (typeof(m)){"LPe11000-S", max_speed,
1341			"PCIe"};
1342		break;
1343	case PCI_DEVICE_ID_SAT:
1344		m = (typeof(m)){"LPe12000", max_speed, "PCIe"};
1345		break;
1346	case PCI_DEVICE_ID_SAT_MID:
1347		m = (typeof(m)){"LPe1250", max_speed, "PCIe"};
1348		break;
1349	case PCI_DEVICE_ID_SAT_SMB:
1350		m = (typeof(m)){"LPe121", max_speed, "PCIe"};
1351		break;
1352	case PCI_DEVICE_ID_SAT_DCSP:
1353		m = (typeof(m)){"LPe12002-SP", max_speed, "PCIe"};
1354		break;
1355	case PCI_DEVICE_ID_SAT_SCSP:
1356		m = (typeof(m)){"LPe12000-SP", max_speed, "PCIe"};
1357		break;
1358	case PCI_DEVICE_ID_SAT_S:
1359		m = (typeof(m)){"LPe12000-S", max_speed, "PCIe"};
1360		break;
1361	case PCI_DEVICE_ID_HORNET:
1362		m = (typeof(m)){"LP21000", max_speed, "PCIe"};
1363		GE = 1;
1364		break;
1365	case PCI_DEVICE_ID_PROTEUS_VF:
1366		m = (typeof(m)) {"LPev12000", max_speed, "PCIe IOV"};
1367		break;
1368	case PCI_DEVICE_ID_PROTEUS_PF:
1369		m = (typeof(m)) {"LPev12000", max_speed, "PCIe IOV"};
1370		break;
1371	case PCI_DEVICE_ID_PROTEUS_S:
1372		m = (typeof(m)) {"LPemv12002-S", max_speed, "PCIe IOV"};
1373		break;
1374	default:
1375		m = (typeof(m)){ NULL };
1376		break;
1377	}
1378
1379	if (mdp && mdp[0] == '\0')
1380		snprintf(mdp, 79,"%s", m.name);
1381	if (descp && descp[0] == '\0')
1382		snprintf(descp, 255,
1383			"Emulex %s %d%s %s %s",
1384			m.name, m.max_speed,
1385			(GE) ? "GE" : "Gb",
1386			m.bus,
1387			(GE) ? "FCoE Adapter" : "Fibre Channel Adapter");
1388}
1389
1390/**
1391 * lpfc_post_buffer: Post IOCB(s) with DMA buffer descriptor(s) to a IOCB ring.
1392 * @phba: pointer to lpfc hba data structure.
1393 * @pring: pointer to a IOCB ring.
1394 * @cnt: the number of IOCBs to be posted to the IOCB ring.
1395 *
1396 * This routine posts a given number of IOCBs with the associated DMA buffer
1397 * descriptors specified by the cnt argument to the given IOCB ring.
1398 *
1399 * Return codes
1400 *   The number of IOCBs NOT able to be posted to the IOCB ring.
1401 **/
1402int
1403lpfc_post_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, int cnt)
1404{
1405	IOCB_t *icmd;
1406	struct lpfc_iocbq *iocb;
1407	struct lpfc_dmabuf *mp1, *mp2;
1408
1409	cnt += pring->missbufcnt;
1410
1411	/* While there are buffers to post */
1412	while (cnt > 0) {
1413		/* Allocate buffer for  command iocb */
1414		iocb = lpfc_sli_get_iocbq(phba);
1415		if (iocb == NULL) {
1416			pring->missbufcnt = cnt;
1417			return cnt;
1418		}
1419		icmd = &iocb->iocb;
1420
1421		/* 2 buffers can be posted per command */
1422		/* Allocate buffer to post */
1423		mp1 = kmalloc(sizeof (struct lpfc_dmabuf), GFP_KERNEL);
1424		if (mp1)
1425		    mp1->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &mp1->phys);
1426		if (!mp1 || !mp1->virt) {
1427			kfree(mp1);
1428			lpfc_sli_release_iocbq(phba, iocb);
1429			pring->missbufcnt = cnt;
1430			return cnt;
1431		}
1432
1433		INIT_LIST_HEAD(&mp1->list);
1434		/* Allocate buffer to post */
1435		if (cnt > 1) {
1436			mp2 = kmalloc(sizeof (struct lpfc_dmabuf), GFP_KERNEL);
1437			if (mp2)
1438				mp2->virt = lpfc_mbuf_alloc(phba, MEM_PRI,
1439							    &mp2->phys);
1440			if (!mp2 || !mp2->virt) {
1441				kfree(mp2);
1442				lpfc_mbuf_free(phba, mp1->virt, mp1->phys);
1443				kfree(mp1);
1444				lpfc_sli_release_iocbq(phba, iocb);
1445				pring->missbufcnt = cnt;
1446				return cnt;
1447			}
1448
1449			INIT_LIST_HEAD(&mp2->list);
1450		} else {
1451			mp2 = NULL;
1452		}
1453
1454		icmd->un.cont64[0].addrHigh = putPaddrHigh(mp1->phys);
1455		icmd->un.cont64[0].addrLow = putPaddrLow(mp1->phys);
1456		icmd->un.cont64[0].tus.f.bdeSize = FCELSSIZE;
1457		icmd->ulpBdeCount = 1;
1458		cnt--;
1459		if (mp2) {
1460			icmd->un.cont64[1].addrHigh = putPaddrHigh(mp2->phys);
1461			icmd->un.cont64[1].addrLow = putPaddrLow(mp2->phys);
1462			icmd->un.cont64[1].tus.f.bdeSize = FCELSSIZE;
1463			cnt--;
1464			icmd->ulpBdeCount = 2;
1465		}
1466
1467		icmd->ulpCommand = CMD_QUE_RING_BUF64_CN;
1468		icmd->ulpLe = 1;
1469
1470		if (lpfc_sli_issue_iocb(phba, pring, iocb, 0) == IOCB_ERROR) {
1471			lpfc_mbuf_free(phba, mp1->virt, mp1->phys);
1472			kfree(mp1);
1473			cnt++;
1474			if (mp2) {
1475				lpfc_mbuf_free(phba, mp2->virt, mp2->phys);
1476				kfree(mp2);
1477				cnt++;
1478			}
1479			lpfc_sli_release_iocbq(phba, iocb);
1480			pring->missbufcnt = cnt;
1481			return cnt;
1482		}
1483		lpfc_sli_ringpostbuf_put(phba, pring, mp1);
1484		if (mp2)
1485			lpfc_sli_ringpostbuf_put(phba, pring, mp2);
1486	}
1487	pring->missbufcnt = 0;
1488	return 0;
1489}
1490
1491/**
1492 * lpfc_post_rcv_buf: Post the initial receive IOCB buffers to ELS ring.
1493 * @phba: pointer to lpfc hba data structure.
1494 *
1495 * This routine posts initial receive IOCB buffers to the ELS ring. The
1496 * current number of initial IOCB buffers specified by LPFC_BUF_RING0 is
1497 * set to 64 IOCBs.
1498 *
1499 * Return codes
1500 *   0 - success (currently always success)
1501 **/
1502static int
1503lpfc_post_rcv_buf(struct lpfc_hba *phba)
1504{
1505	struct lpfc_sli *psli = &phba->sli;
1506
1507	/* Ring 0, ELS / CT buffers */
1508	lpfc_post_buffer(phba, &psli->ring[LPFC_ELS_RING], LPFC_BUF_RING0);
1509	/* Ring 2 - FCP no buffers needed */
1510
1511	return 0;
1512}
1513
1514#define S(N,V) (((V)<<(N))|((V)>>(32-(N))))
1515
1516/**
1517 * lpfc_sha_init: Set up initial array of hash table entries.
1518 * @HashResultPointer: pointer to an array as hash table.
1519 *
1520 * This routine sets up the initial values to the array of hash table entries
1521 * for the LC HBAs.
1522 **/
1523static void
1524lpfc_sha_init(uint32_t * HashResultPointer)
1525{
1526	HashResultPointer[0] = 0x67452301;
1527	HashResultPointer[1] = 0xEFCDAB89;
1528	HashResultPointer[2] = 0x98BADCFE;
1529	HashResultPointer[3] = 0x10325476;
1530	HashResultPointer[4] = 0xC3D2E1F0;
1531}
1532
1533/**
1534 * lpfc_sha_iterate: Iterate initial hash table with the working hash table.
1535 * @HashResultPointer: pointer to an initial/result hash table.
1536 * @HashWorkingPointer: pointer to an working hash table.
1537 *
1538 * This routine iterates an initial hash table pointed by @HashResultPointer
1539 * with the values from the working hash table pointeed by @HashWorkingPointer.
1540 * The results are putting back to the initial hash table, returned through
1541 * the @HashResultPointer as the result hash table.
1542 **/
1543static void
1544lpfc_sha_iterate(uint32_t * HashResultPointer, uint32_t * HashWorkingPointer)
1545{
1546	int t;
1547	uint32_t TEMP;
1548	uint32_t A, B, C, D, E;
1549	t = 16;
1550	do {
1551		HashWorkingPointer[t] =
1552		    S(1,
1553		      HashWorkingPointer[t - 3] ^ HashWorkingPointer[t -
1554								     8] ^
1555		      HashWorkingPointer[t - 14] ^ HashWorkingPointer[t - 16]);
1556	} while (++t <= 79);
1557	t = 0;
1558	A = HashResultPointer[0];
1559	B = HashResultPointer[1];
1560	C = HashResultPointer[2];
1561	D = HashResultPointer[3];
1562	E = HashResultPointer[4];
1563
1564	do {
1565		if (t < 20) {
1566			TEMP = ((B & C) | ((~B) & D)) + 0x5A827999;
1567		} else if (t < 40) {
1568			TEMP = (B ^ C ^ D) + 0x6ED9EBA1;
1569		} else if (t < 60) {
1570			TEMP = ((B & C) | (B & D) | (C & D)) + 0x8F1BBCDC;
1571		} else {
1572			TEMP = (B ^ C ^ D) + 0xCA62C1D6;
1573		}
1574		TEMP += S(5, A) + E + HashWorkingPointer[t];
1575		E = D;
1576		D = C;
1577		C = S(30, B);
1578		B = A;
1579		A = TEMP;
1580	} while (++t <= 79);
1581
1582	HashResultPointer[0] += A;
1583	HashResultPointer[1] += B;
1584	HashResultPointer[2] += C;
1585	HashResultPointer[3] += D;
1586	HashResultPointer[4] += E;
1587
1588}
1589
1590/**
1591 * lpfc_challenge_key: Create challenge key based on WWPN of the HBA.
1592 * @RandomChallenge: pointer to the entry of host challenge random number array.
1593 * @HashWorking: pointer to the entry of the working hash array.
1594 *
1595 * This routine calculates the working hash array referred by @HashWorking
1596 * from the challenge random numbers associated with the host, referred by
1597 * @RandomChallenge. The result is put into the entry of the working hash
1598 * array and returned by reference through @HashWorking.
1599 **/
1600static void
1601lpfc_challenge_key(uint32_t * RandomChallenge, uint32_t * HashWorking)
1602{
1603	*HashWorking = (*RandomChallenge ^ *HashWorking);
1604}
1605
1606/**
1607 * lpfc_hba_init: Perform special handling for LC HBA initialization.
1608 * @phba: pointer to lpfc hba data structure.
1609 * @hbainit: pointer to an array of unsigned 32-bit integers.
1610 *
1611 * This routine performs the special handling for LC HBA initialization.
1612 **/
1613void
1614lpfc_hba_init(struct lpfc_hba *phba, uint32_t *hbainit)
1615{
1616	int t;
1617	uint32_t *HashWorking;
1618	uint32_t *pwwnn = (uint32_t *) phba->wwnn;
1619
1620	HashWorking = kcalloc(80, sizeof(uint32_t), GFP_KERNEL);
1621	if (!HashWorking)
1622		return;
1623
1624	HashWorking[0] = HashWorking[78] = *pwwnn++;
1625	HashWorking[1] = HashWorking[79] = *pwwnn;
1626
1627	for (t = 0; t < 7; t++)
1628		lpfc_challenge_key(phba->RandomData + t, HashWorking + t);
1629
1630	lpfc_sha_init(hbainit);
1631	lpfc_sha_iterate(hbainit, HashWorking);
1632	kfree(HashWorking);
1633}
1634
1635/**
1636 * lpfc_cleanup: Performs vport cleanups before deleting a vport.
1637 * @vport: pointer to a virtual N_Port data structure.
1638 *
1639 * This routine performs the necessary cleanups before deleting the @vport.
1640 * It invokes the discovery state machine to perform necessary state
1641 * transitions and to release the ndlps associated with the @vport. Note,
1642 * the physical port is treated as @vport 0.
1643 **/
1644void
1645lpfc_cleanup(struct lpfc_vport *vport)
1646{
1647	struct lpfc_hba   *phba = vport->phba;
1648	struct lpfc_nodelist *ndlp, *next_ndlp;
1649	int i = 0;
1650
1651	if (phba->link_state > LPFC_LINK_DOWN)
1652		lpfc_port_link_failure(vport);
1653
1654	list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) {
1655		if (!NLP_CHK_NODE_ACT(ndlp)) {
1656			ndlp = lpfc_enable_node(vport, ndlp,
1657						NLP_STE_UNUSED_NODE);
1658			if (!ndlp)
1659				continue;
1660			spin_lock_irq(&phba->ndlp_lock);
1661			NLP_SET_FREE_REQ(ndlp);
1662			spin_unlock_irq(&phba->ndlp_lock);
1663			/* Trigger the release of the ndlp memory */
1664			lpfc_nlp_put(ndlp);
1665			continue;
1666		}
1667		spin_lock_irq(&phba->ndlp_lock);
1668		if (NLP_CHK_FREE_REQ(ndlp)) {
1669			/* The ndlp should not be in memory free mode already */
1670			spin_unlock_irq(&phba->ndlp_lock);
1671			continue;
1672		} else
1673			/* Indicate request for freeing ndlp memory */
1674			NLP_SET_FREE_REQ(ndlp);
1675		spin_unlock_irq(&phba->ndlp_lock);
1676
1677		if (vport->port_type != LPFC_PHYSICAL_PORT &&
1678		    ndlp->nlp_DID == Fabric_DID) {
1679			/* Just free up ndlp with Fabric_DID for vports */
1680			lpfc_nlp_put(ndlp);
1681			continue;
1682		}
1683
1684		if (ndlp->nlp_type & NLP_FABRIC)
1685			lpfc_disc_state_machine(vport, ndlp, NULL,
1686					NLP_EVT_DEVICE_RECOVERY);
1687
1688		lpfc_disc_state_machine(vport, ndlp, NULL,
1689					     NLP_EVT_DEVICE_RM);
1690
1691	}
1692
1693	/* At this point, ALL ndlp's should be gone
1694	 * because of the previous NLP_EVT_DEVICE_RM.
1695	 * Lets wait for this to happen, if needed.
1696	 */
1697	while (!list_empty(&vport->fc_nodes)) {
1698
1699		if (i++ > 3000) {
1700			lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
1701				"0233 Nodelist not empty\n");
1702			list_for_each_entry_safe(ndlp, next_ndlp,
1703						&vport->fc_nodes, nlp_listp) {
1704				lpfc_printf_vlog(ndlp->vport, KERN_ERR,
1705						LOG_NODE,
1706						"0282 did:x%x ndlp:x%p "
1707						"usgmap:x%x refcnt:%d\n",
1708						ndlp->nlp_DID, (void *)ndlp,
1709						ndlp->nlp_usg_map,
1710						atomic_read(
1711							&ndlp->kref.refcount));
1712			}
1713			break;
1714		}
1715
1716		/* Wait for any activity on ndlps to settle */
1717		msleep(10);
1718	}
1719	return;
1720}
1721
1722/**
1723 * lpfc_stop_vport_timers: Stop all the timers associated with a vport.
1724 * @vport: pointer to a virtual N_Port data structure.
1725 *
1726 * This routine stops all the timers associated with a @vport. This function
1727 * is invoked before disabling or deleting a @vport. Note that the physical
1728 * port is treated as @vport 0.
1729 **/
1730void
1731lpfc_stop_vport_timers(struct lpfc_vport *vport)
1732{
1733	del_timer_sync(&vport->els_tmofunc);
1734	del_timer_sync(&vport->fc_fdmitmo);
1735	lpfc_can_disctmo(vport);
1736	return;
1737}
1738
1739/**
1740 * lpfc_stop_phba_timers: Stop all the timers associated with an HBA.
1741 * @phba: pointer to lpfc hba data structure.
1742 *
1743 * This routine stops all the timers associated with a HBA. This function is
1744 * invoked before either putting a HBA offline or unloading the driver.
1745 **/
1746static void
1747lpfc_stop_phba_timers(struct lpfc_hba *phba)
1748{
1749	del_timer_sync(&phba->fcp_poll_timer);
1750	lpfc_stop_vport_timers(phba->pport);
1751	del_timer_sync(&phba->sli.mbox_tmo);
1752	del_timer_sync(&phba->fabric_block_timer);
1753	phba->hb_outstanding = 0;
1754	del_timer_sync(&phba->hb_tmofunc);
1755	del_timer_sync(&phba->eratt_poll);
1756	return;
1757}
1758
1759/**
1760 * lpfc_block_mgmt_io: Mark a HBA's management interface as blocked.
1761 * @phba: pointer to lpfc hba data structure.
1762 *
1763 * This routine marks a HBA's management interface as blocked. Once the HBA's
1764 * management interface is marked as blocked, all the user space access to
1765 * the HBA, whether they are from sysfs interface or libdfc interface will
1766 * all be blocked. The HBA is set to block the management interface when the
1767 * driver prepares the HBA interface for online or offline.
1768 **/
1769static void
1770lpfc_block_mgmt_io(struct lpfc_hba * phba)
1771{
1772	unsigned long iflag;
1773
1774	spin_lock_irqsave(&phba->hbalock, iflag);
1775	phba->sli.sli_flag |= LPFC_BLOCK_MGMT_IO;
1776	spin_unlock_irqrestore(&phba->hbalock, iflag);
1777}
1778
1779/**
1780 * lpfc_online: Initialize and bring a HBA online.
1781 * @phba: pointer to lpfc hba data structure.
1782 *
1783 * This routine initializes the HBA and brings a HBA online. During this
1784 * process, the management interface is blocked to prevent user space access
1785 * to the HBA interfering with the driver initialization.
1786 *
1787 * Return codes
1788 *   0 - successful
1789 *   1 - failed
1790 **/
1791int
1792lpfc_online(struct lpfc_hba *phba)
1793{
1794	struct lpfc_vport *vport = phba->pport;
1795	struct lpfc_vport **vports;
1796	int i;
1797
1798	if (!phba)
1799		return 0;
1800
1801	if (!(vport->fc_flag & FC_OFFLINE_MODE))
1802		return 0;
1803
1804	lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
1805			"0458 Bring Adapter online\n");
1806
1807	lpfc_block_mgmt_io(phba);
1808
1809	if (!lpfc_sli_queue_setup(phba)) {
1810		lpfc_unblock_mgmt_io(phba);
1811		return 1;
1812	}
1813
1814	if (lpfc_sli_hba_setup(phba)) {	/* Initialize the HBA */
1815		lpfc_unblock_mgmt_io(phba);
1816		return 1;
1817	}
1818
1819	vports = lpfc_create_vport_work_array(phba);
1820	if (vports != NULL)
1821		for(i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) {
1822			struct Scsi_Host *shost;
1823			shost = lpfc_shost_from_vport(vports[i]);
1824			spin_lock_irq(shost->host_lock);
1825			vports[i]->fc_flag &= ~FC_OFFLINE_MODE;
1826			if (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED)
1827				vports[i]->fc_flag |= FC_VPORT_NEEDS_REG_VPI;
1828			spin_unlock_irq(shost->host_lock);
1829		}
1830		lpfc_destroy_vport_work_array(phba, vports);
1831
1832	lpfc_unblock_mgmt_io(phba);
1833	return 0;
1834}
1835
1836/**
1837 * lpfc_unblock_mgmt_io: Mark a HBA's management interface to be not blocked.
1838 * @phba: pointer to lpfc hba data structure.
1839 *
1840 * This routine marks a HBA's management interface as not blocked. Once the
1841 * HBA's management interface is marked as not blocked, all the user space
1842 * access to the HBA, whether they are from sysfs interface or libdfc
1843 * interface will be allowed. The HBA is set to block the management interface
1844 * when the driver prepares the HBA interface for online or offline and then
1845 * set to unblock the management interface afterwards.
1846 **/
1847void
1848lpfc_unblock_mgmt_io(struct lpfc_hba * phba)
1849{
1850	unsigned long iflag;
1851
1852	spin_lock_irqsave(&phba->hbalock, iflag);
1853	phba->sli.sli_flag &= ~LPFC_BLOCK_MGMT_IO;
1854	spin_unlock_irqrestore(&phba->hbalock, iflag);
1855}
1856
1857/**
1858 * lpfc_offline_prep: Prepare a HBA to be brought offline.
1859 * @phba: pointer to lpfc hba data structure.
1860 *
1861 * This routine is invoked to prepare a HBA to be brought offline. It performs
1862 * unregistration login to all the nodes on all vports and flushes the mailbox
1863 * queue to make it ready to be brought offline.
1864 **/
1865void
1866lpfc_offline_prep(struct lpfc_hba * phba)
1867{
1868	struct lpfc_vport *vport = phba->pport;
1869	struct lpfc_nodelist  *ndlp, *next_ndlp;
1870	struct lpfc_vport **vports;
1871	int i;
1872
1873	if (vport->fc_flag & FC_OFFLINE_MODE)
1874		return;
1875
1876	lpfc_block_mgmt_io(phba);
1877
1878	lpfc_linkdown(phba);
1879
1880	/* Issue an unreg_login to all nodes on all vports */
1881	vports = lpfc_create_vport_work_array(phba);
1882	if (vports != NULL) {
1883		for(i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) {
1884			struct Scsi_Host *shost;
1885
1886			if (vports[i]->load_flag & FC_UNLOADING)
1887				continue;
1888			shost =	lpfc_shost_from_vport(vports[i]);
1889			list_for_each_entry_safe(ndlp, next_ndlp,
1890						 &vports[i]->fc_nodes,
1891						 nlp_listp) {
1892				if (!NLP_CHK_NODE_ACT(ndlp))
1893					continue;
1894				if (ndlp->nlp_state == NLP_STE_UNUSED_NODE)
1895					continue;
1896				if (ndlp->nlp_type & NLP_FABRIC) {
1897					lpfc_disc_state_machine(vports[i], ndlp,
1898						NULL, NLP_EVT_DEVICE_RECOVERY);
1899					lpfc_disc_state_machine(vports[i], ndlp,
1900						NULL, NLP_EVT_DEVICE_RM);
1901				}
1902				spin_lock_irq(shost->host_lock);
1903				ndlp->nlp_flag &= ~NLP_NPR_ADISC;
1904				spin_unlock_irq(shost->host_lock);
1905				lpfc_unreg_rpi(vports[i], ndlp);
1906			}
1907		}
1908	}
1909	lpfc_destroy_vport_work_array(phba, vports);
1910
1911	lpfc_sli_flush_mbox_queue(phba);
1912}
1913
1914/**
1915 * lpfc_offline: Bring a HBA offline.
1916 * @phba: pointer to lpfc hba data structure.
1917 *
1918 * This routine actually brings a HBA offline. It stops all the timers
1919 * associated with the HBA, brings down the SLI layer, and eventually
1920 * marks the HBA as in offline state for the upper layer protocol.
1921 **/
1922void
1923lpfc_offline(struct lpfc_hba *phba)
1924{
1925	struct Scsi_Host  *shost;
1926	struct lpfc_vport **vports;
1927	int i;
1928
1929	if (phba->pport->fc_flag & FC_OFFLINE_MODE)
1930		return;
1931
1932	/* stop all timers associated with this hba */
1933	lpfc_stop_phba_timers(phba);
1934	vports = lpfc_create_vport_work_array(phba);
1935	if (vports != NULL)
1936		for(i = 0; i <= phba->max_vpi && vports[i] != NULL; i++)
1937			lpfc_stop_vport_timers(vports[i]);
1938	lpfc_destroy_vport_work_array(phba, vports);
1939	lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
1940			"0460 Bring Adapter offline\n");
1941	/* Bring down the SLI Layer and cleanup.  The HBA is offline
1942	   now.  */
1943	lpfc_sli_hba_down(phba);
1944	spin_lock_irq(&phba->hbalock);
1945	phba->work_ha = 0;
1946	spin_unlock_irq(&phba->hbalock);
1947	vports = lpfc_create_vport_work_array(phba);
1948	if (vports != NULL)
1949		for(i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) {
1950			shost = lpfc_shost_from_vport(vports[i]);
1951			spin_lock_irq(shost->host_lock);
1952			vports[i]->work_port_events = 0;
1953			vports[i]->fc_flag |= FC_OFFLINE_MODE;
1954			spin_unlock_irq(shost->host_lock);
1955		}
1956	lpfc_destroy_vport_work_array(phba, vports);
1957}
1958
1959/**
1960 * lpfc_scsi_free: Free all the SCSI buffers and IOCBs from driver lists.
1961 * @phba: pointer to lpfc hba data structure.
1962 *
1963 * This routine is to free all the SCSI buffers and IOCBs from the driver
1964 * list back to kernel. It is called from lpfc_pci_remove_one to free
1965 * the internal resources before the device is removed from the system.
1966 *
1967 * Return codes
1968 *   0 - successful (for now, it always returns 0)
1969 **/
1970static int
1971lpfc_scsi_free(struct lpfc_hba *phba)
1972{
1973	struct lpfc_scsi_buf *sb, *sb_next;
1974	struct lpfc_iocbq *io, *io_next;
1975
1976	spin_lock_irq(&phba->hbalock);
1977	/* Release all the lpfc_scsi_bufs maintained by this host. */
1978	list_for_each_entry_safe(sb, sb_next, &phba->lpfc_scsi_buf_list, list) {
1979		list_del(&sb->list);
1980		pci_pool_free(phba->lpfc_scsi_dma_buf_pool, sb->data,
1981			      sb->dma_handle);
1982		kfree(sb);
1983		phba->total_scsi_bufs--;
1984	}
1985
1986	/* Release all the lpfc_iocbq entries maintained by this host. */
1987	list_for_each_entry_safe(io, io_next, &phba->lpfc_iocb_list, list) {
1988		list_del(&io->list);
1989		kfree(io);
1990		phba->total_iocbq_bufs--;
1991	}
1992
1993	spin_unlock_irq(&phba->hbalock);
1994
1995	return 0;
1996}
1997
1998/**
1999 * lpfc_create_port: Create an FC port.
2000 * @phba: pointer to lpfc hba data structure.
2001 * @instance: a unique integer ID to this FC port.
2002 * @dev: pointer to the device data structure.
2003 *
2004 * This routine creates a FC port for the upper layer protocol. The FC port
2005 * can be created on top of either a physical port or a virtual port provided
2006 * by the HBA. This routine also allocates a SCSI host data structure (shost)
2007 * and associates the FC port created before adding the shost into the SCSI
2008 * layer.
2009 *
2010 * Return codes
2011 *   @vport - pointer to the virtual N_Port data structure.
2012 *   NULL - port create failed.
2013 **/
2014struct lpfc_vport *
2015lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev)
2016{
2017	struct lpfc_vport *vport;
2018	struct Scsi_Host  *shost;
2019	int error = 0;
2020
2021	if (dev != &phba->pcidev->dev)
2022		shost = scsi_host_alloc(&lpfc_vport_template,
2023					sizeof(struct lpfc_vport));
2024	else
2025		shost = scsi_host_alloc(&lpfc_template,
2026					sizeof(struct lpfc_vport));
2027	if (!shost)
2028		goto out;
2029
2030	vport = (struct lpfc_vport *) shost->hostdata;
2031	vport->phba = phba;
2032	vport->load_flag |= FC_LOADING;
2033	vport->fc_flag |= FC_VPORT_NEEDS_REG_VPI;
2034	vport->fc_rscn_flush = 0;
2035
2036	lpfc_get_vport_cfgparam(vport);
2037	shost->unique_id = instance;
2038	shost->max_id = LPFC_MAX_TARGET;
2039	shost->max_lun = vport->cfg_max_luns;
2040	shost->this_id = -1;
2041	shost->max_cmd_len = 16;
2042	/*
2043	 * Set initial can_queue value since 0 is no longer supported and
2044	 * scsi_add_host will fail. This will be adjusted later based on the
2045	 * max xri value determined in hba setup.
2046	 */
2047	shost->can_queue = phba->cfg_hba_queue_depth - 10;
2048	if (dev != &phba->pcidev->dev) {
2049		shost->transportt = lpfc_vport_transport_template;
2050		vport->port_type = LPFC_NPIV_PORT;
2051	} else {
2052		shost->transportt = lpfc_transport_template;
2053		vport->port_type = LPFC_PHYSICAL_PORT;
2054	}
2055
2056	/* Initialize all internally managed lists. */
2057	INIT_LIST_HEAD(&vport->fc_nodes);
2058	spin_lock_init(&vport->work_port_lock);
2059
2060	init_timer(&vport->fc_disctmo);
2061	vport->fc_disctmo.function = lpfc_disc_timeout;
2062	vport->fc_disctmo.data = (unsigned long)vport;
2063
2064	init_timer(&vport->fc_fdmitmo);
2065	vport->fc_fdmitmo.function = lpfc_fdmi_tmo;
2066	vport->fc_fdmitmo.data = (unsigned long)vport;
2067
2068	init_timer(&vport->els_tmofunc);
2069	vport->els_tmofunc.function = lpfc_els_timeout;
2070	vport->els_tmofunc.data = (unsigned long)vport;
2071
2072	error = scsi_add_host(shost, dev);
2073	if (error)
2074		goto out_put_shost;
2075
2076	spin_lock_irq(&phba->hbalock);
2077	list_add_tail(&vport->listentry, &phba->port_list);
2078	spin_unlock_irq(&phba->hbalock);
2079	return vport;
2080
2081out_put_shost:
2082	scsi_host_put(shost);
2083out:
2084	return NULL;
2085}
2086
2087/**
2088 * destroy_port: Destroy an FC port.
2089 * @vport: pointer to an lpfc virtual N_Port data structure.
2090 *
2091 * This routine destroys a FC port from the upper layer protocol. All the
2092 * resources associated with the port are released.
2093 **/
2094void
2095destroy_port(struct lpfc_vport *vport)
2096{
2097	struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
2098	struct lpfc_hba  *phba = vport->phba;
2099
2100	lpfc_debugfs_terminate(vport);
2101	fc_remove_host(shost);
2102	scsi_remove_host(shost);
2103
2104	spin_lock_irq(&phba->hbalock);
2105	list_del_init(&vport->listentry);
2106	spin_unlock_irq(&phba->hbalock);
2107
2108	lpfc_cleanup(vport);
2109	return;
2110}
2111
2112/**
2113 * lpfc_get_instance: Get a unique integer ID.
2114 *
2115 * This routine allocates a unique integer ID from lpfc_hba_index pool. It
2116 * uses the kernel idr facility to perform the task.
2117 *
2118 * Return codes:
2119 *   instance - a unique integer ID allocated as the new instance.
2120 *   -1 - lpfc get instance failed.
2121 **/
2122int
2123lpfc_get_instance(void)
2124{
2125	int instance = 0;
2126
2127	/* Assign an unused number */
2128	if (!idr_pre_get(&lpfc_hba_index, GFP_KERNEL))
2129		return -1;
2130	if (idr_get_new(&lpfc_hba_index, NULL, &instance))
2131		return -1;
2132	return instance;
2133}
2134
2135/**
2136 * lpfc_scan_finished: method for SCSI layer to detect whether scan is done.
2137 * @shost: pointer to SCSI host data structure.
2138 * @time: elapsed time of the scan in jiffies.
2139 *
2140 * This routine is called by the SCSI layer with a SCSI host to determine
2141 * whether the scan host is finished.
2142 *
2143 * Note: there is no scan_start function as adapter initialization will have
2144 * asynchronously kicked off the link initialization.
2145 *
2146 * Return codes
2147 *   0 - SCSI host scan is not over yet.
2148 *   1 - SCSI host scan is over.
2149 **/
2150int lpfc_scan_finished(struct Scsi_Host *shost, unsigned long time)
2151{
2152	struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
2153	struct lpfc_hba   *phba = vport->phba;
2154	int stat = 0;
2155
2156	spin_lock_irq(shost->host_lock);
2157
2158	if (vport->load_flag & FC_UNLOADING) {
2159		stat = 1;
2160		goto finished;
2161	}
2162	if (time >= 30 * HZ) {
2163		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2164				"0461 Scanning longer than 30 "
2165				"seconds.  Continuing initialization\n");
2166		stat = 1;
2167		goto finished;
2168	}
2169	if (time >= 15 * HZ && phba->link_state <= LPFC_LINK_DOWN) {
2170		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2171				"0465 Link down longer than 15 "
2172				"seconds.  Continuing initialization\n");
2173		stat = 1;
2174		goto finished;
2175	}
2176
2177	if (vport->port_state != LPFC_VPORT_READY)
2178		goto finished;
2179	if (vport->num_disc_nodes || vport->fc_prli_sent)
2180		goto finished;
2181	if (vport->fc_map_cnt == 0 && time < 2 * HZ)
2182		goto finished;
2183	if ((phba->sli.sli_flag & LPFC_SLI_MBOX_ACTIVE) != 0)
2184		goto finished;
2185
2186	stat = 1;
2187
2188finished:
2189	spin_unlock_irq(shost->host_lock);
2190	return stat;
2191}
2192
2193/**
2194 * lpfc_host_attrib_init: Initialize SCSI host attributes on a FC port.
2195 * @shost: pointer to SCSI host data structure.
2196 *
2197 * This routine initializes a given SCSI host attributes on a FC port. The
2198 * SCSI host can be either on top of a physical port or a virtual port.
2199 **/
2200void lpfc_host_attrib_init(struct Scsi_Host *shost)
2201{
2202	struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
2203	struct lpfc_hba   *phba = vport->phba;
2204	/*
2205	 * Set fixed host attributes.  Must done after lpfc_sli_hba_setup().
2206	 */
2207
2208	fc_host_node_name(shost) = wwn_to_u64(vport->fc_nodename.u.wwn);
2209	fc_host_port_name(shost) = wwn_to_u64(vport->fc_portname.u.wwn);
2210	fc_host_supported_classes(shost) = FC_COS_CLASS3;
2211
2212	memset(fc_host_supported_fc4s(shost), 0,
2213	       sizeof(fc_host_supported_fc4s(shost)));
2214	fc_host_supported_fc4s(shost)[2] = 1;
2215	fc_host_supported_fc4s(shost)[7] = 1;
2216
2217	lpfc_vport_symbolic_node_name(vport, fc_host_symbolic_name(shost),
2218				 sizeof fc_host_symbolic_name(shost));
2219
2220	fc_host_supported_speeds(shost) = 0;
2221	if (phba->lmt & LMT_10Gb)
2222		fc_host_supported_speeds(shost) |= FC_PORTSPEED_10GBIT;
2223	if (phba->lmt & LMT_8Gb)
2224		fc_host_supported_speeds(shost) |= FC_PORTSPEED_8GBIT;
2225	if (phba->lmt & LMT_4Gb)
2226		fc_host_supported_speeds(shost) |= FC_PORTSPEED_4GBIT;
2227	if (phba->lmt & LMT_2Gb)
2228		fc_host_supported_speeds(shost) |= FC_PORTSPEED_2GBIT;
2229	if (phba->lmt & LMT_1Gb)
2230		fc_host_supported_speeds(shost) |= FC_PORTSPEED_1GBIT;
2231
2232	fc_host_maxframe_size(shost) =
2233		(((uint32_t) vport->fc_sparam.cmn.bbRcvSizeMsb & 0x0F) << 8) |
2234		(uint32_t) vport->fc_sparam.cmn.bbRcvSizeLsb;
2235
2236	/* This value is also unchanging */
2237	memset(fc_host_active_fc4s(shost), 0,
2238	       sizeof(fc_host_active_fc4s(shost)));
2239	fc_host_active_fc4s(shost)[2] = 1;
2240	fc_host_active_fc4s(shost)[7] = 1;
2241
2242	fc_host_max_npiv_vports(shost) = phba->max_vpi;
2243	spin_lock_irq(shost->host_lock);
2244	vport->load_flag &= ~FC_LOADING;
2245	spin_unlock_irq(shost->host_lock);
2246}
2247
2248/**
2249 * lpfc_enable_msix: Enable MSI-X interrupt mode.
2250 * @phba: pointer to lpfc hba data structure.
2251 *
2252 * This routine is invoked to enable the MSI-X interrupt vectors. The kernel
2253 * function pci_enable_msix() is called to enable the MSI-X vectors. Note that
2254 * pci_enable_msix(), once invoked, enables either all or nothing, depending
2255 * on the current availability of PCI vector resources. The device driver is
2256 * responsible for calling the individual request_irq() to register each MSI-X
2257 * vector with a interrupt handler, which is done in this function. Note that
2258 * later when device is unloading, the driver should always call free_irq()
2259 * on all MSI-X vectors it has done request_irq() on before calling
2260 * pci_disable_msix(). Failure to do so results in a BUG_ON() and a device
2261 * will be left with MSI-X enabled and leaks its vectors.
2262 *
2263 * Return codes
2264 *   0 - sucessful
2265 *   other values - error
2266 **/
2267static int
2268lpfc_enable_msix(struct lpfc_hba *phba)
2269{
2270	int rc, i;
2271	LPFC_MBOXQ_t *pmb;
2272
2273	/* Set up MSI-X multi-message vectors */
2274	for (i = 0; i < LPFC_MSIX_VECTORS; i++)
2275		phba->msix_entries[i].entry = i;
2276
2277	/* Configure MSI-X capability structure */
2278	rc = pci_enable_msix(phba->pcidev, phba->msix_entries,
2279				ARRAY_SIZE(phba->msix_entries));
2280	if (rc) {
2281		lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2282				"0420 Enable MSI-X failed (%d), continuing "
2283				"with MSI\n", rc);
2284		goto msi_fail_out;
2285	} else
2286		for (i = 0; i < LPFC_MSIX_VECTORS; i++)
2287			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2288					"0477 MSI-X entry[%d]: vector=x%x "
2289					"message=%d\n", i,
2290					phba->msix_entries[i].vector,
2291					phba->msix_entries[i].entry);
2292	/*
2293	 * Assign MSI-X vectors to interrupt handlers
2294	 */
2295
2296	/* vector-0 is associated to slow-path handler */
2297	rc = request_irq(phba->msix_entries[0].vector, &lpfc_sp_intr_handler,
2298			 IRQF_SHARED, LPFC_SP_DRIVER_HANDLER_NAME, phba);
2299	if (rc) {
2300		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2301				"0421 MSI-X slow-path request_irq failed "
2302				"(%d), continuing with MSI\n", rc);
2303		goto msi_fail_out;
2304	}
2305
2306	/* vector-1 is associated to fast-path handler */
2307	rc = request_irq(phba->msix_entries[1].vector, &lpfc_fp_intr_handler,
2308			 IRQF_SHARED, LPFC_FP_DRIVER_HANDLER_NAME, phba);
2309
2310	if (rc) {
2311		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2312				"0429 MSI-X fast-path request_irq failed "
2313				"(%d), continuing with MSI\n", rc);
2314		goto irq_fail_out;
2315	}
2316
2317	/*
2318	 * Configure HBA MSI-X attention conditions to messages
2319	 */
2320	pmb = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
2321
2322	if (!pmb) {
2323		rc = -ENOMEM;
2324		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2325				"0474 Unable to allocate memory for issuing "
2326				"MBOX_CONFIG_MSI command\n");
2327		goto mem_fail_out;
2328	}
2329	rc = lpfc_config_msi(phba, pmb);
2330	if (rc)
2331		goto mbx_fail_out;
2332	rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
2333	if (rc != MBX_SUCCESS) {
2334		lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
2335				"0351 Config MSI mailbox command failed, "
2336				"mbxCmd x%x, mbxStatus x%x\n",
2337				pmb->mb.mbxCommand, pmb->mb.mbxStatus);
2338		goto mbx_fail_out;
2339	}
2340
2341	/* Free memory allocated for mailbox command */
2342	mempool_free(pmb, phba->mbox_mem_pool);
2343	return rc;
2344
2345mbx_fail_out:
2346	/* Free memory allocated for mailbox command */
2347	mempool_free(pmb, phba->mbox_mem_pool);
2348
2349mem_fail_out:
2350	/* free the irq already requested */
2351	free_irq(phba->msix_entries[1].vector, phba);
2352
2353irq_fail_out:
2354	/* free the irq already requested */
2355	free_irq(phba->msix_entries[0].vector, phba);
2356
2357msi_fail_out:
2358	/* Unconfigure MSI-X capability structure */
2359	pci_disable_msix(phba->pcidev);
2360	return rc;
2361}
2362
2363/**
2364 * lpfc_disable_msix: Disable MSI-X interrupt mode.
2365 * @phba: pointer to lpfc hba data structure.
2366 *
2367 * This routine is invoked to release the MSI-X vectors and then disable the
2368 * MSI-X interrupt mode.
2369 **/
2370static void
2371lpfc_disable_msix(struct lpfc_hba *phba)
2372{
2373	int i;
2374
2375	/* Free up MSI-X multi-message vectors */
2376	for (i = 0; i < LPFC_MSIX_VECTORS; i++)
2377		free_irq(phba->msix_entries[i].vector, phba);
2378	/* Disable MSI-X */
2379	pci_disable_msix(phba->pcidev);
2380}
2381
2382/**
2383 * lpfc_pci_probe_one: lpfc PCI probe func to register device to PCI subsystem.
2384 * @pdev: pointer to PCI device
2385 * @pid: pointer to PCI device identifier
2386 *
2387 * This routine is to be registered to the kernel's PCI subsystem. When an
2388 * Emulex HBA is presented in PCI bus, the kernel PCI subsystem looks at
2389 * PCI device-specific information of the device and driver to see if the
2390 * driver state that it can support this kind of device. If the match is
2391 * successful, the driver core invokes this routine. If this routine
2392 * determines it can claim the HBA, it does all the initialization that it
2393 * needs to do to handle the HBA properly.
2394 *
2395 * Return code
2396 *   0 - driver can claim the device
2397 *   negative value - driver can not claim the device
2398 **/
2399static int __devinit
2400lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
2401{
2402	struct lpfc_vport *vport = NULL;
2403	struct lpfc_hba   *phba;
2404	struct lpfc_sli   *psli;
2405	struct lpfc_iocbq *iocbq_entry = NULL, *iocbq_next = NULL;
2406	struct Scsi_Host  *shost = NULL;
2407	void *ptr;
2408	unsigned long bar0map_len, bar2map_len;
2409	int error = -ENODEV, retval;
2410	int  i, hbq_count;
2411	uint16_t iotag;
2412	int bars = pci_select_bars(pdev, IORESOURCE_MEM);
2413	struct lpfc_adapter_event_header adapter_event;
2414
2415	if (pci_enable_device_mem(pdev))
2416		goto out;
2417	if (pci_request_selected_regions(pdev, bars, LPFC_DRIVER_NAME))
2418		goto out_disable_device;
2419
2420	phba = kzalloc(sizeof (struct lpfc_hba), GFP_KERNEL);
2421	if (!phba)
2422		goto out_release_regions;
2423
2424	atomic_set(&phba->fast_event_count, 0);
2425	spin_lock_init(&phba->hbalock);
2426
2427	/* Initialize ndlp management spinlock */
2428	spin_lock_init(&phba->ndlp_lock);
2429
2430	phba->pcidev = pdev;
2431
2432	/* Assign an unused board number */
2433	if ((phba->brd_no = lpfc_get_instance()) < 0)
2434		goto out_free_phba;
2435
2436	INIT_LIST_HEAD(&phba->port_list);
2437	init_waitqueue_head(&phba->wait_4_mlo_m_q);
2438	/*
2439	 * Get all the module params for configuring this host and then
2440	 * establish the host.
2441	 */
2442	lpfc_get_cfgparam(phba);
2443	phba->max_vpi = LPFC_MAX_VPI;
2444
2445	/* Initialize timers used by driver */
2446	init_timer(&phba->hb_tmofunc);
2447	phba->hb_tmofunc.function = lpfc_hb_timeout;
2448	phba->hb_tmofunc.data = (unsigned long)phba;
2449
2450	psli = &phba->sli;
2451	init_timer(&psli->mbox_tmo);
2452	psli->mbox_tmo.function = lpfc_mbox_timeout;
2453	psli->mbox_tmo.data = (unsigned long) phba;
2454	init_timer(&phba->fcp_poll_timer);
2455	phba->fcp_poll_timer.function = lpfc_poll_timeout;
2456	phba->fcp_poll_timer.data = (unsigned long) phba;
2457	init_timer(&phba->fabric_block_timer);
2458	phba->fabric_block_timer.function = lpfc_fabric_block_timeout;
2459	phba->fabric_block_timer.data = (unsigned long) phba;
2460	init_timer(&phba->eratt_poll);
2461	phba->eratt_poll.function = lpfc_poll_eratt;
2462	phba->eratt_poll.data = (unsigned long) phba;
2463
2464	pci_set_master(pdev);
2465	pci_save_state(pdev);
2466	pci_try_set_mwi(pdev);
2467
2468	if (pci_set_dma_mask(phba->pcidev, DMA_64BIT_MASK) != 0)
2469		if (pci_set_dma_mask(phba->pcidev, DMA_32BIT_MASK) != 0)
2470			goto out_idr_remove;
2471
2472	/*
2473	 * Get the bus address of Bar0 and Bar2 and the number of bytes
2474	 * required by each mapping.
2475	 */
2476	phba->pci_bar0_map = pci_resource_start(phba->pcidev, 0);
2477	bar0map_len        = pci_resource_len(phba->pcidev, 0);
2478
2479	phba->pci_bar2_map = pci_resource_start(phba->pcidev, 2);
2480	bar2map_len        = pci_resource_len(phba->pcidev, 2);
2481
2482	/* Map HBA SLIM to a kernel virtual address. */
2483	phba->slim_memmap_p = ioremap(phba->pci_bar0_map, bar0map_len);
2484	if (!phba->slim_memmap_p) {
2485		error = -ENODEV;
2486		dev_printk(KERN_ERR, &pdev->dev,
2487			   "ioremap failed for SLIM memory.\n");
2488		goto out_idr_remove;
2489	}
2490
2491	/* Map HBA Control Registers to a kernel virtual address. */
2492	phba->ctrl_regs_memmap_p = ioremap(phba->pci_bar2_map, bar2map_len);
2493	if (!phba->ctrl_regs_memmap_p) {
2494		error = -ENODEV;
2495		dev_printk(KERN_ERR, &pdev->dev,
2496			   "ioremap failed for HBA control registers.\n");
2497		goto out_iounmap_slim;
2498	}
2499
2500	/* Allocate memory for SLI-2 structures */
2501	phba->slim2p.virt = dma_alloc_coherent(&phba->pcidev->dev,
2502					       SLI2_SLIM_SIZE,
2503					       &phba->slim2p.phys,
2504					       GFP_KERNEL);
2505	if (!phba->slim2p.virt)
2506		goto out_iounmap;
2507
2508	memset(phba->slim2p.virt, 0, SLI2_SLIM_SIZE);
2509	phba->mbox = phba->slim2p.virt + offsetof(struct lpfc_sli2_slim, mbx);
2510	phba->pcb = (phba->slim2p.virt + offsetof(struct lpfc_sli2_slim, pcb));
2511	phba->IOCBs = (phba->slim2p.virt +
2512		       offsetof(struct lpfc_sli2_slim, IOCBs));
2513
2514	phba->hbqslimp.virt = dma_alloc_coherent(&phba->pcidev->dev,
2515						 lpfc_sli_hbq_size(),
2516						 &phba->hbqslimp.phys,
2517						 GFP_KERNEL);
2518	if (!phba->hbqslimp.virt)
2519		goto out_free_slim;
2520
2521	hbq_count = lpfc_sli_hbq_count();
2522	ptr = phba->hbqslimp.virt;
2523	for (i = 0; i < hbq_count; ++i) {
2524		phba->hbqs[i].hbq_virt = ptr;
2525		INIT_LIST_HEAD(&phba->hbqs[i].hbq_buffer_list);
2526		ptr += (lpfc_hbq_defs[i]->entry_count *
2527			sizeof(struct lpfc_hbq_entry));
2528	}
2529	phba->hbqs[LPFC_ELS_HBQ].hbq_alloc_buffer = lpfc_els_hbq_alloc;
2530	phba->hbqs[LPFC_ELS_HBQ].hbq_free_buffer  = lpfc_els_hbq_free;
2531
2532	memset(phba->hbqslimp.virt, 0, lpfc_sli_hbq_size());
2533
2534	INIT_LIST_HEAD(&phba->hbqbuf_in_list);
2535
2536	/* Initialize the SLI Layer to run with lpfc HBAs. */
2537	lpfc_sli_setup(phba);
2538	lpfc_sli_queue_setup(phba);
2539
2540	retval = lpfc_mem_alloc(phba);
2541	if (retval) {
2542		error = retval;
2543		goto out_free_hbqslimp;
2544	}
2545
2546	/* Initialize and populate the iocb list per host.  */
2547	INIT_LIST_HEAD(&phba->lpfc_iocb_list);
2548	for (i = 0; i < LPFC_IOCB_LIST_CNT; i++) {
2549		iocbq_entry = kzalloc(sizeof(struct lpfc_iocbq), GFP_KERNEL);
2550		if (iocbq_entry == NULL) {
2551			printk(KERN_ERR "%s: only allocated %d iocbs of "
2552				"expected %d count. Unloading driver.\n",
2553				__func__, i, LPFC_IOCB_LIST_CNT);
2554			error = -ENOMEM;
2555			goto out_free_iocbq;
2556		}
2557
2558		iotag = lpfc_sli_next_iotag(phba, iocbq_entry);
2559		if (iotag == 0) {
2560			kfree (iocbq_entry);
2561			printk(KERN_ERR "%s: failed to allocate IOTAG. "
2562			       "Unloading driver.\n",
2563				__func__);
2564			error = -ENOMEM;
2565			goto out_free_iocbq;
2566		}
2567
2568		spin_lock_irq(&phba->hbalock);
2569		list_add(&iocbq_entry->list, &phba->lpfc_iocb_list);
2570		phba->total_iocbq_bufs++;
2571		spin_unlock_irq(&phba->hbalock);
2572	}
2573
2574	/* Initialize HBA structure */
2575	phba->fc_edtov = FF_DEF_EDTOV;
2576	phba->fc_ratov = FF_DEF_RATOV;
2577	phba->fc_altov = FF_DEF_ALTOV;
2578	phba->fc_arbtov = FF_DEF_ARBTOV;
2579
2580	INIT_LIST_HEAD(&phba->work_list);
2581	phba->work_ha_mask = (HA_ERATT | HA_MBATT | HA_LATT);
2582	phba->work_ha_mask |= (HA_RXMASK << (LPFC_ELS_RING * 4));
2583
2584	/* Initialize the wait queue head for the kernel thread */
2585	init_waitqueue_head(&phba->work_waitq);
2586
2587	/* Startup the kernel thread for this host adapter. */
2588	phba->worker_thread = kthread_run(lpfc_do_work, phba,
2589				       "lpfc_worker_%d", phba->brd_no);
2590	if (IS_ERR(phba->worker_thread)) {
2591		error = PTR_ERR(phba->worker_thread);
2592		goto out_free_iocbq;
2593	}
2594
2595	/* Initialize the list of scsi buffers used by driver for scsi IO. */
2596	spin_lock_init(&phba->scsi_buf_list_lock);
2597	INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list);
2598
2599	/* Initialize list of fabric iocbs */
2600	INIT_LIST_HEAD(&phba->fabric_iocb_list);
2601
2602	/* Initialize list to save ELS buffers */
2603	INIT_LIST_HEAD(&phba->elsbuf);
2604
2605	vport = lpfc_create_port(phba, phba->brd_no, &phba->pcidev->dev);
2606	if (!vport)
2607		goto out_kthread_stop;
2608
2609	shost = lpfc_shost_from_vport(vport);
2610	phba->pport = vport;
2611	lpfc_debugfs_initialize(vport);
2612
2613	pci_set_drvdata(pdev, shost);
2614	phba->intr_type = NONE;
2615
2616	phba->MBslimaddr = phba->slim_memmap_p;
2617	phba->HAregaddr = phba->ctrl_regs_memmap_p + HA_REG_OFFSET;
2618	phba->CAregaddr = phba->ctrl_regs_memmap_p + CA_REG_OFFSET;
2619	phba->HSregaddr = phba->ctrl_regs_memmap_p + HS_REG_OFFSET;
2620	phba->HCregaddr = phba->ctrl_regs_memmap_p + HC_REG_OFFSET;
2621
2622	/* Configure and enable interrupt */
2623	if (phba->cfg_use_msi == 2) {
2624		/* Need to issue conf_port mbox cmd before conf_msi mbox cmd */
2625		error = lpfc_sli_config_port(phba, 3);
2626		if (error)
2627			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2628				"0427 Firmware not capable of SLI 3 mode.\n");
2629		else {
2630			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2631				"0426 Firmware capable of SLI 3 mode.\n");
2632			/* Now, try to enable MSI-X interrupt mode */
2633			error = lpfc_enable_msix(phba);
2634			if (!error) {
2635				phba->intr_type = MSIX;
2636				lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2637						"0430 enable MSI-X mode.\n");
2638			}
2639		}
2640	}
2641
2642	/* Fallback to MSI if MSI-X initialization failed */
2643	if (phba->cfg_use_msi >= 1 && phba->intr_type == NONE) {
2644		retval = pci_enable_msi(phba->pcidev);
2645		if (!retval) {
2646			phba->intr_type = MSI;
2647			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2648					"0473 enable MSI mode.\n");
2649		} else
2650			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2651					"0452 enable IRQ mode.\n");
2652	}
2653
2654	/* MSI-X is the only case the doesn't need to call request_irq */
2655	if (phba->intr_type != MSIX) {
2656		retval = request_irq(phba->pcidev->irq, lpfc_intr_handler,
2657				     IRQF_SHARED, LPFC_DRIVER_NAME, phba);
2658		if (retval) {
2659			lpfc_printf_log(phba, KERN_ERR, LOG_INIT, "0451 Enable "
2660					"interrupt handler failed\n");
2661			error = retval;
2662			goto out_disable_msi;
2663		} else if (phba->intr_type != MSI)
2664			phba->intr_type = INTx;
2665	}
2666
2667	if (lpfc_alloc_sysfs_attr(vport)) {
2668		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2669				"1476 Failed to allocate sysfs attr\n");
2670		error = -ENOMEM;
2671		goto out_free_irq;
2672	}
2673
2674	if (lpfc_sli_hba_setup(phba)) {
2675		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2676				"1477 Failed to set up hba\n");
2677		error = -ENODEV;
2678		goto out_remove_device;
2679	}
2680
2681	/*
2682	 * hba setup may have changed the hba_queue_depth so we need to adjust
2683	 * the value of can_queue.
2684	 */
2685	shost->can_queue = phba->cfg_hba_queue_depth - 10;
2686
2687	lpfc_host_attrib_init(shost);
2688
2689	if (phba->cfg_poll & DISABLE_FCP_RING_INT) {
2690		spin_lock_irq(shost->host_lock);
2691		lpfc_poll_start_timer(phba);
2692		spin_unlock_irq(shost->host_lock);
2693	}
2694
2695	lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2696			"0428 Perform SCSI scan\n");
2697	/* Send board arrival event to upper layer */
2698	adapter_event.event_type = FC_REG_ADAPTER_EVENT;
2699	adapter_event.subcategory = LPFC_EVENT_ARRIVAL;
2700	fc_host_post_vendor_event(shost, fc_get_event_number(),
2701		sizeof(adapter_event),
2702		(char *) &adapter_event,
2703		LPFC_NL_VENDOR_ID);
2704
2705	scsi_scan_host(shost);
2706
2707	return 0;
2708
2709out_remove_device:
2710	lpfc_free_sysfs_attr(vport);
2711	spin_lock_irq(shost->host_lock);
2712	vport->load_flag |= FC_UNLOADING;
2713	spin_unlock_irq(shost->host_lock);
2714out_free_irq:
2715	lpfc_stop_phba_timers(phba);
2716	phba->pport->work_port_events = 0;
2717
2718	if (phba->intr_type == MSIX)
2719		lpfc_disable_msix(phba);
2720	else
2721		free_irq(phba->pcidev->irq, phba);
2722
2723out_disable_msi:
2724	if (phba->intr_type == MSI)
2725		pci_disable_msi(phba->pcidev);
2726	destroy_port(vport);
2727out_kthread_stop:
2728	kthread_stop(phba->worker_thread);
2729out_free_iocbq:
2730	list_for_each_entry_safe(iocbq_entry, iocbq_next,
2731						&phba->lpfc_iocb_list, list) {
2732		kfree(iocbq_entry);
2733		phba->total_iocbq_bufs--;
2734	}
2735	lpfc_mem_free(phba);
2736out_free_hbqslimp:
2737	dma_free_coherent(&pdev->dev, lpfc_sli_hbq_size(),
2738			  phba->hbqslimp.virt, phba->hbqslimp.phys);
2739out_free_slim:
2740	dma_free_coherent(&pdev->dev, SLI2_SLIM_SIZE,
2741			  phba->slim2p.virt, phba->slim2p.phys);
2742out_iounmap:
2743	iounmap(phba->ctrl_regs_memmap_p);
2744out_iounmap_slim:
2745	iounmap(phba->slim_memmap_p);
2746out_idr_remove:
2747	idr_remove(&lpfc_hba_index, phba->brd_no);
2748out_free_phba:
2749	kfree(phba);
2750out_release_regions:
2751	pci_release_selected_regions(pdev, bars);
2752out_disable_device:
2753	pci_disable_device(pdev);
2754out:
2755	pci_set_drvdata(pdev, NULL);
2756	if (shost)
2757		scsi_host_put(shost);
2758	return error;
2759}
2760
2761/**
2762 * lpfc_pci_remove_one: lpfc PCI func to unregister device from PCI subsystem.
2763 * @pdev: pointer to PCI device
2764 *
2765 * This routine is to be registered to the kernel's PCI subsystem. When an
2766 * Emulex HBA is removed from PCI bus, it performs all the necessary cleanup
2767 * for the HBA device to be removed from the PCI subsystem properly.
2768 **/
2769static void __devexit
2770lpfc_pci_remove_one(struct pci_dev *pdev)
2771{
2772	struct Scsi_Host  *shost = pci_get_drvdata(pdev);
2773	struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
2774	struct lpfc_vport **vports;
2775	struct lpfc_hba   *phba = vport->phba;
2776	int i;
2777	int bars = pci_select_bars(pdev, IORESOURCE_MEM);
2778
2779	spin_lock_irq(&phba->hbalock);
2780	vport->load_flag |= FC_UNLOADING;
2781	spin_unlock_irq(&phba->hbalock);
2782
2783	lpfc_free_sysfs_attr(vport);
2784
2785	kthread_stop(phba->worker_thread);
2786
2787	/* Release all the vports against this physical port */
2788	vports = lpfc_create_vport_work_array(phba);
2789	if (vports != NULL)
2790		for (i = 1; i <= phba->max_vpi && vports[i] != NULL; i++)
2791			fc_vport_terminate(vports[i]->fc_vport);
2792	lpfc_destroy_vport_work_array(phba, vports);
2793
2794	/* Remove FC host and then SCSI host with the physical port */
2795	fc_remove_host(shost);
2796	scsi_remove_host(shost);
2797	lpfc_cleanup(vport);
2798
2799	/*
2800	 * Bring down the SLI Layer. This step disable all interrupts,
2801	 * clears the rings, discards all mailbox commands, and resets
2802	 * the HBA.
2803	 */
2804	lpfc_sli_hba_down(phba);
2805	lpfc_sli_brdrestart(phba);
2806
2807	lpfc_stop_phba_timers(phba);
2808	spin_lock_irq(&phba->hbalock);
2809	list_del_init(&vport->listentry);
2810	spin_unlock_irq(&phba->hbalock);
2811
2812	lpfc_debugfs_terminate(vport);
2813
2814	if (phba->intr_type == MSIX)
2815		lpfc_disable_msix(phba);
2816	else {
2817		free_irq(phba->pcidev->irq, phba);
2818		if (phba->intr_type == MSI)
2819			pci_disable_msi(phba->pcidev);
2820	}
2821
2822	pci_set_drvdata(pdev, NULL);
2823	scsi_host_put(shost);
2824
2825	/*
2826	 * Call scsi_free before mem_free since scsi bufs are released to their
2827	 * corresponding pools here.
2828	 */
2829	lpfc_scsi_free(phba);
2830	lpfc_mem_free(phba);
2831
2832	dma_free_coherent(&pdev->dev, lpfc_sli_hbq_size(),
2833			  phba->hbqslimp.virt, phba->hbqslimp.phys);
2834
2835	/* Free resources associated with SLI2 interface */
2836	dma_free_coherent(&pdev->dev, SLI2_SLIM_SIZE,
2837			  phba->slim2p.virt, phba->slim2p.phys);
2838
2839	/* unmap adapter SLIM and Control Registers */
2840	iounmap(phba->ctrl_regs_memmap_p);
2841	iounmap(phba->slim_memmap_p);
2842
2843	idr_remove(&lpfc_hba_index, phba->brd_no);
2844
2845	kfree(phba);
2846
2847	pci_release_selected_regions(pdev, bars);
2848	pci_disable_device(pdev);
2849}
2850
2851/**
2852 * lpfc_pci_suspend_one: lpfc PCI func to suspend device for power management.
2853 * @pdev: pointer to PCI device
2854 * @msg: power management message
2855 *
2856 * This routine is to be registered to the kernel's PCI subsystem to support
2857 * system Power Management (PM). When PM invokes this method, it quiesces the
2858 * device by stopping the driver's worker thread for the device, turning off
2859 * device's interrupt and DMA, and bring the device offline. Note that as the
2860 * driver implements the minimum PM requirements to a power-aware driver's PM
2861 * support for suspend/resume -- all the possible PM messages (SUSPEND,
2862 * HIBERNATE, FREEZE) to the suspend() method call will be treated as SUSPEND
2863 * and the driver will fully reinitialize its device during resume() method
2864 * call, the driver will set device to PCI_D3hot state in PCI config space
2865 * instead of setting it according to the @msg provided by the PM.
2866 *
2867 * Return code
2868 *   0 - driver suspended the device
2869 *   Error otherwise
2870 **/
2871static int
2872lpfc_pci_suspend_one(struct pci_dev *pdev, pm_message_t msg)
2873{
2874	struct Scsi_Host *shost = pci_get_drvdata(pdev);
2875	struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
2876
2877	lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2878			"0473 PCI device Power Management suspend.\n");
2879
2880	/* Bring down the device */
2881	lpfc_offline_prep(phba);
2882	lpfc_offline(phba);
2883	kthread_stop(phba->worker_thread);
2884
2885	/* Disable interrupt from device */
2886	lpfc_disable_intr(phba);
2887
2888	/* Save device state to PCI config space */
2889	pci_save_state(pdev);
2890	pci_set_power_state(pdev, PCI_D3hot);
2891
2892	return 0;
2893}
2894
2895/**
2896 * lpfc_pci_resume_one: lpfc PCI func to resume device for power management.
2897 * @pdev: pointer to PCI device
2898 *
2899 * This routine is to be registered to the kernel's PCI subsystem to support
2900 * system Power Management (PM). When PM invokes this method, it restores
2901 * the device's PCI config space state and fully reinitializes the device
2902 * and brings it online. Note that as the driver implements the minimum PM
2903 * requirements to a power-aware driver's PM for suspend/resume -- all
2904 * the possible PM messages (SUSPEND, HIBERNATE, FREEZE) to the suspend()
2905 * method call will be treated as SUSPEND and the driver will fully
2906 * reinitialize its device during resume() method call, the device will be
2907 * set to PCI_D0 directly in PCI config space before restoring the state.
2908 *
2909 * Return code
2910 *   0 - driver suspended the device
2911 *   Error otherwise
2912 **/
2913static int
2914lpfc_pci_resume_one(struct pci_dev *pdev)
2915{
2916	struct Scsi_Host *shost = pci_get_drvdata(pdev);
2917	struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
2918	int error;
2919
2920	lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
2921			"0452 PCI device Power Management resume.\n");
2922
2923	/* Restore device state from PCI config space */
2924	pci_set_power_state(pdev, PCI_D0);
2925	pci_restore_state(pdev);
2926	if (pdev->is_busmaster)
2927		pci_set_master(pdev);
2928
2929	/* Startup the kernel thread for this host adapter. */
2930	phba->worker_thread = kthread_run(lpfc_do_work, phba,
2931					"lpfc_worker_%d", phba->brd_no);
2932	if (IS_ERR(phba->worker_thread)) {
2933		error = PTR_ERR(phba->worker_thread);
2934		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2935				"0434 PM resume failed to start worker "
2936				"thread: error=x%x.\n", error);
2937		return error;
2938	}
2939
2940	/* Enable interrupt from device */
2941	error = lpfc_enable_intr(phba);
2942	if (error) {
2943		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2944				"0430 PM resume Failed to enable interrupt: "
2945				"error=x%x.\n", error);
2946		return error;
2947	}
2948
2949	/* Restart HBA and bring it online */
2950	lpfc_sli_brdrestart(phba);
2951	lpfc_online(phba);
2952
2953	return 0;
2954}
2955
2956/**
2957 * lpfc_io_error_detected: Driver method for handling PCI I/O error detected.
2958 * @pdev: pointer to PCI device.
2959 * @state: the current PCI connection state.
2960 *
2961 * This routine is registered to the PCI subsystem for error handling. This
2962 * function is called by the PCI subsystem after a PCI bus error affecting
2963 * this device has been detected. When this function is invoked, it will
2964 * need to stop all the I/Os and interrupt(s) to the device. Once that is
2965 * done, it will return PCI_ERS_RESULT_NEED_RESET for the PCI subsystem to
2966 * perform proper recovery as desired.
2967 *
2968 * Return codes
2969 *   PCI_ERS_RESULT_NEED_RESET - need to reset before recovery
2970 *   PCI_ERS_RESULT_DISCONNECT - device could not be recovered
2971 **/
2972static pci_ers_result_t lpfc_io_error_detected(struct pci_dev *pdev,
2973				pci_channel_state_t state)
2974{
2975	struct Scsi_Host *shost = pci_get_drvdata(pdev);
2976	struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
2977	struct lpfc_sli *psli = &phba->sli;
2978	struct lpfc_sli_ring  *pring;
2979
2980	if (state == pci_channel_io_perm_failure) {
2981		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2982				"0472 PCI channel I/O permanent failure\n");
2983		/* Block all SCSI devices' I/Os on the host */
2984		lpfc_scsi_dev_block(phba);
2985		/* Clean up all driver's outstanding SCSI I/Os */
2986		lpfc_sli_flush_fcp_rings(phba);
2987		return PCI_ERS_RESULT_DISCONNECT;
2988	}
2989
2990	pci_disable_device(pdev);
2991	/*
2992	 * There may be I/Os dropped by the firmware.
2993	 * Error iocb (I/O) on txcmplq and let the SCSI layer
2994	 * retry it after re-establishing link.
2995	 */
2996	pring = &psli->ring[psli->fcp_ring];
2997	lpfc_sli_abort_iocb_ring(phba, pring);
2998
2999	if (phba->intr_type == MSIX)
3000		lpfc_disable_msix(phba);
3001	else {
3002		free_irq(phba->pcidev->irq, phba);
3003		if (phba->intr_type == MSI)
3004			pci_disable_msi(phba->pcidev);
3005	}
3006
3007	/* Request a slot reset. */
3008	return PCI_ERS_RESULT_NEED_RESET;
3009}
3010
3011/**
3012 * lpfc_io_slot_reset: Restart a PCI device from scratch.
3013 * @pdev: pointer to PCI device.
3014 *
3015 * This routine is registered to the PCI subsystem for error handling. This is
3016 * called after PCI bus has been reset to restart the PCI card from scratch,
3017 * as if from a cold-boot. During the PCI subsystem error recovery, after the
3018 * driver returns PCI_ERS_RESULT_NEED_RESET, the PCI subsystem will perform
3019 * proper error recovery and then call this routine before calling the .resume
3020 * method to recover the device. This function will initialize the HBA device,
3021 * enable the interrupt, but it will just put the HBA to offline state without
3022 * passing any I/O traffic.
3023 *
3024 * Return codes
3025 *   PCI_ERS_RESULT_RECOVERED - the device has been recovered
3026 *   PCI_ERS_RESULT_DISCONNECT - device could not be recovered
3027 */
3028static pci_ers_result_t lpfc_io_slot_reset(struct pci_dev *pdev)
3029{
3030	struct Scsi_Host *shost = pci_get_drvdata(pdev);
3031	struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
3032	struct lpfc_sli *psli = &phba->sli;
3033	int error, retval;
3034
3035	dev_printk(KERN_INFO, &pdev->dev, "recovering from a slot reset.\n");
3036	if (pci_enable_device_mem(pdev)) {
3037		printk(KERN_ERR "lpfc: Cannot re-enable "
3038			"PCI device after reset.\n");
3039		return PCI_ERS_RESULT_DISCONNECT;
3040	}
3041
3042	pci_restore_state(pdev);
3043	if (pdev->is_busmaster)
3044		pci_set_master(pdev);
3045
3046	spin_lock_irq(&phba->hbalock);
3047	psli->sli_flag &= ~LPFC_SLI2_ACTIVE;
3048	spin_unlock_irq(&phba->hbalock);
3049
3050	/* Enable configured interrupt method */
3051	phba->intr_type = NONE;
3052	if (phba->cfg_use_msi == 2) {
3053		/* Need to issue conf_port mbox cmd before conf_msi mbox cmd */
3054		error = lpfc_sli_config_port(phba, 3);
3055		if (error)
3056			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
3057				"0478 Firmware not capable of SLI 3 mode.\n");
3058		else {
3059			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
3060				"0479 Firmware capable of SLI 3 mode.\n");
3061			/* Now, try to enable MSI-X interrupt mode */
3062			error = lpfc_enable_msix(phba);
3063			if (!error) {
3064				phba->intr_type = MSIX;
3065				lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
3066						"0480 enable MSI-X mode.\n");
3067			}
3068		}
3069	}
3070
3071	/* Fallback to MSI if MSI-X initialization failed */
3072	if (phba->cfg_use_msi >= 1 && phba->intr_type == NONE) {
3073		retval = pci_enable_msi(phba->pcidev);
3074		if (!retval) {
3075			phba->intr_type = MSI;
3076			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
3077					"0481 enable MSI mode.\n");
3078		} else
3079			lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
3080					"0470 enable IRQ mode.\n");
3081	}
3082
3083	/* MSI-X is the only case the doesn't need to call request_irq */
3084	if (phba->intr_type != MSIX) {
3085		retval = request_irq(phba->pcidev->irq, lpfc_intr_handler,
3086				     IRQF_SHARED, LPFC_DRIVER_NAME, phba);
3087		if (retval) {
3088			lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
3089					"0471 Enable interrupt handler "
3090					"failed\n");
3091		} else if (phba->intr_type != MSI)
3092			phba->intr_type = INTx;
3093	}
3094
3095	/* Take device offline; this will perform cleanup */
3096	lpfc_offline(phba);
3097	lpfc_sli_brdrestart(phba);
3098
3099	return PCI_ERS_RESULT_RECOVERED;
3100}
3101
3102/**
3103 * lpfc_io_resume: Resume PCI I/O operation.
3104 * @pdev: pointer to PCI device
3105 *
3106 * This routine is registered to the PCI subsystem for error handling. It is
3107 * called when kernel error recovery tells the lpfc driver that it is ok to
3108 * resume normal PCI operation after PCI bus error recovery. After this call,
3109 * traffic can start to flow from this device again.
3110 */
3111static void lpfc_io_resume(struct pci_dev *pdev)
3112{
3113	struct Scsi_Host *shost = pci_get_drvdata(pdev);
3114	struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
3115
3116	lpfc_online(phba);
3117}
3118
3119static struct pci_device_id lpfc_id_table[] = {
3120	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_VIPER,
3121		PCI_ANY_ID, PCI_ANY_ID, },
3122	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_FIREFLY,
3123		PCI_ANY_ID, PCI_ANY_ID, },
3124	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_THOR,
3125		PCI_ANY_ID, PCI_ANY_ID, },
3126	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PEGASUS,
3127		PCI_ANY_ID, PCI_ANY_ID, },
3128	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_CENTAUR,
3129		PCI_ANY_ID, PCI_ANY_ID, },
3130	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_DRAGONFLY,
3131		PCI_ANY_ID, PCI_ANY_ID, },
3132	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SUPERFLY,
3133		PCI_ANY_ID, PCI_ANY_ID, },
3134	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_RFLY,
3135		PCI_ANY_ID, PCI_ANY_ID, },
3136	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PFLY,
3137		PCI_ANY_ID, PCI_ANY_ID, },
3138	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_NEPTUNE,
3139		PCI_ANY_ID, PCI_ANY_ID, },
3140	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_NEPTUNE_SCSP,
3141		PCI_ANY_ID, PCI_ANY_ID, },
3142	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_NEPTUNE_DCSP,
3143		PCI_ANY_ID, PCI_ANY_ID, },
3144	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS,
3145		PCI_ANY_ID, PCI_ANY_ID, },
3146	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS_SCSP,
3147		PCI_ANY_ID, PCI_ANY_ID, },
3148	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS_DCSP,
3149		PCI_ANY_ID, PCI_ANY_ID, },
3150	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BMID,
3151		PCI_ANY_ID, PCI_ANY_ID, },
3152	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BSMB,
3153		PCI_ANY_ID, PCI_ANY_ID, },
3154	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR,
3155		PCI_ANY_ID, PCI_ANY_ID, },
3156	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HORNET,
3157		PCI_ANY_ID, PCI_ANY_ID, },
3158	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_SCSP,
3159		PCI_ANY_ID, PCI_ANY_ID, },
3160	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_DCSP,
3161		PCI_ANY_ID, PCI_ANY_ID, },
3162	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZMID,
3163		PCI_ANY_ID, PCI_ANY_ID, },
3164	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZSMB,
3165		PCI_ANY_ID, PCI_ANY_ID, },
3166	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_TFLY,
3167		PCI_ANY_ID, PCI_ANY_ID, },
3168	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP101,
3169		PCI_ANY_ID, PCI_ANY_ID, },
3170	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP10000S,
3171		PCI_ANY_ID, PCI_ANY_ID, },
3172	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP11000S,
3173		PCI_ANY_ID, PCI_ANY_ID, },
3174	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LPE11000S,
3175		PCI_ANY_ID, PCI_ANY_ID, },
3176	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT,
3177		PCI_ANY_ID, PCI_ANY_ID, },
3178	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_MID,
3179		PCI_ANY_ID, PCI_ANY_ID, },
3180	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_SMB,
3181		PCI_ANY_ID, PCI_ANY_ID, },
3182	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_DCSP,
3183		PCI_ANY_ID, PCI_ANY_ID, },
3184	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_SCSP,
3185		PCI_ANY_ID, PCI_ANY_ID, },
3186	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_S,
3187		PCI_ANY_ID, PCI_ANY_ID, },
3188	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_VF,
3189		PCI_ANY_ID, PCI_ANY_ID, },
3190	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_PF,
3191		PCI_ANY_ID, PCI_ANY_ID, },
3192	{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_S,
3193		PCI_ANY_ID, PCI_ANY_ID, },
3194	{ 0 }
3195};
3196
3197MODULE_DEVICE_TABLE(pci, lpfc_id_table);
3198
3199static struct pci_error_handlers lpfc_err_handler = {
3200	.error_detected = lpfc_io_error_detected,
3201	.slot_reset = lpfc_io_slot_reset,
3202	.resume = lpfc_io_resume,
3203};
3204
3205static struct pci_driver lpfc_driver = {
3206	.name		= LPFC_DRIVER_NAME,
3207	.id_table	= lpfc_id_table,
3208	.probe		= lpfc_pci_probe_one,
3209	.remove		= __devexit_p(lpfc_pci_remove_one),
3210	.suspend        = lpfc_pci_suspend_one,
3211	.resume         = lpfc_pci_resume_one,
3212	.err_handler    = &lpfc_err_handler,
3213};
3214
3215/**
3216 * lpfc_init: lpfc module initialization routine.
3217 *
3218 * This routine is to be invoked when the lpfc module is loaded into the
3219 * kernel. The special kernel macro module_init() is used to indicate the
3220 * role of this routine to the kernel as lpfc module entry point.
3221 *
3222 * Return codes
3223 *   0 - successful
3224 *   -ENOMEM - FC attach transport failed
3225 *   all others - failed
3226 */
3227static int __init
3228lpfc_init(void)
3229{
3230	int error = 0;
3231
3232	printk(LPFC_MODULE_DESC "\n");
3233	printk(LPFC_COPYRIGHT "\n");
3234
3235	if (lpfc_enable_npiv) {
3236		lpfc_transport_functions.vport_create = lpfc_vport_create;
3237		lpfc_transport_functions.vport_delete = lpfc_vport_delete;
3238	}
3239	lpfc_transport_template =
3240				fc_attach_transport(&lpfc_transport_functions);
3241	if (lpfc_transport_template == NULL)
3242		return -ENOMEM;
3243	if (lpfc_enable_npiv) {
3244		lpfc_vport_transport_template =
3245			fc_attach_transport(&lpfc_vport_transport_functions);
3246		if (lpfc_vport_transport_template == NULL) {
3247			fc_release_transport(lpfc_transport_template);
3248			return -ENOMEM;
3249		}
3250	}
3251	error = pci_register_driver(&lpfc_driver);
3252	if (error) {
3253		fc_release_transport(lpfc_transport_template);
3254		if (lpfc_enable_npiv)
3255			fc_release_transport(lpfc_vport_transport_template);
3256	}
3257
3258	return error;
3259}
3260
3261/**
3262 * lpfc_exit: lpfc module removal routine.
3263 *
3264 * This routine is invoked when the lpfc module is removed from the kernel.
3265 * The special kernel macro module_exit() is used to indicate the role of
3266 * this routine to the kernel as lpfc module exit point.
3267 */
3268static void __exit
3269lpfc_exit(void)
3270{
3271	pci_unregister_driver(&lpfc_driver);
3272	fc_release_transport(lpfc_transport_template);
3273	if (lpfc_enable_npiv)
3274		fc_release_transport(lpfc_vport_transport_template);
3275}
3276
3277module_init(lpfc_init);
3278module_exit(lpfc_exit);
3279MODULE_LICENSE("GPL");
3280MODULE_DESCRIPTION(LPFC_MODULE_DESC);
3281MODULE_AUTHOR("Emulex Corporation - tech.support@emulex.com");
3282MODULE_VERSION("0:" LPFC_DRIVER_VERSION);
3283