summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/dev/cadence/if_cgem_hw.h
blob: b9a994d68d799e3830f65d1d23883e0564139c56 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
/*-
 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
 *
 * Copyright (c) 2012-2013 Thomas Skibo
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $FreeBSD$
 */

/*
 * Hardware and register defines for Cadence GEM Gigabit Ethernet
 * controller such as the one used in Zynq-7000 SoC.
 *
 * Reference: Zynq-7000 All Programmable SoC Technical Reference Manual.
 * (v1.4) November 16, 2012.  Xilinx doc UG585.  GEM is covered in Ch. 16
 * and register definitions are in appendix B.18.
 */

#ifndef _IF_CGEM_HW_H_
#define _IF_CGEM_HW_H_

/* Cadence GEM hardware register definitions. */
#define CGEM_NET_CTRL			0x000	/* Network Control */
#define   CGEM_NET_CTRL_FLUSH_DPRAM_PKT		(1<<18)
#define   CGEM_NET_CTRL_TX_PFC_PRI_PAUSE_FRAME	(1<<17)
#define   CGEM_NET_CTRL_EN_PFC_PRI_PAUSE_RX	(1<<16)
#define   CGEM_NET_CTRL_STORE_RX_TSTAMP		(1<<15)
#define   CGEM_NET_CTRL_TX_ZEROQ_PAUSE_FRAME	(1<<12)
#define   CGEM_NET_CTRL_TX_PAUSE_FRAME		(1<<11)
#define   CGEM_NET_CTRL_TX_HALT			(1<<10)
#define   CGEM_NET_CTRL_START_TX		(1<<9)
#define   CGEM_NET_CTRL_BACK_PRESSURE		(1<<8)
#define   CGEM_NET_CTRL_WREN_STAT_REGS		(1<<7)
#define   CGEM_NET_CTRL_INCR_STAT_REGS		(1<<6)
#define   CGEM_NET_CTRL_CLR_STAT_REGS		(1<<5)
#define   CGEM_NET_CTRL_MGMT_PORT_EN		(1<<4)
#define   CGEM_NET_CTRL_TX_EN			(1<<3)
#define   CGEM_NET_CTRL_RX_EN			(1<<2)
#define   CGEM_NET_CTRL_LOOP_LOCAL		(1<<1)

#define CGEM_NET_CFG			0x004	/* Netowrk Configuration */
#define   CGEM_NET_CFG_UNIDIR_EN		(1<<31)
#define   CGEM_NET_CFG_IGNORE_IPG_RX_ER		(1<<30)
#define   CGEM_NET_CFG_RX_BAD_PREAMBLE		(1<<29)
#define   CGEM_NET_CFG_IPG_STRETCH_EN		(1<<28)
#define   CGEM_NET_CFG_SGMII_EN			(1<<27)
#define   CGEM_NET_CFG_IGNORE_RX_FCS		(1<<26)
#define   CGEM_NET_CFG_RX_HD_WHILE_TX		(1<<25)
#define   CGEM_NET_CFG_RX_CHKSUM_OFFLD_EN	(1<<24)
#define   CGEM_NET_CFG_DIS_CP_PAUSE_FRAME	(1<<23)
#define   CGEM_NET_CFG_DBUS_WIDTH_32		(0<<21)
#define   CGEM_NET_CFG_DBUS_WIDTH_64		(1<<21)
#define   CGEM_NET_CFG_DBUS_WIDTH_128		(2<<21)
#define   CGEM_NET_CFG_DBUS_WIDTH_MASK		(3<<21)
#define   CGEM_NET_CFG_MDC_CLK_DIV_8		(0<<18)
#define   CGEM_NET_CFG_MDC_CLK_DIV_16		(1<<18)
#define   CGEM_NET_CFG_MDC_CLK_DIV_32		(2<<18)
#define   CGEM_NET_CFG_MDC_CLK_DIV_48		(3<<18)
/* Higher MDC clock divs are reserved values on 64bit hardware */
#define   CGEM_NET_CFG_MDC_CLK_DIV_64		(4<<18)
#define   CGEM_NET_CFG_MDC_CLK_DIV_96		(5<<18)
#define   CGEM_NET_CFG_MDC_CLK_DIV_128		(6<<18)
#define   CGEM_NET_CFG_MDC_CLK_DIV_224		(7<<18)
#define   CGEM_NET_CFG_MDC_CLK_DIV_MASK		(7<<18)
#define   CGEM_NET_CFG_FCS_REMOVE		(1<<17)
#define   CGEM_NET_CFG_LEN_ERR_FRAME_DISC	(1<<16)
#define   CGEM_NET_CFG_RX_BUF_OFFSET_SHFT	14
#define   CGEM_NET_CFG_RX_BUF_OFFSET_MASK	(3<<14)
#define   CGEM_NET_CFG_RX_BUF_OFFSET(n)		((n)<<14)
#define   CGEM_NET_CFG_PAUSE_EN			(1<<13)
#define   CGEM_NET_CFG_RETRY_TEST		(1<<12)
#define   CGEM_NET_CFG_PCS_SEL			(1<<11)
#define   CGEM_NET_CFG_GIGE_EN			(1<<10)
#define   CGEM_NET_CFG_EXT_ADDR_MATCH_EN	(1<<9)
#define   CGEM_NET_CFG_1536RXEN			(1<<8)
#define   CGEM_NET_CFG_UNI_HASH_EN		(1<<7)
#define   CGEM_NET_CFG_MULTI_HASH_EN		(1<<6)
#define   CGEM_NET_CFG_NO_BCAST			(1<<5)
#define   CGEM_NET_CFG_COPY_ALL			(1<<4)
#define   CGEM_NET_CFG_DISC_NON_VLAN		(1<<2)
#define   CGEM_NET_CFG_FULL_DUPLEX		(1<<1)
#define   CGEM_NET_CFG_SPEED100			(1<<0)

