1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef	_SYS_NXGE_NXGE_DEFS_H
27 #define	_SYS_NXGE_NXGE_DEFS_H
28 
29 #pragma ident	"%Z%%M%	%I%	%E% SMI"
30 
31 #ifdef	__cplusplus
32 extern "C" {
33 #endif
34 
35 /*
36  * Block Address Assignment (24-bit base address)
37  * (bits [23:20]: block	 [19]: set to 1 for FZC	)
38  */
39 #define	PIO			0x000000
40 #define	FZC_PIO			0x080000
41 #define	RESERVED_1		0x100000
42 #define	FZC_MAC			0x180000
43 #define	RESERVED_2		0x200000
44 #define	FZC_IPP			0x280000
45 #define	FFLP			0x300000
46 #define	FZC_FFLP		0x380000
47 #define	PIO_VADDR		0x400000
48 #define	RESERVED_3		0x480000
49 #define	ZCP			0x500000
50 #define	FZC_ZCP			0x580000
51 #define	DMC			0x600000
52 #define	FZC_DMC			0x680000
53 #define	TXC			0x700000
54 #define	FZC_TXC			0x780000
55 #define	PIO_LDSV		0x800000
56 #define	RESERVED_4		0x880000
57 #define	PIO_LDGIM		0x900000
58 #define	RESERVED_5		0x980000
59 #define	PIO_IMASK0		0xa00000
60 #define	RESERVED_6		0xa80000
61 #define	PIO_IMASK1		0xb00000
62 #define	RESERVED_7_START	0xb80000
63 #define	RESERVED_7_END		0xc00000
64 #define	FZC_PROM		0xc80000
65 #define	RESERVED_8		0xd00000
66 #define	FZC_PIM			0xd80000
67 #define	RESERVED_9_START 	0xe00000
68 #define	RESERVED_9_END 		0xf80000
69 
70 /* PIO		(0x000000) */
71 
72 
73 /* FZC_PIO	(0x080000) */
74 #define	LDGITMRES		(FZC_PIO + 0x00008)	/* timer resolution */
75 #define	SID			(FZC_PIO + 0x10200)	/* 64 LDG, INT data */
76 #define	LDG_NUM			(FZC_PIO + 0x20000)	/* 69 LDs */
77 
78 
79 
80 /* FZC_IPP 	(0x280000) */
81 
82 
83 /* FFLP		(0x300000), Header Parser */
84 
85 /* PIO_VADDR	(0x400000), PIO Virtaul DMA Address */
86 /* ?? how to access DMA via PIO_VADDR? */
87 #define	VADDR			(PIO_VADDR + 0x00000) /* ?? not for driver */
88 
89 
90 /* ZCP		(0x500000), Neptune Only */
91 
92 
93 /* FZC_ZCP	(0x580000), Neptune Only */
94 
95 
96 /* DMC 		(0x600000), register offset (32 DMA channels) */
97 
98 /* Transmit Ring Register Offset (32 Channels) */
99 #define	TX_RNG_CFIG		(DMC + 0x40000)
100 #define	TX_RING_HDH		(DMC + 0x40008)
101 #define	TX_RING_HDL		(DMC + 0x40010)
102 #define	TX_RING_KICK		(DMC + 0x40018)
103 /* Transmit Operations (32 Channels) */
104 #define	TX_ENT_MSK		(DMC + 0x40020)
105 #define	TX_CS			(DMC + 0x40028)
106 #define	TXDMA_MBH		(DMC + 0x40030)
107 #define	TXDMA_MBL		(DMC + 0x40038)
108 #define	TX_DMA_PRE_ST		(DMC + 0x40040)
109 #define	TX_RNG_ERR_LOGH		(DMC + 0x40048)
110 #define	TX_RNG_ERR_LOGL		(DMC + 0x40050)
111 #if OLD
112 #define	SH_TX_RNG_ERR_LOGH	(DMC + 0x40058)
113 #define	SH_TX_RNG_ERR_LOGL	(DMC + 0x40060)
114 #endif
115 
116 /* FZC_DMC RED Initial Random Value register offset (global) */
117 #define	RED_RAN_INIT		(FZC_DMC + 0x00068)
118 
119 #define	RX_ADDR_MD		(FZC_DMC + 0x00070)
120 
121 /* FZC_DMC Ethernet Timeout Countue register offset (global) */
122 #define	EING_TIMEOUT		(FZC_DMC + 0x00078)
123 
124 /* RDC Table */
125 #define	RDC_TBL			(FZC_DMC + 0x10000)	/* 256 * 8 */
126 
127 /* FZC_DMC partitioning support register offset (32 channels) */
128 
129 #define	TX_LOG_PAGE_VLD		(FZC_DMC + 0x40000)
130 #define	TX_LOG_MASK1		(FZC_DMC + 0x40008)
131 #define	TX_LOG_VAL1		(FZC_DMC + 0x40010)
132 #define	TX_LOG_MASK2		(FZC_DMC + 0x40018)
133 #define	TX_LOG_VAL2		(FZC_DMC + 0x40020)
134 #define	TX_LOG_PAGE_RELO1	(FZC_DMC + 0x40028)
135 #define	TX_LOG_PAGE_RELO2	(FZC_DMC + 0x40030)
136 #define	TX_LOG_PAGE_HDL		(FZC_DMC + 0x40038)
137 
138 #define	TX_ADDR_MOD		(FZC_DMC + 0x41000) /* only one? */
139 
140 
141 /* FZC_DMC RED Parameters register offset (32 channels) */
142 #define	RDC_RED_PARA1		(FZC_DMC + 0x30000)
143 #define	RDC_RED_PARA2		(FZC_DMC + 0x30008)
144 /* FZC_DMC RED Discard Cound Register offset (32 channels) */
145 #define	RED_DIS_CNT		(FZC_DMC + 0x30010)
146 
147 #if OLD /* This has been moved to TXC */
148 /* Transmit Ring Scheduler (per port) */
149 #define	TX_DMA_MAP0		(FZC_DMC + 0x50000)
150 #define	TX_DMA_MAP1		(FZC_DMC + 0x50008)
151 #define	TX_DMA_MAP2		(FZC_DMC + 0x50010)
152 #define	TX_DMA_MAP3		(FZC_DMC + 0x50018)
153 #endif
154 
155 /* Transmit Ring Scheduler: DRR Weight (32 Channels) */
156 #define	DRR_WT			(FZC_DMC + 0x51000)
157 #if OLD
158 #define	TXRNG_USE		(FZC_DMC + 0x51008)
159 #endif
160 
161 /* TXC		(0x700000)??	*/
162 
163 
164 /* FZC_TXC	(0x780000)??	*/
165 
166 
167 /*
168  * PIO_LDSV	(0x800000)
169  * Logical Device State Vector 0, 1, 2.
170  * (69 logical devices, 8192 apart, partitioning control)
171  */
172 #define	LDSV0			(PIO_LDSV + 0x00000)	/* RO (64 - 69) */
173 #define	LDSV1			(PIO_LDSV + 0x00008)	/* RO (32 - 63) */
174 #define	LDSV2			(PIO_LDSV + 0x00010)	/* RO ( 0 - 31) */
175 
176 /*
177  * PIO_LDGIM	(0x900000)
178  * Logical Device Group Interrupt Management (64 groups).
179  * (count 64, step 8192)
180  */
181 #define	LDGIMGN			(PIO_LDGIMGN + 0x00000)	/* RW */
182 
183 /*
184  * PIO_IMASK0	(0xA000000)
185  *
186  * Logical Device Masks 0, 1.
187  * (64 logical devices, 8192 apart, partitioning control)
188  */
189 #define	LD_IM0			(PIO_IMASK0 + 0x00000)	/* RW ( 0 - 63) */
190 
191 /*
192  * PIO_IMASK0	(0xB000000)
193  *
194  * Logical Device Masks 0, 1.
195  * (5 logical devices, 8192 apart, partitioning control)
196  */
197 #define	LD_IM1			(PIO_IMASK1 + 0x00000)	/* RW (64 - 69) */
198 
199 
200 /* DMC/TMC CSR size */
201 #define	DMA_CSR_SLL		9	/* Used to calculate VR addresses */
202 #define	DMA_CSR_SIZE		(1 << DMA_CSR_SLL) /* 512 */
203 #define	DMA_CSR_MASK		0xff	/* Used to calculate VR addresses */
204 	/*
205 	 * That is, each DMA CSR set must fit into a 512 byte space.
206 	 * If you subtract DMC (0x60000) from each DMA register definition,
207 	 * what you have left over is currently less than 255 (0xff)
208 	 */
209 #define	DMA_CSR_MIN_PAGE_SIZE	(2 * DMA_CSR_SIZE) /* 1024 */
210 	/*
211 	 * There are 2 subpages per page in a VR.
212 	 */
213 #define	VDMA_CSR_SIZE		(8 * DMA_CSR_MIN_PAGE_SIZE) /* 0x2000 */
214 	/*
215 	 * There are 8 pages in a VR.
216 	 */
217 
218 /*
219  * Define the Default RBR, RCR
220  */
221 #define	RBR_DEFAULT_MAX_BLKS	8192	/* each entry (16 blockaddr/64B) */
222 #define	RBR_NBLK_PER_LINE	16	/* 16 block addresses per 64 B line */
223 #define	RBR_DEFAULT_MAX_LEN	(RBR_DEFAULT_MAX_BLKS)
224 #define	RBR_DEFAULT_MIN_LEN	1
225 #define	RCR_DEFAULT_MAX		8192
226 
227 #define	SW_OFFSET_NO_OFFSET		0
228 #define	SW_OFFSET_64			1	/* 64 bytes */
229 #define	SW_OFFSET_128			2	/* 128 bytes */
230 #define	SW_OFFSET_INVALID		3
231 
232 #define	TDC_DEFAULT_MAX		8192
233 /*
234  * RBR block descriptor is 32 bits (bits [43:12]
235  */
236 #define	RBR_BKADDR_SHIFT	12
237 
238 
239 #define	RCR_DEFAULT_MAX_BLKS	4096	/* each entry (8 blockaddr/64B) */
240 #define	RCR_NBLK_PER_LINE	8	/* 8 block addresses per 64 B line */
241 #define	RCR_DEFAULT_MAX_LEN	(RCR_DEFAULT_MAX_BLKS)
242 #define	RCR_DEFAULT_MIN_LEN	1
243 
244 /*  DMA Channels.  */
245 #define	NXGE_MAX_DMCS		(NXGE_MAX_RDCS + NXGE_MAX_TDCS)
246 #define	NXGE_MAX_RDCS		16
247 #define	NXGE_MAX_TDCS		24
248 #define	NXGE_MAX_TDCS_NIU	16
249 /*
250  * original mapping from Hypervisor
251  */
252 #ifdef	ORIGINAL
253 #define	NXGE_N2_RXDMA_START_LDG	0
254 #define	NXGE_N2_TXDMA_START_LDG	16
255 #define	NXGE_N2_MIF_LDG		32
256 #define	NXGE_N2_MAC_0_LDG	33
257 #define	NXGE_N2_MAC_1_LDG	34
258 #define	NXGE_N2_SYS_ERROR_LDG	35
259 #endif
260 
261 #define	NXGE_N2_RXDMA_START_LDG	19
262 #define	NXGE_N2_TXDMA_START_LDG	27
263 #define	NXGE_N2_MIF_LDG		17
264 #define	NXGE_N2_MAC_0_LDG	16
265 #define	NXGE_N2_MAC_1_LDG	35
266 #define	NXGE_N2_SYS_ERROR_LDG	18
267 #define	NXGE_N2_LDG_GAP		17
268 
269 #define	NXGE_MAX_RDC_GRPS	8
270 
271 /*
272  * Max. ports per Neptune and NIU
273  */
274 #define	NXGE_MAX_PORTS			4
275 #define	NXGE_PORTS_NEPTUNE		4
276 #define	NXGE_PORTS_NIU			2
277 
278 /*
279  * Virtualization Regions.
280  */
281 #define	NXGE_MAX_VRS			8
282 
283 /* Max. RDC table groups */
284 #define	NXGE_MAX_RDC_GROUPS		8
285 #define	NXGE_MAX_RDCS			16
286 #define	NXGE_MAX_DMAS			32
287 
288 #define	NXGE_MAX_MACS_XMACS		16
289 #define	NXGE_MAX_MACS_BMACS		8
290 #define	NXGE_MAX_MACS			(NXGE_MAX_PORTS * NXGE_MAX_MACS_XMACS)
291 
292 #define	NXGE_MAX_VLANS			4096
293 #define	VLAN_ETHERTYPE			(0x8100)
294 
295 
296 /* Scaling factor for RBR (receive block ring) */
297 #define	RBR_SCALE_1		0
298 #define	RBR_SCALE_2		1
299 #define	RBR_SCALE_3		2
300 #define	RBR_SCALE_4		3
301 #define	RBR_SCALE_5		4
302 #define	RBR_SCALE_6		5
303 #define	RBR_SCALE_7		6
304 #define	RBR_SCALE_8		7
305 
306 
307 #define	MAX_PORTS_PER_NXGE	4
308 #define	MAX_MACS		32
309 
310 #define	TX_GATHER_POINTER_SZ	8
311 #define	TX_GP_PER_BLOCK		8
312 #define	TX_DEFAULT_MAX_GPS	1024	/* Max. # of gather pointers */
313 #define	TX_DEFAULT_JUMBO_MAX_GPS 4096	/* Max. # of gather pointers */
314 #define	TX_DEFAULT_MAX_LEN	(TX_DEFAULT_MAX_GPS/TX_GP_PER_BLOCK)
315 #define	TX_DEFAULT_JUMBO_MAX_LEN (TX_DEFAULT_JUMBO_MAX_GPS/TX_GP_PER_BLOCK)
316 
317 #define	TX_RING_THRESHOLD		(TX_DEFAULT_MAX_GPS/4)
318 #define	TX_RING_JUMBO_THRESHOLD		(TX_DEFAULT_JUMBO_MAX_GPS/4)
319 
320 #define	TRANSMIT_HEADER_SIZE		16	/* 16 B frame header */
321 
322 #define	TX_DESC_SAD_SHIFT	0
323 #define	TX_DESC_SAD_MASK	0x00000FFFFFFFFFFFULL	/* start address */
324 #define	TX_DESC_TR_LEN_SHIFT	44
325 #define	TX_DESC_TR_LEN_MASK	0x00FFF00000000000ULL	/* Transfer Length */
326 #define	TX_DESC_NUM_PTR_SHIFT	58
327 #define	TX_DESC_NUM_PTR_MASK	0x2C00000000000000ULL	/* gather pointers */
328 #define	TX_DESC_MASK_SHIFT	62
329 #define	TX_DESC_MASK_MASK	0x4000000000000000ULL	/* Mark bit */
330 #define	TX_DESC_SOP_SHIF	63
331 #define	TX_DESC_NUM_MASK	0x8000000000000000ULL	/* Start of packet */
332 
333 #define	TCAM_FLOW_KEY_MAX_CLASS		12
334 #define	TCAM_L3_MAX_USER_CLASS		4
335 #define	TCAM_NIU_TCAM_MAX_ENTRY		128
336 #define	TCAM_NXGE_TCAM_MAX_ENTRY	256
337 
338 
339 
340 /* TCAM entry formats */
341 #define	TCAM_IPV4_5TUPLE_FORMAT	0x00
342 #define	TCAM_IPV6_5TUPLE_FORMAT	0x01
343 #define	TCAM_ETHERTYPE_FORMAT	0x02
344 
345 
346 /* TCAM */
347 #define	TCAM_SELECT_IPV6	0x01
348 #define	TCAM_LOOKUP		0x04
349 #define	TCAM_DISCARD		0x08
350 
351 /* FLOW Key */
352 #define	FLOW_L4_1_34_BYTES	0x10
353 #define	FLOW_L4_1_78_BYTES	0x11
354 #define	FLOW_L4_0_12_BYTES	(0x10 << 2)
355 #define	FLOW_L4_0_56_BYTES	(0x11 << 2)
356 #define	FLOW_PROTO_NEXT		0x10
357 #define	FLOW_IPDA		0x20
358 #define	FLOW_IPSA		0x40
359 #define	FLOW_VLAN		0x80
360 #define	FLOW_L2DA		0x100
361 #define	FLOW_PORT		0x200
362 
363 /* TCAM */
364 #define	MAX_EFRAME	11
365 
366 #define	TCAM_USE_L2RDC_FLOW_LOOKUP	0x00
367 #define	TCAM_USE_OFFSET_DONE		0x01
368 #define	TCAM_OVERRIDE_L2_FLOW_LOOKUP	0x02
369 #define	TCAM_OVERRIDE_L2_USE_OFFSET	0x03
370 
371 /*
372  * FCRAM (Hashing):
373  *	1. IPv4 exact match
374  *	2. IPv6 exact match
375  *	3. IPv4 Optimistic match
376  *	4. IPv6 Optimistic match
377  *
378  */
379 #define	FCRAM_IPV4_EXT_MATCH	0x00
380 #define	FCRAM_IPV6_EXT_MATCH	0x01
381 #define	FCRAM_IPV4_OPTI_MATCH	0x02
382 #define	FCRAM_IPV6_OPTI_MATCH	0x03
383 
384 
385 #define	NXGE_HASH_MAX_ENTRY	256
386 
387 
388 #define	MAC_ADDR_LENGTH		6
389 
390 /* convert values */
391 #define	NXGE_BASE(x, y)		(((y) << (x ## _SHIFT)) & (x ## _MASK))
392 #define	NXGE_VAL(x, y)		(((y) & (x ## _MASK)) >> (x ## _SHIFT))
393 
394 /*
395  * Locate the DMA channel start offset (PIO_VADDR)
396  * (DMA virtual address space of the PIO block)
397  */
398 #define	TDMC_PIOVADDR_OFFSET(channel)	(2 * DMA_CSR_SIZE * channel)
399 #define	RDMC_PIOVADDR_OFFSET(channel)	(TDMC_OFFSET(channel) + DMA_CSR_SIZE)
400 
401 /*
402  * PIO access using the DMC block directly (DMC)
403  */
404 #define	DMC_OFFSET(channel)	(DMA_CSR_SIZE * channel)
405 #define	TDMC_OFFSET(channel)	(TX_RNG_CFIG + DMA_CSR_SIZE * channel)
406 
407 /*
408  * Number of logical pages.
409  */
410 #define	NXGE_MAX_LOGICAL_PAGES		2
411 
412 #ifdef	SOLARIS
413 #ifndef	i386
414 #define	_BIT_FIELDS_BIG_ENDIAN		_BIT_FIELDS_HTOL
415 #else
416 #define	_BIT_FIELDS_LITTLE_ENDIAN	_BIT_FIELDS_LTOH
417 #endif
418 #else
419 #define	_BIT_FIELDS_LITTLE_ENDIAN	_LITTLE_ENDIAN_BITFIELD
420 #endif
421 
422 #ifdef COSIM
423 #define	MAX_PIO_RETRIES		3200
424 #else
425 #define	MAX_PIO_RETRIES		32
426 #endif
427 
428 #define	IS_PORT_NUM_VALID(portn)\
429 	(portn < 4)
430 
431 /*
432  * The following macros expect unsigned input values.
433  */
434 #define	TXDMA_CHANNEL_VALID(cn)		(cn < NXGE_MAX_TDCS)
435 #define	TXDMA_PAGE_VALID(pn)		(pn < NXGE_MAX_LOGICAL_PAGES)
436 #define	TXDMA_FUNC_VALID(fn)		(fn < MAX_PORTS_PER_NXGE)
437 #define	FUNC_VALID(n)			(n < MAX_PORTS_PER_NXGE)
438 
439 /*
440  * DMA channel binding definitions.
441  */
442 #define	VIR_PAGE_INDEX_MAX		8
443 #define	VIR_SUB_REGIONS			2
444 #define	VIR_DMA_BIND			1
445 
446 #define	SUBREGION_VALID(n)		(n < VIR_SUB_REGIONS)
447 #define	VIR_PAGE_INDEX_VALID(n)		(n < VIR_PAGE_INDEX_MAX)
448 #define	VRXDMA_CHANNEL_VALID(n)		(n < NXGE_MAX_RDCS)
449 
450 /*
451  * Logical device definitions.
452  */
453 #define	NXGE_INT_MAX_LD		69
454 #define	NXGE_INT_MAX_LDG	64
455 
456 #define	NXGE_RDMA_LD_START	 0
457 #define	NXGE_TDMA_LD_START	32
458 #define	NXGE_MIF_LD		63
459 #define	NXGE_MAC_LD_PORT0	64
460 #define	NXGE_MAC_LD_PORT1	65
461 #define	NXGE_MAC_LD_PORT2	66
462 #define	NXGE_MAC_LD_PORT3	67
463 #define	NXGE_SYS_ERROR_LD	68
464 
465 #define	LDG_VALID(n)			(n < NXGE_INT_MAX_LDG)
466 #define	LD_VALID(n)			(n < NXGE_INT_MAX_LD)
467 #define	LD_RXDMA_LD_VALID(n)		(n < NXGE_MAX_RDCS)
468 #define	LD_TXDMA_LD_VALID(n)		(n >= NXGE_MAX_RDCS && \
469 					((n - NXGE_MAX_RDCS) < NXGE_MAX_TDCS)))
470 #define	LD_MAC_VALID(n)			(IS_PORT_NUM_VALID(n))
471 
472 #define	LD_TIMER_MAX			0x3f
473 #define	LD_INTTIMER_VALID(n)		(n <= LD_TIMER_MAX)
474 
475 /* System Interrupt Data */
476 #define	SID_VECTOR_MAX			0x1f
477 #define	SID_VECTOR_VALID(n)		(n <= SID_VECTOR_MAX)
478 
479 #define	NXGE_COMPILE_32
480 
481 #ifdef	__cplusplus
482 }
483 #endif
484 
485 #endif	/* _SYS_NXGE_NXGE_DEFS_H */
486