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
|
/* $OpenBSD: mtd8xxreg.h,v 1.1 2003/09/25 22:05:59 mickey Exp $ */
/*
* Copyright (c) 2003 Oleg Safiullin <form@pdp11.org.ru>
* 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 unmodified, 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.
*
*/
#ifndef __DEV_IC_MTD8XXREG_H__
#define __DEV_IC_MTD8XXREG_H__
#define MTD_PCI_LOIO 0x10 /* PCI I/O base address register */
#define MTD_PCI_LOMEM 0x14 /* PCI memory base address register */
#define MTD_TIMEOUT 1000 /* Software reset timeout */
#define MII_OPCODE_RD 0x6000
#define MII_OPCODE_WR 0x5002
/*
* MTD8xx command and status register.
*/
#define MTD_PAR0 0x00 /* Physical address register 0*/
#define MTD_PAR4 0x04 /* Physical address register 4 */
#define MTD_MAR0 0x08 /* Multicast address register 0 */
#define MTD_MAR4 0x0C /* Multicast address register 4 */
#define MTD_TCRRCR 0x18 /* Transmit/receive config */
#define MTD_BCR 0x1C /* Bus configuration register */
#define MTD_TXPDR 0x20 /* Transmit poll demand */
#define MTD_RXPDR 0x24 /* Receive poll demand */
#define MTD_RXCWP 0x28 /* Receive current word pointer */
#define MTD_TXLBA 0x2C /* Transmit list base address */
#define MTD_RXLBA 0x30 /* Receive list base address */
#define MTD_ISR 0x34 /* Interrupt status register */
#define MTD_IMR 0x38 /* Interrupt mask register */
#define MTD_TSR 0x48 /* Tally counter register */
#define MTD_MIIMGT 0x40 /* MII management register */
#define MTD_PHYCSR 0x4C /* PHY control status register */
/*
* Receive configuration register.
*/
#define RCR_RXS 0x00008000U /* Receive process is running */
#define RCR_EIEN 0x00004000U /* Early interrupt enabled */
#define RCR_RFCEN 0x00002000U /* Receive flow control enabled */
#define RCR_NDFA 0x00001000U /* Not defined flow control address */
#define RCR_RBLEN 0x00000800U /* Receive burst length enable */
#define RCR_RPBL1 0x00000000U /* 1 word */
#define RCR_RPBL4 0x00000100U /* 4 words */
#define RCR_RPBL8 0x00000200U /* 8 words */
#define RCR_RPBL16 0x00000300U /* 16 words */
#define RCR_RPBL32 0x00000400U /* 32 words */
#define RCR_RPBL64 0x00000500U /* 64 words */
#define RCR_RPBL128 0x00000600U /* 128 words */
#define RCR_RPBL512 0x00000700U /* 512 words */
#define RCR_PROM 0x00000080U /* Promiscuous mode */
#define RCR_AB 0x00000040U /* Accept broadcast addresses */
#define RCR_AM 0x00000020U /* Accept multicast addresses */
#define RCR_ARP 0x00000008U /* Accept runt packets */
#define RCR_ALP 0x00000004U /* Accept long packets */
#define RCR_SEP 0x00000002U /* Accept packets w/ receive errors */
#define RCR_RE 0x00000001U /* Receive enable */
/*
* Transmit configuration register.
*/
#define TCR_TXS 0x80000000U /* Tx process is running */
#define TCR_BACKOPT 0x10000000U /* Optional back-off */
#define TCR_FBACK 0x08000000U /* Fast back-off */
#define TCR_ENHANCED 0x02000000U /* Enhanced transmit mode */
#define TCR_TFCEN 0x01000000U /* Ttansmit flow control enable */
#define TCR_TFT64 0x00000000U /* 64 bytes */
#define TCR_TFT32 0x00200000U /* 32 bytes */
#define TCR_TFT128 0x00400000U /* 128 bytes */
#define TCR_TFT256 0x00600000U /* 256 bytes */
#define TCR_TFT512 0x00800000U /* 512 bytes */
#define TCR_TFT768 0x00A00000U /* 768 bytes */
#define TCR_TFT1024 0x00C00000U /* 1024 bytes */
#define TCR_TFTSF 0x00E00000U /* Transmit store and forward */
#define TCR_FD 0x00100000U /* Full-duplex mode */
#define TCR_PS 0x00080000U /* Port speed is 10Mbit/s */
#define TCR_TE 0x00040000U /* Transmit enable */
#define TCR_LB 0x00020000U /* MII loopback on */
/*
* Bus confiruration register.
*/
#define BCR_PROG 0x00000200U /* Programming */
#define BCR_RLE 0x00000100U /* Read line cmd enable */
#define BCR_RME 0x00000080U /* Read multiple cmd enable */
#define BCR_WIE 0x00000040U /* Write and invalidate cmd enable */
/* Programmable burst length */
#define BCR_PBL1 0x00000000U /* 1 dword */
#define BCR_PBL4 0x00000008U /* 4 dwords */
#define BCR_PBL8 0x00000010U /* 8 dwords */
#define BCR_PBL16 0x00000018U /* 16 dwords */
#define BCR_PBL32 0x00000020U /* 32 dwords */
#define BCR_PBL64 0x00000028U /* 64 dwords */
#define BCR_PBL128 0x00000030U /* 128 dwords */
#define BCR_PBL512 0x00000038U /* 512 dwords */
#define BCR_SWR 0x00000001U /* Software reset */
/*
* Interrupt status register.
*/
#define ISR_PDF 0x00040000U /* Parallel detection fault */
#define ISR_RFCON 0x00020000U /* Receive flow control XON */
#define ISR_RFCOFF 0x00010000U /* Receive flow control XOFF */
#define ISR_LSC 0x00008000U /* Link status change */
#define ISR_ANC 0x00004000U /* Auto-negatiation completed */
#define ISR_FBE 0x00002000U /* Fatal bus error */
#define ISR_ETMASK 0x00001800U /* Error type mask */
#define ISR_ET(x) ((x) & ISR_ETMASK)
#define ISR_ETPARITY 0x00000000U /* Parity error */
#define ISR_ETMASTER 0x00000800U /* Master abort */
#define ISR_ETTARGET 0x00001000U /* Target abort */
#define ISR_TUNF 0x00000400U /* Transmit underflow */
#define ISR_ROVF 0x00000200U /* Receive overflow */
#define ISR_ETI 0x00000100U /* Early transfer interrupt */
#define ISR_ERI 0x00000080U /* Early receive interrupt */
#define ISR_CNTOVF 0x00000040U /* CRC or MPA tally ounter overflow */
#define ISR_RBU 0x00000020U /* Receive buffer unavailable */
#define ISR_TBU 0x00000010U /* Transmit buffer unavailable */
#define ISR_TI 0x00000008U /* Transmit interrupt */
#define ISR_RI 0x00000004U /* Receive interrupt */
#define ISR_RXERI 0x00000002U /* Receive error interrupt */
#define ISR_INTRS (ISR_RBU | ISR_TBU | ISR_TI | ISR_RI | ISR_ETI)
/*
* Interrupt mask register.
*/
#define IMR_MPDF 0x00040000U /* Parallel detection fault */
#define IMR_MRFCON 0x00020000U /* Receive flow control XON */
#define IMR_MRFCOFF 0x00010000U /* Receive flow control XOFF */
#define IMR_MLSC 0x00008000U /* Link status change */
#define IMR_MANC 0x00004000U /* Auto-negatiation completed */
#define IMR_MFBE 0x00002000U /* Fatal bus error */
#define IMR_MTUNF 0x00000400U /* Transmit underflow */
#define IMR_MROVF 0x00000200U /* Receive overflow */
#define IMR_METI 0x00000100U /* Early transfer interrupt */
#define IMR_MERI 0x00000080U /* Early receive interrupt */
#define IMR_MCNTOVF 0x00000040U /* CRC or MPA tally ounter overflow */
#define IMR_MRBU 0x00000020U /* Receive buffer unavailable */
#define IMR_MTBU 0x00000010U /* Transmit buffer unavailable */
#define IMR_MTI 0x00000008U /* Transmit interrupt */
#define IMR_MRI 0x00000004U /* Receive interrupt */
#define IMR_MRXERI 0x00000002U /* Receive error interrupt */
#define IMR_INTRS (IMR_MRBU | IMR_MTBU | IMR_MTI | IMR_MRI | IMR_METI)
/*
* Transmit status register.
*/
#define TSR_NCR_MASK 0x0000FFFFU
#define TSR_NCR_SHIFT 0
#define TSR_NCR_GET(x) (((x) & TSR_NCR_MASK) >> TSR_NCR_SHIFT)
/* Retry collisions count */
/*
* MII management register.
*/
#define MIIMGT_READ 0x00000000U
#define MIIMGT_WRITE 0x00000008U
#define MIIMGT_MDO 0x00000004U
#define MIIMGT_MDI 0x00000002U
#define MIIMGT_MDC 0x00000001U
#define MIIMGT_MASK 0x0000000FU
/*
* Command and status register space access macros.
*/
#define CSR_READ_1(reg) bus_space_read_1(sc->sc_bust, sc->sc_bush, reg)
#define CSR_WRITE_1(reg, val) \
bus_space_write_1(sc->sc_bust, sc->sc_bush, reg, val)
#define CSR_READ_2(reg) bus_space_read_2(sc->sc_bust, sc->sc_bush, reg)
#define CSR_WRITE_2(reg, vat) \
bus_space_write_2(sc->sc_bust, sc->sc_bush, reg, val)
#define CSR_READ_4(reg) bus_space_read_4(sc->sc_bust, sc->sc_bush, reg)
#define CSR_WRITE_4(reg, val) \
bus_space_write_4(sc->sc_bust, sc->sc_bush, reg, val)
#define CSR_SETBIT(reg, val) CSR_WRITE_4(reg, CSR_READ_4(reg) | (val))
#define CSR_CLRBIT(reg, val) CSR_WRITE_4(reg, CSR_READ_4(reg) & ~(val))
#endif /* __DEV_IC_MTD8XXREG_H__ */
|