#define CGEM_NET_STAT			0x008	/* Network Status */
#define   CGEM_NET_STAT_PFC_PRI_PAUSE_NEG	(1<<6)
#define   CGEM_NET_STAT_PCS_AUTONEG_PAUSE_TX_RES (1<<5)
#define   CGEM_NET_STAT_PCS_AUTONEG_PAUSE_RX_RES (1<<4)
#define   CGEM_NET_STAT_PCS_AUTONEG_DUP_RES	(1<<3)
#define   CGEM_NET_STAT_PHY_MGMT_IDLE		(1<<2)
#define   CGEM_NET_STAT_MDIO_IN_PIN_STATUS	(1<<1)
#define   CGEM_NET_STAT_PCS_LINK_STATE		(1<<0)

#define CGEM_USER_IO			0x00C	/* User I/O */

#define CGEM_DMA_CFG			0x010	/* DMA Config */
#define   CGEM_DMA_CFG_ADDR_BUS_64		(1 << 30)
#define   CGEM_DMA_CFG_DISC_WHEN_NO_AHB		(1<<24)
#define   CGEM_DMA_CFG_RX_BUF_SIZE_SHIFT	16
#define   CGEM_DMA_CFG_RX_BUF_SIZE_MASK		(0xff<<16)
#define   CGEM_DMA_CFG_RX_BUF_SIZE(sz)		((((sz) + 63) / 64) << 16)
#define   CGEM_DMA_CFG_CHKSUM_GEN_OFFLOAD_EN	(1<<11)
#define   CGEM_DMA_CFG_TX_PKTBUF_MEMSZ_SEL	(1<<10)
#define   CGEM_DMA_CFG_RX_PKTBUF_MEMSZ_SEL_1K	(0<<8)
#define   CGEM_DMA_CFG_RX_PKTBUF_MEMSZ_SEL_2K	(1<<8)
#define   CGEM_DMA_CFG_RX_PKTBUF_MEMSZ_SEL_4K	(2<<8)
#define   CGEM_DMA_CFG_RX_PKTBUF_MEMSZ_SEL_8K	(3<<8)
#define   CGEM_DMA_CFG_RX_PKTBUF_MEMSZ_SEL_MASK	(3<<8)
#define   CGEM_DMA_CFG_AHB_ENDIAN_SWAP_PKT_EN	(1<<7)
#define   CGEM_DMA_CFG_AHB_ENDIAN_SWAP_MGMT_EN	(1<<6)
#define   CGEM_DMA_CFG_AHB_FIXED_BURST_LEN_1	(1<<0)
#define   CGEM_DMA_CFG_AHB_FIXED_BURST_LEN_4	(4<<0)
#define   CGEM_DMA_CFG_AHB_FIXED_BURST_LEN_8	(8<<0)
#define   CGEM_DMA_CFG_AHB_FIXED_BURST_LEN_16	(16<<0)
#define   CGEM_DMA_CFG_AHB_FIXED_BURST_LEN_MASK	(0x1f<<0)

