[SCSI] bfa: Brocade BFA FC SCSI driver
[safe/jmp/linux-2.6] / drivers / scsi / bfa / include / bfa.h
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__ */