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