#define CGEM_TX_STAT			0x014	/* Transmit Status */
#define   CGEM_TX_STAT_HRESP_NOT_OK		(1<<8)
#define   CGEM_TX_STAT_LATE_COLL		(1<<7)
#define   CGEM_TX_STAT_UNDERRUN			(1<<6)
#define   CGEM_TX_STAT_COMPLETE			(1<<5)
#define   CGEM_TX_STAT_CORRUPT_AHB_ERR		(1<<4)
#define   CGEM_TX_STAT_GO			(1<<3)
#define   CGEM_TX_STAT_RETRY_LIMIT_EXC		(1<<2)
#define   CGEM_TX_STAT_COLLISION		(1<<1)
#define   CGEM_TX_STAT_USED_BIT_READ		(1<<0)
#define   CGEM_TX_STAT_ALL			0x1ff

#define CGEM_RX_QBAR			0x018	/* Receive Buf Q Base Addr */
#define CGEM_TX_QBAR			0x01C	/* Transmit Buf Q Base Addr */

#define CGEM_RX_STAT			0x020	/* Receive Status */
#define   CGEM_RX_STAT_HRESP_NOT_OK		(1<<3)
#define   CGEM_RX_STAT_OVERRUN			(1<<2)
#define   CGEM_RX_STAT_FRAME_RECD		(1<<1)
#define   CGEM_RX_STAT_BUF_NOT_AVAIL		(1<<0)
#define   CGEM_RX_STAT_ALL			0xf

#define CGEM_INTR_STAT			0x024	/* Interrupt Status */
#define CGEM_INTR_EN			0x028	/* Interrupt Enable */
#define CGEM_INTR_DIS			0x02C	/* Interrupt Disable */
#define CGEM_INTR_MASK			0x030	/* Interrupt Mask */
#define   CGEM_INTR_TSU_SEC_INCR		(1<<26)
#define   CGEM_INTR_PDELAY_RESP_TX		(1<<25)
#define   CGEM_INTR_PDELAY_REQ_TX		(1<<24)
#define   CGEM_INTR_PDELAY_RESP_RX		(1<<23)
#define   CGEM_INTR_PDELAY_REQ_RX		(1<<22)
#define   CGEM_INTR_SYNX_TX			(1<<21)
#define   CGEM_INTR_DELAY_REQ_TX		(1<<20)
#define   CGEM_INTR_SYNC_RX			(1<<19)
#define   CGEM_INTR_DELAY_REQ_RX		(1<<18)
#define   CGEM_INTR_PARTNER_PG_RX		(1<<17)
#define   CGEM_INTR_AUTONEG_COMPL		(1<<16)
#define   CGEM_INTR_EXT_INTR			(1<<15)
#define   CGEM_INTR_PAUSE_TX			(1<<14)
#define   CGEM_INTR_PAUSE_ZERO			(1<<13)
#define   CGEM_INTR_PAUSE_NONZEROQ_RX		(1<<12)
#define   CGEM_INTR_HRESP_NOT_OK		(1<<11)
#define   CGEM_INTR_RX_OVERRUN			(1<<10)
#define   CGEM_INTR_LINK_CHNG			(1<<9)
#define   CGEM_INTR_TX_COMPLETE			(1<<7)
#define   CGEM_INTR_TX_CORRUPT_AHB_ERR		(1<<6)
#define   CGEM_INTR_RETRY_EX_LATE_COLLISION	(1<<5)
#define   CGEM_INTR_TX_USED_READ		(1<<3)
#define   CGEM_INTR_RX_USED_READ		(1<<2)
#define   CGEM_INTR_RX_COMPLETE			(1<<1)
#define   CGEM_INTR_MGMT_SENT			(1<<0)
#define   CGEM_INTR_ALL				0x7FFFEFF

