cnic.h revision 8cc0e028eda5bc07a4b816411448065b6892e383
1a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan/* cnic.h: Broadcom CNIC core network driver.
2a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan *
3619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov * Copyright (c) 2006-2011 Broadcom Corporation
4a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan *
5a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan * This program is free software; you can redistribute it and/or modify
6a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan * it under the terms of the GNU General Public License as published by
7a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan * the Free Software Foundation.
8a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan *
9a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan */
10a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
11a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
12a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#ifndef CNIC_H
13a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define CNIC_H
14a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
15523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define HC_INDEX_ISCSI_EQ_CONS			6
16523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
17523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define HC_INDEX_FCOE_EQ_CONS			3
18523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
19523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define HC_SP_INDEX_ETH_ISCSI_CQ_CONS		5
20523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define HC_SP_INDEX_ETH_ISCSI_RX_CQ_CONS	1
21523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
22a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KWQ_PAGE_CNT	4
23a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KCQ_PAGE_CNT	16
24a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
25a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KWQ_CID 		24
26a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KCQ_CID 		25
27a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
28a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan/*
29a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan *	krnlq_context definition
30a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan */
31a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_FLAGS	0x00000000
32a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_SIZE	0x00000000
33a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_TYPE	0x00000000
34a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ					(0xf<<0)
35a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_256					(0<<0)
36a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_512					(1<<0)
37a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_1K					(2<<0)
38a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_2K					(3<<0)
39a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_4K					(4<<0)
40a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_8K					(5<<0)
41a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_16K					(6<<0)
42a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_32K					(7<<0)
43a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_64K					(8<<0)
44a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_128K					(9<<0)
45a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_256K					(10<<0)
46a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_512K					(11<<0)
47a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_1M					(12<<0)
48a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_PG_SZ_2M					(13<<0)
49a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_FLAGS_QE_SELF_SEQ					(1<<15)
50a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_SIZE_TYPE_SIZE	((((0x28 + 0x1f) & ~0x1f) / 0x20) << 16)
51a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_TYPE_TYPE						(0xf<<28)
52a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_TYPE_TYPE_EMPTY					(0<<28)
53a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KRNLQ_TYPE_TYPE_KRNLQ					(6<<28)
54a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
55a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_HOST_QIDX		0x00000004
56a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_HOST_FW_QIDX		0x00000008
57a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_NX_QE_SELF_SEQ 	0x0000000c
58a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_QE_SELF_SEQ_MAX	0x0000000c
59a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_NX_QE_HADDR_HI 	0x00000010
60a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_NX_QE_HADDR_LO 	0x00000014
61a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_PGTBL_PGIDX		0x00000018
62a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_NX_PG_QIDX 		0x00000018
63a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_PGTBL_NPAGES		0x0000001c
64a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_QIDX_INCR		0x0000001c
65a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_PGTBL_HADDR_HI 	0x00000020
66a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define L5_KRNLQ_PGTBL_HADDR_LO 	0x00000024
67a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
68a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define BNX2_PG_CTX_MAP			0x1a0034
69a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define BNX2_ISCSI_CTX_MAP		0x1a0074
70a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
71a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define MAX_COMPLETED_KCQE	64
72a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
73a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define MAX_CNIC_L5_CONTEXT	256
74a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
75a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define MAX_CM_SK_TBL_SZ	MAX_CNIC_L5_CONTEXT
76a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
77a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define MAX_ISCSI_TBL_SZ	256
78a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
79a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define CNIC_LOCAL_PORT_MIN	60000
809b09336072796378dac46df63bcd43291b24fd12Michael Chan#define CNIC_LOCAL_PORT_MAX	61024
81a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define CNIC_LOCAL_PORT_RANGE	(CNIC_LOCAL_PORT_MAX - CNIC_LOCAL_PORT_MIN)
82a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
83a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KWQE_CNT (BCM_PAGE_SIZE / sizeof(struct kwqe))
84a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KCQE_CNT (BCM_PAGE_SIZE / sizeof(struct kcqe))
85a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define MAX_KWQE_CNT (KWQE_CNT - 1)
86a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define MAX_KCQE_CNT (KCQE_CNT - 1)
87a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
88a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define MAX_KWQ_IDX	((KWQ_PAGE_CNT * KWQE_CNT) - 1)
89a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define MAX_KCQ_IDX	((KCQ_PAGE_CNT * KCQE_CNT) - 1)
90a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
91a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KWQ_PG(x) (((x) & ~MAX_KWQE_CNT) >> (BCM_PAGE_BITS - 5))
92a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KWQ_IDX(x) ((x) & MAX_KWQE_CNT)
93a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
94a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KCQ_PG(x) (((x) & ~MAX_KCQE_CNT) >> (BCM_PAGE_BITS - 5))
95a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define KCQ_IDX(x) ((x) & MAX_KCQE_CNT)
96a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
97a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define BNX2X_NEXT_KCQE(x) (((x) & (MAX_KCQE_CNT - 1)) ==		\
98a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan		(MAX_KCQE_CNT - 1)) ?					\
99a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan		(x) + 2 : (x) + 1
100a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
101a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define BNX2X_KWQ_DATA_PG(cp, x) ((x) / (cp)->kwq_16_data_pp)
102a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define BNX2X_KWQ_DATA_IDX(cp, x) ((x) % (cp)->kwq_16_data_pp)
103a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define BNX2X_KWQ_DATA(cp, x)						\
104a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	&(cp)->kwq_16_data[BNX2X_KWQ_DATA_PG(cp, x)][BNX2X_KWQ_DATA_IDX(cp, x)]
105a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
106a9736c086cc6221659e498f0855152c32dbc1396Eddie Wai#define DEF_IPID_START		0x8000
107a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
108a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_KA_TIMEOUT		10000
109a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_KA_INTERVAL		300000
110a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_KA_MAX_PROBE_COUNT	3
111a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_TOS			0
112a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_TTL			0xfe
113a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_SND_SEQ_SCALE	0
114a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_RCV_BUF		0xffff
115a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_SND_BUF		0xffff
116a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_SEED		0
117a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_MAX_RT_TIME		500
118a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_MAX_DA_COUNT	2
119a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_SWS_TIMER		1000
120a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define DEF_MAX_CWND		0xffff
121a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
122a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chanstruct cnic_ctx {
123a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32		cid;
124a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void		*ctx;
125a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	dma_addr_t	mapping;
126a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan};
127a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
128a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define BNX2_MAX_CID		0x2000
129a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
130a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chanstruct cnic_dma {
131a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int		num_pages;
132a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void		**pg_arr;
133a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	dma_addr_t	*pg_map_arr;
134a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int		pgtbl_size;
135a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32		*pgtbl;
136a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	dma_addr_t	pgtbl_map;
137a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan};
138a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
139a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chanstruct cnic_id_tbl {
140a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	spinlock_t	lock;
141a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32		start;
142a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32		max;
143a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32		next;
144a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	unsigned long	*table;
145a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan};
146a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
147a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define CNIC_KWQ16_DATA_SIZE	128
148a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
149a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chanstruct kwqe_16_data {
150a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u8	data[CNIC_KWQ16_DATA_SIZE];
151a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan};
152a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
153a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chanstruct cnic_iscsi {
154a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_dma		task_array_info;
155a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_dma		r2tq_info;
156a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_dma		hq_info;
157a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan};
158a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
159a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chanstruct cnic_context {
160a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32			cid;
161a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct kwqe_16_data	*kwqe_data;
162a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	dma_addr_t		kwqe_data_mapping;
163a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	wait_queue_head_t	waitq;
164a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			wait_cond;
165a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	unsigned long		timestamp;
1666e0dda0c467d6c66d64c146170ea35399ec34c15Michael Chan	unsigned long		ctx_flags;
1676e0dda0c467d6c66d64c146170ea35399ec34c15Michael Chan#define	CTX_FL_OFFLD_START	0
168fdf24086f4752aee5dfb40143c736250df017820Michael Chan#define	CTX_FL_DELETE_WAIT	1
169619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define	CTX_FL_CID_ERROR	2
170a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u8			ulp_proto_id;
171a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	union {
172a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan		struct cnic_iscsi	*iscsi;
173a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	} proto;
174a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan};
175a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
176e6c2889478f04b30e5a71d753734644c579472faMichael Chanstruct kcq_info {
177e6c2889478f04b30e5a71d753734644c579472faMichael Chan	struct cnic_dma	dma;
178e6c2889478f04b30e5a71d753734644c579472faMichael Chan	struct kcqe	**kcq;
179e6c2889478f04b30e5a71d753734644c579472faMichael Chan
180e6c2889478f04b30e5a71d753734644c579472faMichael Chan	u16		*hw_prod_idx_ptr;
181e6c2889478f04b30e5a71d753734644c579472faMichael Chan	u16		sw_prod_idx;
182e6c2889478f04b30e5a71d753734644c579472faMichael Chan	u16		*status_idx_ptr;
183e6c2889478f04b30e5a71d753734644c579472faMichael Chan	u32		io_addr;
18459e5137357559ec60b2e72bdc3d5a7e22c47212bMichael Chan
18559e5137357559ec60b2e72bdc3d5a7e22c47212bMichael Chan	u16		(*next_idx)(u16);
18659e5137357559ec60b2e72bdc3d5a7e22c47212bMichael Chan	u16		(*hw_idx)(u16);
187e6c2889478f04b30e5a71d753734644c579472faMichael Chan};
188e6c2889478f04b30e5a71d753734644c579472faMichael Chan
189523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct iro {
190523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u32 base;
191523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u16 m1;
192523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u16 m2;
193523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u16 m3;
194523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u16 size;
195523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov};
196523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
197cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chanstruct cnic_uio_dev {
198cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	struct uio_info		cnic_uinfo;
199cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	u32			uio_dev;
200cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan
201cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	int			l2_ring_size;
202cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	void			*l2_ring;
203cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	dma_addr_t		l2_ring_map;
204cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan
205cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	int			l2_buf_size;
206cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	void			*l2_buf;
207cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	dma_addr_t		l2_buf_map;
208cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan
209cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	struct cnic_dev		*dev;
210cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	struct pci_dev		*pdev;
211cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	struct list_head	list;
212cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan};
213cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan
214a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chanstruct cnic_local {
215a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
216a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	spinlock_t cnic_ulp_lock;
217a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void *ulp_handle[MAX_CNIC_ULP_TYPE];
218a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	unsigned long ulp_flags[MAX_CNIC_ULP_TYPE];
219a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define ULP_F_INIT	0
220a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define ULP_F_START	1
221681dbd710779e8b8d5bae926f6b11f30df70638bMichael Chan#define ULP_F_CALL_PENDING	2
22213707f9e5e46342b7b16c58be91ad93a476c3ffdEric Dumazet	struct cnic_ulp_ops __rcu *ulp_ops[MAX_CNIC_ULP_TYPE];
223a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
2241f1332a3cb7ac73e3bcff6ea42ff965c90a29d12Michael Chan	unsigned long cnic_local_flags;
2251f1332a3cb7ac73e3bcff6ea42ff965c90a29d12Michael Chan#define	CNIC_LCL_FL_KWQ_INIT		0x0
22648f753d2ba94a4081400fa8d26bdbfbbf12b10deMichael Chan#define	CNIC_LCL_FL_L2_WAIT		0x1
227541a78103f097cd5120e55aaba56d099a64f153cMichael Chan#define	CNIC_LCL_FL_RINGS_INITED	0x2
228fab0dc89f0d98459c6ce7fa27422949ac15837faDmitry Kravkov#define	CNIC_LCL_FL_STOP_ISCSI		0x4
229a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
230a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_dev *dev;
231a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
232a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_eth_dev *ethdev;
233a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
234cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	struct cnic_uio_dev *udev;
235a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
236cd801536c236e287f1d3eeee428abf9ffd523edeMichael Chan	int		l2_rx_ring_size;
237a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int		l2_single_buf_size;
238a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
239a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u16		*rx_cons_ptr;
240a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u16		*tx_cons_ptr;
241a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u16		rx_cons;
242a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u16		tx_cons;
243a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
244619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	const struct iro	*iro_arr;
245523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define IRO (((struct cnic_local *) dev->cnic_priv)->iro_arr)
246523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
247a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_dma		kwq_info;
248a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct kwqe		**kwq;
249a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
250a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_dma		kwq_16_data_info;
251a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
252a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u16		max_kwq_idx;
253a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
254a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u16		kwq_prod_idx;
255a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32		kwq_io_addr;
256a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
257a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u16		*kwq_con_idx_ptr;
258a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u16		kwq_con_idx;
259a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
260e6c2889478f04b30e5a71d753734644c579472faMichael Chan	struct kcq_info	kcq1;
261e21ba414eed8a233eadb79bb6b158ac7ceb35025Michael Chan	struct kcq_info	kcq2;
262a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
263a4dde3abbf87a495154a876576e1ab34b17b5ef1Michael Chan	union {
264a4dde3abbf87a495154a876576e1ab34b17b5ef1Michael Chan		void				*gen;
265a4dde3abbf87a495154a876576e1ab34b17b5ef1Michael Chan		struct status_block_msix	*bnx2;
266523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov		struct host_hc_status_block_e1x	*bnx2x_e1x;
267523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov		/* index values - which counter to update */
268523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov		#define SM_RX_ID		0
269523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov		#define SM_TX_ID		1
270a4dde3abbf87a495154a876576e1ab34b17b5ef1Michael Chan	} status_blk;
271a4dde3abbf87a495154a876576e1ab34b17b5ef1Michael Chan
272523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	struct host_sp_status_block	*bnx2x_def_status_blk;
273a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
274a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32				status_blk_num;
275523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u32				bnx2x_igu_sb_id;
276a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32				int_num;
277a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32				last_status_idx;
278a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct tasklet_struct		cnic_irq_task;
279a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
280a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct kcqe		*completed_kcq[MAX_COMPLETED_KCQE];
281a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
282a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_sock	*csk_tbl;
283a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_id_tbl	csk_port_tbl;
284a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
285a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_dma		gbl_buf_info;
286a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
287a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_iscsi	*iscsi_tbl;
288a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_context	*ctx_tbl;
289a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_id_tbl	cid_tbl;
290a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	atomic_t		iscsi_conn;
291520efdf44f0140eef9018518fdae5edfc86f3b6cMichael Chan	u32			iscsi_start_cid;
292520efdf44f0140eef9018518fdae5edfc86f3b6cMichael Chan
293e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan	u32			fcoe_init_cid;
294e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan	u32			fcoe_start_cid;
295e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan	struct cnic_id_tbl	fcoe_cid_tbl;
296e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan
297520efdf44f0140eef9018518fdae5edfc86f3b6cMichael Chan	u32			max_cid_space;
298a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
299a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	/* per connection parameters */
300a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			num_iscsi_tasks;
301a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			num_ccells;
302a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			task_array_size;
303a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			r2tq_size;
304a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			hq_size;
305a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			num_cqs;
306a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
307fdf24086f4752aee5dfb40143c736250df017820Michael Chan	struct delayed_work	delete_task;
308fdf24086f4752aee5dfb40143c736250df017820Michael Chan
309a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_ctx		*ctx_arr;
310a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			ctx_blks;
311a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			ctx_blk_size;
312e251306556d30c9c678feca60204acaaa0784cbdMichael Chan	unsigned long		ctx_align;
313a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			cids_per_blk;
314a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
315a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32			chip_id;
316a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			func;
3171420398db4d5e236583d3ab392637df255bd5c6bMichael Chan	u32			pfid;
318619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	u8			port_mode;
319619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define CHIP_4_PORT_MODE	0
320619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define CHIP_2_PORT_MODE	1
321619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define CHIP_PORT_MODE_NONE	2
322619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
323a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32			shmem_base;
324a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
325a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	struct cnic_ops		*cnic_ops;
326a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			(*start_hw)(struct cnic_dev *);
327a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void			(*stop_hw)(struct cnic_dev *);
328a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void			(*setup_pgtbl)(struct cnic_dev *,
329a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan					       struct cnic_dma *);
330a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			(*alloc_resc)(struct cnic_dev *);
331a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void			(*free_resc)(struct cnic_dev *);
332a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	int			(*start_cm)(struct cnic_dev *);
333a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void			(*stop_cm)(struct cnic_dev *);
334a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void			(*enable_int)(struct cnic_dev *);
335a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void			(*disable_int_sync)(struct cnic_dev *);
336a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void			(*ack_int)(struct cnic_dev *);
3378cc0e028eda5bc07a4b816411448065b6892e383Michael Chan	void			(*arm_int)(struct cnic_dev *, u32 index);
338a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	void			(*close_conn)(struct cnic_sock *, u32 opcode);
339a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan};
340a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
341a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chanstruct bnx2x_bd_chain_next {
342a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32	addr_lo;
343a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u32	addr_hi;
344a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan	u8	reserved[8];
345a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan};
346a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
347e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define ISCSI_DEFAULT_MAX_OUTSTANDING_R2T 	(1)
348e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
349a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define ISCSI_RAMROD_CMD_ID_UPDATE_CONN		(ISCSI_KCQE_OPCODE_UPDATE_CONN)
350a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define ISCSI_RAMROD_CMD_ID_INIT		(ISCSI_KCQE_OPCODE_INIT)
351a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
352a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define CDU_REGION_NUMBER_XCM_AG 2
353a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#define CDU_REGION_NUMBER_UCM_AG 4
354a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
355e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define CDU_VALID_DATA(_cid, _region, _type)	\
356e251306556d30c9c678feca60204acaaa0784cbdMichael Chan	(((_cid) << 8) | (((_region)&0xf)<<4) | (((_type)&0xf)))
357e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
358e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define CDU_CRC8(_cid, _region, _type)	\
359e251306556d30c9c678feca60204acaaa0784cbdMichael Chan	(calc_crc8(CDU_VALID_DATA(_cid, _region, _type), 0xff))
360e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
361e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define CDU_RSRVD_VALUE_TYPE_A(_cid, _region, _type)	\
362e251306556d30c9c678feca60204acaaa0784cbdMichael Chan	(0x80 | ((CDU_CRC8(_cid, _region, _type)) & 0x7f))
363e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
364e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_CONTEXT_MEM_SIZE		1024
365e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_FCOE_CID			16
366e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
367e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_ISCSI_START_CID		18
368e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_ISCSI_NUM_CONNECTIONS	128
369e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_ISCSI_TASK_CONTEXT_SIZE	128
370e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_ISCSI_MAX_PENDING_R2TS	4
371e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_ISCSI_R2TQE_SIZE		8
372e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_ISCSI_HQ_BD_SIZE		64
373e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_ISCSI_GLB_BUF_SIZE	64
374e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_ISCSI_PBL_NOT_CACHED	0xff
375e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_ISCSI_PDU_HEADER_NOT_CACHED	0xff
376ceb7e1c7c5ab86ca686d523f99ca473a1f3a984dMichael Chan
377dc219a2e4812eecdc5438d2a0e2434b03d3efbf2Michael Chan#define BNX2X_FCOE_NUM_CONNECTIONS	1024
378e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan
379e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan#define BNX2X_FCOE_L5_CID_BASE		MAX_ISCSI_TBL_SZ
380e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan
381ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_NUM_57710		0x164e
382e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_CHIP_NUM_57711		0x164f
383e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_CHIP_NUM_57711E		0x1650
384ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_NUM_57712		0x1662
385ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_NUM_57712E		0x1663
386ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_NUM_57713		0x1651
387ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_NUM_57713E		0x1652
388f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan#define BNX2X_CHIP_NUM_57800		0x168a
389f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan#define BNX2X_CHIP_NUM_57810		0x168e
390f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan#define BNX2X_CHIP_NUM_57840		0x168d
391ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan
392e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_CHIP_NUM(x)		(x >> 16)
393ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_IS_57710(x)		\
394ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan	(BNX2X_CHIP_NUM(x) == BNX2X_CHIP_NUM_57710)
395e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_CHIP_IS_57711(x)		\
396e251306556d30c9c678feca60204acaaa0784cbdMichael Chan	(BNX2X_CHIP_NUM(x) == BNX2X_CHIP_NUM_57711)
397e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_CHIP_IS_57711E(x)		\
398e251306556d30c9c678feca60204acaaa0784cbdMichael Chan	(BNX2X_CHIP_NUM(x) == BNX2X_CHIP_NUM_57711E)
399e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_CHIP_IS_E1H(x)		\
400e251306556d30c9c678feca60204acaaa0784cbdMichael Chan	(BNX2X_CHIP_IS_57711(x) || BNX2X_CHIP_IS_57711E(x))
401ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_IS_57712(x)		\
402ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan	(BNX2X_CHIP_NUM(x) == BNX2X_CHIP_NUM_57712)
403ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_IS_57712E(x)		\
404ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan	(BNX2X_CHIP_NUM(x) == BNX2X_CHIP_NUM_57712E)
405ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_IS_57713(x)		\
406ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan	(BNX2X_CHIP_NUM(x) == BNX2X_CHIP_NUM_57713)
407ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_IS_57713E(x)		\
408ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan	(BNX2X_CHIP_NUM(x) == BNX2X_CHIP_NUM_57713E)
409f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan#define BNX2X_CHIP_IS_57800(x)		\
410f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan	(BNX2X_CHIP_NUM(x) == BNX2X_CHIP_NUM_57800)
411f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan#define BNX2X_CHIP_IS_57810(x)		\
412f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan	(BNX2X_CHIP_NUM(x) == BNX2X_CHIP_NUM_57810)
413f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan#define BNX2X_CHIP_IS_57840(x)		\
414f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan	(BNX2X_CHIP_NUM(x) == BNX2X_CHIP_NUM_57840)
415ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan#define BNX2X_CHIP_IS_E2(x)		\
416ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan	(BNX2X_CHIP_IS_57712(x) || BNX2X_CHIP_IS_57712E(x) || \
417ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan	 BNX2X_CHIP_IS_57713(x) || BNX2X_CHIP_IS_57713E(x))
418f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan#define BNX2X_CHIP_IS_E3(x)			\
419f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan	(BNX2X_CHIP_IS_57800(x) || BNX2X_CHIP_IS_57810(x) || \
420f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan	 BNX2X_CHIP_IS_57840(x))
421f4b5ad26bcb983c493e131ff34b2fa60100c82e5Michael Chan#define BNX2X_CHIP_IS_E2_PLUS(x) (BNX2X_CHIP_IS_E2(x) || BNX2X_CHIP_IS_E3(x))
422ee87a82a28cddbb9267a294172ecb3d3d3bdaa6cMichael Chan
423e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define IS_E1H_OFFSET       		BNX2X_CHIP_IS_E1H(cp->chip_id)
424e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
425e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_RX_DESC_CNT		(BCM_PAGE_SIZE / sizeof(struct eth_rx_bd))
426e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_MAX_RX_DESC_CNT		(BNX2X_RX_DESC_CNT - 2)
427e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_RCQ_DESC_CNT		(BCM_PAGE_SIZE / sizeof(union eth_rx_cqe))
428e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_MAX_RCQ_DESC_CNT		(BNX2X_RCQ_DESC_CNT - 1)
429e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
43048f753d2ba94a4081400fa8d26bdbfbbf12b10deMichael Chan#define BNX2X_NEXT_RCQE(x) (((x) & BNX2X_MAX_RCQ_DESC_CNT) ==		\
43148f753d2ba94a4081400fa8d26bdbfbbf12b10deMichael Chan		(BNX2X_MAX_RCQ_DESC_CNT - 1)) ?				\
43248f753d2ba94a4081400fa8d26bdbfbbf12b10deMichael Chan		((x) + 2) : ((x) + 1)
43348f753d2ba94a4081400fa8d26bdbfbbf12b10deMichael Chan
434523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define BNX2X_DEF_SB_ID			HC_SP_SB_ID
435e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
436523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define BNX2X_SHMEM_MF_BLK_OFFSET	0x7e4
437e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
438e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define BNX2X_SHMEM_ADDR(base, field)	(base + \
439e251306556d30c9c678feca60204acaaa0784cbdMichael Chan					 offsetof(struct shmem_region, field))
440e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
441523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define BNX2X_SHMEM2_ADDR(base, field)	(base + \
442523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov					 offsetof(struct shmem2_region, field))
443523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
444523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define BNX2X_SHMEM2_HAS(base, field)				\
445523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov		((base) &&					\
446523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov		 (CNIC_RD(dev, BNX2X_SHMEM2_ADDR(base, size)) >	\
447523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov		  offsetof(struct shmem2_region, field)))
448523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
4494aacb7afb6afd78efe26427e74fa56a5fc72fad3Michael Chan#define BNX2X_MF_CFG_ADDR(base, field)				\
4504aacb7afb6afd78efe26427e74fa56a5fc72fad3Michael Chan			((base) + offsetof(struct mf_cfg, field))
4514aacb7afb6afd78efe26427e74fa56a5fc72fad3Michael Chan
452e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan#ifndef ETH_MAX_RX_CLIENTS_E2
453e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan#define ETH_MAX_RX_CLIENTS_E2 		ETH_MAX_RX_CLIENTS_E1H
454e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan#endif
455e1928c86c4829703b800c81cc9edc939b5634e6fMichael Chan
456523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define CNIC_PORT(cp)			((cp)->pfid & 1)
457e251306556d30c9c678feca60204acaaa0784cbdMichael Chan#define CNIC_FUNC(cp)			((cp)->func)
458619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define CNIC_PATH(cp)			(!BNX2X_CHIP_IS_E2_PLUS(cp->chip_id) ? \
459619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov					 0 : (CNIC_FUNC(cp) & 1))
460523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define CNIC_E1HVN(cp)			((cp)->pfid >> 1)
461e251306556d30c9c678feca60204acaaa0784cbdMichael Chan
462523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define BNX2X_HW_CID(cp, x)		((CNIC_PORT(cp) << 23) | \
463ceb7e1c7c5ab86ca686d523f99ca473a1f3a984dMichael Chan					 (CNIC_E1HVN(cp) << 17) | (x))
464ceb7e1c7c5ab86ca686d523f99ca473a1f3a984dMichael Chan
465ceb7e1c7c5ab86ca686d523f99ca473a1f3a984dMichael Chan#define BNX2X_SW_CID(x)			(x & 0x1ffff)
466ceb7e1c7c5ab86ca686d523f99ca473a1f3a984dMichael Chan
467523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define BNX2X_CL_QZONE_ID(cp, cli)					\
468619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		(BNX2X_CHIP_IS_E2_PLUS(cp->chip_id) ? cli :		\
469619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		 cli + (CNIC_PORT(cp) * ETH_MAX_RX_CLIENTS_E1H))
470619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
471619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#ifndef MAX_STAT_COUNTER_ID
472619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define MAX_STAT_COUNTER_ID						\
473619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	(BNX2X_CHIP_IS_E1H((cp)->chip_id) ? MAX_STAT_COUNTER_ID_E1H :	\
474619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	 ((BNX2X_CHIP_IS_E2_PLUS((cp)->chip_id)) ? MAX_STAT_COUNTER_ID_E2 :\
475619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	  MAX_STAT_COUNTER_ID_E1))
476619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#endif
477523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
478dcc7e3a6a2a2464cf96dee329f7c58fe8c230d97Michael Chan#define CNIC_RAMROD_TMO			(HZ / 4)
479dcc7e3a6a2a2464cf96dee329f7c58fe8c230d97Michael Chan
480a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan#endif
481a463696039f7097ce87c21db3cf5c16cdcb3850dMichael Chan
482