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
|
/*
* Solaris DLPI driver for ethernet cards based on the ADMtek Centaur
*
* Copyright (c) 2007 by Garrett D'Amore <garrett@damore.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.
* 3. Neither the name of the author nor the names of any co-contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER 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 COPYRIGHT HOLDER 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.
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _AFE_H
#define _AFE_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* Registers and values are here, becuase they can be exported to userland
* via the AFEIOC_GETCSR and friends ioctls. These are private to this
* driver and the bundled diagnostic utility, and should not be used by
* end user application programs.
*/
/*
* AFE register definitions.
*/
/* PCI configuration registers */
#define PCI_VID 0x00 /* Loaded vendor ID */
#define PCI_DID 0x02 /* Loaded device ID */
#define PCI_CMD 0x04 /* Configuration command register */
#define PCI_STAT 0x06 /* Configuration status register */
#define PCI_RID 0x08 /* Revision ID */
#define PCI_CLS 0x0c /* Cache line size */
#define PCI_SVID 0x2c /* Subsystem vendor ID */
#define PCI_SSID 0x2e /* Subsystem ID */
#define PCI_MINGNT 0x3e /* Minimum Grant */
#define PCI_MAXLAT 0x3f /* Maximum latency */
#define PCI_SIG 0x80 /* Signature of AN983 */
#define PCI_PMR0 0xc0 /* Power Management Register 0 */
#define PCI_PMR1 0xc4 /* Power Management Register 1 */
/*
* Bits for PCI command register.
*/
#define PCI_CMD_MWIE 0x0010 /* memory write-invalidate enable */
#define PCI_CMD_BME 0x0004 /* bus master enable */
#define PCI_CMD_MAE 0x0002 /* memory access enable */
#define PCI_CMD_IOE 0x0001 /* I/O access enable */
/*
* Signature values for PCI_SIG
*/
#define SIG_AN983 0x09811317
#define SIG_AN985 0x09851317
#define SIG_ADM9511 0x69851317
/* Ordinary control/status registers */
#define CSR_PAR 0x00 /* PCI access register */
#define CSR_TDR 0x08 /* Transmit demand register */
#define CSR_RDR 0x10 /* Receive demand register */
#define CSR_RDB 0x18 /* Receive descriptor base address */
#define CSR_TDB 0x20 /* Transmit descriptor base address */
#define CSR_SR 0x28 /* Status register */
#define CSR_NAR 0x30 /* Network access register */
#define CSR_IER 0x38 /* Interrupt enable register */
#define CSR_LPC 0x40 /* Lost packet counter */
#define CSR_SPR 0x48 /* Serial port register */
#define CSR_TIMER 0x58 /* Timer */
#define CSR_SR2 0x80 /* Status register 2 */
#define CSR_IER2 0x84 /* Interrupt enable register 2 */
#define CSR_CR 0x88 /* Command register */
#define CSR_PMCSR 0x90 /* Power Management Command and Status */
#define CSR_PAR0 0xa4 /* Physical address register 0 */
#define CSR_PAR1 0xa8 /* Physical address register 1 */
#define CSR_MAR0 0xac /* Multicast address hash table register 0 */
#define CSR_MAR1 0xb0 /* Multicast address hash table register 1 */
#define CSR_BMCR 0xb4 /* PHY BMCR (comet only) */
#define CSR_BMSR 0xb8 /* PHY BMSR (comet only) */
#define CSR_PHYIDR1 0xbc /* PHY PHYIDR1 (comet only) */
#define CSR_PHYIDR2 0xc0 /* PHY PHYIDR2 (comet only) */
#define CSR_ANAR 0xc4 /* PHY ANAR (comet only) */
#define CSR_ANLPAR 0xc8 /* PHY ANLPAR (comet only) */
#define CSR_ANER 0xcc /* PHY ANER (comet only) */
#define CSR_XMC 0xd0 /* XCVR mode control (comet only) */
#define CSR_XCIIS 0xd4 /* XCVR config info/int status (comet only) */
#define CSR_XIE 0xd8 /* XCVR interupt enable (comet only) */
#define CSR_OPM 0xfc /* Opmode register (centaur only) */
/*
* Bits for PCI access register.
*/
#define PAR_RESET 0x00000001U /* Reset the entire chip */
#define PAR_MWIE 0x01000000U /* PCI memory-write-invalidate */
#define PAR_MRLE 0x00800000U /* PCI memory-read-line */
#define PAR_MRME 0x00200000U /* PCI memory-read-multiple */
#define PAR_TXHIPRI 0x00000002U /* Transmit higher priority */
#define PAR_DESCSKIP 0x0000007cU /* Descriptor skip length in DW */
#define PAR_BIGENDIAN 0x00000080U /* Use big endian data buffers */
#define PAR_TXAUTOPOLL 0x00060000U /* Programmable TX autopoll interval */
#define PAR_RXFIFO_100 0x00009000U /* RX FIFO control, Centaur only */
#define PAR_RXFIFO_10 0x00002800U /* RX FIFO control, Centaur only */
#define PAR_CALIGN_NONE 0x00000000U /* No cache alignment, Comet */
#define PAR_CALIGN_8 0x00004000U /* 8 DW cache alignment, Comet */
#define PAR_CALIGN_16 0x00008000U /* 16 DW cache alignment, Comet */
#define PAR_CALIGN_32 0x0000c000U /* 32 DW cache alignment, Comet */
#define PAR_BURSTLEN 0x00003F00U /* Programmable burst length, Comet */
#define PAR_BURSTUNL 0x00000000U /* Unlimited burst length, Comet */
#define PAR_BURST_1 0x00000100U /* 1 DW burst length, Comet */
#define PAR_BURST_2 0x00000200U /* 2 DW burst length, Comet */
#define PAR_BURST_4 0x00000400U /* 4 DW burst length, Comet */
#define PAR_BURST_8 0x00000800U /* 8 DW burst length, Comet */
#define PAR_BURST_16 0x00001000U /* 16 DW burst length, Comet */
#define PAR_BURST_32 0x00002000U /* 32 DW burst length, Comet */
/*
* Bits for status register.
*/
#define SR_BERR_TYPE 0x03800000U /* bus error type */
#define SR_BERR_PARITY 0x00000000U /* parity error */
#define SR_BERR_TARGET_ABORT 0x01000000U /* target abort */
#define SR_BERR_MASTER_ABORT 0x00800000U /* master abort */
#define SR_TX_STATE 0x00700000U /* transmit state */
#define SR_RX_STATE 0x000E0000U /* receive state */
/*
* Interrupts. These are in IER2 and SR2. Some of them also appear
* in SR and IER, but we only use the ADMtek specific IER2 and SR2.
*/
#define INT_TXEARLY 0x80000000U /* transmit early interrupt */
#define INT_RXEARLY 0x40000000U /* receive early interrupt */
#define INT_LINKCHG 0x20000000U /* link status changed */
#define INT_TXDEFER 0x10000000U /* transmit defer interrupt */
#define INT_PAUSE 0x04000000U /* pause frame received */
#define INT_NORMAL 0x00010000U /* normal interrupt */
#define INT_ABNORMAL 0x00008000U /* abnormal interrupt */
#define INT_BUSERR 0x00002000U /* fatal bus error */
#define INT_TIMER 0x00000800U /* onboard timer */
#define INT_RXJABBER 0x00000200U /* receive watchdog */
#define INT_RXSTOPPED 0x00000100U /* receive stopped */
#define INT_RXNOBUF 0x00000080U /* no rcv descriptor */
#define INT_RXOK 0x00000040U /* receive complete */
#define INT_TXUNDERFLOW 0x00000020U /* transmit underflow */
#define INT_TXJABBER 0x00000008U /* transmit jabber timeout */
#define INT_TXNOBUF 0x00000004U /* no xmt descriptor */
#define INT_TXSTOPPED 0x00000002U /* transmit stopped */
#define INT_TXOK 0x00000001U /* transmit ok interrupt */
#define INT_NONE 0x00000000U /* no interrupts */
#define INT_ALL 0xf401abefU /* all interrupts */
#define INT_WANTED (INT_NORMAL | INT_ABNORMAL | \
INT_BUSERR | INT_RXJABBER | \
INT_RXOK | INT_RXNOBUF | \
INT_TIMER | INT_LINKCHG | \
INT_RXSTOPPED | INT_TXSTOPPED | \
INT_TXUNDERFLOW | INT_TXJABBER)
/*
* Bits for network access register.
*/
#define NAR_TX_ENABLE 0x00002000U /* Enable transmit */
#define NAR_RX_MULTI 0x00000080U /* Receive all multicast packets */
#define NAR_RX_PROMISC 0x00000040U /* Receive any good packet */
#define NAR_RX_BAD 0x00000008U /* Pass bad packets */
#define NAR_RX_ENABLE 0x00000002U /* Enable receive */
#define NAR_TR 0x0000c000U /* Transmit threshold mask */
#define NAR_TR_72 0x00000000U /* 72 B (128 @ 100Mbps) tx thresh */
#define NAR_TR_96 0x00004000U /* 96 B (256 @ 100Mbps) tx thresh */
#define NAR_TR_128 0x00008000U /* 128 B (512 @ 100Mbps) tx thresh */
#define NAR_TR_160 0x0000c000U /* 160 B (1K @ 100Mbsp) tx thresh */
#define NAR_SF 0x00200000U /* store and forward */
#define NAR_HBD 0x00080000U /* Disable SQE heartbeat */
#define NAR_FCOLL 0x00001000U /* force collision */
#define NAR_MODE 0x00000c00U /* mode (loopback, etc.) */
#define NAR_MACLOOP 0x00000400U /* mac loop back */
/*
* Bits for lost packet counter.
*/
#define LPC_COUNT 0x0000FFFFU /* Count of missed frames */
#define LPC_OFLOW 0x00010000U /* Counter overflow bit */
/*
* Bits for CSR_SPR (MII and SROM access)
*/
#define SPR_MII_DIN 0x00080000U /* MII data input */
#define SPR_MII_CTRL 0x00040000U /* MII management control, 1=read */
#define SPR_MII_DOUT 0x00020000U /* MII data output */
#define SPR_MII_CLOCK 0x00010000U /* MII data clock */
#define SPR_SROM_READ 0x00004000U /* Serial EEPROM read control */
#define SPR_SROM_WRITE 0x00002000U /* Serial EEPROM write control */
#define SPR_SROM_SEL 0x00000800U /* Serial EEPROM select */
#define SPR_SROM_DOUT 0x00000008U /* Serial EEPROM data out */
#define SPR_SROM_DIN 0x00000004U /* Serial EEPROM data in */
#define SPR_SROM_CLOCK 0x00000002U /* Serial EEPROM clock */
#define SPR_SROM_CHIP 0x00000001U /* Serial EEPROM chip select */
#define SROM_ENADDR 0x4 /* Offset of ethernet address */
#define SROM_READCMD 0x6 /* command to read SROM */
/*
* Bits for CSR_TIMER
*/
#define TIMER_LOOP 0x00010000U /* continuous operating mode */
#define TIMER_USEC 204 /* usecs per timer count */
/*
* Bits for CSR_CR
*/
#define CR_PAUSE 0x00000020U /* enable pause flow control */
#define CR_TXURAUTOR 0x00000001U /* transmit underrun auto recovery */
/*
* Bits for XMC (Comet specific)
*/
#define XMC_LDIS 0x0800 /* long distance 10Base-T cable */
/*
* Bits for XCIIS (Comet specific)
*/
#define XCIIS_SPEED 0x0200 /* 100 Mbps mode */
#define XCIIS_DUPLEX 0x0100 /* full duplex mode */
#define XCIIS_FLOWCTL 0x0080 /* flow control support */
#define XCIIS_ANC 0x0040 /* autonegotiation complete */
#define XCIIS_RF 0x0020 /* remote fault detected */
#define XCIIS_LFAIL 0x0010 /* link fail */
#define XCIIS_ANLPAR 0x0008 /* anar received from link partner */
#define XCIIS_PDF 0x0004 /* parallel detection fault */
#define XCIIS_ANPR 0x0002 /* autoneg. page received */
#define XCIIS_REF 0x0001 /* receive error counter full */
/*
* Bits for XIE (Comet specific)
*/
#define XIE_ANCE 0x0040 /* aneg complete interrupt enable */
#define XIE_RFE 0x0020 /* remote fault interrupt enable */
#define XIE_LDE 0x0010 /* link fail interrupt enable */
#define XIE_ANAE 0x0008 /* aneg. ack. interrupt enable */
#define XIE_PDFE 0x0004 /* parallel det. fault int. enable */
#define XIE_ANPE 0x0002 /* autoneg. page rec'd int. enable */
#define XIE_REFE 0x0001 /* receive error full int. enable */
/*
* Centaur 1.1 extensions to MII.
*/
#define PHY_PILR 0x10 /* an983b 1.1 - polarity/int lvl */
#define PHY_MCR 0x15 /* an983b 1.1 - mode control */
#define PILR_NOSQE 0x0800 /* disable 10BaseT SQE */
#define MCR_FIBER 0x0001 /* enable fiber */
/*
* Bits for Opmode (Centaur specific)
*/
#define OPM_SPEED 0x80000000U /* 100 Mbps */
#define OPM_DUPLEX 0x40000000U /* full duplex */
#define OPM_LINK 0x20000000U /* link up? */
#define OPM_MODE 0x00000007U /* mode mask */
#define OPM_INTPHY 0x00000007U /* single chip mode, internal PHY */
#define OPM_MACONLY 0x00000004U /* MAC ony mode, external PHY */
#ifdef _KERNEL
/*
* Put exported kernel interfaces here. (There should be none.)
*/
#endif /* _KERNEL */
#ifdef __cplusplus
}
#endif
#endif /* _AFE_H */
|