xref: /onnv-gate/usr/src/uts/common/io/hxge/hxge_defs.h (revision 7584:07b5a7770d5b)
16349Sqs148142 /*
26349Sqs148142  * CDDL HEADER START
36349Sqs148142  *
46349Sqs148142  * The contents of this file are subject to the terms of the
56349Sqs148142  * Common Development and Distribution License (the "License").
66349Sqs148142  * You may not use this file except in compliance with the License.
76349Sqs148142  *
86349Sqs148142  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
96349Sqs148142  * or http://www.opensolaris.org/os/licensing.
106349Sqs148142  * See the License for the specific language governing permissions
116349Sqs148142  * and limitations under the License.
126349Sqs148142  *
136349Sqs148142  * When distributing Covered Code, include this CDDL HEADER in each
146349Sqs148142  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
156349Sqs148142  * If applicable, add the following below this CDDL HEADER, with the
166349Sqs148142  * fields enclosed by brackets "[]" replaced with your own identifying
176349Sqs148142  * information: Portions Copyright [yyyy] [name of copyright owner]
186349Sqs148142  *
196349Sqs148142  * CDDL HEADER END
206349Sqs148142  */
216349Sqs148142 /*
226349Sqs148142  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
236349Sqs148142  * Use is subject to license terms.
246349Sqs148142  */
256349Sqs148142 
266349Sqs148142 #ifndef	_SYS_HXGE_HXGE_DEFS_H
276349Sqs148142 #define	_SYS_HXGE_HXGE_DEFS_H
286349Sqs148142 
296349Sqs148142 #ifdef	__cplusplus
306349Sqs148142 extern "C" {
316349Sqs148142 #endif
326349Sqs148142 
336349Sqs148142 #if	!defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) && \
346349Sqs148142 		!defined(__BIG_ENDIAN) && !defined(__LITTLE_ENDIAN)
356349Sqs148142 #error	Host endianness not defined
366349Sqs148142 #endif
376349Sqs148142 
386349Sqs148142 #if	!defined(_BIT_FIELDS_HTOL) && !defined(_BIT_FIELDS_LTOH) && \
396349Sqs148142 		!defined(__BIT_FIELDS_HTOL) && !defined(__BIT_FIELDS_LTOH)
406349Sqs148142 #error	Bit ordering not defined
416349Sqs148142 #endif
426349Sqs148142 
436349Sqs148142 /* RDC/TDC CSR size */
446349Sqs148142 #define	DMA_CSR_SIZE		2048
456349Sqs148142 
466349Sqs148142 /*
476349Sqs148142  * Define the Default RBR, RCR
486349Sqs148142  */
496349Sqs148142 #define	RBR_DEFAULT_MAX_BLKS	4096	/* each entry (16 blockaddr/64B) */
506349Sqs148142 #define	RBR_NBLK_PER_LINE	16	/* 16 block addresses per 64 B line */
516349Sqs148142 #define	RBR_DEFAULT_MAX_LEN	65472	/* 2^16 - 64 */
526349Sqs148142 #define	RBR_DEFAULT_MIN_LEN	64	/* multiple of 64 */
536349Sqs148142 
546349Sqs148142 #define	SW_OFFSET_NO_OFFSET	0
556349Sqs148142 #define	SW_OFFSET_64		1	/* 64 bytes */
566349Sqs148142 #define	SW_OFFSET_128		2	/* 128 bytes */
576349Sqs148142 #define	SW_OFFSET_INVALID	3
586349Sqs148142 
596349Sqs148142 /*
606349Sqs148142  * RBR block descriptor is 32 bits (bits [43:12]
616349Sqs148142  */
626349Sqs148142 #define	RBR_BKADDR_SHIFT	12
636349Sqs148142 #define	RCR_DEFAULT_MAX_BLKS	4096	/* each entry (8 blockaddr/64B) */
646349Sqs148142 #define	RCR_NBLK_PER_LINE	8	/* 8 block addresses per 64 B line */
656349Sqs148142 #define	RCR_DEFAULT_MAX_LEN	(RCR_DEFAULT_MAX_BLKS)
666349Sqs148142 #define	RCR_DEFAULT_MIN_LEN	32
676349Sqs148142 
686349Sqs148142 /*  DMA Channels.  */
696349Sqs148142 #define	HXGE_MAX_DMCS		(HXGE_MAX_RDCS + HXGE_MAX_TDCS)
706349Sqs148142 #define	HXGE_MAX_RDCS		4
716349Sqs148142 #define	HXGE_MAX_TDCS		4
726349Sqs148142 
736349Sqs148142 #define	VLAN_ETHERTYPE			(0x8100)
746349Sqs148142 
756349Sqs148142 /* 256 total, each blade gets 42 */
766349Sqs148142 #define	TCAM_HXGE_TCAM_MAX_ENTRY	42
776349Sqs148142 
786349Sqs148142 /*
796349Sqs148142  * Locate the DMA channel start offset (PIO_VADDR)
806349Sqs148142  * (DMA virtual address space of the PIO block)
816349Sqs148142  */
826349Sqs148142 /* TX_RNG_CFIG is not used since we are not using VADDR. */
836349Sqs148142 #define	TX_RNG_CFIG			0x1000000
846349Sqs148142 #define	TDMC_PIOVADDR_OFFSET(channel)	(2 * DMA_CSR_SIZE * channel)
856349Sqs148142 #define	RDMC_PIOVADDR_OFFSET(channel)	(TDMC_OFFSET(channel) + DMA_CSR_SIZE)
866349Sqs148142 
876349Sqs148142 /*
886349Sqs148142  * PIO access using the DMC block directly (DMC)
896349Sqs148142  */
906349Sqs148142 #define	DMC_OFFSET(channel)		(DMA_CSR_SIZE * channel)
916349Sqs148142 #define	TDMC_OFFSET(channel)		(TX_RNG_CFIG + DMA_CSR_SIZE * channel)
926349Sqs148142 
936349Sqs148142 #ifdef	SOLARIS
946349Sqs148142 #ifndef	i386
956349Sqs148142 #define	_BIT_FIELDS_BIG_ENDIAN		_BIT_FIELDS_HTOL
966349Sqs148142 #else
976349Sqs148142 #define	_BIT_FIELDS_LITTLE_ENDIAN	_BIT_FIELDS_LTOH
986349Sqs148142 #endif
996349Sqs148142 #else
1006349Sqs148142 #define	_BIT_FIELDS_LITTLE_ENDIAN	_LITTLE_ENDIAN_BITFIELD
1016349Sqs148142 #endif
1026349Sqs148142 
1036349Sqs148142 /*
1046349Sqs148142  * The following macros expect unsigned input values.
1056349Sqs148142  */
1066349Sqs148142 #define	TXDMA_CHANNEL_VALID(cn)		(cn < HXGE_MAX_TDCS)
1076349Sqs148142 
1086349Sqs148142 /*
1096349Sqs148142  * Logical device definitions.
1106349Sqs148142  */
1116349Sqs148142 #define	HXGE_INT_MAX_LD		32
1126349Sqs148142 #define	HXGE_INT_MAX_LDG	32
1136349Sqs148142 
1146349Sqs148142 #define	HXGE_RDMA_LD_START	0	/* 0 - 3 with 4 - 7 reserved */
1156349Sqs148142 #define	HXGE_TDMA_LD_START	8	/* 8 - 11 with 12 - 15 reserved */
1166349Sqs148142 #define	HXGE_VMAC_LD		16
1176349Sqs148142 #define	HXGE_PFC_LD		17
1186349Sqs148142 #define	HXGE_NMAC_LD		18
1196349Sqs148142 #define	HXGE_MBOX_LD_START	20	/* 20 - 23  for SW Mbox */
1206349Sqs148142 #define	HXGE_SYS_ERROR_LD	31
1216349Sqs148142 
1226349Sqs148142 #define	LDG_VALID(n)		(n < HXGE_INT_MAX_LDG)
1236349Sqs148142 #define	LD_VALID(n)		(n < HXGE_INT_MAX_LD)
1246349Sqs148142 #define	LD_RXDMA_LD_VALID(n)	(n < HXGE_MAX_RDCS)
1256349Sqs148142 #define	LD_TXDMA_LD_VALID(n)	(n >= HXGE_MAX_RDCS && \
1266349Sqs148142 					((n - HXGE_MAX_RDCS) < HXGE_MAX_TDCS)))
1276349Sqs148142 
1286349Sqs148142 #define	LD_TIMER_MAX		0x3f
1296349Sqs148142 #define	LD_INTTIMER_VALID(n)	(n <= LD_TIMER_MAX)
1306349Sqs148142 
1316349Sqs148142 /* System Interrupt Data */
1326349Sqs148142 #define	SID_VECTOR_MAX		0x1f
1336349Sqs148142 #define	SID_VECTOR_VALID(n)	(n <= SID_VECTOR_MAX)
1346349Sqs148142 
1356349Sqs148142 #define	LD_IM_MASK		0x00000003ULL
1366349Sqs148142 #define	LDGTITMRES_RES_MASK	0x000FFFFFULL
1376349Sqs148142 
138*7584SQiyan.Sun@Sun.COM #define	MIN_FRAME_SIZE		106	/* 68 byte min MTU + 38 byte header */
139*7584SQiyan.Sun@Sun.COM #define	MAX_FRAME_SIZE		9216
140*7584SQiyan.Sun@Sun.COM #define	STD_FRAME_SIZE		1522	/* 1518 + 4 = 5EE + 4 */
141*7584SQiyan.Sun@Sun.COM #define	HXGE_DEFAULT_MTU	1500
142*7584SQiyan.Sun@Sun.COM /*
143*7584SQiyan.Sun@Sun.COM  * sizeof (struct ether_header) + ETHERFCSL + 4 + TX_PKT_HEADER_SIZE
144*7584SQiyan.Sun@Sun.COM  * 12 + 6 + 4 + 16
145*7584SQiyan.Sun@Sun.COM  */
146*7584SQiyan.Sun@Sun.COM #define	MTU_TO_FRAME_SIZE	38
1476349Sqs148142 
1486349Sqs148142 #ifdef	__cplusplus
1496349Sqs148142 }
1506349Sqs148142 #endif
1516349Sqs148142 
1526349Sqs148142 #endif	/* _SYS_HXGE_HXGE_DEFS_H */
153