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 2006 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef	_SYS_NXGE_NXGE_ESPC_H
27#define	_SYS_NXGE_NXGE_ESPC_H
28
29#pragma ident	"%Z%%M%	%I%	%E% SMI"
30
31#ifdef	__cplusplus
32extern "C" {
33#endif
34
35#include <nxge_espc_hw.h>
36
37#define	ESPC_MAC_ADDR_0		ESPC_NCR_REGN(0)
38#define	ESPC_MAC_ADDR_1		ESPC_NCR_REGN(1)
39#define	ESPC_NUM_PORTS_MACS	ESPC_NCR_REGN(2)
40#define	ESPC_MOD_STR_LEN	ESPC_NCR_REGN(4)
41#define	ESPC_MOD_STR_1		ESPC_NCR_REGN(5)
42#define	ESPC_MOD_STR_2		ESPC_NCR_REGN(6)
43#define	ESPC_MOD_STR_3		ESPC_NCR_REGN(7)
44#define	ESPC_MOD_STR_4		ESPC_NCR_REGN(8)
45#define	ESPC_MOD_STR_5		ESPC_NCR_REGN(9)
46#define	ESPC_MOD_STR_6		ESPC_NCR_REGN(10)
47#define	ESPC_MOD_STR_7		ESPC_NCR_REGN(11)
48#define	ESPC_MOD_STR_8		ESPC_NCR_REGN(12)
49#define	ESPC_BD_MOD_STR_LEN	ESPC_NCR_REGN(13)
50#define	ESPC_BD_MOD_STR_1	ESPC_NCR_REGN(14)
51#define	ESPC_BD_MOD_STR_2	ESPC_NCR_REGN(15)
52#define	ESPC_BD_MOD_STR_3	ESPC_NCR_REGN(16)
53#define	ESPC_BD_MOD_STR_4	ESPC_NCR_REGN(17)
54#define	ESPC_PHY_TYPE		ESPC_NCR_REGN(18)
55#define	ESPC_MAX_FM_SZ		ESPC_NCR_REGN(19)
56#define	ESPC_INTR_NUM		ESPC_NCR_REGN(20)
57#define	ESPC_VER_IMGSZ		ESPC_NCR_REGN(21)
58#define	ESPC_CHKSUM		ESPC_NCR_REGN(22)
59
60#define	NUM_PORTS_MASK		0xff
61#define	NUM_MAC_ADDRS_MASK	0xff0000
62#define	NUM_MAC_ADDRS_SHIFT	16
63#define	MOD_STR_LEN_MASK	0xffff
64#define	BD_MOD_STR_LEN_MASK	0xffff
65#define	MAX_FM_SZ_MASK		0xffff
66#define	VER_NUM_MASK		0xffff
67#define	IMG_SZ_MASK		0xffff0000
68#define	IMG_SZ_SHIFT		16
69#define	CHKSUM_MASK		0xff
70
71/* 0 <= n < 8 */
72#define	ESPC_MOD_STR(n)		(ESPC_MOD_STR_1 + n*8)
73#define	MAX_MOD_STR_LEN		32
74
75/* 0 <= n < 4 */
76#define	ESPC_BD_MOD_STR(n)	(ESPC_BD_MOD_STR_1 + n*8)
77#define	MAX_BD_MOD_STR_LEN	16
78
79#define	ESC_PHY_10G_FIBER	0x0
80#define	ESC_PHY_10G_COPPER	0x1
81#define	ESC_PHY_1G_FIBER	0x2
82#define	ESC_PHY_1G_COPPER	0x3
83#define	ESC_PHY_NONE		0xf
84
85#define	ESC_IMG_CHKSUM_VAL	0xab
86
87typedef union _mac_addr_0_t {
88	uint64_t value;
89
90	struct {
91#if defined(_BIG_ENDIAN)
92		uint32_t msw;	/* Most significant word */
93		uint32_t lsw;	/* Least significant word */
94#elif defined(_LITTLE_ENDIAN)
95		uint32_t lsw;	/* Least significant word */
96		uint32_t msw;	/* Most significant word */
97#endif
98	} val;
99	struct {
100#if defined(_BIG_ENDIAN)
101		uint32_t	w1;
102#endif
103		struct {
104#if defined(_BIT_FIELDS_HTOL)
105		uint32_t byte3		: 8;
106		uint32_t byte2		: 8;
107		uint32_t byte1		: 8;
108		uint32_t byte0		: 8;
109#elif defined(_BIT_FIELDS_LTOH)
110		uint32_t byte0		: 8;
111		uint32_t byte1		: 8;
112		uint32_t byte2		: 8;
113		uint32_t byte3		: 8;
114#endif
115		} w0;
116
117#if defined(_LITTLE_ENDIAN)
118		uint32_t	w1;
119#endif
120	} bits;
121} mac_addr_0_t;
122
123typedef union _mac_addr_1_t {
124	uint64_t value;
125
126	struct {
127#if defined(_BIG_ENDIAN)
128		uint32_t msw;	/* Most significant word */
129		uint32_t lsw;	/* Least significant word */
130#elif defined(_LITTLE_ENDIAN)
131		uint32_t lsw;	/* Least significant word */
132		uint32_t msw;	/* Most significant word */
133#endif
134	} val;
135	struct {
136#if defined(_BIG_ENDIAN)
137		uint32_t	w1;
138#endif
139		struct {
140#if defined(_BIT_FIELDS_HTOL)
141		uint32_t res		: 16;
142		uint32_t byte5		: 8;
143		uint32_t byte4		: 8;
144#elif defined(_BIT_FIELDS_LTOH)
145		uint32_t byte4		: 8;
146		uint32_t byte5		: 8;
147		uint32_t res		: 16;
148#endif
149		} w0;
150
151#if defined(_LITTLE_ENDIAN)
152		uint32_t	w1;
153#endif
154	} bits;
155} mac_addr_1_t;
156
157
158typedef union _phy_type_t {
159	uint64_t value;
160
161	struct {
162#if defined(_BIG_ENDIAN)
163		uint32_t msw;	/* Most significant word */
164		uint32_t lsw;	/* Least significant word */
165#elif defined(_LITTLE_ENDIAN)
166		uint32_t lsw;	/* Least significant word */
167		uint32_t msw;	/* Most significant word */
168#endif
169	} val;
170	struct {
171#if defined(_BIG_ENDIAN)
172		uint32_t	w1;
173#endif
174		struct {
175#if defined(_BIT_FIELDS_HTOL)
176		uint32_t pt0_phy_type	: 8;
177		uint32_t pt1_phy_type	: 8;
178		uint32_t pt2_phy_type	: 8;
179		uint32_t pt3_phy_type	: 8;
180#elif defined(_BIT_FIELDS_LTOH)
181		uint32_t pt3_phy_type	: 8;
182		uint32_t pt2_phy_type	: 8;
183		uint32_t pt1_phy_type	: 8;
184		uint32_t pt0_phy_type	: 8;
185#endif
186		} w0;
187
188#if defined(_LITTLE_ENDIAN)
189		uint32_t	w1;
190#endif
191	} bits;
192} phy_type_t;
193
194
195typedef union _intr_num_t {
196	uint64_t value;
197
198	struct {
199#if defined(_BIG_ENDIAN)
200		uint32_t msw;	/* Most significant word */
201		uint32_t lsw;	/* Least significant word */
202#elif defined(_LITTLE_ENDIAN)
203		uint32_t lsw;	/* Least significant word */
204		uint32_t msw;	/* Most significant word */
205#endif
206	} val;
207	struct {
208#if defined(_BIG_ENDIAN)
209		uint32_t	w1;
210#endif
211		struct {
212#if defined(_BIT_FIELDS_HTOL)
213		uint32_t pt0_intr_num	: 8;
214		uint32_t pt1_intr_num	: 8;
215		uint32_t pt2_intr_num	: 8;
216		uint32_t pt3_intr_num	: 8;
217#elif defined(_BIT_FIELDS_LTOH)
218		uint32_t pt3_intr_num	: 8;
219		uint32_t pt2_intr_num	: 8;
220		uint32_t pt1_intr_num	: 8;
221		uint32_t pt0_intr_num	: 8;
222#endif
223		} w0;
224
225#if defined(_LITTLE_ENDIAN)
226		uint32_t	w1;
227#endif
228	} bits;
229} intr_num_t;
230
231
232#ifdef __cplusplus
233}
234#endif
235
236#endif	/* _SYS_NXGE_NXGE_ESPC_H */
237