xref: /linux/drivers/scsi/bfa/bfad.c (revision 2e3fcbcc3b0eb9b96d2912cdac920f0ae8d1c8f2)
1  // SPDX-License-Identifier: GPL-2.0-only
2  /*
3   * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
4   * Copyright (c) 2014- QLogic Corporation.
5   * All rights reserved
6   * www.qlogic.com
7   *
8   * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter.
9   */
10  
11  /*
12   *  bfad.c Linux driver PCI interface module.
13   */
14  #include <linux/module.h>
15  #include <linux/kthread.h>
16  #include <linux/errno.h>
17  #include <linux/sched.h>
18  #include <linux/init.h>
19  #include <linux/fs.h>
20  #include <linux/pci.h>
21  #include <linux/firmware.h>
22  #include <linux/uaccess.h>
23  #include <asm/fcntl.h>
24  
25  #include "bfad_drv.h"
26  #include "bfad_im.h"
27  #include "bfa_fcs.h"
28  #include "bfa_defs.h"
29  #include "bfa.h"
30  
31  BFA_TRC_FILE(LDRV, BFAD);
32  DEFINE_MUTEX(bfad_mutex);
33  LIST_HEAD(bfad_list);
34  
35  static int	bfad_inst;
36  static int      num_sgpgs_parm;
37  int		supported_fc4s;
38  char		*host_name, *os_name, *os_patch;
39  int		num_rports, num_ios, num_tms;
40  int		num_fcxps, num_ufbufs;
41  int		reqq_size, rspq_size, num_sgpgs;
42  int		rport_del_timeout = BFA_FCS_RPORT_DEF_DEL_TIMEOUT;
43  int		bfa_lun_queue_depth = BFAD_LUN_QUEUE_DEPTH;
44  int		bfa_io_max_sge = BFAD_IO_MAX_SGE;
45  int		bfa_log_level = 3; /* WARNING log level */
46  int		ioc_auto_recover = BFA_TRUE;
47  int		bfa_linkup_delay = -1;
48  int		fdmi_enable = BFA_TRUE;
49  int		pcie_max_read_reqsz;
50  int		bfa_debugfs_enable = 1;
51  int		msix_disable_cb = 0, msix_disable_ct = 0;
52  int		max_xfer_size = BFAD_MAX_SECTORS >> 1;
53  static int	max_rport_logins = BFA_FCS_MAX_RPORT_LOGINS;
54  
55  /* Firmware releated */
56  u32	bfi_image_cb_size, bfi_image_ct_size, bfi_image_ct2_size;
57  u32	*bfi_image_cb, *bfi_image_ct, *bfi_image_ct2;
58  
59  #define BFAD_FW_FILE_CB		"cbfw-3.2.5.1.bin"
60  #define BFAD_FW_FILE_CT		"ctfw-3.2.5.1.bin"
61  #define BFAD_FW_FILE_CT2	"ct2fw-3.2.5.1.bin"
62  
63  static u32 *bfad_load_fwimg(struct pci_dev *pdev);
64  static void bfad_free_fwimg(void);
65  static void bfad_read_firmware(struct pci_dev *pdev, u32 **bfi_image,
66  		u32 *bfi_image_size, char *fw_name);
67  
68  static const char *msix_name_ct[] = {
69  	"ctrl",
70  	"cpe0", "cpe1", "cpe2", "cpe3",
71  	"rme0", "rme1", "rme2", "rme3" };
72  
73  static const char *msix_name_cb[] = {
74  	"cpe0", "cpe1", "cpe2", "cpe3",
75  	"rme0", "rme1", "rme2", "rme3",
76  	"eemc", "elpu0", "elpu1", "epss", "mlpu" };
77  
78  MODULE_FIRMWARE(BFAD_FW_FILE_CB);
79  MODULE_FIRMWARE(BFAD_FW_FILE_CT);
80  MODULE_FIRMWARE(BFAD_FW_FILE_CT2);
81  
82  module_param(os_name, charp, S_IRUGO | S_IWUSR);
83  MODULE_PARM_DESC(os_name, "OS name of the hba host machine");
84  module_param(os_patch, charp, S_IRUGO | S_IWUSR);
85  MODULE_PARM_DESC(os_patch, "OS patch level of the hba host machine");
86  module_param(host_name, charp, S_IRUGO | S_IWUSR);
87  MODULE_PARM_DESC(host_name, "Hostname of the hba host machine");
88  module_param(num_rports, int, S_IRUGO | S_IWUSR);
89  MODULE_PARM_DESC(num_rports, "Max number of rports supported per port "
90  				"(physical/logical), default=1024");
91  module_param(num_ios, int, S_IRUGO | S_IWUSR);
92  MODULE_PARM_DESC(num_ios, "Max number of ioim requests, default=2000");
93  module_param(num_tms, int, S_IRUGO | S_IWUSR);
94  MODULE_PARM_DESC(num_tms, "Max number of task im requests, default=128");
95  module_param(num_fcxps, int, S_IRUGO | S_IWUSR);
96  MODULE_PARM_DESC(num_fcxps, "Max number of fcxp requests, default=64");
97  module_param(num_ufbufs, int, S_IRUGO | S_IWUSR);
98  MODULE_PARM_DESC(num_ufbufs, "Max number of unsolicited frame "
99  				"buffers, default=64");
100  module_param(reqq_size, int, S_IRUGO | S_IWUSR);
101  MODULE_PARM_DESC(reqq_size, "Max number of request queue elements, "
102  				"default=256");
103  module_param(rspq_size, int, S_IRUGO | S_IWUSR);
104  MODULE_PARM_DESC(rspq_size, "Max number of response queue elements, "
105  				"default=64");
106  module_param(num_sgpgs, int, S_IRUGO | S_IWUSR);
107  MODULE_PARM_DESC(num_sgpgs, "Number of scatter/gather pages, default=2048");
108  module_param(rport_del_timeout, int, S_IRUGO | S_IWUSR);
109  MODULE_PARM_DESC(rport_del_timeout, "Rport delete timeout, default=90 secs, "
110  					"Range[>0]");
111  module_param(bfa_lun_queue_depth, int, S_IRUGO | S_IWUSR);
112  MODULE_PARM_DESC(bfa_lun_queue_depth, "Lun queue depth, default=32, Range[>0]");
113  module_param(bfa_io_max_sge, int, S_IRUGO | S_IWUSR);
114  MODULE_PARM_DESC(bfa_io_max_sge, "Max io scatter/gather elements, default=255");
115  module_param(bfa_log_level, int, S_IRUGO | S_IWUSR);
116  MODULE_PARM_DESC(bfa_log_level, "Driver log level, default=3, "
117  				"Range[Critical:1|Error:2|Warning:3|Info:4]");
118  module_param(ioc_auto_recover, int, S_IRUGO | S_IWUSR);
119  MODULE_PARM_DESC(ioc_auto_recover, "IOC auto recovery, default=1, "
120  				"Range[off:0|on:1]");
121  module_param(bfa_linkup_delay, int, S_IRUGO | S_IWUSR);
122  MODULE_PARM_DESC(bfa_linkup_delay, "Link up delay, default=30 secs for "
123  			"boot port. Otherwise 10 secs in RHEL4 & 0 for "
124  			"[RHEL5, SLES10, ESX40] Range[>0]");
125  module_param(msix_disable_cb, int, S_IRUGO | S_IWUSR);
126  MODULE_PARM_DESC(msix_disable_cb, "Disable Message Signaled Interrupts for QLogic-415/425/815/825 cards, default=0 Range[false:0|true:1]");
127  module_param(msix_disable_ct, int, S_IRUGO | S_IWUSR);
128  MODULE_PARM_DESC(msix_disable_ct, "Disable Message Signaled Interrupts if possible for QLogic-1010/1020/804/1007/902/1741 cards, default=0, Range[false:0|true:1]");
129  module_param(fdmi_enable, int, S_IRUGO | S_IWUSR);
130  MODULE_PARM_DESC(fdmi_enable, "Enables fdmi registration, default=1, "
131  				"Range[false:0|true:1]");
132  module_param(pcie_max_read_reqsz, int, S_IRUGO | S_IWUSR);
133  MODULE_PARM_DESC(pcie_max_read_reqsz, "PCIe max read request size, default=0 "
134  		"(use system setting), Range[128|256|512|1024|2048|4096]");
135  module_param(bfa_debugfs_enable, int, S_IRUGO | S_IWUSR);
136  MODULE_PARM_DESC(bfa_debugfs_enable, "Enables debugfs feature, default=1,"
137  		" Range[false:0|true:1]");
138  module_param(max_xfer_size, int, S_IRUGO | S_IWUSR);
139  MODULE_PARM_DESC(max_xfer_size, "default=32MB,"
140  		" Range[64k|128k|256k|512k|1024k|2048k]");
141  module_param(max_rport_logins, int, S_IRUGO | S_IWUSR);
142  MODULE_PARM_DESC(max_rport_logins, "Max number of logins to initiator and target rports on a port (physical/logical), default=1024");
143  
144  static void
145  bfad_sm_uninit(struct bfad_s *bfad, enum bfad_sm_event event);
146  static void
147  bfad_sm_created(struct bfad_s *bfad, enum bfad_sm_event event);
148  static void
149  bfad_sm_initializing(struct bfad_s *bfad, enum bfad_sm_event event);
150  static void
151  bfad_sm_operational(struct bfad_s *bfad, enum bfad_sm_event event);
152  static void
153  bfad_sm_stopping(struct bfad_s *bfad, enum bfad_sm_event event);
154  static void
155  bfad_sm_failed(struct bfad_s *bfad, enum bfad_sm_event event);
156  static void
157  bfad_sm_fcs_exit(struct bfad_s *bfad, enum bfad_sm_event event);
158  
159  /*
160   * Beginning state for the driver instance, awaiting the pci_probe event
161   */
162  static void
bfad_sm_uninit(struct bfad_s * bfad,enum bfad_sm_event event)163  bfad_sm_uninit(struct bfad_s *bfad, enum bfad_sm_event event)
164  {
165  	bfa_trc(bfad, event);
166  
167  	switch (event) {
168  	case BFAD_E_CREATE:
169  		bfa_sm_set_state(bfad, bfad_sm_created);
170  		bfad->bfad_tsk = kthread_create(bfad_worker, (void *) bfad,
171  						"%s", "bfad_worker");
172  		if (IS_ERR(bfad->bfad_tsk)) {
173  			printk(KERN_INFO "bfad[%d]: Kernel thread "
174  				"creation failed!\n", bfad->inst_no);
175  			bfa_sm_send_event(bfad, BFAD_E_KTHREAD_CREATE_FAILED);
176  		}
177  		bfa_sm_send_event(bfad, BFAD_E_INIT);
178  		break;
179  
180  	case BFAD_E_STOP:
181  		/* Ignore stop; already in uninit */
182  		break;
183  
184  	default:
185  		bfa_sm_fault(bfad, event);
186  	}
187  }
188  
189  /*
190   * Driver Instance is created, awaiting event INIT to initialize the bfad
191   */
192  static void
bfad_sm_created(struct bfad_s * bfad,enum bfad_sm_event event)193  bfad_sm_created(struct bfad_s *bfad, enum bfad_sm_event event)
194  {
195  	unsigned long flags;
196  	bfa_status_t ret;
197  
198  	bfa_trc(bfad, event);
199  
200  	switch (event) {
201  	case BFAD_E_INIT:
202  		bfa_sm_set_state(bfad, bfad_sm_initializing);
203  
204  		init_completion(&bfad->comp);
205  
206  		/* Enable Interrupt and wait bfa_init completion */
207  		if (bfad_setup_intr(bfad)) {
208  			printk(KERN_WARNING "bfad%d: bfad_setup_intr failed\n",
209  					bfad->inst_no);
210  			bfa_sm_send_event(bfad, BFAD_E_INIT_FAILED);
211  			break;
212  		}
213  
214  		spin_lock_irqsave(&bfad->bfad_lock, flags);
215  		bfa_iocfc_init(&bfad->bfa);
216  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
217  
218  		/* Set up interrupt handler for each vectors */
219  		if ((bfad->bfad_flags & BFAD_MSIX_ON) &&
220  			bfad_install_msix_handler(bfad)) {
221  			printk(KERN_WARNING "%s: install_msix failed, bfad%d\n",
222  				__func__, bfad->inst_no);
223  		}
224  
225  		bfad_init_timer(bfad);
226  
227  		wait_for_completion(&bfad->comp);
228  
229  		if ((bfad->bfad_flags & BFAD_HAL_INIT_DONE)) {
230  			bfa_sm_send_event(bfad, BFAD_E_INIT_SUCCESS);
231  		} else {
232  			printk(KERN_WARNING
233  				"bfa %s: bfa init failed\n",
234  				bfad->pci_name);
235  			spin_lock_irqsave(&bfad->bfad_lock, flags);
236  			bfa_fcs_init(&bfad->bfa_fcs);
237  			spin_unlock_irqrestore(&bfad->bfad_lock, flags);
238  
239  			ret = bfad_cfg_pport(bfad, BFA_LPORT_ROLE_FCP_IM);
240  			if (ret != BFA_STATUS_OK) {
241  				init_completion(&bfad->comp);
242  
243  				spin_lock_irqsave(&bfad->bfad_lock, flags);
244  				bfad->pport.flags |= BFAD_PORT_DELETE;
245  				bfa_fcs_exit(&bfad->bfa_fcs);
246  				spin_unlock_irqrestore(&bfad->bfad_lock, flags);
247  
248  				wait_for_completion(&bfad->comp);
249  
250  				bfa_sm_send_event(bfad, BFAD_E_INIT_FAILED);
251  				break;
252  			}
253  			bfad->bfad_flags |= BFAD_HAL_INIT_FAIL;
254  			bfa_sm_send_event(bfad, BFAD_E_HAL_INIT_FAILED);
255  		}
256  
257  		break;
258  
259  	case BFAD_E_KTHREAD_CREATE_FAILED:
260  		bfa_sm_set_state(bfad, bfad_sm_uninit);
261  		break;
262  
263  	default:
264  		bfa_sm_fault(bfad, event);
265  	}
266  }
267  
268  static void
bfad_sm_initializing(struct bfad_s * bfad,enum bfad_sm_event event)269  bfad_sm_initializing(struct bfad_s *bfad, enum bfad_sm_event event)
270  {
271  	int	retval;
272  	unsigned long	flags;
273  
274  	bfa_trc(bfad, event);
275  
276  	switch (event) {
277  	case BFAD_E_INIT_SUCCESS:
278  		kthread_stop(bfad->bfad_tsk);
279  		spin_lock_irqsave(&bfad->bfad_lock, flags);
280  		bfad->bfad_tsk = NULL;
281  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
282  
283  		retval = bfad_start_ops(bfad);
284  		if (retval != BFA_STATUS_OK) {
285  			bfa_sm_set_state(bfad, bfad_sm_failed);
286  			break;
287  		}
288  		bfa_sm_set_state(bfad, bfad_sm_operational);
289  		break;
290  
291  	case BFAD_E_INIT_FAILED:
292  		bfa_sm_set_state(bfad, bfad_sm_uninit);
293  		kthread_stop(bfad->bfad_tsk);
294  		spin_lock_irqsave(&bfad->bfad_lock, flags);
295  		bfad->bfad_tsk = NULL;
296  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
297  		break;
298  
299  	case BFAD_E_HAL_INIT_FAILED:
300  		bfa_sm_set_state(bfad, bfad_sm_failed);
301  		break;
302  	default:
303  		bfa_sm_fault(bfad, event);
304  	}
305  }
306  
307  static void
bfad_sm_failed(struct bfad_s * bfad,enum bfad_sm_event event)308  bfad_sm_failed(struct bfad_s *bfad, enum bfad_sm_event event)
309  {
310  	int	retval;
311  
312  	bfa_trc(bfad, event);
313  
314  	switch (event) {
315  	case BFAD_E_INIT_SUCCESS:
316  		retval = bfad_start_ops(bfad);
317  		if (retval != BFA_STATUS_OK)
318  			break;
319  		bfa_sm_set_state(bfad, bfad_sm_operational);
320  		break;
321  
322  	case BFAD_E_STOP:
323  		bfa_sm_set_state(bfad, bfad_sm_fcs_exit);
324  		bfa_sm_send_event(bfad, BFAD_E_FCS_EXIT_COMP);
325  		break;
326  
327  	case BFAD_E_EXIT_COMP:
328  		bfa_sm_set_state(bfad, bfad_sm_uninit);
329  		bfad_remove_intr(bfad);
330  		del_timer_sync(&bfad->hal_tmo);
331  		break;
332  
333  	default:
334  		bfa_sm_fault(bfad, event);
335  	}
336  }
337  
338  static void
bfad_sm_operational(struct bfad_s * bfad,enum bfad_sm_event event)339  bfad_sm_operational(struct bfad_s *bfad, enum bfad_sm_event event)
340  {
341  	bfa_trc(bfad, event);
342  
343  	switch (event) {
344  	case BFAD_E_STOP:
345  		bfa_sm_set_state(bfad, bfad_sm_fcs_exit);
346  		bfad_fcs_stop(bfad);
347  		break;
348  
349  	default:
350  		bfa_sm_fault(bfad, event);
351  	}
352  }
353  
354  static void
bfad_sm_fcs_exit(struct bfad_s * bfad,enum bfad_sm_event event)355  bfad_sm_fcs_exit(struct bfad_s *bfad, enum bfad_sm_event event)
356  {
357  	bfa_trc(bfad, event);
358  
359  	switch (event) {
360  	case BFAD_E_FCS_EXIT_COMP:
361  		bfa_sm_set_state(bfad, bfad_sm_stopping);
362  		bfad_stop(bfad);
363  		break;
364  
365  	default:
366  		bfa_sm_fault(bfad, event);
367  	}
368  }
369  
370  static void
bfad_sm_stopping(struct bfad_s * bfad,enum bfad_sm_event event)371  bfad_sm_stopping(struct bfad_s *bfad, enum bfad_sm_event event)
372  {
373  	bfa_trc(bfad, event);
374  
375  	switch (event) {
376  	case BFAD_E_EXIT_COMP:
377  		bfa_sm_set_state(bfad, bfad_sm_uninit);
378  		bfad_remove_intr(bfad);
379  		del_timer_sync(&bfad->hal_tmo);
380  		bfad_im_probe_undo(bfad);
381  		bfad->bfad_flags &= ~BFAD_FC4_PROBE_DONE;
382  		bfad_uncfg_pport(bfad);
383  		break;
384  
385  	default:
386  		bfa_sm_fault(bfad, event);
387  		break;
388  	}
389  }
390  
391  /*
392   *  BFA callbacks
393   */
394  void
bfad_hcb_comp(void * arg,bfa_status_t status)395  bfad_hcb_comp(void *arg, bfa_status_t status)
396  {
397  	struct bfad_hal_comp *fcomp = (struct bfad_hal_comp *)arg;
398  
399  	fcomp->status = status;
400  	complete(&fcomp->comp);
401  }
402  
403  /*
404   * bfa_init callback
405   */
406  void
bfa_cb_init(void * drv,bfa_status_t init_status)407  bfa_cb_init(void *drv, bfa_status_t init_status)
408  {
409  	struct bfad_s	      *bfad = drv;
410  
411  	if (init_status == BFA_STATUS_OK) {
412  		bfad->bfad_flags |= BFAD_HAL_INIT_DONE;
413  
414  		/*
415  		 * If BFAD_HAL_INIT_FAIL flag is set:
416  		 * Wake up the kernel thread to start
417  		 * the bfad operations after HAL init done
418  		 */
419  		if ((bfad->bfad_flags & BFAD_HAL_INIT_FAIL)) {
420  			bfad->bfad_flags &= ~BFAD_HAL_INIT_FAIL;
421  			wake_up_process(bfad->bfad_tsk);
422  		}
423  	}
424  
425  	complete(&bfad->comp);
426  }
427  
428  /*
429   *  BFA_FCS callbacks
430   */
431  struct bfad_port_s *
bfa_fcb_lport_new(struct bfad_s * bfad,struct bfa_fcs_lport_s * port,enum bfa_lport_role roles,struct bfad_vf_s * vf_drv,struct bfad_vport_s * vp_drv)432  bfa_fcb_lport_new(struct bfad_s *bfad, struct bfa_fcs_lport_s *port,
433  		 enum bfa_lport_role roles, struct bfad_vf_s *vf_drv,
434  		 struct bfad_vport_s *vp_drv)
435  {
436  	bfa_status_t	rc;
437  	struct bfad_port_s    *port_drv;
438  
439  	if (!vp_drv && !vf_drv) {
440  		port_drv = &bfad->pport;
441  		port_drv->pvb_type = BFAD_PORT_PHYS_BASE;
442  	} else if (!vp_drv && vf_drv) {
443  		port_drv = &vf_drv->base_port;
444  		port_drv->pvb_type = BFAD_PORT_VF_BASE;
445  	} else if (vp_drv && !vf_drv) {
446  		port_drv = &vp_drv->drv_port;
447  		port_drv->pvb_type = BFAD_PORT_PHYS_VPORT;
448  	} else {
449  		port_drv = &vp_drv->drv_port;
450  		port_drv->pvb_type = BFAD_PORT_VF_VPORT;
451  	}
452  
453  	port_drv->fcs_port = port;
454  	port_drv->roles = roles;
455  
456  	if (roles & BFA_LPORT_ROLE_FCP_IM) {
457  		rc = bfad_im_port_new(bfad, port_drv);
458  		if (rc != BFA_STATUS_OK) {
459  			bfad_im_port_delete(bfad, port_drv);
460  			port_drv = NULL;
461  		}
462  	}
463  
464  	return port_drv;
465  }
466  
467  /*
468   * FCS RPORT alloc callback, after successful PLOGI by FCS
469   */
470  bfa_status_t
bfa_fcb_rport_alloc(struct bfad_s * bfad,struct bfa_fcs_rport_s ** rport,struct bfad_rport_s ** rport_drv)471  bfa_fcb_rport_alloc(struct bfad_s *bfad, struct bfa_fcs_rport_s **rport,
472  		    struct bfad_rport_s **rport_drv)
473  {
474  	bfa_status_t	rc = BFA_STATUS_OK;
475  
476  	*rport_drv = kzalloc(sizeof(struct bfad_rport_s), GFP_ATOMIC);
477  	if (*rport_drv == NULL) {
478  		rc = BFA_STATUS_ENOMEM;
479  		goto ext;
480  	}
481  
482  	*rport = &(*rport_drv)->fcs_rport;
483  
484  ext:
485  	return rc;
486  }
487  
488  /*
489   * FCS PBC VPORT Create
490   */
491  void
bfa_fcb_pbc_vport_create(struct bfad_s * bfad,struct bfi_pbc_vport_s pbc_vport)492  bfa_fcb_pbc_vport_create(struct bfad_s *bfad, struct bfi_pbc_vport_s pbc_vport)
493  {
494  
495  	struct bfa_lport_cfg_s port_cfg = {0};
496  	struct bfad_vport_s   *vport;
497  	int rc;
498  
499  	vport = kzalloc(sizeof(struct bfad_vport_s), GFP_ATOMIC);
500  	if (!vport) {
501  		bfa_trc(bfad, 0);
502  		return;
503  	}
504  
505  	vport->drv_port.bfad = bfad;
506  	port_cfg.roles = BFA_LPORT_ROLE_FCP_IM;
507  	port_cfg.pwwn = pbc_vport.vp_pwwn;
508  	port_cfg.nwwn = pbc_vport.vp_nwwn;
509  	port_cfg.preboot_vp  = BFA_TRUE;
510  
511  	rc = bfa_fcs_pbc_vport_create(&vport->fcs_vport, &bfad->bfa_fcs, 0,
512  				  &port_cfg, vport);
513  
514  	if (rc != BFA_STATUS_OK) {
515  		bfa_trc(bfad, 0);
516  		return;
517  	}
518  
519  	list_add_tail(&vport->list_entry, &bfad->pbc_vport_list);
520  }
521  
522  void
bfad_hal_mem_release(struct bfad_s * bfad)523  bfad_hal_mem_release(struct bfad_s *bfad)
524  {
525  	struct bfa_meminfo_s *hal_meminfo = &bfad->meminfo;
526  	struct bfa_mem_dma_s *dma_info, *dma_elem;
527  	struct bfa_mem_kva_s *kva_info, *kva_elem;
528  	struct list_head *dm_qe, *km_qe;
529  
530  	dma_info = &hal_meminfo->dma_info;
531  	kva_info = &hal_meminfo->kva_info;
532  
533  	/* Iterate through the KVA meminfo queue */
534  	list_for_each(km_qe, &kva_info->qe) {
535  		kva_elem = (struct bfa_mem_kva_s *) km_qe;
536  		vfree(kva_elem->kva);
537  	}
538  
539  	/* Iterate through the DMA meminfo queue */
540  	list_for_each(dm_qe, &dma_info->qe) {
541  		dma_elem = (struct bfa_mem_dma_s *) dm_qe;
542  		dma_free_coherent(&bfad->pcidev->dev,
543  				dma_elem->mem_len, dma_elem->kva,
544  				(dma_addr_t) dma_elem->dma);
545  	}
546  
547  	memset(hal_meminfo, 0, sizeof(struct bfa_meminfo_s));
548  }
549  
550  void
bfad_update_hal_cfg(struct bfa_iocfc_cfg_s * bfa_cfg)551  bfad_update_hal_cfg(struct bfa_iocfc_cfg_s *bfa_cfg)
552  {
553  	if (num_rports > 0)
554  		bfa_cfg->fwcfg.num_rports = num_rports;
555  	if (num_ios > 0)
556  		bfa_cfg->fwcfg.num_ioim_reqs = num_ios;
557  	if (num_tms > 0)
558  		bfa_cfg->fwcfg.num_tskim_reqs = num_tms;
559  	if (num_fcxps > 0 && num_fcxps <= BFA_FCXP_MAX)
560  		bfa_cfg->fwcfg.num_fcxp_reqs = num_fcxps;
561  	if (num_ufbufs > 0 && num_ufbufs <= BFA_UF_MAX)
562  		bfa_cfg->fwcfg.num_uf_bufs = num_ufbufs;
563  	if (reqq_size > 0)
564  		bfa_cfg->drvcfg.num_reqq_elems = reqq_size;
565  	if (rspq_size > 0)
566  		bfa_cfg->drvcfg.num_rspq_elems = rspq_size;
567  	if (num_sgpgs > 0 && num_sgpgs <= BFA_SGPG_MAX)
568  		bfa_cfg->drvcfg.num_sgpgs = num_sgpgs;
569  
570  	/*
571  	 * populate the hal values back to the driver for sysfs use.
572  	 * otherwise, the default values will be shown as 0 in sysfs
573  	 */
574  	num_rports = bfa_cfg->fwcfg.num_rports;
575  	num_ios = bfa_cfg->fwcfg.num_ioim_reqs;
576  	num_tms = bfa_cfg->fwcfg.num_tskim_reqs;
577  	num_fcxps = bfa_cfg->fwcfg.num_fcxp_reqs;
578  	num_ufbufs = bfa_cfg->fwcfg.num_uf_bufs;
579  	reqq_size = bfa_cfg->drvcfg.num_reqq_elems;
580  	rspq_size = bfa_cfg->drvcfg.num_rspq_elems;
581  	num_sgpgs = bfa_cfg->drvcfg.num_sgpgs;
582  }
583  
584  bfa_status_t
bfad_hal_mem_alloc(struct bfad_s * bfad)585  bfad_hal_mem_alloc(struct bfad_s *bfad)
586  {
587  	struct bfa_meminfo_s *hal_meminfo = &bfad->meminfo;
588  	struct bfa_mem_dma_s *dma_info, *dma_elem;
589  	struct bfa_mem_kva_s *kva_info, *kva_elem;
590  	struct list_head *dm_qe, *km_qe;
591  	bfa_status_t	rc = BFA_STATUS_OK;
592  	dma_addr_t	phys_addr;
593  
594  	bfa_cfg_get_default(&bfad->ioc_cfg);
595  	bfad_update_hal_cfg(&bfad->ioc_cfg);
596  	bfad->cfg_data.ioc_queue_depth = bfad->ioc_cfg.fwcfg.num_ioim_reqs;
597  	bfa_cfg_get_meminfo(&bfad->ioc_cfg, hal_meminfo, &bfad->bfa);
598  
599  	dma_info = &hal_meminfo->dma_info;
600  	kva_info = &hal_meminfo->kva_info;
601  
602  	/* Iterate through the KVA meminfo queue */
603  	list_for_each(km_qe, &kva_info->qe) {
604  		kva_elem = (struct bfa_mem_kva_s *) km_qe;
605  		kva_elem->kva = vzalloc(kva_elem->mem_len);
606  		if (kva_elem->kva == NULL) {
607  			bfad_hal_mem_release(bfad);
608  			rc = BFA_STATUS_ENOMEM;
609  			goto ext;
610  		}
611  	}
612  
613  	/* Iterate through the DMA meminfo queue */
614  	list_for_each(dm_qe, &dma_info->qe) {
615  		dma_elem = (struct bfa_mem_dma_s *) dm_qe;
616  		dma_elem->kva = dma_alloc_coherent(&bfad->pcidev->dev,
617  						dma_elem->mem_len,
618  						&phys_addr, GFP_KERNEL);
619  		if (dma_elem->kva == NULL) {
620  			bfad_hal_mem_release(bfad);
621  			rc = BFA_STATUS_ENOMEM;
622  			goto ext;
623  		}
624  		dma_elem->dma = phys_addr;
625  		memset(dma_elem->kva, 0, dma_elem->mem_len);
626  	}
627  ext:
628  	return rc;
629  }
630  
631  /*
632   * Create a vport under a vf.
633   */
634  bfa_status_t
bfad_vport_create(struct bfad_s * bfad,u16 vf_id,struct bfa_lport_cfg_s * port_cfg,struct device * dev)635  bfad_vport_create(struct bfad_s *bfad, u16 vf_id,
636  		  struct bfa_lport_cfg_s *port_cfg, struct device *dev)
637  {
638  	struct bfad_vport_s   *vport;
639  	int		rc = BFA_STATUS_OK;
640  	unsigned long	flags;
641  	struct completion fcomp;
642  
643  	vport = kzalloc(sizeof(struct bfad_vport_s), GFP_KERNEL);
644  	if (!vport) {
645  		rc = BFA_STATUS_ENOMEM;
646  		goto ext;
647  	}
648  
649  	vport->drv_port.bfad = bfad;
650  	spin_lock_irqsave(&bfad->bfad_lock, flags);
651  	rc = bfa_fcs_vport_create(&vport->fcs_vport, &bfad->bfa_fcs, vf_id,
652  				  port_cfg, vport);
653  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
654  
655  	if (rc != BFA_STATUS_OK)
656  		goto ext_free_vport;
657  
658  	if (port_cfg->roles & BFA_LPORT_ROLE_FCP_IM) {
659  		rc = bfad_im_scsi_host_alloc(bfad, vport->drv_port.im_port,
660  							dev);
661  		if (rc != BFA_STATUS_OK)
662  			goto ext_free_fcs_vport;
663  	}
664  
665  	spin_lock_irqsave(&bfad->bfad_lock, flags);
666  	bfa_fcs_vport_start(&vport->fcs_vport);
667  	list_add_tail(&vport->list_entry, &bfad->vport_list);
668  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
669  
670  	return BFA_STATUS_OK;
671  
672  ext_free_fcs_vport:
673  	spin_lock_irqsave(&bfad->bfad_lock, flags);
674  	vport->comp_del = &fcomp;
675  	init_completion(vport->comp_del);
676  	bfa_fcs_vport_delete(&vport->fcs_vport);
677  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
678  	wait_for_completion(vport->comp_del);
679  ext_free_vport:
680  	kfree(vport);
681  ext:
682  	return rc;
683  }
684  
685  void
bfad_bfa_tmo(struct timer_list * t)686  bfad_bfa_tmo(struct timer_list *t)
687  {
688  	struct bfad_s	      *bfad = from_timer(bfad, t, hal_tmo);
689  	unsigned long	flags;
690  	struct list_head	       doneq;
691  
692  	spin_lock_irqsave(&bfad->bfad_lock, flags);
693  
694  	bfa_timer_beat(&bfad->bfa.timer_mod);
695  
696  	bfa_comp_deq(&bfad->bfa, &doneq);
697  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
698  
699  	if (!list_empty(&doneq)) {
700  		bfa_comp_process(&bfad->bfa, &doneq);
701  		spin_lock_irqsave(&bfad->bfad_lock, flags);
702  		bfa_comp_free(&bfad->bfa, &doneq);
703  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
704  	}
705  
706  	mod_timer(&bfad->hal_tmo,
707  		  jiffies + msecs_to_jiffies(BFA_TIMER_FREQ));
708  }
709  
710  void
bfad_init_timer(struct bfad_s * bfad)711  bfad_init_timer(struct bfad_s *bfad)
712  {
713  	timer_setup(&bfad->hal_tmo, bfad_bfa_tmo, 0);
714  
715  	mod_timer(&bfad->hal_tmo,
716  		  jiffies + msecs_to_jiffies(BFA_TIMER_FREQ));
717  }
718  
719  int
bfad_pci_init(struct pci_dev * pdev,struct bfad_s * bfad)720  bfad_pci_init(struct pci_dev *pdev, struct bfad_s *bfad)
721  {
722  	int rc = -ENODEV;
723  
724  	if (pci_enable_device(pdev)) {
725  		printk(KERN_ERR "pci_enable_device fail %p\n", pdev);
726  		goto out;
727  	}
728  
729  	if (pci_request_regions(pdev, BFAD_DRIVER_NAME))
730  		goto out_disable_device;
731  
732  	pci_set_master(pdev);
733  
734  	rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
735  	if (rc) {
736  		rc = -ENODEV;
737  		printk(KERN_ERR "dma_set_mask_and_coherent fail %p\n", pdev);
738  		goto out_release_region;
739  	}
740  
741  	bfad->pci_bar0_kva = pci_iomap(pdev, 0, pci_resource_len(pdev, 0));
742  	bfad->pci_bar2_kva = pci_iomap(pdev, 2, pci_resource_len(pdev, 2));
743  
744  	if (bfad->pci_bar0_kva == NULL) {
745  		printk(KERN_ERR "Fail to map bar0\n");
746  		rc = -ENODEV;
747  		goto out_release_region;
748  	}
749  
750  	bfad->hal_pcidev.pci_slot = PCI_SLOT(pdev->devfn);
751  	bfad->hal_pcidev.pci_func = PCI_FUNC(pdev->devfn);
752  	bfad->hal_pcidev.pci_bar_kva = bfad->pci_bar0_kva;
753  	bfad->hal_pcidev.device_id = pdev->device;
754  	bfad->hal_pcidev.ssid = pdev->subsystem_device;
755  	bfad->pci_name = pci_name(pdev);
756  
757  	bfad->pci_attr.vendor_id = pdev->vendor;
758  	bfad->pci_attr.device_id = pdev->device;
759  	bfad->pci_attr.ssid = pdev->subsystem_device;
760  	bfad->pci_attr.ssvid = pdev->subsystem_vendor;
761  	bfad->pci_attr.pcifn = PCI_FUNC(pdev->devfn);
762  
763  	bfad->pcidev = pdev;
764  
765  	/* Adjust PCIe Maximum Read Request Size */
766  	if (pci_is_pcie(pdev) && pcie_max_read_reqsz) {
767  		if (pcie_max_read_reqsz >= 128 &&
768  		    pcie_max_read_reqsz <= 4096 &&
769  		    is_power_of_2(pcie_max_read_reqsz)) {
770  			int max_rq = pcie_get_readrq(pdev);
771  			printk(KERN_WARNING "BFA[%s]: "
772  				"pcie_max_read_request_size is %d, "
773  				"reset to %d\n", bfad->pci_name, max_rq,
774  				pcie_max_read_reqsz);
775  			pcie_set_readrq(pdev, pcie_max_read_reqsz);
776  		} else {
777  			printk(KERN_WARNING "BFA[%s]: invalid "
778  			       "pcie_max_read_request_size %d ignored\n",
779  			       bfad->pci_name, pcie_max_read_reqsz);
780  		}
781  	}
782  
783  	pci_save_state(pdev);
784  
785  	return 0;
786  
787  out_release_region:
788  	pci_release_regions(pdev);
789  out_disable_device:
790  	pci_disable_device(pdev);
791  out:
792  	return rc;
793  }
794  
795  void
bfad_pci_uninit(struct pci_dev * pdev,struct bfad_s * bfad)796  bfad_pci_uninit(struct pci_dev *pdev, struct bfad_s *bfad)
797  {
798  	pci_iounmap(pdev, bfad->pci_bar0_kva);
799  	pci_iounmap(pdev, bfad->pci_bar2_kva);
800  	pci_release_regions(pdev);
801  	pci_disable_device(pdev);
802  }
803  
804  bfa_status_t
bfad_drv_init(struct bfad_s * bfad)805  bfad_drv_init(struct bfad_s *bfad)
806  {
807  	bfa_status_t	rc;
808  	unsigned long	flags;
809  
810  	bfad->cfg_data.rport_del_timeout = rport_del_timeout;
811  	bfad->cfg_data.lun_queue_depth = bfa_lun_queue_depth;
812  	bfad->cfg_data.io_max_sge = bfa_io_max_sge;
813  	bfad->cfg_data.binding_method = FCP_PWWN_BINDING;
814  
815  	rc = bfad_hal_mem_alloc(bfad);
816  	if (rc != BFA_STATUS_OK) {
817  		printk(KERN_WARNING "bfad%d bfad_hal_mem_alloc failure\n",
818  		       bfad->inst_no);
819  		printk(KERN_WARNING
820  			"Not enough memory to attach all QLogic BR-series HBA ports. System may need more memory.\n");
821  		return BFA_STATUS_FAILED;
822  	}
823  
824  	bfad->bfa.trcmod = bfad->trcmod;
825  	bfad->bfa.plog = &bfad->plog_buf;
826  	bfa_plog_init(&bfad->plog_buf);
827  	bfa_plog_str(&bfad->plog_buf, BFA_PL_MID_DRVR, BFA_PL_EID_DRIVER_START,
828  		     0, "Driver Attach");
829  
830  	bfa_attach(&bfad->bfa, bfad, &bfad->ioc_cfg, &bfad->meminfo,
831  		   &bfad->hal_pcidev);
832  
833  	/* FCS INIT */
834  	spin_lock_irqsave(&bfad->bfad_lock, flags);
835  	bfad->bfa_fcs.trcmod = bfad->trcmod;
836  	bfa_fcs_attach(&bfad->bfa_fcs, &bfad->bfa, bfad, BFA_FALSE);
837  	bfad->bfa_fcs.fdmi_enabled = fdmi_enable;
838  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
839  
840  	bfad->bfad_flags |= BFAD_DRV_INIT_DONE;
841  
842  	return BFA_STATUS_OK;
843  }
844  
845  void
bfad_drv_start(struct bfad_s * bfad)846  bfad_drv_start(struct bfad_s *bfad)
847  {
848  	unsigned long	flags;
849  
850  	spin_lock_irqsave(&bfad->bfad_lock, flags);
851  	bfa_iocfc_start(&bfad->bfa);
852  	bfa_fcs_pbc_vport_init(&bfad->bfa_fcs);
853  	bfa_fcs_fabric_modstart(&bfad->bfa_fcs);
854  	bfad->bfad_flags |= BFAD_HAL_START_DONE;
855  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
856  
857  	if (bfad->im)
858  		flush_workqueue(bfad->im->drv_workq);
859  }
860  
861  void
bfad_fcs_stop(struct bfad_s * bfad)862  bfad_fcs_stop(struct bfad_s *bfad)
863  {
864  	unsigned long	flags;
865  
866  	spin_lock_irqsave(&bfad->bfad_lock, flags);
867  	init_completion(&bfad->comp);
868  	bfad->pport.flags |= BFAD_PORT_DELETE;
869  	bfa_fcs_exit(&bfad->bfa_fcs);
870  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
871  	wait_for_completion(&bfad->comp);
872  
873  	bfa_sm_send_event(bfad, BFAD_E_FCS_EXIT_COMP);
874  }
875  
876  void
bfad_stop(struct bfad_s * bfad)877  bfad_stop(struct bfad_s *bfad)
878  {
879  	unsigned long	flags;
880  
881  	spin_lock_irqsave(&bfad->bfad_lock, flags);
882  	init_completion(&bfad->comp);
883  	bfa_iocfc_stop(&bfad->bfa);
884  	bfad->bfad_flags &= ~BFAD_HAL_START_DONE;
885  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
886  	wait_for_completion(&bfad->comp);
887  
888  	bfa_sm_send_event(bfad, BFAD_E_EXIT_COMP);
889  }
890  
891  bfa_status_t
bfad_cfg_pport(struct bfad_s * bfad,enum bfa_lport_role role)892  bfad_cfg_pport(struct bfad_s *bfad, enum bfa_lport_role role)
893  {
894  	int		rc = BFA_STATUS_OK;
895  
896  	/* Allocate scsi_host for the physical port */
897  	if ((supported_fc4s & BFA_LPORT_ROLE_FCP_IM) &&
898  	    (role & BFA_LPORT_ROLE_FCP_IM)) {
899  		if (bfad->pport.im_port == NULL) {
900  			rc = BFA_STATUS_FAILED;
901  			goto out;
902  		}
903  
904  		rc = bfad_im_scsi_host_alloc(bfad, bfad->pport.im_port,
905  						&bfad->pcidev->dev);
906  		if (rc != BFA_STATUS_OK)
907  			goto out;
908  
909  		bfad->pport.roles |= BFA_LPORT_ROLE_FCP_IM;
910  	}
911  
912  	bfad->bfad_flags |= BFAD_CFG_PPORT_DONE;
913  
914  out:
915  	return rc;
916  }
917  
918  void
bfad_uncfg_pport(struct bfad_s * bfad)919  bfad_uncfg_pport(struct bfad_s *bfad)
920  {
921  	if ((supported_fc4s & BFA_LPORT_ROLE_FCP_IM) &&
922  	    (bfad->pport.roles & BFA_LPORT_ROLE_FCP_IM)) {
923  		bfad_im_scsi_host_free(bfad, bfad->pport.im_port);
924  		bfad_im_port_clean(bfad->pport.im_port);
925  		kfree(bfad->pport.im_port);
926  		bfad->pport.roles &= ~BFA_LPORT_ROLE_FCP_IM;
927  	}
928  
929  	bfad->bfad_flags &= ~BFAD_CFG_PPORT_DONE;
930  }
931  
932  bfa_status_t
bfad_start_ops(struct bfad_s * bfad)933  bfad_start_ops(struct bfad_s *bfad) {
934  
935  	int	retval;
936  	unsigned long	flags;
937  	struct bfad_vport_s *vport, *vport_new;
938  	struct bfa_fcs_driver_info_s driver_info;
939  
940  	/* Limit min/max. xfer size to [64k-32MB] */
941  	if (max_xfer_size < BFAD_MIN_SECTORS >> 1)
942  		max_xfer_size = BFAD_MIN_SECTORS >> 1;
943  	if (max_xfer_size > BFAD_MAX_SECTORS >> 1)
944  		max_xfer_size = BFAD_MAX_SECTORS >> 1;
945  
946  	/* Fill the driver_info info to fcs*/
947  	memset(&driver_info, 0, sizeof(driver_info));
948  	strscpy(driver_info.version, BFAD_DRIVER_VERSION,
949  		sizeof(driver_info.version));
950  	if (host_name)
951  		strscpy(driver_info.host_machine_name, host_name,
952  			sizeof(driver_info.host_machine_name));
953  	if (os_name)
954  		strscpy(driver_info.host_os_name, os_name,
955  			sizeof(driver_info.host_os_name));
956  	if (os_patch)
957  		strscpy(driver_info.host_os_patch, os_patch,
958  			sizeof(driver_info.host_os_patch));
959  
960  	strscpy(driver_info.os_device_name, bfad->pci_name,
961  		sizeof(driver_info.os_device_name));
962  
963  	/* FCS driver info init */
964  	spin_lock_irqsave(&bfad->bfad_lock, flags);
965  	bfa_fcs_driver_info_init(&bfad->bfa_fcs, &driver_info);
966  
967  	if (bfad->bfad_flags & BFAD_CFG_PPORT_DONE)
968  		bfa_fcs_update_cfg(&bfad->bfa_fcs);
969  	else
970  		bfa_fcs_init(&bfad->bfa_fcs);
971  
972  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
973  
974  	if (!(bfad->bfad_flags & BFAD_CFG_PPORT_DONE)) {
975  		retval = bfad_cfg_pport(bfad, BFA_LPORT_ROLE_FCP_IM);
976  		if (retval != BFA_STATUS_OK)
977  			return BFA_STATUS_FAILED;
978  	}
979  
980  	/* Setup fc host fixed attribute if the lk supports */
981  	bfad_fc_host_init(bfad->pport.im_port);
982  
983  	/* BFAD level FC4 IM specific resource allocation */
984  	retval = bfad_im_probe(bfad);
985  	if (retval != BFA_STATUS_OK) {
986  		printk(KERN_WARNING "bfad_im_probe failed\n");
987  		if (bfa_sm_cmp_state(bfad, bfad_sm_initializing))
988  			bfa_sm_set_state(bfad, bfad_sm_failed);
989  		return BFA_STATUS_FAILED;
990  	} else
991  		bfad->bfad_flags |= BFAD_FC4_PROBE_DONE;
992  
993  	bfad_drv_start(bfad);
994  
995  	/* Complete pbc vport create */
996  	list_for_each_entry_safe(vport, vport_new, &bfad->pbc_vport_list,
997  				list_entry) {
998  		struct fc_vport_identifiers vid;
999  		struct fc_vport *fc_vport;
1000  		char pwwn_buf[BFA_STRING_32];
1001  
1002  		memset(&vid, 0, sizeof(vid));
1003  		vid.roles = FC_PORT_ROLE_FCP_INITIATOR;
1004  		vid.vport_type = FC_PORTTYPE_NPIV;
1005  		vid.disable = false;
1006  		vid.node_name = wwn_to_u64((u8 *)
1007  				(&((vport->fcs_vport).lport.port_cfg.nwwn)));
1008  		vid.port_name = wwn_to_u64((u8 *)
1009  				(&((vport->fcs_vport).lport.port_cfg.pwwn)));
1010  		fc_vport = fc_vport_create(bfad->pport.im_port->shost, 0, &vid);
1011  		if (!fc_vport) {
1012  			wwn2str(pwwn_buf, vid.port_name);
1013  			printk(KERN_WARNING "bfad%d: failed to create pbc vport"
1014  				" %s\n", bfad->inst_no, pwwn_buf);
1015  		}
1016  		list_del(&vport->list_entry);
1017  		kfree(vport);
1018  	}
1019  
1020  	/*
1021  	 * If bfa_linkup_delay is set to -1 default; try to retrive the
1022  	 * value using the bfad_get_linkup_delay(); else use the
1023  	 * passed in module param value as the bfa_linkup_delay.
1024  	 */
1025  	if (bfa_linkup_delay < 0) {
1026  		bfa_linkup_delay = bfad_get_linkup_delay(bfad);
1027  		bfad_rport_online_wait(bfad);
1028  		bfa_linkup_delay = -1;
1029  	} else
1030  		bfad_rport_online_wait(bfad);
1031  
1032  	BFA_LOG(KERN_INFO, bfad, bfa_log_level, "bfa device claimed\n");
1033  
1034  	return BFA_STATUS_OK;
1035  }
1036  
1037  int
bfad_worker(void * ptr)1038  bfad_worker(void *ptr)
1039  {
1040  	struct bfad_s *bfad = ptr;
1041  	unsigned long flags;
1042  
1043  	if (kthread_should_stop())
1044  		return 0;
1045  
1046  	/* Send event BFAD_E_INIT_SUCCESS */
1047  	bfa_sm_send_event(bfad, BFAD_E_INIT_SUCCESS);
1048  
1049  	spin_lock_irqsave(&bfad->bfad_lock, flags);
1050  	bfad->bfad_tsk = NULL;
1051  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1052  
1053  	return 0;
1054  }
1055  
1056  /*
1057   *  BFA driver interrupt functions
1058   */
1059  irqreturn_t
bfad_intx(int irq,void * dev_id)1060  bfad_intx(int irq, void *dev_id)
1061  {
1062  	struct bfad_s	*bfad = dev_id;
1063  	struct list_head	doneq;
1064  	unsigned long	flags;
1065  	bfa_boolean_t rc;
1066  
1067  	spin_lock_irqsave(&bfad->bfad_lock, flags);
1068  	rc = bfa_intx(&bfad->bfa);
1069  	if (!rc) {
1070  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1071  		return IRQ_NONE;
1072  	}
1073  
1074  	bfa_comp_deq(&bfad->bfa, &doneq);
1075  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1076  
1077  	if (!list_empty(&doneq)) {
1078  		bfa_comp_process(&bfad->bfa, &doneq);
1079  
1080  		spin_lock_irqsave(&bfad->bfad_lock, flags);
1081  		bfa_comp_free(&bfad->bfa, &doneq);
1082  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1083  	}
1084  
1085  	return IRQ_HANDLED;
1086  
1087  }
1088  
1089  static irqreturn_t
bfad_msix(int irq,void * dev_id)1090  bfad_msix(int irq, void *dev_id)
1091  {
1092  	struct bfad_msix_s *vec = dev_id;
1093  	struct bfad_s *bfad = vec->bfad;
1094  	struct list_head doneq;
1095  	unsigned long   flags;
1096  
1097  	spin_lock_irqsave(&bfad->bfad_lock, flags);
1098  
1099  	bfa_msix(&bfad->bfa, vec->msix.entry);
1100  	bfa_comp_deq(&bfad->bfa, &doneq);
1101  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1102  
1103  	if (!list_empty(&doneq)) {
1104  		bfa_comp_process(&bfad->bfa, &doneq);
1105  
1106  		spin_lock_irqsave(&bfad->bfad_lock, flags);
1107  		bfa_comp_free(&bfad->bfa, &doneq);
1108  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1109  	}
1110  
1111  	return IRQ_HANDLED;
1112  }
1113  
1114  /*
1115   * Initialize the MSIX entry table.
1116   */
1117  static void
bfad_init_msix_entry(struct bfad_s * bfad,struct msix_entry * msix_entries,int mask,int max_bit)1118  bfad_init_msix_entry(struct bfad_s *bfad, struct msix_entry *msix_entries,
1119  			 int mask, int max_bit)
1120  {
1121  	int	i;
1122  	int	match = 0x00000001;
1123  
1124  	for (i = 0, bfad->nvec = 0; i < MAX_MSIX_ENTRY; i++) {
1125  		if (mask & match) {
1126  			bfad->msix_tab[bfad->nvec].msix.entry = i;
1127  			bfad->msix_tab[bfad->nvec].bfad = bfad;
1128  			msix_entries[bfad->nvec].entry = i;
1129  			bfad->nvec++;
1130  		}
1131  
1132  		match <<= 1;
1133  	}
1134  
1135  }
1136  
1137  int
bfad_install_msix_handler(struct bfad_s * bfad)1138  bfad_install_msix_handler(struct bfad_s *bfad)
1139  {
1140  	int i, error = 0;
1141  
1142  	for (i = 0; i < bfad->nvec; i++) {
1143  		sprintf(bfad->msix_tab[i].name, "bfa-%s-%s",
1144  				bfad->pci_name,
1145  				((bfa_asic_id_cb(bfad->hal_pcidev.device_id)) ?
1146  				msix_name_cb[i] : msix_name_ct[i]));
1147  
1148  		error = request_irq(bfad->msix_tab[i].msix.vector,
1149  				    (irq_handler_t) bfad_msix, 0,
1150  				    bfad->msix_tab[i].name, &bfad->msix_tab[i]);
1151  		bfa_trc(bfad, i);
1152  		bfa_trc(bfad, bfad->msix_tab[i].msix.vector);
1153  		if (error) {
1154  			int	j;
1155  
1156  			for (j = 0; j < i; j++)
1157  				free_irq(bfad->msix_tab[j].msix.vector,
1158  						&bfad->msix_tab[j]);
1159  
1160  			bfad->bfad_flags &= ~BFAD_MSIX_ON;
1161  			pci_disable_msix(bfad->pcidev);
1162  
1163  			return 1;
1164  		}
1165  	}
1166  
1167  	return 0;
1168  }
1169  
1170  /*
1171   * Setup MSIX based interrupt.
1172   */
1173  int
bfad_setup_intr(struct bfad_s * bfad)1174  bfad_setup_intr(struct bfad_s *bfad)
1175  {
1176  	int error;
1177  	u32 mask = 0, i, num_bit = 0, max_bit = 0;
1178  	struct msix_entry msix_entries[MAX_MSIX_ENTRY];
1179  	struct pci_dev *pdev = bfad->pcidev;
1180  	u16	reg;
1181  
1182  	/* Call BFA to get the msix map for this PCI function.  */
1183  	bfa_msix_getvecs(&bfad->bfa, &mask, &num_bit, &max_bit);
1184  
1185  	/* Set up the msix entry table */
1186  	bfad_init_msix_entry(bfad, msix_entries, mask, max_bit);
1187  
1188  	if ((bfa_asic_id_ctc(pdev->device) && !msix_disable_ct) ||
1189  	   (bfa_asic_id_cb(pdev->device) && !msix_disable_cb)) {
1190  
1191  		error = pci_enable_msix_exact(bfad->pcidev,
1192  					      msix_entries, bfad->nvec);
1193  		/* In CT1 & CT2, try to allocate just one vector */
1194  		if (error == -ENOSPC && bfa_asic_id_ctc(pdev->device)) {
1195  			printk(KERN_WARNING "bfa %s: trying one msix "
1196  			       "vector failed to allocate %d[%d]\n",
1197  			       bfad->pci_name, bfad->nvec, error);
1198  			bfad->nvec = 1;
1199  			error = pci_enable_msix_exact(bfad->pcidev,
1200  						      msix_entries, 1);
1201  		}
1202  
1203  		if (error) {
1204  			printk(KERN_WARNING "bfad%d: "
1205  			       "pci_enable_msix_exact failed (%d), "
1206  			       "use line based.\n",
1207  				bfad->inst_no, error);
1208  			goto line_based;
1209  		}
1210  
1211  		/* Disable INTX in MSI-X mode */
1212  		pci_read_config_word(pdev, PCI_COMMAND, &reg);
1213  
1214  		if (!(reg & PCI_COMMAND_INTX_DISABLE))
1215  			pci_write_config_word(pdev, PCI_COMMAND,
1216  				reg | PCI_COMMAND_INTX_DISABLE);
1217  
1218  		/* Save the vectors */
1219  		for (i = 0; i < bfad->nvec; i++) {
1220  			bfa_trc(bfad, msix_entries[i].vector);
1221  			bfad->msix_tab[i].msix.vector = msix_entries[i].vector;
1222  		}
1223  
1224  		bfa_msix_init(&bfad->bfa, bfad->nvec);
1225  
1226  		bfad->bfad_flags |= BFAD_MSIX_ON;
1227  
1228  		return 0;
1229  	}
1230  
1231  line_based:
1232  	error = request_irq(bfad->pcidev->irq, (irq_handler_t)bfad_intx,
1233  			    BFAD_IRQ_FLAGS, BFAD_DRIVER_NAME, bfad);
1234  	if (error)
1235  		return error;
1236  
1237  	bfad->bfad_flags |= BFAD_INTX_ON;
1238  
1239  	return 0;
1240  }
1241  
1242  void
bfad_remove_intr(struct bfad_s * bfad)1243  bfad_remove_intr(struct bfad_s *bfad)
1244  {
1245  	int	i;
1246  
1247  	if (bfad->bfad_flags & BFAD_MSIX_ON) {
1248  		for (i = 0; i < bfad->nvec; i++)
1249  			free_irq(bfad->msix_tab[i].msix.vector,
1250  					&bfad->msix_tab[i]);
1251  
1252  		pci_disable_msix(bfad->pcidev);
1253  		bfad->bfad_flags &= ~BFAD_MSIX_ON;
1254  	} else if (bfad->bfad_flags & BFAD_INTX_ON) {
1255  		free_irq(bfad->pcidev->irq, bfad);
1256  	}
1257  }
1258  
1259  /*
1260   * PCI probe entry.
1261   */
1262  int
bfad_pci_probe(struct pci_dev * pdev,const struct pci_device_id * pid)1263  bfad_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pid)
1264  {
1265  	struct bfad_s	*bfad;
1266  	int		error = -ENODEV, retval, i;
1267  
1268  	/* For single port cards - only claim function 0 */
1269  	if ((pdev->device == BFA_PCI_DEVICE_ID_FC_8G1P) &&
1270  		(PCI_FUNC(pdev->devfn) != 0))
1271  		return -ENODEV;
1272  
1273  	bfad = kzalloc(sizeof(struct bfad_s), GFP_KERNEL);
1274  	if (!bfad) {
1275  		error = -ENOMEM;
1276  		goto out;
1277  	}
1278  
1279  	bfad->trcmod = kzalloc(sizeof(struct bfa_trc_mod_s), GFP_KERNEL);
1280  	if (!bfad->trcmod) {
1281  		printk(KERN_WARNING "Error alloc trace buffer!\n");
1282  		error = -ENOMEM;
1283  		goto out_alloc_trace_failure;
1284  	}
1285  
1286  	/* TRACE INIT */
1287  	bfa_trc_init(bfad->trcmod);
1288  	bfa_trc(bfad, bfad_inst);
1289  
1290  	/* AEN INIT */
1291  	INIT_LIST_HEAD(&bfad->free_aen_q);
1292  	INIT_LIST_HEAD(&bfad->active_aen_q);
1293  	for (i = 0; i < BFA_AEN_MAX_ENTRY; i++)
1294  		list_add_tail(&bfad->aen_list[i].qe, &bfad->free_aen_q);
1295  
1296  	if (!(bfad_load_fwimg(pdev))) {
1297  		kfree(bfad->trcmod);
1298  		goto out_alloc_trace_failure;
1299  	}
1300  
1301  	retval = bfad_pci_init(pdev, bfad);
1302  	if (retval) {
1303  		printk(KERN_WARNING "bfad_pci_init failure!\n");
1304  		error = retval;
1305  		goto out_pci_init_failure;
1306  	}
1307  
1308  	mutex_lock(&bfad_mutex);
1309  	bfad->inst_no = bfad_inst++;
1310  	list_add_tail(&bfad->list_entry, &bfad_list);
1311  	mutex_unlock(&bfad_mutex);
1312  
1313  	/* Initializing the state machine: State set to uninit */
1314  	bfa_sm_set_state(bfad, bfad_sm_uninit);
1315  
1316  	spin_lock_init(&bfad->bfad_lock);
1317  	spin_lock_init(&bfad->bfad_aen_spinlock);
1318  
1319  	pci_set_drvdata(pdev, bfad);
1320  
1321  	bfad->ref_count = 0;
1322  	bfad->pport.bfad = bfad;
1323  	INIT_LIST_HEAD(&bfad->pbc_vport_list);
1324  	INIT_LIST_HEAD(&bfad->vport_list);
1325  
1326  	/* Setup the debugfs node for this bfad */
1327  	if (bfa_debugfs_enable)
1328  		bfad_debugfs_init(&bfad->pport);
1329  
1330  	retval = bfad_drv_init(bfad);
1331  	if (retval != BFA_STATUS_OK)
1332  		goto out_drv_init_failure;
1333  
1334  	bfa_sm_send_event(bfad, BFAD_E_CREATE);
1335  
1336  	if (bfa_sm_cmp_state(bfad, bfad_sm_uninit))
1337  		goto out_bfad_sm_failure;
1338  
1339  	return 0;
1340  
1341  out_bfad_sm_failure:
1342  	bfad_hal_mem_release(bfad);
1343  out_drv_init_failure:
1344  	/* Remove the debugfs node for this bfad */
1345  	kfree(bfad->regdata);
1346  	bfad_debugfs_exit(&bfad->pport);
1347  	mutex_lock(&bfad_mutex);
1348  	bfad_inst--;
1349  	list_del(&bfad->list_entry);
1350  	mutex_unlock(&bfad_mutex);
1351  	bfad_pci_uninit(pdev, bfad);
1352  out_pci_init_failure:
1353  	kfree(bfad->trcmod);
1354  out_alloc_trace_failure:
1355  	kfree(bfad);
1356  out:
1357  	return error;
1358  }
1359  
1360  /*
1361   * PCI remove entry.
1362   */
1363  void
bfad_pci_remove(struct pci_dev * pdev)1364  bfad_pci_remove(struct pci_dev *pdev)
1365  {
1366  	struct bfad_s	      *bfad = pci_get_drvdata(pdev);
1367  	unsigned long	flags;
1368  
1369  	bfa_trc(bfad, bfad->inst_no);
1370  
1371  	spin_lock_irqsave(&bfad->bfad_lock, flags);
1372  	if (bfad->bfad_tsk != NULL) {
1373  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1374  		kthread_stop(bfad->bfad_tsk);
1375  	} else {
1376  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1377  	}
1378  
1379  	/* Send Event BFAD_E_STOP */
1380  	bfa_sm_send_event(bfad, BFAD_E_STOP);
1381  
1382  	/* Driver detach and dealloc mem */
1383  	spin_lock_irqsave(&bfad->bfad_lock, flags);
1384  	bfa_detach(&bfad->bfa);
1385  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1386  	bfad_hal_mem_release(bfad);
1387  
1388  	/* Remove the debugfs node for this bfad */
1389  	kfree(bfad->regdata);
1390  	bfad_debugfs_exit(&bfad->pport);
1391  
1392  	/* Cleaning the BFAD instance */
1393  	mutex_lock(&bfad_mutex);
1394  	bfad_inst--;
1395  	list_del(&bfad->list_entry);
1396  	mutex_unlock(&bfad_mutex);
1397  	bfad_pci_uninit(pdev, bfad);
1398  
1399  	kfree(bfad->trcmod);
1400  	kfree(bfad);
1401  }
1402  
1403  /*
1404   * PCI Error Recovery entry, error detected.
1405   */
1406  static pci_ers_result_t
bfad_pci_error_detected(struct pci_dev * pdev,pci_channel_state_t state)1407  bfad_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
1408  {
1409  	struct bfad_s *bfad = pci_get_drvdata(pdev);
1410  	unsigned long	flags;
1411  	pci_ers_result_t ret = PCI_ERS_RESULT_NONE;
1412  
1413  	dev_printk(KERN_ERR, &pdev->dev,
1414  		   "error detected state: %d - flags: 0x%x\n",
1415  		   state, bfad->bfad_flags);
1416  
1417  	switch (state) {
1418  	case pci_channel_io_normal: /* non-fatal error */
1419  		spin_lock_irqsave(&bfad->bfad_lock, flags);
1420  		bfad->bfad_flags &= ~BFAD_EEH_BUSY;
1421  		/* Suspend/fail all bfa operations */
1422  		bfa_ioc_suspend(&bfad->bfa.ioc);
1423  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1424  		del_timer_sync(&bfad->hal_tmo);
1425  		ret = PCI_ERS_RESULT_CAN_RECOVER;
1426  		break;
1427  	case pci_channel_io_frozen: /* fatal error */
1428  		init_completion(&bfad->comp);
1429  		spin_lock_irqsave(&bfad->bfad_lock, flags);
1430  		bfad->bfad_flags |= BFAD_EEH_BUSY;
1431  		/* Suspend/fail all bfa operations */
1432  		bfa_ioc_suspend(&bfad->bfa.ioc);
1433  		bfa_fcs_stop(&bfad->bfa_fcs);
1434  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1435  		wait_for_completion(&bfad->comp);
1436  
1437  		bfad_remove_intr(bfad);
1438  		del_timer_sync(&bfad->hal_tmo);
1439  		pci_disable_device(pdev);
1440  		ret = PCI_ERS_RESULT_NEED_RESET;
1441  		break;
1442  	case pci_channel_io_perm_failure: /* PCI Card is DEAD */
1443  		spin_lock_irqsave(&bfad->bfad_lock, flags);
1444  		bfad->bfad_flags |= BFAD_EEH_BUSY |
1445  				    BFAD_EEH_PCI_CHANNEL_IO_PERM_FAILURE;
1446  		spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1447  
1448  		/* If the error_detected handler is called with the reason
1449  		 * pci_channel_io_perm_failure - it will subsequently call
1450  		 * pci_remove() entry point to remove the pci device from the
1451  		 * system - So defer the cleanup to pci_remove(); cleaning up
1452  		 * here causes inconsistent state during pci_remove().
1453  		 */
1454  		ret = PCI_ERS_RESULT_DISCONNECT;
1455  		break;
1456  	default:
1457  		WARN_ON(1);
1458  	}
1459  
1460  	return ret;
1461  }
1462  
restart_bfa(struct bfad_s * bfad)1463  static int restart_bfa(struct bfad_s *bfad)
1464  {
1465  	unsigned long flags;
1466  	struct pci_dev *pdev = bfad->pcidev;
1467  
1468  	bfa_attach(&bfad->bfa, bfad, &bfad->ioc_cfg,
1469  		   &bfad->meminfo, &bfad->hal_pcidev);
1470  
1471  	/* Enable Interrupt and wait bfa_init completion */
1472  	if (bfad_setup_intr(bfad)) {
1473  		dev_printk(KERN_WARNING, &pdev->dev,
1474  			   "%s: bfad_setup_intr failed\n", bfad->pci_name);
1475  		bfa_sm_send_event(bfad, BFAD_E_INIT_FAILED);
1476  		return -1;
1477  	}
1478  
1479  	init_completion(&bfad->comp);
1480  	spin_lock_irqsave(&bfad->bfad_lock, flags);
1481  	bfa_iocfc_init(&bfad->bfa);
1482  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1483  
1484  	/* Set up interrupt handler for each vectors */
1485  	if ((bfad->bfad_flags & BFAD_MSIX_ON) &&
1486  	    bfad_install_msix_handler(bfad))
1487  		dev_printk(KERN_WARNING, &pdev->dev,
1488  			   "%s: install_msix failed.\n", bfad->pci_name);
1489  
1490  	bfad_init_timer(bfad);
1491  	wait_for_completion(&bfad->comp);
1492  	bfad_drv_start(bfad);
1493  
1494  	return 0;
1495  }
1496  
1497  /*
1498   * PCI Error Recovery entry, re-initialize the chip.
1499   */
1500  static pci_ers_result_t
bfad_pci_slot_reset(struct pci_dev * pdev)1501  bfad_pci_slot_reset(struct pci_dev *pdev)
1502  {
1503  	struct bfad_s *bfad = pci_get_drvdata(pdev);
1504  	u8 byte;
1505  	int rc;
1506  
1507  	dev_printk(KERN_ERR, &pdev->dev,
1508  		   "bfad_pci_slot_reset flags: 0x%x\n", bfad->bfad_flags);
1509  
1510  	if (pci_enable_device(pdev)) {
1511  		dev_printk(KERN_ERR, &pdev->dev, "Cannot re-enable "
1512  			   "PCI device after reset.\n");
1513  		return PCI_ERS_RESULT_DISCONNECT;
1514  	}
1515  
1516  	pci_restore_state(pdev);
1517  
1518  	/*
1519  	 * Read some byte (e.g. DMA max. payload size which can't
1520  	 * be 0xff any time) to make sure - we did not hit another PCI error
1521  	 * in the middle of recovery. If we did, then declare permanent failure.
1522  	 */
1523  	pci_read_config_byte(pdev, 0x68, &byte);
1524  	if (byte == 0xff) {
1525  		dev_printk(KERN_ERR, &pdev->dev,
1526  			   "slot_reset failed ... got another PCI error !\n");
1527  		goto out_disable_device;
1528  	}
1529  
1530  	pci_save_state(pdev);
1531  	pci_set_master(pdev);
1532  
1533  	rc = dma_set_mask_and_coherent(&bfad->pcidev->dev, DMA_BIT_MASK(64));
1534  	if (rc)
1535  		goto out_disable_device;
1536  
1537  	if (restart_bfa(bfad) == -1)
1538  		goto out_disable_device;
1539  
1540  	dev_printk(KERN_WARNING, &pdev->dev,
1541  		   "slot_reset completed  flags: 0x%x!\n", bfad->bfad_flags);
1542  
1543  	return PCI_ERS_RESULT_RECOVERED;
1544  
1545  out_disable_device:
1546  	pci_disable_device(pdev);
1547  	return PCI_ERS_RESULT_DISCONNECT;
1548  }
1549  
1550  static pci_ers_result_t
bfad_pci_mmio_enabled(struct pci_dev * pdev)1551  bfad_pci_mmio_enabled(struct pci_dev *pdev)
1552  {
1553  	unsigned long	flags;
1554  	struct bfad_s *bfad = pci_get_drvdata(pdev);
1555  
1556  	dev_printk(KERN_INFO, &pdev->dev, "mmio_enabled\n");
1557  
1558  	/* Fetch FW diagnostic information */
1559  	bfa_ioc_debug_save_ftrc(&bfad->bfa.ioc);
1560  
1561  	/* Cancel all pending IOs */
1562  	spin_lock_irqsave(&bfad->bfad_lock, flags);
1563  	init_completion(&bfad->comp);
1564  	bfa_fcs_stop(&bfad->bfa_fcs);
1565  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1566  	wait_for_completion(&bfad->comp);
1567  
1568  	bfad_remove_intr(bfad);
1569  	del_timer_sync(&bfad->hal_tmo);
1570  	pci_disable_device(pdev);
1571  
1572  	return PCI_ERS_RESULT_NEED_RESET;
1573  }
1574  
1575  static void
bfad_pci_resume(struct pci_dev * pdev)1576  bfad_pci_resume(struct pci_dev *pdev)
1577  {
1578  	unsigned long	flags;
1579  	struct bfad_s *bfad = pci_get_drvdata(pdev);
1580  
1581  	dev_printk(KERN_WARNING, &pdev->dev, "resume\n");
1582  
1583  	/* wait until the link is online */
1584  	bfad_rport_online_wait(bfad);
1585  
1586  	spin_lock_irqsave(&bfad->bfad_lock, flags);
1587  	bfad->bfad_flags &= ~BFAD_EEH_BUSY;
1588  	spin_unlock_irqrestore(&bfad->bfad_lock, flags);
1589  }
1590  
1591  struct pci_device_id bfad_id_table[] = {
1592  	{
1593  		.vendor = BFA_PCI_VENDOR_ID_BROCADE,
1594  		.device = BFA_PCI_DEVICE_ID_FC_8G2P,
1595  		.subvendor = PCI_ANY_ID,
1596  		.subdevice = PCI_ANY_ID,
1597  	},
1598  	{
1599  		.vendor = BFA_PCI_VENDOR_ID_BROCADE,
1600  		.device = BFA_PCI_DEVICE_ID_FC_8G1P,
1601  		.subvendor = PCI_ANY_ID,
1602  		.subdevice = PCI_ANY_ID,
1603  	},
1604  	{
1605  		.vendor = BFA_PCI_VENDOR_ID_BROCADE,
1606  		.device = BFA_PCI_DEVICE_ID_CT,
1607  		.subvendor = PCI_ANY_ID,
1608  		.subdevice = PCI_ANY_ID,
1609  		.class = (PCI_CLASS_SERIAL_FIBER << 8),
1610  		.class_mask = ~0,
1611  	},
1612  	{
1613  		.vendor = BFA_PCI_VENDOR_ID_BROCADE,
1614  		.device = BFA_PCI_DEVICE_ID_CT_FC,
1615  		.subvendor = PCI_ANY_ID,
1616  		.subdevice = PCI_ANY_ID,
1617  		.class = (PCI_CLASS_SERIAL_FIBER << 8),
1618  		.class_mask = ~0,
1619  	},
1620  	{
1621  		.vendor = BFA_PCI_VENDOR_ID_BROCADE,
1622  		.device = BFA_PCI_DEVICE_ID_CT2,
1623  		.subvendor = PCI_ANY_ID,
1624  		.subdevice = PCI_ANY_ID,
1625  		.class = (PCI_CLASS_SERIAL_FIBER << 8),
1626  		.class_mask = ~0,
1627  	},
1628  
1629  	{
1630  		.vendor = BFA_PCI_VENDOR_ID_BROCADE,
1631  		.device = BFA_PCI_DEVICE_ID_CT2_QUAD,
1632  		.subvendor = PCI_ANY_ID,
1633  		.subdevice = PCI_ANY_ID,
1634  		.class = (PCI_CLASS_SERIAL_FIBER << 8),
1635  		.class_mask = ~0,
1636  	},
1637  	{0, 0},
1638  };
1639  
1640  MODULE_DEVICE_TABLE(pci, bfad_id_table);
1641  
1642  /*
1643   * PCI error recovery handlers.
1644   */
1645  static const struct pci_error_handlers bfad_err_handler = {
1646  	.error_detected = bfad_pci_error_detected,
1647  	.slot_reset = bfad_pci_slot_reset,
1648  	.mmio_enabled = bfad_pci_mmio_enabled,
1649  	.resume = bfad_pci_resume,
1650  };
1651  
1652  static struct pci_driver bfad_pci_driver = {
1653  	.name = BFAD_DRIVER_NAME,
1654  	.id_table = bfad_id_table,
1655  	.probe = bfad_pci_probe,
1656  	.remove = bfad_pci_remove,
1657  	.err_handler = &bfad_err_handler,
1658  };
1659  
1660  /*
1661   * Driver module init.
1662   */
1663  static int __init
bfad_init(void)1664  bfad_init(void)
1665  {
1666  	int		error = 0;
1667  
1668  	pr_info("QLogic BR-series BFA FC/FCOE SCSI driver - version: %s\n",
1669  			BFAD_DRIVER_VERSION);
1670  
1671  	if (num_sgpgs > 0)
1672  		num_sgpgs_parm = num_sgpgs;
1673  
1674  	error = bfad_im_module_init();
1675  	if (error) {
1676  		printk(KERN_WARNING "bfad_im_module_init failure\n");
1677  		return -ENOMEM;
1678  	}
1679  
1680  	if (strcmp(FCPI_NAME, " fcpim") == 0)
1681  		supported_fc4s |= BFA_LPORT_ROLE_FCP_IM;
1682  
1683  	bfa_auto_recover = ioc_auto_recover;
1684  	bfa_fcs_rport_set_del_timeout(rport_del_timeout);
1685  	bfa_fcs_rport_set_max_logins(max_rport_logins);
1686  
1687  	error = pci_register_driver(&bfad_pci_driver);
1688  	if (error) {
1689  		printk(KERN_WARNING "pci_register_driver failure\n");
1690  		goto ext;
1691  	}
1692  
1693  	return 0;
1694  
1695  ext:
1696  	bfad_im_module_exit();
1697  	return error;
1698  }
1699  
1700  /*
1701   * Driver module exit.
1702   */
1703  static void __exit
bfad_exit(void)1704  bfad_exit(void)
1705  {
1706  	pci_unregister_driver(&bfad_pci_driver);
1707  	bfad_im_module_exit();
1708  	bfad_free_fwimg();
1709  }
1710  
1711  /* Firmware handling */
1712  static void
bfad_read_firmware(struct pci_dev * pdev,u32 ** bfi_image,u32 * bfi_image_size,char * fw_name)1713  bfad_read_firmware(struct pci_dev *pdev, u32 **bfi_image,
1714  		u32 *bfi_image_size, char *fw_name)
1715  {
1716  	const struct firmware *fw;
1717  
1718  	if (request_firmware(&fw, fw_name, &pdev->dev)) {
1719  		printk(KERN_ALERT "Can't locate firmware %s\n", fw_name);
1720  		*bfi_image = NULL;
1721  		goto out;
1722  	}
1723  
1724  	*bfi_image = vmalloc(fw->size);
1725  	if (NULL == *bfi_image) {
1726  		printk(KERN_ALERT "Fail to allocate buffer for fw image "
1727  			"size=%x!\n", (u32) fw->size);
1728  		goto out;
1729  	}
1730  
1731  	memcpy(*bfi_image, fw->data, fw->size);
1732  	*bfi_image_size = fw->size/sizeof(u32);
1733  out:
1734  	release_firmware(fw);
1735  }
1736  
1737  static u32 *
bfad_load_fwimg(struct pci_dev * pdev)1738  bfad_load_fwimg(struct pci_dev *pdev)
1739  {
1740  	if (bfa_asic_id_ct2(pdev->device)) {
1741  		if (bfi_image_ct2_size == 0)
1742  			bfad_read_firmware(pdev, &bfi_image_ct2,
1743  				&bfi_image_ct2_size, BFAD_FW_FILE_CT2);
1744  		return bfi_image_ct2;
1745  	} else if (bfa_asic_id_ct(pdev->device)) {
1746  		if (bfi_image_ct_size == 0)
1747  			bfad_read_firmware(pdev, &bfi_image_ct,
1748  				&bfi_image_ct_size, BFAD_FW_FILE_CT);
1749  		return bfi_image_ct;
1750  	} else if (bfa_asic_id_cb(pdev->device)) {
1751  		if (bfi_image_cb_size == 0)
1752  			bfad_read_firmware(pdev, &bfi_image_cb,
1753  				&bfi_image_cb_size, BFAD_FW_FILE_CB);
1754  		return bfi_image_cb;
1755  	}
1756  
1757  	return NULL;
1758  }
1759  
1760  static void
bfad_free_fwimg(void)1761  bfad_free_fwimg(void)
1762  {
1763  	if (bfi_image_ct2_size && bfi_image_ct2)
1764  		vfree(bfi_image_ct2);
1765  	if (bfi_image_ct_size && bfi_image_ct)
1766  		vfree(bfi_image_ct);
1767  	if (bfi_image_cb_size && bfi_image_cb)
1768  		vfree(bfi_image_cb);
1769  }
1770  
1771  module_init(bfad_init);
1772  module_exit(bfad_exit);
1773  MODULE_LICENSE("GPL");
1774  MODULE_DESCRIPTION("QLogic BR-series Fibre Channel HBA Driver" BFAD_PROTO_NAME);
1775  MODULE_AUTHOR("QLogic Corporation");
1776  MODULE_VERSION(BFAD_DRIVER_VERSION);
1777