2 * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
6 * Linux driver for Brocade Fibre Channel Host Bus Adapter.
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License (GPL) Version 2 as
10 * published by the Free Software Foundation
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
19 * Contains base driver definitions.
23 * bfa_drv.h Linux driver data structures.
26 #ifndef __BFAD_DRV_H__
27 #define __BFAD_DRV_H__
29 #include "bfa_os_inc.h"
33 #include <fcs/bfa_fcs.h>
34 #include <defs/bfa_defs_pci.h>
35 #include <defs/bfa_defs_port.h>
36 #include <defs/bfa_defs_rport.h>
37 #include <fcs/bfa_fcs_rport.h>
38 #include <defs/bfa_defs_vport.h>
39 #include <fcs/bfa_fcs_vport.h>
41 #include <cs/bfa_plog.h>
42 #include "aen/bfa_aen.h"
43 #include <log/bfa_log_linux.h>
45 #define BFAD_DRIVER_NAME "bfa"
46 #ifdef BFA_DRIVER_VERSION
47 #define BFAD_DRIVER_VERSION BFA_DRIVER_VERSION
49 #define BFAD_DRIVER_VERSION "2.0.0.0"
53 #define BFAD_IRQ_FLAGS IRQF_SHARED
58 #define BFAD_MSIX_ON 0x00000001
59 #define BFAD_HAL_INIT_DONE 0x00000002
60 #define BFAD_DRV_INIT_DONE 0x00000004
61 #define BFAD_CFG_PPORT_DONE 0x00000008
62 #define BFAD_HAL_START_DONE 0x00000010
63 #define BFAD_PORT_ONLINE 0x00000020
64 #define BFAD_RPORT_ONLINE 0x00000040
66 #define BFAD_PORT_DELETE 0x00000001
69 * BFAD related definition
71 #define SCSI_SCAN_DELAY HZ
72 #define BFAD_STOP_TIMEOUT 30
73 #define BFAD_SUSPEND_TIMEOUT BFAD_STOP_TIMEOUT
76 * BFAD configuration parameter default values
78 #define BFAD_LUN_QUEUE_DEPTH 32
79 #define BFAD_IO_MAX_SGE SG_ALL
81 #define bfad_isr_t irq_handler_t
83 #define MAX_MSIX_ENTRY 22
87 struct msix_entry msix
;
90 enum bfad_port_pvb_type
{
91 BFAD_PORT_PHYS_BASE
= 0,
92 BFAD_PORT_PHYS_VPORT
= 1,
93 BFAD_PORT_VF_BASE
= 2,
94 BFAD_PORT_VF_VPORT
= 3,
101 struct list_head list_entry
;
103 struct bfa_fcs_port_s
*fcs_port
;
108 enum bfad_port_pvb_type pvb_type
;
109 struct bfad_im_port_s
*im_port
; /* IM specific data */
110 struct bfad_tm_port_s
*tm_port
; /* TM specific data */
111 struct bfad_ipfc_port_s
*ipfc_port
; /* IPFC specific data */
115 * VPORT data structure
117 struct bfad_vport_s
{
118 struct bfad_port_s drv_port
;
119 struct bfa_fcs_vport_s fcs_vport
;
120 struct completion
*comp_del
;
128 struct bfad_port_s base_port
; /* base port for vf */
132 struct bfad_cfg_param_s
{
133 u32 rport_del_timeout
;
140 #define BFAD_AEN_MAX_APPS 8
141 struct bfad_aen_file_s
{
149 * BFAD (PCI function) data structure
152 struct list_head list_entry
;
154 struct bfa_fcs_s bfa_fcs
;
155 struct pci_dev
*pcidev
;
156 const char *pci_name
;
157 struct bfa_pcidev_s hal_pcidev
;
158 struct bfa_ioc_pci_attr_s pci_attr
;
159 unsigned long pci_bar0_map
;
160 void __iomem
*pci_bar0_kva
;
161 struct completion comp
;
162 struct completion suspend
;
163 struct completion disable_comp
;
164 bfa_boolean_t disable_active
;
165 struct bfad_port_s pport
; /* physical port of the BFAD */
166 struct bfa_meminfo_s meminfo
;
167 struct bfa_iocfc_cfg_s ioc_cfg
;
168 u32 inst_no
; /* BFAD instance number */
170 spinlock_t bfad_lock
;
171 struct bfad_cfg_param_s cfg_data
;
172 struct bfad_msix_s msix_tab
[MAX_MSIX_ENTRY
];
174 char adapter_name
[BFA_ADAPTER_SYM_NAME_LEN
];
175 char port_name
[BFA_ADAPTER_SYM_NAME_LEN
];
176 struct timer_list hal_tmo
;
177 unsigned long hs_start
;
178 struct bfad_im_s
*im
; /* IM specific data */
179 struct bfad_tm_s
*tm
; /* TM specific data */
180 struct bfad_ipfc_s
*ipfc
; /* IPFC specific data */
181 struct bfa_log_mod_s log_data
;
182 struct bfa_trc_mod_s
*trcmod
;
183 struct bfa_log_mod_s
*logmod
;
184 struct bfa_aen_s
*aen
;
185 struct bfa_aen_s aen_buf
;
186 struct bfad_aen_file_s file_buf
[BFAD_AEN_MAX_APPS
];
187 struct list_head file_q
;
188 struct list_head file_free_q
;
189 struct bfa_plog_s plog_buf
;
191 bfa_boolean_t ipfc_enabled
;
192 struct fc_host_statistics link_stats
;
194 struct kobject
*bfa_kobj
;
195 struct kobject
*ioc_kobj
;
196 struct kobject
*pport_kobj
;
197 struct kobject
*lport_kobj
;
201 * RPORT data structure
203 struct bfad_rport_s
{
204 struct bfa_fcs_rport_s fcs_rport
;
207 struct bfad_buf_info
{
214 struct bfad_port_s
*port
;
215 struct bfa_rport_s
*bfa_rport
;
216 bfa_status_t req_status
;
227 struct bfa_sge_s
*req_sge
;
228 struct bfa_sge_s
*rsp_sge
;
229 fcxp_send_cb_t send_cbfn
;
232 struct completion comp
;
235 struct bfad_hal_comp
{
237 struct completion comp
;
241 * Macro to obtain the immediate lower power
242 * of two for the integer.
244 #define nextLowerInt(x) \
248 for (j = 1; j < (sizeof(int) * 8); j <<= 1) \
249 (*x) = (*x) | (*x) >> j; \
255 bfa_status_t
bfad_vport_create(struct bfad_s
*bfad
, u16 vf_id
,
256 struct bfa_port_cfg_s
*port_cfg
);
257 bfa_status_t
bfad_vf_create(struct bfad_s
*bfad
, u16 vf_id
,
258 struct bfa_port_cfg_s
*port_cfg
);
259 bfa_status_t
bfad_cfg_pport(struct bfad_s
*bfad
, enum bfa_port_role role
);
260 bfa_status_t
bfad_drv_init(struct bfad_s
*bfad
);
261 void bfad_drv_start(struct bfad_s
*bfad
);
262 void bfad_uncfg_pport(struct bfad_s
*bfad
);
263 void bfad_drv_stop(struct bfad_s
*bfad
);
264 void bfad_remove_intr(struct bfad_s
*bfad
);
265 void bfad_hal_mem_release(struct bfad_s
*bfad
);
266 void bfad_hcb_comp(void *arg
, bfa_status_t status
);
268 int bfad_setup_intr(struct bfad_s
*bfad
);
269 void bfad_remove_intr(struct bfad_s
*bfad
);
271 void bfad_update_hal_cfg(struct bfa_iocfc_cfg_s
*bfa_cfg
);
272 bfa_status_t
bfad_hal_mem_alloc(struct bfad_s
*bfad
);
273 void bfad_bfa_tmo(unsigned long data
);
274 void bfad_init_timer(struct bfad_s
*bfad
);
275 int bfad_pci_init(struct pci_dev
*pdev
, struct bfad_s
*bfad
);
276 void bfad_pci_uninit(struct pci_dev
*pdev
, struct bfad_s
*bfad
);
277 void bfad_fcs_port_cfg(struct bfad_s
*bfad
);
278 void bfad_drv_uninit(struct bfad_s
*bfad
);
279 void bfad_drv_log_level_set(struct bfad_s
*bfad
);
280 bfa_status_t
bfad_fc4_module_init(void);
281 void bfad_fc4_module_exit(void);
283 void bfad_pci_remove(struct pci_dev
*pdev
);
284 int bfad_pci_probe(struct pci_dev
*pdev
, const struct pci_device_id
*pid
);
285 void bfad_os_rport_online_wait(struct bfad_s
*bfad
);
286 int bfad_os_get_linkup_delay(struct bfad_s
*bfad
);
287 int bfad_install_msix_handler(struct bfad_s
*bfad
);
289 extern struct idr bfad_im_port_index
;
290 extern struct list_head bfad_list
;
291 extern int bfa_lun_queue_depth
;
292 extern int bfad_supported_fc4s
;
293 extern int bfa_linkup_delay
;
295 #endif /* __BFAD_DRV_H__ */