#define CGEM_PHY_MAINT			0x034	/* PHY Maintenenace */
#define   CGEM_PHY_MAINT_CLAUSE_22		(1<<30)
#define   CGEM_PHY_MAINT_OP_SHIFT		28
#define   CGEM_PHY_MAINT_OP_MASK		(3<<28)
#define   CGEM_PHY_MAINT_OP_READ		(2<<28)
#define   CGEM_PHY_MAINT_OP_WRITE		(1<<28)
#define   CGEM_PHY_MAINT_PHY_ADDR_SHIFT		23
#define   CGEM_PHY_MAINT_PHY_ADDR_MASK		(0x1f<<23)
#define   CGEM_PHY_MAINT_REG_ADDR_SHIFT		18
#define   CGEM_PHY_MAINT_REG_ADDR_MASK		(0x1f<<18)
#define   CGEM_PHY_MAINT_MUST_10		(2<<16)
#define   CGEM_PHY_MAINT_DATA_MASK		0xffff

#define CGEM_RX_PAUSEQ			0x038	/* Received Pause Quantum */
#define CGEM_TX_PAUSEQ			0x03C	/* Transmit Puase Quantum */

#define CGEM_HASH_BOT			0x080	/* Hash Reg Bottom [31:0] */
#define CGEM_HASH_TOP			0x084	/* Hash Reg Top [63:32] */
#define CGEM_SPEC_ADDR_LOW(n)		(0x088+(n)*8)	/* Specific Addr low */
#define CGEM_SPEC_ADDR_HI(n)		(0x08C+(n)*8)	/* Specific Addr hi */

#define CGEM_TYPE_ID_MATCH1		0x0A8	/* Type ID Match 1 */
#define   CGEM_TYPE_ID_MATCH_COPY_EN		(1<<31)
#define CGEM_TYPE_ID_MATCH2		0x0AC	/* Type ID Match 2 */
#define CGEM_TYPE_ID_MATCH3		0x0B0	/* Type ID Match 3 */
#define CGEM_TYPE_ID_MATCH4		0x0B4	/* Type ID Match 4 */

#define CGEM_WAKE_ON_LAN		0x0B8	/* Wake on LAN Register */
#define   CGEM_WOL_MULTI_HASH_EN		(1<<19)
#define   CGEM_WOL_SPEC_ADDR1_EN		(1<<18)
#define   CGEM_WOL_ARP_REQ_EN			(1<<17)
#define   CGEM_WOL_MAGIC_PKT_EN			(1<<16)
#define   CGEM_WOL_ARP_REQ_IP_ADDR_MASK		0xffff

#define CGEM_IPG_STRETCH		/* IPG Stretch Register */

#define CGEM_STACKED_VLAN		0x0C0	/* Stacked VLAN Register */
#define   CGEM_STACKED_VLAN_EN			(1<<31)

#define CGEM_TX_PFC_PAUSE		0x0C4	/* Transmit PFC Pause Reg */
#define   CGEM_TX_PFC_PAUSEQ_SEL_SHIFT		8
#define   CGEM_TX_PFC_PAUSEQ_SEL_MASK		(0xff<<8)
#define   CGEM_TX_PFC_PAUSE_PRI_EN_VEC_VAL_MASK 0xff

