summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/arm/lpc/if_lpereg.h
blob: 8e1512be0d44e68743d64c099c766e9b9f134569 (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
/*-
 * Copyright (c) 2011 Jakub Wojciech Klama <jceel@FreeBSD.org>
 * 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 THE 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 THE 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$
 */

#ifndef	_ARM_LPC_IF_LPEREG_H
#define	_ARM_LPC_IF_LPEREG_H

#define	LPE_MAC1		0x000
#define	LPE_MAC1_RXENABLE	(1 << 0)
#define	LPE_MAC1_PASSALL	(1 << 1)
#define	LPE_MAC1_RXFLOWCTRL	(1 << 2)
#define	LPE_MAC1_TXFLOWCTRL	(1 << 3)
#define	LPE_MAC1_LOOPBACK	(1 << 4)
#define	LPE_MAC1_RESETTX	(1 << 8)
#define	LPE_MAC1_RESETMCSTX	(1 << 9)
#define	LPE_MAC1_RESETRX	(1 << 10)
#define	LPE_MAC1_RESETMCSRX	(1 << 11)
#define	LPE_MAC1_SIMRESET	(1 << 14)
#define	LPE_MAC1_SOFTRESET	(1 << 15)
#define	LPE_MAC2		0x004
#define	LPE_MAC2_FULLDUPLEX	(1 << 0)
#define	LPE_MAC2_FRAMELENCHECK	(1 << 1)
#define	LPE_MAC2_HUGEFRAME	(1 << 2)
#define	LPE_MAC2_DELAYEDCRC	(1 << 3)
#define	LPE_MAC2_CRCENABLE	(1 << 4)
#define	LPE_MAC2_PADCRCENABLE	(1 << 5)
#define	LPE_MAC2_VLANPADENABLE	(1 << 6)
#define	LPE_MAC2_AUTOPADENABLE	(1 << 7)
#define	LPE_MAC2_PUREPREAMBLE	(1 << 8)
#define	LPE_MAC2_LONGPREAMBLE	(1 << 9)
#define	LPE_MAC2_NOBACKOFF	(1 << 12)
#define	LPE_MAC2_BACKPRESSURE	(1 << 13)
#define	LPE_MAC2_EXCESSDEFER	(1 << 14)
#define	LPE_IPGT		0x008
#define	LPE_IPGR		0x00c
#define	LPE_CLRT		0x010
#define	LPE_MAXF		0x014
#define	LPE_SUPP		0x018
#define	LPE_SUPP_SPEED		(1 << 8)
#define	LPE_TEST		0x01c
#define	LPE_MCFG		0x020
#define	LPE_MCFG_SCANINCR	(1 << 0)
#define	LPE_MCFG_SUPPREAMBLE	(1 << 1)
#define	LPE_MCFG_CLKSEL(_n)	((_n & 0x7) << 2)
#define	LPC_MCFG_RESETMII	(1 << 15)
#define	LPE_MCMD		0x024
#define	LPE_MCMD_READ		(1 << 0)
#define	LPE_MCMD_WRITE		(0 << 0)
#define	LPE_MCMD_SCAN		(1 << 1)
#define	LPE_MADR		0x028
#define	LPE_MADR_REGMASK	0x1f
#define	LPE_MADR_REGSHIFT	0
#define	LPE_MADR_PHYMASK	0x1f
#define	LPE_MADR_PHYSHIFT	8
#define	LPE_MWTD		0x02c
#define	LPE_MWTD_DATAMASK	0xffff
#define	LPE_MRDD		0x030
#define	LPE_MRDD_DATAMASK	0xffff
#define	LPE_MIND		0x034
#define	LPE_MIND_BUSY		(1 << 0)
#define	LPE_MIND_SCANNING	(1 << 1)
#define	LPE_MIND_INVALID	(1 << 2)
#define	LPE_MIND_MIIFAIL	(1 << 3)
#define	LPE_SA0			0x040
#define	LPE_SA1			0x044
#define	LPE_SA2			0x048
#define	LPE_COMMAND		0x100
#define	LPE_COMMAND_RXENABLE	(1 << 0)
#define	LPE_COMMAND_TXENABLE	(1 << 1)
#define	LPE_COMMAND_REGRESET	(1 << 3)
#define	LPE_COMMAND_TXRESET	(1 << 4)
#define	LPE_COMMAND_RXRESET	(1 << 5)
#define	LPE_COMMAND_PASSRUNTFRAME	(1 << 6)
#define	LPE_COMMAND_PASSRXFILTER	(1 << 7)
#define	LPE_COMMAND_TXFLOWCTL		(1 << 8)
#define	LPE_COMMAND_RMII		(1 << 9)
#define	LPE_COMMAND_FULLDUPLEX		(1 << 10)
#define	LPE_STATUS		0x104
#define	LPE_STATUS_RXACTIVE		(1 << 0)
#define	LPE_STATUS_TXACTIVE		(1 << 1)
#define	LPE_RXDESC		0x108
#define	LPE_RXSTATUS		0x10c
#define	LPE_RXDESC_NUMBER	0x110
#define	LPE_RXDESC_PROD		0x114
#define	LPE_RXDESC_CONS		0x118
#define	LPE_TXDESC		0x11c
#define	LPE_TXSTATUS		0x120
#define	LPE_TXDESC_NUMBER	0x124
#define	LPE_TXDESC_PROD		0x128
#define	LPE_TXDESC_CONS		0x12c
#define	LPE_TSV0		0x158
#define	LPE_TSV1		0x15c
#define	LPE_RSV			0x160
#define	LPE_FLOWCONTROL_COUNTER	0x170
#define	LPE_FLOWCONTROL_STATUS	0x174
#define	LPE_RXFILTER_CTRL	0x200
#define	LPE_RXFILTER_UNICAST	(1 << 0)
#define	LPE_RXFILTER_BROADCAST	(1 << 1)
#define LPE_RXFILTER_MULTICAST	(1 << 2)
#define	LPE_RXFILTER_UNIHASH	(1 << 3)
#define	LPE_RXFILTER_MULTIHASH	(1 << 4)
#define	LPE_RXFILTER_PERFECT	(1 << 5)
#define	LPE_RXFILTER_WOL	(1 << 12)
#define	LPE_RXFILTER_FILTWOL	(1 << 13)
#define	LPE_RXFILTER_WOL_STATUS	0x204
#define	LPE_RXFILTER_WOL_CLEAR	0x208
#define	LPE_HASHFILTER_L	0x210
#define	LPE_HASHFILTER_H	0x214
#define	LPE_INTSTATUS		0xfe0
#define	LPE_INTENABLE		0xfe4
#define	LPE_INTCLEAR		0xfe8
#define	LPE_INTSET		0xfec
#define	LPE_INT_RXOVERRUN	(1 << 0)
#define	LPE_INT_RXERROR		(1 << 1)
#define	LPE_INT_RXFINISH	(1 << 2)
#define	LPE_INT_RXDONE		(1 << 3)
#define	LPE_INT_TXUNDERRUN	(1 << 4)
#define	LPE_INT_TXERROR		(1 << 5)
#define	LPE_INT_TXFINISH	(1 << 6)
#define	LPE_INT_TXDONE		(1 << 7)
#define	LPE_INT_SOFTINT		(1 << 12)
#define	LPE_INTWAKEUPINT	(1 << 13)
#define	LPE_POWERDOWN		0xff4

#define	LPE_DESC_ALIGN		8
#define	LPE_TXDESC_NUM		128
#define	LPE_RXDESC_NUM		128
#define	LPE_TXDESC_SIZE		(LPE_TXDESC_NUM * sizeof(struct lpe_hwdesc))
#define	LPE_RXDESC_SIZE		(LPE_RXDESC_NUM * sizeof(struct lpe_hwdesc))
#define	LPE_TXSTATUS_SIZE	(LPE_TXDESC_NUM * sizeof(struct lpe_hwstatus))
#define	LPE_RXSTATUS_SIZE	(LPE_RXDESC_NUM * sizeof(struct lpe_hwstatus))
#define	LPE_MAXFRAGS		8

struct lpe_hwdesc {
	uint32_t	lhr_data;
	uint32_t	lhr_control;
};

struct lpe_hwstatus {
	uint32_t	lhs_info;
	uint32_t	lhs_crc;
};

#define	LPE_INC(x, y)		(x) = ((x) == ((y)-1)) ? 0 : (x)+1

/* These are valid for both Rx and Tx descriptors */
#define	LPE_HWDESC_SIZE_MASK	(1 << 10)
#define	LPE_HWDESC_INTERRUPT	(1U << 31)

/* These are valid for Tx descriptors */
#define	LPE_HWDESC_LAST		(1 << 30)
#define	LPE_HWDESC_CRC		(1 << 29)
#define	LPE_HWDESC_PAD		(1 << 28)
#define	LPE_HWDESC_HUGE		(1 << 27)
#define	LPE_HWDESC_OVERRIDE	(1 << 26)

/* These are valid for Tx status descriptors */
#define	LPE_HWDESC_COLLISIONS(_n) (((_n) >> 21) & 0x7)
#define	LPE_HWDESC_DEFER	(1 << 25)
#define	LPE_HWDESC_EXCDEFER	(1 << 26)
#define	LPE_HWDESC_EXCCOLL	(1 << 27)
#define	LPE_HWDESC_LATECOLL	(1 << 28)
#define	LPE_HWDESC_UNDERRUN	(1 << 29)
#define	LPE_HWDESC_TXNODESCR	(1 << 30)
#define	LPE_HWDESC_ERROR	(1U << 31)

/* These are valid for Rx status descriptors */
#define	LPE_HWDESC_CONTROL	(1 << 18)
#define	LPE_HWDESC_VLAN		(1 << 19)
#define	LPE_HWDESC_FAILFILTER	(1 << 20)
#define	LPE_HWDESC_MULTICAST	(1 << 21)
#define	LPE_HWDESC_BROADCAST	(1 << 22)
#define	LPE_HWDESC_CRCERROR	(1 << 23)
#define	LPE_HWDESC_SYMBOLERROR	(1 << 24)
#define	LPE_HWDESC_LENGTHERROR	(1 << 25)
#define	LPE_HWDESC_RANGEERROR	(1 << 26)
#define	LPE_HWDESC_ALIGNERROR	(1 << 27)
#define	LPE_HWDESC_OVERRUN	(1 << 28)
#define	LPE_HWDESC_RXNODESCR	(1 << 29)
#define	LPE_HWDESC_LASTFLAG	(1 << 30)
#define	LPE_HWDESC_ERROR	(1U << 31)


#endif	/* _ARM_LPC_IF_LPEREG_H */