Commit | Line | Data |
---|---|---|
7725ccfd JH |
1 | /* |
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | |
3 | * All rights reserved | |
4 | * www.brocade.com | |
5 | * | |
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | |
7 | * | |
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 | |
11 | * | |
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. | |
16 | */ | |
17 | #ifndef __BFA_H__ | |
18 | #define __BFA_H__ | |
19 | ||
20 | #include <bfa_os_inc.h> | |
21 | #include <cs/bfa_debug.h> | |
22 | #include <cs/bfa_q.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> | |
30 | #include <bfi/bfi.h> | |
31 | ||
32 | struct bfa_s; | |
33 | #include <bfa_intr_priv.h> | |
34 | ||
35 | struct bfa_pcidev_s; | |
36 | ||
37 | /** | |
38 | * PCI devices supported by the current BFA | |
39 | */ | |
40 | struct bfa_pciid_s { | |
41 | u16 device_id; | |
42 | u16 vendor_id; | |
43 | }; | |
44 | ||
45 | extern char bfa_version[]; | |
46 | ||
47 | /** | |
48 | * BFA Power Mgmt Commands | |
49 | */ | |
50 | enum bfa_pm_cmd { | |
51 | BFA_PM_CTL_D0 = 0, | |
52 | BFA_PM_CTL_D1 = 1, | |
53 | BFA_PM_CTL_D2 = 2, | |
54 | BFA_PM_CTL_D3 = 3, | |
55 | }; | |
56 | ||
57 | /** | |
58 | * BFA memory resources | |
59 | */ | |
60 | enum bfa_mem_type { | |
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, | |
64 | }; | |
65 | ||
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 */ | |
73 | }; | |
74 | ||
75 | struct bfa_meminfo_s { | |
76 | struct bfa_mem_elem_s meminfo[BFA_MEM_TYPE_MAX]; | |
77 | }; | |
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 | |
84 | ||
85 | /** | |
86 | * Generic Scatter Gather Element used by driver | |
87 | */ | |
88 | struct bfa_sge_s { | |
89 | u32 sg_len; | |
90 | void *sg_addr; | |
91 | }; | |
92 | ||
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]); \ | |
97 | } while (0) | |
98 | ||
99 | ||
100 | /* | |
101 | * bfa stats interfaces | |
102 | */ | |
103 | #define bfa_stats(_mod, _stats) (_mod)->stats._stats ++ | |
104 | ||
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) | |
109 | ||
110 | /* | |
111 | * bfa API functions | |
112 | */ | |
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); | |
133 | ||
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) | |
140 | ||
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); | |
144 | ||
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); | |
153 | ||
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); | |
157 | ||
158 | bfa_status_t bfa_iocfc_israttr_set(struct bfa_s *bfa, | |
159 | struct bfa_iocfc_intr_attr_s *attr); | |
160 | ||
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) | |
168 | ||
169 | /* | |
170 | * BFA debug API functions | |
171 | */ | |
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); | |
174 | ||
175 | #include "bfa_priv.h" | |
176 | ||
177 | #endif /* __BFA_H__ */ |