vxge-defs.h revision 331722
1/*-
2 * Copyright(c) 2002-2011 Exar Corp.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification are permitted provided the following conditions are met:
7 *
8 *    1. Redistributions of source code must retain the above copyright notice,
9 *       this list of conditions and the following disclaimer.
10 *
11 *    2. Redistributions in binary form must reproduce the above copyright
12 *       notice, this list of conditions and the following disclaimer in the
13 *       documentation and/or other materials provided with the distribution.
14 *
15 *    3. Neither the name of the Exar Corporation nor the names of its
16 *       contributors may be used to endorse or promote products derived from
17 *       this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31/*$FreeBSD: stable/11/sys/dev/vxge/include/vxge-defs.h 331722 2018-03-29 02:50:57Z eadler $*/
32
33#ifndef	VXGE_DEFS_H
34#define	VXGE_DEFS_H
35
36#define	VXGE_PCI_VENDOR_ID			0x17D5
37#define	VXGE_PCI_DEVICE_ID_TITAN_1		0x5833
38#define	VXGE_PCI_REVISION_TITAN_1		1
39#define	VXGE_PCI_DEVICE_ID_TITAN_1A		0x5833
40#define	VXGE_PCI_REVISION_TITAN_1A		2
41#define	VXGE_PCI_DEVICE_ID_TITAN_2		0x5834
42#define	VXGE_PCI_REVISION_TITAN_2		1
43
44#define	VXGE_MIN_FW_MAJOR_VERSION		1
45#define	VXGE_MIN_FW_MINOR_VERSION		8
46#define	VXGE_MIN_FW_BUILD_NUMBER		1
47
48#define	VXGE_DRIVER_VENDOR			"Exar Corp."
49#define	VXGE_CHIP_FAMILY			"X3100"
50#define	VXGE_SUPPORTED_MEDIA_0			"Fiber"
51
52#define	VXGE_DRIVER_NAME			\
53	"Neterion X3100 10GbE PCIe Server Adapter Driver"
54/*
55 * mBIT(loc) - set bit at offset
56 */
57#define	mBIT(loc)		(0x8000000000000000ULL >> (loc))
58
59/*
60 * vBIT(val, loc, sz) - set bits at offset
61 */
62#define	vBIT(val, loc, sz)	(((u64)(val)) << (64-(loc)-(sz)))
63#define	vBIT32(val, loc, sz)	(((u32)(val)) << (32-(loc)-(sz)))
64
65/*
66 * bVALx(bits, loc) - Get the value of x bits at location
67 */
68#define	bVAL1(bits, loc)  ((((u64)bits) >> (64-(loc+1))) & 0x1)
69#define	bVAL2(bits, loc)  ((((u64)bits) >> (64-(loc+2))) & 0x3)
70#define	bVAL3(bits, loc)  ((((u64)bits) >> (64-(loc+3))) & 0x7)
71#define	bVAL4(bits, loc)  ((((u64)bits) >> (64-(loc+4))) & 0xF)
72#define	bVAL5(bits, loc)  ((((u64)bits) >> (64-(loc+5))) & 0x1F)
73#define	bVAL6(bits, loc)  ((((u64)bits) >> (64-(loc+6))) & 0x3F)
74#define	bVAL7(bits, loc)  ((((u64)bits) >> (64-(loc+7))) & 0x7F)
75#define	bVAL8(bits, loc)  ((((u64)bits) >> (64-(loc+8))) & 0xFF)
76#define	bVAL9(bits, loc)  ((((u64)bits) >> (64-(loc+9))) & 0x1FF)
77#define	bVAL11(bits, loc) ((((u64)bits) >> (64-(loc+11))) & 0x7FF)
78#define	bVAL12(bits, loc) ((((u64)bits) >> (64-(loc+12))) & 0xFFF)
79#define	bVAL14(bits, loc) ((((u64)bits) >> (64-(loc+14))) & 0x3FFF)
80#define	bVAL15(bits, loc) ((((u64)bits) >> (64-(loc+15))) & 0x7FFF)
81#define	bVAL16(bits, loc) ((((u64)bits) >> (64-(loc+16))) & 0xFFFF)
82#define	bVAL17(bits, loc) ((((u64)bits) >> (64-(loc+17))) & 0x1FFFF)
83#define	bVAL18(bits, loc) ((((u64)bits) >> (64-(loc+18))) & 0x3FFFF)
84#define	bVAL20(bits, loc) ((((u64)bits) >> (64-(loc+20))) & 0xFFFFF)
85#define	bVAL22(bits, loc) ((((u64)bits) >> (64-(loc+22))) & 0x3FFFFF)
86#define	bVAL24(bits, loc) ((((u64)bits) >> (64-(loc+24))) & 0xFFFFFF)
87#define	bVAL28(bits, loc) ((((u64)bits) >> (64-(loc+28))) & 0xFFFFFFF)
88#define	bVAL32(bits, loc) ((((u64)bits) >> (64-(loc+32))) & 0xFFFFFFFF)
89#define	bVAL36(bits, loc) ((((u64)bits) >> (64-(loc+36))) & 0xFFFFFFFFFULL)
90#define	bVAL40(bits, loc) ((((u64)bits) >> (64-(loc+40))) & 0xFFFFFFFFFFULL)
91#define	bVAL44(bits, loc) ((((u64)bits) >> (64-(loc+44))) & 0xFFFFFFFFFFFULL)
92#define	bVAL48(bits, loc) ((((u64)bits) >> (64-(loc+48))) & 0xFFFFFFFFFFFFULL)
93#define	bVAL52(bits, loc) ((((u64)bits) >> (64-(loc+52))) & 0xFFFFFFFFFFFFFULL)
94#define	bVAL56(bits, loc) ((((u64)bits) >> (64-(loc+56))) & 0xFFFFFFFFFFFFFFULL)
95#define	bVAL60(bits, loc)   \
96		((((u64)bits) >> (64-(loc+60))) & 0xFFFFFFFFFFFFFFFULL)
97#define	bVAL61(bits, loc)   \
98		((((u64)bits) >> (64-(loc+61))) & 0x1FFFFFFFFFFFFFFFULL)
99
100#define	VXGE_HAL_VPATH_BMAP_START	47
101#define	VXGE_HAL_VPATH_BMAP_END		63
102
103#define	VXGE_HAL_ALL_FOXES		0xFFFFFFFFFFFFFFFFULL
104
105#define	VXGE_HAL_INTR_MASK_ALL		0xFFFFFFFFFFFFFFFFULL
106
107#define	VXGE_HAL_MAX_VIRTUAL_PATHS	17
108
109#define	VXGE_HAL_MAX_FUNCTIONS		8
110
111#define	VXGE_HAL_MAX_ITABLE_ENTRIES	256
112
113#define	VXGE_HAL_MAX_RSS_KEY_SIZE	40
114
115#define	VXGE_HAL_MAC_MAX_WIRE_PORTS	2
116
117#define	VXGE_HAL_MAC_SWITCH_PORT	2
118
119#define	VXGE_HAL_MAC_MAX_AGGR_PORTS	2
120
121#define	VXGE_HAL_MAC_MAX_PORTS		3
122
123#define	VXGE_HAL_INTR_ALARM		(1<<4)
124
125#define	VXGE_HAL_INTR_TX		(1<<(3-VXGE_HAL_VPATH_INTR_TX))
126
127#define	VXGE_HAL_INTR_RX		(1<<(3-VXGE_HAL_VPATH_INTR_RX))
128
129#define	VXGE_HAL_INTR_EINTA		(1<<(3-VXGE_HAL_VPATH_INTR_EINTA))
130
131#define	VXGE_HAL_INTR_BMAP		(1<<(3-VXGE_HAL_VPATH_INTR_BMAP))
132
133#define	VXGE_HAL_PCI_CONFIG_SPACE_SIZE	VXGE_OS_PCI_CONFIG_SIZE
134
135#define	VXGE_HAL_DEFAULT_32		0xffffffff
136
137#define	VXGE_HAL_DEFAULT_64		0xffffffffffffffff
138
139#define	VXGE_HAL_DUMP_BUF_SIZE		0x10000
140
141#define	VXGE_HAL_VPD_BUFFER_SIZE	128
142
143#define	VXGE_HAL_VPD_LENGTH		80
144
145/* Check whether an address is multicast. */
146#define	VXGE_HAL_IS_NULL(Address)	(Address == 0x0000000000000000ULL)
147
148/* Check whether an address is multicast. */
149#define	VXGE_HAL_IS_MULTICAST(Address)	(Address & 0x0000010000000000ULL)
150
151/* Check whether an address is broadcast. */
152#define	VXGE_HAL_IS_BROADCAST(Address)	\
153	((Address & 0x0000FFFF00000000ULL) == 0x0000FFFF00000000ULL)
154
155#define	VXGE_HAL_IS_UNICAST(Address)		\
156	(!(VXGE_HAL_IS_NULL(Address) ||		\
157	VXGE_HAL_IS_MULTICAST(Address) ||	\
158	VXGE_HAL_IS_BROADCAST(Address)))
159
160/* frames sizes */
161#define	VXGE_HAL_HEADER_ETHERNET_II_802_3_SIZE		14
162#define	VXGE_HAL_HEADER_802_2_SIZE			3
163#define	VXGE_HAL_HEADER_SNAP_SIZE			5
164#define	VXGE_HAL_HEADER_VLAN_SIZE			4
165#define	VXGE_HAL_MAC_HEADER_MAX_SIZE \
166			(VXGE_HAL_HEADER_ETHERNET_II_802_3_SIZE + \
167			VXGE_HAL_HEADER_802_2_SIZE + \
168			VXGE_HAL_HEADER_SNAP_SIZE)
169
170#define	VXGE_HAL_TCPIP_HEADER_MAX_SIZE			(64 + 64)
171
172/* 32bit alignments */
173
174/* A receive data corruption can occur resulting in either a single-bit or
175double-bit ECC error being flagged in the ASIC if starting offset of a
176buffer in single buffer mode is 0x2 to 0xa. Single bit ECC error will not
177lock up the card but can hide the data corruption while the double-bit ECC
178error will lock up the card. Limiting the starting offset of the buffers to
1790x0, 0x1 or to a value greater than 0xF will workaround this issue.
180VXGE_HAL_HEADER_ETHERNET_II_802_3_ALIGN of 2 causes the starting offset of
181buffer to be 0x2, 0x12 and so on, to have the start of the ip header dword
182aligned. The start of buffer of 0x2 will cause this problem to occur.
183To avoid this problem in all cases, add 0x10 to 0x2, to ensure that the start
184of buffer is outside of the problem causing offsets.
185*/
186
187#define	VXGE_HAL_HEADER_ETHERNET_II_802_3_ALIGN		0x12
188#define	VXGE_HAL_HEADER_802_2_SNAP_ALIGN		2
189#define	VXGE_HAL_HEADER_802_2_ALIGN			3
190#define	VXGE_HAL_HEADER_SNAP_ALIGN			1
191
192#define	VXGE_HAL_MIN_MTU				46
193#define	VXGE_HAL_MAX_MTU				9600
194#define	VXGE_HAL_DEFAULT_MTU				1500
195
196#define	VXGE_HAL_SEGEMENT_OFFLOAD_MAX_SIZE		81920
197
198#if defined(__EXTERN_BEGIN_DECLS)
199#undef __EXTERN_BEGIN_DECLS
200#endif
201
202#if defined(__EXTERN_END_DECLS)
203#undef __EXTERN_END_DECLS
204#endif
205
206#if defined(__cplusplus)
207#define	__EXTERN_BEGIN_DECLS		extern "C" {
208#define	__EXTERN_END_DECLS			}
209#else
210#define	__EXTERN_BEGIN_DECLS
211#define	__EXTERN_END_DECLS
212#endif
213
214__EXTERN_BEGIN_DECLS
215
216/* --------------------------- common stuffs ------------------------------ */
217/*
218 * VXGE_OS_DMA_REQUIRES_SYNC  - should be defined or
219 * NOT defined in the Makefile
220 */
221#define	VXGE_OS_DMA_CACHELINE_ALIGNED		0x1
222
223/*
224 * Either STREAMING or CONSISTENT should be used.
225 * The combination of both or none is invalid
226 */
227#define	VXGE_OS_DMA_STREAMING			0x2
228#define	VXGE_OS_DMA_CONSISTENT			0x4
229#define	VXGE_OS_SPRINTF_STRLEN			64
230
231/* --------------------------- common stuffs ------------------------------ */
232#ifndef	VXGE_OS_LLXFMT
233#define	VXGE_OS_LLXFMT				"%llx"
234#endif
235
236#ifndef	VXGE_OS_LLDFMT
237#define	VXGE_OS_LLDFMT				"%lld"
238#endif
239
240#ifndef	VXGE_OS_STXFMT
241#define	VXGE_OS_STXFMT				"%zx"
242#endif
243
244#ifndef	VXGE_OS_STDFMT
245#define	VXGE_OS_STDFMT				"%zd"
246#endif
247
248
249__EXTERN_END_DECLS
250
251#endif	/* VXGE_DEFS_H */
252