#define CGEM_SPEC_ADDR1_MASK_BOT	0x0C8	/* Specific Addr Mask1 [31:0]*/
#define CGEM_SPEC_ADDR1_MASK_TOP	0x0CC	/* Specific Addr Mask1[47:32]*/
#define CGEM_MODULE_ID			0x0FC	/* Module ID */
#define CGEM_OCTETS_TX_BOT		0x100	/* Octets xmitted [31:0] */
#define CGEM_OCTETS_TX_TOP		0x104	/* Octets xmitted [47:32] */
#define CGEM_FRAMES_TX			0x108	/* Frames xmitted */
#define CGEM_BCAST_FRAMES_TX		0x10C	/* Broadcast Frames xmitted */
#define CGEM_MULTI_FRAMES_TX		0x110	/* Multicast Frames xmitted */
#define CGEM_PAUSE_FRAMES_TX		0x114	/* Pause Frames xmitted */
#define CGEM_FRAMES_64B_TX		0x118	/* 64-Byte Frames xmitted */
#define CGEM_FRAMES_65_127B_TX		0x11C	/* 65-127 Byte Frames xmitted*/
#define CGEM_FRAMES_128_255B_TX		0x120	/* 128-255 Byte Frames xmit */
#define CGEM_FRAMES_256_511B_TX		0x124	/* 256-511 Byte Frames xmit */
#define CGEM_FRAMES_512_1023B_TX	0x128	/* 512-1023 Byte frames xmit */
#define CGEM_FRAMES_1024_1518B_TX	0x12C	/* 1024-1518 Byte frames xmit*/
#define CGEM_TX_UNDERRUNS		0x134	/* Transmit Under-runs */
#define CGEM_SINGLE_COLL_FRAMES		0x138	/* Single-Collision Frames */
#define CGEM_MULTI_COLL_FRAMES		0x13C	/* Multi-Collision Frames */
#define CGEM_EXCESSIVE_COLL_FRAMES	0x140	/* Excessive Collision Frames*/
#define CGEM_LATE_COLL			0x144	/* Late Collisions */
#define CGEM_DEFERRED_TX_FRAMES		0x148	/* Deferred Transmit Frames */
#define CGEM_CARRIER_SENSE_ERRS		0x14C	/* Carrier Sense Errors */
#define CGEM_OCTETS_RX_BOT		0x150	/* Octets Received [31:0] */
#define CGEM_OCTETS_RX_TOP		0x154	/* Octets Received [47:32] */
#define CGEM_FRAMES_RX			0x158	/* Frames Received */
#define CGEM_BCAST_FRAMES_RX		0x15C	/* Broadcast Frames Received */
#define CGEM_MULTI_FRAMES_RX		0x160	/* Multicast Frames Received */
#define CGEM_PAUSE_FRAMES_RX		0x164	/* Pause Frames Reeived */
#define CGEM_FRAMES_64B_RX		0x168	/* 64-Byte Frames Received */
#define CGEM_FRAMES_65_127B_RX		0x16C	/* 65-127 Byte Frames Rx'd */
#define CGEM_FRAMES_128_255B_RX		0x170	/* 128-255 Byte Frames Rx'd */
#define CGEM_FRAMES_256_511B_RX		0x174	/* 256-511 Byte Frames Rx'd */
#define CGEM_FRAMES_512_1023B_RX	0x178	/* 512-1023 Byte Frames Rx'd */
#define CGEM_FRAMES_1024_1518B_RX	0x17C	/* 1024-1518 Byte Frames Rx'd*/
#define CGEM_UNDERSZ_RX			0x184	/* Undersize Frames Rx'd */
#define CGEM_OVERSZ_RX			0x188	/* Oversize Frames Rx'd */
#define CGEM_JABBERS_RX			0x18C	/* Jabbers received */
#define CGEM_FCS_ERRS			0x190	/* Frame Check Sequence Errs */
#define CGEM_LENGTH_FIELD_ERRS		0x194	/* Length Firled Frame Errs */
#define CGEM_RX_SYMBOL_ERRS		0x198	/* Receive Symbol Errs */
#define CGEM_ALIGN_ERRS 		0x19C	/* Alignment Errors */
#define CGEM_RX_RESOURCE_ERRS		0x1A0	/* Receive Resoure Errors */
#define CGEM_RX_OVERRUN_ERRS		0x1A4	/* Receive Overrun Errors */
#define CGEM_IP_HDR_CKSUM_ERRS		0x1A8	/* IP Hdr Checksum Errors */
#define CGEM_TCP_CKSUM_ERRS		0x1AC	/* TCP Checksum Errors */
#define CGEM_UDP_CKSUM_ERRS		0x1B0	/* UDP Checksum Errors */
#define CGEM_TIMER_STROBE_S		0x1C8	/* 1588 timer sync strobe s */
#define CGEM_TIMER_STROBE_NS		0x1CC	/* timer sync strobe ns */
#define CGEM_TIMER_S			0x1D0	/* 1588 timer seconds */
#define CGEM_TIMER_NS			0x1D4	/* 1588 timer ns */
#define CGEM_ADJUST			0x1D8	/* 1588 timer adjust */
#define CGEM_INCR			0x1DC	/* 1588 timer increment */
#define CGEM_PTP_TX_S			0x1E0	/* PTP Event Frame xmit secs */
#define CGEM_PTP_TX_NS			0x1E4	/* PTP Event Frame xmit ns */
#define CGEM_PTP_RX_S			0x1E8	/* PTP Event Frame rcv'd s */
#define CGEM_PTP_RX_NS			0x1EC	/* PTP Event Frame rcv'd ns */
#define CGEM_PTP_PEER_TX_S		0x1F0	/* PTP Peer Event xmit s */
#define CGEM_PTP_PEER_TX_NS		0x1F4	/* PTP Peer Event xmit ns */
#define CGEM_PTP_PEER_RX_S		0x1F8	/* PTP Peer Event rcv'd s */
#define CGEM_PTP_PEER_RX_NS		0x1FC	/* PTP Peer Event rcv'd ns */

