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.
20 #include <bfa_os_inc.h>
21 #include <cs/bfa_debug.h>
23 #include <cs/bfa_trc.h>
24 #include <cs/bfa_log.h>
25 #include <cs/bfa_plog.h>
26 #include <defs/bfa_defs_status.h>
27 #include <defs/bfa_defs_ioc.h>
28 #include <defs/bfa_defs_iocfc.h>
29 #include <aen/bfa_aen.h>
33 #include <bfa_intr_priv.h>
38 * PCI devices supported by the current BFA
45 extern char bfa_version
[];
48 * BFA Power Mgmt Commands
58 * BFA memory resources
61 BFA_MEM_TYPE_KVA
= 1, /*! Kernel Virtual Memory *(non-dma-able) */
62 BFA_MEM_TYPE_DMA
= 2, /*! DMA-able memory */
63 BFA_MEM_TYPE_MAX
= BFA_MEM_TYPE_DMA
,
66 struct bfa_mem_elem_s
{
67 enum bfa_mem_type mem_type
; /* see enum bfa_mem_type */
68 u32 mem_len
; /* Total Length in Bytes */
69 u8
*kva
; /* kernel virtual address */
70 u64 dma
; /* dma address if DMA memory */
71 u8
*kva_curp
; /* kva allocation cursor */
72 u64 dma_curp
; /* dma allocation cursor */
75 struct bfa_meminfo_s
{
76 struct bfa_mem_elem_s meminfo
[BFA_MEM_TYPE_MAX
];
78 #define bfa_meminfo_kva(_m) \
79 (_m)->meminfo[BFA_MEM_TYPE_KVA - 1].kva_curp
80 #define bfa_meminfo_dma_virt(_m) \
81 (_m)->meminfo[BFA_MEM_TYPE_DMA - 1].kva_curp
82 #define bfa_meminfo_dma_phys(_m) \
83 (_m)->meminfo[BFA_MEM_TYPE_DMA - 1].dma_curp
86 * Generic Scatter Gather Element used by driver
93 #define bfa_sge_to_be(__sge) do { \
94 ((u32 *)(__sge))[0] = bfa_os_htonl(((u32 *)(__sge))[0]); \
95 ((u32 *)(__sge))[1] = bfa_os_htonl(((u32 *)(__sge))[1]); \
96 ((u32 *)(__sge))[2] = bfa_os_htonl(((u32 *)(__sge))[2]); \
101 * bfa stats interfaces
103 #define bfa_stats(_mod, _stats) (_mod)->stats._stats ++
105 #define bfa_ioc_get_stats(__bfa, __ioc_stats) \
106 bfa_ioc_fetch_stats(&(__bfa)->ioc, __ioc_stats)
107 #define bfa_ioc_clear_stats(__bfa) \
108 bfa_ioc_clr_stats(&(__bfa)->ioc)
113 void bfa_get_pciids(struct bfa_pciid_s
**pciids
, int *npciids
);
114 void bfa_cfg_get_default(struct bfa_iocfc_cfg_s
*cfg
);
115 void bfa_cfg_get_min(struct bfa_iocfc_cfg_s
*cfg
);
116 void bfa_cfg_get_meminfo(struct bfa_iocfc_cfg_s
*cfg
,
117 struct bfa_meminfo_s
*meminfo
);
118 void bfa_attach(struct bfa_s
*bfa
, void *bfad
, struct bfa_iocfc_cfg_s
*cfg
,
119 struct bfa_meminfo_s
*meminfo
,
120 struct bfa_pcidev_s
*pcidev
);
121 void bfa_init_trc(struct bfa_s
*bfa
, struct bfa_trc_mod_s
*trcmod
);
122 void bfa_init_log(struct bfa_s
*bfa
, struct bfa_log_mod_s
*logmod
);
123 void bfa_init_aen(struct bfa_s
*bfa
, struct bfa_aen_s
*aen
);
124 void bfa_init_plog(struct bfa_s
*bfa
, struct bfa_plog_s
*plog
);
125 void bfa_detach(struct bfa_s
*bfa
);
126 void bfa_init(struct bfa_s
*bfa
);
127 void bfa_start(struct bfa_s
*bfa
);
128 void bfa_stop(struct bfa_s
*bfa
);
129 void bfa_attach_fcs(struct bfa_s
*bfa
);
130 void bfa_cb_init(void *bfad
, bfa_status_t status
);
131 void bfa_cb_stop(void *bfad
, bfa_status_t status
);
132 void bfa_cb_updateq(void *bfad
, bfa_status_t status
);
134 bfa_boolean_t
bfa_intx(struct bfa_s
*bfa
);
135 void bfa_isr_enable(struct bfa_s
*bfa
);
136 void bfa_isr_disable(struct bfa_s
*bfa
);
137 void bfa_msix_getvecs(struct bfa_s
*bfa
, u32
*msix_vecs_bmap
,
138 u32
*num_vecs
, u32
*max_vec_bit
);
139 #define bfa_msix(__bfa, __vec) (__bfa)->msix.handler[__vec](__bfa, __vec)
141 void bfa_comp_deq(struct bfa_s
*bfa
, struct list_head
*comp_q
);
142 void bfa_comp_process(struct bfa_s
*bfa
, struct list_head
*comp_q
);
143 void bfa_comp_free(struct bfa_s
*bfa
, struct list_head
*comp_q
);
145 typedef void (*bfa_cb_ioc_t
) (void *cbarg
, enum bfa_status status
);
146 void bfa_iocfc_get_attr(struct bfa_s
*bfa
, struct bfa_iocfc_attr_s
*attr
);
147 bfa_status_t
bfa_iocfc_get_stats(struct bfa_s
*bfa
,
148 struct bfa_iocfc_stats_s
*stats
,
149 bfa_cb_ioc_t cbfn
, void *cbarg
);
150 bfa_status_t
bfa_iocfc_clear_stats(struct bfa_s
*bfa
,
151 bfa_cb_ioc_t cbfn
, void *cbarg
);
152 void bfa_get_attr(struct bfa_s
*bfa
, struct bfa_ioc_attr_s
*ioc_attr
);
154 void bfa_adapter_get_attr(struct bfa_s
*bfa
,
155 struct bfa_adapter_attr_s
*ad_attr
);
156 u64
bfa_adapter_get_id(struct bfa_s
*bfa
);
158 bfa_status_t
bfa_iocfc_israttr_set(struct bfa_s
*bfa
,
159 struct bfa_iocfc_intr_attr_s
*attr
);
161 void bfa_iocfc_enable(struct bfa_s
*bfa
);
162 void bfa_iocfc_disable(struct bfa_s
*bfa
);
163 void bfa_ioc_auto_recover(bfa_boolean_t auto_recover
);
164 void bfa_cb_ioc_disable(void *bfad
);
165 void bfa_timer_tick(struct bfa_s
*bfa
);
166 #define bfa_timer_start(_bfa, _timer, _timercb, _arg, _timeout) \
167 bfa_timer_begin(&(_bfa)->timer_mod, _timer, _timercb, _arg, _timeout)
170 * BFA debug API functions
172 bfa_status_t
bfa_debug_fwtrc(struct bfa_s
*bfa
, void *trcdata
, int *trclen
);
173 bfa_status_t
bfa_debug_fwsave(struct bfa_s
*bfa
, void *trcdata
, int *trclen
);
175 #include "bfa_priv.h"
177 #endif /* __BFA_H__ */