blob: d4fe8880f8ee7c2f8eaf9313abc581774e68448c (
plain)
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
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1992,1997-1998 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _SYS_BMAC_H
#define _SYS_BMAC_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Declarations and definitions specific to the BigMAC chip.
*
* The BigMAC chip will provide the MAC functons for 10 or 100 Mbps CSMA/CD
* protocol based interface. The QEC will control the transfer of data
* between the host memory, buffer memory and the BigMAC. When transmitting
* a frame will be moved from the Sbus to buffer memory. When an entire
* frame is present in the buffer memory, the QEC will move the data from
* the buffer memory to BigMAC. Same is the case while receiving. When the
* entire frame is present in the buffer memory, QEC will move frame from
* buffer memory to host's memory.
*
*/
/*
* BigMAC Register Set.
* BigMAC addresses map on a SBus word boundry. So all registers are
* declared for a size of 32 bits. Registers that use fewer than 32
* bits will return 0 in the bits not used.
* XXX Do spaces between registers need to be paded.
*/
struct bmac {
uint_t xifc; /* XIF Configuration register [3-0] (RW) */
uchar_t pad2[252]; /* XXX h/w team to confirm */
uint_t stat; /* status register [15-0] (R-auto clear) */
uint_t mask; /* interrupt mask register [15-0] (RW) */
uchar_t pad3[256];
uint_t txrst; /* tx software reset (RW) */
uint_t txcfg; /* tx configuration register [9-0] (RW) */
uint_t ipg1; /* Inter Packet Gap 1 [7-0] (RW) */
uint_t ipg2; /* Inter Packet Gap 2 [7-0] (RW) */
uint_t alimit; /* attempt limit register [7-0] (RW) */
uint_t slot; /* slot time register [7-0] (RW) */
uint_t palen; /* preamble length register [7-0] (RW) */
uint_t papat; /* preamble pattern register [7-0] (RW) */
uint_t txsfd; /* tx start frame delimiter [7-0] (RW) */
uint_t jam; /* jam size register [7-0] (RW) */
uint_t txmax; /* tx maximum packet size [12-0] (RW) */
uint_t txmin; /* tx minimum frame size [7-0] (RW) */
uint_t parg; /* peak attempt count [7-0] (RW) */
uint_t dcnt; /* defer timer counter [15-0] (RW) */
uint_t nccnt; /* normal collision counter [15-0] (RW) */
uint_t ntcnt; /* network collision counter [15-0] (RW) */
uint_t excnt; /* excess collision counter [7-0] (RW) */
uint_t ltcnt; /* late collision counter [7-0] (RW) */
uint_t rseed; /* random number seed [9-0] (RW) */
uint_t txsm; /* tx state machine register [8-0] (R) */
uchar_t pad4[176];
uint_t rxrst; /* rx software reset register (RW) */
uint_t rxcfg; /* rx configuration register [11-0] (RW) */
uint_t rxmax; /* rx maximum packet size [12-0] (RW) */
uint_t rxmin; /* rx minimum frame size [7-0] (RW) */
uint_t madd2; /* mac address register 2 [47-32] (RW) */
uint_t madd1; /* mac address register 1 [31-16] (RW) */
uint_t madd0; /* mac address register 0 [15-0] (RW) */
uint_t frcnt; /* receive frame count [15-0] (RW) */
uint_t lecnt; /* rx giant length error count [7-0] (RW) */
uint_t aecnt; /* rx alignment error count [7-0] (RW) */
uint_t fecnt; /* receive crc error count [7-0] (RW) */
uint_t rxsm; /* rx state machine register (R) */
uint_t rxcv; /* rx code voilation register (R) */
uchar_t pad5[4];
uint_t hash3; /* hash table 3 [63-48] (RW) */
uint_t hash2; /* hash table 2 [47-32] (RW) */
uint_t hash1; /* hash table 1 [31-16] (RW) */
uint_t hash0; /* hash table 0 [15-0] (RW) */
uint_t afr2; /* addr filter register 0_2 [15-0] (RW) */
uint_t afr1; /* addr filter register 0_1 [15-0] (RW) */
uint_t afr0; /* addr filter register 0_0 [15-0] (RW) */
uint_t afmr; /* addr filter mask reg 0 [15-0] (RW) */
};
/*
* BigMAC Register Bit Masks.
* XXX add right-shift values later.
*/
#define BMAC_XIFC_MODE_SERIAL (0x08) /* Mode strapp(1==serial, 0==nibble */
#define BMAC_XIFC_LPBK (0x04) /* Enable Loopback mode */
#define BMAC_XIFC_RSVD (0x02) /* reserved, should be written as 1 */
#define BMAC_XIFC_ENAB (0x01) /* Enable output drivers */
#define BMAC_STAT_DEFER (0x8000) /* Defer Timer */
#define BMAC_STAT_NETCOLL (0x4000) /* network collision */
#define BMAC_STAT_LCOL (0x2000) /* late collision */
#define BMAC_STAT_EXCCOLL (0x1000) /* excessive collision */
#define BMAC_STAT_NORCOLL (0x0800) /* normal collision */
#define BMAC_STAT_MAXPKT (0x0400) /* giant pkt err */
#define BMAC_STAT_UFLO (0x0200) /* tx fifo underflow */
#define BMAC_STAT_TXINTR (0x0100) /* tx interrupt */
#define BMAC_STAT_RXCV (0x0040) /* rx code voilation */
#define BMAC_STAT_OFLO (0x0020) /* rx fifo overflow */
#define BMAC_STAT_LENGTH (0x0010) /* rx length error */
#define BMAC_STAT_CRC (0x0008) /* crc error */
#define BMAC_STAT_ALNERR (0x0004) /* alignment error */
#define BMAC_STAT_RXFRMC (0x0002) /* rx frame counter */
#define BMAC_STAT_RXINTR (0x0001) /* rx interrupt */
#define BMAC_MASK_DEFERM (0x8000) /* Defer Timer Mask */
#define BMAC_MASK_NETCOLLM (0x4000) /* network collision mask */
#define BMAC_MASK_LCOLM (0x2000) /* late collision mask */
#define BMAC_MASK_EXCCOLLM (0x1000) /* excessive collision mask */
#define BMAC_MASK_NORCOLLM (0x0800) /* normal collision mask */
#define BMAC_MASK_MAXPKTM (0x0400) /* max packet size mask */
#define BMAC_MASK_UFLOM (0x0200) /* tx fifo underflow mask */
#define BMAC_MASK_TXINTRM (0x0100) /* tx interrupt mask */
#define BMAC_MASK_RXCV (0x0040) /* rx code voilation mask */
#define BMAC_MASK_OFLOM (0x0020) /* rx fifo overflow mask */
#define BMAC_MASK_LENGTH (0x0010) /* rx length error mask */
#define BMAC_MASK_CRCM (0x0008) /* crc error mask */
#define BMAC_MASK_ALNERRM (0x0004) /* alignment error mask */
#define BMAC_MASK_RXFRMCM (0x0002) /* rx frame counter mask */
#define BMAC_MASK_RXINTRM (0x0001) /* rx interrupt mask */
#define BMAC_MASK_OTHER (0x7e7e) /* other than TINT RINT DEFER */
#define BMAC_MASK_TINT_RINT (0x0101) /* TINT and RINT */
#define BMAC_TXCFG_FDUP (0x0200) /* Full Duplex */
#define BMAC_TXCFG_NGU (0x0100) /* Never Give Up/No Backoff */
#define BMAC_TXCFG_NFCS (0x0080) /* no FCS will be generated */
#define BMAC_TXCFG_IGCOLL (0x0040) /* tx ignore collision */
#define BMAC_TXCFG_SLOW (0x0020) /* carrier detect before tx */
#define BMAC_TXCFG_FIFO (0x0010) /* default tx fifo threshold */
#define BMAC_TXCFG_ENAB (0x0001) /* tx enable */
#define BMAC_RXCFG_ADDR (0x1000) /* rx enable address filter */
#define BMAC_RXCFG_HASH (0x0800) /* rx enable hash filter */
#define BMAC_RXCFG_GRPROM (0x0400) /* rx promiscuous group mode */
#define BMAC_RXCFG_MYOWN (0x0200) /* rx filter own packets */
#define BMAC_RXCFG_CRC (0x0100) /* rx disable CRC stripping */
#define BMAC_RXCFG_ERR (0x0080) /* rx disable error checking */
#define BMAC_RXCFG_PROMIS (0x0040) /* rx enable promiscous */
#define BMAC_RXCFG_STRIP (0x0020) /* rx strip pad bytes */
#define BMAC_RXCFG_FIFO (0x000e) /* default rx fifo threshold */
#define BMAC_RXCFG_ENAB (0x0001) /* rx enable */
#define BMACTXRSTDELAY (125) /* 125 us wait period */
#define BMACRXRSTDELAY (40) /* 3.2 us wait period */
struct bmactcvr {
uint_t pal1; /* trasnceiver pal */
uint_t pal2; /* management pal */
};
#define BMACLNKTIME (500000) /* Length of time pulses send */
/* P1 Board */
#define BMAC_TPAL1_XM_SERIAL (1 << 0) /* XIF mode 0=nibble 1=serial */
#define BMAC_TPAL1_LB (1 << 1) /* External loopback */
#define BMAC_TPAL1_MS (1 << 2) /* Media Sense */
#define BMAC_TPAL1_LINKTESTEN (1 << 3) /* Link Test Enable */
#define BMAC_TPAL1_LINKSTATUS (1 << 4) /* Link Test Status */
/* P1.5 Board */
#define BMAC_TPAL1_PGYBAC_DIS (1 << 0) /* XIF mode 0=nibble 1=serial */
#define BMAC_TPAL1_LOOP_EN (1 << 1) /* External loopback */
#define BMAC_TPAL1_CLK_LOOP_EN (1 << 2) /* Media Sense */
#define BMAC_TPAL1_CLK_FSTSLW (1 << 3) /* Link Test Enable */
#define BMAC_TPAL2_MDC_BIT_POS 0 /* Mgmt. data clock */
#define BMAC_TPAL2_MDIO_EN_BIT_POS 1 /* Mgmt. data output enable */
#define BMAC_TPAL2_MII_MDIO_BIT_POS 2 /* Management data */
#define BMAC_TPAL2_PGYBAC_MDIO_BIT_POS 3 /* Tx enable timeout error */
#define BMAC_TPAL2_MDC (1 << BMAC_TPAL2_MDC_BIT_POS)
#define BMAC_TPAL2_MDIO_EN (1 << BMAC_TPAL2_MDIO_EN_BIT_POS)
#define BMAC_TPAL2_MII_MDIO (1 << BMAC_TPAL2_MII_MDIO_BIT_POS)
#define BMAC_TPAL2_PGYBAC_MDIO (1 << BMAC_TPAL2_PGYBAC_MDIO_BIT_POS)
/*
* Management Frame Structure:
* <IDLE> <ST><OP><PHYAD><REGAD><TA> <DATA> <IDLE>
* READ: <01><10><AAAAA><RRRRR><Z0><DDDDDDDDDDDDDDDD>
* WRITE: <01><01><AAAAA><RRRRR><10><DDDDDDDDDDDDDDDD>
*/
#define BMAC_EXTERNAL_PHYAD 0x0
#define BMAC_INTERNAL_PHYAD 0x1
#define BMAC_MII_CTLREG 0x0
#define BMAC_MII_STATREG 0x1
/* Control Register Bit Definitions */
#define BMAC_MII_CTL_RESET (1 << 15) /* PHY Reset */
#define BMAC_MII_CTL_LOOPBACK (1 << 14) /* Loopback Mode */
#define BMAC_MII_CTL_SPEED_100 (1 << 13) /* 1=100Mbps; 0=10Mbps */
#define BMAC_MII_CTL_AUTO_SPEED (1 << 12)
#define BMAC_MII_CTL_POWER_DOWN (1 << 11)
#define BMAC_MII_CTL_ISOLATE (1 << 10) /* Isolate PHY from MII */
/* Status Register Bit Definitions */
#define BMAC_MII_STAT_LINKUP (1 << 2)
#define BMAC_MII_STAT_JABBER (1 << 1)
#define BMAC_MII_STAT_EXT_CAP (1 << 0)
#ifdef __cplusplus
}
#endif
#endif /* _SYS_BMAC_H */
|