if_lpereg.h revision 330897
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2011 Jakub Wojciech Klama <jceel@FreeBSD.org>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 * $FreeBSD: stable/11/sys/arm/lpc/if_lpereg.h 330897 2018-03-14 03:19:51Z eadler $
29 */
30
31#ifndef	_ARM_LPC_IF_LPEREG_H
32#define	_ARM_LPC_IF_LPEREG_H
33
34#define	LPE_MAC1		0x000
35#define	LPE_MAC1_RXENABLE	(1 << 0)
36#define	LPE_MAC1_PASSALL	(1 << 1)
37#define	LPE_MAC1_RXFLOWCTRL	(1 << 2)
38#define	LPE_MAC1_TXFLOWCTRL	(1 << 3)
39#define	LPE_MAC1_LOOPBACK	(1 << 4)
40#define	LPE_MAC1_RESETTX	(1 << 8)
41#define	LPE_MAC1_RESETMCSTX	(1 << 9)
42#define	LPE_MAC1_RESETRX	(1 << 10)
43#define	LPE_MAC1_RESETMCSRX	(1 << 11)
44#define	LPE_MAC1_SIMRESET	(1 << 14)
45#define	LPE_MAC1_SOFTRESET	(1 << 15)
46#define	LPE_MAC2		0x004
47#define	LPE_MAC2_FULLDUPLEX	(1 << 0)
48#define	LPE_MAC2_FRAMELENCHECK	(1 << 1)
49#define	LPE_MAC2_HUGEFRAME	(1 << 2)
50#define	LPE_MAC2_DELAYEDCRC	(1 << 3)
51#define	LPE_MAC2_CRCENABLE	(1 << 4)
52#define	LPE_MAC2_PADCRCENABLE	(1 << 5)
53#define	LPE_MAC2_VLANPADENABLE	(1 << 6)
54#define	LPE_MAC2_AUTOPADENABLE	(1 << 7)
55#define	LPE_MAC2_PUREPREAMBLE	(1 << 8)
56#define	LPE_MAC2_LONGPREAMBLE	(1 << 9)
57#define	LPE_MAC2_NOBACKOFF	(1 << 12)
58#define	LPE_MAC2_BACKPRESSURE	(1 << 13)
59#define	LPE_MAC2_EXCESSDEFER	(1 << 14)
60#define	LPE_IPGT		0x008
61#define	LPE_IPGR		0x00c
62#define	LPE_CLRT		0x010
63#define	LPE_MAXF		0x014
64#define	LPE_SUPP		0x018
65#define	LPE_SUPP_SPEED		(1 << 8)
66#define	LPE_TEST		0x01c
67#define	LPE_MCFG		0x020
68#define	LPE_MCFG_SCANINCR	(1 << 0)
69#define	LPE_MCFG_SUPPREAMBLE	(1 << 1)
70#define	LPE_MCFG_CLKSEL(_n)	((_n & 0x7) << 2)
71#define	LPC_MCFG_RESETMII	(1 << 15)
72#define	LPE_MCMD		0x024
73#define	LPE_MCMD_READ		(1 << 0)
74#define	LPE_MCMD_WRITE		(0 << 0)
75#define	LPE_MCMD_SCAN		(1 << 1)
76#define	LPE_MADR		0x028
77#define	LPE_MADR_REGMASK	0x1f
78#define	LPE_MADR_REGSHIFT	0
79#define	LPE_MADR_PHYMASK	0x1f
80#define	LPE_MADR_PHYSHIFT	8
81#define	LPE_MWTD		0x02c
82#define	LPE_MWTD_DATAMASK	0xffff
83#define	LPE_MRDD		0x030
84#define	LPE_MRDD_DATAMASK	0xffff
85#define	LPE_MIND		0x034
86#define	LPE_MIND_BUSY		(1 << 0)
87#define	LPE_MIND_SCANNING	(1 << 1)
88#define	LPE_MIND_INVALID	(1 << 2)
89#define	LPE_MIND_MIIFAIL	(1 << 3)
90#define	LPE_SA0			0x040
91#define	LPE_SA1			0x044
92#define	LPE_SA2			0x048
93#define	LPE_COMMAND		0x100
94#define	LPE_COMMAND_RXENABLE	(1 << 0)
95#define	LPE_COMMAND_TXENABLE	(1 << 1)
96#define	LPE_COMMAND_REGRESET	(1 << 3)
97#define	LPE_COMMAND_TXRESET	(1 << 4)
98#define	LPE_COMMAND_RXRESET	(1 << 5)
99#define	LPE_COMMAND_PASSRUNTFRAME	(1 << 6)
100#define	LPE_COMMAND_PASSRXFILTER	(1 << 7)
101#define	LPE_COMMAND_TXFLOWCTL		(1 << 8)
102#define	LPE_COMMAND_RMII		(1 << 9)
103#define	LPE_COMMAND_FULLDUPLEX		(1 << 10)
104#define	LPE_STATUS		0x104
105#define	LPE_STATUS_RXACTIVE		(1 << 0)
106#define	LPE_STATUS_TXACTIVE		(1 << 1)
107#define	LPE_RXDESC		0x108
108#define	LPE_RXSTATUS		0x10c
109#define	LPE_RXDESC_NUMBER	0x110
110#define	LPE_RXDESC_PROD		0x114
111#define	LPE_RXDESC_CONS		0x118
112#define	LPE_TXDESC		0x11c
113#define	LPE_TXSTATUS		0x120
114#define	LPE_TXDESC_NUMBER	0x124
115#define	LPE_TXDESC_PROD		0x128
116#define	LPE_TXDESC_CONS		0x12c
117#define	LPE_TSV0		0x158
118#define	LPE_TSV1		0x15c
119#define	LPE_RSV			0x160
120#define	LPE_FLOWCONTROL_COUNTER	0x170
121#define	LPE_FLOWCONTROL_STATUS	0x174
122#define	LPE_RXFILTER_CTRL	0x200
123#define	LPE_RXFILTER_UNICAST	(1 << 0)
124#define	LPE_RXFILTER_BROADCAST	(1 << 1)
125#define LPE_RXFILTER_MULTICAST	(1 << 2)
126#define	LPE_RXFILTER_UNIHASH	(1 << 3)
127#define	LPE_RXFILTER_MULTIHASH	(1 << 4)
128#define	LPE_RXFILTER_PERFECT	(1 << 5)
129#define	LPE_RXFILTER_WOL	(1 << 12)
130#define	LPE_RXFILTER_FILTWOL	(1 << 13)
131#define	LPE_RXFILTER_WOL_STATUS	0x204
132#define	LPE_RXFILTER_WOL_CLEAR	0x208
133#define	LPE_HASHFILTER_L	0x210
134#define	LPE_HASHFILTER_H	0x214
135#define	LPE_INTSTATUS		0xfe0
136#define	LPE_INTENABLE		0xfe4
137#define	LPE_INTCLEAR		0xfe8
138#define	LPE_INTSET		0xfec
139#define	LPE_INT_RXOVERRUN	(1 << 0)
140#define	LPE_INT_RXERROR		(1 << 1)
141#define	LPE_INT_RXFINISH	(1 << 2)
142#define	LPE_INT_RXDONE		(1 << 3)
143#define	LPE_INT_TXUNDERRUN	(1 << 4)
144#define	LPE_INT_TXERROR		(1 << 5)
145#define	LPE_INT_TXFINISH	(1 << 6)
146#define	LPE_INT_TXDONE		(1 << 7)
147#define	LPE_INT_SOFTINT		(1 << 12)
148#define	LPE_INTWAKEUPINT	(1 << 13)
149#define	LPE_POWERDOWN		0xff4
150
151#define	LPE_DESC_ALIGN		8
152#define	LPE_TXDESC_NUM		128
153#define	LPE_RXDESC_NUM		128
154#define	LPE_TXDESC_SIZE		(LPE_TXDESC_NUM * sizeof(struct lpe_hwdesc))
155#define	LPE_RXDESC_SIZE		(LPE_RXDESC_NUM * sizeof(struct lpe_hwdesc))
156#define	LPE_TXSTATUS_SIZE	(LPE_TXDESC_NUM * sizeof(struct lpe_hwstatus))
157#define	LPE_RXSTATUS_SIZE	(LPE_RXDESC_NUM * sizeof(struct lpe_hwstatus))
158#define	LPE_MAXFRAGS		8
159
160struct lpe_hwdesc {
161	uint32_t	lhr_data;
162	uint32_t	lhr_control;
163};
164
165struct lpe_hwstatus {
166	uint32_t	lhs_info;
167	uint32_t	lhs_crc;
168};
169
170#define	LPE_INC(x, y)		(x) = ((x) == ((y)-1)) ? 0 : (x)+1
171
172/* These are valid for both Rx and Tx descriptors */
173#define	LPE_HWDESC_SIZE_MASK	(1 << 10)
174#define	LPE_HWDESC_INTERRUPT	(1U << 31)
175
176/* These are valid for Tx descriptors */
177#define	LPE_HWDESC_LAST		(1 << 30)
178#define	LPE_HWDESC_CRC		(1 << 29)
179#define	LPE_HWDESC_PAD		(1 << 28)
180#define	LPE_HWDESC_HUGE		(1 << 27)
181#define	LPE_HWDESC_OVERRIDE	(1 << 26)
182
183/* These are valid for Tx status descriptors */
184#define	LPE_HWDESC_COLLISIONS(_n) (((_n) >> 21) & 0x7)
185#define	LPE_HWDESC_DEFER	(1 << 25)
186#define	LPE_HWDESC_EXCDEFER	(1 << 26)
187#define	LPE_HWDESC_EXCCOLL	(1 << 27)
188#define	LPE_HWDESC_LATECOLL	(1 << 28)
189#define	LPE_HWDESC_UNDERRUN	(1 << 29)
190#define	LPE_HWDESC_TXNODESCR	(1 << 30)
191#define	LPE_HWDESC_ERROR	(1U << 31)
192
193/* These are valid for Rx status descriptors */
194#define	LPE_HWDESC_CONTROL	(1 << 18)
195#define	LPE_HWDESC_VLAN		(1 << 19)
196#define	LPE_HWDESC_FAILFILTER	(1 << 20)
197#define	LPE_HWDESC_MULTICAST	(1 << 21)
198#define	LPE_HWDESC_BROADCAST	(1 << 22)
199#define	LPE_HWDESC_CRCERROR	(1 << 23)
200#define	LPE_HWDESC_SYMBOLERROR	(1 << 24)
201#define	LPE_HWDESC_LENGTHERROR	(1 << 25)
202#define	LPE_HWDESC_RANGEERROR	(1 << 26)
203#define	LPE_HWDESC_ALIGNERROR	(1 << 27)
204#define	LPE_HWDESC_OVERRUN	(1 << 28)
205#define	LPE_HWDESC_RXNODESCR	(1 << 29)
206#define	LPE_HWDESC_LASTFLAG	(1 << 30)
207#define	LPE_HWDESC_ERROR	(1U << 31)
208
209
210#endif	/* _ARM_LPC_IF_LPEREG_H */
211