#define CGEM_DESIGN_CFG1		0x280	/* Design Configuration 1 */
#define   CGEM_DESIGN_CFG1_AXI_CACHE_WIDTH_MASK	(0xfU << 28)
#define   CGEM_DESIGN_CFG1_DMA_BUS_WIDTH_MASK	(7 << 25)
#define   CGEM_DESIGN_CFG1_DMA_BUS_WIDTH_32	(1 << 25)
#define   CGEM_DESIGN_CFG1_DMA_BUS_WIDTH_64	(2 << 25)
#define   CGEM_DESIGN_CFG1_DMA_BUS_WIDTH_128	(4 << 25)
#define   CGEM_DESIGN_CFG1_IRQ_READ_CLR		(1 << 23)
#define   CGEM_DESIGN_CFG1_NO_SNAPSHOT		(1 << 22)
#define   CGEM_DESIGN_CFG1_NO_STATS		(1 << 21)
#define   CGEM_DESIGN_CFG1_NO_SCAN_PINS		(1 << 20)
#define   CGEM_DESIGN_CFG1_USER_IN_WIDTH_MASK	(0x1f << 15)
#define   CGEM_DESIGN_CFG1_USER_OUT_WIDTH_MASK	(0x1f << 10)
#define   CGEM_DESIGN_CFG1_USER_IO		(1 << 9)
#define   CGEM_DESIGN_CFG1_APB_REV2		(1 << 8)
#define   CGEM_DESIGN_CFG1_APB_REV1		(1 << 7)
#define   CGEM_DESIGN_CFG1_EXT_FIFO_INTERFACE	(1 << 6)
#define   CGEM_DESIGN_CFG1_NO_INT_LOOPBACK	(1 << 5)
#define   CGEM_DESIGN_CFG1_INT_LOOPBACK		(1 << 4)
#define   CGEM_DESIGN_CFG1_TDC_50		(1 << 3)
#define   CGEM_DESIGN_CFG1_RDC_50		(1 << 2)
#define   CGEM_DESIGN_CFG1_SERDES		(1 << 1)
#define   CGEM_DESIGN_CFG1_NO_PCS		(1 << 0)

#define CGEM_DESIGN_CFG2		0x284	/* Design Configuration 2 */
#define   CGEM_DESIGN_CFG2_TX_PBUF_ADDR_SHIFT	26
#define   CGEM_DESIGN_CFG2_TX_PBUF_ADDR_MASK	(0xf<<26)
#define   CGEM_DESIGN_CFG2_RX_PBUF_ADDR_SHIFT	22
#define   CGEM_DESIGN_CFG2_RX_PBUF_ADDR_MASK	(0xf<<22)
#define   CGEM_DESIGN_CFG2_TX_PKT_BUF		(1<<21)
#define   CGEM_DESIGN_CFG2_RX_PKT_BUF		(1<<20)
#define   CGEM_DESIGN_CFG2_HPROT_VAL_SHIFT	16
#define   CGEM_DESIGN_CFG2_HPROT_VAL_MASK	(0xf<<16)
#define   CGEM_DESIGN_CFG2_JUMBO_MAX_LEN_MASK	0xffff

