bnx2x, cnic, bnx2i: use new FW/HSI
[linux-2.6.git] / drivers / net / cnic_if.h
1 /* cnic_if.h: Broadcom CNIC core network driver.
2  *
3  * Copyright (c) 2006-2010 Broadcom Corporation
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation.
8  *
9  */
10
11
12 #ifndef CNIC_IF_H
13 #define CNIC_IF_H
14
15 #define CNIC_MODULE_VERSION     "2.1.3"
16 #define CNIC_MODULE_RELDATE     "June 24, 2010"
17
18 #define CNIC_ULP_RDMA           0
19 #define CNIC_ULP_ISCSI          1
20 #define CNIC_ULP_L4             2
21 #define MAX_CNIC_ULP_TYPE_EXT   2
22 #define MAX_CNIC_ULP_TYPE       3
23
24 struct kwqe {
25         u32 kwqe_op_flag;
26
27 #define KWQE_OPCODE_MASK        0x00ff0000
28 #define KWQE_OPCODE_SHIFT       16
29 #define KWQE_FLAGS_LAYER_SHIFT  28
30 #define KWQE_OPCODE(x)          ((x & KWQE_OPCODE_MASK) >> KWQE_OPCODE_SHIFT)
31
32         u32 kwqe_info0;
33         u32 kwqe_info1;
34         u32 kwqe_info2;
35         u32 kwqe_info3;
36         u32 kwqe_info4;
37         u32 kwqe_info5;
38         u32 kwqe_info6;
39 };
40
41 struct kwqe_16 {
42         u32 kwqe_info0;
43         u32 kwqe_info1;
44         u32 kwqe_info2;
45         u32 kwqe_info3;
46 };
47
48 struct kcqe {
49         u32 kcqe_info0;
50         u32 kcqe_info1;
51         u32 kcqe_info2;
52         u32 kcqe_info3;
53         u32 kcqe_info4;
54         u32 kcqe_info5;
55         u32 kcqe_info6;
56         u32 kcqe_op_flag;
57                 #define KCQE_RAMROD_COMPLETION          (0x1<<27) /* Everest */
58                 #define KCQE_FLAGS_LAYER_MASK           (0x7<<28)
59                 #define KCQE_FLAGS_LAYER_MASK_MISC      (0<<28)
60                 #define KCQE_FLAGS_LAYER_MASK_L2        (2<<28)
61                 #define KCQE_FLAGS_LAYER_MASK_L3        (3<<28)
62                 #define KCQE_FLAGS_LAYER_MASK_L4        (4<<28)
63                 #define KCQE_FLAGS_LAYER_MASK_L5_RDMA   (5<<28)
64                 #define KCQE_FLAGS_LAYER_MASK_L5_ISCSI  (6<<28)
65                 #define KCQE_FLAGS_NEXT                 (1<<31)
66                 #define KCQE_FLAGS_OPCODE_MASK          (0xff<<16)
67                 #define KCQE_FLAGS_OPCODE_SHIFT         (16)
68                 #define KCQE_OPCODE(op)                 \
69                 (((op) & KCQE_FLAGS_OPCODE_MASK) >> KCQE_FLAGS_OPCODE_SHIFT)
70 };
71
72 #define MAX_CNIC_CTL_DATA       64
73 #define MAX_DRV_CTL_DATA        64
74
75 #define CNIC_CTL_STOP_CMD               1
76 #define CNIC_CTL_START_CMD              2
77 #define CNIC_CTL_COMPLETION_CMD         3
78
79 #define DRV_CTL_IO_WR_CMD               0x101
80 #define DRV_CTL_IO_RD_CMD               0x102
81 #define DRV_CTL_CTX_WR_CMD              0x103
82 #define DRV_CTL_CTXTBL_WR_CMD           0x104
83 #define DRV_CTL_COMPLETION_CMD          0x105
84 #define DRV_CTL_START_L2_CMD            0x106
85 #define DRV_CTL_STOP_L2_CMD             0x107
86
87 struct cnic_ctl_completion {
88         u32     cid;
89 };
90
91 struct drv_ctl_completion {
92         u32     comp_count;
93 };
94
95 struct cnic_ctl_info {
96         int     cmd;
97         union {
98                 struct cnic_ctl_completion comp;
99                 char bytes[MAX_CNIC_CTL_DATA];
100         } data;
101 };
102
103 struct drv_ctl_io {
104         u32             cid_addr;
105         u32             offset;
106         u32             data;
107         dma_addr_t      dma_addr;
108 };
109
110 struct drv_ctl_l2_ring {
111         u32             client_id;
112         u32             cid;
113 };
114
115 struct drv_ctl_info {
116         int     cmd;
117         union {
118                 struct drv_ctl_completion comp;
119                 struct drv_ctl_io io;
120                 struct drv_ctl_l2_ring ring;
121                 char bytes[MAX_DRV_CTL_DATA];
122         } data;
123 };
124
125 struct cnic_ops {
126         struct module   *cnic_owner;
127         /* Calls to these functions are protected by RCU.  When
128          * unregistering, we wait for any calls to complete before
129          * continuing.
130          */
131         int             (*cnic_handler)(void *, void *);
132         int             (*cnic_ctl)(void *, struct cnic_ctl_info *);
133 };
134
135 #define MAX_CNIC_VEC    8
136
137 struct cnic_irq {
138         unsigned int    vector;
139         void            *status_blk;
140         u32             status_blk_num;
141         u32             status_blk_num2;
142         u32             irq_flags;
143 #define CNIC_IRQ_FL_MSIX                0x00000001
144 };
145
146 struct cnic_eth_dev {
147         struct module   *drv_owner;
148         u32             drv_state;
149 #define CNIC_DRV_STATE_REGD             0x00000001
150 #define CNIC_DRV_STATE_USING_MSIX       0x00000002
151         u32             chip_id;
152         u32             max_kwqe_pending;
153         struct pci_dev  *pdev;
154         void __iomem    *io_base;
155         void __iomem    *io_base2;
156         void            *iro_arr;
157
158         u32             ctx_tbl_offset;
159         u32             ctx_tbl_len;
160         int             ctx_blk_size;
161         u32             starting_cid;
162         u32             max_iscsi_conn;
163         u32             max_fcoe_conn;
164         u32             max_rdma_conn;
165         u32             reserved0[2];
166
167         int             num_irq;
168         struct cnic_irq irq_arr[MAX_CNIC_VEC];
169         int             (*drv_register_cnic)(struct net_device *,
170                                              struct cnic_ops *, void *);
171         int             (*drv_unregister_cnic)(struct net_device *);
172         int             (*drv_submit_kwqes_32)(struct net_device *,
173                                                struct kwqe *[], u32);
174         int             (*drv_submit_kwqes_16)(struct net_device *,
175                                                struct kwqe_16 *[], u32);
176         int             (*drv_ctl)(struct net_device *, struct drv_ctl_info *);
177         unsigned long   reserved1[2];
178 };
179
180 struct cnic_sockaddr {
181         union {
182                 struct sockaddr_in      v4;
183                 struct sockaddr_in6     v6;
184         } local;
185         union {
186                 struct sockaddr_in      v4;
187                 struct sockaddr_in6     v6;
188         } remote;
189 };
190
191 struct cnic_sock {
192         struct cnic_dev *dev;
193         void    *context;
194         u32     src_ip[4];
195         u32     dst_ip[4];
196         u16     src_port;
197         u16     dst_port;
198         u16     vlan_id;
199         unsigned char old_ha[6];
200         unsigned char ha[6];
201         u32     mtu;
202         u32     cid;
203         u32     l5_cid;
204         u32     pg_cid;
205         int     ulp_type;
206
207         u32     ka_timeout;
208         u32     ka_interval;
209         u8      ka_max_probe_count;
210         u8      tos;
211         u8      ttl;
212         u8      snd_seq_scale;
213         u32     rcv_buf;
214         u32     snd_buf;
215         u32     seed;
216
217         unsigned long   tcp_flags;
218 #define SK_TCP_NO_DELAY_ACK     0x1
219 #define SK_TCP_KEEP_ALIVE       0x2
220 #define SK_TCP_NAGLE            0x4
221 #define SK_TCP_TIMESTAMP        0x8
222 #define SK_TCP_SACK             0x10
223 #define SK_TCP_SEG_SCALING      0x20
224         unsigned long   flags;
225 #define SK_F_INUSE              0
226 #define SK_F_OFFLD_COMPLETE     1
227 #define SK_F_OFFLD_SCHED        2
228 #define SK_F_PG_OFFLD_COMPLETE  3
229 #define SK_F_CONNECT_START      4
230 #define SK_F_IPV6               5
231 #define SK_F_CLOSING            7
232
233         atomic_t ref_count;
234         u32 state;
235         struct kwqe kwqe1;
236         struct kwqe kwqe2;
237         struct kwqe kwqe3;
238 };
239
240 struct cnic_dev {
241         struct net_device       *netdev;
242         struct pci_dev          *pcidev;
243         void __iomem            *regview;
244         struct list_head        list;
245
246         int (*register_device)(struct cnic_dev *dev, int ulp_type,
247                                void *ulp_ctx);
248         int (*unregister_device)(struct cnic_dev *dev, int ulp_type);
249         int (*submit_kwqes)(struct cnic_dev *dev, struct kwqe *wqes[],
250                                 u32 num_wqes);
251         int (*submit_kwqes_16)(struct cnic_dev *dev, struct kwqe_16 *wqes[],
252                                 u32 num_wqes);
253
254         int (*cm_create)(struct cnic_dev *, int, u32, u32, struct cnic_sock **,
255                          void *);
256         int (*cm_destroy)(struct cnic_sock *);
257         int (*cm_connect)(struct cnic_sock *, struct cnic_sockaddr *);
258         int (*cm_abort)(struct cnic_sock *);
259         int (*cm_close)(struct cnic_sock *);
260         struct cnic_dev *(*cm_select_dev)(struct sockaddr_in *, int ulp_type);
261         int (*iscsi_nl_msg_recv)(struct cnic_dev *dev, u32 msg_type,
262                                  char *data, u16 data_size);
263         unsigned long   flags;
264 #define CNIC_F_CNIC_UP          1
265 #define CNIC_F_BNX2_CLASS       3
266 #define CNIC_F_BNX2X_CLASS      4
267         atomic_t        ref_count;
268         u8              mac_addr[6];
269
270         int             max_iscsi_conn;
271         int             max_fcoe_conn;
272         int             max_rdma_conn;
273
274         void            *cnic_priv;
275 };
276
277 #define CNIC_WR(dev, off, val)          writel(val, dev->regview + off)
278 #define CNIC_WR16(dev, off, val)        writew(val, dev->regview + off)
279 #define CNIC_WR8(dev, off, val)         writeb(val, dev->regview + off)
280 #define CNIC_RD(dev, off)               readl(dev->regview + off)
281 #define CNIC_RD16(dev, off)             readw(dev->regview + off)
282
283 struct cnic_ulp_ops {
284         /* Calls to these functions are protected by RCU.  When
285          * unregistering, we wait for any calls to complete before
286          * continuing.
287          */
288
289         void (*cnic_init)(struct cnic_dev *dev);
290         void (*cnic_exit)(struct cnic_dev *dev);
291         void (*cnic_start)(void *ulp_ctx);
292         void (*cnic_stop)(void *ulp_ctx);
293         void (*indicate_kcqes)(void *ulp_ctx, struct kcqe *cqes[],
294                                 u32 num_cqes);
295         void (*indicate_netevent)(void *ulp_ctx, unsigned long event);
296         void (*cm_connect_complete)(struct cnic_sock *);
297         void (*cm_close_complete)(struct cnic_sock *);
298         void (*cm_abort_complete)(struct cnic_sock *);
299         void (*cm_remote_close)(struct cnic_sock *);
300         void (*cm_remote_abort)(struct cnic_sock *);
301         void (*iscsi_nl_send_msg)(struct cnic_dev *dev, u32 msg_type,
302                                   char *data, u16 data_size);
303         struct module *owner;
304         atomic_t ref_count;
305 };
306
307 extern int cnic_register_driver(int ulp_type, struct cnic_ulp_ops *ulp_ops);
308
309 extern int cnic_unregister_driver(int ulp_type);
310
311 extern struct cnic_eth_dev *bnx2_cnic_probe(struct net_device *dev);
312 extern struct cnic_eth_dev *bnx2x_cnic_probe(struct net_device *dev);
313
314 #endif