1/***********************license start***************
2 * Author: Cavium Networks
3 *
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
6 *
7 * Copyright (C) 2003-2018 Cavium, Inc.
8 *
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
12 *
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT.  See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
23 *
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
27
28#ifndef __CVMX_PCSX_DEFS_H__
29#define __CVMX_PCSX_DEFS_H__
30
31static inline uint64_t CVMX_PCSX_ANX_ADV_REG(unsigned long offset, unsigned long block_id)
32{
33	switch (cvmx_get_octeon_family()) {
34	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
35		return CVMX_ADD_IO_SEG(0x00011800B0001010ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
36	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
37	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
38		return CVMX_ADD_IO_SEG(0x00011800B0001010ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
39	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
40	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
41	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
42		return CVMX_ADD_IO_SEG(0x00011800B0001010ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
43	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
44		return CVMX_ADD_IO_SEG(0x00011800B0001010ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
45	}
46	return CVMX_ADD_IO_SEG(0x00011800B0001010ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
47}
48
49static inline uint64_t CVMX_PCSX_ANX_EXT_ST_REG(unsigned long offset, unsigned long block_id)
50{
51	switch (cvmx_get_octeon_family()) {
52	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
53		return CVMX_ADD_IO_SEG(0x00011800B0001028ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
54	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
55	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
56		return CVMX_ADD_IO_SEG(0x00011800B0001028ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
57	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
58	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
59	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
60		return CVMX_ADD_IO_SEG(0x00011800B0001028ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
61	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
62		return CVMX_ADD_IO_SEG(0x00011800B0001028ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
63	}
64	return CVMX_ADD_IO_SEG(0x00011800B0001028ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
65}
66
67static inline uint64_t CVMX_PCSX_ANX_LP_ABIL_REG(unsigned long offset, unsigned long block_id)
68{
69	switch (cvmx_get_octeon_family()) {
70	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
71		return CVMX_ADD_IO_SEG(0x00011800B0001018ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
72	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
73	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
74		return CVMX_ADD_IO_SEG(0x00011800B0001018ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
75	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
76	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
77	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
78		return CVMX_ADD_IO_SEG(0x00011800B0001018ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
79	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
80		return CVMX_ADD_IO_SEG(0x00011800B0001018ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
81	}
82	return CVMX_ADD_IO_SEG(0x00011800B0001018ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
83}
84
85static inline uint64_t CVMX_PCSX_ANX_RESULTS_REG(unsigned long offset, unsigned long block_id)
86{
87	switch (cvmx_get_octeon_family()) {
88	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
89		return CVMX_ADD_IO_SEG(0x00011800B0001020ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
90	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
91	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
92		return CVMX_ADD_IO_SEG(0x00011800B0001020ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
93	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
94	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
95	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
96		return CVMX_ADD_IO_SEG(0x00011800B0001020ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
97	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
98		return CVMX_ADD_IO_SEG(0x00011800B0001020ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
99	}
100	return CVMX_ADD_IO_SEG(0x00011800B0001020ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
101}
102
103static inline uint64_t CVMX_PCSX_INTX_EN_REG(unsigned long offset, unsigned long block_id)
104{
105	switch (cvmx_get_octeon_family()) {
106	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
107		return CVMX_ADD_IO_SEG(0x00011800B0001088ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
108	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
109	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
110		return CVMX_ADD_IO_SEG(0x00011800B0001088ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
111	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
112	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
113	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
114		return CVMX_ADD_IO_SEG(0x00011800B0001088ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
115	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
116		return CVMX_ADD_IO_SEG(0x00011800B0001088ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
117	}
118	return CVMX_ADD_IO_SEG(0x00011800B0001088ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
119}
120
121static inline uint64_t CVMX_PCSX_INTX_REG(unsigned long offset, unsigned long block_id)
122{
123	switch (cvmx_get_octeon_family()) {
124	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
125		return CVMX_ADD_IO_SEG(0x00011800B0001080ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
126	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
127	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
128		return CVMX_ADD_IO_SEG(0x00011800B0001080ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
129	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
130	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
131	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
132		return CVMX_ADD_IO_SEG(0x00011800B0001080ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
133	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
134		return CVMX_ADD_IO_SEG(0x00011800B0001080ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
135	}
136	return CVMX_ADD_IO_SEG(0x00011800B0001080ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
137}
138
139static inline uint64_t CVMX_PCSX_LINKX_TIMER_COUNT_REG(unsigned long offset, unsigned long block_id)
140{
141	switch (cvmx_get_octeon_family()) {
142	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
143		return CVMX_ADD_IO_SEG(0x00011800B0001040ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
144	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
145	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
146		return CVMX_ADD_IO_SEG(0x00011800B0001040ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
147	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
148	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
149	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
150		return CVMX_ADD_IO_SEG(0x00011800B0001040ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
151	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
152		return CVMX_ADD_IO_SEG(0x00011800B0001040ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
153	}
154	return CVMX_ADD_IO_SEG(0x00011800B0001040ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
155}
156
157static inline uint64_t CVMX_PCSX_LOG_ANLX_REG(unsigned long offset, unsigned long block_id)
158{
159	switch (cvmx_get_octeon_family()) {
160	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
161		return CVMX_ADD_IO_SEG(0x00011800B0001090ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
162	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
163	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
164		return CVMX_ADD_IO_SEG(0x00011800B0001090ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
165	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
166	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
167	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
168		return CVMX_ADD_IO_SEG(0x00011800B0001090ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
169	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
170		return CVMX_ADD_IO_SEG(0x00011800B0001090ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
171	}
172	return CVMX_ADD_IO_SEG(0x00011800B0001090ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
173}
174
175static inline uint64_t CVMX_PCSX_MISCX_CTL_REG(unsigned long offset, unsigned long block_id)
176{
177	switch (cvmx_get_octeon_family()) {
178	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
179		return CVMX_ADD_IO_SEG(0x00011800B0001078ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
180	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
181	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
182		return CVMX_ADD_IO_SEG(0x00011800B0001078ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
183	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
184	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
185	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
186		return CVMX_ADD_IO_SEG(0x00011800B0001078ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
187	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
188		return CVMX_ADD_IO_SEG(0x00011800B0001078ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
189	}
190	return CVMX_ADD_IO_SEG(0x00011800B0001078ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
191}
192
193static inline uint64_t CVMX_PCSX_MRX_CONTROL_REG(unsigned long offset, unsigned long block_id)
194{
195	switch (cvmx_get_octeon_family()) {
196	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
197		return CVMX_ADD_IO_SEG(0x00011800B0001000ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
198	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
199	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
200		return CVMX_ADD_IO_SEG(0x00011800B0001000ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
201	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
202	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
203	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
204		return CVMX_ADD_IO_SEG(0x00011800B0001000ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
205	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
206		return CVMX_ADD_IO_SEG(0x00011800B0001000ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
207	}
208	return CVMX_ADD_IO_SEG(0x00011800B0001000ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
209}
210
211static inline uint64_t CVMX_PCSX_MRX_STATUS_REG(unsigned long offset, unsigned long block_id)
212{
213	switch (cvmx_get_octeon_family()) {
214	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
215		return CVMX_ADD_IO_SEG(0x00011800B0001008ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
216	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
217	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
218		return CVMX_ADD_IO_SEG(0x00011800B0001008ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
219	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
220	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
221	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
222		return CVMX_ADD_IO_SEG(0x00011800B0001008ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
223	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
224		return CVMX_ADD_IO_SEG(0x00011800B0001008ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
225	}
226	return CVMX_ADD_IO_SEG(0x00011800B0001008ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
227}
228
229static inline uint64_t CVMX_PCSX_RXX_STATES_REG(unsigned long offset, unsigned long block_id)
230{
231	switch (cvmx_get_octeon_family()) {
232	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
233		return CVMX_ADD_IO_SEG(0x00011800B0001058ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
234	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
235	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
236		return CVMX_ADD_IO_SEG(0x00011800B0001058ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
237	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
238	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
239	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
240		return CVMX_ADD_IO_SEG(0x00011800B0001058ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
241	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
242		return CVMX_ADD_IO_SEG(0x00011800B0001058ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
243	}
244	return CVMX_ADD_IO_SEG(0x00011800B0001058ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
245}
246
247static inline uint64_t CVMX_PCSX_RXX_SYNC_REG(unsigned long offset, unsigned long block_id)
248{
249	switch (cvmx_get_octeon_family()) {
250	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
251		return CVMX_ADD_IO_SEG(0x00011800B0001050ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
252	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
253	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
254		return CVMX_ADD_IO_SEG(0x00011800B0001050ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
255	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
256	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
257	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
258		return CVMX_ADD_IO_SEG(0x00011800B0001050ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
259	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
260		return CVMX_ADD_IO_SEG(0x00011800B0001050ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
261	}
262	return CVMX_ADD_IO_SEG(0x00011800B0001050ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
263}
264
265static inline uint64_t CVMX_PCSX_SGMX_AN_ADV_REG(unsigned long offset, unsigned long block_id)
266{
267	switch (cvmx_get_octeon_family()) {
268	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
269		return CVMX_ADD_IO_SEG(0x00011800B0001068ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
270	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
271	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
272		return CVMX_ADD_IO_SEG(0x00011800B0001068ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
273	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
274	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
275	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
276		return CVMX_ADD_IO_SEG(0x00011800B0001068ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
277	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
278		return CVMX_ADD_IO_SEG(0x00011800B0001068ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
279	}
280	return CVMX_ADD_IO_SEG(0x00011800B0001068ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
281}
282
283static inline uint64_t CVMX_PCSX_SGMX_LP_ADV_REG(unsigned long offset, unsigned long block_id)
284{
285	switch (cvmx_get_octeon_family()) {
286	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
287		return CVMX_ADD_IO_SEG(0x00011800B0001070ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
288	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
289	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
290		return CVMX_ADD_IO_SEG(0x00011800B0001070ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
291	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
292	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
293	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
294		return CVMX_ADD_IO_SEG(0x00011800B0001070ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
295	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
296		return CVMX_ADD_IO_SEG(0x00011800B0001070ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
297	}
298	return CVMX_ADD_IO_SEG(0x00011800B0001070ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
299}
300
301static inline uint64_t CVMX_PCSX_TXX_STATES_REG(unsigned long offset, unsigned long block_id)
302{
303	switch (cvmx_get_octeon_family()) {
304	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
305		return CVMX_ADD_IO_SEG(0x00011800B0001060ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
306	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
307	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
308		return CVMX_ADD_IO_SEG(0x00011800B0001060ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
309	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
310	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
311	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
312		return CVMX_ADD_IO_SEG(0x00011800B0001060ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
313	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
314		return CVMX_ADD_IO_SEG(0x00011800B0001060ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
315	}
316	return CVMX_ADD_IO_SEG(0x00011800B0001060ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
317}
318
319static inline uint64_t CVMX_PCSX_TX_RXX_POLARITY_REG(unsigned long offset, unsigned long block_id)
320{
321	switch (cvmx_get_octeon_family()) {
322	case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
323		return CVMX_ADD_IO_SEG(0x00011800B0001048ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
324	case OCTEON_CN63XX & OCTEON_FAMILY_MASK:
325	case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
326		return CVMX_ADD_IO_SEG(0x00011800B0001048ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
327	case OCTEON_CN56XX & OCTEON_FAMILY_MASK:
328	case OCTEON_CN66XX & OCTEON_FAMILY_MASK:
329	case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
330		return CVMX_ADD_IO_SEG(0x00011800B0001048ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
331	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
332		return CVMX_ADD_IO_SEG(0x00011800B0001048ull) + ((offset) + (block_id) * 0x4000ull) * 1024;
333	}
334	return CVMX_ADD_IO_SEG(0x00011800B0001048ull) + ((offset) + (block_id) * 0x20000ull) * 1024;
335}
336
337void __cvmx_interrupt_pcsx_intx_en_reg_enable(int index, int block);
338
339union cvmx_pcsx_anx_adv_reg {
340	uint64_t u64;
341	struct cvmx_pcsx_anx_adv_reg_s {
342#ifdef __BIG_ENDIAN_BITFIELD
343		uint64_t reserved_16_63:48;
344		uint64_t np:1;
345		uint64_t reserved_14_14:1;
346		uint64_t rem_flt:2;
347		uint64_t reserved_9_11:3;
348		uint64_t pause:2;
349		uint64_t hfd:1;
350		uint64_t fd:1;
351		uint64_t reserved_0_4:5;
352#else
353		uint64_t reserved_0_4:5;
354		uint64_t fd:1;
355		uint64_t hfd:1;
356		uint64_t pause:2;
357		uint64_t reserved_9_11:3;
358		uint64_t rem_flt:2;
359		uint64_t reserved_14_14:1;
360		uint64_t np:1;
361		uint64_t reserved_16_63:48;
362#endif
363	} s;
364};
365
366union cvmx_pcsx_anx_ext_st_reg {
367	uint64_t u64;
368	struct cvmx_pcsx_anx_ext_st_reg_s {
369#ifdef __BIG_ENDIAN_BITFIELD
370		uint64_t reserved_16_63:48;
371		uint64_t thou_xfd:1;
372		uint64_t thou_xhd:1;
373		uint64_t thou_tfd:1;
374		uint64_t thou_thd:1;
375		uint64_t reserved_0_11:12;
376#else
377		uint64_t reserved_0_11:12;
378		uint64_t thou_thd:1;
379		uint64_t thou_tfd:1;
380		uint64_t thou_xhd:1;
381		uint64_t thou_xfd:1;
382		uint64_t reserved_16_63:48;
383#endif
384	} s;
385};
386
387union cvmx_pcsx_anx_lp_abil_reg {
388	uint64_t u64;
389	struct cvmx_pcsx_anx_lp_abil_reg_s {
390#ifdef __BIG_ENDIAN_BITFIELD
391		uint64_t reserved_16_63:48;
392		uint64_t np:1;
393		uint64_t ack:1;
394		uint64_t rem_flt:2;
395		uint64_t reserved_9_11:3;
396		uint64_t pause:2;
397		uint64_t hfd:1;
398		uint64_t fd:1;
399		uint64_t reserved_0_4:5;
400#else
401		uint64_t reserved_0_4:5;
402		uint64_t fd:1;
403		uint64_t hfd:1;
404		uint64_t pause:2;
405		uint64_t reserved_9_11:3;
406		uint64_t rem_flt:2;
407		uint64_t ack:1;
408		uint64_t np:1;
409		uint64_t reserved_16_63:48;
410#endif
411	} s;
412};
413
414union cvmx_pcsx_anx_results_reg {
415	uint64_t u64;
416	struct cvmx_pcsx_anx_results_reg_s {
417#ifdef __BIG_ENDIAN_BITFIELD
418		uint64_t reserved_7_63:57;
419		uint64_t pause:2;
420		uint64_t spd:2;
421		uint64_t an_cpt:1;
422		uint64_t dup:1;
423		uint64_t link_ok:1;
424#else
425		uint64_t link_ok:1;
426		uint64_t dup:1;
427		uint64_t an_cpt:1;
428		uint64_t spd:2;
429		uint64_t pause:2;
430		uint64_t reserved_7_63:57;
431#endif
432	} s;
433};
434
435union cvmx_pcsx_intx_en_reg {
436	uint64_t u64;
437	struct cvmx_pcsx_intx_en_reg_s {
438#ifdef __BIG_ENDIAN_BITFIELD
439		uint64_t reserved_13_63:51;
440		uint64_t dbg_sync_en:1;
441		uint64_t dup:1;
442		uint64_t sync_bad_en:1;
443		uint64_t an_bad_en:1;
444		uint64_t rxlock_en:1;
445		uint64_t rxbad_en:1;
446		uint64_t rxerr_en:1;
447		uint64_t txbad_en:1;
448		uint64_t txfifo_en:1;
449		uint64_t txfifu_en:1;
450		uint64_t an_err_en:1;
451		uint64_t xmit_en:1;
452		uint64_t lnkspd_en:1;
453#else
454		uint64_t lnkspd_en:1;
455		uint64_t xmit_en:1;
456		uint64_t an_err_en:1;
457		uint64_t txfifu_en:1;
458		uint64_t txfifo_en:1;
459		uint64_t txbad_en:1;
460		uint64_t rxerr_en:1;
461		uint64_t rxbad_en:1;
462		uint64_t rxlock_en:1;
463		uint64_t an_bad_en:1;
464		uint64_t sync_bad_en:1;
465		uint64_t dup:1;
466		uint64_t dbg_sync_en:1;
467		uint64_t reserved_13_63:51;
468#endif
469	} s;
470	struct cvmx_pcsx_intx_en_reg_cn52xx {
471#ifdef __BIG_ENDIAN_BITFIELD
472		uint64_t reserved_12_63:52;
473		uint64_t dup:1;
474		uint64_t sync_bad_en:1;
475		uint64_t an_bad_en:1;
476		uint64_t rxlock_en:1;
477		uint64_t rxbad_en:1;
478		uint64_t rxerr_en:1;
479		uint64_t txbad_en:1;
480		uint64_t txfifo_en:1;
481		uint64_t txfifu_en:1;
482		uint64_t an_err_en:1;
483		uint64_t xmit_en:1;
484		uint64_t lnkspd_en:1;
485#else
486		uint64_t lnkspd_en:1;
487		uint64_t xmit_en:1;
488		uint64_t an_err_en:1;
489		uint64_t txfifu_en:1;
490		uint64_t txfifo_en:1;
491		uint64_t txbad_en:1;
492		uint64_t rxerr_en:1;
493		uint64_t rxbad_en:1;
494		uint64_t rxlock_en:1;
495		uint64_t an_bad_en:1;
496		uint64_t sync_bad_en:1;
497		uint64_t dup:1;
498		uint64_t reserved_12_63:52;
499#endif
500	} cn52xx;
501};
502
503union cvmx_pcsx_intx_reg {
504	uint64_t u64;
505	struct cvmx_pcsx_intx_reg_s {
506#ifdef __BIG_ENDIAN_BITFIELD
507		uint64_t reserved_13_63:51;
508		uint64_t dbg_sync:1;
509		uint64_t dup:1;
510		uint64_t sync_bad:1;
511		uint64_t an_bad:1;
512		uint64_t rxlock:1;
513		uint64_t rxbad:1;
514		uint64_t rxerr:1;
515		uint64_t txbad:1;
516		uint64_t txfifo:1;
517		uint64_t txfifu:1;
518		uint64_t an_err:1;
519		uint64_t xmit:1;
520		uint64_t lnkspd:1;
521#else
522		uint64_t lnkspd:1;
523		uint64_t xmit:1;
524		uint64_t an_err:1;
525		uint64_t txfifu:1;
526		uint64_t txfifo:1;
527		uint64_t txbad:1;
528		uint64_t rxerr:1;
529		uint64_t rxbad:1;
530		uint64_t rxlock:1;
531		uint64_t an_bad:1;
532		uint64_t sync_bad:1;
533		uint64_t dup:1;
534		uint64_t dbg_sync:1;
535		uint64_t reserved_13_63:51;
536#endif
537	} s;
538	struct cvmx_pcsx_intx_reg_cn52xx {
539#ifdef __BIG_ENDIAN_BITFIELD
540		uint64_t reserved_12_63:52;
541		uint64_t dup:1;
542		uint64_t sync_bad:1;
543		uint64_t an_bad:1;
544		uint64_t rxlock:1;
545		uint64_t rxbad:1;
546		uint64_t rxerr:1;
547		uint64_t txbad:1;
548		uint64_t txfifo:1;
549		uint64_t txfifu:1;
550		uint64_t an_err:1;
551		uint64_t xmit:1;
552		uint64_t lnkspd:1;
553#else
554		uint64_t lnkspd:1;
555		uint64_t xmit:1;
556		uint64_t an_err:1;
557		uint64_t txfifu:1;
558		uint64_t txfifo:1;
559		uint64_t txbad:1;
560		uint64_t rxerr:1;
561		uint64_t rxbad:1;
562		uint64_t rxlock:1;
563		uint64_t an_bad:1;
564		uint64_t sync_bad:1;
565		uint64_t dup:1;
566		uint64_t reserved_12_63:52;
567#endif
568	} cn52xx;
569};
570
571union cvmx_pcsx_linkx_timer_count_reg {
572	uint64_t u64;
573	struct cvmx_pcsx_linkx_timer_count_reg_s {
574#ifdef __BIG_ENDIAN_BITFIELD
575		uint64_t reserved_16_63:48;
576		uint64_t count:16;
577#else
578		uint64_t count:16;
579		uint64_t reserved_16_63:48;
580#endif
581	} s;
582};
583
584union cvmx_pcsx_log_anlx_reg {
585	uint64_t u64;
586	struct cvmx_pcsx_log_anlx_reg_s {
587#ifdef __BIG_ENDIAN_BITFIELD
588		uint64_t reserved_4_63:60;
589		uint64_t lafifovfl:1;
590		uint64_t la_en:1;
591		uint64_t pkt_sz:2;
592#else
593		uint64_t pkt_sz:2;
594		uint64_t la_en:1;
595		uint64_t lafifovfl:1;
596		uint64_t reserved_4_63:60;
597#endif
598	} s;
599};
600
601union cvmx_pcsx_miscx_ctl_reg {
602	uint64_t u64;
603	struct cvmx_pcsx_miscx_ctl_reg_s {
604#ifdef __BIG_ENDIAN_BITFIELD
605		uint64_t reserved_13_63:51;
606		uint64_t sgmii:1;
607		uint64_t gmxeno:1;
608		uint64_t loopbck2:1;
609		uint64_t mac_phy:1;
610		uint64_t mode:1;
611		uint64_t an_ovrd:1;
612		uint64_t samp_pt:7;
613#else
614		uint64_t samp_pt:7;
615		uint64_t an_ovrd:1;
616		uint64_t mode:1;
617		uint64_t mac_phy:1;
618		uint64_t loopbck2:1;
619		uint64_t gmxeno:1;
620		uint64_t sgmii:1;
621		uint64_t reserved_13_63:51;
622#endif
623	} s;
624};
625
626union cvmx_pcsx_mrx_control_reg {
627	uint64_t u64;
628	struct cvmx_pcsx_mrx_control_reg_s {
629#ifdef __BIG_ENDIAN_BITFIELD
630		uint64_t reserved_16_63:48;
631		uint64_t reset:1;
632		uint64_t loopbck1:1;
633		uint64_t spdlsb:1;
634		uint64_t an_en:1;
635		uint64_t pwr_dn:1;
636		uint64_t reserved_10_10:1;
637		uint64_t rst_an:1;
638		uint64_t dup:1;
639		uint64_t coltst:1;
640		uint64_t spdmsb:1;
641		uint64_t uni:1;
642		uint64_t reserved_0_4:5;
643#else
644		uint64_t reserved_0_4:5;
645		uint64_t uni:1;
646		uint64_t spdmsb:1;
647		uint64_t coltst:1;
648		uint64_t dup:1;
649		uint64_t rst_an:1;
650		uint64_t reserved_10_10:1;
651		uint64_t pwr_dn:1;
652		uint64_t an_en:1;
653		uint64_t spdlsb:1;
654		uint64_t loopbck1:1;
655		uint64_t reset:1;
656		uint64_t reserved_16_63:48;
657#endif
658	} s;
659};
660
661union cvmx_pcsx_mrx_status_reg {
662	uint64_t u64;
663	struct cvmx_pcsx_mrx_status_reg_s {
664#ifdef __BIG_ENDIAN_BITFIELD
665		uint64_t reserved_16_63:48;
666		uint64_t hun_t4:1;
667		uint64_t hun_xfd:1;
668		uint64_t hun_xhd:1;
669		uint64_t ten_fd:1;
670		uint64_t ten_hd:1;
671		uint64_t hun_t2fd:1;
672		uint64_t hun_t2hd:1;
673		uint64_t ext_st:1;
674		uint64_t reserved_7_7:1;
675		uint64_t prb_sup:1;
676		uint64_t an_cpt:1;
677		uint64_t rm_flt:1;
678		uint64_t an_abil:1;
679		uint64_t lnk_st:1;
680		uint64_t reserved_1_1:1;
681		uint64_t extnd:1;
682#else
683		uint64_t extnd:1;
684		uint64_t reserved_1_1:1;
685		uint64_t lnk_st:1;
686		uint64_t an_abil:1;
687		uint64_t rm_flt:1;
688		uint64_t an_cpt:1;
689		uint64_t prb_sup:1;
690		uint64_t reserved_7_7:1;
691		uint64_t ext_st:1;
692		uint64_t hun_t2hd:1;
693		uint64_t hun_t2fd:1;
694		uint64_t ten_hd:1;
695		uint64_t ten_fd:1;
696		uint64_t hun_xhd:1;
697		uint64_t hun_xfd:1;
698		uint64_t hun_t4:1;
699		uint64_t reserved_16_63:48;
700#endif
701	} s;
702};
703
704union cvmx_pcsx_rxx_states_reg {
705	uint64_t u64;
706	struct cvmx_pcsx_rxx_states_reg_s {
707#ifdef __BIG_ENDIAN_BITFIELD
708		uint64_t reserved_16_63:48;
709		uint64_t rx_bad:1;
710		uint64_t rx_st:5;
711		uint64_t sync_bad:1;
712		uint64_t sync:4;
713		uint64_t an_bad:1;
714		uint64_t an_st:4;
715#else
716		uint64_t an_st:4;
717		uint64_t an_bad:1;
718		uint64_t sync:4;
719		uint64_t sync_bad:1;
720		uint64_t rx_st:5;
721		uint64_t rx_bad:1;
722		uint64_t reserved_16_63:48;
723#endif
724	} s;
725};
726
727union cvmx_pcsx_rxx_sync_reg {
728	uint64_t u64;
729	struct cvmx_pcsx_rxx_sync_reg_s {
730#ifdef __BIG_ENDIAN_BITFIELD
731		uint64_t reserved_2_63:62;
732		uint64_t sync:1;
733		uint64_t bit_lock:1;
734#else
735		uint64_t bit_lock:1;
736		uint64_t sync:1;
737		uint64_t reserved_2_63:62;
738#endif
739	} s;
740};
741
742union cvmx_pcsx_sgmx_an_adv_reg {
743	uint64_t u64;
744	struct cvmx_pcsx_sgmx_an_adv_reg_s {
745#ifdef __BIG_ENDIAN_BITFIELD
746		uint64_t reserved_16_63:48;
747		uint64_t link:1;
748		uint64_t ack:1;
749		uint64_t reserved_13_13:1;
750		uint64_t dup:1;
751		uint64_t speed:2;
752		uint64_t reserved_1_9:9;
753		uint64_t one:1;
754#else
755		uint64_t one:1;
756		uint64_t reserved_1_9:9;
757		uint64_t speed:2;
758		uint64_t dup:1;
759		uint64_t reserved_13_13:1;
760		uint64_t ack:1;
761		uint64_t link:1;
762		uint64_t reserved_16_63:48;
763#endif
764	} s;
765};
766
767union cvmx_pcsx_sgmx_lp_adv_reg {
768	uint64_t u64;
769	struct cvmx_pcsx_sgmx_lp_adv_reg_s {
770#ifdef __BIG_ENDIAN_BITFIELD
771		uint64_t reserved_16_63:48;
772		uint64_t link:1;
773		uint64_t reserved_13_14:2;
774		uint64_t dup:1;
775		uint64_t speed:2;
776		uint64_t reserved_1_9:9;
777		uint64_t one:1;
778#else
779		uint64_t one:1;
780		uint64_t reserved_1_9:9;
781		uint64_t speed:2;
782		uint64_t dup:1;
783		uint64_t reserved_13_14:2;
784		uint64_t link:1;
785		uint64_t reserved_16_63:48;
786#endif
787	} s;
788};
789
790union cvmx_pcsx_txx_states_reg {
791	uint64_t u64;
792	struct cvmx_pcsx_txx_states_reg_s {
793#ifdef __BIG_ENDIAN_BITFIELD
794		uint64_t reserved_7_63:57;
795		uint64_t xmit:2;
796		uint64_t tx_bad:1;
797		uint64_t ord_st:4;
798#else
799		uint64_t ord_st:4;
800		uint64_t tx_bad:1;
801		uint64_t xmit:2;
802		uint64_t reserved_7_63:57;
803#endif
804	} s;
805};
806
807union cvmx_pcsx_tx_rxx_polarity_reg {
808	uint64_t u64;
809	struct cvmx_pcsx_tx_rxx_polarity_reg_s {
810#ifdef __BIG_ENDIAN_BITFIELD
811		uint64_t reserved_4_63:60;
812		uint64_t rxovrd:1;
813		uint64_t autorxpl:1;
814		uint64_t rxplrt:1;
815		uint64_t txplrt:1;
816#else
817		uint64_t txplrt:1;
818		uint64_t rxplrt:1;
819		uint64_t autorxpl:1;
820		uint64_t rxovrd:1;
821		uint64_t reserved_4_63:60;
822#endif
823	} s;
824};
825
826#endif
827