#define CGEM_DESIGN_CFG3		0x288	/* Design Configuration 3 */
#define   CGEM_DESIGN_CFG3_RX_BASE2_FIFO_SZ_MASK (0xffff<<16)
#define   CGEM_DESIGN_CFG3_RX_BASE2_FIFO_SZ_SHIFT 16
#define   CGEM_DESIGN_CFG3_RX_FIFO_SIZE_MASK	0xffff

#define CGEM_DESIGN_CFG4		0x28C	/* Design Configuration 4 */
#define   CGEM_DESIGN_CFG4_TX_BASE2_FIFO_SZ_SHIFT 16
#define   CGEM_DESIGN_CFG4_TX_BASE2_FIFO_SZ_MASK	(0xffff<<16)
#define   CGEM_DESIGN_CFG4_TX_FIFO_SIZE_MASK	0xffff

#define CGEM_DESIGN_CFG5		0x290	/* Design Configuration 5 */
#define   CGEM_DESIGN_CFG5_TSU_CLK		(1<<28)
#define   CGEM_DESIGN_CFG5_RX_BUF_LEN_DEF_SHIFT 20
#define   CGEM_DESIGN_CFG5_RX_BUF_LEN_DEF_MASK	(0xff<<20)
#define   CGEM_DESIGN_CFG5_TX_PBUF_SIZE_DEF	(1<<19)
#define   CGEM_DESIGN_CFG5_RX_PBUF_SIZE_DEF_SHIFT 17
#define   CGEM_DESIGN_CFG5_RX_PBUF_SIZE_DEF_MASK (3<<17)
#define   CGEM_DESIGN_CFG5_ENDIAN_SWAP_DEF_SHIFT 15
#define   CGEM_DESIGN_CFG5_ENDIAN_SWAP_DEF_MASK (3<<15)
#define   CGEM_DESIGN_CFG5_MDC_CLOCK_DIV_SHIFT	12
#define   CGEM_DESIGN_CFG5_MDC_CLOCK_DIV_MASK	(7<<12)
#define   CGEM_DESIGN_CFG5_DMA_BUS_WIDTH_SHIFT	10
#define   CGEM_DESIGN_CFG5_DMA_BUS_WIDTH_MASK	(3<<10)
#define   CGEM_DESIGN_CFG5_PHY_IDENT		(1<<9)
#define   CGEM_DESIGN_CFG5_TSU			(1<<8)
#define   CGEM_DESIGN_CFG5_TX_FIFO_CNT_WIDTH_SHIFT 4
#define   CGEM_DESIGN_CFG5_TX_FIFO_CNT_WIDTH_MASK (0xf<<4)
#define   CGEM_DESIGN_CFG5_RX_FIFO_CNT_WIDTH_MASK 0xf

#define CGEM_DESIGN_CFG6		0x294	/* Design Configuration 6 */
#define   CGEM_DESIGN_CFG6_PBUF_CUTTHRU		(1 << 25) /* 64-bit addr cap */
#define   CGEM_DESIGN_CFG6_ADDR_64B		(1 << 23) /* 64-bit addr cap */
#define   CGEM_DESIGN_CFG6_DMA_PRIO_Q_MASK	0xfffe
#define   CGEM_DESIGN_CFG6_DMA_PRIO_Q(n)	(1 << (n))

#define CGEM_TX_QN_BAR(n)		(0x440 + ((n) - 1) * 4)
#define CGEM_RX_QN_BAR(n)		(0x480 + ((n) - 1) * 4)

#define CGEM_TX_QBAR_HI			0x4C8
#define CGEM_RX_QBAR_HI			0x4D4

