diff options
Diffstat (limited to 'drivers/scsi/bfa/bfa_ioc.h')
-rw-r--r-- | drivers/scsi/bfa/bfa_ioc.h | 248 |
1 files changed, 196 insertions, 52 deletions
diff --git a/drivers/scsi/bfa/bfa_ioc.h b/drivers/scsi/bfa/bfa_ioc.h index cae05b251c99..288c5801aace 100644 --- a/drivers/scsi/bfa/bfa_ioc.h +++ b/drivers/scsi/bfa/bfa_ioc.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | 2 | * Copyright (c) 2005-2010 Brocade Communications Systems, Inc. |
3 | * All rights reserved | 3 | * All rights reserved |
4 | * www.brocade.com | 4 | * www.brocade.com |
5 | * | 5 | * |
@@ -18,18 +18,74 @@ | |||
18 | #ifndef __BFA_IOC_H__ | 18 | #ifndef __BFA_IOC_H__ |
19 | #define __BFA_IOC_H__ | 19 | #define __BFA_IOC_H__ |
20 | 20 | ||
21 | #include <cs/bfa_sm.h> | 21 | #include "bfa_os_inc.h" |
22 | #include <bfi/bfi.h> | 22 | #include "bfa_cs.h" |
23 | #include <bfi/bfi_ioc.h> | 23 | #include "bfi.h" |
24 | #include <bfi/bfi_boot.h> | 24 | |
25 | #include <bfa_timer.h> | 25 | /** |
26 | * BFA timer declarations | ||
27 | */ | ||
28 | typedef void (*bfa_timer_cbfn_t)(void *); | ||
29 | |||
30 | /** | ||
31 | * BFA timer data structure | ||
32 | */ | ||
33 | struct bfa_timer_s { | ||
34 | struct list_head qe; | ||
35 | bfa_timer_cbfn_t timercb; | ||
36 | void *arg; | ||
37 | int timeout; /**< in millisecs. */ | ||
38 | }; | ||
39 | |||
40 | /** | ||
41 | * Timer module structure | ||
42 | */ | ||
43 | struct bfa_timer_mod_s { | ||
44 | struct list_head timer_q; | ||
45 | }; | ||
46 | |||
47 | #define BFA_TIMER_FREQ 200 /**< specified in millisecs */ | ||
48 | |||
49 | void bfa_timer_beat(struct bfa_timer_mod_s *mod); | ||
50 | void bfa_timer_init(struct bfa_timer_mod_s *mod); | ||
51 | void bfa_timer_begin(struct bfa_timer_mod_s *mod, struct bfa_timer_s *timer, | ||
52 | bfa_timer_cbfn_t timercb, void *arg, | ||
53 | unsigned int timeout); | ||
54 | void bfa_timer_stop(struct bfa_timer_s *timer); | ||
55 | |||
56 | /** | ||
57 | * Generic Scatter Gather Element used by driver | ||
58 | */ | ||
59 | struct bfa_sge_s { | ||
60 | u32 sg_len; | ||
61 | void *sg_addr; | ||
62 | }; | ||
63 | |||
64 | #define bfa_sge_word_swap(__sge) do { \ | ||
65 | ((u32 *)(__sge))[0] = bfa_os_swap32(((u32 *)(__sge))[0]); \ | ||
66 | ((u32 *)(__sge))[1] = bfa_os_swap32(((u32 *)(__sge))[1]); \ | ||
67 | ((u32 *)(__sge))[2] = bfa_os_swap32(((u32 *)(__sge))[2]); \ | ||
68 | } while (0) | ||
69 | |||
70 | #define bfa_swap_words(_x) ( \ | ||
71 | ((_x) << 32) | ((_x) >> 32)) | ||
72 | |||
73 | #ifdef __BIGENDIAN | ||
74 | #define bfa_sge_to_be(_x) | ||
75 | #define bfa_sge_to_le(_x) bfa_sge_word_swap(_x) | ||
76 | #define bfa_sgaddr_le(_x) bfa_swap_words(_x) | ||
77 | #else | ||
78 | #define bfa_sge_to_be(_x) bfa_sge_word_swap(_x) | ||
79 | #define bfa_sge_to_le(_x) | ||
80 | #define bfa_sgaddr_le(_x) (_x) | ||
81 | #endif | ||
26 | 82 | ||
27 | /** | 83 | /** |
28 | * PCI device information required by IOC | 84 | * PCI device information required by IOC |
29 | */ | 85 | */ |
30 | struct bfa_pcidev_s { | 86 | struct bfa_pcidev_s { |
31 | int pci_slot; | 87 | int pci_slot; |
32 | u8 pci_func; | 88 | u8 pci_func; |
33 | u16 device_id; | 89 | u16 device_id; |
34 | bfa_os_addr_t pci_bar_kva; | 90 | bfa_os_addr_t pci_bar_kva; |
35 | }; | 91 | }; |
@@ -39,13 +95,18 @@ struct bfa_pcidev_s { | |||
39 | * Address | 95 | * Address |
40 | */ | 96 | */ |
41 | struct bfa_dma_s { | 97 | struct bfa_dma_s { |
42 | void *kva; /*! Kernel virtual address */ | 98 | void *kva; /* ! Kernel virtual address */ |
43 | u64 pa; /*! Physical address */ | 99 | u64 pa; /* ! Physical address */ |
44 | }; | 100 | }; |
45 | 101 | ||
46 | #define BFA_DMA_ALIGN_SZ 256 | 102 | #define BFA_DMA_ALIGN_SZ 256 |
47 | #define BFA_ROUNDUP(_l, _s) (((_l) + ((_s) - 1)) & ~((_s) - 1)) | 103 | #define BFA_ROUNDUP(_l, _s) (((_l) + ((_s) - 1)) & ~((_s) - 1)) |
48 | 104 | ||
105 | /** | ||
106 | * smem size for Crossbow and Catapult | ||
107 | */ | ||
108 | #define BFI_SMEM_CB_SIZE 0x200000U /* ! 2MB for crossbow */ | ||
109 | #define BFI_SMEM_CT_SIZE 0x280000U /* ! 2.5MB for catapult */ | ||
49 | 110 | ||
50 | 111 | ||
51 | #define bfa_dma_addr_set(dma_addr, pa) \ | 112 | #define bfa_dma_addr_set(dma_addr, pa) \ |
@@ -101,7 +162,7 @@ struct bfa_ioc_regs_s { | |||
101 | * IOC Mailbox structures | 162 | * IOC Mailbox structures |
102 | */ | 163 | */ |
103 | struct bfa_mbox_cmd_s { | 164 | struct bfa_mbox_cmd_s { |
104 | struct list_head qe; | 165 | struct list_head qe; |
105 | u32 msg[BFI_IOC_MSGSZ]; | 166 | u32 msg[BFI_IOC_MSGSZ]; |
106 | }; | 167 | }; |
107 | 168 | ||
@@ -110,8 +171,8 @@ struct bfa_mbox_cmd_s { | |||
110 | */ | 171 | */ |
111 | typedef void (*bfa_ioc_mbox_mcfunc_t)(void *cbarg, struct bfi_mbmsg_s *m); | 172 | typedef void (*bfa_ioc_mbox_mcfunc_t)(void *cbarg, struct bfi_mbmsg_s *m); |
112 | struct bfa_ioc_mbox_mod_s { | 173 | struct bfa_ioc_mbox_mod_s { |
113 | struct list_head cmd_q; /* pending mbox queue */ | 174 | struct list_head cmd_q; /* pending mbox queue */ |
114 | int nmclass; /* number of handlers */ | 175 | int nmclass; /* number of handlers */ |
115 | struct { | 176 | struct { |
116 | bfa_ioc_mbox_mcfunc_t cbfn; /* message handlers */ | 177 | bfa_ioc_mbox_mcfunc_t cbfn; /* message handlers */ |
117 | void *cbarg; | 178 | void *cbarg; |
@@ -149,49 +210,54 @@ struct bfa_ioc_hbfail_notify_s { | |||
149 | (__notify)->cbarg = (__cbarg); \ | 210 | (__notify)->cbarg = (__cbarg); \ |
150 | } while (0) | 211 | } while (0) |
151 | 212 | ||
213 | struct bfa_iocpf_s { | ||
214 | bfa_fsm_t fsm; | ||
215 | struct bfa_ioc_s *ioc; | ||
216 | u32 retry_count; | ||
217 | bfa_boolean_t auto_recover; | ||
218 | }; | ||
219 | |||
152 | struct bfa_ioc_s { | 220 | struct bfa_ioc_s { |
153 | bfa_fsm_t fsm; | 221 | bfa_fsm_t fsm; |
154 | struct bfa_s *bfa; | 222 | struct bfa_s *bfa; |
155 | struct bfa_pcidev_s pcidev; | 223 | struct bfa_pcidev_s pcidev; |
156 | struct bfa_timer_mod_s *timer_mod; | 224 | struct bfa_timer_mod_s *timer_mod; |
157 | struct bfa_timer_s ioc_timer; | 225 | struct bfa_timer_s ioc_timer; |
158 | struct bfa_timer_s sem_timer; | 226 | struct bfa_timer_s sem_timer; |
227 | struct bfa_timer_s hb_timer; | ||
159 | u32 hb_count; | 228 | u32 hb_count; |
160 | u32 retry_count; | ||
161 | struct list_head hb_notify_q; | 229 | struct list_head hb_notify_q; |
162 | void *dbg_fwsave; | 230 | void *dbg_fwsave; |
163 | int dbg_fwsave_len; | 231 | int dbg_fwsave_len; |
164 | bfa_boolean_t dbg_fwsave_once; | 232 | bfa_boolean_t dbg_fwsave_once; |
165 | enum bfi_mclass ioc_mc; | 233 | enum bfi_mclass ioc_mc; |
166 | struct bfa_ioc_regs_s ioc_regs; | 234 | struct bfa_ioc_regs_s ioc_regs; |
167 | struct bfa_trc_mod_s *trcmod; | 235 | struct bfa_trc_mod_s *trcmod; |
168 | struct bfa_aen_s *aen; | ||
169 | struct bfa_log_mod_s *logm; | ||
170 | struct bfa_ioc_drv_stats_s stats; | 236 | struct bfa_ioc_drv_stats_s stats; |
171 | bfa_boolean_t auto_recover; | ||
172 | bfa_boolean_t fcmode; | 237 | bfa_boolean_t fcmode; |
173 | bfa_boolean_t ctdev; | 238 | bfa_boolean_t ctdev; |
174 | bfa_boolean_t cna; | 239 | bfa_boolean_t cna; |
175 | bfa_boolean_t pllinit; | 240 | bfa_boolean_t pllinit; |
241 | bfa_boolean_t stats_busy; /* outstanding stats */ | ||
176 | u8 port_id; | 242 | u8 port_id; |
177 | |||
178 | struct bfa_dma_s attr_dma; | 243 | struct bfa_dma_s attr_dma; |
179 | struct bfi_ioc_attr_s *attr; | 244 | struct bfi_ioc_attr_s *attr; |
180 | struct bfa_ioc_cbfn_s *cbfn; | 245 | struct bfa_ioc_cbfn_s *cbfn; |
181 | struct bfa_ioc_mbox_mod_s mbox_mod; | 246 | struct bfa_ioc_mbox_mod_s mbox_mod; |
182 | struct bfa_ioc_hwif_s *ioc_hwif; | 247 | struct bfa_ioc_hwif_s *ioc_hwif; |
248 | struct bfa_iocpf_s iocpf; | ||
183 | }; | 249 | }; |
184 | 250 | ||
185 | struct bfa_ioc_hwif_s { | 251 | struct bfa_ioc_hwif_s { |
186 | bfa_status_t (*ioc_pll_init) (struct bfa_ioc_s *ioc); | 252 | bfa_status_t (*ioc_pll_init) (bfa_os_addr_t rb, bfa_boolean_t fcmode); |
187 | bfa_boolean_t (*ioc_firmware_lock) (struct bfa_ioc_s *ioc); | 253 | bfa_boolean_t (*ioc_firmware_lock) (struct bfa_ioc_s *ioc); |
188 | void (*ioc_firmware_unlock) (struct bfa_ioc_s *ioc); | 254 | void (*ioc_firmware_unlock) (struct bfa_ioc_s *ioc); |
189 | void (*ioc_reg_init) (struct bfa_ioc_s *ioc); | 255 | void (*ioc_reg_init) (struct bfa_ioc_s *ioc); |
190 | void (*ioc_map_port) (struct bfa_ioc_s *ioc); | 256 | void (*ioc_map_port) (struct bfa_ioc_s *ioc); |
191 | void (*ioc_isr_mode_set) (struct bfa_ioc_s *ioc, | 257 | void (*ioc_isr_mode_set) (struct bfa_ioc_s *ioc, |
192 | bfa_boolean_t msix); | 258 | bfa_boolean_t msix); |
193 | void (*ioc_notify_hbfail) (struct bfa_ioc_s *ioc); | 259 | void (*ioc_notify_hbfail) (struct bfa_ioc_s *ioc); |
194 | void (*ioc_ownership_reset) (struct bfa_ioc_s *ioc); | 260 | void (*ioc_ownership_reset) (struct bfa_ioc_s *ioc); |
195 | }; | 261 | }; |
196 | 262 | ||
197 | #define bfa_ioc_pcifn(__ioc) ((__ioc)->pcidev.pci_func) | 263 | #define bfa_ioc_pcifn(__ioc) ((__ioc)->pcidev.pci_func) |
@@ -206,18 +272,19 @@ struct bfa_ioc_hwif_s { | |||
206 | #define bfa_ioc_rx_bbcredit(__ioc) ((__ioc)->attr->rx_bbcredit) | 272 | #define bfa_ioc_rx_bbcredit(__ioc) ((__ioc)->attr->rx_bbcredit) |
207 | #define bfa_ioc_speed_sup(__ioc) \ | 273 | #define bfa_ioc_speed_sup(__ioc) \ |
208 | BFI_ADAPTER_GETP(SPEED, (__ioc)->attr->adapter_prop) | 274 | BFI_ADAPTER_GETP(SPEED, (__ioc)->attr->adapter_prop) |
209 | #define bfa_ioc_get_nports(__ioc) \ | 275 | #define bfa_ioc_get_nports(__ioc) \ |
210 | BFI_ADAPTER_GETP(NPORTS, (__ioc)->attr->adapter_prop) | 276 | BFI_ADAPTER_GETP(NPORTS, (__ioc)->attr->adapter_prop) |
211 | 277 | ||
212 | #define bfa_ioc_stats(_ioc, _stats) ((_ioc)->stats._stats++) | 278 | #define bfa_ioc_stats(_ioc, _stats) ((_ioc)->stats._stats++) |
213 | #define BFA_IOC_FWIMG_MINSZ (16 * 1024) | 279 | #define BFA_IOC_FWIMG_MINSZ (16 * 1024) |
214 | #define BFA_IOC_FWIMG_TYPE(__ioc) \ | 280 | #define BFA_IOC_FWIMG_TYPE(__ioc) \ |
215 | (((__ioc)->ctdev) ? \ | 281 | (((__ioc)->ctdev) ? \ |
216 | (((__ioc)->fcmode) ? BFI_IMAGE_CT_FC : BFI_IMAGE_CT_CNA) : \ | 282 | (((__ioc)->fcmode) ? BFI_IMAGE_CT_FC : BFI_IMAGE_CT_CNA) : \ |
217 | BFI_IMAGE_CB_FC) | 283 | BFI_IMAGE_CB_FC) |
218 | 284 | #define BFA_IOC_FW_SMEM_SIZE(__ioc) \ | |
219 | #define BFA_IOC_FLASH_CHUNK_NO(off) (off / BFI_FLASH_CHUNK_SZ_WORDS) | 285 | (((__ioc)->ctdev) ? BFI_SMEM_CT_SIZE : BFI_SMEM_CB_SIZE) |
220 | #define BFA_IOC_FLASH_OFFSET_IN_CHUNK(off) (off % BFI_FLASH_CHUNK_SZ_WORDS) | 286 | #define BFA_IOC_FLASH_CHUNK_NO(off) (off / BFI_FLASH_CHUNK_SZ_WORDS) |
287 | #define BFA_IOC_FLASH_OFFSET_IN_CHUNK(off) (off % BFI_FLASH_CHUNK_SZ_WORDS) | ||
221 | #define BFA_IOC_FLASH_CHUNK_ADDR(chunkno) (chunkno * BFI_FLASH_CHUNK_SZ_WORDS) | 288 | #define BFA_IOC_FLASH_CHUNK_ADDR(chunkno) (chunkno * BFI_FLASH_CHUNK_SZ_WORDS) |
222 | 289 | ||
223 | /** | 290 | /** |
@@ -235,18 +302,28 @@ void bfa_ioc_mbox_regisr(struct bfa_ioc_s *ioc, enum bfi_mclass mc, | |||
235 | /** | 302 | /** |
236 | * IOC interfaces | 303 | * IOC interfaces |
237 | */ | 304 | */ |
238 | #define bfa_ioc_pll_init(__ioc) ((__ioc)->ioc_hwif->ioc_pll_init(__ioc)) | 305 | |
239 | #define bfa_ioc_isr_mode_set(__ioc, __msix) \ | 306 | #define bfa_ioc_pll_init_asic(__ioc) \ |
307 | ((__ioc)->ioc_hwif->ioc_pll_init((__ioc)->pcidev.pci_bar_kva, \ | ||
308 | (__ioc)->fcmode)) | ||
309 | |||
310 | bfa_status_t bfa_ioc_pll_init(struct bfa_ioc_s *ioc); | ||
311 | bfa_status_t bfa_ioc_cb_pll_init(bfa_os_addr_t rb, bfa_boolean_t fcmode); | ||
312 | bfa_boolean_t bfa_ioc_ct_pll_init_complete(bfa_os_addr_t rb); | ||
313 | bfa_status_t bfa_ioc_ct_pll_init(bfa_os_addr_t rb, bfa_boolean_t fcmode); | ||
314 | |||
315 | #define bfa_ioc_isr_mode_set(__ioc, __msix) \ | ||
240 | ((__ioc)->ioc_hwif->ioc_isr_mode_set(__ioc, __msix)) | 316 | ((__ioc)->ioc_hwif->ioc_isr_mode_set(__ioc, __msix)) |
241 | #define bfa_ioc_ownership_reset(__ioc) \ | 317 | #define bfa_ioc_ownership_reset(__ioc) \ |
242 | ((__ioc)->ioc_hwif->ioc_ownership_reset(__ioc)) | 318 | ((__ioc)->ioc_hwif->ioc_ownership_reset(__ioc)) |
243 | 319 | ||
320 | |||
244 | void bfa_ioc_set_ct_hwif(struct bfa_ioc_s *ioc); | 321 | void bfa_ioc_set_ct_hwif(struct bfa_ioc_s *ioc); |
245 | void bfa_ioc_set_cb_hwif(struct bfa_ioc_s *ioc); | 322 | void bfa_ioc_set_cb_hwif(struct bfa_ioc_s *ioc); |
323 | |||
246 | void bfa_ioc_attach(struct bfa_ioc_s *ioc, void *bfa, | 324 | void bfa_ioc_attach(struct bfa_ioc_s *ioc, void *bfa, |
247 | struct bfa_ioc_cbfn_s *cbfn, struct bfa_timer_mod_s *timer_mod, | 325 | struct bfa_ioc_cbfn_s *cbfn, struct bfa_timer_mod_s *timer_mod); |
248 | struct bfa_trc_mod_s *trcmod, | 326 | void bfa_ioc_auto_recover(bfa_boolean_t auto_recover); |
249 | struct bfa_aen_s *aen, struct bfa_log_mod_s *logm); | ||
250 | void bfa_ioc_detach(struct bfa_ioc_s *ioc); | 327 | void bfa_ioc_detach(struct bfa_ioc_s *ioc); |
251 | void bfa_ioc_pci_init(struct bfa_ioc_s *ioc, struct bfa_pcidev_s *pcidev, | 328 | void bfa_ioc_pci_init(struct bfa_ioc_s *ioc, struct bfa_pcidev_s *pcidev, |
252 | enum bfi_mclass mc); | 329 | enum bfi_mclass mc); |
@@ -256,21 +333,22 @@ void bfa_ioc_enable(struct bfa_ioc_s *ioc); | |||
256 | void bfa_ioc_disable(struct bfa_ioc_s *ioc); | 333 | void bfa_ioc_disable(struct bfa_ioc_s *ioc); |
257 | bfa_boolean_t bfa_ioc_intx_claim(struct bfa_ioc_s *ioc); | 334 | bfa_boolean_t bfa_ioc_intx_claim(struct bfa_ioc_s *ioc); |
258 | 335 | ||
259 | void bfa_ioc_boot(struct bfa_ioc_s *ioc, u32 boot_type, u32 boot_param); | 336 | void bfa_ioc_boot(struct bfa_ioc_s *ioc, u32 boot_type, |
337 | u32 boot_param); | ||
260 | void bfa_ioc_isr(struct bfa_ioc_s *ioc, struct bfi_mbmsg_s *msg); | 338 | void bfa_ioc_isr(struct bfa_ioc_s *ioc, struct bfi_mbmsg_s *msg); |
261 | void bfa_ioc_error_isr(struct bfa_ioc_s *ioc); | 339 | void bfa_ioc_error_isr(struct bfa_ioc_s *ioc); |
262 | bfa_boolean_t bfa_ioc_is_operational(struct bfa_ioc_s *ioc); | 340 | bfa_boolean_t bfa_ioc_is_operational(struct bfa_ioc_s *ioc); |
341 | bfa_boolean_t bfa_ioc_is_initialized(struct bfa_ioc_s *ioc); | ||
263 | bfa_boolean_t bfa_ioc_is_disabled(struct bfa_ioc_s *ioc); | 342 | bfa_boolean_t bfa_ioc_is_disabled(struct bfa_ioc_s *ioc); |
264 | bfa_boolean_t bfa_ioc_fw_mismatch(struct bfa_ioc_s *ioc); | 343 | bfa_boolean_t bfa_ioc_fw_mismatch(struct bfa_ioc_s *ioc); |
265 | bfa_boolean_t bfa_ioc_adapter_is_disabled(struct bfa_ioc_s *ioc); | 344 | bfa_boolean_t bfa_ioc_adapter_is_disabled(struct bfa_ioc_s *ioc); |
266 | void bfa_ioc_cfg_complete(struct bfa_ioc_s *ioc); | ||
267 | enum bfa_ioc_type_e bfa_ioc_get_type(struct bfa_ioc_s *ioc); | 345 | enum bfa_ioc_type_e bfa_ioc_get_type(struct bfa_ioc_s *ioc); |
268 | void bfa_ioc_get_adapter_serial_num(struct bfa_ioc_s *ioc, char *serial_num); | 346 | void bfa_ioc_get_adapter_serial_num(struct bfa_ioc_s *ioc, char *serial_num); |
269 | void bfa_ioc_get_adapter_fw_ver(struct bfa_ioc_s *ioc, char *fw_ver); | 347 | void bfa_ioc_get_adapter_fw_ver(struct bfa_ioc_s *ioc, char *fw_ver); |
270 | void bfa_ioc_get_adapter_optrom_ver(struct bfa_ioc_s *ioc, char *optrom_ver); | 348 | void bfa_ioc_get_adapter_optrom_ver(struct bfa_ioc_s *ioc, char *optrom_ver); |
271 | void bfa_ioc_get_adapter_model(struct bfa_ioc_s *ioc, char *model); | 349 | void bfa_ioc_get_adapter_model(struct bfa_ioc_s *ioc, char *model); |
272 | void bfa_ioc_get_adapter_manufacturer(struct bfa_ioc_s *ioc, | 350 | void bfa_ioc_get_adapter_manufacturer(struct bfa_ioc_s *ioc, |
273 | char *manufacturer); | 351 | char *manufacturer); |
274 | void bfa_ioc_get_pci_chip_rev(struct bfa_ioc_s *ioc, char *chip_rev); | 352 | void bfa_ioc_get_pci_chip_rev(struct bfa_ioc_s *ioc, char *chip_rev); |
275 | enum bfa_ioc_state bfa_ioc_get_state(struct bfa_ioc_s *ioc); | 353 | enum bfa_ioc_state bfa_ioc_get_state(struct bfa_ioc_s *ioc); |
276 | 354 | ||
@@ -284,6 +362,8 @@ bfa_status_t bfa_ioc_debug_fwsave(struct bfa_ioc_s *ioc, void *trcdata, | |||
284 | void bfa_ioc_debug_fwsave_clear(struct bfa_ioc_s *ioc); | 362 | void bfa_ioc_debug_fwsave_clear(struct bfa_ioc_s *ioc); |
285 | bfa_status_t bfa_ioc_debug_fwtrc(struct bfa_ioc_s *ioc, void *trcdata, | 363 | bfa_status_t bfa_ioc_debug_fwtrc(struct bfa_ioc_s *ioc, void *trcdata, |
286 | int *trclen); | 364 | int *trclen); |
365 | bfa_status_t bfa_ioc_debug_fwcore(struct bfa_ioc_s *ioc, void *buf, | ||
366 | u32 *offset, int *buflen); | ||
287 | u32 bfa_ioc_smem_pgnum(struct bfa_ioc_s *ioc, u32 fmaddr); | 367 | u32 bfa_ioc_smem_pgnum(struct bfa_ioc_s *ioc, u32 fmaddr); |
288 | u32 bfa_ioc_smem_pgoff(struct bfa_ioc_s *ioc, u32 fmaddr); | 368 | u32 bfa_ioc_smem_pgoff(struct bfa_ioc_s *ioc, u32 fmaddr); |
289 | void bfa_ioc_set_fcmode(struct bfa_ioc_s *ioc); | 369 | void bfa_ioc_set_fcmode(struct bfa_ioc_s *ioc); |
@@ -297,7 +377,8 @@ void bfa_ioc_fwver_get(struct bfa_ioc_s *ioc, | |||
297 | struct bfi_ioc_image_hdr_s *fwhdr); | 377 | struct bfi_ioc_image_hdr_s *fwhdr); |
298 | bfa_boolean_t bfa_ioc_fwver_cmp(struct bfa_ioc_s *ioc, | 378 | bfa_boolean_t bfa_ioc_fwver_cmp(struct bfa_ioc_s *ioc, |
299 | struct bfi_ioc_image_hdr_s *fwhdr); | 379 | struct bfi_ioc_image_hdr_s *fwhdr); |
300 | void bfa_ioc_aen_post(struct bfa_ioc_s *ioc, enum bfa_ioc_aen_event event); | 380 | bfa_status_t bfa_ioc_fw_stats_get(struct bfa_ioc_s *ioc, void *stats); |
381 | bfa_status_t bfa_ioc_fw_stats_clear(struct bfa_ioc_s *ioc); | ||
301 | 382 | ||
302 | /* | 383 | /* |
303 | * bfa mfg wwn API functions | 384 | * bfa mfg wwn API functions |
@@ -310,5 +391,68 @@ wwn_t bfa_ioc_get_mfg_nwwn(struct bfa_ioc_s *ioc); | |||
310 | mac_t bfa_ioc_get_mfg_mac(struct bfa_ioc_s *ioc); | 391 | mac_t bfa_ioc_get_mfg_mac(struct bfa_ioc_s *ioc); |
311 | u64 bfa_ioc_get_adid(struct bfa_ioc_s *ioc); | 392 | u64 bfa_ioc_get_adid(struct bfa_ioc_s *ioc); |
312 | 393 | ||
313 | #endif /* __BFA_IOC_H__ */ | 394 | /* |
395 | * F/W Image Size & Chunk | ||
396 | */ | ||
397 | extern u32 bfi_image_ct_fc_size; | ||
398 | extern u32 bfi_image_ct_cna_size; | ||
399 | extern u32 bfi_image_cb_fc_size; | ||
400 | extern u32 *bfi_image_ct_fc; | ||
401 | extern u32 *bfi_image_ct_cna; | ||
402 | extern u32 *bfi_image_cb_fc; | ||
403 | |||
404 | static inline u32 * | ||
405 | bfi_image_ct_fc_get_chunk(u32 off) | ||
406 | { return (u32 *)(bfi_image_ct_fc + off); } | ||
407 | |||
408 | static inline u32 * | ||
409 | bfi_image_ct_cna_get_chunk(u32 off) | ||
410 | { return (u32 *)(bfi_image_ct_cna + off); } | ||
314 | 411 | ||
412 | static inline u32 * | ||
413 | bfi_image_cb_fc_get_chunk(u32 off) | ||
414 | { return (u32 *)(bfi_image_cb_fc + off); } | ||
415 | |||
416 | static inline u32* | ||
417 | bfa_cb_image_get_chunk(int type, u32 off) | ||
418 | { | ||
419 | switch (type) { | ||
420 | case BFI_IMAGE_CT_FC: | ||
421 | return bfi_image_ct_fc_get_chunk(off); break; | ||
422 | case BFI_IMAGE_CT_CNA: | ||
423 | return bfi_image_ct_cna_get_chunk(off); break; | ||
424 | case BFI_IMAGE_CB_FC: | ||
425 | return bfi_image_cb_fc_get_chunk(off); break; | ||
426 | default: return 0; | ||
427 | } | ||
428 | } | ||
429 | |||
430 | static inline u32 | ||
431 | bfa_cb_image_get_size(int type) | ||
432 | { | ||
433 | switch (type) { | ||
434 | case BFI_IMAGE_CT_FC: | ||
435 | return bfi_image_ct_fc_size; break; | ||
436 | case BFI_IMAGE_CT_CNA: | ||
437 | return bfi_image_ct_cna_size; break; | ||
438 | case BFI_IMAGE_CB_FC: | ||
439 | return bfi_image_cb_fc_size; break; | ||
440 | default: return 0; | ||
441 | } | ||
442 | } | ||
443 | |||
444 | /** | ||
445 | * CNA TRCMOD declaration | ||
446 | */ | ||
447 | /* | ||
448 | * !!! Only append to the enums defined here to avoid any versioning | ||
449 | * !!! needed between trace utility and driver version | ||
450 | */ | ||
451 | enum { | ||
452 | BFA_TRC_CNA_PORT = 1, | ||
453 | BFA_TRC_CNA_IOC = 2, | ||
454 | BFA_TRC_CNA_IOC_CB = 3, | ||
455 | BFA_TRC_CNA_IOC_CT = 4, | ||
456 | }; | ||
457 | |||
458 | #endif /* __BFA_IOC_H__ */ | ||