[SCSI] st: fix test of value range in st_set_options()
[deliverable/linux.git] / drivers / scsi / lpfc / lpfc_init.c
CommitLineData
dea3101e 1/*******************************************************************
2 * This file is part of the Emulex Linux Device Driver for *
c44ce173 3 * Fibre Channel Host Bus Adapters. *
d8e93df1 4 * Copyright (C) 2004-2009 Emulex. All rights reserved. *
c44ce173 5 * EMULEX and SLI are trademarks of Emulex. *
dea3101e 6 * www.emulex.com *
c44ce173 7 * Portions Copyright (C) 2004-2005 Christoph Hellwig *
dea3101e 8 * *
9 * This program is free software; you can redistribute it and/or *
c44ce173
JSEC
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. *
dea3101e 20 *******************************************************************/
21
dea3101e 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>
92d7f7b0 30#include <linux/ctype.h>
0d878419 31#include <linux/aer.h>
dea3101e 32
91886523 33#include <scsi/scsi.h>
dea3101e 34#include <scsi/scsi_device.h>
35#include <scsi/scsi_host.h>
36#include <scsi/scsi_transport_fc.h>
37
da0436e9 38#include "lpfc_hw4.h"
dea3101e 39#include "lpfc_hw.h"
40#include "lpfc_sli.h"
da0436e9 41#include "lpfc_sli4.h"
ea2151b4 42#include "lpfc_nl.h"
dea3101e 43#include "lpfc_disc.h"
44#include "lpfc_scsi.h"
45#include "lpfc.h"
46#include "lpfc_logmsg.h"
47#include "lpfc_crtn.h"
92d7f7b0 48#include "lpfc_vport.h"
dea3101e 49#include "lpfc_version.h"
50
81301a9b
JS
51char *_dump_buf_data;
52unsigned long _dump_buf_data_order;
53char *_dump_buf_dif;
54unsigned long _dump_buf_dif_order;
55spinlock_t _dump_buf_lock;
56
dea3101e 57static void lpfc_get_hba_model_desc(struct lpfc_hba *, uint8_t *, uint8_t *);
58static int lpfc_post_rcv_buf(struct lpfc_hba *);
da0436e9
JS
59static int lpfc_sli4_queue_create(struct lpfc_hba *);
60static void lpfc_sli4_queue_destroy(struct lpfc_hba *);
61static int lpfc_create_bootstrap_mbox(struct lpfc_hba *);
62static int lpfc_setup_endian_order(struct lpfc_hba *);
63static int lpfc_sli4_read_config(struct lpfc_hba *);
64static void lpfc_destroy_bootstrap_mbox(struct lpfc_hba *);
65static void lpfc_free_sgl_list(struct lpfc_hba *);
66static int lpfc_init_sgl_list(struct lpfc_hba *);
67static int lpfc_init_active_sgl_array(struct lpfc_hba *);
68static void lpfc_free_active_sgl(struct lpfc_hba *);
69static int lpfc_hba_down_post_s3(struct lpfc_hba *phba);
70static int lpfc_hba_down_post_s4(struct lpfc_hba *phba);
71static int lpfc_sli4_cq_event_pool_create(struct lpfc_hba *);
72static void lpfc_sli4_cq_event_pool_destroy(struct lpfc_hba *);
73static void lpfc_sli4_cq_event_release_all(struct lpfc_hba *);
dea3101e 74
75static struct scsi_transport_template *lpfc_transport_template = NULL;
92d7f7b0 76static struct scsi_transport_template *lpfc_vport_transport_template = NULL;
dea3101e 77static DEFINE_IDR(lpfc_hba_index);
78
e59058c4 79/**
3621a710 80 * lpfc_config_port_prep - Perform lpfc initialization prior to config port
e59058c4
JS
81 * @phba: pointer to lpfc hba data structure.
82 *
83 * This routine will do LPFC initialization prior to issuing the CONFIG_PORT
84 * mailbox command. It retrieves the revision information from the HBA and
85 * collects the Vital Product Data (VPD) about the HBA for preparing the
86 * configuration of the HBA.
87 *
88 * Return codes:
89 * 0 - success.
90 * -ERESTART - requests the SLI layer to reset the HBA and try again.
91 * Any other value - indicates an error.
92 **/
dea3101e 93int
2e0fef85 94lpfc_config_port_prep(struct lpfc_hba *phba)
dea3101e 95{
96 lpfc_vpd_t *vp = &phba->vpd;
97 int i = 0, rc;
98 LPFC_MBOXQ_t *pmb;
99 MAILBOX_t *mb;
100 char *lpfc_vpd_data = NULL;
101 uint16_t offset = 0;
102 static char licensed[56] =
103 "key unlock for use with gnu public licensed code only\0";
65a29c16 104 static int init_key = 1;
dea3101e 105
106 pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
107 if (!pmb) {
2e0fef85 108 phba->link_state = LPFC_HBA_ERROR;
dea3101e 109 return -ENOMEM;
110 }
111
04c68496 112 mb = &pmb->u.mb;
2e0fef85 113 phba->link_state = LPFC_INIT_MBX_CMDS;
dea3101e 114
115 if (lpfc_is_LC_HBA(phba->pcidev->device)) {
65a29c16
JS
116 if (init_key) {
117 uint32_t *ptext = (uint32_t *) licensed;
dea3101e 118
65a29c16
JS
119 for (i = 0; i < 56; i += sizeof (uint32_t), ptext++)
120 *ptext = cpu_to_be32(*ptext);
121 init_key = 0;
122 }
dea3101e 123
124 lpfc_read_nv(phba, pmb);
125 memset((char*)mb->un.varRDnvp.rsvd3, 0,
126 sizeof (mb->un.varRDnvp.rsvd3));
127 memcpy((char*)mb->un.varRDnvp.rsvd3, licensed,
128 sizeof (licensed));
129
130 rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
131
132 if (rc != MBX_SUCCESS) {
ed957684 133 lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
e8b62011 134 "0324 Config Port initialization "
dea3101e 135 "error, mbxCmd x%x READ_NVPARM, "
136 "mbxStatus x%x\n",
dea3101e 137 mb->mbxCommand, mb->mbxStatus);
138 mempool_free(pmb, phba->mbox_mem_pool);
139 return -ERESTART;
140 }
141 memcpy(phba->wwnn, (char *)mb->un.varRDnvp.nodename,
2e0fef85
JS
142 sizeof(phba->wwnn));
143 memcpy(phba->wwpn, (char *)mb->un.varRDnvp.portname,
144 sizeof(phba->wwpn));
dea3101e 145 }
146
92d7f7b0
JS
147 phba->sli3_options = 0x0;
148
dea3101e 149 /* Setup and issue mailbox READ REV command */
150 lpfc_read_rev(phba, pmb);
151 rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
152 if (rc != MBX_SUCCESS) {
ed957684 153 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
e8b62011 154 "0439 Adapter failed to init, mbxCmd x%x "
dea3101e 155 "READ_REV, mbxStatus x%x\n",
dea3101e 156 mb->mbxCommand, mb->mbxStatus);
157 mempool_free( pmb, phba->mbox_mem_pool);
158 return -ERESTART;
159 }
160
92d7f7b0 161
1de933f3
JSEC
162 /*
163 * The value of rr must be 1 since the driver set the cv field to 1.
164 * This setting requires the FW to set all revision fields.
dea3101e 165 */
1de933f3 166 if (mb->un.varRdRev.rr == 0) {
dea3101e 167 vp->rev.rBit = 0;
1de933f3 168 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
e8b62011
JS
169 "0440 Adapter failed to init, READ_REV has "
170 "missing revision information.\n");
dea3101e 171 mempool_free(pmb, phba->mbox_mem_pool);
172 return -ERESTART;
dea3101e 173 }
174
495a714c
JS
175 if (phba->sli_rev == 3 && !mb->un.varRdRev.v3rsp) {
176 mempool_free(pmb, phba->mbox_mem_pool);
ed957684 177 return -EINVAL;
495a714c 178 }
ed957684 179
dea3101e 180 /* Save information as VPD data */
1de933f3 181 vp->rev.rBit = 1;
92d7f7b0 182 memcpy(&vp->sli3Feat, &mb->un.varRdRev.sli3Feat, sizeof(uint32_t));
1de933f3
JSEC
183 vp->rev.sli1FwRev = mb->un.varRdRev.sli1FwRev;
184 memcpy(vp->rev.sli1FwName, (char*) mb->un.varRdRev.sli1FwName, 16);
185 vp->rev.sli2FwRev = mb->un.varRdRev.sli2FwRev;
186 memcpy(vp->rev.sli2FwName, (char *) mb->un.varRdRev.sli2FwName, 16);
dea3101e 187 vp->rev.biuRev = mb->un.varRdRev.biuRev;
188 vp->rev.smRev = mb->un.varRdRev.smRev;
189 vp->rev.smFwRev = mb->un.varRdRev.un.smFwRev;
190 vp->rev.endecRev = mb->un.varRdRev.endecRev;
191 vp->rev.fcphHigh = mb->un.varRdRev.fcphHigh;
192 vp->rev.fcphLow = mb->un.varRdRev.fcphLow;
193 vp->rev.feaLevelHigh = mb->un.varRdRev.feaLevelHigh;
194 vp->rev.feaLevelLow = mb->un.varRdRev.feaLevelLow;
195 vp->rev.postKernRev = mb->un.varRdRev.postKernRev;
196 vp->rev.opFwRev = mb->un.varRdRev.opFwRev;
197
92d7f7b0
JS
198 /* If the sli feature level is less then 9, we must
199 * tear down all RPIs and VPIs on link down if NPIV
200 * is enabled.
201 */
202 if (vp->rev.feaLevelHigh < 9)
203 phba->sli3_options |= LPFC_SLI3_VPORT_TEARDOWN;
204
dea3101e 205 if (lpfc_is_LC_HBA(phba->pcidev->device))
206 memcpy(phba->RandomData, (char *)&mb->un.varWords[24],
207 sizeof (phba->RandomData));
208
dea3101e 209 /* Get adapter VPD information */
dea3101e 210 lpfc_vpd_data = kmalloc(DMP_VPD_SIZE, GFP_KERNEL);
211 if (!lpfc_vpd_data)
d7c255b2 212 goto out_free_mbox;
dea3101e 213
214 do {
a0c87cbd 215 lpfc_dump_mem(phba, pmb, offset, DMP_REGION_VPD);
dea3101e 216 rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
217
218 if (rc != MBX_SUCCESS) {
219 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
e8b62011 220 "0441 VPD not present on adapter, "
dea3101e 221 "mbxCmd x%x DUMP VPD, mbxStatus x%x\n",
dea3101e 222 mb->mbxCommand, mb->mbxStatus);
74b72a59 223 mb->un.varDmp.word_cnt = 0;
dea3101e 224 }
04c68496
JS
225 /* dump mem may return a zero when finished or we got a
226 * mailbox error, either way we are done.
227 */
228 if (mb->un.varDmp.word_cnt == 0)
229 break;
74b72a59
JW
230 if (mb->un.varDmp.word_cnt > DMP_VPD_SIZE - offset)
231 mb->un.varDmp.word_cnt = DMP_VPD_SIZE - offset;
d7c255b2
JS
232 lpfc_sli_pcimem_bcopy(((uint8_t *)mb) + DMP_RSP_OFFSET,
233 lpfc_vpd_data + offset,
92d7f7b0 234 mb->un.varDmp.word_cnt);
dea3101e 235 offset += mb->un.varDmp.word_cnt;
74b72a59
JW
236 } while (mb->un.varDmp.word_cnt && offset < DMP_VPD_SIZE);
237 lpfc_parse_vpd(phba, lpfc_vpd_data, offset);
dea3101e 238
239 kfree(lpfc_vpd_data);
dea3101e 240out_free_mbox:
241 mempool_free(pmb, phba->mbox_mem_pool);
242 return 0;
243}
244
e59058c4 245/**
3621a710 246 * lpfc_config_async_cmpl - Completion handler for config async event mbox cmd
e59058c4
JS
247 * @phba: pointer to lpfc hba data structure.
248 * @pmboxq: pointer to the driver internal queue element for mailbox command.
249 *
250 * This is the completion handler for driver's configuring asynchronous event
251 * mailbox command to the device. If the mailbox command returns successfully,
252 * it will set internal async event support flag to 1; otherwise, it will
253 * set internal async event support flag to 0.
254 **/
57127f15
JS
255static void
256lpfc_config_async_cmpl(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq)
257{
04c68496 258 if (pmboxq->u.mb.mbxStatus == MBX_SUCCESS)
57127f15
JS
259 phba->temp_sensor_support = 1;
260 else
261 phba->temp_sensor_support = 0;
262 mempool_free(pmboxq, phba->mbox_mem_pool);
263 return;
264}
265
97207482 266/**
3621a710 267 * lpfc_dump_wakeup_param_cmpl - dump memory mailbox command completion handler
97207482
JS
268 * @phba: pointer to lpfc hba data structure.
269 * @pmboxq: pointer to the driver internal queue element for mailbox command.
270 *
271 * This is the completion handler for dump mailbox command for getting
272 * wake up parameters. When this command complete, the response contain
273 * Option rom version of the HBA. This function translate the version number
274 * into a human readable string and store it in OptionROMVersion.
275 **/
276static void
277lpfc_dump_wakeup_param_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
278{
279 struct prog_id *prg;
280 uint32_t prog_id_word;
281 char dist = ' ';
282 /* character array used for decoding dist type. */
283 char dist_char[] = "nabx";
284
04c68496 285 if (pmboxq->u.mb.mbxStatus != MBX_SUCCESS) {
9f1e1b50 286 mempool_free(pmboxq, phba->mbox_mem_pool);
97207482 287 return;
9f1e1b50 288 }
97207482
JS
289
290 prg = (struct prog_id *) &prog_id_word;
291
292 /* word 7 contain option rom version */
04c68496 293 prog_id_word = pmboxq->u.mb.un.varWords[7];
97207482
JS
294
295 /* Decode the Option rom version word to a readable string */
296 if (prg->dist < 4)
297 dist = dist_char[prg->dist];
298
299 if ((prg->dist == 3) && (prg->num == 0))
300 sprintf(phba->OptionROMVersion, "%d.%d%d",
301 prg->ver, prg->rev, prg->lev);
302 else
303 sprintf(phba->OptionROMVersion, "%d.%d%d%c%d",
304 prg->ver, prg->rev, prg->lev,
305 dist, prg->num);
9f1e1b50 306 mempool_free(pmboxq, phba->mbox_mem_pool);
97207482
JS
307 return;
308}
309
e59058c4 310/**
3621a710 311 * lpfc_config_port_post - Perform lpfc initialization after config port
e59058c4
JS
312 * @phba: pointer to lpfc hba data structure.
313 *
314 * This routine will do LPFC initialization after the CONFIG_PORT mailbox
315 * command call. It performs all internal resource and state setups on the
316 * port: post IOCB buffers, enable appropriate host interrupt attentions,
317 * ELS ring timers, etc.
318 *
319 * Return codes
320 * 0 - success.
321 * Any other value - error.
322 **/
dea3101e 323int
2e0fef85 324lpfc_config_port_post(struct lpfc_hba *phba)
dea3101e 325{
2e0fef85 326 struct lpfc_vport *vport = phba->pport;
a257bf90 327 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
dea3101e 328 LPFC_MBOXQ_t *pmb;
329 MAILBOX_t *mb;
330 struct lpfc_dmabuf *mp;
331 struct lpfc_sli *psli = &phba->sli;
332 uint32_t status, timeout;
2e0fef85
JS
333 int i, j;
334 int rc;
dea3101e 335
7af67051
JS
336 spin_lock_irq(&phba->hbalock);
337 /*
338 * If the Config port completed correctly the HBA is not
339 * over heated any more.
340 */
341 if (phba->over_temp_state == HBA_OVER_TEMP)
342 phba->over_temp_state = HBA_NORMAL_TEMP;
343 spin_unlock_irq(&phba->hbalock);
344
dea3101e 345 pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
346 if (!pmb) {
2e0fef85 347 phba->link_state = LPFC_HBA_ERROR;
dea3101e 348 return -ENOMEM;
349 }
04c68496 350 mb = &pmb->u.mb;
dea3101e 351
dea3101e 352 /* Get login parameters for NID. */
92d7f7b0 353 lpfc_read_sparam(phba, pmb, 0);
ed957684 354 pmb->vport = vport;
dea3101e 355 if (lpfc_sli_issue_mbox(phba, pmb, MBX_POLL) != MBX_SUCCESS) {
ed957684 356 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
e8b62011 357 "0448 Adapter failed init, mbxCmd x%x "
dea3101e 358 "READ_SPARM mbxStatus x%x\n",
dea3101e 359 mb->mbxCommand, mb->mbxStatus);
2e0fef85 360 phba->link_state = LPFC_HBA_ERROR;
dea3101e 361 mp = (struct lpfc_dmabuf *) pmb->context1;
362 mempool_free( pmb, phba->mbox_mem_pool);
363 lpfc_mbuf_free(phba, mp->virt, mp->phys);
364 kfree(mp);
365 return -EIO;
366 }
367
368 mp = (struct lpfc_dmabuf *) pmb->context1;
369
2e0fef85 370 memcpy(&vport->fc_sparam, mp->virt, sizeof (struct serv_parm));
dea3101e 371 lpfc_mbuf_free(phba, mp->virt, mp->phys);
372 kfree(mp);
373 pmb->context1 = NULL;
374
a12e07bc 375 if (phba->cfg_soft_wwnn)
2e0fef85
JS
376 u64_to_wwn(phba->cfg_soft_wwnn,
377 vport->fc_sparam.nodeName.u.wwn);
c3f28afa 378 if (phba->cfg_soft_wwpn)
2e0fef85
JS
379 u64_to_wwn(phba->cfg_soft_wwpn,
380 vport->fc_sparam.portName.u.wwn);
381 memcpy(&vport->fc_nodename, &vport->fc_sparam.nodeName,
dea3101e 382 sizeof (struct lpfc_name));
2e0fef85 383 memcpy(&vport->fc_portname, &vport->fc_sparam.portName,
dea3101e 384 sizeof (struct lpfc_name));
a257bf90
JS
385
386 /* Update the fc_host data structures with new wwn. */
387 fc_host_node_name(shost) = wwn_to_u64(vport->fc_nodename.u.wwn);
388 fc_host_port_name(shost) = wwn_to_u64(vport->fc_portname.u.wwn);
21e9a0a5 389 fc_host_max_npiv_vports(shost) = phba->max_vpi;
a257bf90 390
dea3101e 391 /* If no serial number in VPD data, use low 6 bytes of WWNN */
392 /* This should be consolidated into parse_vpd ? - mr */
393 if (phba->SerialNumber[0] == 0) {
394 uint8_t *outptr;
395
2e0fef85 396 outptr = &vport->fc_nodename.u.s.IEEE[0];
dea3101e 397 for (i = 0; i < 12; i++) {
398 status = *outptr++;
399 j = ((status & 0xf0) >> 4);
400 if (j <= 9)
401 phba->SerialNumber[i] =
402 (char)((uint8_t) 0x30 + (uint8_t) j);
403 else
404 phba->SerialNumber[i] =
405 (char)((uint8_t) 0x61 + (uint8_t) (j - 10));
406 i++;
407 j = (status & 0xf);
408 if (j <= 9)
409 phba->SerialNumber[i] =
410 (char)((uint8_t) 0x30 + (uint8_t) j);
411 else
412 phba->SerialNumber[i] =
413 (char)((uint8_t) 0x61 + (uint8_t) (j - 10));
414 }
415 }
416
dea3101e 417 lpfc_read_config(phba, pmb);
ed957684 418 pmb->vport = vport;
dea3101e 419 if (lpfc_sli_issue_mbox(phba, pmb, MBX_POLL) != MBX_SUCCESS) {
ed957684 420 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
e8b62011 421 "0453 Adapter failed to init, mbxCmd x%x "
dea3101e 422 "READ_CONFIG, mbxStatus x%x\n",
dea3101e 423 mb->mbxCommand, mb->mbxStatus);
2e0fef85 424 phba->link_state = LPFC_HBA_ERROR;
dea3101e 425 mempool_free( pmb, phba->mbox_mem_pool);
426 return -EIO;
427 }
428
a0c87cbd
JS
429 /* Check if the port is disabled */
430 lpfc_sli_read_link_ste(phba);
431
dea3101e 432 /* Reset the DFT_HBA_Q_DEPTH to the max xri */
433 if (phba->cfg_hba_queue_depth > (mb->un.varRdConfig.max_xri+1))
434 phba->cfg_hba_queue_depth =
f1126688
JS
435 (mb->un.varRdConfig.max_xri + 1) -
436 lpfc_sli4_get_els_iocb_cnt(phba);
dea3101e 437
438 phba->lmt = mb->un.varRdConfig.lmt;
74b72a59
JW
439
440 /* Get the default values for Model Name and Description */
441 lpfc_get_hba_model_desc(phba, phba->ModelName, phba->ModelDesc);
442
443 if ((phba->cfg_link_speed > LINK_SPEED_10G)
444 || ((phba->cfg_link_speed == LINK_SPEED_1G)
445 && !(phba->lmt & LMT_1Gb))
446 || ((phba->cfg_link_speed == LINK_SPEED_2G)
447 && !(phba->lmt & LMT_2Gb))
448 || ((phba->cfg_link_speed == LINK_SPEED_4G)
449 && !(phba->lmt & LMT_4Gb))
450 || ((phba->cfg_link_speed == LINK_SPEED_8G)
451 && !(phba->lmt & LMT_8Gb))
452 || ((phba->cfg_link_speed == LINK_SPEED_10G)
453 && !(phba->lmt & LMT_10Gb))) {
454 /* Reset link speed to auto */
ed957684 455 lpfc_printf_log(phba, KERN_WARNING, LOG_LINK_EVENT,
e8b62011 456 "1302 Invalid speed for this board: "
dea3101e 457 "Reset link speed to auto: x%x\n",
dea3101e 458 phba->cfg_link_speed);
459 phba->cfg_link_speed = LINK_SPEED_AUTO;
460 }
461
2e0fef85 462 phba->link_state = LPFC_LINK_DOWN;
dea3101e 463
0b727fea 464 /* Only process IOCBs on ELS ring till hba_state is READY */
a4bc3379
JS
465 if (psli->ring[psli->extra_ring].cmdringaddr)
466 psli->ring[psli->extra_ring].flag |= LPFC_STOP_IOCB_EVENT;
dea3101e 467 if (psli->ring[psli->fcp_ring].cmdringaddr)
468 psli->ring[psli->fcp_ring].flag |= LPFC_STOP_IOCB_EVENT;
469 if (psli->ring[psli->next_ring].cmdringaddr)
470 psli->ring[psli->next_ring].flag |= LPFC_STOP_IOCB_EVENT;
471
472 /* Post receive buffers for desired rings */
ed957684
JS
473 if (phba->sli_rev != 3)
474 lpfc_post_rcv_buf(phba);
dea3101e 475
9399627f
JS
476 /*
477 * Configure HBA MSI-X attention conditions to messages if MSI-X mode
478 */
479 if (phba->intr_type == MSIX) {
480 rc = lpfc_config_msi(phba, pmb);
481 if (rc) {
482 mempool_free(pmb, phba->mbox_mem_pool);
483 return -EIO;
484 }
485 rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
486 if (rc != MBX_SUCCESS) {
487 lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
488 "0352 Config MSI mailbox command "
489 "failed, mbxCmd x%x, mbxStatus x%x\n",
04c68496
JS
490 pmb->u.mb.mbxCommand,
491 pmb->u.mb.mbxStatus);
9399627f
JS
492 mempool_free(pmb, phba->mbox_mem_pool);
493 return -EIO;
494 }
495 }
496
04c68496 497 spin_lock_irq(&phba->hbalock);
9399627f
JS
498 /* Initialize ERATT handling flag */
499 phba->hba_flag &= ~HBA_ERATT_HANDLED;
500
dea3101e 501 /* Enable appropriate host interrupts */
dea3101e 502 status = readl(phba->HCregaddr);
503 status |= HC_MBINT_ENA | HC_ERINT_ENA | HC_LAINT_ENA;
504 if (psli->num_rings > 0)
505 status |= HC_R0INT_ENA;
506 if (psli->num_rings > 1)
507 status |= HC_R1INT_ENA;
508 if (psli->num_rings > 2)
509 status |= HC_R2INT_ENA;
510 if (psli->num_rings > 3)
511 status |= HC_R3INT_ENA;
512
875fbdfe
JSEC
513 if ((phba->cfg_poll & ENABLE_FCP_RING_POLLING) &&
514 (phba->cfg_poll & DISABLE_FCP_RING_INT))
9399627f 515 status &= ~(HC_R0INT_ENA);
875fbdfe 516
dea3101e 517 writel(status, phba->HCregaddr);
518 readl(phba->HCregaddr); /* flush */
2e0fef85 519 spin_unlock_irq(&phba->hbalock);
dea3101e 520
9399627f
JS
521 /* Set up ring-0 (ELS) timer */
522 timeout = phba->fc_ratov * 2;
2e0fef85 523 mod_timer(&vport->els_tmofunc, jiffies + HZ * timeout);
9399627f 524 /* Set up heart beat (HB) timer */
858c9f6c
JS
525 mod_timer(&phba->hb_tmofunc, jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
526 phba->hb_outstanding = 0;
527 phba->last_completion_time = jiffies;
9399627f
JS
528 /* Set up error attention (ERATT) polling timer */
529 mod_timer(&phba->eratt_poll, jiffies + HZ * LPFC_ERATT_POLL_INTERVAL);
dea3101e 530
a0c87cbd
JS
531 if (phba->hba_flag & LINK_DISABLED) {
532 lpfc_printf_log(phba,
533 KERN_ERR, LOG_INIT,
534 "2598 Adapter Link is disabled.\n");
535 lpfc_down_link(phba, pmb);
536 pmb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
537 rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
538 if ((rc != MBX_SUCCESS) && (rc != MBX_BUSY)) {
539 lpfc_printf_log(phba,
540 KERN_ERR, LOG_INIT,
541 "2599 Adapter failed to issue DOWN_LINK"
542 " mbox command rc 0x%x\n", rc);
543
544 mempool_free(pmb, phba->mbox_mem_pool);
545 return -EIO;
546 }
547 } else {
548 lpfc_init_link(phba, pmb, phba->cfg_topology,
549 phba->cfg_link_speed);
550 pmb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
551 lpfc_set_loopback_flag(phba);
552 rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
553 if (rc != MBX_SUCCESS) {
554 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
e8b62011 555 "0454 Adapter failed to init, mbxCmd x%x "
dea3101e 556 "INIT_LINK, mbxStatus x%x\n",
dea3101e 557 mb->mbxCommand, mb->mbxStatus);
558
a0c87cbd
JS
559 /* Clear all interrupt enable conditions */
560 writel(0, phba->HCregaddr);
561 readl(phba->HCregaddr); /* flush */
562 /* Clear all pending interrupts */
563 writel(0xffffffff, phba->HAregaddr);
564 readl(phba->HAregaddr); /* flush */
dea3101e 565
a0c87cbd
JS
566 phba->link_state = LPFC_HBA_ERROR;
567 if (rc != MBX_BUSY)
568 mempool_free(pmb, phba->mbox_mem_pool);
569 return -EIO;
570 }
dea3101e 571 }
572 /* MBOX buffer will be freed in mbox compl */
57127f15
JS
573 pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
574 lpfc_config_async(phba, pmb, LPFC_ELS_RING);
575 pmb->mbox_cmpl = lpfc_config_async_cmpl;
576 pmb->vport = phba->pport;
577 rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
dea3101e 578
57127f15
JS
579 if ((rc != MBX_BUSY) && (rc != MBX_SUCCESS)) {
580 lpfc_printf_log(phba,
581 KERN_ERR,
582 LOG_INIT,
583 "0456 Adapter failed to issue "
e4e74273 584 "ASYNCEVT_ENABLE mbox status x%x\n",
57127f15
JS
585 rc);
586 mempool_free(pmb, phba->mbox_mem_pool);
587 }
97207482
JS
588
589 /* Get Option rom version */
590 pmb = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
591 lpfc_dump_wakeup_param(phba, pmb);
592 pmb->mbox_cmpl = lpfc_dump_wakeup_param_cmpl;
593 pmb->vport = phba->pport;
594 rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
595
596 if ((rc != MBX_BUSY) && (rc != MBX_SUCCESS)) {
597 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, "0435 Adapter failed "
e4e74273 598 "to get Option ROM version status x%x\n", rc);
97207482
JS
599 mempool_free(pmb, phba->mbox_mem_pool);
600 }
601
d7c255b2 602 return 0;
ce8b3ce5
JS
603}
604
e59058c4 605/**
3621a710 606 * lpfc_hba_down_prep - Perform lpfc uninitialization prior to HBA reset
e59058c4
JS
607 * @phba: pointer to lpfc HBA data structure.
608 *
609 * This routine will do LPFC uninitialization before the HBA is reset when
610 * bringing down the SLI Layer.
611 *
612 * Return codes
613 * 0 - success.
614 * Any other value - error.
615 **/
dea3101e 616int
2e0fef85 617lpfc_hba_down_prep(struct lpfc_hba *phba)
dea3101e 618{
1b32f6aa
JS
619 struct lpfc_vport **vports;
620 int i;
3772a991
JS
621
622 if (phba->sli_rev <= LPFC_SLI_REV3) {
623 /* Disable interrupts */
624 writel(0, phba->HCregaddr);
625 readl(phba->HCregaddr); /* flush */
626 }
dea3101e 627
1b32f6aa
JS
628 if (phba->pport->load_flag & FC_UNLOADING)
629 lpfc_cleanup_discovery_resources(phba->pport);
630 else {
631 vports = lpfc_create_vport_work_array(phba);
632 if (vports != NULL)
3772a991
JS
633 for (i = 0; i <= phba->max_vports &&
634 vports[i] != NULL; i++)
1b32f6aa
JS
635 lpfc_cleanup_discovery_resources(vports[i]);
636 lpfc_destroy_vport_work_array(phba, vports);
7f5f3d0d
JS
637 }
638 return 0;
dea3101e 639}
640
e59058c4 641/**
3772a991 642 * lpfc_hba_down_post_s3 - Perform lpfc uninitialization after HBA reset
e59058c4
JS
643 * @phba: pointer to lpfc HBA data structure.
644 *
645 * This routine will do uninitialization after the HBA is reset when bring
646 * down the SLI Layer.
647 *
648 * Return codes
649 * 0 - sucess.
650 * Any other value - error.
651 **/
3772a991
JS
652static int
653lpfc_hba_down_post_s3(struct lpfc_hba *phba)
41415862
JW
654{
655 struct lpfc_sli *psli = &phba->sli;
656 struct lpfc_sli_ring *pring;
657 struct lpfc_dmabuf *mp, *next_mp;
09372820 658 LIST_HEAD(completions);
41415862
JW
659 int i;
660
92d7f7b0
JS
661 if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED)
662 lpfc_sli_hbqbuf_free_all(phba);
663 else {
664 /* Cleanup preposted buffers on the ELS ring */
665 pring = &psli->ring[LPFC_ELS_RING];
666 list_for_each_entry_safe(mp, next_mp, &pring->postbufq, list) {
667 list_del(&mp->list);
668 pring->postbufq_cnt--;
669 lpfc_mbuf_free(phba, mp->virt, mp->phys);
670 kfree(mp);
671 }
41415862
JW
672 }
673
09372820 674 spin_lock_irq(&phba->hbalock);
41415862
JW
675 for (i = 0; i < psli->num_rings; i++) {
676 pring = &psli->ring[i];
09372820
JS
677
678 /* At this point in time the HBA is either reset or DOA. Either
679 * way, nothing should be on txcmplq as it will NEVER complete.
680 */
681 list_splice_init(&pring->txcmplq, &completions);
682 pring->txcmplq_cnt = 0;
683 spin_unlock_irq(&phba->hbalock);
684
a257bf90
JS
685 /* Cancel all the IOCBs from the completions list */
686 lpfc_sli_cancel_iocbs(phba, &completions, IOSTAT_LOCAL_REJECT,
687 IOERR_SLI_ABORTED);
09372820 688
41415862 689 lpfc_sli_abort_iocb_ring(phba, pring);
09372820 690 spin_lock_irq(&phba->hbalock);
41415862 691 }
09372820 692 spin_unlock_irq(&phba->hbalock);
41415862
JW
693
694 return 0;
695}
da0436e9
JS
696/**
697 * lpfc_hba_down_post_s4 - Perform lpfc uninitialization after HBA reset
698 * @phba: pointer to lpfc HBA data structure.
699 *
700 * This routine will do uninitialization after the HBA is reset when bring
701 * down the SLI Layer.
702 *
703 * Return codes
704 * 0 - sucess.
705 * Any other value - error.
706 **/
707static int
708lpfc_hba_down_post_s4(struct lpfc_hba *phba)
709{
710 struct lpfc_scsi_buf *psb, *psb_next;
711 LIST_HEAD(aborts);
712 int ret;
713 unsigned long iflag = 0;
714 ret = lpfc_hba_down_post_s3(phba);
715 if (ret)
716 return ret;
717 /* At this point in time the HBA is either reset or DOA. Either
718 * way, nothing should be on lpfc_abts_els_sgl_list, it needs to be
719 * on the lpfc_sgl_list so that it can either be freed if the
720 * driver is unloading or reposted if the driver is restarting
721 * the port.
722 */
723 spin_lock_irq(&phba->hbalock); /* required for lpfc_sgl_list and */
724 /* scsl_buf_list */
725 /* abts_sgl_list_lock required because worker thread uses this
726 * list.
727 */
728 spin_lock(&phba->sli4_hba.abts_sgl_list_lock);
729 list_splice_init(&phba->sli4_hba.lpfc_abts_els_sgl_list,
730 &phba->sli4_hba.lpfc_sgl_list);
731 spin_unlock(&phba->sli4_hba.abts_sgl_list_lock);
732 /* abts_scsi_buf_list_lock required because worker thread uses this
733 * list.
734 */
735 spin_lock(&phba->sli4_hba.abts_scsi_buf_list_lock);
736 list_splice_init(&phba->sli4_hba.lpfc_abts_scsi_buf_list,
737 &aborts);
738 spin_unlock(&phba->sli4_hba.abts_scsi_buf_list_lock);
739 spin_unlock_irq(&phba->hbalock);
740
741 list_for_each_entry_safe(psb, psb_next, &aborts, list) {
742 psb->pCmd = NULL;
743 psb->status = IOSTAT_SUCCESS;
744 }
745 spin_lock_irqsave(&phba->scsi_buf_list_lock, iflag);
746 list_splice(&aborts, &phba->lpfc_scsi_buf_list);
747 spin_unlock_irqrestore(&phba->scsi_buf_list_lock, iflag);
748 return 0;
749}
750
751/**
752 * lpfc_hba_down_post - Wrapper func for hba down post routine
753 * @phba: pointer to lpfc HBA data structure.
754 *
755 * This routine wraps the actual SLI3 or SLI4 routine for performing
756 * uninitialization after the HBA is reset when bring down the SLI Layer.
757 *
758 * Return codes
759 * 0 - sucess.
760 * Any other value - error.
761 **/
762int
763lpfc_hba_down_post(struct lpfc_hba *phba)
764{
765 return (*phba->lpfc_hba_down_post)(phba);
766}
41415862 767
e59058c4 768/**
3621a710 769 * lpfc_hb_timeout - The HBA-timer timeout handler
e59058c4
JS
770 * @ptr: unsigned long holds the pointer to lpfc hba data structure.
771 *
772 * This is the HBA-timer timeout handler registered to the lpfc driver. When
773 * this timer fires, a HBA timeout event shall be posted to the lpfc driver
774 * work-port-events bitmap and the worker thread is notified. This timeout
775 * event will be used by the worker thread to invoke the actual timeout
776 * handler routine, lpfc_hb_timeout_handler. Any periodical operations will
777 * be performed in the timeout handler and the HBA timeout event bit shall
778 * be cleared by the worker thread after it has taken the event bitmap out.
779 **/
a6ababd2 780static void
858c9f6c
JS
781lpfc_hb_timeout(unsigned long ptr)
782{
783 struct lpfc_hba *phba;
5e9d9b82 784 uint32_t tmo_posted;
858c9f6c
JS
785 unsigned long iflag;
786
787 phba = (struct lpfc_hba *)ptr;
9399627f
JS
788
789 /* Check for heart beat timeout conditions */
858c9f6c 790 spin_lock_irqsave(&phba->pport->work_port_lock, iflag);
5e9d9b82
JS
791 tmo_posted = phba->pport->work_port_events & WORKER_HB_TMO;
792 if (!tmo_posted)
858c9f6c
JS
793 phba->pport->work_port_events |= WORKER_HB_TMO;
794 spin_unlock_irqrestore(&phba->pport->work_port_lock, iflag);
795
9399627f 796 /* Tell the worker thread there is work to do */
5e9d9b82
JS
797 if (!tmo_posted)
798 lpfc_worker_wake_up(phba);
858c9f6c
JS
799 return;
800}
801
e59058c4 802/**
3621a710 803 * lpfc_hb_mbox_cmpl - The lpfc heart-beat mailbox command callback function
e59058c4
JS
804 * @phba: pointer to lpfc hba data structure.
805 * @pmboxq: pointer to the driver internal queue element for mailbox command.
806 *
807 * This is the callback function to the lpfc heart-beat mailbox command.
808 * If configured, the lpfc driver issues the heart-beat mailbox command to
809 * the HBA every LPFC_HB_MBOX_INTERVAL (current 5) seconds. At the time the
810 * heart-beat mailbox command is issued, the driver shall set up heart-beat
811 * timeout timer to LPFC_HB_MBOX_TIMEOUT (current 30) seconds and marks
812 * heart-beat outstanding state. Once the mailbox command comes back and
813 * no error conditions detected, the heart-beat mailbox command timer is
814 * reset to LPFC_HB_MBOX_INTERVAL seconds and the heart-beat outstanding
815 * state is cleared for the next heart-beat. If the timer expired with the
816 * heart-beat outstanding state set, the driver will put the HBA offline.
817 **/
858c9f6c
JS
818static void
819lpfc_hb_mbox_cmpl(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq)
820{
821 unsigned long drvr_flag;
822
823 spin_lock_irqsave(&phba->hbalock, drvr_flag);
824 phba->hb_outstanding = 0;
825 spin_unlock_irqrestore(&phba->hbalock, drvr_flag);
826
9399627f 827 /* Check and reset heart-beat timer is necessary */
858c9f6c
JS
828 mempool_free(pmboxq, phba->mbox_mem_pool);
829 if (!(phba->pport->fc_flag & FC_OFFLINE_MODE) &&
830 !(phba->link_state == LPFC_HBA_ERROR) &&
51ef4c26 831 !(phba->pport->load_flag & FC_UNLOADING))
858c9f6c
JS
832 mod_timer(&phba->hb_tmofunc,
833 jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
834 return;
835}
836
e59058c4 837/**
3621a710 838 * lpfc_hb_timeout_handler - The HBA-timer timeout handler
e59058c4
JS
839 * @phba: pointer to lpfc hba data structure.
840 *
841 * This is the actual HBA-timer timeout handler to be invoked by the worker
842 * thread whenever the HBA timer fired and HBA-timeout event posted. This
843 * handler performs any periodic operations needed for the device. If such
844 * periodic event has already been attended to either in the interrupt handler
845 * or by processing slow-ring or fast-ring events within the HBA-timer
846 * timeout window (LPFC_HB_MBOX_INTERVAL), this handler just simply resets
847 * the timer for the next timeout period. If lpfc heart-beat mailbox command
848 * is configured and there is no heart-beat mailbox command outstanding, a
849 * heart-beat mailbox is issued and timer set properly. Otherwise, if there
850 * has been a heart-beat mailbox command outstanding, the HBA shall be put
851 * to offline.
852 **/
858c9f6c
JS
853void
854lpfc_hb_timeout_handler(struct lpfc_hba *phba)
855{
45ed1190 856 struct lpfc_vport **vports;
858c9f6c 857 LPFC_MBOXQ_t *pmboxq;
0ff10d46 858 struct lpfc_dmabuf *buf_ptr;
45ed1190 859 int retval, i;
858c9f6c 860 struct lpfc_sli *psli = &phba->sli;
0ff10d46 861 LIST_HEAD(completions);
858c9f6c 862
45ed1190
JS
863 vports = lpfc_create_vport_work_array(phba);
864 if (vports != NULL)
865 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++)
866 lpfc_rcv_seq_check_edtov(vports[i]);
867 lpfc_destroy_vport_work_array(phba, vports);
868
858c9f6c 869 if ((phba->link_state == LPFC_HBA_ERROR) ||
51ef4c26 870 (phba->pport->load_flag & FC_UNLOADING) ||
858c9f6c
JS
871 (phba->pport->fc_flag & FC_OFFLINE_MODE))
872 return;
873
874 spin_lock_irq(&phba->pport->work_port_lock);
858c9f6c
JS
875
876 if (time_after(phba->last_completion_time + LPFC_HB_MBOX_INTERVAL * HZ,
877 jiffies)) {
878 spin_unlock_irq(&phba->pport->work_port_lock);
879 if (!phba->hb_outstanding)
880 mod_timer(&phba->hb_tmofunc,
881 jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
882 else
883 mod_timer(&phba->hb_tmofunc,
884 jiffies + HZ * LPFC_HB_MBOX_TIMEOUT);
885 return;
886 }
887 spin_unlock_irq(&phba->pport->work_port_lock);
888
0ff10d46
JS
889 if (phba->elsbuf_cnt &&
890 (phba->elsbuf_cnt == phba->elsbuf_prev_cnt)) {
891 spin_lock_irq(&phba->hbalock);
892 list_splice_init(&phba->elsbuf, &completions);
893 phba->elsbuf_cnt = 0;
894 phba->elsbuf_prev_cnt = 0;
895 spin_unlock_irq(&phba->hbalock);
896
897 while (!list_empty(&completions)) {
898 list_remove_head(&completions, buf_ptr,
899 struct lpfc_dmabuf, list);
900 lpfc_mbuf_free(phba, buf_ptr->virt, buf_ptr->phys);
901 kfree(buf_ptr);
902 }
903 }
904 phba->elsbuf_prev_cnt = phba->elsbuf_cnt;
905
858c9f6c 906 /* If there is no heart beat outstanding, issue a heartbeat command */
13815c83
JS
907 if (phba->cfg_enable_hba_heartbeat) {
908 if (!phba->hb_outstanding) {
909 pmboxq = mempool_alloc(phba->mbox_mem_pool,GFP_KERNEL);
910 if (!pmboxq) {
911 mod_timer(&phba->hb_tmofunc,
912 jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
913 return;
914 }
858c9f6c 915
13815c83
JS
916 lpfc_heart_beat(phba, pmboxq);
917 pmboxq->mbox_cmpl = lpfc_hb_mbox_cmpl;
918 pmboxq->vport = phba->pport;
919 retval = lpfc_sli_issue_mbox(phba, pmboxq, MBX_NOWAIT);
858c9f6c 920
13815c83
JS
921 if (retval != MBX_BUSY && retval != MBX_SUCCESS) {
922 mempool_free(pmboxq, phba->mbox_mem_pool);
923 mod_timer(&phba->hb_tmofunc,
924 jiffies + HZ * LPFC_HB_MBOX_INTERVAL);
925 return;
926 }
858c9f6c 927 mod_timer(&phba->hb_tmofunc,
13815c83
JS
928 jiffies + HZ * LPFC_HB_MBOX_TIMEOUT);
929 phba->hb_outstanding = 1;
858c9f6c 930 return;
13815c83
JS
931 } else {
932 /*
933 * If heart beat timeout called with hb_outstanding set
934 * we need to take the HBA offline.
935 */
936 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
937 "0459 Adapter heartbeat failure, "
938 "taking this port offline.\n");
939
940 spin_lock_irq(&phba->hbalock);
f4b4c68f 941 psli->sli_flag &= ~LPFC_SLI_ACTIVE;
13815c83
JS
942 spin_unlock_irq(&phba->hbalock);
943
944 lpfc_offline_prep(phba);
945 lpfc_offline(phba);
946 lpfc_unblock_mgmt_io(phba);
947 phba->link_state = LPFC_HBA_ERROR;
948 lpfc_hba_down_post(phba);
858c9f6c 949 }
858c9f6c
JS
950 }
951}
952
e59058c4 953/**
3621a710 954 * lpfc_offline_eratt - Bring lpfc offline on hardware error attention
e59058c4
JS
955 * @phba: pointer to lpfc hba data structure.
956 *
957 * This routine is called to bring the HBA offline when HBA hardware error
958 * other than Port Error 6 has been detected.
959 **/
09372820
JS
960static void
961lpfc_offline_eratt(struct lpfc_hba *phba)
962{
963 struct lpfc_sli *psli = &phba->sli;
964
965 spin_lock_irq(&phba->hbalock);
f4b4c68f 966 psli->sli_flag &= ~LPFC_SLI_ACTIVE;
09372820
JS
967 spin_unlock_irq(&phba->hbalock);
968 lpfc_offline_prep(phba);
969
970 lpfc_offline(phba);
971 lpfc_reset_barrier(phba);
f4b4c68f 972 spin_lock_irq(&phba->hbalock);
09372820 973 lpfc_sli_brdreset(phba);
f4b4c68f 974 spin_unlock_irq(&phba->hbalock);
09372820
JS
975 lpfc_hba_down_post(phba);
976 lpfc_sli_brdready(phba, HS_MBRDY);
977 lpfc_unblock_mgmt_io(phba);
978 phba->link_state = LPFC_HBA_ERROR;
979 return;
980}
981
da0436e9
JS
982/**
983 * lpfc_sli4_offline_eratt - Bring lpfc offline on SLI4 hardware error attention
984 * @phba: pointer to lpfc hba data structure.
985 *
986 * This routine is called to bring a SLI4 HBA offline when HBA hardware error
987 * other than Port Error 6 has been detected.
988 **/
989static void
990lpfc_sli4_offline_eratt(struct lpfc_hba *phba)
991{
992 lpfc_offline_prep(phba);
993 lpfc_offline(phba);
994 lpfc_sli4_brdreset(phba);
995 lpfc_hba_down_post(phba);
996 lpfc_sli4_post_status_check(phba);
997 lpfc_unblock_mgmt_io(phba);
998 phba->link_state = LPFC_HBA_ERROR;
999}
1000
a257bf90
JS
1001/**
1002 * lpfc_handle_deferred_eratt - The HBA hardware deferred error handler
1003 * @phba: pointer to lpfc hba data structure.
1004 *
1005 * This routine is invoked to handle the deferred HBA hardware error
1006 * conditions. This type of error is indicated by HBA by setting ER1
1007 * and another ER bit in the host status register. The driver will
1008 * wait until the ER1 bit clears before handling the error condition.
1009 **/
1010static void
1011lpfc_handle_deferred_eratt(struct lpfc_hba *phba)
1012{
1013 uint32_t old_host_status = phba->work_hs;
1014 struct lpfc_sli_ring *pring;
1015 struct lpfc_sli *psli = &phba->sli;
1016
f4b4c68f
JS
1017 /* If the pci channel is offline, ignore possible errors,
1018 * since we cannot communicate with the pci card anyway.
1019 */
1020 if (pci_channel_offline(phba->pcidev)) {
1021 spin_lock_irq(&phba->hbalock);
1022 phba->hba_flag &= ~DEFER_ERATT;
1023 spin_unlock_irq(&phba->hbalock);
1024 return;
1025 }
1026
a257bf90
JS
1027 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
1028 "0479 Deferred Adapter Hardware Error "
1029 "Data: x%x x%x x%x\n",
1030 phba->work_hs,
1031 phba->work_status[0], phba->work_status[1]);
1032
1033 spin_lock_irq(&phba->hbalock);
f4b4c68f 1034 psli->sli_flag &= ~LPFC_SLI_ACTIVE;
a257bf90
JS
1035 spin_unlock_irq(&phba->hbalock);
1036
1037
1038 /*
1039 * Firmware stops when it triggred erratt. That could cause the I/Os
1040 * dropped by the firmware. Error iocb (I/O) on txcmplq and let the
1041 * SCSI layer retry it after re-establishing link.
1042 */
1043 pring = &psli->ring[psli->fcp_ring];
1044 lpfc_sli_abort_iocb_ring(phba, pring);
1045
1046 /*
1047 * There was a firmware error. Take the hba offline and then
1048 * attempt to restart it.
1049 */
1050 lpfc_offline_prep(phba);
1051 lpfc_offline(phba);
1052
1053 /* Wait for the ER1 bit to clear.*/
1054 while (phba->work_hs & HS_FFER1) {
1055 msleep(100);
1056 phba->work_hs = readl(phba->HSregaddr);
1057 /* If driver is unloading let the worker thread continue */
1058 if (phba->pport->load_flag & FC_UNLOADING) {
1059 phba->work_hs = 0;
1060 break;
1061 }
1062 }
1063
1064 /*
1065 * This is to ptrotect against a race condition in which
1066 * first write to the host attention register clear the
1067 * host status register.
1068 */
1069 if ((!phba->work_hs) && (!(phba->pport->load_flag & FC_UNLOADING)))
1070 phba->work_hs = old_host_status & ~HS_FFER1;
1071
3772a991 1072 spin_lock_irq(&phba->hbalock);
a257bf90 1073 phba->hba_flag &= ~DEFER_ERATT;
3772a991 1074 spin_unlock_irq(&phba->hbalock);
a257bf90
JS
1075 phba->work_status[0] = readl(phba->MBslimaddr + 0xa8);
1076 phba->work_status[1] = readl(phba->MBslimaddr + 0xac);
1077}
1078
3772a991
JS
1079static void
1080lpfc_board_errevt_to_mgmt(struct lpfc_hba *phba)
1081{
1082 struct lpfc_board_event_header board_event;
1083 struct Scsi_Host *shost;
1084
1085 board_event.event_type = FC_REG_BOARD_EVENT;
1086 board_event.subcategory = LPFC_EVENT_PORTINTERR;
1087 shost = lpfc_shost_from_vport(phba->pport);
1088 fc_host_post_vendor_event(shost, fc_get_event_number(),
1089 sizeof(board_event),
1090 (char *) &board_event,
1091 LPFC_NL_VENDOR_ID);
1092}
1093
e59058c4 1094/**
3772a991 1095 * lpfc_handle_eratt_s3 - The SLI3 HBA hardware error handler
e59058c4
JS
1096 * @phba: pointer to lpfc hba data structure.
1097 *
1098 * This routine is invoked to handle the following HBA hardware error
1099 * conditions:
1100 * 1 - HBA error attention interrupt
1101 * 2 - DMA ring index out of range
1102 * 3 - Mailbox command came back as unknown
1103 **/
3772a991
JS
1104static void
1105lpfc_handle_eratt_s3(struct lpfc_hba *phba)
dea3101e 1106{
2e0fef85 1107 struct lpfc_vport *vport = phba->pport;
2e0fef85 1108 struct lpfc_sli *psli = &phba->sli;
dea3101e 1109 struct lpfc_sli_ring *pring;
d2873e4c 1110 uint32_t event_data;
57127f15
JS
1111 unsigned long temperature;
1112 struct temp_event temp_event_data;
92d7f7b0 1113 struct Scsi_Host *shost;
2e0fef85 1114
8d63f375 1115 /* If the pci channel is offline, ignore possible errors,
3772a991
JS
1116 * since we cannot communicate with the pci card anyway.
1117 */
1118 if (pci_channel_offline(phba->pcidev)) {
1119 spin_lock_irq(&phba->hbalock);
1120 phba->hba_flag &= ~DEFER_ERATT;
1121 spin_unlock_irq(&phba->hbalock);
8d63f375 1122 return;
3772a991
JS
1123 }
1124
13815c83
JS
1125 /* If resets are disabled then leave the HBA alone and return */
1126 if (!phba->cfg_enable_hba_reset)
1127 return;
dea3101e 1128
ea2151b4 1129 /* Send an internal error event to mgmt application */
3772a991 1130 lpfc_board_errevt_to_mgmt(phba);
ea2151b4 1131
a257bf90
JS
1132 if (phba->hba_flag & DEFER_ERATT)
1133 lpfc_handle_deferred_eratt(phba);
1134
97eab634 1135 if (phba->work_hs & HS_FFER6) {
dea3101e 1136 /* Re-establishing Link */
1137 lpfc_printf_log(phba, KERN_INFO, LOG_LINK_EVENT,
e8b62011 1138 "1301 Re-establishing Link "
dea3101e 1139 "Data: x%x x%x x%x\n",
e8b62011 1140 phba->work_hs,
dea3101e 1141 phba->work_status[0], phba->work_status[1]);
58da1ffb 1142
92d7f7b0 1143 spin_lock_irq(&phba->hbalock);
f4b4c68f 1144 psli->sli_flag &= ~LPFC_SLI_ACTIVE;
92d7f7b0 1145 spin_unlock_irq(&phba->hbalock);
dea3101e 1146
1147 /*
1148 * Firmware stops when it triggled erratt with HS_FFER6.
1149 * That could cause the I/Os dropped by the firmware.
1150 * Error iocb (I/O) on txcmplq and let the SCSI layer
1151 * retry it after re-establishing link.
1152 */
1153 pring = &psli->ring[psli->fcp_ring];
1154 lpfc_sli_abort_iocb_ring(phba, pring);
1155
dea3101e 1156 /*
1157 * There was a firmware error. Take the hba offline and then
1158 * attempt to restart it.
1159 */
46fa311e 1160 lpfc_offline_prep(phba);
dea3101e 1161 lpfc_offline(phba);
41415862 1162 lpfc_sli_brdrestart(phba);
dea3101e 1163 if (lpfc_online(phba) == 0) { /* Initialize the HBA */
46fa311e 1164 lpfc_unblock_mgmt_io(phba);
dea3101e 1165 return;
1166 }
46fa311e 1167 lpfc_unblock_mgmt_io(phba);
57127f15
JS
1168 } else if (phba->work_hs & HS_CRIT_TEMP) {
1169 temperature = readl(phba->MBslimaddr + TEMPERATURE_OFFSET);
1170 temp_event_data.event_type = FC_REG_TEMPERATURE_EVENT;
1171 temp_event_data.event_code = LPFC_CRIT_TEMP;
1172 temp_event_data.data = (uint32_t)temperature;
1173
1174 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
d7c255b2 1175 "0406 Adapter maximum temperature exceeded "
57127f15
JS
1176 "(%ld), taking this port offline "
1177 "Data: x%x x%x x%x\n",
1178 temperature, phba->work_hs,
1179 phba->work_status[0], phba->work_status[1]);
1180
1181 shost = lpfc_shost_from_vport(phba->pport);
1182 fc_host_post_vendor_event(shost, fc_get_event_number(),
1183 sizeof(temp_event_data),
1184 (char *) &temp_event_data,
1185 SCSI_NL_VID_TYPE_PCI
1186 | PCI_VENDOR_ID_EMULEX);
1187
7af67051 1188 spin_lock_irq(&phba->hbalock);
7af67051
JS
1189 phba->over_temp_state = HBA_OVER_TEMP;
1190 spin_unlock_irq(&phba->hbalock);
09372820 1191 lpfc_offline_eratt(phba);
57127f15 1192
dea3101e 1193 } else {
1194 /* The if clause above forces this code path when the status
9399627f
JS
1195 * failure is a value other than FFER6. Do not call the offline
1196 * twice. This is the adapter hardware error path.
dea3101e 1197 */
1198 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
e8b62011 1199 "0457 Adapter Hardware Error "
dea3101e 1200 "Data: x%x x%x x%x\n",
e8b62011 1201 phba->work_hs,
dea3101e 1202 phba->work_status[0], phba->work_status[1]);
1203
d2873e4c 1204 event_data = FC_REG_DUMP_EVENT;
92d7f7b0 1205 shost = lpfc_shost_from_vport(vport);
2e0fef85 1206 fc_host_post_vendor_event(shost, fc_get_event_number(),
d2873e4c
JS
1207 sizeof(event_data), (char *) &event_data,
1208 SCSI_NL_VID_TYPE_PCI | PCI_VENDOR_ID_EMULEX);
1209
09372820 1210 lpfc_offline_eratt(phba);
dea3101e 1211 }
9399627f 1212 return;
dea3101e 1213}
1214
da0436e9
JS
1215/**
1216 * lpfc_handle_eratt_s4 - The SLI4 HBA hardware error handler
1217 * @phba: pointer to lpfc hba data structure.
1218 *
1219 * This routine is invoked to handle the SLI4 HBA hardware error attention
1220 * conditions.
1221 **/
1222static void
1223lpfc_handle_eratt_s4(struct lpfc_hba *phba)
1224{
1225 struct lpfc_vport *vport = phba->pport;
1226 uint32_t event_data;
1227 struct Scsi_Host *shost;
1228
1229 /* If the pci channel is offline, ignore possible errors, since
1230 * we cannot communicate with the pci card anyway.
1231 */
1232 if (pci_channel_offline(phba->pcidev))
1233 return;
1234 /* If resets are disabled then leave the HBA alone and return */
1235 if (!phba->cfg_enable_hba_reset)
1236 return;
1237
1238 /* Send an internal error event to mgmt application */
1239 lpfc_board_errevt_to_mgmt(phba);
1240
1241 /* For now, the actual action for SLI4 device handling is not
1242 * specified yet, just treated it as adaptor hardware failure
1243 */
1244 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
1245 "0143 SLI4 Adapter Hardware Error Data: x%x x%x\n",
1246 phba->work_status[0], phba->work_status[1]);
1247
1248 event_data = FC_REG_DUMP_EVENT;
1249 shost = lpfc_shost_from_vport(vport);
1250 fc_host_post_vendor_event(shost, fc_get_event_number(),
1251 sizeof(event_data), (char *) &event_data,
1252 SCSI_NL_VID_TYPE_PCI | PCI_VENDOR_ID_EMULEX);
1253
1254 lpfc_sli4_offline_eratt(phba);
1255}
1256
1257/**
1258 * lpfc_handle_eratt - Wrapper func for handling hba error attention
1259 * @phba: pointer to lpfc HBA data structure.
1260 *
1261 * This routine wraps the actual SLI3 or SLI4 hba error attention handling
1262 * routine from the API jump table function pointer from the lpfc_hba struct.
1263 *
1264 * Return codes
1265 * 0 - sucess.
1266 * Any other value - error.
1267 **/
1268void
1269lpfc_handle_eratt(struct lpfc_hba *phba)
1270{
1271 (*phba->lpfc_handle_eratt)(phba);
1272}
1273
e59058c4 1274/**
3621a710 1275 * lpfc_handle_latt - The HBA link event handler
e59058c4
JS
1276 * @phba: pointer to lpfc hba data structure.
1277 *
1278 * This routine is invoked from the worker thread to handle a HBA host
1279 * attention link event.
1280 **/
dea3101e 1281void
2e0fef85 1282lpfc_handle_latt(struct lpfc_hba *phba)
dea3101e 1283{
2e0fef85
JS
1284 struct lpfc_vport *vport = phba->pport;
1285 struct lpfc_sli *psli = &phba->sli;
dea3101e 1286 LPFC_MBOXQ_t *pmb;
1287 volatile uint32_t control;
1288 struct lpfc_dmabuf *mp;
09372820 1289 int rc = 0;
dea3101e 1290
1291 pmb = (LPFC_MBOXQ_t *)mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
09372820
JS
1292 if (!pmb) {
1293 rc = 1;
dea3101e 1294 goto lpfc_handle_latt_err_exit;
09372820 1295 }
dea3101e 1296
1297 mp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
09372820
JS
1298 if (!mp) {
1299 rc = 2;
dea3101e 1300 goto lpfc_handle_latt_free_pmb;
09372820 1301 }
dea3101e 1302
1303 mp->virt = lpfc_mbuf_alloc(phba, 0, &mp->phys);
09372820
JS
1304 if (!mp->virt) {
1305 rc = 3;
dea3101e 1306 goto lpfc_handle_latt_free_mp;
09372820 1307 }
dea3101e 1308
6281bfe0 1309 /* Cleanup any outstanding ELS commands */
549e55cd 1310 lpfc_els_flush_all_cmd(phba);
dea3101e 1311
1312 psli->slistat.link_event++;
1313 lpfc_read_la(phba, pmb, mp);
1314 pmb->mbox_cmpl = lpfc_mbx_cmpl_read_la;
2e0fef85 1315 pmb->vport = vport;
0d2b6b83
JS
1316 /* Block ELS IOCBs until we have processed this mbox command */
1317 phba->sli.ring[LPFC_ELS_RING].flag |= LPFC_STOP_IOCB_EVENT;
0b727fea 1318 rc = lpfc_sli_issue_mbox (phba, pmb, MBX_NOWAIT);
09372820
JS
1319 if (rc == MBX_NOT_FINISHED) {
1320 rc = 4;
14691150 1321 goto lpfc_handle_latt_free_mbuf;
09372820 1322 }
dea3101e 1323
1324 /* Clear Link Attention in HA REG */
2e0fef85 1325 spin_lock_irq(&phba->hbalock);
dea3101e 1326 writel(HA_LATT, phba->HAregaddr);
1327 readl(phba->HAregaddr); /* flush */
2e0fef85 1328 spin_unlock_irq(&phba->hbalock);
dea3101e 1329
1330 return;
1331
14691150 1332lpfc_handle_latt_free_mbuf:
0d2b6b83 1333 phba->sli.ring[LPFC_ELS_RING].flag &= ~LPFC_STOP_IOCB_EVENT;
14691150 1334 lpfc_mbuf_free(phba, mp->virt, mp->phys);
dea3101e 1335lpfc_handle_latt_free_mp:
1336 kfree(mp);
1337lpfc_handle_latt_free_pmb:
1dcb58e5 1338 mempool_free(pmb, phba->mbox_mem_pool);
dea3101e 1339lpfc_handle_latt_err_exit:
1340 /* Enable Link attention interrupts */
2e0fef85 1341 spin_lock_irq(&phba->hbalock);
dea3101e 1342 psli->sli_flag |= LPFC_PROCESS_LA;
1343 control = readl(phba->HCregaddr);
1344 control |= HC_LAINT_ENA;
1345 writel(control, phba->HCregaddr);
1346 readl(phba->HCregaddr); /* flush */
1347
1348 /* Clear Link Attention in HA REG */
1349 writel(HA_LATT, phba->HAregaddr);
1350 readl(phba->HAregaddr); /* flush */
2e0fef85 1351 spin_unlock_irq(&phba->hbalock);
dea3101e 1352 lpfc_linkdown(phba);
2e0fef85 1353 phba->link_state = LPFC_HBA_ERROR;
dea3101e 1354
09372820
JS
1355 lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
1356 "0300 LATT: Cannot issue READ_LA: Data:%d\n", rc);
dea3101e 1357
1358 return;
1359}
1360
e59058c4 1361/**
3621a710 1362 * lpfc_parse_vpd - Parse VPD (Vital Product Data)
e59058c4
JS
1363 * @phba: pointer to lpfc hba data structure.
1364 * @vpd: pointer to the vital product data.
1365 * @len: length of the vital product data in bytes.
1366 *
1367 * This routine parses the Vital Product Data (VPD). The VPD is treated as
1368 * an array of characters. In this routine, the ModelName, ProgramType, and
1369 * ModelDesc, etc. fields of the phba data structure will be populated.
1370 *
1371 * Return codes
1372 * 0 - pointer to the VPD passed in is NULL
1373 * 1 - success
1374 **/
3772a991 1375int
2e0fef85 1376lpfc_parse_vpd(struct lpfc_hba *phba, uint8_t *vpd, int len)
dea3101e 1377{
1378 uint8_t lenlo, lenhi;
07da60c1 1379 int Length;
dea3101e 1380 int i, j;
1381 int finished = 0;
1382 int index = 0;
1383
1384 if (!vpd)
1385 return 0;
1386
1387 /* Vital Product */
ed957684 1388 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
e8b62011 1389 "0455 Vital Product Data: x%x x%x x%x x%x\n",
dea3101e 1390 (uint32_t) vpd[0], (uint32_t) vpd[1], (uint32_t) vpd[2],
1391 (uint32_t) vpd[3]);
74b72a59 1392 while (!finished && (index < (len - 4))) {
dea3101e 1393 switch (vpd[index]) {
1394 case 0x82:
74b72a59 1395 case 0x91:
dea3101e 1396 index += 1;
1397 lenlo = vpd[index];
1398 index += 1;
1399 lenhi = vpd[index];
1400 index += 1;
1401 i = ((((unsigned short)lenhi) << 8) + lenlo);
1402 index += i;
1403 break;
1404 case 0x90:
1405 index += 1;
1406 lenlo = vpd[index];
1407 index += 1;
1408 lenhi = vpd[index];
1409 index += 1;
1410 Length = ((((unsigned short)lenhi) << 8) + lenlo);
74b72a59
JW
1411 if (Length > len - index)
1412 Length = len - index;
dea3101e 1413 while (Length > 0) {
1414 /* Look for Serial Number */
1415 if ((vpd[index] == 'S') && (vpd[index+1] == 'N')) {
1416 index += 2;
1417 i = vpd[index];
1418 index += 1;
1419 j = 0;
1420 Length -= (3+i);
1421 while(i--) {
1422 phba->SerialNumber[j++] = vpd[index++];
1423 if (j == 31)
1424 break;
1425 }
1426 phba->SerialNumber[j] = 0;
1427 continue;
1428 }
1429 else if ((vpd[index] == 'V') && (vpd[index+1] == '1')) {
1430 phba->vpd_flag |= VPD_MODEL_DESC;
1431 index += 2;
1432 i = vpd[index];
1433 index += 1;
1434 j = 0;
1435 Length -= (3+i);
1436 while(i--) {
1437 phba->ModelDesc[j++] = vpd[index++];
1438 if (j == 255)
1439 break;
1440 }
1441 phba->ModelDesc[j] = 0;
1442 continue;
1443 }
1444 else if ((vpd[index] == 'V') && (vpd[index+1] == '2')) {
1445 phba->vpd_flag |= VPD_MODEL_NAME;
1446 index += 2;
1447 i = vpd[index];
1448 index += 1;
1449 j = 0;
1450 Length -= (3+i);
1451 while(i--) {
1452 phba->ModelName[j++] = vpd[index++];
1453 if (j == 79)
1454 break;
1455 }
1456 phba->ModelName[j] = 0;
1457 continue;
1458 }
1459 else if ((vpd[index] == 'V') && (vpd[index+1] == '3')) {
1460 phba->vpd_flag |= VPD_PROGRAM_TYPE;
1461 index += 2;
1462 i = vpd[index];
1463 index += 1;
1464 j = 0;
1465 Length -= (3+i);
1466 while(i--) {
1467 phba->ProgramType[j++] = vpd[index++];
1468 if (j == 255)
1469 break;
1470 }
1471 phba->ProgramType[j] = 0;
1472 continue;
1473 }
1474 else if ((vpd[index] == 'V') && (vpd[index+1] == '4')) {
1475 phba->vpd_flag |= VPD_PORT;
1476 index += 2;
1477 i = vpd[index];
1478 index += 1;
1479 j = 0;
1480 Length -= (3+i);
1481 while(i--) {
1482 phba->Port[j++] = vpd[index++];
1483 if (j == 19)
1484 break;
1485 }
1486 phba->Port[j] = 0;
1487 continue;
1488 }
1489 else {
1490 index += 2;
1491 i = vpd[index];
1492 index += 1;
1493 index += i;
1494 Length -= (3 + i);
1495 }
1496 }
1497 finished = 0;
1498 break;
1499 case 0x78:
1500 finished = 1;
1501 break;
1502 default:
1503 index ++;
1504 break;
1505 }
74b72a59 1506 }
dea3101e 1507
1508 return(1);
1509}
1510
e59058c4 1511/**
3621a710 1512 * lpfc_get_hba_model_desc - Retrieve HBA device model name and description
e59058c4
JS
1513 * @phba: pointer to lpfc hba data structure.
1514 * @mdp: pointer to the data structure to hold the derived model name.
1515 * @descp: pointer to the data structure to hold the derived description.
1516 *
1517 * This routine retrieves HBA's description based on its registered PCI device
1518 * ID. The @descp passed into this function points to an array of 256 chars. It
1519 * shall be returned with the model name, maximum speed, and the host bus type.
1520 * The @mdp passed into this function points to an array of 80 chars. When the
1521 * function returns, the @mdp will be filled with the model name.
1522 **/
dea3101e 1523static void
2e0fef85 1524lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
dea3101e 1525{
1526 lpfc_vpd_t *vp;
fefcb2b6 1527 uint16_t dev_id = phba->pcidev->device;
74b72a59 1528 int max_speed;
84774a4d 1529 int GE = 0;
da0436e9 1530 int oneConnect = 0; /* default is not a oneConnect */
74b72a59
JW
1531 struct {
1532 char * name;
1533 int max_speed;
74b72a59 1534 char * bus;
18a3b596 1535 } m = {"<Unknown>", 0, ""};
74b72a59
JW
1536
1537 if (mdp && mdp[0] != '\0'
1538 && descp && descp[0] != '\0')
1539 return;
1540
1541 if (phba->lmt & LMT_10Gb)
1542 max_speed = 10;
1543 else if (phba->lmt & LMT_8Gb)
1544 max_speed = 8;
1545 else if (phba->lmt & LMT_4Gb)
1546 max_speed = 4;
1547 else if (phba->lmt & LMT_2Gb)
1548 max_speed = 2;
1549 else
1550 max_speed = 1;
dea3101e 1551
1552 vp = &phba->vpd;
dea3101e 1553
e4adb204 1554 switch (dev_id) {
06325e74 1555 case PCI_DEVICE_ID_FIREFLY:
18a3b596 1556 m = (typeof(m)){"LP6000", max_speed, "PCI"};
06325e74 1557 break;
dea3101e 1558 case PCI_DEVICE_ID_SUPERFLY:
1559 if (vp->rev.biuRev >= 1 && vp->rev.biuRev <= 3)
18a3b596 1560 m = (typeof(m)){"LP7000", max_speed, "PCI"};
dea3101e 1561 else
18a3b596 1562 m = (typeof(m)){"LP7000E", max_speed, "PCI"};
dea3101e 1563 break;
1564 case PCI_DEVICE_ID_DRAGONFLY:
18a3b596 1565 m = (typeof(m)){"LP8000", max_speed, "PCI"};
dea3101e 1566 break;
1567 case PCI_DEVICE_ID_CENTAUR:
1568 if (FC_JEDEC_ID(vp->rev.biuRev) == CENTAUR_2G_JEDEC_ID)
18a3b596 1569 m = (typeof(m)){"LP9002", max_speed, "PCI"};
dea3101e 1570 else
18a3b596 1571 m = (typeof(m)){"LP9000", max_speed, "PCI"};
dea3101e 1572 break;
1573 case PCI_DEVICE_ID_RFLY:
18a3b596 1574 m = (typeof(m)){"LP952", max_speed, "PCI"};
dea3101e 1575 break;
1576 case PCI_DEVICE_ID_PEGASUS:
18a3b596 1577 m = (typeof(m)){"LP9802", max_speed, "PCI-X"};
dea3101e 1578 break;
1579 case PCI_DEVICE_ID_THOR:
18a3b596 1580 m = (typeof(m)){"LP10000", max_speed, "PCI-X"};
dea3101e 1581 break;
1582 case PCI_DEVICE_ID_VIPER:
18a3b596 1583 m = (typeof(m)){"LPX1000", max_speed, "PCI-X"};
dea3101e 1584 break;
1585 case PCI_DEVICE_ID_PFLY:
18a3b596 1586 m = (typeof(m)){"LP982", max_speed, "PCI-X"};
dea3101e 1587 break;
1588 case PCI_DEVICE_ID_TFLY:
18a3b596 1589 m = (typeof(m)){"LP1050", max_speed, "PCI-X"};
dea3101e 1590 break;
1591 case PCI_DEVICE_ID_HELIOS:
18a3b596 1592 m = (typeof(m)){"LP11000", max_speed, "PCI-X2"};
dea3101e 1593 break;
e4adb204 1594 case PCI_DEVICE_ID_HELIOS_SCSP:
18a3b596 1595 m = (typeof(m)){"LP11000-SP", max_speed, "PCI-X2"};
e4adb204
JSEC
1596 break;
1597 case PCI_DEVICE_ID_HELIOS_DCSP:
18a3b596 1598 m = (typeof(m)){"LP11002-SP", max_speed, "PCI-X2"};
e4adb204
JSEC
1599 break;
1600 case PCI_DEVICE_ID_NEPTUNE:
18a3b596 1601 m = (typeof(m)){"LPe1000", max_speed, "PCIe"};
e4adb204
JSEC
1602 break;
1603 case PCI_DEVICE_ID_NEPTUNE_SCSP:
18a3b596 1604 m = (typeof(m)){"LPe1000-SP", max_speed, "PCIe"};
e4adb204
JSEC
1605 break;
1606 case PCI_DEVICE_ID_NEPTUNE_DCSP:
18a3b596 1607 m = (typeof(m)){"LPe1002-SP", max_speed, "PCIe"};
e4adb204 1608 break;
dea3101e 1609 case PCI_DEVICE_ID_BMID:
18a3b596 1610 m = (typeof(m)){"LP1150", max_speed, "PCI-X2"};
dea3101e 1611 break;
1612 case PCI_DEVICE_ID_BSMB:
18a3b596 1613 m = (typeof(m)){"LP111", max_speed, "PCI-X2"};
dea3101e 1614 break;
1615 case PCI_DEVICE_ID_ZEPHYR:
18a3b596 1616 m = (typeof(m)){"LPe11000", max_speed, "PCIe"};
dea3101e 1617 break;
e4adb204 1618 case PCI_DEVICE_ID_ZEPHYR_SCSP:
18a3b596 1619 m = (typeof(m)){"LPe11000", max_speed, "PCIe"};
e4adb204
JSEC
1620 break;
1621 case PCI_DEVICE_ID_ZEPHYR_DCSP:
a257bf90
JS
1622 m = (typeof(m)){"LP2105", max_speed, "PCIe"};
1623 GE = 1;
e4adb204 1624 break;
dea3101e 1625 case PCI_DEVICE_ID_ZMID:
18a3b596 1626 m = (typeof(m)){"LPe1150", max_speed, "PCIe"};
dea3101e 1627 break;
1628 case PCI_DEVICE_ID_ZSMB:
18a3b596 1629 m = (typeof(m)){"LPe111", max_speed, "PCIe"};
dea3101e 1630 break;
1631 case PCI_DEVICE_ID_LP101:
18a3b596 1632 m = (typeof(m)){"LP101", max_speed, "PCI-X"};
dea3101e 1633 break;
1634 case PCI_DEVICE_ID_LP10000S:
18a3b596 1635 m = (typeof(m)){"LP10000-S", max_speed, "PCI"};
06325e74 1636 break;
e4adb204 1637 case PCI_DEVICE_ID_LP11000S:
18a3b596
JS
1638 m = (typeof(m)){"LP11000-S", max_speed,
1639 "PCI-X2"};
1640 break;
e4adb204 1641 case PCI_DEVICE_ID_LPE11000S:
18a3b596
JS
1642 m = (typeof(m)){"LPe11000-S", max_speed,
1643 "PCIe"};
5cc36b3c 1644 break;
b87eab38
JS
1645 case PCI_DEVICE_ID_SAT:
1646 m = (typeof(m)){"LPe12000", max_speed, "PCIe"};
1647 break;
1648 case PCI_DEVICE_ID_SAT_MID:
1649 m = (typeof(m)){"LPe1250", max_speed, "PCIe"};
1650 break;
1651 case PCI_DEVICE_ID_SAT_SMB:
1652 m = (typeof(m)){"LPe121", max_speed, "PCIe"};
1653 break;
1654 case PCI_DEVICE_ID_SAT_DCSP:
1655 m = (typeof(m)){"LPe12002-SP", max_speed, "PCIe"};
1656 break;
1657 case PCI_DEVICE_ID_SAT_SCSP:
1658 m = (typeof(m)){"LPe12000-SP", max_speed, "PCIe"};
1659 break;
1660 case PCI_DEVICE_ID_SAT_S:
1661 m = (typeof(m)){"LPe12000-S", max_speed, "PCIe"};
1662 break;
84774a4d
JS
1663 case PCI_DEVICE_ID_HORNET:
1664 m = (typeof(m)){"LP21000", max_speed, "PCIe"};
1665 GE = 1;
1666 break;
1667 case PCI_DEVICE_ID_PROTEUS_VF:
1668 m = (typeof(m)) {"LPev12000", max_speed, "PCIe IOV"};
1669 break;
1670 case PCI_DEVICE_ID_PROTEUS_PF:
1671 m = (typeof(m)) {"LPev12000", max_speed, "PCIe IOV"};
1672 break;
1673 case PCI_DEVICE_ID_PROTEUS_S:
1674 m = (typeof(m)) {"LPemv12002-S", max_speed, "PCIe IOV"};
1675 break;
da0436e9
JS
1676 case PCI_DEVICE_ID_TIGERSHARK:
1677 oneConnect = 1;
1678 m = (typeof(m)) {"OCe10100-F", max_speed, "PCIe"};
1679 break;
6669f9bb
JS
1680 case PCI_DEVICE_ID_TS_BE3:
1681 oneConnect = 1;
1682 m = (typeof(m)) {"OCeXXXXX-F", max_speed, "PCIe"};
1683 break;
5cc36b3c 1684 default:
041976fb 1685 m = (typeof(m)){ NULL };
e4adb204 1686 break;
dea3101e 1687 }
74b72a59
JW
1688
1689 if (mdp && mdp[0] == '\0')
1690 snprintf(mdp, 79,"%s", m.name);
da0436e9
JS
1691 /* oneConnect hba requires special processing, they are all initiators
1692 * and we put the port number on the end
1693 */
1694 if (descp && descp[0] == '\0') {
1695 if (oneConnect)
1696 snprintf(descp, 255,
1697 "Emulex OneConnect %s, FCoE Initiator, Port %s",
1698 m.name,
1699 phba->Port);
1700 else
1701 snprintf(descp, 255,
1702 "Emulex %s %d%s %s %s",
1703 m.name, m.max_speed,
1704 (GE) ? "GE" : "Gb",
1705 m.bus,
1706 (GE) ? "FCoE Adapter" :
1707 "Fibre Channel Adapter");
1708 }
dea3101e 1709}
1710
e59058c4 1711/**
3621a710 1712 * lpfc_post_buffer - Post IOCB(s) with DMA buffer descriptor(s) to a IOCB ring
e59058c4
JS
1713 * @phba: pointer to lpfc hba data structure.
1714 * @pring: pointer to a IOCB ring.
1715 * @cnt: the number of IOCBs to be posted to the IOCB ring.
1716 *
1717 * This routine posts a given number of IOCBs with the associated DMA buffer
1718 * descriptors specified by the cnt argument to the given IOCB ring.
1719 *
1720 * Return codes
1721 * The number of IOCBs NOT able to be posted to the IOCB ring.
1722 **/
dea3101e 1723int
495a714c 1724lpfc_post_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring, int cnt)
dea3101e 1725{
1726 IOCB_t *icmd;
0bd4ca25 1727 struct lpfc_iocbq *iocb;
dea3101e 1728 struct lpfc_dmabuf *mp1, *mp2;
1729
1730 cnt += pring->missbufcnt;
1731
1732 /* While there are buffers to post */
1733 while (cnt > 0) {
1734 /* Allocate buffer for command iocb */
0bd4ca25 1735 iocb = lpfc_sli_get_iocbq(phba);
dea3101e 1736 if (iocb == NULL) {
1737 pring->missbufcnt = cnt;
1738 return cnt;
1739 }
dea3101e 1740 icmd = &iocb->iocb;
1741
1742 /* 2 buffers can be posted per command */
1743 /* Allocate buffer to post */
1744 mp1 = kmalloc(sizeof (struct lpfc_dmabuf), GFP_KERNEL);
1745 if (mp1)
98c9ea5c
JS
1746 mp1->virt = lpfc_mbuf_alloc(phba, MEM_PRI, &mp1->phys);
1747 if (!mp1 || !mp1->virt) {
c9475cb0 1748 kfree(mp1);
604a3e30 1749 lpfc_sli_release_iocbq(phba, iocb);
dea3101e 1750 pring->missbufcnt = cnt;
1751 return cnt;
1752 }
1753
1754 INIT_LIST_HEAD(&mp1->list);
1755 /* Allocate buffer to post */
1756 if (cnt > 1) {
1757 mp2 = kmalloc(sizeof (struct lpfc_dmabuf), GFP_KERNEL);
1758 if (mp2)
1759 mp2->virt = lpfc_mbuf_alloc(phba, MEM_PRI,
1760 &mp2->phys);
98c9ea5c 1761 if (!mp2 || !mp2->virt) {
c9475cb0 1762 kfree(mp2);
dea3101e 1763 lpfc_mbuf_free(phba, mp1->virt, mp1->phys);
1764 kfree(mp1);
604a3e30 1765 lpfc_sli_release_iocbq(phba, iocb);
dea3101e 1766 pring->missbufcnt = cnt;
1767 return cnt;
1768 }
1769
1770 INIT_LIST_HEAD(&mp2->list);
1771 } else {
1772 mp2 = NULL;
1773 }
1774
1775 icmd->un.cont64[0].addrHigh = putPaddrHigh(mp1->phys);
1776 icmd->un.cont64[0].addrLow = putPaddrLow(mp1->phys);
1777 icmd->un.cont64[0].tus.f.bdeSize = FCELSSIZE;
1778 icmd->ulpBdeCount = 1;
1779 cnt--;
1780 if (mp2) {
1781 icmd->un.cont64[1].addrHigh = putPaddrHigh(mp2->phys);
1782 icmd->un.cont64[1].addrLow = putPaddrLow(mp2->phys);
1783 icmd->un.cont64[1].tus.f.bdeSize = FCELSSIZE;
1784 cnt--;
1785 icmd->ulpBdeCount = 2;
1786 }
1787
1788 icmd->ulpCommand = CMD_QUE_RING_BUF64_CN;
1789 icmd->ulpLe = 1;
1790
3772a991
JS
1791 if (lpfc_sli_issue_iocb(phba, pring->ringno, iocb, 0) ==
1792 IOCB_ERROR) {
dea3101e 1793 lpfc_mbuf_free(phba, mp1->virt, mp1->phys);
1794 kfree(mp1);
1795 cnt++;
1796 if (mp2) {
1797 lpfc_mbuf_free(phba, mp2->virt, mp2->phys);
1798 kfree(mp2);
1799 cnt++;
1800 }
604a3e30 1801 lpfc_sli_release_iocbq(phba, iocb);
dea3101e 1802 pring->missbufcnt = cnt;
dea3101e 1803 return cnt;
1804 }
dea3101e 1805 lpfc_sli_ringpostbuf_put(phba, pring, mp1);
92d7f7b0 1806 if (mp2)
dea3101e 1807 lpfc_sli_ringpostbuf_put(phba, pring, mp2);
dea3101e 1808 }
1809 pring->missbufcnt = 0;
1810 return 0;
1811}
1812
e59058c4 1813/**
3621a710 1814 * lpfc_post_rcv_buf - Post the initial receive IOCB buffers to ELS ring
e59058c4
JS
1815 * @phba: pointer to lpfc hba data structure.
1816 *
1817 * This routine posts initial receive IOCB buffers to the ELS ring. The
1818 * current number of initial IOCB buffers specified by LPFC_BUF_RING0 is
1819 * set to 64 IOCBs.
1820 *
1821 * Return codes
1822 * 0 - success (currently always success)
1823 **/
dea3101e 1824static int
2e0fef85 1825lpfc_post_rcv_buf(struct lpfc_hba *phba)
dea3101e 1826{
1827 struct lpfc_sli *psli = &phba->sli;
1828
1829 /* Ring 0, ELS / CT buffers */
495a714c 1830 lpfc_post_buffer(phba, &psli->ring[LPFC_ELS_RING], LPFC_BUF_RING0);
dea3101e 1831 /* Ring 2 - FCP no buffers needed */
1832
1833 return 0;
1834}
1835
1836#define S(N,V) (((V)<<(N))|((V)>>(32-(N))))
1837
e59058c4 1838/**
3621a710 1839 * lpfc_sha_init - Set up initial array of hash table entries
e59058c4
JS
1840 * @HashResultPointer: pointer to an array as hash table.
1841 *
1842 * This routine sets up the initial values to the array of hash table entries
1843 * for the LC HBAs.
1844 **/
dea3101e 1845static void
1846lpfc_sha_init(uint32_t * HashResultPointer)
1847{
1848 HashResultPointer[0] = 0x67452301;
1849 HashResultPointer[1] = 0xEFCDAB89;
1850 HashResultPointer[2] = 0x98BADCFE;
1851 HashResultPointer[3] = 0x10325476;
1852 HashResultPointer[4] = 0xC3D2E1F0;
1853}
1854
e59058c4 1855/**
3621a710 1856 * lpfc_sha_iterate - Iterate initial hash table with the working hash table
e59058c4
JS
1857 * @HashResultPointer: pointer to an initial/result hash table.
1858 * @HashWorkingPointer: pointer to an working hash table.
1859 *
1860 * This routine iterates an initial hash table pointed by @HashResultPointer
1861 * with the values from the working hash table pointeed by @HashWorkingPointer.
1862 * The results are putting back to the initial hash table, returned through
1863 * the @HashResultPointer as the result hash table.
1864 **/
dea3101e 1865static void
1866lpfc_sha_iterate(uint32_t * HashResultPointer, uint32_t * HashWorkingPointer)
1867{
1868 int t;
1869 uint32_t TEMP;
1870 uint32_t A, B, C, D, E;
1871 t = 16;
1872 do {
1873 HashWorkingPointer[t] =
1874 S(1,
1875 HashWorkingPointer[t - 3] ^ HashWorkingPointer[t -
1876 8] ^
1877 HashWorkingPointer[t - 14] ^ HashWorkingPointer[t - 16]);
1878 } while (++t <= 79);
1879 t = 0;
1880 A = HashResultPointer[0];
1881 B = HashResultPointer[1];
1882 C = HashResultPointer[2];
1883 D = HashResultPointer[3];
1884 E = HashResultPointer[4];
1885
1886 do {
1887 if (t < 20) {
1888 TEMP = ((B & C) | ((~B) & D)) + 0x5A827999;
1889 } else if (t < 40) {
1890 TEMP = (B ^ C ^ D) + 0x6ED9EBA1;
1891 } else if (t < 60) {
1892 TEMP = ((B & C) | (B & D) | (C & D)) + 0x8F1BBCDC;
1893 } else {
1894 TEMP = (B ^ C ^ D) + 0xCA62C1D6;
1895 }
1896 TEMP += S(5, A) + E + HashWorkingPointer[t];
1897 E = D;
1898 D = C;
1899 C = S(30, B);
1900 B = A;
1901 A = TEMP;
1902 } while (++t <= 79);
1903
1904 HashResultPointer[0] += A;
1905 HashResultPointer[1] += B;
1906 HashResultPointer[2] += C;
1907 HashResultPointer[3] += D;
1908 HashResultPointer[4] += E;
1909
1910}
1911
e59058c4 1912/**
3621a710 1913 * lpfc_challenge_key - Create challenge key based on WWPN of the HBA
e59058c4
JS
1914 * @RandomChallenge: pointer to the entry of host challenge random number array.
1915 * @HashWorking: pointer to the entry of the working hash array.
1916 *
1917 * This routine calculates the working hash array referred by @HashWorking
1918 * from the challenge random numbers associated with the host, referred by
1919 * @RandomChallenge. The result is put into the entry of the working hash
1920 * array and returned by reference through @HashWorking.
1921 **/
dea3101e 1922static void
1923lpfc_challenge_key(uint32_t * RandomChallenge, uint32_t * HashWorking)
1924{
1925 *HashWorking = (*RandomChallenge ^ *HashWorking);
1926}
1927
e59058c4 1928/**
3621a710 1929 * lpfc_hba_init - Perform special handling for LC HBA initialization
e59058c4
JS
1930 * @phba: pointer to lpfc hba data structure.
1931 * @hbainit: pointer to an array of unsigned 32-bit integers.
1932 *
1933 * This routine performs the special handling for LC HBA initialization.
1934 **/
dea3101e 1935void
1936lpfc_hba_init(struct lpfc_hba *phba, uint32_t *hbainit)
1937{
1938 int t;
1939 uint32_t *HashWorking;
2e0fef85 1940 uint32_t *pwwnn = (uint32_t *) phba->wwnn;
dea3101e 1941
bbfbbbc1 1942 HashWorking = kcalloc(80, sizeof(uint32_t), GFP_KERNEL);
dea3101e 1943 if (!HashWorking)
1944 return;
1945
dea3101e 1946 HashWorking[0] = HashWorking[78] = *pwwnn++;
1947 HashWorking[1] = HashWorking[79] = *pwwnn;
1948
1949 for (t = 0; t < 7; t++)
1950 lpfc_challenge_key(phba->RandomData + t, HashWorking + t);
1951
1952 lpfc_sha_init(hbainit);
1953 lpfc_sha_iterate(hbainit, HashWorking);
1954 kfree(HashWorking);
1955}
1956
e59058c4 1957/**
3621a710 1958 * lpfc_cleanup - Performs vport cleanups before deleting a vport
e59058c4
JS
1959 * @vport: pointer to a virtual N_Port data structure.
1960 *
1961 * This routine performs the necessary cleanups before deleting the @vport.
1962 * It invokes the discovery state machine to perform necessary state
1963 * transitions and to release the ndlps associated with the @vport. Note,
1964 * the physical port is treated as @vport 0.
1965 **/
87af33fe 1966void
2e0fef85 1967lpfc_cleanup(struct lpfc_vport *vport)
dea3101e 1968{
87af33fe 1969 struct lpfc_hba *phba = vport->phba;
dea3101e 1970 struct lpfc_nodelist *ndlp, *next_ndlp;
a8adb832 1971 int i = 0;
dea3101e 1972
87af33fe
JS
1973 if (phba->link_state > LPFC_LINK_DOWN)
1974 lpfc_port_link_failure(vport);
1975
1976 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) {
e47c9093
JS
1977 if (!NLP_CHK_NODE_ACT(ndlp)) {
1978 ndlp = lpfc_enable_node(vport, ndlp,
1979 NLP_STE_UNUSED_NODE);
1980 if (!ndlp)
1981 continue;
1982 spin_lock_irq(&phba->ndlp_lock);
1983 NLP_SET_FREE_REQ(ndlp);
1984 spin_unlock_irq(&phba->ndlp_lock);
1985 /* Trigger the release of the ndlp memory */
1986 lpfc_nlp_put(ndlp);
1987 continue;
1988 }
1989 spin_lock_irq(&phba->ndlp_lock);
1990 if (NLP_CHK_FREE_REQ(ndlp)) {
1991 /* The ndlp should not be in memory free mode already */
1992 spin_unlock_irq(&phba->ndlp_lock);
1993 continue;
1994 } else
1995 /* Indicate request for freeing ndlp memory */
1996 NLP_SET_FREE_REQ(ndlp);
1997 spin_unlock_irq(&phba->ndlp_lock);
1998
58da1ffb
JS
1999 if (vport->port_type != LPFC_PHYSICAL_PORT &&
2000 ndlp->nlp_DID == Fabric_DID) {
2001 /* Just free up ndlp with Fabric_DID for vports */
2002 lpfc_nlp_put(ndlp);
2003 continue;
2004 }
2005
87af33fe
JS
2006 if (ndlp->nlp_type & NLP_FABRIC)
2007 lpfc_disc_state_machine(vport, ndlp, NULL,
2008 NLP_EVT_DEVICE_RECOVERY);
e47c9093 2009
87af33fe
JS
2010 lpfc_disc_state_machine(vport, ndlp, NULL,
2011 NLP_EVT_DEVICE_RM);
495a714c 2012
87af33fe
JS
2013 }
2014
a8adb832
JS
2015 /* At this point, ALL ndlp's should be gone
2016 * because of the previous NLP_EVT_DEVICE_RM.
2017 * Lets wait for this to happen, if needed.
2018 */
87af33fe 2019 while (!list_empty(&vport->fc_nodes)) {
a8adb832 2020 if (i++ > 3000) {
87af33fe 2021 lpfc_printf_vlog(vport, KERN_ERR, LOG_DISCOVERY,
a8adb832 2022 "0233 Nodelist not empty\n");
e47c9093
JS
2023 list_for_each_entry_safe(ndlp, next_ndlp,
2024 &vport->fc_nodes, nlp_listp) {
2025 lpfc_printf_vlog(ndlp->vport, KERN_ERR,
2026 LOG_NODE,
d7c255b2 2027 "0282 did:x%x ndlp:x%p "
e47c9093
JS
2028 "usgmap:x%x refcnt:%d\n",
2029 ndlp->nlp_DID, (void *)ndlp,
2030 ndlp->nlp_usg_map,
2031 atomic_read(
2032 &ndlp->kref.refcount));
2033 }
a8adb832 2034 break;
87af33fe 2035 }
a8adb832
JS
2036
2037 /* Wait for any activity on ndlps to settle */
2038 msleep(10);
87af33fe 2039 }
dea3101e 2040}
2041
e59058c4 2042/**
3621a710 2043 * lpfc_stop_vport_timers - Stop all the timers associated with a vport
e59058c4
JS
2044 * @vport: pointer to a virtual N_Port data structure.
2045 *
2046 * This routine stops all the timers associated with a @vport. This function
2047 * is invoked before disabling or deleting a @vport. Note that the physical
2048 * port is treated as @vport 0.
2049 **/
92d7f7b0
JS
2050void
2051lpfc_stop_vport_timers(struct lpfc_vport *vport)
dea3101e 2052{
92d7f7b0
JS
2053 del_timer_sync(&vport->els_tmofunc);
2054 del_timer_sync(&vport->fc_fdmitmo);
2055 lpfc_can_disctmo(vport);
2056 return;
dea3101e 2057}
2058
e59058c4 2059/**
3772a991 2060 * lpfc_stop_hba_timers - Stop all the timers associated with an HBA
e59058c4
JS
2061 * @phba: pointer to lpfc hba data structure.
2062 *
2063 * This routine stops all the timers associated with a HBA. This function is
2064 * invoked before either putting a HBA offline or unloading the driver.
2065 **/
3772a991
JS
2066void
2067lpfc_stop_hba_timers(struct lpfc_hba *phba)
dea3101e 2068{
51ef4c26 2069 lpfc_stop_vport_timers(phba->pport);
2e0fef85 2070 del_timer_sync(&phba->sli.mbox_tmo);
92d7f7b0 2071 del_timer_sync(&phba->fabric_block_timer);
9399627f 2072 del_timer_sync(&phba->eratt_poll);
3772a991
JS
2073 del_timer_sync(&phba->hb_tmofunc);
2074 phba->hb_outstanding = 0;
2075
2076 switch (phba->pci_dev_grp) {
2077 case LPFC_PCI_DEV_LP:
2078 /* Stop any LightPulse device specific driver timers */
2079 del_timer_sync(&phba->fcp_poll_timer);
2080 break;
2081 case LPFC_PCI_DEV_OC:
2082 /* Stop any OneConnect device sepcific driver timers */
2083 break;
2084 default:
2085 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2086 "0297 Invalid device group (x%x)\n",
2087 phba->pci_dev_grp);
2088 break;
2089 }
2e0fef85 2090 return;
dea3101e 2091}
2092
e59058c4 2093/**
3621a710 2094 * lpfc_block_mgmt_io - Mark a HBA's management interface as blocked
e59058c4
JS
2095 * @phba: pointer to lpfc hba data structure.
2096 *
2097 * This routine marks a HBA's management interface as blocked. Once the HBA's
2098 * management interface is marked as blocked, all the user space access to
2099 * the HBA, whether they are from sysfs interface or libdfc interface will
2100 * all be blocked. The HBA is set to block the management interface when the
2101 * driver prepares the HBA interface for online or offline.
2102 **/
a6ababd2
AB
2103static void
2104lpfc_block_mgmt_io(struct lpfc_hba * phba)
2105{
2106 unsigned long iflag;
2107
2108 spin_lock_irqsave(&phba->hbalock, iflag);
2109 phba->sli.sli_flag |= LPFC_BLOCK_MGMT_IO;
2110 spin_unlock_irqrestore(&phba->hbalock, iflag);
2111}
2112
e59058c4 2113/**
3621a710 2114 * lpfc_online - Initialize and bring a HBA online
e59058c4
JS
2115 * @phba: pointer to lpfc hba data structure.
2116 *
2117 * This routine initializes the HBA and brings a HBA online. During this
2118 * process, the management interface is blocked to prevent user space access
2119 * to the HBA interfering with the driver initialization.
2120 *
2121 * Return codes
2122 * 0 - successful
2123 * 1 - failed
2124 **/
dea3101e 2125int
2e0fef85 2126lpfc_online(struct lpfc_hba *phba)
dea3101e 2127{
372bd282 2128 struct lpfc_vport *vport;
549e55cd
JS
2129 struct lpfc_vport **vports;
2130 int i;
2e0fef85 2131
dea3101e 2132 if (!phba)
2133 return 0;
372bd282 2134 vport = phba->pport;
dea3101e 2135
2e0fef85 2136 if (!(vport->fc_flag & FC_OFFLINE_MODE))
dea3101e 2137 return 0;
2138
ed957684 2139 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
e8b62011 2140 "0458 Bring Adapter online\n");
dea3101e 2141
46fa311e
JS
2142 lpfc_block_mgmt_io(phba);
2143
2144 if (!lpfc_sli_queue_setup(phba)) {
2145 lpfc_unblock_mgmt_io(phba);
dea3101e 2146 return 1;
46fa311e 2147 }
dea3101e 2148
da0436e9
JS
2149 if (phba->sli_rev == LPFC_SLI_REV4) {
2150 if (lpfc_sli4_hba_setup(phba)) { /* Initialize SLI4 HBA */
2151 lpfc_unblock_mgmt_io(phba);
2152 return 1;
2153 }
2154 } else {
2155 if (lpfc_sli_hba_setup(phba)) { /* Initialize SLI2/SLI3 HBA */
2156 lpfc_unblock_mgmt_io(phba);
2157 return 1;
2158 }
46fa311e 2159 }
dea3101e 2160
549e55cd
JS
2161 vports = lpfc_create_vport_work_array(phba);
2162 if (vports != NULL)
da0436e9 2163 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) {
549e55cd
JS
2164 struct Scsi_Host *shost;
2165 shost = lpfc_shost_from_vport(vports[i]);
2166 spin_lock_irq(shost->host_lock);
2167 vports[i]->fc_flag &= ~FC_OFFLINE_MODE;
2168 if (phba->sli3_options & LPFC_SLI3_NPIV_ENABLED)
2169 vports[i]->fc_flag |= FC_VPORT_NEEDS_REG_VPI;
1c6834a7
JS
2170 if (phba->sli_rev == LPFC_SLI_REV4)
2171 vports[i]->fc_flag |= FC_VPORT_NEEDS_INIT_VPI;
549e55cd
JS
2172 spin_unlock_irq(shost->host_lock);
2173 }
09372820 2174 lpfc_destroy_vport_work_array(phba, vports);
dea3101e 2175
46fa311e 2176 lpfc_unblock_mgmt_io(phba);
dea3101e 2177 return 0;
2178}
2179
e59058c4 2180/**
3621a710 2181 * lpfc_unblock_mgmt_io - Mark a HBA's management interface to be not blocked
e59058c4
JS
2182 * @phba: pointer to lpfc hba data structure.
2183 *
2184 * This routine marks a HBA's management interface as not blocked. Once the
2185 * HBA's management interface is marked as not blocked, all the user space
2186 * access to the HBA, whether they are from sysfs interface or libdfc
2187 * interface will be allowed. The HBA is set to block the management interface
2188 * when the driver prepares the HBA interface for online or offline and then
2189 * set to unblock the management interface afterwards.
2190 **/
46fa311e
JS
2191void
2192lpfc_unblock_mgmt_io(struct lpfc_hba * phba)
2193{
2194 unsigned long iflag;
2195
2e0fef85
JS
2196 spin_lock_irqsave(&phba->hbalock, iflag);
2197 phba->sli.sli_flag &= ~LPFC_BLOCK_MGMT_IO;
2198 spin_unlock_irqrestore(&phba->hbalock, iflag);
46fa311e
JS
2199}
2200
e59058c4 2201/**
3621a710 2202 * lpfc_offline_prep - Prepare a HBA to be brought offline
e59058c4
JS
2203 * @phba: pointer to lpfc hba data structure.
2204 *
2205 * This routine is invoked to prepare a HBA to be brought offline. It performs
2206 * unregistration login to all the nodes on all vports and flushes the mailbox
2207 * queue to make it ready to be brought offline.
2208 **/
46fa311e
JS
2209void
2210lpfc_offline_prep(struct lpfc_hba * phba)
2211{
2e0fef85 2212 struct lpfc_vport *vport = phba->pport;
46fa311e 2213 struct lpfc_nodelist *ndlp, *next_ndlp;
87af33fe
JS
2214 struct lpfc_vport **vports;
2215 int i;
dea3101e 2216
2e0fef85 2217 if (vport->fc_flag & FC_OFFLINE_MODE)
46fa311e 2218 return;
dea3101e 2219
46fa311e 2220 lpfc_block_mgmt_io(phba);
dea3101e 2221
2222 lpfc_linkdown(phba);
2223
87af33fe
JS
2224 /* Issue an unreg_login to all nodes on all vports */
2225 vports = lpfc_create_vport_work_array(phba);
2226 if (vports != NULL) {
da0436e9 2227 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) {
87af33fe
JS
2228 struct Scsi_Host *shost;
2229
a8adb832
JS
2230 if (vports[i]->load_flag & FC_UNLOADING)
2231 continue;
da0436e9 2232 vports[i]->vfi_state &= ~LPFC_VFI_REGISTERED;
87af33fe
JS
2233 shost = lpfc_shost_from_vport(vports[i]);
2234 list_for_each_entry_safe(ndlp, next_ndlp,
2235 &vports[i]->fc_nodes,
2236 nlp_listp) {
e47c9093
JS
2237 if (!NLP_CHK_NODE_ACT(ndlp))
2238 continue;
87af33fe
JS
2239 if (ndlp->nlp_state == NLP_STE_UNUSED_NODE)
2240 continue;
2241 if (ndlp->nlp_type & NLP_FABRIC) {
2242 lpfc_disc_state_machine(vports[i], ndlp,
2243 NULL, NLP_EVT_DEVICE_RECOVERY);
2244 lpfc_disc_state_machine(vports[i], ndlp,
2245 NULL, NLP_EVT_DEVICE_RM);
2246 }
2247 spin_lock_irq(shost->host_lock);
2248 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
2249 spin_unlock_irq(shost->host_lock);
2250 lpfc_unreg_rpi(vports[i], ndlp);
2251 }
2252 }
2253 }
09372820 2254 lpfc_destroy_vport_work_array(phba, vports);
dea3101e 2255
04c68496 2256 lpfc_sli_mbox_sys_shutdown(phba);
46fa311e
JS
2257}
2258
e59058c4 2259/**
3621a710 2260 * lpfc_offline - Bring a HBA offline
e59058c4
JS
2261 * @phba: pointer to lpfc hba data structure.
2262 *
2263 * This routine actually brings a HBA offline. It stops all the timers
2264 * associated with the HBA, brings down the SLI layer, and eventually
2265 * marks the HBA as in offline state for the upper layer protocol.
2266 **/
46fa311e 2267void
2e0fef85 2268lpfc_offline(struct lpfc_hba *phba)
46fa311e 2269{
549e55cd
JS
2270 struct Scsi_Host *shost;
2271 struct lpfc_vport **vports;
2272 int i;
46fa311e 2273
549e55cd 2274 if (phba->pport->fc_flag & FC_OFFLINE_MODE)
46fa311e 2275 return;
688a8863 2276
da0436e9
JS
2277 /* stop port and all timers associated with this hba */
2278 lpfc_stop_port(phba);
51ef4c26
JS
2279 vports = lpfc_create_vport_work_array(phba);
2280 if (vports != NULL)
da0436e9 2281 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++)
51ef4c26 2282 lpfc_stop_vport_timers(vports[i]);
09372820 2283 lpfc_destroy_vport_work_array(phba, vports);
92d7f7b0 2284 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
e8b62011 2285 "0460 Bring Adapter offline\n");
dea3101e 2286 /* Bring down the SLI Layer and cleanup. The HBA is offline
2287 now. */
2288 lpfc_sli_hba_down(phba);
92d7f7b0 2289 spin_lock_irq(&phba->hbalock);
7054a606 2290 phba->work_ha = 0;
92d7f7b0 2291 spin_unlock_irq(&phba->hbalock);
549e55cd
JS
2292 vports = lpfc_create_vport_work_array(phba);
2293 if (vports != NULL)
da0436e9 2294 for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) {
549e55cd 2295 shost = lpfc_shost_from_vport(vports[i]);
549e55cd
JS
2296 spin_lock_irq(shost->host_lock);
2297 vports[i]->work_port_events = 0;
2298 vports[i]->fc_flag |= FC_OFFLINE_MODE;
2299 spin_unlock_irq(shost->host_lock);
2300 }
09372820 2301 lpfc_destroy_vport_work_array(phba, vports);
dea3101e 2302}
2303
e59058c4 2304/**
3621a710 2305 * lpfc_scsi_free - Free all the SCSI buffers and IOCBs from driver lists
e59058c4
JS
2306 * @phba: pointer to lpfc hba data structure.
2307 *
2308 * This routine is to free all the SCSI buffers and IOCBs from the driver
2309 * list back to kernel. It is called from lpfc_pci_remove_one to free
2310 * the internal resources before the device is removed from the system.
2311 *
2312 * Return codes
2313 * 0 - successful (for now, it always returns 0)
2314 **/
dea3101e 2315static int
2e0fef85 2316lpfc_scsi_free(struct lpfc_hba *phba)
dea3101e 2317{
2318 struct lpfc_scsi_buf *sb, *sb_next;
2319 struct lpfc_iocbq *io, *io_next;
2320
2e0fef85 2321 spin_lock_irq(&phba->hbalock);
dea3101e 2322 /* Release all the lpfc_scsi_bufs maintained by this host. */
2323 list_for_each_entry_safe(sb, sb_next, &phba->lpfc_scsi_buf_list, list) {
2324 list_del(&sb->list);
2325 pci_pool_free(phba->lpfc_scsi_dma_buf_pool, sb->data,
92d7f7b0 2326 sb->dma_handle);
dea3101e 2327 kfree(sb);
2328 phba->total_scsi_bufs--;
2329 }
2330
2331 /* Release all the lpfc_iocbq entries maintained by this host. */
2332 list_for_each_entry_safe(io, io_next, &phba->lpfc_iocb_list, list) {
2333 list_del(&io->list);
2334 kfree(io);
2335 phba->total_iocbq_bufs--;
2336 }
2337
2e0fef85 2338 spin_unlock_irq(&phba->hbalock);
dea3101e 2339
2340 return 0;
2341}
2342
e59058c4 2343/**
3621a710 2344 * lpfc_create_port - Create an FC port
e59058c4
JS
2345 * @phba: pointer to lpfc hba data structure.
2346 * @instance: a unique integer ID to this FC port.
2347 * @dev: pointer to the device data structure.
2348 *
2349 * This routine creates a FC port for the upper layer protocol. The FC port
2350 * can be created on top of either a physical port or a virtual port provided
2351 * by the HBA. This routine also allocates a SCSI host data structure (shost)
2352 * and associates the FC port created before adding the shost into the SCSI
2353 * layer.
2354 *
2355 * Return codes
2356 * @vport - pointer to the virtual N_Port data structure.
2357 * NULL - port create failed.
2358 **/
2e0fef85 2359struct lpfc_vport *
3de2a653 2360lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev)
47a8617c 2361{
2e0fef85
JS
2362 struct lpfc_vport *vport;
2363 struct Scsi_Host *shost;
2364 int error = 0;
47a8617c 2365
3de2a653
JS
2366 if (dev != &phba->pcidev->dev)
2367 shost = scsi_host_alloc(&lpfc_vport_template,
2368 sizeof(struct lpfc_vport));
2369 else
2370 shost = scsi_host_alloc(&lpfc_template,
2371 sizeof(struct lpfc_vport));
2e0fef85
JS
2372 if (!shost)
2373 goto out;
47a8617c 2374
2e0fef85
JS
2375 vport = (struct lpfc_vport *) shost->hostdata;
2376 vport->phba = phba;
2e0fef85 2377 vport->load_flag |= FC_LOADING;
92d7f7b0 2378 vport->fc_flag |= FC_VPORT_NEEDS_REG_VPI;
7f5f3d0d 2379 vport->fc_rscn_flush = 0;
47a8617c 2380
3de2a653 2381 lpfc_get_vport_cfgparam(vport);
2e0fef85
JS
2382 shost->unique_id = instance;
2383 shost->max_id = LPFC_MAX_TARGET;
3de2a653 2384 shost->max_lun = vport->cfg_max_luns;
2e0fef85
JS
2385 shost->this_id = -1;
2386 shost->max_cmd_len = 16;
da0436e9
JS
2387 if (phba->sli_rev == LPFC_SLI_REV4) {
2388 shost->dma_boundary = LPFC_SLI4_MAX_SEGMENT_SIZE;
2389 shost->sg_tablesize = phba->cfg_sg_seg_cnt;
2390 }
81301a9b 2391
47a8617c 2392 /*
2e0fef85
JS
2393 * Set initial can_queue value since 0 is no longer supported and
2394 * scsi_add_host will fail. This will be adjusted later based on the
2395 * max xri value determined in hba setup.
47a8617c 2396 */
2e0fef85 2397 shost->can_queue = phba->cfg_hba_queue_depth - 10;
3de2a653 2398 if (dev != &phba->pcidev->dev) {
92d7f7b0
JS
2399 shost->transportt = lpfc_vport_transport_template;
2400 vport->port_type = LPFC_NPIV_PORT;
2401 } else {
2402 shost->transportt = lpfc_transport_template;
2403 vport->port_type = LPFC_PHYSICAL_PORT;
2404 }
47a8617c 2405
2e0fef85
JS
2406 /* Initialize all internally managed lists. */
2407 INIT_LIST_HEAD(&vport->fc_nodes);
da0436e9 2408 INIT_LIST_HEAD(&vport->rcv_buffer_list);
2e0fef85 2409 spin_lock_init(&vport->work_port_lock);
47a8617c 2410
2e0fef85
JS
2411 init_timer(&vport->fc_disctmo);
2412 vport->fc_disctmo.function = lpfc_disc_timeout;
92d7f7b0 2413 vport->fc_disctmo.data = (unsigned long)vport;
47a8617c 2414
2e0fef85
JS
2415 init_timer(&vport->fc_fdmitmo);
2416 vport->fc_fdmitmo.function = lpfc_fdmi_tmo;
92d7f7b0 2417 vport->fc_fdmitmo.data = (unsigned long)vport;
47a8617c 2418
2e0fef85
JS
2419 init_timer(&vport->els_tmofunc);
2420 vport->els_tmofunc.function = lpfc_els_timeout;
92d7f7b0 2421 vport->els_tmofunc.data = (unsigned long)vport;
47a8617c 2422
d139b9bd 2423 error = scsi_add_host_with_dma(shost, dev, &phba->pcidev->dev);
2e0fef85
JS
2424 if (error)
2425 goto out_put_shost;
47a8617c 2426
549e55cd 2427 spin_lock_irq(&phba->hbalock);
2e0fef85 2428 list_add_tail(&vport->listentry, &phba->port_list);
549e55cd 2429 spin_unlock_irq(&phba->hbalock);
2e0fef85 2430 return vport;
47a8617c 2431
2e0fef85
JS
2432out_put_shost:
2433 scsi_host_put(shost);
2434out:
2435 return NULL;
47a8617c
JS
2436}
2437
e59058c4 2438/**
3621a710 2439 * destroy_port - destroy an FC port
e59058c4
JS
2440 * @vport: pointer to an lpfc virtual N_Port data structure.
2441 *
2442 * This routine destroys a FC port from the upper layer protocol. All the
2443 * resources associated with the port are released.
2444 **/
2e0fef85
JS
2445void
2446destroy_port(struct lpfc_vport *vport)
47a8617c 2447{
92d7f7b0
JS
2448 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
2449 struct lpfc_hba *phba = vport->phba;
47a8617c 2450
858c9f6c 2451 lpfc_debugfs_terminate(vport);
92d7f7b0
JS
2452 fc_remove_host(shost);
2453 scsi_remove_host(shost);
47a8617c 2454
92d7f7b0
JS
2455 spin_lock_irq(&phba->hbalock);
2456 list_del_init(&vport->listentry);
2457 spin_unlock_irq(&phba->hbalock);
47a8617c 2458
92d7f7b0 2459 lpfc_cleanup(vport);
47a8617c 2460 return;
47a8617c
JS
2461}
2462
e59058c4 2463/**
3621a710 2464 * lpfc_get_instance - Get a unique integer ID
e59058c4
JS
2465 *
2466 * This routine allocates a unique integer ID from lpfc_hba_index pool. It
2467 * uses the kernel idr facility to perform the task.
2468 *
2469 * Return codes:
2470 * instance - a unique integer ID allocated as the new instance.
2471 * -1 - lpfc get instance failed.
2472 **/
92d7f7b0
JS
2473int
2474lpfc_get_instance(void)
2475{
2476 int instance = 0;
47a8617c 2477
92d7f7b0
JS
2478 /* Assign an unused number */
2479 if (!idr_pre_get(&lpfc_hba_index, GFP_KERNEL))
2480 return -1;
2481 if (idr_get_new(&lpfc_hba_index, NULL, &instance))
2482 return -1;
2483 return instance;
47a8617c
JS
2484}
2485
e59058c4 2486/**
3621a710 2487 * lpfc_scan_finished - method for SCSI layer to detect whether scan is done
e59058c4
JS
2488 * @shost: pointer to SCSI host data structure.
2489 * @time: elapsed time of the scan in jiffies.
2490 *
2491 * This routine is called by the SCSI layer with a SCSI host to determine
2492 * whether the scan host is finished.
2493 *
2494 * Note: there is no scan_start function as adapter initialization will have
2495 * asynchronously kicked off the link initialization.
2496 *
2497 * Return codes
2498 * 0 - SCSI host scan is not over yet.
2499 * 1 - SCSI host scan is over.
2500 **/
47a8617c
JS
2501int lpfc_scan_finished(struct Scsi_Host *shost, unsigned long time)
2502{
2e0fef85
JS
2503 struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
2504 struct lpfc_hba *phba = vport->phba;
858c9f6c 2505 int stat = 0;
47a8617c 2506
858c9f6c
JS
2507 spin_lock_irq(shost->host_lock);
2508
51ef4c26 2509 if (vport->load_flag & FC_UNLOADING) {
858c9f6c
JS
2510 stat = 1;
2511 goto finished;
2512 }
2e0fef85
JS
2513 if (time >= 30 * HZ) {
2514 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
e8b62011
JS
2515 "0461 Scanning longer than 30 "
2516 "seconds. Continuing initialization\n");
858c9f6c 2517 stat = 1;
47a8617c 2518 goto finished;
2e0fef85
JS
2519 }
2520 if (time >= 15 * HZ && phba->link_state <= LPFC_LINK_DOWN) {
2521 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
e8b62011
JS
2522 "0465 Link down longer than 15 "
2523 "seconds. Continuing initialization\n");
858c9f6c 2524 stat = 1;
47a8617c 2525 goto finished;
2e0fef85 2526 }
47a8617c 2527
2e0fef85 2528 if (vport->port_state != LPFC_VPORT_READY)
858c9f6c 2529 goto finished;
2e0fef85 2530 if (vport->num_disc_nodes || vport->fc_prli_sent)
858c9f6c 2531 goto finished;
2e0fef85 2532 if (vport->fc_map_cnt == 0 && time < 2 * HZ)
858c9f6c 2533 goto finished;
2e0fef85 2534 if ((phba->sli.sli_flag & LPFC_SLI_MBOX_ACTIVE) != 0)
858c9f6c
JS
2535 goto finished;
2536
2537 stat = 1;
47a8617c
JS
2538
2539finished:
858c9f6c
JS
2540 spin_unlock_irq(shost->host_lock);
2541 return stat;
92d7f7b0 2542}
47a8617c 2543
e59058c4 2544/**
3621a710 2545 * lpfc_host_attrib_init - Initialize SCSI host attributes on a FC port
e59058c4
JS
2546 * @shost: pointer to SCSI host data structure.
2547 *
2548 * This routine initializes a given SCSI host attributes on a FC port. The
2549 * SCSI host can be either on top of a physical port or a virtual port.
2550 **/
92d7f7b0
JS
2551void lpfc_host_attrib_init(struct Scsi_Host *shost)
2552{
2553 struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
2554 struct lpfc_hba *phba = vport->phba;
47a8617c 2555 /*
2e0fef85 2556 * Set fixed host attributes. Must done after lpfc_sli_hba_setup().
47a8617c
JS
2557 */
2558
2e0fef85
JS
2559 fc_host_node_name(shost) = wwn_to_u64(vport->fc_nodename.u.wwn);
2560 fc_host_port_name(shost) = wwn_to_u64(vport->fc_portname.u.wwn);
47a8617c
JS
2561 fc_host_supported_classes(shost) = FC_COS_CLASS3;
2562
2563 memset(fc_host_supported_fc4s(shost), 0,
2e0fef85 2564 sizeof(fc_host_supported_fc4s(shost)));
47a8617c
JS
2565 fc_host_supported_fc4s(shost)[2] = 1;
2566 fc_host_supported_fc4s(shost)[7] = 1;
2567
92d7f7b0
JS
2568 lpfc_vport_symbolic_node_name(vport, fc_host_symbolic_name(shost),
2569 sizeof fc_host_symbolic_name(shost));
47a8617c
JS
2570
2571 fc_host_supported_speeds(shost) = 0;
2572 if (phba->lmt & LMT_10Gb)
2573 fc_host_supported_speeds(shost) |= FC_PORTSPEED_10GBIT;
a8adb832
JS
2574 if (phba->lmt & LMT_8Gb)
2575 fc_host_supported_speeds(shost) |= FC_PORTSPEED_8GBIT;
47a8617c
JS
2576 if (phba->lmt & LMT_4Gb)
2577 fc_host_supported_speeds(shost) |= FC_PORTSPEED_4GBIT;
2578 if (phba->lmt & LMT_2Gb)
2579 fc_host_supported_speeds(shost) |= FC_PORTSPEED_2GBIT;
2580 if (phba->lmt & LMT_1Gb)
2581 fc_host_supported_speeds(shost) |= FC_PORTSPEED_1GBIT;
2582
2583 fc_host_maxframe_size(shost) =
2e0fef85
JS
2584 (((uint32_t) vport->fc_sparam.cmn.bbRcvSizeMsb & 0x0F) << 8) |
2585 (uint32_t) vport->fc_sparam.cmn.bbRcvSizeLsb;
47a8617c
JS
2586
2587 /* This value is also unchanging */
2588 memset(fc_host_active_fc4s(shost), 0,
2e0fef85 2589 sizeof(fc_host_active_fc4s(shost)));
47a8617c
JS
2590 fc_host_active_fc4s(shost)[2] = 1;
2591 fc_host_active_fc4s(shost)[7] = 1;
2592
92d7f7b0 2593 fc_host_max_npiv_vports(shost) = phba->max_vpi;
47a8617c 2594 spin_lock_irq(shost->host_lock);
51ef4c26 2595 vport->load_flag &= ~FC_LOADING;
47a8617c 2596 spin_unlock_irq(shost->host_lock);
47a8617c 2597}
dea3101e 2598
e59058c4 2599/**
da0436e9 2600 * lpfc_stop_port_s3 - Stop SLI3 device port
e59058c4
JS
2601 * @phba: pointer to lpfc hba data structure.
2602 *
da0436e9
JS
2603 * This routine is invoked to stop an SLI3 device port, it stops the device
2604 * from generating interrupts and stops the device driver's timers for the
2605 * device.
e59058c4 2606 **/
da0436e9
JS
2607static void
2608lpfc_stop_port_s3(struct lpfc_hba *phba)
db2378e0 2609{
da0436e9
JS
2610 /* Clear all interrupt enable conditions */
2611 writel(0, phba->HCregaddr);
2612 readl(phba->HCregaddr); /* flush */
2613 /* Clear all pending interrupts */
2614 writel(0xffffffff, phba->HAregaddr);
2615 readl(phba->HAregaddr); /* flush */
db2378e0 2616
da0436e9
JS
2617 /* Reset some HBA SLI setup states */
2618 lpfc_stop_hba_timers(phba);
2619 phba->pport->work_port_events = 0;
2620}
db2378e0 2621
da0436e9
JS
2622/**
2623 * lpfc_stop_port_s4 - Stop SLI4 device port
2624 * @phba: pointer to lpfc hba data structure.
2625 *
2626 * This routine is invoked to stop an SLI4 device port, it stops the device
2627 * from generating interrupts and stops the device driver's timers for the
2628 * device.
2629 **/
2630static void
2631lpfc_stop_port_s4(struct lpfc_hba *phba)
2632{
2633 /* Reset some HBA SLI4 setup states */
2634 lpfc_stop_hba_timers(phba);
2635 phba->pport->work_port_events = 0;
2636 phba->sli4_hba.intr_enable = 0;
2637 /* Hard clear it for now, shall have more graceful way to wait later */
2638 phba->sli.sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
2639}
9399627f 2640
da0436e9
JS
2641/**
2642 * lpfc_stop_port - Wrapper function for stopping hba port
2643 * @phba: Pointer to HBA context object.
2644 *
2645 * This routine wraps the actual SLI3 or SLI4 hba stop port routine from
2646 * the API jump table function pointer from the lpfc_hba struct.
2647 **/
2648void
2649lpfc_stop_port(struct lpfc_hba *phba)
2650{
2651 phba->lpfc_stop_port(phba);
2652}
db2378e0 2653
da0436e9
JS
2654/**
2655 * lpfc_sli4_remove_dflt_fcf - Remove the driver default fcf record from the port.
2656 * @phba: pointer to lpfc hba data structure.
2657 *
2658 * This routine is invoked to remove the driver default fcf record from
2659 * the port. This routine currently acts on FCF Index 0.
2660 *
2661 **/
2662void
2663lpfc_sli_remove_dflt_fcf(struct lpfc_hba *phba)
2664{
2665 int rc = 0;
2666 LPFC_MBOXQ_t *mboxq;
2667 struct lpfc_mbx_del_fcf_tbl_entry *del_fcf_record;
2668 uint32_t mbox_tmo, req_len;
2669 uint32_t shdr_status, shdr_add_status;
9399627f 2670
da0436e9
JS
2671 mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
2672 if (!mboxq) {
2673 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2674 "2020 Failed to allocate mbox for ADD_FCF cmd\n");
2675 return;
db2378e0 2676 }
9399627f 2677
da0436e9
JS
2678 req_len = sizeof(struct lpfc_mbx_del_fcf_tbl_entry) -
2679 sizeof(struct lpfc_sli4_cfg_mhdr);
2680 rc = lpfc_sli4_config(phba, mboxq, LPFC_MBOX_SUBSYSTEM_FCOE,
2681 LPFC_MBOX_OPCODE_FCOE_DELETE_FCF,
2682 req_len, LPFC_SLI4_MBX_EMBED);
9399627f 2683 /*
da0436e9
JS
2684 * In phase 1, there is a single FCF index, 0. In phase2, the driver
2685 * supports multiple FCF indices.
9399627f 2686 */
da0436e9
JS
2687 del_fcf_record = &mboxq->u.mqe.un.del_fcf_entry;
2688 bf_set(lpfc_mbx_del_fcf_tbl_count, del_fcf_record, 1);
2689 bf_set(lpfc_mbx_del_fcf_tbl_index, del_fcf_record,
2690 phba->fcf.fcf_indx);
9399627f 2691
da0436e9
JS
2692 if (!phba->sli4_hba.intr_enable)
2693 rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
2694 else {
2695 mbox_tmo = lpfc_mbox_tmo_val(phba, MBX_SLI4_CONFIG);
2696 rc = lpfc_sli_issue_mbox_wait(phba, mboxq, mbox_tmo);
9399627f 2697 }
da0436e9
JS
2698 /* The IOCTL status is embedded in the mailbox subheader. */
2699 shdr_status = bf_get(lpfc_mbox_hdr_status,
2700 &del_fcf_record->header.cfg_shdr.response);
2701 shdr_add_status = bf_get(lpfc_mbox_hdr_add_status,
2702 &del_fcf_record->header.cfg_shdr.response);
2703 if (shdr_status || shdr_add_status || rc != MBX_SUCCESS) {
2704 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
2705 "2516 DEL FCF of default FCF Index failed "
2706 "mbx status x%x, status x%x add_status x%x\n",
2707 rc, shdr_status, shdr_add_status);
9399627f 2708 }
da0436e9
JS
2709 if (rc != MBX_TIMEOUT)
2710 mempool_free(mboxq, phba->mbox_mem_pool);
db2378e0
JS
2711}
2712
6669f9bb
JS
2713/**
2714 * lpfc_sli4_fw_cfg_check - Read the firmware config and verify FCoE support
2715 * @phba: pointer to lpfc hba data structure.
2716 *
2717 * This function uses the QUERY_FW_CFG mailbox command to determine if the
2718 * firmware loaded supports FCoE. A return of zero indicates that the mailbox
2719 * was successful and the firmware supports FCoE. Any other return indicates
2720 * a error. It is assumed that this function will be called before interrupts
2721 * are enabled.
2722 **/
2723static int
2724lpfc_sli4_fw_cfg_check(struct lpfc_hba *phba)
2725{
2726 int rc = 0;
2727 LPFC_MBOXQ_t *mboxq;
2728 struct lpfc_mbx_query_fw_cfg *query_fw_cfg;
2729 uint32_t length;
2730 uint32_t shdr_status, shdr_add_status;
2731
2732 mboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
2733 if (!mboxq) {
2734 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2735 "2621 Failed to allocate mbox for "
2736 "query firmware config cmd\n");
2737 return -ENOMEM;
2738 }
2739 query_fw_cfg = &mboxq->u.mqe.un.query_fw_cfg;
2740 length = (sizeof(struct lpfc_mbx_query_fw_cfg) -
2741 sizeof(struct lpfc_sli4_cfg_mhdr));
2742 lpfc_sli4_config(phba, mboxq, LPFC_MBOX_SUBSYSTEM_COMMON,
2743 LPFC_MBOX_OPCODE_QUERY_FW_CFG,
2744 length, LPFC_SLI4_MBX_EMBED);
2745 rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
2746 /* The IOCTL status is embedded in the mailbox subheader. */
2747 shdr_status = bf_get(lpfc_mbox_hdr_status,
2748 &query_fw_cfg->header.cfg_shdr.response);
2749 shdr_add_status = bf_get(lpfc_mbox_hdr_add_status,
2750 &query_fw_cfg->header.cfg_shdr.response);
2751 if (shdr_status || shdr_add_status || rc != MBX_SUCCESS) {
2752 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
2753 "2622 Query Firmware Config failed "
2754 "mbx status x%x, status x%x add_status x%x\n",
2755 rc, shdr_status, shdr_add_status);
2756 return -EINVAL;
2757 }
2758 if (!bf_get(lpfc_function_mode_fcoe_i, query_fw_cfg)) {
2759 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
2760 "2623 FCoE Function not supported by firmware. "
2761 "Function mode = %08x\n",
2762 query_fw_cfg->function_mode);
2763 return -EINVAL;
2764 }
2765 if (rc != MBX_TIMEOUT)
2766 mempool_free(mboxq, phba->mbox_mem_pool);
2767 return 0;
2768}
2769
e59058c4 2770/**
da0436e9 2771 * lpfc_sli4_parse_latt_fault - Parse sli4 link-attention link fault code
e59058c4 2772 * @phba: pointer to lpfc hba data structure.
da0436e9 2773 * @acqe_link: pointer to the async link completion queue entry.
e59058c4 2774 *
da0436e9
JS
2775 * This routine is to parse the SLI4 link-attention link fault code and
2776 * translate it into the base driver's read link attention mailbox command
2777 * status.
2778 *
2779 * Return: Link-attention status in terms of base driver's coding.
e59058c4 2780 **/
da0436e9
JS
2781static uint16_t
2782lpfc_sli4_parse_latt_fault(struct lpfc_hba *phba,
2783 struct lpfc_acqe_link *acqe_link)
db2378e0 2784{
da0436e9 2785 uint16_t latt_fault;
9399627f 2786
da0436e9
JS
2787 switch (bf_get(lpfc_acqe_link_fault, acqe_link)) {
2788 case LPFC_ASYNC_LINK_FAULT_NONE:
2789 case LPFC_ASYNC_LINK_FAULT_LOCAL:
2790 case LPFC_ASYNC_LINK_FAULT_REMOTE:
2791 latt_fault = 0;
2792 break;
2793 default:
2794 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2795 "0398 Invalid link fault code: x%x\n",
2796 bf_get(lpfc_acqe_link_fault, acqe_link));
2797 latt_fault = MBXERR_ERROR;
2798 break;
2799 }
2800 return latt_fault;
db2378e0
JS
2801}
2802
5b75da2f 2803/**
da0436e9 2804 * lpfc_sli4_parse_latt_type - Parse sli4 link attention type
5b75da2f 2805 * @phba: pointer to lpfc hba data structure.
da0436e9 2806 * @acqe_link: pointer to the async link completion queue entry.
5b75da2f 2807 *
da0436e9
JS
2808 * This routine is to parse the SLI4 link attention type and translate it
2809 * into the base driver's link attention type coding.
5b75da2f 2810 *
da0436e9
JS
2811 * Return: Link attention type in terms of base driver's coding.
2812 **/
2813static uint8_t
2814lpfc_sli4_parse_latt_type(struct lpfc_hba *phba,
2815 struct lpfc_acqe_link *acqe_link)
5b75da2f 2816{
da0436e9 2817 uint8_t att_type;
5b75da2f 2818
da0436e9
JS
2819 switch (bf_get(lpfc_acqe_link_status, acqe_link)) {
2820 case LPFC_ASYNC_LINK_STATUS_DOWN:
2821 case LPFC_ASYNC_LINK_STATUS_LOGICAL_DOWN:
2822 att_type = AT_LINK_DOWN;
2823 break;
2824 case LPFC_ASYNC_LINK_STATUS_UP:
2825 /* Ignore physical link up events - wait for logical link up */
2826 att_type = AT_RESERVED;
2827 break;
2828 case LPFC_ASYNC_LINK_STATUS_LOGICAL_UP:
2829 att_type = AT_LINK_UP;
2830 break;
2831 default:
2832 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2833 "0399 Invalid link attention type: x%x\n",
2834 bf_get(lpfc_acqe_link_status, acqe_link));
2835 att_type = AT_RESERVED;
2836 break;
5b75da2f 2837 }
da0436e9 2838 return att_type;
5b75da2f
JS
2839}
2840
2841/**
da0436e9 2842 * lpfc_sli4_parse_latt_link_speed - Parse sli4 link-attention link speed
5b75da2f 2843 * @phba: pointer to lpfc hba data structure.
da0436e9 2844 * @acqe_link: pointer to the async link completion queue entry.
5b75da2f 2845 *
da0436e9
JS
2846 * This routine is to parse the SLI4 link-attention link speed and translate
2847 * it into the base driver's link-attention link speed coding.
2848 *
2849 * Return: Link-attention link speed in terms of base driver's coding.
2850 **/
2851static uint8_t
2852lpfc_sli4_parse_latt_link_speed(struct lpfc_hba *phba,
2853 struct lpfc_acqe_link *acqe_link)
5b75da2f 2854{
da0436e9
JS
2855 uint8_t link_speed;
2856
2857 switch (bf_get(lpfc_acqe_link_speed, acqe_link)) {
2858 case LPFC_ASYNC_LINK_SPEED_ZERO:
2859 link_speed = LA_UNKNW_LINK;
2860 break;
2861 case LPFC_ASYNC_LINK_SPEED_10MBPS:
2862 link_speed = LA_UNKNW_LINK;
2863 break;
2864 case LPFC_ASYNC_LINK_SPEED_100MBPS:
2865 link_speed = LA_UNKNW_LINK;
2866 break;
2867 case LPFC_ASYNC_LINK_SPEED_1GBPS:
2868 link_speed = LA_1GHZ_LINK;
2869 break;
2870 case LPFC_ASYNC_LINK_SPEED_10GBPS:
2871 link_speed = LA_10GHZ_LINK;
2872 break;
2873 default:
2874 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2875 "0483 Invalid link-attention link speed: x%x\n",
2876 bf_get(lpfc_acqe_link_speed, acqe_link));
2877 link_speed = LA_UNKNW_LINK;
2878 break;
2879 }
2880 return link_speed;
2881}
2882
2883/**
2884 * lpfc_sli4_async_link_evt - Process the asynchronous link event
2885 * @phba: pointer to lpfc hba data structure.
2886 * @acqe_link: pointer to the async link completion queue entry.
2887 *
2888 * This routine is to handle the SLI4 asynchronous link event.
2889 **/
2890static void
2891lpfc_sli4_async_link_evt(struct lpfc_hba *phba,
2892 struct lpfc_acqe_link *acqe_link)
2893{
2894 struct lpfc_dmabuf *mp;
2895 LPFC_MBOXQ_t *pmb;
2896 MAILBOX_t *mb;
2897 READ_LA_VAR *la;
2898 uint8_t att_type;
2899
2900 att_type = lpfc_sli4_parse_latt_type(phba, acqe_link);
2901 if (att_type != AT_LINK_DOWN && att_type != AT_LINK_UP)
2902 return;
32b9793f 2903 phba->fcoe_eventtag = acqe_link->event_tag;
da0436e9
JS
2904 pmb = (LPFC_MBOXQ_t *)mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
2905 if (!pmb) {
2906 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
2907 "0395 The mboxq allocation failed\n");
2908 return;
2909 }
2910 mp = kmalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
2911 if (!mp) {
2912 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
2913 "0396 The lpfc_dmabuf allocation failed\n");
2914 goto out_free_pmb;
2915 }
2916 mp->virt = lpfc_mbuf_alloc(phba, 0, &mp->phys);
2917 if (!mp->virt) {
2918 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
2919 "0397 The mbuf allocation failed\n");
2920 goto out_free_dmabuf;
2921 }
2922
2923 /* Cleanup any outstanding ELS commands */
2924 lpfc_els_flush_all_cmd(phba);
2925
2926 /* Block ELS IOCBs until we have done process link event */
2927 phba->sli.ring[LPFC_ELS_RING].flag |= LPFC_STOP_IOCB_EVENT;
2928
2929 /* Update link event statistics */
2930 phba->sli.slistat.link_event++;
2931
2932 /* Create pseudo lpfc_handle_latt mailbox command from link ACQE */
2933 lpfc_read_la(phba, pmb, mp);
2934 pmb->vport = phba->pport;
2935
2936 /* Parse and translate status field */
2937 mb = &pmb->u.mb;
2938 mb->mbxStatus = lpfc_sli4_parse_latt_fault(phba, acqe_link);
2939
2940 /* Parse and translate link attention fields */
2941 la = (READ_LA_VAR *) &pmb->u.mb.un.varReadLA;
2942 la->eventTag = acqe_link->event_tag;
2943 la->attType = att_type;
2944 la->UlnkSpeed = lpfc_sli4_parse_latt_link_speed(phba, acqe_link);
2945
2946 /* Fake the the following irrelvant fields */
2947 la->topology = TOPOLOGY_PT_PT;
2948 la->granted_AL_PA = 0;
2949 la->il = 0;
2950 la->pb = 0;
2951 la->fa = 0;
2952 la->mm = 0;
2953
2954 /* Keep the link status for extra SLI4 state machine reference */
2955 phba->sli4_hba.link_state.speed =
2956 bf_get(lpfc_acqe_link_speed, acqe_link);
2957 phba->sli4_hba.link_state.duplex =
2958 bf_get(lpfc_acqe_link_duplex, acqe_link);
2959 phba->sli4_hba.link_state.status =
2960 bf_get(lpfc_acqe_link_status, acqe_link);
2961 phba->sli4_hba.link_state.physical =
2962 bf_get(lpfc_acqe_link_physical, acqe_link);
2963 phba->sli4_hba.link_state.fault =
2964 bf_get(lpfc_acqe_link_fault, acqe_link);
2965
2966 /* Invoke the lpfc_handle_latt mailbox command callback function */
2967 lpfc_mbx_cmpl_read_la(phba, pmb);
2968
5b75da2f 2969 return;
da0436e9
JS
2970
2971out_free_dmabuf:
2972 kfree(mp);
2973out_free_pmb:
2974 mempool_free(pmb, phba->mbox_mem_pool);
2975}
2976
2977/**
2978 * lpfc_sli4_async_fcoe_evt - Process the asynchronous fcoe event
2979 * @phba: pointer to lpfc hba data structure.
2980 * @acqe_link: pointer to the async fcoe completion queue entry.
2981 *
2982 * This routine is to handle the SLI4 asynchronous fcoe event.
2983 **/
2984static void
2985lpfc_sli4_async_fcoe_evt(struct lpfc_hba *phba,
2986 struct lpfc_acqe_fcoe *acqe_fcoe)
2987{
2988 uint8_t event_type = bf_get(lpfc_acqe_fcoe_event_type, acqe_fcoe);
2989 int rc;
6669f9bb
JS
2990 struct lpfc_vport *vport;
2991 struct lpfc_nodelist *ndlp;
2992 struct Scsi_Host *shost;
da0436e9 2993
4d9ab994 2994 phba->fc_eventTag = acqe_fcoe->event_tag;
32b9793f 2995 phba->fcoe_eventtag = acqe_fcoe->event_tag;
da0436e9
JS
2996 switch (event_type) {
2997 case LPFC_FCOE_EVENT_TYPE_NEW_FCF:
2998 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY,
e4e74273 2999 "2546 New FCF found index 0x%x tag 0x%x\n",
6669f9bb 3000 acqe_fcoe->index,
da0436e9
JS
3001 acqe_fcoe->event_tag);
3002 /*
32b9793f
JS
3003 * If the current FCF is in discovered state, or
3004 * FCF discovery is in progress do nothing.
da0436e9
JS
3005 */
3006 spin_lock_irq(&phba->hbalock);
32b9793f
JS
3007 if ((phba->fcf.fcf_flag & FCF_DISCOVERED) ||
3008 (phba->hba_flag & FCF_DISC_INPROGRESS)) {
da0436e9
JS
3009 spin_unlock_irq(&phba->hbalock);
3010 break;
3011 }
3012 spin_unlock_irq(&phba->hbalock);
3013
3014 /* Read the FCF table and re-discover SAN. */
6a9c52cf 3015 rc = lpfc_sli4_read_fcf_record(phba, LPFC_FCOE_FCF_GET_FIRST);
da0436e9
JS
3016 if (rc)
3017 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY,
6a9c52cf
JS
3018 "2547 Read FCF record failed 0x%x\n",
3019 rc);
da0436e9
JS
3020 break;
3021
3022 case LPFC_FCOE_EVENT_TYPE_FCF_TABLE_FULL:
3023 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
e4e74273 3024 "2548 FCF Table full count 0x%x tag 0x%x\n",
da0436e9
JS
3025 bf_get(lpfc_acqe_fcoe_fcf_count, acqe_fcoe),
3026 acqe_fcoe->event_tag);
3027 break;
3028
3029 case LPFC_FCOE_EVENT_TYPE_FCF_DEAD:
3030 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY,
6a9c52cf 3031 "2549 FCF disconnected from network index 0x%x"
6669f9bb 3032 " tag 0x%x\n", acqe_fcoe->index,
da0436e9
JS
3033 acqe_fcoe->event_tag);
3034 /* If the event is not for currently used fcf do nothing */
6669f9bb 3035 if (phba->fcf.fcf_indx != acqe_fcoe->index)
da0436e9
JS
3036 break;
3037 /*
3038 * Currently, driver support only one FCF - so treat this as
3039 * a link down.
3040 */
3041 lpfc_linkdown(phba);
3042 /* Unregister FCF if no devices connected to it */
3043 lpfc_unregister_unused_fcf(phba);
3044 break;
6669f9bb
JS
3045 case LPFC_FCOE_EVENT_TYPE_CVL:
3046 lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY,
3047 "2718 Clear Virtual Link Received for VPI 0x%x"
3048 " tag 0x%x\n", acqe_fcoe->index, acqe_fcoe->event_tag);
3049 vport = lpfc_find_vport_by_vpid(phba,
3050 acqe_fcoe->index /*- phba->vpi_base*/);
3051 if (!vport)
3052 break;
3053 ndlp = lpfc_findnode_did(vport, Fabric_DID);
3054 if (!ndlp)
3055 break;
3056 shost = lpfc_shost_from_vport(vport);
3057 lpfc_linkdown_port(vport);
3058 if (vport->port_type != LPFC_NPIV_PORT) {
3059 mod_timer(&ndlp->nlp_delayfunc, jiffies + HZ);
3060 spin_lock_irq(shost->host_lock);
3061 ndlp->nlp_flag |= NLP_DELAY_TMO;
3062 spin_unlock_irq(shost->host_lock);
3063 ndlp->nlp_last_elscmd = ELS_CMD_FLOGI;
3064 vport->port_state = LPFC_FLOGI;
3065 }
3066 break;
da0436e9
JS
3067 default:
3068 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
3069 "0288 Unknown FCoE event type 0x%x event tag "
3070 "0x%x\n", event_type, acqe_fcoe->event_tag);
3071 break;
3072 }
3073}
3074
3075/**
3076 * lpfc_sli4_async_dcbx_evt - Process the asynchronous dcbx event
3077 * @phba: pointer to lpfc hba data structure.
3078 * @acqe_link: pointer to the async dcbx completion queue entry.
3079 *
3080 * This routine is to handle the SLI4 asynchronous dcbx event.
3081 **/
3082static void
3083lpfc_sli4_async_dcbx_evt(struct lpfc_hba *phba,
3084 struct lpfc_acqe_dcbx *acqe_dcbx)
3085{
4d9ab994 3086 phba->fc_eventTag = acqe_dcbx->event_tag;
da0436e9
JS
3087 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
3088 "0290 The SLI4 DCBX asynchronous event is not "
3089 "handled yet\n");
3090}
3091
3092/**
3093 * lpfc_sli4_async_event_proc - Process all the pending asynchronous event
3094 * @phba: pointer to lpfc hba data structure.
3095 *
3096 * This routine is invoked by the worker thread to process all the pending
3097 * SLI4 asynchronous events.
3098 **/
3099void lpfc_sli4_async_event_proc(struct lpfc_hba *phba)
3100{
3101 struct lpfc_cq_event *cq_event;
3102
3103 /* First, declare the async event has been handled */
3104 spin_lock_irq(&phba->hbalock);
3105 phba->hba_flag &= ~ASYNC_EVENT;
3106 spin_unlock_irq(&phba->hbalock);
3107 /* Now, handle all the async events */
3108 while (!list_empty(&phba->sli4_hba.sp_asynce_work_queue)) {
3109 /* Get the first event from the head of the event queue */
3110 spin_lock_irq(&phba->hbalock);
3111 list_remove_head(&phba->sli4_hba.sp_asynce_work_queue,
3112 cq_event, struct lpfc_cq_event, list);
3113 spin_unlock_irq(&phba->hbalock);
3114 /* Process the asynchronous event */
3115 switch (bf_get(lpfc_trailer_code, &cq_event->cqe.mcqe_cmpl)) {
3116 case LPFC_TRAILER_CODE_LINK:
3117 lpfc_sli4_async_link_evt(phba,
3118 &cq_event->cqe.acqe_link);
3119 break;
3120 case LPFC_TRAILER_CODE_FCOE:
3121 lpfc_sli4_async_fcoe_evt(phba,
3122 &cq_event->cqe.acqe_fcoe);
3123 break;
3124 case LPFC_TRAILER_CODE_DCBX:
3125 lpfc_sli4_async_dcbx_evt(phba,
3126 &cq_event->cqe.acqe_dcbx);
3127 break;
3128 default:
3129 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
3130 "1804 Invalid asynchrous event code: "
3131 "x%x\n", bf_get(lpfc_trailer_code,
3132 &cq_event->cqe.mcqe_cmpl));
3133 break;
3134 }
3135 /* Free the completion event processed to the free pool */
3136 lpfc_sli4_cq_event_release(phba, cq_event);
3137 }
3138}
3139
3140/**
3141 * lpfc_api_table_setup - Set up per hba pci-device group func api jump table
3142 * @phba: pointer to lpfc hba data structure.
3143 * @dev_grp: The HBA PCI-Device group number.
3144 *
3145 * This routine is invoked to set up the per HBA PCI-Device group function
3146 * API jump table entries.
3147 *
3148 * Return: 0 if success, otherwise -ENODEV
3149 **/
3150int
3151lpfc_api_table_setup(struct lpfc_hba *phba, uint8_t dev_grp)
3152{
3153 int rc;
3154
3155 /* Set up lpfc PCI-device group */
3156 phba->pci_dev_grp = dev_grp;
3157
3158 /* The LPFC_PCI_DEV_OC uses SLI4 */
3159 if (dev_grp == LPFC_PCI_DEV_OC)
3160 phba->sli_rev = LPFC_SLI_REV4;
3161
3162 /* Set up device INIT API function jump table */
3163 rc = lpfc_init_api_table_setup(phba, dev_grp);
3164 if (rc)
3165 return -ENODEV;
3166 /* Set up SCSI API function jump table */
3167 rc = lpfc_scsi_api_table_setup(phba, dev_grp);
3168 if (rc)
3169 return -ENODEV;
3170 /* Set up SLI API function jump table */
3171 rc = lpfc_sli_api_table_setup(phba, dev_grp);
3172 if (rc)
3173 return -ENODEV;
3174 /* Set up MBOX API function jump table */
3175 rc = lpfc_mbox_api_table_setup(phba, dev_grp);
3176 if (rc)
3177 return -ENODEV;
3178
3179 return 0;
5b75da2f
JS
3180}
3181
3182/**
3621a710 3183 * lpfc_log_intr_mode - Log the active interrupt mode
5b75da2f
JS
3184 * @phba: pointer to lpfc hba data structure.
3185 * @intr_mode: active interrupt mode adopted.
3186 *
3187 * This routine it invoked to log the currently used active interrupt mode
3188 * to the device.
3772a991
JS
3189 **/
3190static void lpfc_log_intr_mode(struct lpfc_hba *phba, uint32_t intr_mode)
5b75da2f
JS
3191{
3192 switch (intr_mode) {
3193 case 0:
3194 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
3195 "0470 Enable INTx interrupt mode.\n");
3196 break;
3197 case 1:
3198 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
3199 "0481 Enabled MSI interrupt mode.\n");
3200 break;
3201 case 2:
3202 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
3203 "0480 Enabled MSI-X interrupt mode.\n");
3204 break;
3205 default:
3206 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
3207 "0482 Illegal interrupt mode.\n");
3208 break;
3209 }
3210 return;
3211}
3212
5b75da2f 3213/**
3772a991 3214 * lpfc_enable_pci_dev - Enable a generic PCI device.
5b75da2f
JS
3215 * @phba: pointer to lpfc hba data structure.
3216 *
3772a991
JS
3217 * This routine is invoked to enable the PCI device that is common to all
3218 * PCI devices.
5b75da2f
JS
3219 *
3220 * Return codes
3772a991
JS
3221 * 0 - sucessful
3222 * other values - error
5b75da2f 3223 **/
3772a991
JS
3224static int
3225lpfc_enable_pci_dev(struct lpfc_hba *phba)
5b75da2f 3226{
3772a991
JS
3227 struct pci_dev *pdev;
3228 int bars;
5b75da2f 3229
3772a991
JS
3230 /* Obtain PCI device reference */
3231 if (!phba->pcidev)
3232 goto out_error;
3233 else
3234 pdev = phba->pcidev;
3235 /* Select PCI BARs */
3236 bars = pci_select_bars(pdev, IORESOURCE_MEM);
3237 /* Enable PCI device */
3238 if (pci_enable_device_mem(pdev))
3239 goto out_error;
3240 /* Request PCI resource for the device */
3241 if (pci_request_selected_regions(pdev, bars, LPFC_DRIVER_NAME))
3242 goto out_disable_device;
3243 /* Set up device as PCI master and save state for EEH */
3244 pci_set_master(pdev);
3245 pci_try_set_mwi(pdev);
3246 pci_save_state(pdev);
5b75da2f 3247
3772a991 3248 return 0;
5b75da2f 3249
3772a991
JS
3250out_disable_device:
3251 pci_disable_device(pdev);
3252out_error:
3253 return -ENODEV;
5b75da2f
JS
3254}
3255
3256/**
3772a991 3257 * lpfc_disable_pci_dev - Disable a generic PCI device.
5b75da2f
JS
3258 * @phba: pointer to lpfc hba data structure.
3259 *
3772a991
JS
3260 * This routine is invoked to disable the PCI device that is common to all
3261 * PCI devices.
5b75da2f
JS
3262 **/
3263static void
3772a991 3264lpfc_disable_pci_dev(struct lpfc_hba *phba)
5b75da2f 3265{
3772a991
JS
3266 struct pci_dev *pdev;
3267 int bars;
5b75da2f 3268
3772a991
JS
3269 /* Obtain PCI device reference */
3270 if (!phba->pcidev)
3271 return;
3272 else
3273 pdev = phba->pcidev;
3274 /* Select PCI BARs */
3275 bars = pci_select_bars(pdev, IORESOURCE_MEM);
3276 /* Release PCI resource and disable PCI device */
3277 pci_release_selected_regions(pdev, bars);
3278 pci_disable_device(pdev);
3279 /* Null out PCI private reference to driver */
3280 pci_set_drvdata(pdev, NULL);
5b75da2f
JS
3281
3282 return;
3283}
3284
e59058c4 3285/**
3772a991
JS
3286 * lpfc_reset_hba - Reset a hba
3287 * @phba: pointer to lpfc hba data structure.
e59058c4 3288 *
3772a991
JS
3289 * This routine is invoked to reset a hba device. It brings the HBA
3290 * offline, performs a board restart, and then brings the board back
3291 * online. The lpfc_offline calls lpfc_sli_hba_down which will clean up
3292 * on outstanding mailbox commands.
e59058c4 3293 **/
3772a991
JS
3294void
3295lpfc_reset_hba(struct lpfc_hba *phba)
dea3101e 3296{
3772a991
JS
3297 /* If resets are disabled then set error state and return. */
3298 if (!phba->cfg_enable_hba_reset) {
3299 phba->link_state = LPFC_HBA_ERROR;
3300 return;
3301 }
3302 lpfc_offline_prep(phba);
3303 lpfc_offline(phba);
3304 lpfc_sli_brdrestart(phba);
3305 lpfc_online(phba);
3306 lpfc_unblock_mgmt_io(phba);
3307}
dea3101e 3308
3772a991
JS
3309/**
3310 * lpfc_sli_driver_resource_setup - Setup driver internal resources for SLI3 dev.
3311 * @phba: pointer to lpfc hba data structure.
3312 *
3313 * This routine is invoked to set up the driver internal resources specific to
3314 * support the SLI-3 HBA device it attached to.
3315 *
3316 * Return codes
3317 * 0 - sucessful
3318 * other values - error
3319 **/
3320static int
3321lpfc_sli_driver_resource_setup(struct lpfc_hba *phba)
3322{
3323 struct lpfc_sli *psli;
dea3101e 3324
2e0fef85 3325 /*
3772a991 3326 * Initialize timers used by driver
2e0fef85 3327 */
dea3101e 3328
3772a991 3329 /* Heartbeat timer */
858c9f6c
JS
3330 init_timer(&phba->hb_tmofunc);
3331 phba->hb_tmofunc.function = lpfc_hb_timeout;
3332 phba->hb_tmofunc.data = (unsigned long)phba;
3333
dea3101e 3334 psli = &phba->sli;
3772a991 3335 /* MBOX heartbeat timer */
dea3101e 3336 init_timer(&psli->mbox_tmo);
3337 psli->mbox_tmo.function = lpfc_mbox_timeout;
2e0fef85 3338 psli->mbox_tmo.data = (unsigned long) phba;
3772a991 3339 /* FCP polling mode timer */
875fbdfe
JSEC
3340 init_timer(&phba->fcp_poll_timer);
3341 phba->fcp_poll_timer.function = lpfc_poll_timeout;
2e0fef85 3342 phba->fcp_poll_timer.data = (unsigned long) phba;
3772a991 3343 /* Fabric block timer */
92d7f7b0
JS
3344 init_timer(&phba->fabric_block_timer);
3345 phba->fabric_block_timer.function = lpfc_fabric_block_timeout;
3346 phba->fabric_block_timer.data = (unsigned long) phba;
3772a991 3347 /* EA polling mode timer */
9399627f
JS
3348 init_timer(&phba->eratt_poll);
3349 phba->eratt_poll.function = lpfc_poll_eratt;
3350 phba->eratt_poll.data = (unsigned long) phba;
dea3101e 3351
3772a991
JS
3352 /* Host attention work mask setup */
3353 phba->work_ha_mask = (HA_ERATT | HA_MBATT | HA_LATT);
3354 phba->work_ha_mask |= (HA_RXMASK << (LPFC_ELS_RING * 4));
dea3101e 3355
3772a991
JS
3356 /* Get all the module params for configuring this host */
3357 lpfc_get_cfgparam(phba);
dea3101e 3358 /*
3772a991
JS
3359 * Since the sg_tablesize is module parameter, the sg_dma_buf_size
3360 * used to create the sg_dma_buf_pool must be dynamically calculated.
3361 * 2 segments are added since the IOCB needs a command and response bde.
dea3101e 3362 */
3772a991
JS
3363 phba->cfg_sg_dma_buf_size = sizeof(struct fcp_cmnd) +
3364 sizeof(struct fcp_rsp) +
3365 ((phba->cfg_sg_seg_cnt + 2) * sizeof(struct ulp_bde64));
3366
3367 if (phba->cfg_enable_bg) {
3368 phba->cfg_sg_seg_cnt = LPFC_MAX_SG_SEG_CNT;
3369 phba->cfg_sg_dma_buf_size +=
3370 phba->cfg_prot_sg_seg_cnt * sizeof(struct ulp_bde64);
901a920f 3371 }
dea3101e 3372
3772a991
JS
3373 /* Also reinitialize the host templates with new values. */
3374 lpfc_vport_template.sg_tablesize = phba->cfg_sg_seg_cnt;
3375 lpfc_template.sg_tablesize = phba->cfg_sg_seg_cnt;
dea3101e 3376
3772a991
JS
3377 phba->max_vpi = LPFC_MAX_VPI;
3378 /* This will be set to correct value after config_port mbox */
3379 phba->max_vports = 0;
dea3101e 3380
3772a991
JS
3381 /*
3382 * Initialize the SLI Layer to run with lpfc HBAs.
3383 */
3384 lpfc_sli_setup(phba);
3385 lpfc_sli_queue_setup(phba);
ed957684 3386
3772a991
JS
3387 /* Allocate device driver memory */
3388 if (lpfc_mem_alloc(phba, BPL_ALIGN_SZ))
3389 return -ENOMEM;
51ef4c26 3390
3772a991
JS
3391 return 0;
3392}
ed957684 3393
3772a991
JS
3394/**
3395 * lpfc_sli_driver_resource_unset - Unset drvr internal resources for SLI3 dev
3396 * @phba: pointer to lpfc hba data structure.
3397 *
3398 * This routine is invoked to unset the driver internal resources set up
3399 * specific for supporting the SLI-3 HBA device it attached to.
3400 **/
3401static void
3402lpfc_sli_driver_resource_unset(struct lpfc_hba *phba)
3403{
3404 /* Free device driver memory allocated */
3405 lpfc_mem_free_all(phba);
3163f725 3406
3772a991
JS
3407 return;
3408}
dea3101e 3409
3772a991 3410/**
da0436e9 3411 * lpfc_sli4_driver_resource_setup - Setup drvr internal resources for SLI4 dev
3772a991
JS
3412 * @phba: pointer to lpfc hba data structure.
3413 *
da0436e9
JS
3414 * This routine is invoked to set up the driver internal resources specific to
3415 * support the SLI-4 HBA device it attached to.
3772a991
JS
3416 *
3417 * Return codes
da0436e9
JS
3418 * 0 - sucessful
3419 * other values - error
3772a991
JS
3420 **/
3421static int
da0436e9 3422lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)
3772a991 3423{
da0436e9
JS
3424 struct lpfc_sli *psli;
3425 int rc;
3426 int i, hbq_count;
3427
3428 /* Before proceed, wait for POST done and device ready */
3429 rc = lpfc_sli4_post_status_check(phba);
3430 if (rc)
3431 return -ENODEV;
3432
3772a991 3433 /*
da0436e9 3434 * Initialize timers used by driver
3772a991 3435 */
3772a991 3436
da0436e9
JS
3437 /* Heartbeat timer */
3438 init_timer(&phba->hb_tmofunc);
3439 phba->hb_tmofunc.function = lpfc_hb_timeout;
3440 phba->hb_tmofunc.data = (unsigned long)phba;
3772a991 3441
da0436e9
JS
3442 psli = &phba->sli;
3443 /* MBOX heartbeat timer */
3444 init_timer(&psli->mbox_tmo);
3445 psli->mbox_tmo.function = lpfc_mbox_timeout;
3446 psli->mbox_tmo.data = (unsigned long) phba;
3447 /* Fabric block timer */
3448 init_timer(&phba->fabric_block_timer);
3449 phba->fabric_block_timer.function = lpfc_fabric_block_timeout;
3450 phba->fabric_block_timer.data = (unsigned long) phba;
3451 /* EA polling mode timer */
3452 init_timer(&phba->eratt_poll);
3453 phba->eratt_poll.function = lpfc_poll_eratt;
3454 phba->eratt_poll.data = (unsigned long) phba;
3455 /*
3456 * We need to do a READ_CONFIG mailbox command here before
3457 * calling lpfc_get_cfgparam. For VFs this will report the
3458 * MAX_XRI, MAX_VPI, MAX_RPI, MAX_IOCB, and MAX_VFI settings.
3459 * All of the resources allocated
3460 * for this Port are tied to these values.
3461 */
3462 /* Get all the module params for configuring this host */
3463 lpfc_get_cfgparam(phba);
3464 phba->max_vpi = LPFC_MAX_VPI;
3465 /* This will be set to correct value after the read_config mbox */
3466 phba->max_vports = 0;
3772a991 3467
da0436e9
JS
3468 /* Program the default value of vlan_id and fc_map */
3469 phba->valid_vlan = 0;
3470 phba->fc_map[0] = LPFC_FCOE_FCF_MAP0;
3471 phba->fc_map[1] = LPFC_FCOE_FCF_MAP1;
3472 phba->fc_map[2] = LPFC_FCOE_FCF_MAP2;
3772a991 3473
da0436e9
JS
3474 /*
3475 * Since the sg_tablesize is module parameter, the sg_dma_buf_size
3476 * used to create the sg_dma_buf_pool must be dynamically calculated.
3477 * 2 segments are added since the IOCB needs a command and response bde.
3478 * To insure that the scsi sgl does not cross a 4k page boundary only
3479 * sgl sizes of 1k, 2k, 4k, and 8k are supported.
3480 * Table of sgl sizes and seg_cnt:
3481 * sgl size, sg_seg_cnt total seg
3482 * 1k 50 52
3483 * 2k 114 116
3484 * 4k 242 244
3485 * 8k 498 500
3486 * cmd(32) + rsp(160) + (52 * sizeof(sli4_sge)) = 1024
3487 * cmd(32) + rsp(160) + (116 * sizeof(sli4_sge)) = 2048
3488 * cmd(32) + rsp(160) + (244 * sizeof(sli4_sge)) = 4096
3489 * cmd(32) + rsp(160) + (500 * sizeof(sli4_sge)) = 8192
3490 */
3491 if (phba->cfg_sg_seg_cnt <= LPFC_DEFAULT_SG_SEG_CNT)
3492 phba->cfg_sg_seg_cnt = 50;
3493 else if (phba->cfg_sg_seg_cnt <= 114)
3494 phba->cfg_sg_seg_cnt = 114;
3495 else if (phba->cfg_sg_seg_cnt <= 242)
3496 phba->cfg_sg_seg_cnt = 242;
3497 else
3498 phba->cfg_sg_seg_cnt = 498;
3772a991 3499
da0436e9
JS
3500 phba->cfg_sg_dma_buf_size = sizeof(struct fcp_cmnd)
3501 + sizeof(struct fcp_rsp);
3502 phba->cfg_sg_dma_buf_size +=
3503 ((phba->cfg_sg_seg_cnt + 2) * sizeof(struct sli4_sge));
3772a991 3504
da0436e9
JS
3505 /* Initialize buffer queue management fields */
3506 hbq_count = lpfc_sli_hbq_count();
3507 for (i = 0; i < hbq_count; ++i)
3508 INIT_LIST_HEAD(&phba->hbqs[i].hbq_buffer_list);
3509 INIT_LIST_HEAD(&phba->rb_pend_list);
3510 phba->hbqs[LPFC_ELS_HBQ].hbq_alloc_buffer = lpfc_sli4_rb_alloc;
3511 phba->hbqs[LPFC_ELS_HBQ].hbq_free_buffer = lpfc_sli4_rb_free;
3772a991 3512
da0436e9
JS
3513 /*
3514 * Initialize the SLI Layer to run with lpfc SLI4 HBAs.
3515 */
3516 /* Initialize the Abort scsi buffer list used by driver */
3517 spin_lock_init(&phba->sli4_hba.abts_scsi_buf_list_lock);
3518 INIT_LIST_HEAD(&phba->sli4_hba.lpfc_abts_scsi_buf_list);
3519 /* This abort list used by worker thread */
3520 spin_lock_init(&phba->sli4_hba.abts_sgl_list_lock);
3772a991 3521
da0436e9
JS
3522 /*
3523 * Initialize dirver internal slow-path work queues
3524 */
3772a991 3525
da0436e9
JS
3526 /* Driver internel slow-path CQ Event pool */
3527 INIT_LIST_HEAD(&phba->sli4_hba.sp_cqe_event_pool);
3528 /* Response IOCB work queue list */
45ed1190 3529 INIT_LIST_HEAD(&phba->sli4_hba.sp_queue_event);
da0436e9
JS
3530 /* Asynchronous event CQ Event work queue list */
3531 INIT_LIST_HEAD(&phba->sli4_hba.sp_asynce_work_queue);
3532 /* Fast-path XRI aborted CQ Event work queue list */
3533 INIT_LIST_HEAD(&phba->sli4_hba.sp_fcp_xri_aborted_work_queue);
3534 /* Slow-path XRI aborted CQ Event work queue list */
3535 INIT_LIST_HEAD(&phba->sli4_hba.sp_els_xri_aborted_work_queue);
3536 /* Receive queue CQ Event work queue list */
3537 INIT_LIST_HEAD(&phba->sli4_hba.sp_unsol_work_queue);
3538
3539 /* Initialize the driver internal SLI layer lists. */
3540 lpfc_sli_setup(phba);
3541 lpfc_sli_queue_setup(phba);
3772a991 3542
da0436e9
JS
3543 /* Allocate device driver memory */
3544 rc = lpfc_mem_alloc(phba, SGL_ALIGN_SZ);
3545 if (rc)
3546 return -ENOMEM;
3547
3548 /* Create the bootstrap mailbox command */
3549 rc = lpfc_create_bootstrap_mbox(phba);
3550 if (unlikely(rc))
3551 goto out_free_mem;
3552
3553 /* Set up the host's endian order with the device. */
3554 rc = lpfc_setup_endian_order(phba);
3555 if (unlikely(rc))
3556 goto out_free_bsmbx;
3557
6669f9bb
JS
3558 rc = lpfc_sli4_fw_cfg_check(phba);
3559 if (unlikely(rc))
3560 goto out_free_bsmbx;
3561
da0436e9
JS
3562 /* Set up the hba's configuration parameters. */
3563 rc = lpfc_sli4_read_config(phba);
3564 if (unlikely(rc))
3565 goto out_free_bsmbx;
3566
3567 /* Perform a function reset */
3568 rc = lpfc_pci_function_reset(phba);
3569 if (unlikely(rc))
3570 goto out_free_bsmbx;
3571
3572 /* Create all the SLI4 queues */
3573 rc = lpfc_sli4_queue_create(phba);
3574 if (rc)
3575 goto out_free_bsmbx;
3576
3577 /* Create driver internal CQE event pool */
3578 rc = lpfc_sli4_cq_event_pool_create(phba);
3579 if (rc)
3580 goto out_destroy_queue;
3581
3582 /* Initialize and populate the iocb list per host */
3583 rc = lpfc_init_sgl_list(phba);
3584 if (rc) {
3585 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
3586 "1400 Failed to initialize sgl list.\n");
3587 goto out_destroy_cq_event_pool;
3588 }
3589 rc = lpfc_init_active_sgl_array(phba);
3590 if (rc) {
3591 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
3592 "1430 Failed to initialize sgl list.\n");
3593 goto out_free_sgl_list;
3594 }
3595
3596 rc = lpfc_sli4_init_rpi_hdrs(phba);
3597 if (rc) {
3598 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
3599 "1432 Failed to initialize rpi headers.\n");
3600 goto out_free_active_sgl;
3601 }
3602
3603 phba->sli4_hba.fcp_eq_hdl = kzalloc((sizeof(struct lpfc_fcp_eq_hdl) *
3604 phba->cfg_fcp_eq_count), GFP_KERNEL);
3605 if (!phba->sli4_hba.fcp_eq_hdl) {
3606 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
3607 "2572 Failed allocate memory for fast-path "
3608 "per-EQ handle array\n");
3609 goto out_remove_rpi_hdrs;
3610 }
3611
3612 phba->sli4_hba.msix_entries = kzalloc((sizeof(struct msix_entry) *
3613 phba->sli4_hba.cfg_eqn), GFP_KERNEL);
3614 if (!phba->sli4_hba.msix_entries) {
3615 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
3616 "2573 Failed allocate memory for msi-x "
3617 "interrupt vector entries\n");
3618 goto out_free_fcp_eq_hdl;
3619 }
3620
3621 return rc;
3622
3623out_free_fcp_eq_hdl:
3624 kfree(phba->sli4_hba.fcp_eq_hdl);
3625out_remove_rpi_hdrs:
3626 lpfc_sli4_remove_rpi_hdrs(phba);
3627out_free_active_sgl:
3628 lpfc_free_active_sgl(phba);
3629out_free_sgl_list:
3630 lpfc_free_sgl_list(phba);
3631out_destroy_cq_event_pool:
3632 lpfc_sli4_cq_event_pool_destroy(phba);
3633out_destroy_queue:
3634 lpfc_sli4_queue_destroy(phba);
3635out_free_bsmbx:
3636 lpfc_destroy_bootstrap_mbox(phba);
3637out_free_mem:
3638 lpfc_mem_free(phba);
3639 return rc;
3640}
3641
3642/**
3643 * lpfc_sli4_driver_resource_unset - Unset drvr internal resources for SLI4 dev
3644 * @phba: pointer to lpfc hba data structure.
3645 *
3646 * This routine is invoked to unset the driver internal resources set up
3647 * specific for supporting the SLI-4 HBA device it attached to.
3648 **/
3649static void
3650lpfc_sli4_driver_resource_unset(struct lpfc_hba *phba)
3651{
3652 struct lpfc_fcf_conn_entry *conn_entry, *next_conn_entry;
3653
3654 /* unregister default FCFI from the HBA */
3655 lpfc_sli4_fcfi_unreg(phba, phba->fcf.fcfi);
3656
3657 /* Free the default FCR table */
3658 lpfc_sli_remove_dflt_fcf(phba);
3659
3660 /* Free memory allocated for msi-x interrupt vector entries */
3661 kfree(phba->sli4_hba.msix_entries);
3662
3663 /* Free memory allocated for fast-path work queue handles */
3664 kfree(phba->sli4_hba.fcp_eq_hdl);
3665
3666 /* Free the allocated rpi headers. */
3667 lpfc_sli4_remove_rpi_hdrs(phba);
d11e31dd 3668 lpfc_sli4_remove_rpis(phba);
da0436e9
JS
3669
3670 /* Free the ELS sgl list */
3671 lpfc_free_active_sgl(phba);
3672 lpfc_free_sgl_list(phba);
3673
3674 /* Free the SCSI sgl management array */
3675 kfree(phba->sli4_hba.lpfc_scsi_psb_array);
3676
3677 /* Free the SLI4 queues */
3678 lpfc_sli4_queue_destroy(phba);
3679
3680 /* Free the completion queue EQ event pool */
3681 lpfc_sli4_cq_event_release_all(phba);
3682 lpfc_sli4_cq_event_pool_destroy(phba);
3683
3684 /* Reset SLI4 HBA FCoE function */
3685 lpfc_pci_function_reset(phba);
3686
3687 /* Free the bsmbx region. */
3688 lpfc_destroy_bootstrap_mbox(phba);
3689
3690 /* Free the SLI Layer memory with SLI4 HBAs */
3691 lpfc_mem_free_all(phba);
3692
3693 /* Free the current connect table */
3694 list_for_each_entry_safe(conn_entry, next_conn_entry,
4d9ab994
JS
3695 &phba->fcf_conn_rec_list, list) {
3696 list_del_init(&conn_entry->list);
da0436e9 3697 kfree(conn_entry);
4d9ab994 3698 }
da0436e9
JS
3699
3700 return;
3701}
3702
3703/**
3704 * lpfc_init_api_table_setup - Set up init api fucntion jump table
3705 * @phba: The hba struct for which this call is being executed.
3706 * @dev_grp: The HBA PCI-Device group number.
3707 *
3708 * This routine sets up the device INIT interface API function jump table
3709 * in @phba struct.
3710 *
3711 * Returns: 0 - success, -ENODEV - failure.
3712 **/
3713int
3714lpfc_init_api_table_setup(struct lpfc_hba *phba, uint8_t dev_grp)
3715{
3716 switch (dev_grp) {
3717 case LPFC_PCI_DEV_LP:
3718 phba->lpfc_hba_down_post = lpfc_hba_down_post_s3;
3719 phba->lpfc_handle_eratt = lpfc_handle_eratt_s3;
3720 phba->lpfc_stop_port = lpfc_stop_port_s3;
3721 break;
3722 case LPFC_PCI_DEV_OC:
3723 phba->lpfc_hba_down_post = lpfc_hba_down_post_s4;
3724 phba->lpfc_handle_eratt = lpfc_handle_eratt_s4;
3725 phba->lpfc_stop_port = lpfc_stop_port_s4;
3726 break;
3727 default:
3728 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
3729 "1431 Invalid HBA PCI-device group: 0x%x\n",
3730 dev_grp);
3731 return -ENODEV;
3732 break;
3733 }
3734 return 0;
3735}
3736
3737/**
3738 * lpfc_setup_driver_resource_phase1 - Phase1 etup driver internal resources.
3739 * @phba: pointer to lpfc hba data structure.
3740 *
3741 * This routine is invoked to set up the driver internal resources before the
3742 * device specific resource setup to support the HBA device it attached to.
3743 *
3744 * Return codes
3745 * 0 - sucessful
3746 * other values - error
3747 **/
3748static int
3749lpfc_setup_driver_resource_phase1(struct lpfc_hba *phba)
3750{
3751 /*
3752 * Driver resources common to all SLI revisions
3753 */
3754 atomic_set(&phba->fast_event_count, 0);
3755 spin_lock_init(&phba->hbalock);
3756
3757 /* Initialize ndlp management spinlock */
3758 spin_lock_init(&phba->ndlp_lock);
3759
3760 INIT_LIST_HEAD(&phba->port_list);
3761 INIT_LIST_HEAD(&phba->work_list);
3762 init_waitqueue_head(&phba->wait_4_mlo_m_q);
3763
3764 /* Initialize the wait queue head for the kernel thread */
3765 init_waitqueue_head(&phba->work_waitq);
3766
3767 /* Initialize the scsi buffer list used by driver for scsi IO */
3768 spin_lock_init(&phba->scsi_buf_list_lock);
3769 INIT_LIST_HEAD(&phba->lpfc_scsi_buf_list);
3770
3771 /* Initialize the fabric iocb list */
3772 INIT_LIST_HEAD(&phba->fabric_iocb_list);
3773
3774 /* Initialize list to save ELS buffers */
3775 INIT_LIST_HEAD(&phba->elsbuf);
3776
3777 /* Initialize FCF connection rec list */
3778 INIT_LIST_HEAD(&phba->fcf_conn_rec_list);
3779
3780 return 0;
3781}
3782
3783/**
3784 * lpfc_setup_driver_resource_phase2 - Phase2 setup driver internal resources.
3785 * @phba: pointer to lpfc hba data structure.
3786 *
3787 * This routine is invoked to set up the driver internal resources after the
3788 * device specific resource setup to support the HBA device it attached to.
3789 *
3790 * Return codes
3791 * 0 - sucessful
3792 * other values - error
3793 **/
3794static int
3795lpfc_setup_driver_resource_phase2(struct lpfc_hba *phba)
3796{
3797 int error;
3798
3799 /* Startup the kernel thread for this host adapter. */
3800 phba->worker_thread = kthread_run(lpfc_do_work, phba,
3801 "lpfc_worker_%d", phba->brd_no);
3802 if (IS_ERR(phba->worker_thread)) {
3803 error = PTR_ERR(phba->worker_thread);
3804 return error;
3772a991
JS
3805 }
3806
3807 return 0;
3808}
3809
3810/**
3811 * lpfc_unset_driver_resource_phase2 - Phase2 unset driver internal resources.
3812 * @phba: pointer to lpfc hba data structure.
3813 *
3814 * This routine is invoked to unset the driver internal resources set up after
3815 * the device specific resource setup for supporting the HBA device it
3816 * attached to.
3817 **/
3818static void
3819lpfc_unset_driver_resource_phase2(struct lpfc_hba *phba)
3820{
3821 /* Stop kernel worker thread */
3822 kthread_stop(phba->worker_thread);
3823}
3824
3825/**
3826 * lpfc_free_iocb_list - Free iocb list.
3827 * @phba: pointer to lpfc hba data structure.
3828 *
3829 * This routine is invoked to free the driver's IOCB list and memory.
3830 **/
3831static void
3832lpfc_free_iocb_list(struct lpfc_hba *phba)
3833{
3834 struct lpfc_iocbq *iocbq_entry = NULL, *iocbq_next = NULL;
3835
3836 spin_lock_irq(&phba->hbalock);
3837 list_for_each_entry_safe(iocbq_entry, iocbq_next,
3838 &phba->lpfc_iocb_list, list) {
3839 list_del(&iocbq_entry->list);
3840 kfree(iocbq_entry);
3841 phba->total_iocbq_bufs--;
98c9ea5c 3842 }
3772a991
JS
3843 spin_unlock_irq(&phba->hbalock);
3844
3845 return;
3846}
3847
3848/**
3849 * lpfc_init_iocb_list - Allocate and initialize iocb list.
3850 * @phba: pointer to lpfc hba data structure.
3851 *
3852 * This routine is invoked to allocate and initizlize the driver's IOCB
3853 * list and set up the IOCB tag array accordingly.
3854 *
3855 * Return codes
3856 * 0 - sucessful
3857 * other values - error
3858 **/
3859static int
3860lpfc_init_iocb_list(struct lpfc_hba *phba, int iocb_count)
3861{
3862 struct lpfc_iocbq *iocbq_entry = NULL;
3863 uint16_t iotag;
3864 int i;
dea3101e 3865
3866 /* Initialize and populate the iocb list per host. */
3867 INIT_LIST_HEAD(&phba->lpfc_iocb_list);
3772a991 3868 for (i = 0; i < iocb_count; i++) {
dd00cc48 3869 iocbq_entry = kzalloc(sizeof(struct lpfc_iocbq), GFP_KERNEL);
dea3101e 3870 if (iocbq_entry == NULL) {
3871 printk(KERN_ERR "%s: only allocated %d iocbs of "
3872 "expected %d count. Unloading driver.\n",
cadbd4a5 3873 __func__, i, LPFC_IOCB_LIST_CNT);
dea3101e 3874 goto out_free_iocbq;
3875 }
3876
604a3e30
JB
3877 iotag = lpfc_sli_next_iotag(phba, iocbq_entry);
3878 if (iotag == 0) {
3772a991 3879 kfree(iocbq_entry);
604a3e30 3880 printk(KERN_ERR "%s: failed to allocate IOTAG. "
3772a991 3881 "Unloading driver.\n", __func__);
604a3e30
JB
3882 goto out_free_iocbq;
3883 }
3772a991 3884 iocbq_entry->sli4_xritag = NO_XRI;
2e0fef85
JS
3885
3886 spin_lock_irq(&phba->hbalock);
dea3101e 3887 list_add(&iocbq_entry->list, &phba->lpfc_iocb_list);
3888 phba->total_iocbq_bufs++;
2e0fef85 3889 spin_unlock_irq(&phba->hbalock);
dea3101e 3890 }
3891
3772a991 3892 return 0;
dea3101e 3893
3772a991
JS
3894out_free_iocbq:
3895 lpfc_free_iocb_list(phba);
dea3101e 3896
3772a991
JS
3897 return -ENOMEM;
3898}
5e9d9b82 3899
3772a991 3900/**
da0436e9
JS
3901 * lpfc_free_sgl_list - Free sgl list.
3902 * @phba: pointer to lpfc hba data structure.
3772a991 3903 *
da0436e9 3904 * This routine is invoked to free the driver's sgl list and memory.
3772a991 3905 **/
da0436e9
JS
3906static void
3907lpfc_free_sgl_list(struct lpfc_hba *phba)
3772a991 3908{
da0436e9
JS
3909 struct lpfc_sglq *sglq_entry = NULL, *sglq_next = NULL;
3910 LIST_HEAD(sglq_list);
3911 int rc = 0;
dea3101e 3912
da0436e9
JS
3913 spin_lock_irq(&phba->hbalock);
3914 list_splice_init(&phba->sli4_hba.lpfc_sgl_list, &sglq_list);
3915 spin_unlock_irq(&phba->hbalock);
dea3101e 3916
da0436e9
JS
3917 list_for_each_entry_safe(sglq_entry, sglq_next,
3918 &sglq_list, list) {
3919 list_del(&sglq_entry->list);
3920 lpfc_mbuf_free(phba, sglq_entry->virt, sglq_entry->phys);
3921 kfree(sglq_entry);
3922 phba->sli4_hba.total_sglq_bufs--;
3923 }
3924 rc = lpfc_sli4_remove_all_sgl_pages(phba);
3925 if (rc) {
3926 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
6a9c52cf 3927 "2005 Unable to deregister pages from HBA: %x\n", rc);
3772a991 3928 }
da0436e9
JS
3929 kfree(phba->sli4_hba.lpfc_els_sgl_array);
3930}
92d7f7b0 3931
da0436e9
JS
3932/**
3933 * lpfc_init_active_sgl_array - Allocate the buf to track active ELS XRIs.
3934 * @phba: pointer to lpfc hba data structure.
3935 *
3936 * This routine is invoked to allocate the driver's active sgl memory.
3937 * This array will hold the sglq_entry's for active IOs.
3938 **/
3939static int
3940lpfc_init_active_sgl_array(struct lpfc_hba *phba)
3941{
3942 int size;
3943 size = sizeof(struct lpfc_sglq *);
3944 size *= phba->sli4_hba.max_cfg_param.max_xri;
3945
3946 phba->sli4_hba.lpfc_sglq_active_list =
3947 kzalloc(size, GFP_KERNEL);
3948 if (!phba->sli4_hba.lpfc_sglq_active_list)
3949 return -ENOMEM;
3950 return 0;
3772a991
JS
3951}
3952
3953/**
da0436e9 3954 * lpfc_free_active_sgl - Free the buf that tracks active ELS XRIs.
3772a991
JS
3955 * @phba: pointer to lpfc hba data structure.
3956 *
da0436e9
JS
3957 * This routine is invoked to walk through the array of active sglq entries
3958 * and free all of the resources.
3959 * This is just a place holder for now.
3772a991
JS
3960 **/
3961static void
da0436e9 3962lpfc_free_active_sgl(struct lpfc_hba *phba)
3772a991 3963{
da0436e9 3964 kfree(phba->sli4_hba.lpfc_sglq_active_list);
3772a991
JS
3965}
3966
3967/**
da0436e9 3968 * lpfc_init_sgl_list - Allocate and initialize sgl list.
3772a991
JS
3969 * @phba: pointer to lpfc hba data structure.
3970 *
da0436e9
JS
3971 * This routine is invoked to allocate and initizlize the driver's sgl
3972 * list and set up the sgl xritag tag array accordingly.
3772a991
JS
3973 *
3974 * Return codes
da0436e9
JS
3975 * 0 - sucessful
3976 * other values - error
3772a991
JS
3977 **/
3978static int
da0436e9 3979lpfc_init_sgl_list(struct lpfc_hba *phba)
3772a991 3980{
da0436e9
JS
3981 struct lpfc_sglq *sglq_entry = NULL;
3982 int i;
3983 int els_xri_cnt;
3984
3985 els_xri_cnt = lpfc_sli4_get_els_iocb_cnt(phba);
3986 lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
3987 "2400 lpfc_init_sgl_list els %d.\n",
3988 els_xri_cnt);
3989 /* Initialize and populate the sglq list per host/VF. */
3990 INIT_LIST_HEAD(&phba->sli4_hba.lpfc_sgl_list);
3991 INIT_LIST_HEAD(&phba->sli4_hba.lpfc_abts_els_sgl_list);
3992
3993 /* Sanity check on XRI management */
3994 if (phba->sli4_hba.max_cfg_param.max_xri <= els_xri_cnt) {
3995 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
3996 "2562 No room left for SCSI XRI allocation: "
3997 "max_xri=%d, els_xri=%d\n",
3998 phba->sli4_hba.max_cfg_param.max_xri,
3999 els_xri_cnt);
4000 return -ENOMEM;
4001 }
3772a991 4002
da0436e9
JS
4003 /* Allocate memory for the ELS XRI management array */
4004 phba->sli4_hba.lpfc_els_sgl_array =
4005 kzalloc((sizeof(struct lpfc_sglq *) * els_xri_cnt),
4006 GFP_KERNEL);
0ff10d46 4007
da0436e9
JS
4008 if (!phba->sli4_hba.lpfc_els_sgl_array) {
4009 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
4010 "2401 Failed to allocate memory for ELS "
4011 "XRI management array of size %d.\n",
4012 els_xri_cnt);
4013 return -ENOMEM;
4014 }
2e0fef85 4015
da0436e9
JS
4016 /* Keep the SCSI XRI into the XRI management array */
4017 phba->sli4_hba.scsi_xri_max =
4018 phba->sli4_hba.max_cfg_param.max_xri - els_xri_cnt;
4019 phba->sli4_hba.scsi_xri_cnt = 0;
4020
4021 phba->sli4_hba.lpfc_scsi_psb_array =
4022 kzalloc((sizeof(struct lpfc_scsi_buf *) *
4023 phba->sli4_hba.scsi_xri_max), GFP_KERNEL);
4024
4025 if (!phba->sli4_hba.lpfc_scsi_psb_array) {
4026 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
4027 "2563 Failed to allocate memory for SCSI "
4028 "XRI management array of size %d.\n",
4029 phba->sli4_hba.scsi_xri_max);
4030 kfree(phba->sli4_hba.lpfc_els_sgl_array);
4031 return -ENOMEM;
4032 }
4033
4034 for (i = 0; i < els_xri_cnt; i++) {
4035 sglq_entry = kzalloc(sizeof(struct lpfc_sglq), GFP_KERNEL);
4036 if (sglq_entry == NULL) {
4037 printk(KERN_ERR "%s: only allocated %d sgls of "
4038 "expected %d count. Unloading driver.\n",
4039 __func__, i, els_xri_cnt);
4040 goto out_free_mem;
4041 }
4042
4043 sglq_entry->sli4_xritag = lpfc_sli4_next_xritag(phba);
4044 if (sglq_entry->sli4_xritag == NO_XRI) {
4045 kfree(sglq_entry);
4046 printk(KERN_ERR "%s: failed to allocate XRI.\n"
4047 "Unloading driver.\n", __func__);
4048 goto out_free_mem;
4049 }
4050 sglq_entry->buff_type = GEN_BUFF_TYPE;
4051 sglq_entry->virt = lpfc_mbuf_alloc(phba, 0, &sglq_entry->phys);
4052 if (sglq_entry->virt == NULL) {
4053 kfree(sglq_entry);
4054 printk(KERN_ERR "%s: failed to allocate mbuf.\n"
4055 "Unloading driver.\n", __func__);
4056 goto out_free_mem;
4057 }
4058 sglq_entry->sgl = sglq_entry->virt;
4059 memset(sglq_entry->sgl, 0, LPFC_BPL_SIZE);
4060
4061 /* The list order is used by later block SGL registraton */
4062 spin_lock_irq(&phba->hbalock);
4063 list_add_tail(&sglq_entry->list, &phba->sli4_hba.lpfc_sgl_list);
4064 phba->sli4_hba.lpfc_els_sgl_array[i] = sglq_entry;
4065 phba->sli4_hba.total_sglq_bufs++;
4066 spin_unlock_irq(&phba->hbalock);
4067 }
4068 return 0;
4069
4070out_free_mem:
4071 kfree(phba->sli4_hba.lpfc_scsi_psb_array);
4072 lpfc_free_sgl_list(phba);
4073 return -ENOMEM;
4074}
4075
4076/**
4077 * lpfc_sli4_init_rpi_hdrs - Post the rpi header memory region to the port
4078 * @phba: pointer to lpfc hba data structure.
4079 *
4080 * This routine is invoked to post rpi header templates to the
4081 * HBA consistent with the SLI-4 interface spec. This routine
4082 * posts a PAGE_SIZE memory region to the port to hold up to
4083 * PAGE_SIZE modulo 64 rpi context headers.
4084 * No locks are held here because this is an initialization routine
4085 * called only from probe or lpfc_online when interrupts are not
4086 * enabled and the driver is reinitializing the device.
4087 *
4088 * Return codes
4089 * 0 - sucessful
4090 * ENOMEM - No availble memory
4091 * EIO - The mailbox failed to complete successfully.
4092 **/
4093int
4094lpfc_sli4_init_rpi_hdrs(struct lpfc_hba *phba)
4095{
4096 int rc = 0;
4097 int longs;
4098 uint16_t rpi_count;
4099 struct lpfc_rpi_hdr *rpi_hdr;
4100
4101 INIT_LIST_HEAD(&phba->sli4_hba.lpfc_rpi_hdr_list);
4102
4103 /*
4104 * Provision an rpi bitmask range for discovery. The total count
4105 * is the difference between max and base + 1.
4106 */
4107 rpi_count = phba->sli4_hba.max_cfg_param.rpi_base +
4108 phba->sli4_hba.max_cfg_param.max_rpi - 1;
4109
4110 longs = ((rpi_count) + BITS_PER_LONG - 1) / BITS_PER_LONG;
4111 phba->sli4_hba.rpi_bmask = kzalloc(longs * sizeof(unsigned long),
4112 GFP_KERNEL);
4113 if (!phba->sli4_hba.rpi_bmask)
4114 return -ENOMEM;
4115
4116 rpi_hdr = lpfc_sli4_create_rpi_hdr(phba);
4117 if (!rpi_hdr) {
4118 lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
4119 "0391 Error during rpi post operation\n");
4120 lpfc_sli4_remove_rpis(phba);
4121 rc = -ENODEV;
4122 }
4123
4124 return rc;
4125}
4126
4127/**
4128 * lpfc_sli4_create_rpi_hdr - Allocate an rpi header memory region
4129 * @phba: pointer to lpfc hba data structure.
4130 *
4131 * This routine is invoked to allocate a single 4KB memory region to
4132 * support rpis and stores them in the phba. This single region
4133 * provides support for up to 64 rpis. The region is used globally
4134 * by the device.
4135 *
4136 * Returns:
4137 * A valid rpi hdr on success.
4138 * A NULL pointer on any failure.
4139 **/
4140struct lpfc_rpi_hdr *
4141lpfc_sli4_create_rpi_hdr(struct lpfc_hba *phba)
4142{
4143 uint16_t rpi_limit, curr_rpi_range;
4144 struct lpfc_dmabuf *dmabuf;
4145 struct lpfc_rpi_hdr *rpi_hdr;
4146
4147 rpi_limit = phba->sli4_hba.max_cfg_param.rpi_base +
4148 phba->sli4_hba.max_cfg_param.max_rpi - 1;
4149
4150 spin_lock_irq(&phba->hbalock);
4151 curr_rpi_range = phba->sli4_hba.next_rpi;
4152 spin_unlock_irq(&phba->hbalock);
4153
4154 /*
4155 * The port has a limited number of rpis. The increment here
4156 * is LPFC_RPI_HDR_COUNT - 1 to account for the starting value
4157 * and to allow the full max_rpi range per port.
4158 */
4159 if ((curr_rpi_range + (LPFC_RPI_HDR_COUNT - 1)) > rpi_limit)
4160 return NULL;
4161
4162 /*
4163 * First allocate the protocol header region for the port. The
4164 * port expects a 4KB DMA-mapped memory region that is 4K aligned.
4165 */
4166 dmabuf = kzalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
4167 if (!dmabuf)
4168 return NULL;
4169
4170 dmabuf->virt = dma_alloc_coherent(&phba->pcidev->dev,
4171 LPFC_HDR_TEMPLATE_SIZE,
4172 &dmabuf->phys,
4173 GFP_KERNEL);
4174 if (!dmabuf->virt) {
4175 rpi_hdr = NULL;
4176 goto err_free_dmabuf;
4177 }
4178
4179 memset(dmabuf->virt, 0, LPFC_HDR_TEMPLATE_SIZE);
4180 if (!IS_ALIGNED(dmabuf->phys, LPFC_HDR_TEMPLATE_SIZE)) {
4181 rpi_hdr = NULL;
4182 goto err_free_coherent;
4183 }
4184
4185 /* Save the rpi header data for cleanup later. */
4186 rpi_hdr = kzalloc(sizeof(struct lpfc_rpi_hdr), GFP_KERNEL);
4187 if (!rpi_hdr)
4188 goto err_free_coherent;
4189
4190 rpi_hdr->dmabuf = dmabuf;
4191 rpi_hdr->len = LPFC_HDR_TEMPLATE_SIZE;
4192 rpi_hdr->page_count = 1;
4193 spin_lock_irq(&phba->hbalock);
4194 rpi_hdr->start_rpi = phba->sli4_hba.next_rpi;
4195 list_add_tail(&rpi_hdr->list, &phba->sli4_hba.lpfc_rpi_hdr_list);
4196
4197 /*
4198 * The next_rpi stores the next module-64 rpi value to post
4199 * in any subsequent rpi memory region postings.
4200 */
4201 phba->sli4_hba.next_rpi += LPFC_RPI_HDR_COUNT;
4202 spin_unlock_irq(&phba->hbalock);
4203 return rpi_hdr;
4204
4205 err_free_coherent:
4206 dma_free_coherent(&phba->pcidev->dev, LPFC_HDR_TEMPLATE_SIZE,
4207 dmabuf->virt, dmabuf->phys);
4208 err_free_dmabuf:
4209 kfree(dmabuf);
4210 return NULL;
4211}
4212
4213/**
4214 * lpfc_sli4_remove_rpi_hdrs - Remove all rpi header memory regions
4215 * @phba: pointer to lpfc hba data structure.
4216 *
4217 * This routine is invoked to remove all memory resources allocated
4218 * to support rpis. This routine presumes the caller has released all
4219 * rpis consumed by fabric or port logins and is prepared to have
4220 * the header pages removed.
4221 **/
4222void
4223lpfc_sli4_remove_rpi_hdrs(struct lpfc_hba *phba)
4224{
4225 struct lpfc_rpi_hdr *rpi_hdr, *next_rpi_hdr;
4226
4227 list_for_each_entry_safe(rpi_hdr, next_rpi_hdr,
4228 &phba->sli4_hba.lpfc_rpi_hdr_list, list) {
4229 list_del(&rpi_hdr->list);
4230 dma_free_coherent(&phba->pcidev->dev, rpi_hdr->len,
4231 rpi_hdr->dmabuf->virt, rpi_hdr->dmabuf->phys);
4232 kfree(rpi_hdr->dmabuf);
4233 kfree(rpi_hdr);
4234 }
4235
4236 phba->sli4_hba.next_rpi = phba->sli4_hba.max_cfg_param.rpi_base;
4237 memset(phba->sli4_hba.rpi_bmask, 0, sizeof(*phba->sli4_hba.rpi_bmask));
4238}
4239
4240/**
4241 * lpfc_hba_alloc - Allocate driver hba data structure for a device.
4242 * @pdev: pointer to pci device data structure.
4243 *
4244 * This routine is invoked to allocate the driver hba data structure for an
4245 * HBA device. If the allocation is successful, the phba reference to the
4246 * PCI device data structure is set.
4247 *
4248 * Return codes
4249 * pointer to @phba - sucessful
4250 * NULL - error
4251 **/
4252static struct lpfc_hba *
4253lpfc_hba_alloc(struct pci_dev *pdev)
4254{
4255 struct lpfc_hba *phba;
4256
4257 /* Allocate memory for HBA structure */
4258 phba = kzalloc(sizeof(struct lpfc_hba), GFP_KERNEL);
4259 if (!phba) {
e34ccdfe 4260 dev_err(&pdev->dev, "failed to allocate hba struct\n");
da0436e9
JS
4261 return NULL;
4262 }
4263
4264 /* Set reference to PCI device in HBA structure */
4265 phba->pcidev = pdev;
4266
4267 /* Assign an unused board number */
4268 phba->brd_no = lpfc_get_instance();
4269 if (phba->brd_no < 0) {
4270 kfree(phba);
4271 return NULL;
4272 }
4273
f1c3b0fc
JS
4274 mutex_init(&phba->ct_event_mutex);
4275 INIT_LIST_HEAD(&phba->ct_ev_waiters);
4276
da0436e9
JS
4277 return phba;
4278}
4279
4280/**
4281 * lpfc_hba_free - Free driver hba data structure with a device.
4282 * @phba: pointer to lpfc hba data structure.
4283 *
4284 * This routine is invoked to free the driver hba data structure with an
4285 * HBA device.
4286 **/
4287static void
4288lpfc_hba_free(struct lpfc_hba *phba)
4289{
4290 /* Release the driver assigned board number */
4291 idr_remove(&lpfc_hba_index, phba->brd_no);
4292
4293 kfree(phba);
4294 return;
4295}
4296
4297/**
4298 * lpfc_create_shost - Create hba physical port with associated scsi host.
4299 * @phba: pointer to lpfc hba data structure.
4300 *
4301 * This routine is invoked to create HBA physical port and associate a SCSI
4302 * host with it.
4303 *
4304 * Return codes
4305 * 0 - sucessful
4306 * other values - error
4307 **/
4308static int
4309lpfc_create_shost(struct lpfc_hba *phba)
4310{
4311 struct lpfc_vport *vport;
4312 struct Scsi_Host *shost;
4313
4314 /* Initialize HBA FC structure */
4315 phba->fc_edtov = FF_DEF_EDTOV;
4316 phba->fc_ratov = FF_DEF_RATOV;
4317 phba->fc_altov = FF_DEF_ALTOV;
4318 phba->fc_arbtov = FF_DEF_ARBTOV;
4319
4320 vport = lpfc_create_port(phba, phba->brd_no, &phba->pcidev->dev);
4321 if (!vport)
4322 return -ENODEV;
4323
4324 shost = lpfc_shost_from_vport(vport);
4325 phba->pport = vport;
4326 lpfc_debugfs_initialize(vport);
4327 /* Put reference to SCSI host to driver's device private data */
4328 pci_set_drvdata(phba->pcidev, shost);
2e0fef85 4329
3772a991
JS
4330 return 0;
4331}
db2378e0 4332
3772a991
JS
4333/**
4334 * lpfc_destroy_shost - Destroy hba physical port with associated scsi host.
4335 * @phba: pointer to lpfc hba data structure.
4336 *
4337 * This routine is invoked to destroy HBA physical port and the associated
4338 * SCSI host.
4339 **/
4340static void
4341lpfc_destroy_shost(struct lpfc_hba *phba)
4342{
4343 struct lpfc_vport *vport = phba->pport;
4344
4345 /* Destroy physical port that associated with the SCSI host */
4346 destroy_port(vport);
4347
4348 return;
4349}
4350
4351/**
4352 * lpfc_setup_bg - Setup Block guard structures and debug areas.
4353 * @phba: pointer to lpfc hba data structure.
4354 * @shost: the shost to be used to detect Block guard settings.
4355 *
4356 * This routine sets up the local Block guard protocol settings for @shost.
4357 * This routine also allocates memory for debugging bg buffers.
4358 **/
4359static void
4360lpfc_setup_bg(struct lpfc_hba *phba, struct Scsi_Host *shost)
4361{
4362 int pagecnt = 10;
4363 if (lpfc_prot_mask && lpfc_prot_guard) {
4364 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
4365 "1478 Registering BlockGuard with the "
4366 "SCSI layer\n");
4367 scsi_host_set_prot(shost, lpfc_prot_mask);
4368 scsi_host_set_guard(shost, lpfc_prot_guard);
4369 }
4370 if (!_dump_buf_data) {
4371 while (pagecnt) {
4372 spin_lock_init(&_dump_buf_lock);
4373 _dump_buf_data =
4374 (char *) __get_free_pages(GFP_KERNEL, pagecnt);
4375 if (_dump_buf_data) {
6a9c52cf
JS
4376 lpfc_printf_log(phba, KERN_ERR, LOG_BG,
4377 "9043 BLKGRD: allocated %d pages for "
3772a991
JS
4378 "_dump_buf_data at 0x%p\n",
4379 (1 << pagecnt), _dump_buf_data);
4380 _dump_buf_data_order = pagecnt;
4381 memset(_dump_buf_data, 0,
4382 ((1 << PAGE_SHIFT) << pagecnt));
4383 break;
4384 } else
4385 --pagecnt;
4386 }
4387 if (!_dump_buf_data_order)
6a9c52cf
JS
4388 lpfc_printf_log(phba, KERN_ERR, LOG_BG,
4389 "9044 BLKGRD: ERROR unable to allocate "
3772a991
JS
4390 "memory for hexdump\n");
4391 } else
6a9c52cf
JS
4392 lpfc_printf_log(phba, KERN_ERR, LOG_BG,
4393 "9045 BLKGRD: already allocated _dump_buf_data=0x%p"
3772a991
JS
4394 "\n", _dump_buf_data);
4395 if (!_dump_buf_dif) {
4396 while (pagecnt) {
4397 _dump_buf_dif =
4398 (char *) __get_free_pages(GFP_KERNEL, pagecnt);
4399 if (_dump_buf_dif) {
6a9c52cf
JS
4400 lpfc_printf_log(phba, KERN_ERR, LOG_BG,
4401 "9046 BLKGRD: allocated %d pages for "
3772a991
JS
4402 "_dump_buf_dif at 0x%p\n",
4403 (1 << pagecnt), _dump_buf_dif);
4404 _dump_buf_dif_order = pagecnt;
4405 memset(_dump_buf_dif, 0,
4406 ((1 << PAGE_SHIFT) << pagecnt));
4407 break;
4408 } else
4409 --pagecnt;
4410 }
4411 if (!_dump_buf_dif_order)
6a9c52cf
JS
4412 lpfc_printf_log(phba, KERN_ERR, LOG_BG,
4413 "9047 BLKGRD: ERROR unable to allocate "
3772a991
JS
4414 "memory for hexdump\n");
4415 } else
6a9c52cf
JS
4416 lpfc_printf_log(phba, KERN_ERR, LOG_BG,
4417 "9048 BLKGRD: already allocated _dump_buf_dif=0x%p\n",
3772a991
JS
4418 _dump_buf_dif);
4419}
4420
4421/**
4422 * lpfc_post_init_setup - Perform necessary device post initialization setup.
4423 * @phba: pointer to lpfc hba data structure.
4424 *
4425 * This routine is invoked to perform all the necessary post initialization
4426 * setup for the device.
4427 **/
4428static void
4429lpfc_post_init_setup(struct lpfc_hba *phba)
4430{
4431 struct Scsi_Host *shost;
4432 struct lpfc_adapter_event_header adapter_event;
4433
4434 /* Get the default values for Model Name and Description */
4435 lpfc_get_hba_model_desc(phba, phba->ModelName, phba->ModelDesc);
4436
4437 /*
4438 * hba setup may have changed the hba_queue_depth so we need to
4439 * adjust the value of can_queue.
4440 */
4441 shost = pci_get_drvdata(phba->pcidev);
4442 shost->can_queue = phba->cfg_hba_queue_depth - 10;
4443 if (phba->sli3_options & LPFC_SLI3_BG_ENABLED)
4444 lpfc_setup_bg(phba, shost);
4445
4446 lpfc_host_attrib_init(shost);
4447
4448 if (phba->cfg_poll & DISABLE_FCP_RING_INT) {
4449 spin_lock_irq(shost->host_lock);
4450 lpfc_poll_start_timer(phba);
4451 spin_unlock_irq(shost->host_lock);
4452 }
4453
4454 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
4455 "0428 Perform SCSI scan\n");
4456 /* Send board arrival event to upper layer */
4457 adapter_event.event_type = FC_REG_ADAPTER_EVENT;
4458 adapter_event.subcategory = LPFC_EVENT_ARRIVAL;
4459 fc_host_post_vendor_event(shost, fc_get_event_number(),
4460 sizeof(adapter_event),
4461 (char *) &adapter_event,
4462 LPFC_NL_VENDOR_ID);
4463 return;
4464}
4465
4466/**
4467 * lpfc_sli_pci_mem_setup - Setup SLI3 HBA PCI memory space.
4468 * @phba: pointer to lpfc hba data structure.
4469 *
4470 * This routine is invoked to set up the PCI device memory space for device
4471 * with SLI-3 interface spec.
4472 *
4473 * Return codes
4474 * 0 - sucessful
4475 * other values - error
4476 **/
4477static int
4478lpfc_sli_pci_mem_setup(struct lpfc_hba *phba)
4479{
4480 struct pci_dev *pdev;
4481 unsigned long bar0map_len, bar2map_len;
4482 int i, hbq_count;
4483 void *ptr;
4484 int error = -ENODEV;
4485
4486 /* Obtain PCI device reference */
4487 if (!phba->pcidev)
4488 return error;
4489 else
4490 pdev = phba->pcidev;
4491
4492 /* Set the device DMA mask size */
4493 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0)
4494 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0)
4495 return error;
4496
4497 /* Get the bus address of Bar0 and Bar2 and the number of bytes
4498 * required by each mapping.
4499 */
4500 phba->pci_bar0_map = pci_resource_start(pdev, 0);
4501 bar0map_len = pci_resource_len(pdev, 0);
4502
4503 phba->pci_bar2_map = pci_resource_start(pdev, 2);
4504 bar2map_len = pci_resource_len(pdev, 2);
4505
4506 /* Map HBA SLIM to a kernel virtual address. */
4507 phba->slim_memmap_p = ioremap(phba->pci_bar0_map, bar0map_len);
4508 if (!phba->slim_memmap_p) {
4509 dev_printk(KERN_ERR, &pdev->dev,
4510 "ioremap failed for SLIM memory.\n");
4511 goto out;
4512 }
4513
4514 /* Map HBA Control Registers to a kernel virtual address. */
4515 phba->ctrl_regs_memmap_p = ioremap(phba->pci_bar2_map, bar2map_len);
4516 if (!phba->ctrl_regs_memmap_p) {
4517 dev_printk(KERN_ERR, &pdev->dev,
4518 "ioremap failed for HBA control registers.\n");
4519 goto out_iounmap_slim;
4520 }
4521
4522 /* Allocate memory for SLI-2 structures */
4523 phba->slim2p.virt = dma_alloc_coherent(&pdev->dev,
4524 SLI2_SLIM_SIZE,
4525 &phba->slim2p.phys,
4526 GFP_KERNEL);
4527 if (!phba->slim2p.virt)
4528 goto out_iounmap;
4529
4530 memset(phba->slim2p.virt, 0, SLI2_SLIM_SIZE);
4531 phba->mbox = phba->slim2p.virt + offsetof(struct lpfc_sli2_slim, mbx);
4532 phba->pcb = (phba->slim2p.virt + offsetof(struct lpfc_sli2_slim, pcb));
4533 phba->IOCBs = (phba->slim2p.virt +
4534 offsetof(struct lpfc_sli2_slim, IOCBs));
4535
4536 phba->hbqslimp.virt = dma_alloc_coherent(&pdev->dev,
4537 lpfc_sli_hbq_size(),
4538 &phba->hbqslimp.phys,
4539 GFP_KERNEL);
4540 if (!phba->hbqslimp.virt)
4541 goto out_free_slim;
4542
4543 hbq_count = lpfc_sli_hbq_count();
4544 ptr = phba->hbqslimp.virt;
4545 for (i = 0; i < hbq_count; ++i) {
4546 phba->hbqs[i].hbq_virt = ptr;
4547 INIT_LIST_HEAD(&phba->hbqs[i].hbq_buffer_list);
4548 ptr += (lpfc_hbq_defs[i]->entry_count *
4549 sizeof(struct lpfc_hbq_entry));
4550 }
4551 phba->hbqs[LPFC_ELS_HBQ].hbq_alloc_buffer = lpfc_els_hbq_alloc;
4552 phba->hbqs[LPFC_ELS_HBQ].hbq_free_buffer = lpfc_els_hbq_free;
4553
4554 memset(phba->hbqslimp.virt, 0, lpfc_sli_hbq_size());
4555
4556 INIT_LIST_HEAD(&phba->rb_pend_list);
4557
4558 phba->MBslimaddr = phba->slim_memmap_p;
4559 phba->HAregaddr = phba->ctrl_regs_memmap_p + HA_REG_OFFSET;
4560 phba->CAregaddr = phba->ctrl_regs_memmap_p + CA_REG_OFFSET;
4561 phba->HSregaddr = phba->ctrl_regs_memmap_p + HS_REG_OFFSET;
4562 phba->HCregaddr = phba->ctrl_regs_memmap_p + HC_REG_OFFSET;
4563
4564 return 0;
4565
4566out_free_slim:
4567 dma_free_coherent(&pdev->dev, SLI2_SLIM_SIZE,
4568 phba->slim2p.virt, phba->slim2p.phys);
4569out_iounmap:
4570 iounmap(phba->ctrl_regs_memmap_p);
4571out_iounmap_slim:
4572 iounmap(phba->slim_memmap_p);
4573out:
4574 return error;
4575}
4576
4577/**
4578 * lpfc_sli_pci_mem_unset - Unset SLI3 HBA PCI memory space.
4579 * @phba: pointer to lpfc hba data structure.
4580 *
4581 * This routine is invoked to unset the PCI device memory space for device
4582 * with SLI-3 interface spec.
4583 **/
4584static void
4585lpfc_sli_pci_mem_unset(struct lpfc_hba *phba)
4586{
4587 struct pci_dev *pdev;
4588
4589 /* Obtain PCI device reference */
4590 if (!phba->pcidev)
4591 return;
4592 else
4593 pdev = phba->pcidev;
4594
4595 /* Free coherent DMA memory allocated */
4596 dma_free_coherent(&pdev->dev, lpfc_sli_hbq_size(),
4597 phba->hbqslimp.virt, phba->hbqslimp.phys);
4598 dma_free_coherent(&pdev->dev, SLI2_SLIM_SIZE,
4599 phba->slim2p.virt, phba->slim2p.phys);
4600
4601 /* I/O memory unmap */
4602 iounmap(phba->ctrl_regs_memmap_p);
4603 iounmap(phba->slim_memmap_p);
4604
4605 return;
4606}
4607
4608/**
da0436e9 4609 * lpfc_sli4_post_status_check - Wait for SLI4 POST done and check status
3772a991
JS
4610 * @phba: pointer to lpfc hba data structure.
4611 *
da0436e9
JS
4612 * This routine is invoked to wait for SLI4 device Power On Self Test (POST)
4613 * done and check status.
3772a991 4614 *
da0436e9 4615 * Return 0 if successful, otherwise -ENODEV.
3772a991 4616 **/
da0436e9
JS
4617int
4618lpfc_sli4_post_status_check(struct lpfc_hba *phba)
3772a991 4619{
da0436e9
JS
4620 struct lpfc_register sta_reg, uerrlo_reg, uerrhi_reg, scratchpad;
4621 uint32_t onlnreg0, onlnreg1;
4622 int i, port_error = -ENODEV;
3772a991 4623
da0436e9
JS
4624 if (!phba->sli4_hba.STAregaddr)
4625 return -ENODEV;
3772a991 4626
da0436e9
JS
4627 /* Wait up to 30 seconds for the SLI Port POST done and ready */
4628 for (i = 0; i < 3000; i++) {
4629 sta_reg.word0 = readl(phba->sli4_hba.STAregaddr);
4630 /* Encounter fatal POST error, break out */
4631 if (bf_get(lpfc_hst_state_perr, &sta_reg)) {
4632 port_error = -ENODEV;
4633 break;
4634 }
4635 if (LPFC_POST_STAGE_ARMFW_READY ==
4636 bf_get(lpfc_hst_state_port_status, &sta_reg)) {
4637 port_error = 0;
4638 break;
4639 }
4640 msleep(10);
3772a991
JS
4641 }
4642
da0436e9
JS
4643 if (port_error)
4644 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4645 "1408 Failure HBA POST Status: sta_reg=0x%x, "
4646 "perr=x%x, sfi=x%x, nip=x%x, ipc=x%x, xrom=x%x, "
4647 "dl=x%x, pstatus=x%x\n", sta_reg.word0,
4648 bf_get(lpfc_hst_state_perr, &sta_reg),
4649 bf_get(lpfc_hst_state_sfi, &sta_reg),
4650 bf_get(lpfc_hst_state_nip, &sta_reg),
4651 bf_get(lpfc_hst_state_ipc, &sta_reg),
4652 bf_get(lpfc_hst_state_xrom, &sta_reg),
4653 bf_get(lpfc_hst_state_dl, &sta_reg),
4654 bf_get(lpfc_hst_state_port_status, &sta_reg));
4655
4656 /* Log device information */
4657 scratchpad.word0 = readl(phba->sli4_hba.SCRATCHPADregaddr);
4658 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
4659 "2534 Device Info: ChipType=0x%x, SliRev=0x%x, "
4660 "FeatureL1=0x%x, FeatureL2=0x%x\n",
4661 bf_get(lpfc_scratchpad_chiptype, &scratchpad),
4662 bf_get(lpfc_scratchpad_slirev, &scratchpad),
4663 bf_get(lpfc_scratchpad_featurelevel1, &scratchpad),
4664 bf_get(lpfc_scratchpad_featurelevel2, &scratchpad));
4665
8fa38513
JS
4666 /* With uncoverable error, log the error message and return error */
4667 onlnreg0 = readl(phba->sli4_hba.ONLINE0regaddr);
4668 onlnreg1 = readl(phba->sli4_hba.ONLINE1regaddr);
4669 if ((onlnreg0 != LPFC_ONLINE_NERR) || (onlnreg1 != LPFC_ONLINE_NERR)) {
4670 uerrlo_reg.word0 = readl(phba->sli4_hba.UERRLOregaddr);
4671 uerrhi_reg.word0 = readl(phba->sli4_hba.UERRHIregaddr);
4672 if (uerrlo_reg.word0 || uerrhi_reg.word0) {
4673 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4674 "1422 HBA Unrecoverable error: "
4675 "uerr_lo_reg=0x%x, uerr_hi_reg=0x%x, "
4676 "online0_reg=0x%x, online1_reg=0x%x\n",
4677 uerrlo_reg.word0, uerrhi_reg.word0,
4678 onlnreg0, onlnreg1);
4679 }
4680 return -ENODEV;
4681 }
4682
da0436e9
JS
4683 return port_error;
4684}
3772a991 4685
da0436e9
JS
4686/**
4687 * lpfc_sli4_bar0_register_memmap - Set up SLI4 BAR0 register memory map.
4688 * @phba: pointer to lpfc hba data structure.
4689 *
4690 * This routine is invoked to set up SLI4 BAR0 PCI config space register
4691 * memory map.
4692 **/
4693static void
4694lpfc_sli4_bar0_register_memmap(struct lpfc_hba *phba)
4695{
4696 phba->sli4_hba.UERRLOregaddr = phba->sli4_hba.conf_regs_memmap_p +
4697 LPFC_UERR_STATUS_LO;
4698 phba->sli4_hba.UERRHIregaddr = phba->sli4_hba.conf_regs_memmap_p +
4699 LPFC_UERR_STATUS_HI;
4700 phba->sli4_hba.ONLINE0regaddr = phba->sli4_hba.conf_regs_memmap_p +
4701 LPFC_ONLINE0;
4702 phba->sli4_hba.ONLINE1regaddr = phba->sli4_hba.conf_regs_memmap_p +
4703 LPFC_ONLINE1;
4704 phba->sli4_hba.SCRATCHPADregaddr = phba->sli4_hba.conf_regs_memmap_p +
4705 LPFC_SCRATCHPAD;
4706}
3772a991 4707
da0436e9
JS
4708/**
4709 * lpfc_sli4_bar1_register_memmap - Set up SLI4 BAR1 register memory map.
4710 * @phba: pointer to lpfc hba data structure.
4711 *
4712 * This routine is invoked to set up SLI4 BAR1 control status register (CSR)
4713 * memory map.
4714 **/
4715static void
4716lpfc_sli4_bar1_register_memmap(struct lpfc_hba *phba)
4717{
3772a991 4718
da0436e9
JS
4719 phba->sli4_hba.STAregaddr = phba->sli4_hba.ctrl_regs_memmap_p +
4720 LPFC_HST_STATE;
4721 phba->sli4_hba.ISRregaddr = phba->sli4_hba.ctrl_regs_memmap_p +
4722 LPFC_HST_ISR0;
4723 phba->sli4_hba.IMRregaddr = phba->sli4_hba.ctrl_regs_memmap_p +
4724 LPFC_HST_IMR0;
4725 phba->sli4_hba.ISCRregaddr = phba->sli4_hba.ctrl_regs_memmap_p +
4726 LPFC_HST_ISCR0;
4727 return;
3772a991
JS
4728}
4729
4730/**
da0436e9 4731 * lpfc_sli4_bar2_register_memmap - Set up SLI4 BAR2 register memory map.
3772a991 4732 * @phba: pointer to lpfc hba data structure.
da0436e9 4733 * @vf: virtual function number
3772a991 4734 *
da0436e9
JS
4735 * This routine is invoked to set up SLI4 BAR2 doorbell register memory map
4736 * based on the given viftual function number, @vf.
4737 *
4738 * Return 0 if successful, otherwise -ENODEV.
3772a991 4739 **/
da0436e9
JS
4740static int
4741lpfc_sli4_bar2_register_memmap(struct lpfc_hba *phba, uint32_t vf)
3772a991 4742{
da0436e9
JS
4743 if (vf > LPFC_VIR_FUNC_MAX)
4744 return -ENODEV;
3772a991 4745
da0436e9
JS
4746 phba->sli4_hba.RQDBregaddr = (phba->sli4_hba.drbl_regs_memmap_p +
4747 vf * LPFC_VFR_PAGE_SIZE + LPFC_RQ_DOORBELL);
4748 phba->sli4_hba.WQDBregaddr = (phba->sli4_hba.drbl_regs_memmap_p +
4749 vf * LPFC_VFR_PAGE_SIZE + LPFC_WQ_DOORBELL);
4750 phba->sli4_hba.EQCQDBregaddr = (phba->sli4_hba.drbl_regs_memmap_p +
4751 vf * LPFC_VFR_PAGE_SIZE + LPFC_EQCQ_DOORBELL);
4752 phba->sli4_hba.MQDBregaddr = (phba->sli4_hba.drbl_regs_memmap_p +
4753 vf * LPFC_VFR_PAGE_SIZE + LPFC_MQ_DOORBELL);
4754 phba->sli4_hba.BMBXregaddr = (phba->sli4_hba.drbl_regs_memmap_p +
4755 vf * LPFC_VFR_PAGE_SIZE + LPFC_BMBX);
4756 return 0;
3772a991
JS
4757}
4758
4759/**
da0436e9 4760 * lpfc_create_bootstrap_mbox - Create the bootstrap mailbox
3772a991
JS
4761 * @phba: pointer to lpfc hba data structure.
4762 *
da0436e9
JS
4763 * This routine is invoked to create the bootstrap mailbox
4764 * region consistent with the SLI-4 interface spec. This
4765 * routine allocates all memory necessary to communicate
4766 * mailbox commands to the port and sets up all alignment
4767 * needs. No locks are expected to be held when calling
4768 * this routine.
3772a991
JS
4769 *
4770 * Return codes
4771 * 0 - sucessful
da0436e9
JS
4772 * ENOMEM - could not allocated memory.
4773 **/
3772a991 4774static int
da0436e9 4775lpfc_create_bootstrap_mbox(struct lpfc_hba *phba)
3772a991 4776{
da0436e9
JS
4777 uint32_t bmbx_size;
4778 struct lpfc_dmabuf *dmabuf;
4779 struct dma_address *dma_address;
4780 uint32_t pa_addr;
4781 uint64_t phys_addr;
4782
4783 dmabuf = kzalloc(sizeof(struct lpfc_dmabuf), GFP_KERNEL);
4784 if (!dmabuf)
4785 return -ENOMEM;
3772a991 4786
da0436e9
JS
4787 /*
4788 * The bootstrap mailbox region is comprised of 2 parts
4789 * plus an alignment restriction of 16 bytes.
4790 */
4791 bmbx_size = sizeof(struct lpfc_bmbx_create) + (LPFC_ALIGN_16_BYTE - 1);
4792 dmabuf->virt = dma_alloc_coherent(&phba->pcidev->dev,
4793 bmbx_size,
4794 &dmabuf->phys,
4795 GFP_KERNEL);
4796 if (!dmabuf->virt) {
4797 kfree(dmabuf);
4798 return -ENOMEM;
3772a991 4799 }
da0436e9 4800 memset(dmabuf->virt, 0, bmbx_size);
3772a991 4801
da0436e9
JS
4802 /*
4803 * Initialize the bootstrap mailbox pointers now so that the register
4804 * operations are simple later. The mailbox dma address is required
4805 * to be 16-byte aligned. Also align the virtual memory as each
4806 * maibox is copied into the bmbx mailbox region before issuing the
4807 * command to the port.
4808 */
4809 phba->sli4_hba.bmbx.dmabuf = dmabuf;
4810 phba->sli4_hba.bmbx.bmbx_size = bmbx_size;
4811
4812 phba->sli4_hba.bmbx.avirt = PTR_ALIGN(dmabuf->virt,
4813 LPFC_ALIGN_16_BYTE);
4814 phba->sli4_hba.bmbx.aphys = ALIGN(dmabuf->phys,
4815 LPFC_ALIGN_16_BYTE);
4816
4817 /*
4818 * Set the high and low physical addresses now. The SLI4 alignment
4819 * requirement is 16 bytes and the mailbox is posted to the port
4820 * as two 30-bit addresses. The other data is a bit marking whether
4821 * the 30-bit address is the high or low address.
4822 * Upcast bmbx aphys to 64bits so shift instruction compiles
4823 * clean on 32 bit machines.
4824 */
4825 dma_address = &phba->sli4_hba.bmbx.dma_address;
4826 phys_addr = (uint64_t)phba->sli4_hba.bmbx.aphys;
4827 pa_addr = (uint32_t) ((phys_addr >> 34) & 0x3fffffff);
4828 dma_address->addr_hi = (uint32_t) ((pa_addr << 2) |
4829 LPFC_BMBX_BIT1_ADDR_HI);
4830
4831 pa_addr = (uint32_t) ((phba->sli4_hba.bmbx.aphys >> 4) & 0x3fffffff);
4832 dma_address->addr_lo = (uint32_t) ((pa_addr << 2) |
4833 LPFC_BMBX_BIT1_ADDR_LO);
4834 return 0;
3772a991
JS
4835}
4836
4837/**
da0436e9 4838 * lpfc_destroy_bootstrap_mbox - Destroy all bootstrap mailbox resources
3772a991
JS
4839 * @phba: pointer to lpfc hba data structure.
4840 *
da0436e9
JS
4841 * This routine is invoked to teardown the bootstrap mailbox
4842 * region and release all host resources. This routine requires
4843 * the caller to ensure all mailbox commands recovered, no
4844 * additional mailbox comands are sent, and interrupts are disabled
4845 * before calling this routine.
4846 *
4847 **/
3772a991 4848static void
da0436e9 4849lpfc_destroy_bootstrap_mbox(struct lpfc_hba *phba)
3772a991 4850{
da0436e9
JS
4851 dma_free_coherent(&phba->pcidev->dev,
4852 phba->sli4_hba.bmbx.bmbx_size,
4853 phba->sli4_hba.bmbx.dmabuf->virt,
4854 phba->sli4_hba.bmbx.dmabuf->phys);
4855
4856 kfree(phba->sli4_hba.bmbx.dmabuf);
4857 memset(&phba->sli4_hba.bmbx, 0, sizeof(struct lpfc_bmbx));
3772a991
JS
4858}
4859
4860/**
da0436e9 4861 * lpfc_sli4_read_config - Get the config parameters.
3772a991
JS
4862 * @phba: pointer to lpfc hba data structure.
4863 *
da0436e9
JS
4864 * This routine is invoked to read the configuration parameters from the HBA.
4865 * The configuration parameters are used to set the base and maximum values
4866 * for RPI's XRI's VPI's VFI's and FCFIs. These values also affect the resource
4867 * allocation for the port.
3772a991
JS
4868 *
4869 * Return codes
da0436e9
JS
4870 * 0 - sucessful
4871 * ENOMEM - No availble memory
4872 * EIO - The mailbox failed to complete successfully.
3772a991 4873 **/
da0436e9
JS
4874static int
4875lpfc_sli4_read_config(struct lpfc_hba *phba)
3772a991 4876{
da0436e9
JS
4877 LPFC_MBOXQ_t *pmb;
4878 struct lpfc_mbx_read_config *rd_config;
4879 uint32_t rc = 0;
3772a991 4880
da0436e9
JS
4881 pmb = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
4882 if (!pmb) {
4883 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
4884 "2011 Unable to allocate memory for issuing "
4885 "SLI_CONFIG_SPECIAL mailbox command\n");
4886 return -ENOMEM;
3772a991
JS
4887 }
4888
da0436e9 4889 lpfc_read_config(phba, pmb);
3772a991 4890
da0436e9
JS
4891 rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
4892 if (rc != MBX_SUCCESS) {
4893 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
4894 "2012 Mailbox failed , mbxCmd x%x "
4895 "READ_CONFIG, mbxStatus x%x\n",
4896 bf_get(lpfc_mqe_command, &pmb->u.mqe),
4897 bf_get(lpfc_mqe_status, &pmb->u.mqe));
4898 rc = -EIO;
4899 } else {
4900 rd_config = &pmb->u.mqe.un.rd_config;
4901 phba->sli4_hba.max_cfg_param.max_xri =
4902 bf_get(lpfc_mbx_rd_conf_xri_count, rd_config);
4903 phba->sli4_hba.max_cfg_param.xri_base =
4904 bf_get(lpfc_mbx_rd_conf_xri_base, rd_config);
4905 phba->sli4_hba.max_cfg_param.max_vpi =
4906 bf_get(lpfc_mbx_rd_conf_vpi_count, rd_config);
4907 phba->sli4_hba.max_cfg_param.vpi_base =
4908 bf_get(lpfc_mbx_rd_conf_vpi_base, rd_config);
4909 phba->sli4_hba.max_cfg_param.max_rpi =
4910 bf_get(lpfc_mbx_rd_conf_rpi_count, rd_config);
4911 phba->sli4_hba.max_cfg_param.rpi_base =
4912 bf_get(lpfc_mbx_rd_conf_rpi_base, rd_config);
4913 phba->sli4_hba.max_cfg_param.max_vfi =
4914 bf_get(lpfc_mbx_rd_conf_vfi_count, rd_config);
4915 phba->sli4_hba.max_cfg_param.vfi_base =
4916 bf_get(lpfc_mbx_rd_conf_vfi_base, rd_config);
4917 phba->sli4_hba.max_cfg_param.max_fcfi =
4918 bf_get(lpfc_mbx_rd_conf_fcfi_count, rd_config);
4919 phba->sli4_hba.max_cfg_param.fcfi_base =
4920 bf_get(lpfc_mbx_rd_conf_fcfi_base, rd_config);
4921 phba->sli4_hba.max_cfg_param.max_eq =
4922 bf_get(lpfc_mbx_rd_conf_eq_count, rd_config);
4923 phba->sli4_hba.max_cfg_param.max_rq =
4924 bf_get(lpfc_mbx_rd_conf_rq_count, rd_config);
4925 phba->sli4_hba.max_cfg_param.max_wq =
4926 bf_get(lpfc_mbx_rd_conf_wq_count, rd_config);
4927 phba->sli4_hba.max_cfg_param.max_cq =
4928 bf_get(lpfc_mbx_rd_conf_cq_count, rd_config);
4929 phba->lmt = bf_get(lpfc_mbx_rd_conf_lmt, rd_config);
4930 phba->sli4_hba.next_xri = phba->sli4_hba.max_cfg_param.xri_base;
4931 phba->vpi_base = phba->sli4_hba.max_cfg_param.vpi_base;
4932 phba->vfi_base = phba->sli4_hba.max_cfg_param.vfi_base;
4933 phba->sli4_hba.next_rpi = phba->sli4_hba.max_cfg_param.rpi_base;
4934 phba->max_vpi = phba->sli4_hba.max_cfg_param.max_vpi;
4935 phba->max_vports = phba->max_vpi;
4936 lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
4937 "2003 cfg params XRI(B:%d M:%d), "
4938 "VPI(B:%d M:%d) "
4939 "VFI(B:%d M:%d) "
4940 "RPI(B:%d M:%d) "
4941 "FCFI(B:%d M:%d)\n",
4942 phba->sli4_hba.max_cfg_param.xri_base,
4943 phba->sli4_hba.max_cfg_param.max_xri,
4944 phba->sli4_hba.max_cfg_param.vpi_base,
4945 phba->sli4_hba.max_cfg_param.max_vpi,
4946 phba->sli4_hba.max_cfg_param.vfi_base,
4947 phba->sli4_hba.max_cfg_param.max_vfi,
4948 phba->sli4_hba.max_cfg_param.rpi_base,
4949 phba->sli4_hba.max_cfg_param.max_rpi,
4950 phba->sli4_hba.max_cfg_param.fcfi_base,
4951 phba->sli4_hba.max_cfg_param.max_fcfi);
3772a991 4952 }
da0436e9
JS
4953 mempool_free(pmb, phba->mbox_mem_pool);
4954
4955 /* Reset the DFT_HBA_Q_DEPTH to the max xri */
4956 if (phba->cfg_hba_queue_depth > (phba->sli4_hba.max_cfg_param.max_xri))
4957 phba->cfg_hba_queue_depth =
4958 phba->sli4_hba.max_cfg_param.max_xri;
4959 return rc;
3772a991
JS
4960}
4961
4962/**
da0436e9 4963 * lpfc_dev_endian_order_setup - Notify the port of the host's endian order.
3772a991
JS
4964 * @phba: pointer to lpfc hba data structure.
4965 *
da0436e9
JS
4966 * This routine is invoked to setup the host-side endian order to the
4967 * HBA consistent with the SLI-4 interface spec.
4968 *
4969 * Return codes
4970 * 0 - sucessful
4971 * ENOMEM - No availble memory
4972 * EIO - The mailbox failed to complete successfully.
3772a991 4973 **/
da0436e9
JS
4974static int
4975lpfc_setup_endian_order(struct lpfc_hba *phba)
3772a991 4976{
da0436e9
JS
4977 LPFC_MBOXQ_t *mboxq;
4978 uint32_t rc = 0;
4979 uint32_t endian_mb_data[2] = {HOST_ENDIAN_LOW_WORD0,
4980 HOST_ENDIAN_HIGH_WORD1};
3772a991 4981
da0436e9
JS
4982 mboxq = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
4983 if (!mboxq) {
4984 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4985 "0492 Unable to allocate memory for issuing "
4986 "SLI_CONFIG_SPECIAL mailbox command\n");
4987 return -ENOMEM;
4988 }
3772a991 4989
da0436e9
JS
4990 /*
4991 * The SLI4_CONFIG_SPECIAL mailbox command requires the first two
4992 * words to contain special data values and no other data.
4993 */
4994 memset(mboxq, 0, sizeof(LPFC_MBOXQ_t));
4995 memcpy(&mboxq->u.mqe, &endian_mb_data, sizeof(endian_mb_data));
4996 rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
4997 if (rc != MBX_SUCCESS) {
4998 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
4999 "0493 SLI_CONFIG_SPECIAL mailbox failed with "
5000 "status x%x\n",
5001 rc);
5002 rc = -EIO;
5003 }
5004
5005 mempool_free(mboxq, phba->mbox_mem_pool);
5006 return rc;
3772a991
JS
5007}
5008
5009/**
da0436e9 5010 * lpfc_sli4_queue_create - Create all the SLI4 queues
3772a991
JS
5011 * @phba: pointer to lpfc hba data structure.
5012 *
da0436e9
JS
5013 * This routine is invoked to allocate all the SLI4 queues for the FCoE HBA
5014 * operation. For each SLI4 queue type, the parameters such as queue entry
5015 * count (queue depth) shall be taken from the module parameter. For now,
5016 * we just use some constant number as place holder.
5017 *
5018 * Return codes
5019 * 0 - sucessful
5020 * ENOMEM - No availble memory
5021 * EIO - The mailbox failed to complete successfully.
3772a991 5022 **/
da0436e9
JS
5023static int
5024lpfc_sli4_queue_create(struct lpfc_hba *phba)
3772a991 5025{
da0436e9
JS
5026 struct lpfc_queue *qdesc;
5027 int fcp_eqidx, fcp_cqidx, fcp_wqidx;
5028 int cfg_fcp_wq_count;
5029 int cfg_fcp_eq_count;
3772a991 5030
da0436e9
JS
5031 /*
5032 * Sanity check for confiugred queue parameters against the run-time
5033 * device parameters
5034 */
3772a991 5035
da0436e9
JS
5036 /* Sanity check on FCP fast-path WQ parameters */
5037 cfg_fcp_wq_count = phba->cfg_fcp_wq_count;
5038 if (cfg_fcp_wq_count >
5039 (phba->sli4_hba.max_cfg_param.max_wq - LPFC_SP_WQN_DEF)) {
5040 cfg_fcp_wq_count = phba->sli4_hba.max_cfg_param.max_wq -
5041 LPFC_SP_WQN_DEF;
5042 if (cfg_fcp_wq_count < LPFC_FP_WQN_MIN) {
5043 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5044 "2581 Not enough WQs (%d) from "
5045 "the pci function for supporting "
5046 "FCP WQs (%d)\n",
5047 phba->sli4_hba.max_cfg_param.max_wq,
5048 phba->cfg_fcp_wq_count);
5049 goto out_error;
5050 }
5051 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
5052 "2582 Not enough WQs (%d) from the pci "
5053 "function for supporting the requested "
5054 "FCP WQs (%d), the actual FCP WQs can "
5055 "be supported: %d\n",
5056 phba->sli4_hba.max_cfg_param.max_wq,
5057 phba->cfg_fcp_wq_count, cfg_fcp_wq_count);
5058 }
5059 /* The actual number of FCP work queues adopted */
5060 phba->cfg_fcp_wq_count = cfg_fcp_wq_count;
5061
5062 /* Sanity check on FCP fast-path EQ parameters */
5063 cfg_fcp_eq_count = phba->cfg_fcp_eq_count;
5064 if (cfg_fcp_eq_count >
5065 (phba->sli4_hba.max_cfg_param.max_eq - LPFC_SP_EQN_DEF)) {
5066 cfg_fcp_eq_count = phba->sli4_hba.max_cfg_param.max_eq -
5067 LPFC_SP_EQN_DEF;
5068 if (cfg_fcp_eq_count < LPFC_FP_EQN_MIN) {
5069 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5070 "2574 Not enough EQs (%d) from the "
5071 "pci function for supporting FCP "
5072 "EQs (%d)\n",
5073 phba->sli4_hba.max_cfg_param.max_eq,
5074 phba->cfg_fcp_eq_count);
5075 goto out_error;
5076 }
5077 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
5078 "2575 Not enough EQs (%d) from the pci "
5079 "function for supporting the requested "
5080 "FCP EQs (%d), the actual FCP EQs can "
5081 "be supported: %d\n",
5082 phba->sli4_hba.max_cfg_param.max_eq,
5083 phba->cfg_fcp_eq_count, cfg_fcp_eq_count);
5084 }
5085 /* It does not make sense to have more EQs than WQs */
5086 if (cfg_fcp_eq_count > phba->cfg_fcp_wq_count) {
5087 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
6a9c52cf
JS
5088 "2593 The FCP EQ count(%d) cannot be greater "
5089 "than the FCP WQ count(%d), limiting the "
5090 "FCP EQ count to %d\n", cfg_fcp_eq_count,
da0436e9
JS
5091 phba->cfg_fcp_wq_count,
5092 phba->cfg_fcp_wq_count);
5093 cfg_fcp_eq_count = phba->cfg_fcp_wq_count;
5094 }
5095 /* The actual number of FCP event queues adopted */
5096 phba->cfg_fcp_eq_count = cfg_fcp_eq_count;
5097 /* The overall number of event queues used */
5098 phba->sli4_hba.cfg_eqn = phba->cfg_fcp_eq_count + LPFC_SP_EQN_DEF;
3772a991 5099
da0436e9
JS
5100 /*
5101 * Create Event Queues (EQs)
5102 */
3772a991 5103
da0436e9
JS
5104 /* Get EQ depth from module parameter, fake the default for now */
5105 phba->sli4_hba.eq_esize = LPFC_EQE_SIZE_4B;
5106 phba->sli4_hba.eq_ecount = LPFC_EQE_DEF_COUNT;
3772a991 5107
da0436e9
JS
5108 /* Create slow path event queue */
5109 qdesc = lpfc_sli4_queue_alloc(phba, phba->sli4_hba.eq_esize,
5110 phba->sli4_hba.eq_ecount);
5111 if (!qdesc) {
5112 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5113 "0496 Failed allocate slow-path EQ\n");
5114 goto out_error;
5115 }
5116 phba->sli4_hba.sp_eq = qdesc;
5117
5118 /* Create fast-path FCP Event Queue(s) */
5119 phba->sli4_hba.fp_eq = kzalloc((sizeof(struct lpfc_queue *) *
5120 phba->cfg_fcp_eq_count), GFP_KERNEL);
5121 if (!phba->sli4_hba.fp_eq) {
5122 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5123 "2576 Failed allocate memory for fast-path "
5124 "EQ record array\n");
5125 goto out_free_sp_eq;
5126 }
5127 for (fcp_eqidx = 0; fcp_eqidx < phba->cfg_fcp_eq_count; fcp_eqidx++) {
5128 qdesc = lpfc_sli4_queue_alloc(phba, phba->sli4_hba.eq_esize,
5129 phba->sli4_hba.eq_ecount);
5130 if (!qdesc) {
5131 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5132 "0497 Failed allocate fast-path EQ\n");
5133 goto out_free_fp_eq;
5134 }
5135 phba->sli4_hba.fp_eq[fcp_eqidx] = qdesc;
5136 }
5137
5138 /*
5139 * Create Complete Queues (CQs)
5140 */
5141
5142 /* Get CQ depth from module parameter, fake the default for now */
5143 phba->sli4_hba.cq_esize = LPFC_CQE_SIZE;
5144 phba->sli4_hba.cq_ecount = LPFC_CQE_DEF_COUNT;
5145
5146 /* Create slow-path Mailbox Command Complete Queue */
5147 qdesc = lpfc_sli4_queue_alloc(phba, phba->sli4_hba.cq_esize,
5148 phba->sli4_hba.cq_ecount);
5149 if (!qdesc) {
5150 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5151 "0500 Failed allocate slow-path mailbox CQ\n");
5152 goto out_free_fp_eq;
5153 }
5154 phba->sli4_hba.mbx_cq = qdesc;
5155
5156 /* Create slow-path ELS Complete Queue */
5157 qdesc = lpfc_sli4_queue_alloc(phba, phba->sli4_hba.cq_esize,
5158 phba->sli4_hba.cq_ecount);
5159 if (!qdesc) {
5160 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5161 "0501 Failed allocate slow-path ELS CQ\n");
5162 goto out_free_mbx_cq;
5163 }
5164 phba->sli4_hba.els_cq = qdesc;
5165
da0436e9
JS
5166
5167 /* Create fast-path FCP Completion Queue(s), one-to-one with EQs */
5168 phba->sli4_hba.fcp_cq = kzalloc((sizeof(struct lpfc_queue *) *
5169 phba->cfg_fcp_eq_count), GFP_KERNEL);
5170 if (!phba->sli4_hba.fcp_cq) {
5171 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5172 "2577 Failed allocate memory for fast-path "
5173 "CQ record array\n");
4d9ab994 5174 goto out_free_els_cq;
da0436e9
JS
5175 }
5176 for (fcp_cqidx = 0; fcp_cqidx < phba->cfg_fcp_eq_count; fcp_cqidx++) {
5177 qdesc = lpfc_sli4_queue_alloc(phba, phba->sli4_hba.cq_esize,
5178 phba->sli4_hba.cq_ecount);
5179 if (!qdesc) {
5180 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5181 "0499 Failed allocate fast-path FCP "
5182 "CQ (%d)\n", fcp_cqidx);
5183 goto out_free_fcp_cq;
5184 }
5185 phba->sli4_hba.fcp_cq[fcp_cqidx] = qdesc;
5186 }
5187
5188 /* Create Mailbox Command Queue */
5189 phba->sli4_hba.mq_esize = LPFC_MQE_SIZE;
5190 phba->sli4_hba.mq_ecount = LPFC_MQE_DEF_COUNT;
5191
5192 qdesc = lpfc_sli4_queue_alloc(phba, phba->sli4_hba.mq_esize,
5193 phba->sli4_hba.mq_ecount);
5194 if (!qdesc) {
5195 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5196 "0505 Failed allocate slow-path MQ\n");
5197 goto out_free_fcp_cq;
5198 }
5199 phba->sli4_hba.mbx_wq = qdesc;
5200
5201 /*
5202 * Create all the Work Queues (WQs)
5203 */
5204 phba->sli4_hba.wq_esize = LPFC_WQE_SIZE;
5205 phba->sli4_hba.wq_ecount = LPFC_WQE_DEF_COUNT;
5206
5207 /* Create slow-path ELS Work Queue */
5208 qdesc = lpfc_sli4_queue_alloc(phba, phba->sli4_hba.wq_esize,
5209 phba->sli4_hba.wq_ecount);
5210 if (!qdesc) {
5211 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5212 "0504 Failed allocate slow-path ELS WQ\n");
5213 goto out_free_mbx_wq;
5214 }
5215 phba->sli4_hba.els_wq = qdesc;
5216
5217 /* Create fast-path FCP Work Queue(s) */
5218 phba->sli4_hba.fcp_wq = kzalloc((sizeof(struct lpfc_queue *) *
5219 phba->cfg_fcp_wq_count), GFP_KERNEL);
5220 if (!phba->sli4_hba.fcp_wq) {
5221 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5222 "2578 Failed allocate memory for fast-path "
5223 "WQ record array\n");
5224 goto out_free_els_wq;
5225 }
5226 for (fcp_wqidx = 0; fcp_wqidx < phba->cfg_fcp_wq_count; fcp_wqidx++) {
5227 qdesc = lpfc_sli4_queue_alloc(phba, phba->sli4_hba.wq_esize,
5228 phba->sli4_hba.wq_ecount);
5229 if (!qdesc) {
5230 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5231 "0503 Failed allocate fast-path FCP "
5232 "WQ (%d)\n", fcp_wqidx);
5233 goto out_free_fcp_wq;
5234 }
5235 phba->sli4_hba.fcp_wq[fcp_wqidx] = qdesc;
5236 }
5237
5238 /*
5239 * Create Receive Queue (RQ)
5240 */
5241 phba->sli4_hba.rq_esize = LPFC_RQE_SIZE;
5242 phba->sli4_hba.rq_ecount = LPFC_RQE_DEF_COUNT;
5243
5244 /* Create Receive Queue for header */
5245 qdesc = lpfc_sli4_queue_alloc(phba, phba->sli4_hba.rq_esize,
5246 phba->sli4_hba.rq_ecount);
5247 if (!qdesc) {
5248 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5249 "0506 Failed allocate receive HRQ\n");
5250 goto out_free_fcp_wq;
5251 }
5252 phba->sli4_hba.hdr_rq = qdesc;
5253
5254 /* Create Receive Queue for data */
5255 qdesc = lpfc_sli4_queue_alloc(phba, phba->sli4_hba.rq_esize,
5256 phba->sli4_hba.rq_ecount);
5257 if (!qdesc) {
5258 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5259 "0507 Failed allocate receive DRQ\n");
5260 goto out_free_hdr_rq;
5261 }
5262 phba->sli4_hba.dat_rq = qdesc;
5263
5264 return 0;
5265
5266out_free_hdr_rq:
5267 lpfc_sli4_queue_free(phba->sli4_hba.hdr_rq);
5268 phba->sli4_hba.hdr_rq = NULL;
5269out_free_fcp_wq:
5270 for (--fcp_wqidx; fcp_wqidx >= 0; fcp_wqidx--) {
5271 lpfc_sli4_queue_free(phba->sli4_hba.fcp_wq[fcp_wqidx]);
5272 phba->sli4_hba.fcp_wq[fcp_wqidx] = NULL;
5273 }
5274 kfree(phba->sli4_hba.fcp_wq);
5275out_free_els_wq:
5276 lpfc_sli4_queue_free(phba->sli4_hba.els_wq);
5277 phba->sli4_hba.els_wq = NULL;
5278out_free_mbx_wq:
5279 lpfc_sli4_queue_free(phba->sli4_hba.mbx_wq);
5280 phba->sli4_hba.mbx_wq = NULL;
5281out_free_fcp_cq:
5282 for (--fcp_cqidx; fcp_cqidx >= 0; fcp_cqidx--) {
5283 lpfc_sli4_queue_free(phba->sli4_hba.fcp_cq[fcp_cqidx]);
5284 phba->sli4_hba.fcp_cq[fcp_cqidx] = NULL;
5285 }
5286 kfree(phba->sli4_hba.fcp_cq);
da0436e9
JS
5287out_free_els_cq:
5288 lpfc_sli4_queue_free(phba->sli4_hba.els_cq);
5289 phba->sli4_hba.els_cq = NULL;
5290out_free_mbx_cq:
5291 lpfc_sli4_queue_free(phba->sli4_hba.mbx_cq);
5292 phba->sli4_hba.mbx_cq = NULL;
5293out_free_fp_eq:
5294 for (--fcp_eqidx; fcp_eqidx >= 0; fcp_eqidx--) {
5295 lpfc_sli4_queue_free(phba->sli4_hba.fp_eq[fcp_eqidx]);
5296 phba->sli4_hba.fp_eq[fcp_eqidx] = NULL;
5297 }
5298 kfree(phba->sli4_hba.fp_eq);
5299out_free_sp_eq:
5300 lpfc_sli4_queue_free(phba->sli4_hba.sp_eq);
5301 phba->sli4_hba.sp_eq = NULL;
5302out_error:
5303 return -ENOMEM;
5304}
5305
5306/**
5307 * lpfc_sli4_queue_destroy - Destroy all the SLI4 queues
5308 * @phba: pointer to lpfc hba data structure.
5309 *
5310 * This routine is invoked to release all the SLI4 queues with the FCoE HBA
5311 * operation.
5312 *
5313 * Return codes
5314 * 0 - sucessful
5315 * ENOMEM - No availble memory
5316 * EIO - The mailbox failed to complete successfully.
5317 **/
5318static void
5319lpfc_sli4_queue_destroy(struct lpfc_hba *phba)
5320{
5321 int fcp_qidx;
5322
5323 /* Release mailbox command work queue */
5324 lpfc_sli4_queue_free(phba->sli4_hba.mbx_wq);
5325 phba->sli4_hba.mbx_wq = NULL;
5326
5327 /* Release ELS work queue */
5328 lpfc_sli4_queue_free(phba->sli4_hba.els_wq);
5329 phba->sli4_hba.els_wq = NULL;
5330
5331 /* Release FCP work queue */
5332 for (fcp_qidx = 0; fcp_qidx < phba->cfg_fcp_wq_count; fcp_qidx++)
5333 lpfc_sli4_queue_free(phba->sli4_hba.fcp_wq[fcp_qidx]);
5334 kfree(phba->sli4_hba.fcp_wq);
5335 phba->sli4_hba.fcp_wq = NULL;
5336
5337 /* Release unsolicited receive queue */
5338 lpfc_sli4_queue_free(phba->sli4_hba.hdr_rq);
5339 phba->sli4_hba.hdr_rq = NULL;
5340 lpfc_sli4_queue_free(phba->sli4_hba.dat_rq);
5341 phba->sli4_hba.dat_rq = NULL;
5342
da0436e9
JS
5343 /* Release ELS complete queue */
5344 lpfc_sli4_queue_free(phba->sli4_hba.els_cq);
5345 phba->sli4_hba.els_cq = NULL;
5346
5347 /* Release mailbox command complete queue */
5348 lpfc_sli4_queue_free(phba->sli4_hba.mbx_cq);
5349 phba->sli4_hba.mbx_cq = NULL;
5350
5351 /* Release FCP response complete queue */
5352 for (fcp_qidx = 0; fcp_qidx < phba->cfg_fcp_eq_count; fcp_qidx++)
5353 lpfc_sli4_queue_free(phba->sli4_hba.fcp_cq[fcp_qidx]);
5354 kfree(phba->sli4_hba.fcp_cq);
5355 phba->sli4_hba.fcp_cq = NULL;
5356
5357 /* Release fast-path event queue */
5358 for (fcp_qidx = 0; fcp_qidx < phba->cfg_fcp_eq_count; fcp_qidx++)
5359 lpfc_sli4_queue_free(phba->sli4_hba.fp_eq[fcp_qidx]);
5360 kfree(phba->sli4_hba.fp_eq);
5361 phba->sli4_hba.fp_eq = NULL;
5362
5363 /* Release slow-path event queue */
5364 lpfc_sli4_queue_free(phba->sli4_hba.sp_eq);
5365 phba->sli4_hba.sp_eq = NULL;
5366
5367 return;
5368}
5369
5370/**
5371 * lpfc_sli4_queue_setup - Set up all the SLI4 queues
5372 * @phba: pointer to lpfc hba data structure.
5373 *
5374 * This routine is invoked to set up all the SLI4 queues for the FCoE HBA
5375 * operation.
5376 *
5377 * Return codes
5378 * 0 - sucessful
5379 * ENOMEM - No availble memory
5380 * EIO - The mailbox failed to complete successfully.
5381 **/
5382int
5383lpfc_sli4_queue_setup(struct lpfc_hba *phba)
5384{
5385 int rc = -ENOMEM;
5386 int fcp_eqidx, fcp_cqidx, fcp_wqidx;
5387 int fcp_cq_index = 0;
5388
5389 /*
5390 * Set up Event Queues (EQs)
5391 */
5392
5393 /* Set up slow-path event queue */
5394 if (!phba->sli4_hba.sp_eq) {
5395 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5396 "0520 Slow-path EQ not allocated\n");
5397 goto out_error;
5398 }
5399 rc = lpfc_eq_create(phba, phba->sli4_hba.sp_eq,
5400 LPFC_SP_DEF_IMAX);
5401 if (rc) {
5402 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5403 "0521 Failed setup of slow-path EQ: "
5404 "rc = 0x%x\n", rc);
5405 goto out_error;
5406 }
5407 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
5408 "2583 Slow-path EQ setup: queue-id=%d\n",
5409 phba->sli4_hba.sp_eq->queue_id);
5410
5411 /* Set up fast-path event queue */
5412 for (fcp_eqidx = 0; fcp_eqidx < phba->cfg_fcp_eq_count; fcp_eqidx++) {
5413 if (!phba->sli4_hba.fp_eq[fcp_eqidx]) {
5414 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5415 "0522 Fast-path EQ (%d) not "
5416 "allocated\n", fcp_eqidx);
5417 goto out_destroy_fp_eq;
5418 }
5419 rc = lpfc_eq_create(phba, phba->sli4_hba.fp_eq[fcp_eqidx],
5420 phba->cfg_fcp_imax);
5421 if (rc) {
5422 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5423 "0523 Failed setup of fast-path EQ "
5424 "(%d), rc = 0x%x\n", fcp_eqidx, rc);
5425 goto out_destroy_fp_eq;
5426 }
5427 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
5428 "2584 Fast-path EQ setup: "
5429 "queue[%d]-id=%d\n", fcp_eqidx,
5430 phba->sli4_hba.fp_eq[fcp_eqidx]->queue_id);
5431 }
5432
5433 /*
5434 * Set up Complete Queues (CQs)
5435 */
5436
5437 /* Set up slow-path MBOX Complete Queue as the first CQ */
5438 if (!phba->sli4_hba.mbx_cq) {
5439 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5440 "0528 Mailbox CQ not allocated\n");
5441 goto out_destroy_fp_eq;
5442 }
5443 rc = lpfc_cq_create(phba, phba->sli4_hba.mbx_cq, phba->sli4_hba.sp_eq,
5444 LPFC_MCQ, LPFC_MBOX);
5445 if (rc) {
5446 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5447 "0529 Failed setup of slow-path mailbox CQ: "
5448 "rc = 0x%x\n", rc);
5449 goto out_destroy_fp_eq;
5450 }
5451 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
5452 "2585 MBX CQ setup: cq-id=%d, parent eq-id=%d\n",
5453 phba->sli4_hba.mbx_cq->queue_id,
5454 phba->sli4_hba.sp_eq->queue_id);
5455
5456 /* Set up slow-path ELS Complete Queue */
5457 if (!phba->sli4_hba.els_cq) {
5458 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5459 "0530 ELS CQ not allocated\n");
5460 goto out_destroy_mbx_cq;
5461 }
5462 rc = lpfc_cq_create(phba, phba->sli4_hba.els_cq, phba->sli4_hba.sp_eq,
5463 LPFC_WCQ, LPFC_ELS);
5464 if (rc) {
5465 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5466 "0531 Failed setup of slow-path ELS CQ: "
5467 "rc = 0x%x\n", rc);
5468 goto out_destroy_mbx_cq;
5469 }
5470 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
5471 "2586 ELS CQ setup: cq-id=%d, parent eq-id=%d\n",
5472 phba->sli4_hba.els_cq->queue_id,
5473 phba->sli4_hba.sp_eq->queue_id);
5474
da0436e9
JS
5475 /* Set up fast-path FCP Response Complete Queue */
5476 for (fcp_cqidx = 0; fcp_cqidx < phba->cfg_fcp_eq_count; fcp_cqidx++) {
5477 if (!phba->sli4_hba.fcp_cq[fcp_cqidx]) {
5478 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5479 "0526 Fast-path FCP CQ (%d) not "
5480 "allocated\n", fcp_cqidx);
5481 goto out_destroy_fcp_cq;
5482 }
5483 rc = lpfc_cq_create(phba, phba->sli4_hba.fcp_cq[fcp_cqidx],
5484 phba->sli4_hba.fp_eq[fcp_cqidx],
5485 LPFC_WCQ, LPFC_FCP);
5486 if (rc) {
5487 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5488 "0527 Failed setup of fast-path FCP "
5489 "CQ (%d), rc = 0x%x\n", fcp_cqidx, rc);
5490 goto out_destroy_fcp_cq;
5491 }
5492 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
5493 "2588 FCP CQ setup: cq[%d]-id=%d, "
5494 "parent eq[%d]-id=%d\n",
5495 fcp_cqidx,
5496 phba->sli4_hba.fcp_cq[fcp_cqidx]->queue_id,
5497 fcp_cqidx,
5498 phba->sli4_hba.fp_eq[fcp_cqidx]->queue_id);
5499 }
5500
5501 /*
5502 * Set up all the Work Queues (WQs)
5503 */
5504
5505 /* Set up Mailbox Command Queue */
5506 if (!phba->sli4_hba.mbx_wq) {
5507 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5508 "0538 Slow-path MQ not allocated\n");
5509 goto out_destroy_fcp_cq;
5510 }
5511 rc = lpfc_mq_create(phba, phba->sli4_hba.mbx_wq,
5512 phba->sli4_hba.mbx_cq, LPFC_MBOX);
5513 if (rc) {
5514 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5515 "0539 Failed setup of slow-path MQ: "
5516 "rc = 0x%x\n", rc);
5517 goto out_destroy_fcp_cq;
5518 }
5519 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
5520 "2589 MBX MQ setup: wq-id=%d, parent cq-id=%d\n",
5521 phba->sli4_hba.mbx_wq->queue_id,
5522 phba->sli4_hba.mbx_cq->queue_id);
5523
5524 /* Set up slow-path ELS Work Queue */
5525 if (!phba->sli4_hba.els_wq) {
5526 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5527 "0536 Slow-path ELS WQ not allocated\n");
5528 goto out_destroy_mbx_wq;
5529 }
5530 rc = lpfc_wq_create(phba, phba->sli4_hba.els_wq,
5531 phba->sli4_hba.els_cq, LPFC_ELS);
5532 if (rc) {
5533 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5534 "0537 Failed setup of slow-path ELS WQ: "
5535 "rc = 0x%x\n", rc);
5536 goto out_destroy_mbx_wq;
5537 }
5538 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
5539 "2590 ELS WQ setup: wq-id=%d, parent cq-id=%d\n",
5540 phba->sli4_hba.els_wq->queue_id,
5541 phba->sli4_hba.els_cq->queue_id);
5542
5543 /* Set up fast-path FCP Work Queue */
5544 for (fcp_wqidx = 0; fcp_wqidx < phba->cfg_fcp_wq_count; fcp_wqidx++) {
5545 if (!phba->sli4_hba.fcp_wq[fcp_wqidx]) {
5546 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5547 "0534 Fast-path FCP WQ (%d) not "
5548 "allocated\n", fcp_wqidx);
5549 goto out_destroy_fcp_wq;
5550 }
5551 rc = lpfc_wq_create(phba, phba->sli4_hba.fcp_wq[fcp_wqidx],
5552 phba->sli4_hba.fcp_cq[fcp_cq_index],
5553 LPFC_FCP);
5554 if (rc) {
5555 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5556 "0535 Failed setup of fast-path FCP "
5557 "WQ (%d), rc = 0x%x\n", fcp_wqidx, rc);
5558 goto out_destroy_fcp_wq;
5559 }
5560 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
5561 "2591 FCP WQ setup: wq[%d]-id=%d, "
5562 "parent cq[%d]-id=%d\n",
5563 fcp_wqidx,
5564 phba->sli4_hba.fcp_wq[fcp_wqidx]->queue_id,
5565 fcp_cq_index,
5566 phba->sli4_hba.fcp_cq[fcp_cq_index]->queue_id);
5567 /* Round robin FCP Work Queue's Completion Queue assignment */
5568 fcp_cq_index = ((fcp_cq_index + 1) % phba->cfg_fcp_eq_count);
5569 }
5570
5571 /*
5572 * Create Receive Queue (RQ)
5573 */
5574 if (!phba->sli4_hba.hdr_rq || !phba->sli4_hba.dat_rq) {
5575 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5576 "0540 Receive Queue not allocated\n");
5577 goto out_destroy_fcp_wq;
5578 }
5579 rc = lpfc_rq_create(phba, phba->sli4_hba.hdr_rq, phba->sli4_hba.dat_rq,
4d9ab994 5580 phba->sli4_hba.els_cq, LPFC_USOL);
da0436e9
JS
5581 if (rc) {
5582 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5583 "0541 Failed setup of Receive Queue: "
5584 "rc = 0x%x\n", rc);
5585 goto out_destroy_fcp_wq;
5586 }
5587 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
5588 "2592 USL RQ setup: hdr-rq-id=%d, dat-rq-id=%d "
5589 "parent cq-id=%d\n",
5590 phba->sli4_hba.hdr_rq->queue_id,
5591 phba->sli4_hba.dat_rq->queue_id,
4d9ab994 5592 phba->sli4_hba.els_cq->queue_id);
da0436e9
JS
5593 return 0;
5594
5595out_destroy_fcp_wq:
5596 for (--fcp_wqidx; fcp_wqidx >= 0; fcp_wqidx--)
5597 lpfc_wq_destroy(phba, phba->sli4_hba.fcp_wq[fcp_wqidx]);
5598 lpfc_wq_destroy(phba, phba->sli4_hba.els_wq);
5599out_destroy_mbx_wq:
5600 lpfc_mq_destroy(phba, phba->sli4_hba.mbx_wq);
5601out_destroy_fcp_cq:
5602 for (--fcp_cqidx; fcp_cqidx >= 0; fcp_cqidx--)
5603 lpfc_cq_destroy(phba, phba->sli4_hba.fcp_cq[fcp_cqidx]);
da0436e9
JS
5604 lpfc_cq_destroy(phba, phba->sli4_hba.els_cq);
5605out_destroy_mbx_cq:
5606 lpfc_cq_destroy(phba, phba->sli4_hba.mbx_cq);
5607out_destroy_fp_eq:
5608 for (--fcp_eqidx; fcp_eqidx >= 0; fcp_eqidx--)
5609 lpfc_eq_destroy(phba, phba->sli4_hba.fp_eq[fcp_eqidx]);
5610 lpfc_eq_destroy(phba, phba->sli4_hba.sp_eq);
5611out_error:
5612 return rc;
5613}
5614
5615/**
5616 * lpfc_sli4_queue_unset - Unset all the SLI4 queues
5617 * @phba: pointer to lpfc hba data structure.
5618 *
5619 * This routine is invoked to unset all the SLI4 queues with the FCoE HBA
5620 * operation.
5621 *
5622 * Return codes
5623 * 0 - sucessful
5624 * ENOMEM - No availble memory
5625 * EIO - The mailbox failed to complete successfully.
5626 **/
5627void
5628lpfc_sli4_queue_unset(struct lpfc_hba *phba)
5629{
5630 int fcp_qidx;
5631
5632 /* Unset mailbox command work queue */
5633 lpfc_mq_destroy(phba, phba->sli4_hba.mbx_wq);
5634 /* Unset ELS work queue */
5635 lpfc_wq_destroy(phba, phba->sli4_hba.els_wq);
5636 /* Unset unsolicited receive queue */
5637 lpfc_rq_destroy(phba, phba->sli4_hba.hdr_rq, phba->sli4_hba.dat_rq);
5638 /* Unset FCP work queue */
5639 for (fcp_qidx = 0; fcp_qidx < phba->cfg_fcp_wq_count; fcp_qidx++)
5640 lpfc_wq_destroy(phba, phba->sli4_hba.fcp_wq[fcp_qidx]);
5641 /* Unset mailbox command complete queue */
5642 lpfc_cq_destroy(phba, phba->sli4_hba.mbx_cq);
5643 /* Unset ELS complete queue */
5644 lpfc_cq_destroy(phba, phba->sli4_hba.els_cq);
da0436e9
JS
5645 /* Unset FCP response complete queue */
5646 for (fcp_qidx = 0; fcp_qidx < phba->cfg_fcp_eq_count; fcp_qidx++)
5647 lpfc_cq_destroy(phba, phba->sli4_hba.fcp_cq[fcp_qidx]);
5648 /* Unset fast-path event queue */
5649 for (fcp_qidx = 0; fcp_qidx < phba->cfg_fcp_eq_count; fcp_qidx++)
5650 lpfc_eq_destroy(phba, phba->sli4_hba.fp_eq[fcp_qidx]);
5651 /* Unset slow-path event queue */
5652 lpfc_eq_destroy(phba, phba->sli4_hba.sp_eq);
5653}
5654
5655/**
5656 * lpfc_sli4_cq_event_pool_create - Create completion-queue event free pool
5657 * @phba: pointer to lpfc hba data structure.
5658 *
5659 * This routine is invoked to allocate and set up a pool of completion queue
5660 * events. The body of the completion queue event is a completion queue entry
5661 * CQE. For now, this pool is used for the interrupt service routine to queue
5662 * the following HBA completion queue events for the worker thread to process:
5663 * - Mailbox asynchronous events
5664 * - Receive queue completion unsolicited events
5665 * Later, this can be used for all the slow-path events.
5666 *
5667 * Return codes
5668 * 0 - sucessful
5669 * -ENOMEM - No availble memory
5670 **/
5671static int
5672lpfc_sli4_cq_event_pool_create(struct lpfc_hba *phba)
5673{
5674 struct lpfc_cq_event *cq_event;
5675 int i;
5676
5677 for (i = 0; i < (4 * phba->sli4_hba.cq_ecount); i++) {
5678 cq_event = kmalloc(sizeof(struct lpfc_cq_event), GFP_KERNEL);
5679 if (!cq_event)
5680 goto out_pool_create_fail;
5681 list_add_tail(&cq_event->list,
5682 &phba->sli4_hba.sp_cqe_event_pool);
5683 }
5684 return 0;
5685
5686out_pool_create_fail:
5687 lpfc_sli4_cq_event_pool_destroy(phba);
5688 return -ENOMEM;
5689}
5690
5691/**
5692 * lpfc_sli4_cq_event_pool_destroy - Free completion-queue event free pool
5693 * @phba: pointer to lpfc hba data structure.
5694 *
5695 * This routine is invoked to free the pool of completion queue events at
5696 * driver unload time. Note that, it is the responsibility of the driver
5697 * cleanup routine to free all the outstanding completion-queue events
5698 * allocated from this pool back into the pool before invoking this routine
5699 * to destroy the pool.
5700 **/
5701static void
5702lpfc_sli4_cq_event_pool_destroy(struct lpfc_hba *phba)
5703{
5704 struct lpfc_cq_event *cq_event, *next_cq_event;
5705
5706 list_for_each_entry_safe(cq_event, next_cq_event,
5707 &phba->sli4_hba.sp_cqe_event_pool, list) {
5708 list_del(&cq_event->list);
5709 kfree(cq_event);
5710 }
5711}
5712
5713/**
5714 * __lpfc_sli4_cq_event_alloc - Allocate a completion-queue event from free pool
5715 * @phba: pointer to lpfc hba data structure.
5716 *
5717 * This routine is the lock free version of the API invoked to allocate a
5718 * completion-queue event from the free pool.
5719 *
5720 * Return: Pointer to the newly allocated completion-queue event if successful
5721 * NULL otherwise.
5722 **/
5723struct lpfc_cq_event *
5724__lpfc_sli4_cq_event_alloc(struct lpfc_hba *phba)
5725{
5726 struct lpfc_cq_event *cq_event = NULL;
5727
5728 list_remove_head(&phba->sli4_hba.sp_cqe_event_pool, cq_event,
5729 struct lpfc_cq_event, list);
5730 return cq_event;
5731}
5732
5733/**
5734 * lpfc_sli4_cq_event_alloc - Allocate a completion-queue event from free pool
5735 * @phba: pointer to lpfc hba data structure.
5736 *
5737 * This routine is the lock version of the API invoked to allocate a
5738 * completion-queue event from the free pool.
5739 *
5740 * Return: Pointer to the newly allocated completion-queue event if successful
5741 * NULL otherwise.
5742 **/
5743struct lpfc_cq_event *
5744lpfc_sli4_cq_event_alloc(struct lpfc_hba *phba)
5745{
5746 struct lpfc_cq_event *cq_event;
5747 unsigned long iflags;
5748
5749 spin_lock_irqsave(&phba->hbalock, iflags);
5750 cq_event = __lpfc_sli4_cq_event_alloc(phba);
5751 spin_unlock_irqrestore(&phba->hbalock, iflags);
5752 return cq_event;
5753}
5754
5755/**
5756 * __lpfc_sli4_cq_event_release - Release a completion-queue event to free pool
5757 * @phba: pointer to lpfc hba data structure.
5758 * @cq_event: pointer to the completion queue event to be freed.
5759 *
5760 * This routine is the lock free version of the API invoked to release a
5761 * completion-queue event back into the free pool.
5762 **/
5763void
5764__lpfc_sli4_cq_event_release(struct lpfc_hba *phba,
5765 struct lpfc_cq_event *cq_event)
5766{
5767 list_add_tail(&cq_event->list, &phba->sli4_hba.sp_cqe_event_pool);
5768}
5769
5770/**
5771 * lpfc_sli4_cq_event_release - Release a completion-queue event to free pool
5772 * @phba: pointer to lpfc hba data structure.
5773 * @cq_event: pointer to the completion queue event to be freed.
5774 *
5775 * This routine is the lock version of the API invoked to release a
5776 * completion-queue event back into the free pool.
5777 **/
5778void
5779lpfc_sli4_cq_event_release(struct lpfc_hba *phba,
5780 struct lpfc_cq_event *cq_event)
5781{
5782 unsigned long iflags;
5783 spin_lock_irqsave(&phba->hbalock, iflags);
5784 __lpfc_sli4_cq_event_release(phba, cq_event);
5785 spin_unlock_irqrestore(&phba->hbalock, iflags);
5786}
5787
5788/**
5789 * lpfc_sli4_cq_event_release_all - Release all cq events to the free pool
5790 * @phba: pointer to lpfc hba data structure.
5791 *
5792 * This routine is to free all the pending completion-queue events to the
5793 * back into the free pool for device reset.
5794 **/
5795static void
5796lpfc_sli4_cq_event_release_all(struct lpfc_hba *phba)
5797{
5798 LIST_HEAD(cqelist);
5799 struct lpfc_cq_event *cqe;
5800 unsigned long iflags;
5801
5802 /* Retrieve all the pending WCQEs from pending WCQE lists */
5803 spin_lock_irqsave(&phba->hbalock, iflags);
5804 /* Pending FCP XRI abort events */
5805 list_splice_init(&phba->sli4_hba.sp_fcp_xri_aborted_work_queue,
5806 &cqelist);
5807 /* Pending ELS XRI abort events */
5808 list_splice_init(&phba->sli4_hba.sp_els_xri_aborted_work_queue,
5809 &cqelist);
5810 /* Pending asynnc events */
5811 list_splice_init(&phba->sli4_hba.sp_asynce_work_queue,
5812 &cqelist);
5813 spin_unlock_irqrestore(&phba->hbalock, iflags);
5814
5815 while (!list_empty(&cqelist)) {
5816 list_remove_head(&cqelist, cqe, struct lpfc_cq_event, list);
5817 lpfc_sli4_cq_event_release(phba, cqe);
5818 }
5819}
5820
5821/**
5822 * lpfc_pci_function_reset - Reset pci function.
5823 * @phba: pointer to lpfc hba data structure.
5824 *
5825 * This routine is invoked to request a PCI function reset. It will destroys
5826 * all resources assigned to the PCI function which originates this request.
5827 *
5828 * Return codes
5829 * 0 - sucessful
5830 * ENOMEM - No availble memory
5831 * EIO - The mailbox failed to complete successfully.
5832 **/
5833int
5834lpfc_pci_function_reset(struct lpfc_hba *phba)
5835{
5836 LPFC_MBOXQ_t *mboxq;
5837 uint32_t rc = 0;
5838 uint32_t shdr_status, shdr_add_status;
5839 union lpfc_sli4_cfg_shdr *shdr;
5840
5841 mboxq = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
5842 if (!mboxq) {
5843 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5844 "0494 Unable to allocate memory for issuing "
5845 "SLI_FUNCTION_RESET mailbox command\n");
5846 return -ENOMEM;
5847 }
5848
5849 /* Set up PCI function reset SLI4_CONFIG mailbox-ioctl command */
5850 lpfc_sli4_config(phba, mboxq, LPFC_MBOX_SUBSYSTEM_COMMON,
5851 LPFC_MBOX_OPCODE_FUNCTION_RESET, 0,
5852 LPFC_SLI4_MBX_EMBED);
5853 rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
5854 shdr = (union lpfc_sli4_cfg_shdr *)
5855 &mboxq->u.mqe.un.sli4_config.header.cfg_shdr;
5856 shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
5857 shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, &shdr->response);
5858 if (rc != MBX_TIMEOUT)
5859 mempool_free(mboxq, phba->mbox_mem_pool);
5860 if (shdr_status || shdr_add_status || rc) {
5861 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5862 "0495 SLI_FUNCTION_RESET mailbox failed with "
5863 "status x%x add_status x%x, mbx status x%x\n",
5864 shdr_status, shdr_add_status, rc);
5865 rc = -ENXIO;
5866 }
5867 return rc;
5868}
5869
5870/**
5871 * lpfc_sli4_send_nop_mbox_cmds - Send sli-4 nop mailbox commands
5872 * @phba: pointer to lpfc hba data structure.
5873 * @cnt: number of nop mailbox commands to send.
5874 *
5875 * This routine is invoked to send a number @cnt of NOP mailbox command and
5876 * wait for each command to complete.
5877 *
5878 * Return: the number of NOP mailbox command completed.
5879 **/
5880static int
5881lpfc_sli4_send_nop_mbox_cmds(struct lpfc_hba *phba, uint32_t cnt)
5882{
5883 LPFC_MBOXQ_t *mboxq;
5884 int length, cmdsent;
5885 uint32_t mbox_tmo;
5886 uint32_t rc = 0;
5887 uint32_t shdr_status, shdr_add_status;
5888 union lpfc_sli4_cfg_shdr *shdr;
5889
5890 if (cnt == 0) {
5891 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
5892 "2518 Requested to send 0 NOP mailbox cmd\n");
5893 return cnt;
5894 }
5895
5896 mboxq = (LPFC_MBOXQ_t *)mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
5897 if (!mboxq) {
5898 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
5899 "2519 Unable to allocate memory for issuing "
5900 "NOP mailbox command\n");
5901 return 0;
5902 }
5903
5904 /* Set up NOP SLI4_CONFIG mailbox-ioctl command */
5905 length = (sizeof(struct lpfc_mbx_nop) -
5906 sizeof(struct lpfc_sli4_cfg_mhdr));
5907 lpfc_sli4_config(phba, mboxq, LPFC_MBOX_SUBSYSTEM_COMMON,
5908 LPFC_MBOX_OPCODE_NOP, length, LPFC_SLI4_MBX_EMBED);
5909
5910 mbox_tmo = lpfc_mbox_tmo_val(phba, MBX_SLI4_CONFIG);
5911 for (cmdsent = 0; cmdsent < cnt; cmdsent++) {
5912 if (!phba->sli4_hba.intr_enable)
5913 rc = lpfc_sli_issue_mbox(phba, mboxq, MBX_POLL);
5914 else
5915 rc = lpfc_sli_issue_mbox_wait(phba, mboxq, mbox_tmo);
5916 if (rc == MBX_TIMEOUT)
5917 break;
5918 /* Check return status */
5919 shdr = (union lpfc_sli4_cfg_shdr *)
5920 &mboxq->u.mqe.un.sli4_config.header.cfg_shdr;
5921 shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response);
5922 shdr_add_status = bf_get(lpfc_mbox_hdr_add_status,
5923 &shdr->response);
5924 if (shdr_status || shdr_add_status || rc) {
5925 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
5926 "2520 NOP mailbox command failed "
5927 "status x%x add_status x%x mbx "
5928 "status x%x\n", shdr_status,
5929 shdr_add_status, rc);
5930 break;
5931 }
5932 }
5933
5934 if (rc != MBX_TIMEOUT)
5935 mempool_free(mboxq, phba->mbox_mem_pool);
5936
5937 return cmdsent;
5938}
5939
5940/**
5941 * lpfc_sli4_fcfi_unreg - Unregister fcfi to device
5942 * @phba: pointer to lpfc hba data structure.
5943 * @fcfi: fcf index.
5944 *
5945 * This routine is invoked to unregister a FCFI from device.
5946 **/
5947void
5948lpfc_sli4_fcfi_unreg(struct lpfc_hba *phba, uint16_t fcfi)
5949{
5950 LPFC_MBOXQ_t *mbox;
5951 uint32_t mbox_tmo;
5952 int rc;
5953 unsigned long flags;
5954
5955 mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
5956
5957 if (!mbox)
5958 return;
5959
5960 lpfc_unreg_fcfi(mbox, fcfi);
5961
5962 if (!phba->sli4_hba.intr_enable)
5963 rc = lpfc_sli_issue_mbox(phba, mbox, MBX_POLL);
5964 else {
5965 mbox_tmo = lpfc_mbox_tmo_val(phba, MBX_SLI4_CONFIG);
5966 rc = lpfc_sli_issue_mbox_wait(phba, mbox, mbox_tmo);
5967 }
5968 if (rc != MBX_TIMEOUT)
5969 mempool_free(mbox, phba->mbox_mem_pool);
5970 if (rc != MBX_SUCCESS)
5971 lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
5972 "2517 Unregister FCFI command failed "
5973 "status %d, mbxStatus x%x\n", rc,
5974 bf_get(lpfc_mqe_status, &mbox->u.mqe));
5975 else {
5976 spin_lock_irqsave(&phba->hbalock, flags);
5977 /* Mark the FCFI is no longer registered */
5978 phba->fcf.fcf_flag &=
5979 ~(FCF_AVAILABLE | FCF_REGISTERED | FCF_DISCOVERED);
5980 spin_unlock_irqrestore(&phba->hbalock, flags);
5981 }
5982}
5983
5984/**
5985 * lpfc_sli4_pci_mem_setup - Setup SLI4 HBA PCI memory space.
5986 * @phba: pointer to lpfc hba data structure.
5987 *
5988 * This routine is invoked to set up the PCI device memory space for device
5989 * with SLI-4 interface spec.
5990 *
5991 * Return codes
5992 * 0 - sucessful
5993 * other values - error
5994 **/
5995static int
5996lpfc_sli4_pci_mem_setup(struct lpfc_hba *phba)
5997{
5998 struct pci_dev *pdev;
5999 unsigned long bar0map_len, bar1map_len, bar2map_len;
6000 int error = -ENODEV;
6001
6002 /* Obtain PCI device reference */
6003 if (!phba->pcidev)
6004 return error;
6005 else
6006 pdev = phba->pcidev;
6007
6008 /* Set the device DMA mask size */
6009 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0)
6010 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0)
6011 return error;
6012
6013 /* Get the bus address of SLI4 device Bar0, Bar1, and Bar2 and the
6014 * number of bytes required by each mapping. They are actually
6015 * mapping to the PCI BAR regions 1, 2, and 4 by the SLI4 device.
6016 */
6017 phba->pci_bar0_map = pci_resource_start(pdev, LPFC_SLI4_BAR0);
6018 bar0map_len = pci_resource_len(pdev, LPFC_SLI4_BAR0);
6019
6020 phba->pci_bar1_map = pci_resource_start(pdev, LPFC_SLI4_BAR1);
6021 bar1map_len = pci_resource_len(pdev, LPFC_SLI4_BAR1);
6022
6023 phba->pci_bar2_map = pci_resource_start(pdev, LPFC_SLI4_BAR2);
6024 bar2map_len = pci_resource_len(pdev, LPFC_SLI4_BAR2);
6025
6026 /* Map SLI4 PCI Config Space Register base to a kernel virtual addr */
6027 phba->sli4_hba.conf_regs_memmap_p =
6028 ioremap(phba->pci_bar0_map, bar0map_len);
6029 if (!phba->sli4_hba.conf_regs_memmap_p) {
6030 dev_printk(KERN_ERR, &pdev->dev,
6031 "ioremap failed for SLI4 PCI config registers.\n");
6032 goto out;
6033 }
6034
6035 /* Map SLI4 HBA Control Register base to a kernel virtual address. */
6036 phba->sli4_hba.ctrl_regs_memmap_p =
6037 ioremap(phba->pci_bar1_map, bar1map_len);
6038 if (!phba->sli4_hba.ctrl_regs_memmap_p) {
6039 dev_printk(KERN_ERR, &pdev->dev,
6040 "ioremap failed for SLI4 HBA control registers.\n");
6041 goto out_iounmap_conf;
6042 }
6043
6044 /* Map SLI4 HBA Doorbell Register base to a kernel virtual address. */
6045 phba->sli4_hba.drbl_regs_memmap_p =
6046 ioremap(phba->pci_bar2_map, bar2map_len);
6047 if (!phba->sli4_hba.drbl_regs_memmap_p) {
6048 dev_printk(KERN_ERR, &pdev->dev,
6049 "ioremap failed for SLI4 HBA doorbell registers.\n");
6050 goto out_iounmap_ctrl;
6051 }
6052
6053 /* Set up BAR0 PCI config space register memory map */
6054 lpfc_sli4_bar0_register_memmap(phba);
6055
6056 /* Set up BAR1 register memory map */
6057 lpfc_sli4_bar1_register_memmap(phba);
6058
6059 /* Set up BAR2 register memory map */
6060 error = lpfc_sli4_bar2_register_memmap(phba, LPFC_VF0);
6061 if (error)
6062 goto out_iounmap_all;
6063
6064 return 0;
6065
6066out_iounmap_all:
6067 iounmap(phba->sli4_hba.drbl_regs_memmap_p);
6068out_iounmap_ctrl:
6069 iounmap(phba->sli4_hba.ctrl_regs_memmap_p);
6070out_iounmap_conf:
6071 iounmap(phba->sli4_hba.conf_regs_memmap_p);
6072out:
6073 return error;
6074}
6075
6076/**
6077 * lpfc_sli4_pci_mem_unset - Unset SLI4 HBA PCI memory space.
6078 * @phba: pointer to lpfc hba data structure.
6079 *
6080 * This routine is invoked to unset the PCI device memory space for device
6081 * with SLI-4 interface spec.
6082 **/
6083static void
6084lpfc_sli4_pci_mem_unset(struct lpfc_hba *phba)
6085{
6086 struct pci_dev *pdev;
6087
6088 /* Obtain PCI device reference */
6089 if (!phba->pcidev)
6090 return;
6091 else
6092 pdev = phba->pcidev;
6093
6094 /* Free coherent DMA memory allocated */
6095
6096 /* Unmap I/O memory space */
6097 iounmap(phba->sli4_hba.drbl_regs_memmap_p);
6098 iounmap(phba->sli4_hba.ctrl_regs_memmap_p);
6099 iounmap(phba->sli4_hba.conf_regs_memmap_p);
6100
6101 return;
6102}
6103
6104/**
6105 * lpfc_sli_enable_msix - Enable MSI-X interrupt mode on SLI-3 device
6106 * @phba: pointer to lpfc hba data structure.
6107 *
6108 * This routine is invoked to enable the MSI-X interrupt vectors to device
6109 * with SLI-3 interface specs. The kernel function pci_enable_msix() is
6110 * called to enable the MSI-X vectors. Note that pci_enable_msix(), once
6111 * invoked, enables either all or nothing, depending on the current
6112 * availability of PCI vector resources. The device driver is responsible
6113 * for calling the individual request_irq() to register each MSI-X vector
6114 * with a interrupt handler, which is done in this function. Note that
6115 * later when device is unloading, the driver should always call free_irq()
6116 * on all MSI-X vectors it has done request_irq() on before calling
6117 * pci_disable_msix(). Failure to do so results in a BUG_ON() and a device
6118 * will be left with MSI-X enabled and leaks its vectors.
6119 *
6120 * Return codes
6121 * 0 - sucessful
6122 * other values - error
6123 **/
6124static int
6125lpfc_sli_enable_msix(struct lpfc_hba *phba)
6126{
6127 int rc, i;
6128 LPFC_MBOXQ_t *pmb;
6129
6130 /* Set up MSI-X multi-message vectors */
6131 for (i = 0; i < LPFC_MSIX_VECTORS; i++)
6132 phba->msix_entries[i].entry = i;
6133
6134 /* Configure MSI-X capability structure */
6135 rc = pci_enable_msix(phba->pcidev, phba->msix_entries,
6136 ARRAY_SIZE(phba->msix_entries));
6137 if (rc) {
6138 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6139 "0420 PCI enable MSI-X failed (%d)\n", rc);
6140 goto msi_fail_out;
6141 }
6142 for (i = 0; i < LPFC_MSIX_VECTORS; i++)
6143 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6144 "0477 MSI-X entry[%d]: vector=x%x "
6145 "message=%d\n", i,
6146 phba->msix_entries[i].vector,
6147 phba->msix_entries[i].entry);
6148 /*
6149 * Assign MSI-X vectors to interrupt handlers
6150 */
6151
6152 /* vector-0 is associated to slow-path handler */
6153 rc = request_irq(phba->msix_entries[0].vector,
6154 &lpfc_sli_sp_intr_handler, IRQF_SHARED,
6155 LPFC_SP_DRIVER_HANDLER_NAME, phba);
6156 if (rc) {
6157 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
6158 "0421 MSI-X slow-path request_irq failed "
6159 "(%d)\n", rc);
6160 goto msi_fail_out;
6161 }
6162
6163 /* vector-1 is associated to fast-path handler */
6164 rc = request_irq(phba->msix_entries[1].vector,
6165 &lpfc_sli_fp_intr_handler, IRQF_SHARED,
6166 LPFC_FP_DRIVER_HANDLER_NAME, phba);
6167
6168 if (rc) {
6169 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
6170 "0429 MSI-X fast-path request_irq failed "
6171 "(%d)\n", rc);
6172 goto irq_fail_out;
6173 }
6174
6175 /*
6176 * Configure HBA MSI-X attention conditions to messages
6177 */
6178 pmb = (LPFC_MBOXQ_t *) mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
6179
6180 if (!pmb) {
6181 rc = -ENOMEM;
6182 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6183 "0474 Unable to allocate memory for issuing "
6184 "MBOX_CONFIG_MSI command\n");
6185 goto mem_fail_out;
6186 }
6187 rc = lpfc_config_msi(phba, pmb);
6188 if (rc)
6189 goto mbx_fail_out;
6190 rc = lpfc_sli_issue_mbox(phba, pmb, MBX_POLL);
6191 if (rc != MBX_SUCCESS) {
6192 lpfc_printf_log(phba, KERN_WARNING, LOG_MBOX,
6193 "0351 Config MSI mailbox command failed, "
6194 "mbxCmd x%x, mbxStatus x%x\n",
6195 pmb->u.mb.mbxCommand, pmb->u.mb.mbxStatus);
6196 goto mbx_fail_out;
6197 }
6198
6199 /* Free memory allocated for mailbox command */
6200 mempool_free(pmb, phba->mbox_mem_pool);
6201 return rc;
6202
6203mbx_fail_out:
6204 /* Free memory allocated for mailbox command */
6205 mempool_free(pmb, phba->mbox_mem_pool);
6206
6207mem_fail_out:
6208 /* free the irq already requested */
6209 free_irq(phba->msix_entries[1].vector, phba);
6210
6211irq_fail_out:
6212 /* free the irq already requested */
6213 free_irq(phba->msix_entries[0].vector, phba);
6214
6215msi_fail_out:
6216 /* Unconfigure MSI-X capability structure */
6217 pci_disable_msix(phba->pcidev);
6218 return rc;
6219}
6220
6221/**
6222 * lpfc_sli_disable_msix - Disable MSI-X interrupt mode on SLI-3 device.
6223 * @phba: pointer to lpfc hba data structure.
6224 *
6225 * This routine is invoked to release the MSI-X vectors and then disable the
6226 * MSI-X interrupt mode to device with SLI-3 interface spec.
6227 **/
6228static void
6229lpfc_sli_disable_msix(struct lpfc_hba *phba)
6230{
6231 int i;
6232
6233 /* Free up MSI-X multi-message vectors */
6234 for (i = 0; i < LPFC_MSIX_VECTORS; i++)
6235 free_irq(phba->msix_entries[i].vector, phba);
6236 /* Disable MSI-X */
6237 pci_disable_msix(phba->pcidev);
6238
6239 return;
6240}
6241
6242/**
6243 * lpfc_sli_enable_msi - Enable MSI interrupt mode on SLI-3 device.
6244 * @phba: pointer to lpfc hba data structure.
6245 *
6246 * This routine is invoked to enable the MSI interrupt mode to device with
6247 * SLI-3 interface spec. The kernel function pci_enable_msi() is called to
6248 * enable the MSI vector. The device driver is responsible for calling the
6249 * request_irq() to register MSI vector with a interrupt the handler, which
6250 * is done in this function.
6251 *
6252 * Return codes
6253 * 0 - sucessful
6254 * other values - error
6255 */
6256static int
6257lpfc_sli_enable_msi(struct lpfc_hba *phba)
6258{
6259 int rc;
6260
6261 rc = pci_enable_msi(phba->pcidev);
6262 if (!rc)
6263 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6264 "0462 PCI enable MSI mode success.\n");
6265 else {
6266 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6267 "0471 PCI enable MSI mode failed (%d)\n", rc);
6268 return rc;
6269 }
6270
6271 rc = request_irq(phba->pcidev->irq, lpfc_sli_intr_handler,
6272 IRQF_SHARED, LPFC_DRIVER_NAME, phba);
6273 if (rc) {
6274 pci_disable_msi(phba->pcidev);
6275 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
6276 "0478 MSI request_irq failed (%d)\n", rc);
6277 }
6278 return rc;
6279}
6280
6281/**
6282 * lpfc_sli_disable_msi - Disable MSI interrupt mode to SLI-3 device.
6283 * @phba: pointer to lpfc hba data structure.
6284 *
6285 * This routine is invoked to disable the MSI interrupt mode to device with
6286 * SLI-3 interface spec. The driver calls free_irq() on MSI vector it has
6287 * done request_irq() on before calling pci_disable_msi(). Failure to do so
6288 * results in a BUG_ON() and a device will be left with MSI enabled and leaks
6289 * its vector.
6290 */
6291static void
6292lpfc_sli_disable_msi(struct lpfc_hba *phba)
6293{
6294 free_irq(phba->pcidev->irq, phba);
6295 pci_disable_msi(phba->pcidev);
6296 return;
6297}
6298
6299/**
6300 * lpfc_sli_enable_intr - Enable device interrupt to SLI-3 device.
6301 * @phba: pointer to lpfc hba data structure.
6302 *
6303 * This routine is invoked to enable device interrupt and associate driver's
6304 * interrupt handler(s) to interrupt vector(s) to device with SLI-3 interface
6305 * spec. Depends on the interrupt mode configured to the driver, the driver
6306 * will try to fallback from the configured interrupt mode to an interrupt
6307 * mode which is supported by the platform, kernel, and device in the order
6308 * of:
6309 * MSI-X -> MSI -> IRQ.
6310 *
6311 * Return codes
6312 * 0 - sucessful
6313 * other values - error
6314 **/
6315static uint32_t
6316lpfc_sli_enable_intr(struct lpfc_hba *phba, uint32_t cfg_mode)
6317{
6318 uint32_t intr_mode = LPFC_INTR_ERROR;
6319 int retval;
6320
6321 if (cfg_mode == 2) {
6322 /* Need to issue conf_port mbox cmd before conf_msi mbox cmd */
6323 retval = lpfc_sli_config_port(phba, LPFC_SLI_REV3);
6324 if (!retval) {
6325 /* Now, try to enable MSI-X interrupt mode */
6326 retval = lpfc_sli_enable_msix(phba);
6327 if (!retval) {
6328 /* Indicate initialization to MSI-X mode */
6329 phba->intr_type = MSIX;
6330 intr_mode = 2;
6331 }
6332 }
6333 }
6334
6335 /* Fallback to MSI if MSI-X initialization failed */
6336 if (cfg_mode >= 1 && phba->intr_type == NONE) {
6337 retval = lpfc_sli_enable_msi(phba);
6338 if (!retval) {
6339 /* Indicate initialization to MSI mode */
6340 phba->intr_type = MSI;
6341 intr_mode = 1;
6342 }
6343 }
6344
6345 /* Fallback to INTx if both MSI-X/MSI initalization failed */
6346 if (phba->intr_type == NONE) {
6347 retval = request_irq(phba->pcidev->irq, lpfc_sli_intr_handler,
6348 IRQF_SHARED, LPFC_DRIVER_NAME, phba);
6349 if (!retval) {
6350 /* Indicate initialization to INTx mode */
6351 phba->intr_type = INTx;
6352 intr_mode = 0;
6353 }
6354 }
6355 return intr_mode;
6356}
6357
6358/**
6359 * lpfc_sli_disable_intr - Disable device interrupt to SLI-3 device.
6360 * @phba: pointer to lpfc hba data structure.
6361 *
6362 * This routine is invoked to disable device interrupt and disassociate the
6363 * driver's interrupt handler(s) from interrupt vector(s) to device with
6364 * SLI-3 interface spec. Depending on the interrupt mode, the driver will
6365 * release the interrupt vector(s) for the message signaled interrupt.
6366 **/
6367static void
6368lpfc_sli_disable_intr(struct lpfc_hba *phba)
6369{
6370 /* Disable the currently initialized interrupt mode */
6371 if (phba->intr_type == MSIX)
6372 lpfc_sli_disable_msix(phba);
6373 else if (phba->intr_type == MSI)
6374 lpfc_sli_disable_msi(phba);
6375 else if (phba->intr_type == INTx)
6376 free_irq(phba->pcidev->irq, phba);
6377
6378 /* Reset interrupt management states */
6379 phba->intr_type = NONE;
6380 phba->sli.slistat.sli_intr = 0;
6381
6382 return;
6383}
6384
6385/**
6386 * lpfc_sli4_enable_msix - Enable MSI-X interrupt mode to SLI-4 device
6387 * @phba: pointer to lpfc hba data structure.
6388 *
6389 * This routine is invoked to enable the MSI-X interrupt vectors to device
6390 * with SLI-4 interface spec. The kernel function pci_enable_msix() is called
6391 * to enable the MSI-X vectors. Note that pci_enable_msix(), once invoked,
6392 * enables either all or nothing, depending on the current availability of
6393 * PCI vector resources. The device driver is responsible for calling the
6394 * individual request_irq() to register each MSI-X vector with a interrupt
6395 * handler, which is done in this function. Note that later when device is
6396 * unloading, the driver should always call free_irq() on all MSI-X vectors
6397 * it has done request_irq() on before calling pci_disable_msix(). Failure
6398 * to do so results in a BUG_ON() and a device will be left with MSI-X
6399 * enabled and leaks its vectors.
6400 *
6401 * Return codes
6402 * 0 - sucessful
6403 * other values - error
6404 **/
6405static int
6406lpfc_sli4_enable_msix(struct lpfc_hba *phba)
6407{
6408 int rc, index;
6409
6410 /* Set up MSI-X multi-message vectors */
6411 for (index = 0; index < phba->sli4_hba.cfg_eqn; index++)
6412 phba->sli4_hba.msix_entries[index].entry = index;
6413
6414 /* Configure MSI-X capability structure */
6415 rc = pci_enable_msix(phba->pcidev, phba->sli4_hba.msix_entries,
6416 phba->sli4_hba.cfg_eqn);
6417 if (rc) {
6418 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6419 "0484 PCI enable MSI-X failed (%d)\n", rc);
6420 goto msi_fail_out;
6421 }
6422 /* Log MSI-X vector assignment */
6423 for (index = 0; index < phba->sli4_hba.cfg_eqn; index++)
6424 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6425 "0489 MSI-X entry[%d]: vector=x%x "
6426 "message=%d\n", index,
6427 phba->sli4_hba.msix_entries[index].vector,
6428 phba->sli4_hba.msix_entries[index].entry);
6429 /*
6430 * Assign MSI-X vectors to interrupt handlers
6431 */
6432
6433 /* The first vector must associated to slow-path handler for MQ */
6434 rc = request_irq(phba->sli4_hba.msix_entries[0].vector,
6435 &lpfc_sli4_sp_intr_handler, IRQF_SHARED,
6436 LPFC_SP_DRIVER_HANDLER_NAME, phba);
6437 if (rc) {
6438 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
6439 "0485 MSI-X slow-path request_irq failed "
6440 "(%d)\n", rc);
6441 goto msi_fail_out;
6442 }
6443
6444 /* The rest of the vector(s) are associated to fast-path handler(s) */
6445 for (index = 1; index < phba->sli4_hba.cfg_eqn; index++) {
6446 phba->sli4_hba.fcp_eq_hdl[index - 1].idx = index - 1;
6447 phba->sli4_hba.fcp_eq_hdl[index - 1].phba = phba;
6448 rc = request_irq(phba->sli4_hba.msix_entries[index].vector,
6449 &lpfc_sli4_fp_intr_handler, IRQF_SHARED,
6450 LPFC_FP_DRIVER_HANDLER_NAME,
6451 &phba->sli4_hba.fcp_eq_hdl[index - 1]);
6452 if (rc) {
6453 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
6454 "0486 MSI-X fast-path (%d) "
6455 "request_irq failed (%d)\n", index, rc);
6456 goto cfg_fail_out;
6457 }
6458 }
6459
6460 return rc;
6461
6462cfg_fail_out:
6463 /* free the irq already requested */
6464 for (--index; index >= 1; index--)
6465 free_irq(phba->sli4_hba.msix_entries[index - 1].vector,
6466 &phba->sli4_hba.fcp_eq_hdl[index - 1]);
6467
6468 /* free the irq already requested */
6469 free_irq(phba->sli4_hba.msix_entries[0].vector, phba);
6470
6471msi_fail_out:
6472 /* Unconfigure MSI-X capability structure */
6473 pci_disable_msix(phba->pcidev);
6474 return rc;
6475}
6476
6477/**
6478 * lpfc_sli4_disable_msix - Disable MSI-X interrupt mode to SLI-4 device
6479 * @phba: pointer to lpfc hba data structure.
6480 *
6481 * This routine is invoked to release the MSI-X vectors and then disable the
6482 * MSI-X interrupt mode to device with SLI-4 interface spec.
6483 **/
6484static void
6485lpfc_sli4_disable_msix(struct lpfc_hba *phba)
6486{
6487 int index;
6488
6489 /* Free up MSI-X multi-message vectors */
6490 free_irq(phba->sli4_hba.msix_entries[0].vector, phba);
6491
6492 for (index = 1; index < phba->sli4_hba.cfg_eqn; index++)
6493 free_irq(phba->sli4_hba.msix_entries[index].vector,
6494 &phba->sli4_hba.fcp_eq_hdl[index - 1]);
6495 /* Disable MSI-X */
6496 pci_disable_msix(phba->pcidev);
6497
6498 return;
6499}
6500
6501/**
6502 * lpfc_sli4_enable_msi - Enable MSI interrupt mode to SLI-4 device
6503 * @phba: pointer to lpfc hba data structure.
6504 *
6505 * This routine is invoked to enable the MSI interrupt mode to device with
6506 * SLI-4 interface spec. The kernel function pci_enable_msi() is called
6507 * to enable the MSI vector. The device driver is responsible for calling
6508 * the request_irq() to register MSI vector with a interrupt the handler,
6509 * which is done in this function.
6510 *
6511 * Return codes
6512 * 0 - sucessful
6513 * other values - error
6514 **/
6515static int
6516lpfc_sli4_enable_msi(struct lpfc_hba *phba)
6517{
6518 int rc, index;
6519
6520 rc = pci_enable_msi(phba->pcidev);
6521 if (!rc)
6522 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6523 "0487 PCI enable MSI mode success.\n");
6524 else {
6525 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6526 "0488 PCI enable MSI mode failed (%d)\n", rc);
6527 return rc;
6528 }
6529
6530 rc = request_irq(phba->pcidev->irq, lpfc_sli4_intr_handler,
6531 IRQF_SHARED, LPFC_DRIVER_NAME, phba);
6532 if (rc) {
6533 pci_disable_msi(phba->pcidev);
6534 lpfc_printf_log(phba, KERN_WARNING, LOG_INIT,
6535 "0490 MSI request_irq failed (%d)\n", rc);
6536 }
6537
6538 for (index = 0; index < phba->cfg_fcp_eq_count; index++) {
6539 phba->sli4_hba.fcp_eq_hdl[index].idx = index;
6540 phba->sli4_hba.fcp_eq_hdl[index].phba = phba;
6541 }
6542
6543 return rc;
6544}
6545
6546/**
6547 * lpfc_sli4_disable_msi - Disable MSI interrupt mode to SLI-4 device
6548 * @phba: pointer to lpfc hba data structure.
6549 *
6550 * This routine is invoked to disable the MSI interrupt mode to device with
6551 * SLI-4 interface spec. The driver calls free_irq() on MSI vector it has
6552 * done request_irq() on before calling pci_disable_msi(). Failure to do so
6553 * results in a BUG_ON() and a device will be left with MSI enabled and leaks
6554 * its vector.
6555 **/
6556static void
6557lpfc_sli4_disable_msi(struct lpfc_hba *phba)
6558{
6559 free_irq(phba->pcidev->irq, phba);
6560 pci_disable_msi(phba->pcidev);
6561 return;
6562}
6563
6564/**
6565 * lpfc_sli4_enable_intr - Enable device interrupt to SLI-4 device
6566 * @phba: pointer to lpfc hba data structure.
6567 *
6568 * This routine is invoked to enable device interrupt and associate driver's
6569 * interrupt handler(s) to interrupt vector(s) to device with SLI-4
6570 * interface spec. Depends on the interrupt mode configured to the driver,
6571 * the driver will try to fallback from the configured interrupt mode to an
6572 * interrupt mode which is supported by the platform, kernel, and device in
6573 * the order of:
6574 * MSI-X -> MSI -> IRQ.
6575 *
6576 * Return codes
6577 * 0 - sucessful
6578 * other values - error
6579 **/
6580static uint32_t
6581lpfc_sli4_enable_intr(struct lpfc_hba *phba, uint32_t cfg_mode)
6582{
6583 uint32_t intr_mode = LPFC_INTR_ERROR;
6584 int retval, index;
6585
6586 if (cfg_mode == 2) {
6587 /* Preparation before conf_msi mbox cmd */
6588 retval = 0;
6589 if (!retval) {
6590 /* Now, try to enable MSI-X interrupt mode */
6591 retval = lpfc_sli4_enable_msix(phba);
6592 if (!retval) {
6593 /* Indicate initialization to MSI-X mode */
6594 phba->intr_type = MSIX;
6595 intr_mode = 2;
6596 }
6597 }
6598 }
6599
6600 /* Fallback to MSI if MSI-X initialization failed */
6601 if (cfg_mode >= 1 && phba->intr_type == NONE) {
6602 retval = lpfc_sli4_enable_msi(phba);
6603 if (!retval) {
6604 /* Indicate initialization to MSI mode */
6605 phba->intr_type = MSI;
6606 intr_mode = 1;
6607 }
6608 }
6609
6610 /* Fallback to INTx if both MSI-X/MSI initalization failed */
6611 if (phba->intr_type == NONE) {
6612 retval = request_irq(phba->pcidev->irq, lpfc_sli4_intr_handler,
6613 IRQF_SHARED, LPFC_DRIVER_NAME, phba);
6614 if (!retval) {
6615 /* Indicate initialization to INTx mode */
6616 phba->intr_type = INTx;
6617 intr_mode = 0;
6618 for (index = 0; index < phba->cfg_fcp_eq_count;
6619 index++) {
6620 phba->sli4_hba.fcp_eq_hdl[index].idx = index;
6621 phba->sli4_hba.fcp_eq_hdl[index].phba = phba;
6622 }
6623 }
6624 }
6625 return intr_mode;
6626}
6627
6628/**
6629 * lpfc_sli4_disable_intr - Disable device interrupt to SLI-4 device
6630 * @phba: pointer to lpfc hba data structure.
6631 *
6632 * This routine is invoked to disable device interrupt and disassociate
6633 * the driver's interrupt handler(s) from interrupt vector(s) to device
6634 * with SLI-4 interface spec. Depending on the interrupt mode, the driver
6635 * will release the interrupt vector(s) for the message signaled interrupt.
6636 **/
6637static void
6638lpfc_sli4_disable_intr(struct lpfc_hba *phba)
6639{
6640 /* Disable the currently initialized interrupt mode */
6641 if (phba->intr_type == MSIX)
6642 lpfc_sli4_disable_msix(phba);
6643 else if (phba->intr_type == MSI)
6644 lpfc_sli4_disable_msi(phba);
6645 else if (phba->intr_type == INTx)
6646 free_irq(phba->pcidev->irq, phba);
6647
6648 /* Reset interrupt management states */
6649 phba->intr_type = NONE;
6650 phba->sli.slistat.sli_intr = 0;
6651
6652 return;
6653}
6654
6655/**
6656 * lpfc_unset_hba - Unset SLI3 hba device initialization
6657 * @phba: pointer to lpfc hba data structure.
6658 *
6659 * This routine is invoked to unset the HBA device initialization steps to
6660 * a device with SLI-3 interface spec.
6661 **/
6662static void
6663lpfc_unset_hba(struct lpfc_hba *phba)
6664{
6665 struct lpfc_vport *vport = phba->pport;
6666 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
6667
6668 spin_lock_irq(shost->host_lock);
6669 vport->load_flag |= FC_UNLOADING;
6670 spin_unlock_irq(shost->host_lock);
6671
6672 lpfc_stop_hba_timers(phba);
6673
6674 phba->pport->work_port_events = 0;
6675
6676 lpfc_sli_hba_down(phba);
6677
6678 lpfc_sli_brdrestart(phba);
6679
6680 lpfc_sli_disable_intr(phba);
6681
6682 return;
6683}
6684
6685/**
6686 * lpfc_sli4_unset_hba - Unset SLI4 hba device initialization.
6687 * @phba: pointer to lpfc hba data structure.
6688 *
6689 * This routine is invoked to unset the HBA device initialization steps to
6690 * a device with SLI-4 interface spec.
6691 **/
6692static void
6693lpfc_sli4_unset_hba(struct lpfc_hba *phba)
6694{
6695 struct lpfc_vport *vport = phba->pport;
6696 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
6697
6698 spin_lock_irq(shost->host_lock);
6699 vport->load_flag |= FC_UNLOADING;
6700 spin_unlock_irq(shost->host_lock);
6701
6702 phba->pport->work_port_events = 0;
6703
6704 lpfc_sli4_hba_down(phba);
6705
6706 lpfc_sli4_disable_intr(phba);
6707
6708 return;
6709}
6710
6711/**
6712 * lpfc_sli4_hba_unset - Unset the fcoe hba
6713 * @phba: Pointer to HBA context object.
6714 *
6715 * This function is called in the SLI4 code path to reset the HBA's FCoE
6716 * function. The caller is not required to hold any lock. This routine
6717 * issues PCI function reset mailbox command to reset the FCoE function.
6718 * At the end of the function, it calls lpfc_hba_down_post function to
6719 * free any pending commands.
6720 **/
6721static void
6722lpfc_sli4_hba_unset(struct lpfc_hba *phba)
6723{
6724 int wait_cnt = 0;
6725 LPFC_MBOXQ_t *mboxq;
6726
6727 lpfc_stop_hba_timers(phba);
6728 phba->sli4_hba.intr_enable = 0;
6729
6730 /*
6731 * Gracefully wait out the potential current outstanding asynchronous
6732 * mailbox command.
6733 */
6734
6735 /* First, block any pending async mailbox command from posted */
6736 spin_lock_irq(&phba->hbalock);
6737 phba->sli.sli_flag |= LPFC_SLI_ASYNC_MBX_BLK;
6738 spin_unlock_irq(&phba->hbalock);
6739 /* Now, trying to wait it out if we can */
6740 while (phba->sli.sli_flag & LPFC_SLI_MBOX_ACTIVE) {
6741 msleep(10);
6742 if (++wait_cnt > LPFC_ACTIVE_MBOX_WAIT_CNT)
6743 break;
6744 }
6745 /* Forcefully release the outstanding mailbox command if timed out */
6746 if (phba->sli.sli_flag & LPFC_SLI_MBOX_ACTIVE) {
6747 spin_lock_irq(&phba->hbalock);
6748 mboxq = phba->sli.mbox_active;
6749 mboxq->u.mb.mbxStatus = MBX_NOT_FINISHED;
6750 __lpfc_mbox_cmpl_put(phba, mboxq);
6751 phba->sli.sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
6752 phba->sli.mbox_active = NULL;
6753 spin_unlock_irq(&phba->hbalock);
6754 }
6755
6756 /* Tear down the queues in the HBA */
6757 lpfc_sli4_queue_unset(phba);
6758
6759 /* Disable PCI subsystem interrupt */
6760 lpfc_sli4_disable_intr(phba);
6761
6762 /* Stop kthread signal shall trigger work_done one more time */
6763 kthread_stop(phba->worker_thread);
6764
6765 /* Stop the SLI4 device port */
6766 phba->pport->work_port_events = 0;
6767}
6768
6769/**
6770 * lpfc_pci_probe_one_s3 - PCI probe func to reg SLI-3 device to PCI subsystem.
6771 * @pdev: pointer to PCI device
6772 * @pid: pointer to PCI device identifier
6773 *
6774 * This routine is to be called to attach a device with SLI-3 interface spec
6775 * to the PCI subsystem. When an Emulex HBA with SLI-3 interface spec is
6776 * presented on PCI bus, the kernel PCI subsystem looks at PCI device-specific
6777 * information of the device and driver to see if the driver state that it can
6778 * support this kind of device. If the match is successful, the driver core
6779 * invokes this routine. If this routine determines it can claim the HBA, it
6780 * does all the initialization that it needs to do to handle the HBA properly.
6781 *
6782 * Return code
6783 * 0 - driver can claim the device
6784 * negative value - driver can not claim the device
6785 **/
6786static int __devinit
6787lpfc_pci_probe_one_s3(struct pci_dev *pdev, const struct pci_device_id *pid)
6788{
6789 struct lpfc_hba *phba;
6790 struct lpfc_vport *vport = NULL;
6669f9bb 6791 struct Scsi_Host *shost = NULL;
da0436e9
JS
6792 int error;
6793 uint32_t cfg_mode, intr_mode;
6794
6795 /* Allocate memory for HBA structure */
6796 phba = lpfc_hba_alloc(pdev);
6797 if (!phba)
6798 return -ENOMEM;
6799
6800 /* Perform generic PCI device enabling operation */
6801 error = lpfc_enable_pci_dev(phba);
6802 if (error) {
6803 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6804 "1401 Failed to enable pci device.\n");
6805 goto out_free_phba;
6806 }
6807
6808 /* Set up SLI API function jump table for PCI-device group-0 HBAs */
6809 error = lpfc_api_table_setup(phba, LPFC_PCI_DEV_LP);
6810 if (error)
6811 goto out_disable_pci_dev;
6812
6813 /* Set up SLI-3 specific device PCI memory space */
6814 error = lpfc_sli_pci_mem_setup(phba);
6815 if (error) {
6816 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6817 "1402 Failed to set up pci memory space.\n");
6818 goto out_disable_pci_dev;
6819 }
6820
6821 /* Set up phase-1 common device driver resources */
6822 error = lpfc_setup_driver_resource_phase1(phba);
6823 if (error) {
6824 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6825 "1403 Failed to set up driver resource.\n");
6826 goto out_unset_pci_mem_s3;
6827 }
6828
6829 /* Set up SLI-3 specific device driver resources */
6830 error = lpfc_sli_driver_resource_setup(phba);
6831 if (error) {
6832 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6833 "1404 Failed to set up driver resource.\n");
6834 goto out_unset_pci_mem_s3;
6835 }
6836
6837 /* Initialize and populate the iocb list per host */
6838 error = lpfc_init_iocb_list(phba, LPFC_IOCB_LIST_CNT);
6839 if (error) {
6840 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6841 "1405 Failed to initialize iocb list.\n");
6842 goto out_unset_driver_resource_s3;
6843 }
6844
6845 /* Set up common device driver resources */
6846 error = lpfc_setup_driver_resource_phase2(phba);
6847 if (error) {
6848 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6849 "1406 Failed to set up driver resource.\n");
6850 goto out_free_iocb_list;
6851 }
6852
6853 /* Create SCSI host to the physical port */
6854 error = lpfc_create_shost(phba);
6855 if (error) {
6856 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6857 "1407 Failed to create scsi host.\n");
6858 goto out_unset_driver_resource;
6859 }
6860
6861 /* Configure sysfs attributes */
6862 vport = phba->pport;
6863 error = lpfc_alloc_sysfs_attr(vport);
6864 if (error) {
6865 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6866 "1476 Failed to allocate sysfs attr\n");
6867 goto out_destroy_shost;
6868 }
6869
6669f9bb 6870 shost = lpfc_shost_from_vport(vport); /* save shost for error cleanup */
da0436e9
JS
6871 /* Now, trying to enable interrupt and bring up the device */
6872 cfg_mode = phba->cfg_use_msi;
6873 while (true) {
6874 /* Put device to a known state before enabling interrupt */
6875 lpfc_stop_port(phba);
6876 /* Configure and enable interrupt */
6877 intr_mode = lpfc_sli_enable_intr(phba, cfg_mode);
6878 if (intr_mode == LPFC_INTR_ERROR) {
6879 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6880 "0431 Failed to enable interrupt.\n");
6881 error = -ENODEV;
6882 goto out_free_sysfs_attr;
6883 }
6884 /* SLI-3 HBA setup */
6885 if (lpfc_sli_hba_setup(phba)) {
6886 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
6887 "1477 Failed to set up hba\n");
6888 error = -ENODEV;
6889 goto out_remove_device;
6890 }
6891
6892 /* Wait 50ms for the interrupts of previous mailbox commands */
6893 msleep(50);
6894 /* Check active interrupts on message signaled interrupts */
6895 if (intr_mode == 0 ||
6896 phba->sli.slistat.sli_intr > LPFC_MSIX_VECTORS) {
6897 /* Log the current active interrupt mode */
6898 phba->intr_mode = intr_mode;
6899 lpfc_log_intr_mode(phba, intr_mode);
6900 break;
6901 } else {
6902 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
6903 "0447 Configure interrupt mode (%d) "
6904 "failed active interrupt test.\n",
6905 intr_mode);
6906 /* Disable the current interrupt mode */
6907 lpfc_sli_disable_intr(phba);
6908 /* Try next level of interrupt mode */
6909 cfg_mode = --intr_mode;
6910 }
6911 }
6912
6913 /* Perform post initialization setup */
6914 lpfc_post_init_setup(phba);
6915
6916 /* Check if there are static vports to be created. */
6917 lpfc_create_static_vport(phba);
6918
6919 return 0;
6920
6921out_remove_device:
6922 lpfc_unset_hba(phba);
6923out_free_sysfs_attr:
6924 lpfc_free_sysfs_attr(vport);
6925out_destroy_shost:
6926 lpfc_destroy_shost(phba);
6927out_unset_driver_resource:
6928 lpfc_unset_driver_resource_phase2(phba);
6929out_free_iocb_list:
6930 lpfc_free_iocb_list(phba);
6931out_unset_driver_resource_s3:
6932 lpfc_sli_driver_resource_unset(phba);
6933out_unset_pci_mem_s3:
6934 lpfc_sli_pci_mem_unset(phba);
6935out_disable_pci_dev:
6936 lpfc_disable_pci_dev(phba);
6669f9bb
JS
6937 if (shost)
6938 scsi_host_put(shost);
da0436e9
JS
6939out_free_phba:
6940 lpfc_hba_free(phba);
6941 return error;
6942}
6943
6944/**
6945 * lpfc_pci_remove_one_s3 - PCI func to unreg SLI-3 device from PCI subsystem.
6946 * @pdev: pointer to PCI device
6947 *
6948 * This routine is to be called to disattach a device with SLI-3 interface
6949 * spec from PCI subsystem. When an Emulex HBA with SLI-3 interface spec is
6950 * removed from PCI bus, it performs all the necessary cleanup for the HBA
6951 * device to be removed from the PCI subsystem properly.
6952 **/
6953static void __devexit
6954lpfc_pci_remove_one_s3(struct pci_dev *pdev)
6955{
6956 struct Scsi_Host *shost = pci_get_drvdata(pdev);
6957 struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
6958 struct lpfc_vport **vports;
6959 struct lpfc_hba *phba = vport->phba;
6960 int i;
6961 int bars = pci_select_bars(pdev, IORESOURCE_MEM);
6962
6963 spin_lock_irq(&phba->hbalock);
6964 vport->load_flag |= FC_UNLOADING;
6965 spin_unlock_irq(&phba->hbalock);
6966
6967 lpfc_free_sysfs_attr(vport);
6968
6969 /* Release all the vports against this physical port */
6970 vports = lpfc_create_vport_work_array(phba);
6971 if (vports != NULL)
6972 for (i = 1; i <= phba->max_vports && vports[i] != NULL; i++)
6973 fc_vport_terminate(vports[i]->fc_vport);
6974 lpfc_destroy_vport_work_array(phba, vports);
6975
6976 /* Remove FC host and then SCSI host with the physical port */
6977 fc_remove_host(shost);
6978 scsi_remove_host(shost);
6979 lpfc_cleanup(vport);
6980
6981 /*
6982 * Bring down the SLI Layer. This step disable all interrupts,
6983 * clears the rings, discards all mailbox commands, and resets
6984 * the HBA.
6985 */
6986
6987 /* HBA interrupt will be diabled after this call */
6988 lpfc_sli_hba_down(phba);
6989 /* Stop kthread signal shall trigger work_done one more time */
6990 kthread_stop(phba->worker_thread);
6991 /* Final cleanup of txcmplq and reset the HBA */
6992 lpfc_sli_brdrestart(phba);
6993
6994 lpfc_stop_hba_timers(phba);
6995 spin_lock_irq(&phba->hbalock);
6996 list_del_init(&vport->listentry);
6997 spin_unlock_irq(&phba->hbalock);
6998
6999 lpfc_debugfs_terminate(vport);
7000
7001 /* Disable interrupt */
7002 lpfc_sli_disable_intr(phba);
7003
7004 pci_set_drvdata(pdev, NULL);
7005 scsi_host_put(shost);
7006
7007 /*
7008 * Call scsi_free before mem_free since scsi bufs are released to their
7009 * corresponding pools here.
7010 */
7011 lpfc_scsi_free(phba);
7012 lpfc_mem_free_all(phba);
7013
7014 dma_free_coherent(&pdev->dev, lpfc_sli_hbq_size(),
7015 phba->hbqslimp.virt, phba->hbqslimp.phys);
7016
7017 /* Free resources associated with SLI2 interface */
7018 dma_free_coherent(&pdev->dev, SLI2_SLIM_SIZE,
7019 phba->slim2p.virt, phba->slim2p.phys);
7020
7021 /* unmap adapter SLIM and Control Registers */
7022 iounmap(phba->ctrl_regs_memmap_p);
7023 iounmap(phba->slim_memmap_p);
7024
7025 lpfc_hba_free(phba);
7026
7027 pci_release_selected_regions(pdev, bars);
7028 pci_disable_device(pdev);
7029}
7030
7031/**
7032 * lpfc_pci_suspend_one_s3 - PCI func to suspend SLI-3 device for power mgmnt
7033 * @pdev: pointer to PCI device
7034 * @msg: power management message
7035 *
7036 * This routine is to be called from the kernel's PCI subsystem to support
7037 * system Power Management (PM) to device with SLI-3 interface spec. When
7038 * PM invokes this method, it quiesces the device by stopping the driver's
7039 * worker thread for the device, turning off device's interrupt and DMA,
7040 * and bring the device offline. Note that as the driver implements the
7041 * minimum PM requirements to a power-aware driver's PM support for the
7042 * suspend/resume -- all the possible PM messages (SUSPEND, HIBERNATE, FREEZE)
7043 * to the suspend() method call will be treated as SUSPEND and the driver will
7044 * fully reinitialize its device during resume() method call, the driver will
7045 * set device to PCI_D3hot state in PCI config space instead of setting it
7046 * according to the @msg provided by the PM.
7047 *
7048 * Return code
7049 * 0 - driver suspended the device
7050 * Error otherwise
7051 **/
7052static int
7053lpfc_pci_suspend_one_s3(struct pci_dev *pdev, pm_message_t msg)
7054{
7055 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7056 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
7057
7058 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
7059 "0473 PCI device Power Management suspend.\n");
7060
7061 /* Bring down the device */
7062 lpfc_offline_prep(phba);
7063 lpfc_offline(phba);
7064 kthread_stop(phba->worker_thread);
7065
7066 /* Disable interrupt from device */
7067 lpfc_sli_disable_intr(phba);
7068
7069 /* Save device state to PCI config space */
7070 pci_save_state(pdev);
7071 pci_set_power_state(pdev, PCI_D3hot);
7072
7073 return 0;
7074}
7075
7076/**
7077 * lpfc_pci_resume_one_s3 - PCI func to resume SLI-3 device for power mgmnt
7078 * @pdev: pointer to PCI device
7079 *
7080 * This routine is to be called from the kernel's PCI subsystem to support
7081 * system Power Management (PM) to device with SLI-3 interface spec. When PM
7082 * invokes this method, it restores the device's PCI config space state and
7083 * fully reinitializes the device and brings it online. Note that as the
7084 * driver implements the minimum PM requirements to a power-aware driver's
7085 * PM for suspend/resume -- all the possible PM messages (SUSPEND, HIBERNATE,
7086 * FREEZE) to the suspend() method call will be treated as SUSPEND and the
7087 * driver will fully reinitialize its device during resume() method call,
7088 * the device will be set to PCI_D0 directly in PCI config space before
7089 * restoring the state.
7090 *
7091 * Return code
7092 * 0 - driver suspended the device
7093 * Error otherwise
7094 **/
7095static int
7096lpfc_pci_resume_one_s3(struct pci_dev *pdev)
7097{
7098 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7099 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
7100 uint32_t intr_mode;
7101 int error;
7102
7103 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
7104 "0452 PCI device Power Management resume.\n");
7105
7106 /* Restore device state from PCI config space */
7107 pci_set_power_state(pdev, PCI_D0);
7108 pci_restore_state(pdev);
0d878419 7109
da0436e9
JS
7110 if (pdev->is_busmaster)
7111 pci_set_master(pdev);
7112
7113 /* Startup the kernel thread for this host adapter. */
7114 phba->worker_thread = kthread_run(lpfc_do_work, phba,
7115 "lpfc_worker_%d", phba->brd_no);
7116 if (IS_ERR(phba->worker_thread)) {
7117 error = PTR_ERR(phba->worker_thread);
7118 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7119 "0434 PM resume failed to start worker "
7120 "thread: error=x%x.\n", error);
7121 return error;
7122 }
7123
7124 /* Configure and enable interrupt */
7125 intr_mode = lpfc_sli_enable_intr(phba, phba->intr_mode);
7126 if (intr_mode == LPFC_INTR_ERROR) {
7127 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7128 "0430 PM resume Failed to enable interrupt\n");
7129 return -EIO;
7130 } else
7131 phba->intr_mode = intr_mode;
7132
7133 /* Restart HBA and bring it online */
7134 lpfc_sli_brdrestart(phba);
7135 lpfc_online(phba);
7136
7137 /* Log the current active interrupt mode */
7138 lpfc_log_intr_mode(phba, phba->intr_mode);
7139
7140 return 0;
7141}
7142
0d878419
JS
7143/**
7144 * lpfc_sli_prep_dev_for_reset - Prepare SLI3 device for pci slot reset
7145 * @phba: pointer to lpfc hba data structure.
7146 *
7147 * This routine is called to prepare the SLI3 device for PCI slot reset. It
7148 * disables the device interrupt and pci device, and aborts the internal FCP
7149 * pending I/Os.
7150 **/
7151static void
7152lpfc_sli_prep_dev_for_reset(struct lpfc_hba *phba)
7153{
7154 struct lpfc_sli *psli = &phba->sli;
7155 struct lpfc_sli_ring *pring;
7156
7157 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7158 "2710 PCI channel I/O frozen\n");
7159 /* Disable interrupt and pci device */
7160 lpfc_sli_disable_intr(phba);
7161 pci_disable_device(phba->pcidev);
7162 /*
7163 * There may be I/Os dropped by the firmware.
7164 * Error iocb (I/O) on txcmplq and let the SCSI layer
7165 * retry it after re-establishing link.
7166 */
7167 pring = &psli->ring[psli->fcp_ring];
7168 lpfc_sli_abort_iocb_ring(phba, pring);
7169}
7170
7171/**
7172 * lpfc_sli_prep_dev_for_perm_failure - Prepare SLI3 dev for pci slot disable
7173 * @phba: pointer to lpfc hba data structure.
7174 *
7175 * This routine is called to prepare the SLI3 device for PCI slot permanently
7176 * disabling. It blocks the SCSI transport layer traffic and flushes the FCP
7177 * pending I/Os.
7178 **/
7179static void
7180lpfc_prep_dev_for_perm_failure(struct lpfc_hba *phba)
7181{
7182 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7183 "2711 PCI channel I/O permanent failure\n");
7184 /* Block all SCSI devices' I/Os on the host */
7185 lpfc_scsi_dev_block(phba);
7186 /* Clean up all driver's outstanding SCSI I/Os */
7187 lpfc_sli_flush_fcp_rings(phba);
7188}
7189
da0436e9
JS
7190/**
7191 * lpfc_io_error_detected_s3 - Method for handling SLI-3 device PCI I/O error
7192 * @pdev: pointer to PCI device.
7193 * @state: the current PCI connection state.
7194 *
7195 * This routine is called from the PCI subsystem for I/O error handling to
7196 * device with SLI-3 interface spec. This function is called by the PCI
7197 * subsystem after a PCI bus error affecting this device has been detected.
7198 * When this function is invoked, it will need to stop all the I/Os and
7199 * interrupt(s) to the device. Once that is done, it will return
7200 * PCI_ERS_RESULT_NEED_RESET for the PCI subsystem to perform proper recovery
7201 * as desired.
7202 *
7203 * Return codes
0d878419 7204 * PCI_ERS_RESULT_CAN_RECOVER - can be recovered with reset_link
da0436e9
JS
7205 * PCI_ERS_RESULT_NEED_RESET - need to reset before recovery
7206 * PCI_ERS_RESULT_DISCONNECT - device could not be recovered
7207 **/
7208static pci_ers_result_t
7209lpfc_io_error_detected_s3(struct pci_dev *pdev, pci_channel_state_t state)
7210{
7211 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7212 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
da0436e9 7213
0d878419
JS
7214 switch (state) {
7215 case pci_channel_io_normal:
7216 /* Non-fatal error, do nothing */
7217 return PCI_ERS_RESULT_CAN_RECOVER;
7218 case pci_channel_io_frozen:
7219 /* Fatal error, prepare for slot reset */
7220 lpfc_sli_prep_dev_for_reset(phba);
7221 return PCI_ERS_RESULT_NEED_RESET;
7222 case pci_channel_io_perm_failure:
7223 /* Permanent failure, prepare for device down */
7224 lpfc_prep_dev_for_perm_failure(phba);
da0436e9 7225 return PCI_ERS_RESULT_DISCONNECT;
0d878419
JS
7226 default:
7227 /* Unknown state, prepare and request slot reset */
7228 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7229 "0472 Unknown PCI error state: x%x\n", state);
7230 lpfc_sli_prep_dev_for_reset(phba);
7231 return PCI_ERS_RESULT_NEED_RESET;
da0436e9 7232 }
da0436e9
JS
7233}
7234
7235/**
7236 * lpfc_io_slot_reset_s3 - Method for restarting PCI SLI-3 device from scratch.
7237 * @pdev: pointer to PCI device.
7238 *
7239 * This routine is called from the PCI subsystem for error handling to
7240 * device with SLI-3 interface spec. This is called after PCI bus has been
7241 * reset to restart the PCI card from scratch, as if from a cold-boot.
7242 * During the PCI subsystem error recovery, after driver returns
7243 * PCI_ERS_RESULT_NEED_RESET, the PCI subsystem will perform proper error
7244 * recovery and then call this routine before calling the .resume method
7245 * to recover the device. This function will initialize the HBA device,
7246 * enable the interrupt, but it will just put the HBA to offline state
7247 * without passing any I/O traffic.
7248 *
7249 * Return codes
7250 * PCI_ERS_RESULT_RECOVERED - the device has been recovered
7251 * PCI_ERS_RESULT_DISCONNECT - device could not be recovered
7252 */
7253static pci_ers_result_t
7254lpfc_io_slot_reset_s3(struct pci_dev *pdev)
7255{
7256 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7257 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
7258 struct lpfc_sli *psli = &phba->sli;
7259 uint32_t intr_mode;
7260
7261 dev_printk(KERN_INFO, &pdev->dev, "recovering from a slot reset.\n");
7262 if (pci_enable_device_mem(pdev)) {
7263 printk(KERN_ERR "lpfc: Cannot re-enable "
7264 "PCI device after reset.\n");
7265 return PCI_ERS_RESULT_DISCONNECT;
7266 }
7267
7268 pci_restore_state(pdev);
7269 if (pdev->is_busmaster)
7270 pci_set_master(pdev);
7271
7272 spin_lock_irq(&phba->hbalock);
7273 psli->sli_flag &= ~LPFC_SLI_ACTIVE;
7274 spin_unlock_irq(&phba->hbalock);
7275
7276 /* Configure and enable interrupt */
7277 intr_mode = lpfc_sli_enable_intr(phba, phba->intr_mode);
7278 if (intr_mode == LPFC_INTR_ERROR) {
7279 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7280 "0427 Cannot re-enable interrupt after "
7281 "slot reset.\n");
7282 return PCI_ERS_RESULT_DISCONNECT;
7283 } else
7284 phba->intr_mode = intr_mode;
7285
7286 /* Take device offline; this will perform cleanup */
7287 lpfc_offline(phba);
7288 lpfc_sli_brdrestart(phba);
7289
7290 /* Log the current active interrupt mode */
7291 lpfc_log_intr_mode(phba, phba->intr_mode);
7292
7293 return PCI_ERS_RESULT_RECOVERED;
7294}
7295
7296/**
7297 * lpfc_io_resume_s3 - Method for resuming PCI I/O operation on SLI-3 device.
7298 * @pdev: pointer to PCI device
7299 *
7300 * This routine is called from the PCI subsystem for error handling to device
7301 * with SLI-3 interface spec. It is called when kernel error recovery tells
7302 * the lpfc driver that it is ok to resume normal PCI operation after PCI bus
7303 * error recovery. After this call, traffic can start to flow from this device
7304 * again.
7305 */
7306static void
7307lpfc_io_resume_s3(struct pci_dev *pdev)
7308{
7309 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7310 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
3772a991 7311
0d878419 7312 /* Bring the device online */
da0436e9 7313 lpfc_online(phba);
0d878419
JS
7314
7315 /* Clean up Advanced Error Reporting (AER) if needed */
7316 if (phba->hba_flag & HBA_AER_ENABLED)
7317 pci_cleanup_aer_uncorrect_error_status(pdev);
da0436e9 7318}
3772a991 7319
da0436e9
JS
7320/**
7321 * lpfc_sli4_get_els_iocb_cnt - Calculate the # of ELS IOCBs to reserve
7322 * @phba: pointer to lpfc hba data structure.
7323 *
7324 * returns the number of ELS/CT IOCBs to reserve
7325 **/
7326int
7327lpfc_sli4_get_els_iocb_cnt(struct lpfc_hba *phba)
7328{
7329 int max_xri = phba->sli4_hba.max_cfg_param.max_xri;
7330
f1126688
JS
7331 if (phba->sli_rev == LPFC_SLI_REV4) {
7332 if (max_xri <= 100)
6a9c52cf 7333 return 10;
f1126688 7334 else if (max_xri <= 256)
6a9c52cf 7335 return 25;
f1126688 7336 else if (max_xri <= 512)
6a9c52cf 7337 return 50;
f1126688 7338 else if (max_xri <= 1024)
6a9c52cf 7339 return 100;
f1126688 7340 else
6a9c52cf 7341 return 150;
f1126688
JS
7342 } else
7343 return 0;
3772a991
JS
7344}
7345
7346/**
da0436e9 7347 * lpfc_pci_probe_one_s4 - PCI probe func to reg SLI-4 device to PCI subsys
3772a991
JS
7348 * @pdev: pointer to PCI device
7349 * @pid: pointer to PCI device identifier
7350 *
da0436e9
JS
7351 * This routine is called from the kernel's PCI subsystem to device with
7352 * SLI-4 interface spec. When an Emulex HBA with SLI-4 interface spec is
3772a991 7353 * presented on PCI bus, the kernel PCI subsystem looks at PCI device-specific
da0436e9
JS
7354 * information of the device and driver to see if the driver state that it
7355 * can support this kind of device. If the match is successful, the driver
7356 * core invokes this routine. If this routine determines it can claim the HBA,
7357 * it does all the initialization that it needs to do to handle the HBA
7358 * properly.
3772a991
JS
7359 *
7360 * Return code
7361 * 0 - driver can claim the device
7362 * negative value - driver can not claim the device
7363 **/
7364static int __devinit
da0436e9 7365lpfc_pci_probe_one_s4(struct pci_dev *pdev, const struct pci_device_id *pid)
3772a991
JS
7366{
7367 struct lpfc_hba *phba;
7368 struct lpfc_vport *vport = NULL;
6669f9bb 7369 struct Scsi_Host *shost = NULL;
3772a991
JS
7370 int error;
7371 uint32_t cfg_mode, intr_mode;
da0436e9 7372 int mcnt;
3772a991
JS
7373
7374 /* Allocate memory for HBA structure */
7375 phba = lpfc_hba_alloc(pdev);
7376 if (!phba)
7377 return -ENOMEM;
7378
7379 /* Perform generic PCI device enabling operation */
7380 error = lpfc_enable_pci_dev(phba);
7381 if (error) {
7382 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9 7383 "1409 Failed to enable pci device.\n");
3772a991
JS
7384 goto out_free_phba;
7385 }
7386
da0436e9
JS
7387 /* Set up SLI API function jump table for PCI-device group-1 HBAs */
7388 error = lpfc_api_table_setup(phba, LPFC_PCI_DEV_OC);
3772a991
JS
7389 if (error)
7390 goto out_disable_pci_dev;
7391
da0436e9
JS
7392 /* Set up SLI-4 specific device PCI memory space */
7393 error = lpfc_sli4_pci_mem_setup(phba);
3772a991
JS
7394 if (error) {
7395 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9 7396 "1410 Failed to set up pci memory space.\n");
3772a991
JS
7397 goto out_disable_pci_dev;
7398 }
7399
7400 /* Set up phase-1 common device driver resources */
7401 error = lpfc_setup_driver_resource_phase1(phba);
7402 if (error) {
7403 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9
JS
7404 "1411 Failed to set up driver resource.\n");
7405 goto out_unset_pci_mem_s4;
3772a991
JS
7406 }
7407
da0436e9
JS
7408 /* Set up SLI-4 Specific device driver resources */
7409 error = lpfc_sli4_driver_resource_setup(phba);
3772a991
JS
7410 if (error) {
7411 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9
JS
7412 "1412 Failed to set up driver resource.\n");
7413 goto out_unset_pci_mem_s4;
3772a991
JS
7414 }
7415
7416 /* Initialize and populate the iocb list per host */
da0436e9
JS
7417 error = lpfc_init_iocb_list(phba,
7418 phba->sli4_hba.max_cfg_param.max_xri);
3772a991
JS
7419 if (error) {
7420 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9
JS
7421 "1413 Failed to initialize iocb list.\n");
7422 goto out_unset_driver_resource_s4;
3772a991
JS
7423 }
7424
7425 /* Set up common device driver resources */
7426 error = lpfc_setup_driver_resource_phase2(phba);
7427 if (error) {
7428 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9 7429 "1414 Failed to set up driver resource.\n");
3772a991
JS
7430 goto out_free_iocb_list;
7431 }
7432
7433 /* Create SCSI host to the physical port */
7434 error = lpfc_create_shost(phba);
7435 if (error) {
7436 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9 7437 "1415 Failed to create scsi host.\n");
3772a991
JS
7438 goto out_unset_driver_resource;
7439 }
9399627f 7440
5b75da2f 7441 /* Configure sysfs attributes */
3772a991
JS
7442 vport = phba->pport;
7443 error = lpfc_alloc_sysfs_attr(vport);
7444 if (error) {
9399627f 7445 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9 7446 "1416 Failed to allocate sysfs attr\n");
3772a991 7447 goto out_destroy_shost;
98c9ea5c 7448 }
875fbdfe 7449
6669f9bb 7450 shost = lpfc_shost_from_vport(vport); /* save shost for error cleanup */
3772a991 7451 /* Now, trying to enable interrupt and bring up the device */
5b75da2f
JS
7452 cfg_mode = phba->cfg_use_msi;
7453 while (true) {
3772a991
JS
7454 /* Put device to a known state before enabling interrupt */
7455 lpfc_stop_port(phba);
5b75da2f 7456 /* Configure and enable interrupt */
da0436e9 7457 intr_mode = lpfc_sli4_enable_intr(phba, cfg_mode);
5b75da2f
JS
7458 if (intr_mode == LPFC_INTR_ERROR) {
7459 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9 7460 "0426 Failed to enable interrupt.\n");
3772a991 7461 error = -ENODEV;
5b75da2f
JS
7462 goto out_free_sysfs_attr;
7463 }
da0436e9
JS
7464 /* Set up SLI-4 HBA */
7465 if (lpfc_sli4_hba_setup(phba)) {
5b75da2f 7466 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9 7467 "1421 Failed to set up hba\n");
5b75da2f 7468 error = -ENODEV;
da0436e9 7469 goto out_disable_intr;
5b75da2f
JS
7470 }
7471
da0436e9
JS
7472 /* Send NOP mbx cmds for non-INTx mode active interrupt test */
7473 if (intr_mode != 0)
7474 mcnt = lpfc_sli4_send_nop_mbox_cmds(phba,
7475 LPFC_ACT_INTR_CNT);
7476
7477 /* Check active interrupts received only for MSI/MSI-X */
3772a991 7478 if (intr_mode == 0 ||
da0436e9 7479 phba->sli.slistat.sli_intr >= LPFC_ACT_INTR_CNT) {
5b75da2f
JS
7480 /* Log the current active interrupt mode */
7481 phba->intr_mode = intr_mode;
7482 lpfc_log_intr_mode(phba, intr_mode);
7483 break;
5b75da2f 7484 }
da0436e9
JS
7485 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
7486 "0451 Configure interrupt mode (%d) "
7487 "failed active interrupt test.\n",
7488 intr_mode);
7489 /* Unset the preivous SLI-4 HBA setup */
7490 lpfc_sli4_unset_hba(phba);
7491 /* Try next level of interrupt mode */
7492 cfg_mode = --intr_mode;
98c9ea5c 7493 }
858c9f6c 7494
3772a991
JS
7495 /* Perform post initialization setup */
7496 lpfc_post_init_setup(phba);
dea3101e 7497
1c6834a7
JS
7498 /* Check if there are static vports to be created. */
7499 lpfc_create_static_vport(phba);
7500
dea3101e 7501 return 0;
7502
da0436e9
JS
7503out_disable_intr:
7504 lpfc_sli4_disable_intr(phba);
5b75da2f
JS
7505out_free_sysfs_attr:
7506 lpfc_free_sysfs_attr(vport);
3772a991
JS
7507out_destroy_shost:
7508 lpfc_destroy_shost(phba);
7509out_unset_driver_resource:
7510 lpfc_unset_driver_resource_phase2(phba);
7511out_free_iocb_list:
7512 lpfc_free_iocb_list(phba);
da0436e9
JS
7513out_unset_driver_resource_s4:
7514 lpfc_sli4_driver_resource_unset(phba);
7515out_unset_pci_mem_s4:
7516 lpfc_sli4_pci_mem_unset(phba);
3772a991
JS
7517out_disable_pci_dev:
7518 lpfc_disable_pci_dev(phba);
6669f9bb
JS
7519 if (shost)
7520 scsi_host_put(shost);
2e0fef85 7521out_free_phba:
3772a991 7522 lpfc_hba_free(phba);
dea3101e 7523 return error;
7524}
7525
e59058c4 7526/**
da0436e9 7527 * lpfc_pci_remove_one_s4 - PCI func to unreg SLI-4 device from PCI subsystem
e59058c4
JS
7528 * @pdev: pointer to PCI device
7529 *
da0436e9
JS
7530 * This routine is called from the kernel's PCI subsystem to device with
7531 * SLI-4 interface spec. When an Emulex HBA with SLI-4 interface spec is
3772a991
JS
7532 * removed from PCI bus, it performs all the necessary cleanup for the HBA
7533 * device to be removed from the PCI subsystem properly.
e59058c4 7534 **/
dea3101e 7535static void __devexit
da0436e9 7536lpfc_pci_remove_one_s4(struct pci_dev *pdev)
dea3101e 7537{
da0436e9 7538 struct Scsi_Host *shost = pci_get_drvdata(pdev);
2e0fef85 7539 struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
eada272d 7540 struct lpfc_vport **vports;
da0436e9 7541 struct lpfc_hba *phba = vport->phba;
eada272d 7542 int i;
8a4df120 7543
da0436e9 7544 /* Mark the device unloading flag */
549e55cd 7545 spin_lock_irq(&phba->hbalock);
51ef4c26 7546 vport->load_flag |= FC_UNLOADING;
549e55cd 7547 spin_unlock_irq(&phba->hbalock);
2e0fef85 7548
da0436e9 7549 /* Free the HBA sysfs attributes */
858c9f6c
JS
7550 lpfc_free_sysfs_attr(vport);
7551
eada272d
JS
7552 /* Release all the vports against this physical port */
7553 vports = lpfc_create_vport_work_array(phba);
7554 if (vports != NULL)
3772a991 7555 for (i = 1; i <= phba->max_vports && vports[i] != NULL; i++)
eada272d
JS
7556 fc_vport_terminate(vports[i]->fc_vport);
7557 lpfc_destroy_vport_work_array(phba, vports);
7558
7559 /* Remove FC host and then SCSI host with the physical port */
858c9f6c
JS
7560 fc_remove_host(shost);
7561 scsi_remove_host(shost);
da0436e9
JS
7562
7563 /* Perform cleanup on the physical port */
87af33fe
JS
7564 lpfc_cleanup(vport);
7565
2e0fef85 7566 /*
da0436e9 7567 * Bring down the SLI Layer. This step disables all interrupts,
2e0fef85 7568 * clears the rings, discards all mailbox commands, and resets
da0436e9 7569 * the HBA FCoE function.
2e0fef85 7570 */
da0436e9
JS
7571 lpfc_debugfs_terminate(vport);
7572 lpfc_sli4_hba_unset(phba);
a257bf90 7573
858c9f6c
JS
7574 spin_lock_irq(&phba->hbalock);
7575 list_del_init(&vport->listentry);
7576 spin_unlock_irq(&phba->hbalock);
7577
da0436e9
JS
7578 /* Call scsi_free before lpfc_sli4_driver_resource_unset since scsi
7579 * buffers are released to their corresponding pools here.
2e0fef85
JS
7580 */
7581 lpfc_scsi_free(phba);
da0436e9 7582 lpfc_sli4_driver_resource_unset(phba);
ed957684 7583
da0436e9
JS
7584 /* Unmap adapter Control and Doorbell registers */
7585 lpfc_sli4_pci_mem_unset(phba);
2e0fef85 7586
da0436e9
JS
7587 /* Release PCI resources and disable device's PCI function */
7588 scsi_host_put(shost);
7589 lpfc_disable_pci_dev(phba);
2e0fef85 7590
da0436e9 7591 /* Finally, free the driver's device data structure */
3772a991 7592 lpfc_hba_free(phba);
2e0fef85 7593
da0436e9 7594 return;
dea3101e 7595}
7596
3a55b532 7597/**
da0436e9 7598 * lpfc_pci_suspend_one_s4 - PCI func to suspend SLI-4 device for power mgmnt
3a55b532
JS
7599 * @pdev: pointer to PCI device
7600 * @msg: power management message
7601 *
da0436e9
JS
7602 * This routine is called from the kernel's PCI subsystem to support system
7603 * Power Management (PM) to device with SLI-4 interface spec. When PM invokes
7604 * this method, it quiesces the device by stopping the driver's worker
7605 * thread for the device, turning off device's interrupt and DMA, and bring
7606 * the device offline. Note that as the driver implements the minimum PM
7607 * requirements to a power-aware driver's PM support for suspend/resume -- all
7608 * the possible PM messages (SUSPEND, HIBERNATE, FREEZE) to the suspend()
7609 * method call will be treated as SUSPEND and the driver will fully
7610 * reinitialize its device during resume() method call, the driver will set
7611 * device to PCI_D3hot state in PCI config space instead of setting it
3772a991 7612 * according to the @msg provided by the PM.
3a55b532
JS
7613 *
7614 * Return code
3772a991
JS
7615 * 0 - driver suspended the device
7616 * Error otherwise
3a55b532
JS
7617 **/
7618static int
da0436e9 7619lpfc_pci_suspend_one_s4(struct pci_dev *pdev, pm_message_t msg)
3a55b532
JS
7620{
7621 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7622 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
7623
7624 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
da0436e9 7625 "0298 PCI device Power Management suspend.\n");
3a55b532
JS
7626
7627 /* Bring down the device */
7628 lpfc_offline_prep(phba);
7629 lpfc_offline(phba);
7630 kthread_stop(phba->worker_thread);
7631
7632 /* Disable interrupt from device */
da0436e9 7633 lpfc_sli4_disable_intr(phba);
3a55b532
JS
7634
7635 /* Save device state to PCI config space */
7636 pci_save_state(pdev);
7637 pci_set_power_state(pdev, PCI_D3hot);
7638
7639 return 0;
7640}
7641
7642/**
da0436e9 7643 * lpfc_pci_resume_one_s4 - PCI func to resume SLI-4 device for power mgmnt
3a55b532
JS
7644 * @pdev: pointer to PCI device
7645 *
da0436e9
JS
7646 * This routine is called from the kernel's PCI subsystem to support system
7647 * Power Management (PM) to device with SLI-4 interface spac. When PM invokes
7648 * this method, it restores the device's PCI config space state and fully
7649 * reinitializes the device and brings it online. Note that as the driver
7650 * implements the minimum PM requirements to a power-aware driver's PM for
7651 * suspend/resume -- all the possible PM messages (SUSPEND, HIBERNATE, FREEZE)
7652 * to the suspend() method call will be treated as SUSPEND and the driver
7653 * will fully reinitialize its device during resume() method call, the device
7654 * will be set to PCI_D0 directly in PCI config space before restoring the
7655 * state.
3a55b532
JS
7656 *
7657 * Return code
3772a991
JS
7658 * 0 - driver suspended the device
7659 * Error otherwise
3a55b532
JS
7660 **/
7661static int
da0436e9 7662lpfc_pci_resume_one_s4(struct pci_dev *pdev)
3a55b532
JS
7663{
7664 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7665 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
5b75da2f 7666 uint32_t intr_mode;
3a55b532
JS
7667 int error;
7668
7669 lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
da0436e9 7670 "0292 PCI device Power Management resume.\n");
3a55b532
JS
7671
7672 /* Restore device state from PCI config space */
7673 pci_set_power_state(pdev, PCI_D0);
7674 pci_restore_state(pdev);
7675 if (pdev->is_busmaster)
7676 pci_set_master(pdev);
7677
da0436e9 7678 /* Startup the kernel thread for this host adapter. */
3a55b532
JS
7679 phba->worker_thread = kthread_run(lpfc_do_work, phba,
7680 "lpfc_worker_%d", phba->brd_no);
7681 if (IS_ERR(phba->worker_thread)) {
7682 error = PTR_ERR(phba->worker_thread);
7683 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9 7684 "0293 PM resume failed to start worker "
3a55b532
JS
7685 "thread: error=x%x.\n", error);
7686 return error;
7687 }
7688
5b75da2f 7689 /* Configure and enable interrupt */
da0436e9 7690 intr_mode = lpfc_sli4_enable_intr(phba, phba->intr_mode);
5b75da2f 7691 if (intr_mode == LPFC_INTR_ERROR) {
3a55b532 7692 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
da0436e9 7693 "0294 PM resume Failed to enable interrupt\n");
5b75da2f
JS
7694 return -EIO;
7695 } else
7696 phba->intr_mode = intr_mode;
3a55b532
JS
7697
7698 /* Restart HBA and bring it online */
7699 lpfc_sli_brdrestart(phba);
7700 lpfc_online(phba);
7701
5b75da2f
JS
7702 /* Log the current active interrupt mode */
7703 lpfc_log_intr_mode(phba, phba->intr_mode);
7704
3a55b532
JS
7705 return 0;
7706}
7707
8d63f375 7708/**
da0436e9 7709 * lpfc_io_error_detected_s4 - Method for handling PCI I/O error to SLI-4 device
e59058c4
JS
7710 * @pdev: pointer to PCI device.
7711 * @state: the current PCI connection state.
8d63f375 7712 *
da0436e9
JS
7713 * This routine is called from the PCI subsystem for error handling to device
7714 * with SLI-4 interface spec. This function is called by the PCI subsystem
7715 * after a PCI bus error affecting this device has been detected. When this
7716 * function is invoked, it will need to stop all the I/Os and interrupt(s)
7717 * to the device. Once that is done, it will return PCI_ERS_RESULT_NEED_RESET
7718 * for the PCI subsystem to perform proper recovery as desired.
e59058c4
JS
7719 *
7720 * Return codes
3772a991
JS
7721 * PCI_ERS_RESULT_NEED_RESET - need to reset before recovery
7722 * PCI_ERS_RESULT_DISCONNECT - device could not be recovered
e59058c4 7723 **/
3772a991 7724static pci_ers_result_t
da0436e9 7725lpfc_io_error_detected_s4(struct pci_dev *pdev, pci_channel_state_t state)
8d63f375 7726{
8d63f375
LV
7727 return PCI_ERS_RESULT_NEED_RESET;
7728}
7729
7730/**
da0436e9 7731 * lpfc_io_slot_reset_s4 - Method for restart PCI SLI-4 device from scratch
e59058c4
JS
7732 * @pdev: pointer to PCI device.
7733 *
da0436e9
JS
7734 * This routine is called from the PCI subsystem for error handling to device
7735 * with SLI-4 interface spec. It is called after PCI bus has been reset to
7736 * restart the PCI card from scratch, as if from a cold-boot. During the
7737 * PCI subsystem error recovery, after the driver returns
3772a991 7738 * PCI_ERS_RESULT_NEED_RESET, the PCI subsystem will perform proper error
da0436e9
JS
7739 * recovery and then call this routine before calling the .resume method to
7740 * recover the device. This function will initialize the HBA device, enable
7741 * the interrupt, but it will just put the HBA to offline state without
7742 * passing any I/O traffic.
8d63f375 7743 *
e59058c4 7744 * Return codes
3772a991
JS
7745 * PCI_ERS_RESULT_RECOVERED - the device has been recovered
7746 * PCI_ERS_RESULT_DISCONNECT - device could not be recovered
8d63f375 7747 */
3772a991 7748static pci_ers_result_t
da0436e9 7749lpfc_io_slot_reset_s4(struct pci_dev *pdev)
8d63f375 7750{
8d63f375
LV
7751 return PCI_ERS_RESULT_RECOVERED;
7752}
7753
7754/**
da0436e9 7755 * lpfc_io_resume_s4 - Method for resuming PCI I/O operation to SLI-4 device
e59058c4 7756 * @pdev: pointer to PCI device
8d63f375 7757 *
3772a991 7758 * This routine is called from the PCI subsystem for error handling to device
da0436e9 7759 * with SLI-4 interface spec. It is called when kernel error recovery tells
3772a991
JS
7760 * the lpfc driver that it is ok to resume normal PCI operation after PCI bus
7761 * error recovery. After this call, traffic can start to flow from this device
7762 * again.
da0436e9 7763 **/
3772a991 7764static void
da0436e9 7765lpfc_io_resume_s4(struct pci_dev *pdev)
8d63f375 7766{
da0436e9 7767 return;
8d63f375
LV
7768}
7769
3772a991
JS
7770/**
7771 * lpfc_pci_probe_one - lpfc PCI probe func to reg dev to PCI subsystem
7772 * @pdev: pointer to PCI device
7773 * @pid: pointer to PCI device identifier
7774 *
7775 * This routine is to be registered to the kernel's PCI subsystem. When an
7776 * Emulex HBA device is presented on PCI bus, the kernel PCI subsystem looks
7777 * at PCI device-specific information of the device and driver to see if the
7778 * driver state that it can support this kind of device. If the match is
7779 * successful, the driver core invokes this routine. This routine dispatches
7780 * the action to the proper SLI-3 or SLI-4 device probing routine, which will
7781 * do all the initialization that it needs to do to handle the HBA device
7782 * properly.
7783 *
7784 * Return code
7785 * 0 - driver can claim the device
7786 * negative value - driver can not claim the device
7787 **/
7788static int __devinit
7789lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
7790{
7791 int rc;
8fa38513 7792 struct lpfc_sli_intf intf;
3772a991 7793
8fa38513 7794 if (pci_read_config_dword(pdev, LPFC_SLIREV_CONF_WORD, &intf.word0))
3772a991
JS
7795 return -ENODEV;
7796
8fa38513
JS
7797 if ((bf_get(lpfc_sli_intf_valid, &intf) == LPFC_SLI_INTF_VALID) &&
7798 (bf_get(lpfc_sli_intf_rev, &intf) == LPFC_SLIREV_CONF_SLI4))
da0436e9 7799 rc = lpfc_pci_probe_one_s4(pdev, pid);
8fa38513 7800 else
3772a991 7801 rc = lpfc_pci_probe_one_s3(pdev, pid);
8fa38513 7802
3772a991
JS
7803 return rc;
7804}
7805
7806/**
7807 * lpfc_pci_remove_one - lpfc PCI func to unreg dev from PCI subsystem
7808 * @pdev: pointer to PCI device
7809 *
7810 * This routine is to be registered to the kernel's PCI subsystem. When an
7811 * Emulex HBA is removed from PCI bus, the driver core invokes this routine.
7812 * This routine dispatches the action to the proper SLI-3 or SLI-4 device
7813 * remove routine, which will perform all the necessary cleanup for the
7814 * device to be removed from the PCI subsystem properly.
7815 **/
7816static void __devexit
7817lpfc_pci_remove_one(struct pci_dev *pdev)
7818{
7819 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7820 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
7821
7822 switch (phba->pci_dev_grp) {
7823 case LPFC_PCI_DEV_LP:
7824 lpfc_pci_remove_one_s3(pdev);
7825 break;
da0436e9
JS
7826 case LPFC_PCI_DEV_OC:
7827 lpfc_pci_remove_one_s4(pdev);
7828 break;
3772a991
JS
7829 default:
7830 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7831 "1424 Invalid PCI device group: 0x%x\n",
7832 phba->pci_dev_grp);
7833 break;
7834 }
7835 return;
7836}
7837
7838/**
7839 * lpfc_pci_suspend_one - lpfc PCI func to suspend dev for power management
7840 * @pdev: pointer to PCI device
7841 * @msg: power management message
7842 *
7843 * This routine is to be registered to the kernel's PCI subsystem to support
7844 * system Power Management (PM). When PM invokes this method, it dispatches
7845 * the action to the proper SLI-3 or SLI-4 device suspend routine, which will
7846 * suspend the device.
7847 *
7848 * Return code
7849 * 0 - driver suspended the device
7850 * Error otherwise
7851 **/
7852static int
7853lpfc_pci_suspend_one(struct pci_dev *pdev, pm_message_t msg)
7854{
7855 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7856 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
7857 int rc = -ENODEV;
7858
7859 switch (phba->pci_dev_grp) {
7860 case LPFC_PCI_DEV_LP:
7861 rc = lpfc_pci_suspend_one_s3(pdev, msg);
7862 break;
da0436e9
JS
7863 case LPFC_PCI_DEV_OC:
7864 rc = lpfc_pci_suspend_one_s4(pdev, msg);
7865 break;
3772a991
JS
7866 default:
7867 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7868 "1425 Invalid PCI device group: 0x%x\n",
7869 phba->pci_dev_grp);
7870 break;
7871 }
7872 return rc;
7873}
7874
7875/**
7876 * lpfc_pci_resume_one - lpfc PCI func to resume dev for power management
7877 * @pdev: pointer to PCI device
7878 *
7879 * This routine is to be registered to the kernel's PCI subsystem to support
7880 * system Power Management (PM). When PM invokes this method, it dispatches
7881 * the action to the proper SLI-3 or SLI-4 device resume routine, which will
7882 * resume the device.
7883 *
7884 * Return code
7885 * 0 - driver suspended the device
7886 * Error otherwise
7887 **/
7888static int
7889lpfc_pci_resume_one(struct pci_dev *pdev)
7890{
7891 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7892 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
7893 int rc = -ENODEV;
7894
7895 switch (phba->pci_dev_grp) {
7896 case LPFC_PCI_DEV_LP:
7897 rc = lpfc_pci_resume_one_s3(pdev);
7898 break;
da0436e9
JS
7899 case LPFC_PCI_DEV_OC:
7900 rc = lpfc_pci_resume_one_s4(pdev);
7901 break;
3772a991
JS
7902 default:
7903 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7904 "1426 Invalid PCI device group: 0x%x\n",
7905 phba->pci_dev_grp);
7906 break;
7907 }
7908 return rc;
7909}
7910
7911/**
7912 * lpfc_io_error_detected - lpfc method for handling PCI I/O error
7913 * @pdev: pointer to PCI device.
7914 * @state: the current PCI connection state.
7915 *
7916 * This routine is registered to the PCI subsystem for error handling. This
7917 * function is called by the PCI subsystem after a PCI bus error affecting
7918 * this device has been detected. When this routine is invoked, it dispatches
7919 * the action to the proper SLI-3 or SLI-4 device error detected handling
7920 * routine, which will perform the proper error detected operation.
7921 *
7922 * Return codes
7923 * PCI_ERS_RESULT_NEED_RESET - need to reset before recovery
7924 * PCI_ERS_RESULT_DISCONNECT - device could not be recovered
7925 **/
7926static pci_ers_result_t
7927lpfc_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
7928{
7929 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7930 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
7931 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
7932
7933 switch (phba->pci_dev_grp) {
7934 case LPFC_PCI_DEV_LP:
7935 rc = lpfc_io_error_detected_s3(pdev, state);
7936 break;
da0436e9
JS
7937 case LPFC_PCI_DEV_OC:
7938 rc = lpfc_io_error_detected_s4(pdev, state);
7939 break;
3772a991
JS
7940 default:
7941 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7942 "1427 Invalid PCI device group: 0x%x\n",
7943 phba->pci_dev_grp);
7944 break;
7945 }
7946 return rc;
7947}
7948
7949/**
7950 * lpfc_io_slot_reset - lpfc method for restart PCI dev from scratch
7951 * @pdev: pointer to PCI device.
7952 *
7953 * This routine is registered to the PCI subsystem for error handling. This
7954 * function is called after PCI bus has been reset to restart the PCI card
7955 * from scratch, as if from a cold-boot. When this routine is invoked, it
7956 * dispatches the action to the proper SLI-3 or SLI-4 device reset handling
7957 * routine, which will perform the proper device reset.
7958 *
7959 * Return codes
7960 * PCI_ERS_RESULT_RECOVERED - the device has been recovered
7961 * PCI_ERS_RESULT_DISCONNECT - device could not be recovered
7962 **/
7963static pci_ers_result_t
7964lpfc_io_slot_reset(struct pci_dev *pdev)
7965{
7966 struct Scsi_Host *shost = pci_get_drvdata(pdev);
7967 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
7968 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
7969
7970 switch (phba->pci_dev_grp) {
7971 case LPFC_PCI_DEV_LP:
7972 rc = lpfc_io_slot_reset_s3(pdev);
7973 break;
da0436e9
JS
7974 case LPFC_PCI_DEV_OC:
7975 rc = lpfc_io_slot_reset_s4(pdev);
7976 break;
3772a991
JS
7977 default:
7978 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
7979 "1428 Invalid PCI device group: 0x%x\n",
7980 phba->pci_dev_grp);
7981 break;
7982 }
7983 return rc;
7984}
7985
7986/**
7987 * lpfc_io_resume - lpfc method for resuming PCI I/O operation
7988 * @pdev: pointer to PCI device
7989 *
7990 * This routine is registered to the PCI subsystem for error handling. It
7991 * is called when kernel error recovery tells the lpfc driver that it is
7992 * OK to resume normal PCI operation after PCI bus error recovery. When
7993 * this routine is invoked, it dispatches the action to the proper SLI-3
7994 * or SLI-4 device io_resume routine, which will resume the device operation.
7995 **/
7996static void
7997lpfc_io_resume(struct pci_dev *pdev)
7998{
7999 struct Scsi_Host *shost = pci_get_drvdata(pdev);
8000 struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
8001
8002 switch (phba->pci_dev_grp) {
8003 case LPFC_PCI_DEV_LP:
8004 lpfc_io_resume_s3(pdev);
8005 break;
da0436e9
JS
8006 case LPFC_PCI_DEV_OC:
8007 lpfc_io_resume_s4(pdev);
8008 break;
3772a991
JS
8009 default:
8010 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
8011 "1429 Invalid PCI device group: 0x%x\n",
8012 phba->pci_dev_grp);
8013 break;
8014 }
8015 return;
8016}
8017
dea3101e 8018static struct pci_device_id lpfc_id_table[] = {
8019 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_VIPER,
8020 PCI_ANY_ID, PCI_ANY_ID, },
06325e74
JSEC
8021 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_FIREFLY,
8022 PCI_ANY_ID, PCI_ANY_ID, },
dea3101e 8023 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_THOR,
8024 PCI_ANY_ID, PCI_ANY_ID, },
8025 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PEGASUS,
8026 PCI_ANY_ID, PCI_ANY_ID, },
8027 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_CENTAUR,
8028 PCI_ANY_ID, PCI_ANY_ID, },
8029 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_DRAGONFLY,
8030 PCI_ANY_ID, PCI_ANY_ID, },
8031 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SUPERFLY,
8032 PCI_ANY_ID, PCI_ANY_ID, },
8033 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_RFLY,
8034 PCI_ANY_ID, PCI_ANY_ID, },
8035 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PFLY,
8036 PCI_ANY_ID, PCI_ANY_ID, },
e4adb204
JSEC
8037 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_NEPTUNE,
8038 PCI_ANY_ID, PCI_ANY_ID, },
8039 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_NEPTUNE_SCSP,
8040 PCI_ANY_ID, PCI_ANY_ID, },
8041 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_NEPTUNE_DCSP,
8042 PCI_ANY_ID, PCI_ANY_ID, },
dea3101e 8043 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS,
8044 PCI_ANY_ID, PCI_ANY_ID, },
e4adb204
JSEC
8045 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS_SCSP,
8046 PCI_ANY_ID, PCI_ANY_ID, },
8047 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HELIOS_DCSP,
8048 PCI_ANY_ID, PCI_ANY_ID, },
dea3101e 8049 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BMID,
8050 PCI_ANY_ID, PCI_ANY_ID, },
8051 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_BSMB,
8052 PCI_ANY_ID, PCI_ANY_ID, },
8053 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR,
8054 PCI_ANY_ID, PCI_ANY_ID, },
84774a4d
JS
8055 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_HORNET,
8056 PCI_ANY_ID, PCI_ANY_ID, },
e4adb204
JSEC
8057 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_SCSP,
8058 PCI_ANY_ID, PCI_ANY_ID, },
8059 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZEPHYR_DCSP,
8060 PCI_ANY_ID, PCI_ANY_ID, },
dea3101e 8061 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZMID,
8062 PCI_ANY_ID, PCI_ANY_ID, },
8063 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_ZSMB,
8064 PCI_ANY_ID, PCI_ANY_ID, },
8065 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_TFLY,
8066 PCI_ANY_ID, PCI_ANY_ID, },
8067 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP101,
8068 PCI_ANY_ID, PCI_ANY_ID, },
8069 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP10000S,
8070 PCI_ANY_ID, PCI_ANY_ID, },
e4adb204
JSEC
8071 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LP11000S,
8072 PCI_ANY_ID, PCI_ANY_ID, },
8073 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LPE11000S,
8074 PCI_ANY_ID, PCI_ANY_ID, },
b87eab38
JS
8075 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT,
8076 PCI_ANY_ID, PCI_ANY_ID, },
8077 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_MID,
8078 PCI_ANY_ID, PCI_ANY_ID, },
8079 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_SMB,
8080 PCI_ANY_ID, PCI_ANY_ID, },
8081 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_DCSP,
8082 PCI_ANY_ID, PCI_ANY_ID, },
8083 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_SCSP,
8084 PCI_ANY_ID, PCI_ANY_ID, },
8085 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SAT_S,
8086 PCI_ANY_ID, PCI_ANY_ID, },
84774a4d
JS
8087 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_VF,
8088 PCI_ANY_ID, PCI_ANY_ID, },
8089 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_PF,
8090 PCI_ANY_ID, PCI_ANY_ID, },
8091 {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_PROTEUS_S,
8092 PCI_ANY_ID, PCI_ANY_ID, },
3772a991
JS
8093 {PCI_VENDOR_ID_SERVERENGINE, PCI_DEVICE_ID_TIGERSHARK,
8094 PCI_ANY_ID, PCI_ANY_ID, },
6669f9bb
JS
8095 {PCI_VENDOR_ID_SERVERENGINE, PCI_DEVICE_ID_TS_BE3,
8096 PCI_ANY_ID, PCI_ANY_ID, },
dea3101e 8097 { 0 }
8098};
8099
8100MODULE_DEVICE_TABLE(pci, lpfc_id_table);
8101
8d63f375
LV
8102static struct pci_error_handlers lpfc_err_handler = {
8103 .error_detected = lpfc_io_error_detected,
8104 .slot_reset = lpfc_io_slot_reset,
8105 .resume = lpfc_io_resume,
8106};
8107
dea3101e 8108static struct pci_driver lpfc_driver = {
8109 .name = LPFC_DRIVER_NAME,
8110 .id_table = lpfc_id_table,
8111 .probe = lpfc_pci_probe_one,
8112 .remove = __devexit_p(lpfc_pci_remove_one),
3a55b532 8113 .suspend = lpfc_pci_suspend_one,
3772a991 8114 .resume = lpfc_pci_resume_one,
2e0fef85 8115 .err_handler = &lpfc_err_handler,
dea3101e 8116};
8117
e59058c4 8118/**
3621a710 8119 * lpfc_init - lpfc module initialization routine
e59058c4
JS
8120 *
8121 * This routine is to be invoked when the lpfc module is loaded into the
8122 * kernel. The special kernel macro module_init() is used to indicate the
8123 * role of this routine to the kernel as lpfc module entry point.
8124 *
8125 * Return codes
8126 * 0 - successful
8127 * -ENOMEM - FC attach transport failed
8128 * all others - failed
8129 */
dea3101e 8130static int __init
8131lpfc_init(void)
8132{
8133 int error = 0;
8134
8135 printk(LPFC_MODULE_DESC "\n");
c44ce173 8136 printk(LPFC_COPYRIGHT "\n");
dea3101e 8137
7ee5d43e
JS
8138 if (lpfc_enable_npiv) {
8139 lpfc_transport_functions.vport_create = lpfc_vport_create;
8140 lpfc_transport_functions.vport_delete = lpfc_vport_delete;
8141 }
dea3101e 8142 lpfc_transport_template =
8143 fc_attach_transport(&lpfc_transport_functions);
7ee5d43e 8144 if (lpfc_transport_template == NULL)
dea3101e 8145 return -ENOMEM;
7ee5d43e 8146 if (lpfc_enable_npiv) {
7ee5d43e 8147 lpfc_vport_transport_template =
98c9ea5c
JS
8148 fc_attach_transport(&lpfc_vport_transport_functions);
8149 if (lpfc_vport_transport_template == NULL) {
8150 fc_release_transport(lpfc_transport_template);
7ee5d43e 8151 return -ENOMEM;
98c9ea5c 8152 }
7ee5d43e 8153 }
dea3101e 8154 error = pci_register_driver(&lpfc_driver);
92d7f7b0 8155 if (error) {
dea3101e 8156 fc_release_transport(lpfc_transport_template);
d7c255b2
JS
8157 if (lpfc_enable_npiv)
8158 fc_release_transport(lpfc_vport_transport_template);
92d7f7b0 8159 }
dea3101e 8160
8161 return error;
8162}
8163
e59058c4 8164/**
3621a710 8165 * lpfc_exit - lpfc module removal routine
e59058c4
JS
8166 *
8167 * This routine is invoked when the lpfc module is removed from the kernel.
8168 * The special kernel macro module_exit() is used to indicate the role of
8169 * this routine to the kernel as lpfc module exit point.
8170 */
dea3101e 8171static void __exit
8172lpfc_exit(void)
8173{
8174 pci_unregister_driver(&lpfc_driver);
8175 fc_release_transport(lpfc_transport_template);
7ee5d43e
JS
8176 if (lpfc_enable_npiv)
8177 fc_release_transport(lpfc_vport_transport_template);
81301a9b 8178 if (_dump_buf_data) {
6a9c52cf
JS
8179 printk(KERN_ERR "9062 BLKGRD: freeing %lu pages for "
8180 "_dump_buf_data at 0x%p\n",
81301a9b
JS
8181 (1L << _dump_buf_data_order), _dump_buf_data);
8182 free_pages((unsigned long)_dump_buf_data, _dump_buf_data_order);
8183 }
8184
8185 if (_dump_buf_dif) {
6a9c52cf
JS
8186 printk(KERN_ERR "9049 BLKGRD: freeing %lu pages for "
8187 "_dump_buf_dif at 0x%p\n",
81301a9b
JS
8188 (1L << _dump_buf_dif_order), _dump_buf_dif);
8189 free_pages((unsigned long)_dump_buf_dif, _dump_buf_dif_order);
8190 }
dea3101e 8191}
8192
8193module_init(lpfc_init);
8194module_exit(lpfc_exit);
8195MODULE_LICENSE("GPL");
8196MODULE_DESCRIPTION(LPFC_MODULE_DESC);
8197MODULE_AUTHOR("Emulex Corporation - tech.support@emulex.com");
8198MODULE_VERSION("0:" LPFC_DRIVER_VERSION);
This page took 1.471254 seconds and 5 git commands to generate.