/* Transmit Descriptors */
struct cgem_tx_desc {
	uint32_t	addr;
	uint32_t	ctl;
#define CGEM_TXDESC_USED			(1<<31) /* done transmitting */
#define CGEM_TXDESC_WRAP			(1<<30)	/* end of descr ring */
#define CGEM_TXDESC_RETRY_ERR			(1<<29)
#define CGEM_TXDESC_AHB_ERR			(1<<27)
#define CGEM_TXDESC_LATE_COLL			(1<<26)
#define CGEM_TXDESC_CKSUM_GEN_STAT_MASK		(7<<20)
#define CGEM_TXDESC_CKSUM_GEN_STAT_VLAN_HDR_ERR (1<<20)
#define CGEM_TXDESC_CKSUM_GEN_STAT_SNAP_HDR_ERR (2<<20)
#define CGEM_TXDESC_CKSUM_GEN_STAT_IP_HDR_ERR	(3<<20)
#define CGEM_TXDESC_CKSUM_GEN_STAT_UNKNOWN_TYPE (4<<20)
#define CGEM_TXDESC_CKSUM_GEN_STAT_UNSUPP_FRAG	(5<<20)
#define CGEM_TXDESC_CKSUM_GEN_STAT_NOT_TCPUDP	(6<<20)
#define CGEM_TXDESC_CKSUM_GEN_STAT_SHORT_PKT	(7<<20)
#define CGEM_TXDESC_NO_CRC_APPENDED		(1<<16)
#define CGEM_TXDESC_LAST_BUF			(1<<15)	/* last buf in frame */
#define CGEM_TXDESC_LENGTH_MASK		0x3fff
#if defined(CGEM64) && defined(__rtems__)
	uint32_t	addrhi;
	uint32_t	unused;
#endif
};

struct cgem_rx_desc {
	uint32_t	addr;
#define CGEM_RXDESC_WRAP			(1<<1)	/* goes in addr! */
#define CGEM_RXDESC_OWN				(1<<0)	/* buf filled */
	uint32_t	ctl;
#define CGEM_RXDESC_BCAST			(1<<31)	/* all 1's broadcast */
#define CGEM_RXDESC_MULTI_MATCH			(1<<30)	/* mutlicast match */
#define CGEM_RXDESC_UNICAST_MATCH		(1<<29)
#define CGEM_RXDESC_EXTERNAL_MATCH		(1<<28) /* ext addr match */
#define CGEM_RXDESC_SPEC_MATCH_SHIFT		25
#define CGEM_RXDESC_SPEC_MATCH_MASK		(3<<25)
#define CGEM_RXDESC_TYPE_ID_MATCH_SHIFT		22
#define CGEM_RXDESC_TYPE_ID_MATCH_MASK		(3<<22)
#define CGEM_RXDESC_CKSUM_STAT_MASK		(3<<22)	/* same field above */
#define CGEM_RXDESC_CKSUM_STAT_NONE		(0<<22)
#define CGEM_RXDESC_CKSUM_STAT_IP_GOOD		(1<<22)
#define CGEM_RXDESC_CKSUM_STAT_TCP_GOOD		(2<<22) /* and ip good */
#define CGEM_RXDESC_CKSUM_STAT_UDP_GOOD		(3<<22) /* and ip good */
#define CGEM_RXDESC_VLAN_DETECTED		(1<<21)
#define CGEM_RXDESC_PRIO_DETECTED		(1<<20)
#define CGEM_RXDESC_VLAN_PRIO_SHIFT		17
#define CGEM_RXDESC_VLAN_PRIO_MASK		(7<<17)
#define CGEM_RXDESC_CFI				(1<<16)
#define CGEM_RXDESC_EOF				(1<<15)	/* end of frame */
#define CGEM_RXDESC_SOF				(1<<14) /* start of frame */
#define CGEM_RXDESC_BAD_FCS			(1<<13)
#define CGEM_RXDESC_LENGTH_MASK			0x1fff
#if defined(CGEM64) && defined(__rtems__)
	uint32_t	addrhi;
	uint32_t	unused;
#endif
};

#endif /* _IF_CGEM_HW_H_ */