Merge branch 'upstream' of git://electric-eye.fr.zoreil.com/home/romieu/linux-2.6...
[linux-2.6] / drivers / net / sk98lin / h / xmac_ii.h
1 /******************************************************************************
2  *
3  * Name:        xmac_ii.h
4  * Project:     Gigabit Ethernet Adapters, Common Modules
5  * Version:     $Revision: 1.52 $
6  * Date:        $Date: 2003/10/02 16:35:50 $
7  * Purpose:     Defines and Macros for Gigabit Ethernet Controller
8  *
9  ******************************************************************************/
10
11 /******************************************************************************
12  *
13  *      (C)Copyright 1998-2002 SysKonnect.
14  *      (C)Copyright 2002-2003 Marvell.
15  *
16  *      This program is free software; you can redistribute it and/or modify
17  *      it under the terms of the GNU General Public License as published by
18  *      the Free Software Foundation; either version 2 of the License, or
19  *      (at your option) any later version.
20  *
21  *      The information in this file is provided "AS IS" without warranty.
22  *
23  ******************************************************************************/
24
25 #ifndef __INC_XMAC_H
26 #define __INC_XMAC_H
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif  /* __cplusplus */
31
32 /* defines ********************************************************************/
33
34 /*
35  * XMAC II registers
36  *
37  * The XMAC registers are 16 or 32 bits wide.
38  * The XMACs host processor interface is set to 16 bit mode,
39  * therefore ALL registers will be addressed with 16 bit accesses.
40  *
41  * The following macros are provided to access the XMAC registers
42  * XM_IN16(), XM_OUT16, XM_IN32(), XM_OUT32(), XM_INADR(), XM_OUTADR(),
43  * XM_INHASH(), and XM_OUTHASH().
44  * The macros are defined in SkGeHw.h.
45  *
46  * Note:        NA reg  = Network Address e.g DA, SA etc.
47  *
48  */
49 #define XM_MMU_CMD              0x0000  /* 16 bit r/w   MMU Command Register */
50         /* 0x0004:              reserved */
51 #define XM_POFF                 0x0008  /* 32 bit r/w   Packet Offset Register */
52 #define XM_BURST                0x000c  /* 32 bit r/w   Burst Register for half duplex*/
53 #define XM_1L_VLAN_TAG  0x0010  /* 16 bit r/w   One Level VLAN Tag ID */
54 #define XM_2L_VLAN_TAG  0x0014  /* 16 bit r/w   Two Level VLAN Tag ID */
55         /* 0x0018 - 0x001e:     reserved */
56 #define XM_TX_CMD               0x0020  /* 16 bit r/w   Transmit Command Register */
57 #define XM_TX_RT_LIM    0x0024  /* 16 bit r/w   Transmit Retry Limit Register */
58 #define XM_TX_STIME             0x0028  /* 16 bit r/w   Transmit Slottime Register */
59 #define XM_TX_IPG               0x002c  /* 16 bit r/w   Transmit Inter Packet Gap */
60 #define XM_RX_CMD               0x0030  /* 16 bit r/w   Receive Command Register */
61 #define XM_PHY_ADDR             0x0034  /* 16 bit r/w   PHY Address Register */
62 #define XM_PHY_DATA             0x0038  /* 16 bit r/w   PHY Data Register */
63         /* 0x003c:              reserved */
64 #define XM_GP_PORT              0x0040  /* 32 bit r/w   General Purpose Port Register */
65 #define XM_IMSK                 0x0044  /* 16 bit r/w   Interrupt Mask Register */
66 #define XM_ISRC                 0x0048  /* 16 bit r/o   Interrupt Status Register */
67 #define XM_HW_CFG               0x004c  /* 16 bit r/w   Hardware Config Register */
68         /* 0x0050 - 0x005e:     reserved */
69 #define XM_TX_LO_WM             0x0060  /* 16 bit r/w   Tx FIFO Low Water Mark */
70 #define XM_TX_HI_WM             0x0062  /* 16 bit r/w   Tx FIFO High Water Mark */
71 #define XM_TX_THR               0x0064  /* 16 bit r/w   Tx Request Threshold */
72 #define XM_HT_THR               0x0066  /* 16 bit r/w   Host Request Threshold */
73 #define XM_PAUSE_DA             0x0068  /* NA reg r/w   Pause Destination Address */
74         /* 0x006e:              reserved */
75 #define XM_CTL_PARA             0x0070  /* 32 bit r/w   Control Parameter Register */
76 #define XM_MAC_OPCODE   0x0074  /* 16 bit r/w   Opcode for MAC control frames */
77 #define XM_MAC_PTIME    0x0076  /* 16 bit r/w   Pause time for MAC ctrl frames*/
78 #define XM_TX_STAT              0x0078  /* 32 bit r/o   Tx Status LIFO Register */
79
80         /* 0x0080 - 0x00fc:     16 NA reg r/w   Exact Match Address Registers */
81         /*                              use the XM_EXM() macro to address */
82 #define XM_EXM_START    0x0080  /* r/w  Start Address of the EXM Regs */
83
84         /*
85          * XM_EXM(Reg)
86          *
87          * returns the XMAC address offset of specified Exact Match Addr Reg
88          *
89          * para:        Reg     EXM register to addr    (0 .. 15)
90          *
91          * usage:       XM_INADDR(IoC, MAC_1, XM_EXM(i), &val[i]);
92          */
93 #define XM_EXM(Reg)     (XM_EXM_START + ((Reg) << 3))
94
95 #define XM_SRC_CHK              0x0100  /* NA reg r/w   Source Check Address Register */
96 #define XM_SA                   0x0108  /* NA reg r/w   Station Address Register */
97 #define XM_HSM                  0x0110  /* 64 bit r/w   Hash Match Address Registers */
98 #define XM_RX_LO_WM             0x0118  /* 16 bit r/w   Receive Low Water Mark */
99 #define XM_RX_HI_WM             0x011a  /* 16 bit r/w   Receive High Water Mark */
100 #define XM_RX_THR               0x011c  /* 32 bit r/w   Receive Request Threshold */
101 #define XM_DEV_ID               0x0120  /* 32 bit r/o   Device ID Register */
102 #define XM_MODE                 0x0124  /* 32 bit r/w   Mode Register */
103 #define XM_LSA                  0x0128  /* NA reg r/o   Last Source Register */
104         /* 0x012e:              reserved */
105 #define XM_TS_READ              0x0130  /* 32 bit r/o   Time Stamp Read Register */
106 #define XM_TS_LOAD              0x0134  /* 32 bit r/o   Time Stamp Load Value */
107         /* 0x0138 - 0x01fe:     reserved */
108 #define XM_STAT_CMD     0x0200  /* 16 bit r/w   Statistics Command Register */
109 #define XM_RX_CNT_EV    0x0204  /* 32 bit r/o   Rx Counter Event Register */
110 #define XM_TX_CNT_EV    0x0208  /* 32 bit r/o   Tx Counter Event Register */
111 #define XM_RX_EV_MSK    0x020c  /* 32 bit r/w   Rx Counter Event Mask */
112 #define XM_TX_EV_MSK    0x0210  /* 32 bit r/w   Tx Counter Event Mask */
113         /* 0x0204 - 0x027e:     reserved */
114 #define XM_TXF_OK               0x0280  /* 32 bit r/o   Frames Transmitted OK Conuter */
115 #define XM_TXO_OK_HI    0x0284  /* 32 bit r/o   Octets Transmitted OK High Cnt*/
116 #define XM_TXO_OK_LO    0x0288  /* 32 bit r/o   Octets Transmitted OK Low Cnt */
117 #define XM_TXF_BC_OK    0x028c  /* 32 bit r/o   Broadcast Frames Xmitted OK */
118 #define XM_TXF_MC_OK    0x0290  /* 32 bit r/o   Multicast Frames Xmitted OK */
119 #define XM_TXF_UC_OK    0x0294  /* 32 bit r/o   Unicast Frames Xmitted OK */
120 #define XM_TXF_LONG             0x0298  /* 32 bit r/o   Tx Long Frame Counter */
121 #define XM_TXE_BURST    0x029c  /* 32 bit r/o   Tx Burst Event Counter */
122 #define XM_TXF_MPAUSE   0x02a0  /* 32 bit r/o   Tx Pause MAC Ctrl Frame Cnt */
123 #define XM_TXF_MCTRL    0x02a4  /* 32 bit r/o   Tx MAC Ctrl Frame Counter */
124 #define XM_TXF_SNG_COL  0x02a8  /* 32 bit r/o   Tx Single Collision Counter */
125 #define XM_TXF_MUL_COL  0x02ac  /* 32 bit r/o   Tx Multiple Collision Counter */
126 #define XM_TXF_ABO_COL  0x02b0  /* 32 bit r/o   Tx aborted due to Exces. Col. */
127 #define XM_TXF_LAT_COL  0x02b4  /* 32 bit r/o   Tx Late Collision Counter */
128 #define XM_TXF_DEF              0x02b8  /* 32 bit r/o   Tx Deferred Frame Counter */
129 #define XM_TXF_EX_DEF   0x02bc  /* 32 bit r/o   Tx Excessive Deferall Counter */
130 #define XM_TXE_FIFO_UR  0x02c0  /* 32 bit r/o   Tx FIFO Underrun Event Cnt */
131 #define XM_TXE_CS_ERR   0x02c4  /* 32 bit r/o   Tx Carrier Sense Error Cnt */
132 #define XM_TXP_UTIL             0x02c8  /* 32 bit r/o   Tx Utilization in % */
133         /* 0x02cc - 0x02ce:     reserved */
134 #define XM_TXF_64B              0x02d0  /* 32 bit r/o   64 Byte Tx Frame Counter */
135 #define XM_TXF_127B             0x02d4  /* 32 bit r/o   65-127 Byte Tx Frame Counter */
136 #define XM_TXF_255B             0x02d8  /* 32 bit r/o   128-255 Byte Tx Frame Counter */
137 #define XM_TXF_511B             0x02dc  /* 32 bit r/o   256-511 Byte Tx Frame Counter */
138 #define XM_TXF_1023B    0x02e0  /* 32 bit r/o   512-1023 Byte Tx Frame Counter*/
139 #define XM_TXF_MAX_SZ   0x02e4  /* 32 bit r/o   1024-MaxSize Byte Tx Frame Cnt*/
140         /* 0x02e8 - 0x02fe:     reserved */
141 #define XM_RXF_OK               0x0300  /* 32 bit r/o   Frames Received OK */
142 #define XM_RXO_OK_HI    0x0304  /* 32 bit r/o   Octets Received OK High Cnt */
143 #define XM_RXO_OK_LO    0x0308  /* 32 bit r/o   Octets Received OK Low Counter*/
144 #define XM_RXF_BC_OK    0x030c  /* 32 bit r/o   Broadcast Frames Received OK */
145 #define XM_RXF_MC_OK    0x0310  /* 32 bit r/o   Multicast Frames Received OK */
146 #define XM_RXF_UC_OK    0x0314  /* 32 bit r/o   Unicast Frames Received OK */
147 #define XM_RXF_MPAUSE   0x0318  /* 32 bit r/o   Rx Pause MAC Ctrl Frame Cnt */
148 #define XM_RXF_MCTRL    0x031c  /* 32 bit r/o   Rx MAC Ctrl Frame Counter */
149 #define XM_RXF_INV_MP   0x0320  /* 32 bit r/o   Rx invalid Pause Frame Cnt */
150 #define XM_RXF_INV_MOC  0x0324  /* 32 bit r/o   Rx Frames with inv. MAC Opcode*/
151 #define XM_RXE_BURST    0x0328  /* 32 bit r/o   Rx Burst Event Counter */
152 #define XM_RXE_FMISS    0x032c  /* 32 bit r/o   Rx Missed Frames Event Cnt */
153 #define XM_RXF_FRA_ERR  0x0330  /* 32 bit r/o   Rx Framing Error Counter */
154 #define XM_RXE_FIFO_OV  0x0334  /* 32 bit r/o   Rx FIFO overflow Event Cnt */
155 #define XM_RXF_JAB_PKT  0x0338  /* 32 bit r/o   Rx Jabber Packet Frame Cnt */
156 #define XM_RXE_CAR_ERR  0x033c  /* 32 bit r/o   Rx Carrier Event Error Cnt */
157 #define XM_RXF_LEN_ERR  0x0340  /* 32 bit r/o   Rx in Range Length Error */
158 #define XM_RXE_SYM_ERR  0x0344  /* 32 bit r/o   Rx Symbol Error Counter */
159 #define XM_RXE_SHT_ERR  0x0348  /* 32 bit r/o   Rx Short Event Error Cnt */
160 #define XM_RXE_RUNT             0x034c  /* 32 bit r/o   Rx Runt Event Counter */
161 #define XM_RXF_LNG_ERR  0x0350  /* 32 bit r/o   Rx Frame too Long Error Cnt */
162 #define XM_RXF_FCS_ERR  0x0354  /* 32 bit r/o   Rx Frame Check Seq. Error Cnt */
163         /* 0x0358 - 0x035a:     reserved */
164 #define XM_RXF_CEX_ERR  0x035c  /* 32 bit r/o   Rx Carrier Ext Error Frame Cnt*/
165 #define XM_RXP_UTIL             0x0360  /* 32 bit r/o   Rx Utilization in % */
166         /* 0x0364 - 0x0366:     reserved */
167 #define XM_RXF_64B              0x0368  /* 32 bit r/o   64 Byte Rx Frame Counter */
168 #define XM_RXF_127B             0x036c  /* 32 bit r/o   65-127 Byte Rx Frame Counter */
169 #define XM_RXF_255B             0x0370  /* 32 bit r/o   128-255 Byte Rx Frame Counter */
170 #define XM_RXF_511B             0x0374  /* 32 bit r/o   256-511 Byte Rx Frame Counter */
171 #define XM_RXF_1023B    0x0378  /* 32 bit r/o   512-1023 Byte Rx Frame Counter*/
172 #define XM_RXF_MAX_SZ   0x037c  /* 32 bit r/o   1024-MaxSize Byte Rx Frame Cnt*/
173         /* 0x02e8 - 0x02fe:     reserved */
174
175
176 /*----------------------------------------------------------------------------*/
177 /*
178  * XMAC Bit Definitions
179  *
180  * If the bit access behaviour differs from the register access behaviour
181  * (r/w, r/o) this is documented after the bit number.
182  * The following bit access behaviours are used:
183  *      (sc)    self clearing
184  *      (ro)    read only
185  */
186
187 /*      XM_MMU_CMD      16 bit r/w      MMU Command Register */
188                                                                 /* Bit 15..13:  reserved */
189 #define XM_MMU_PHY_RDY  (1<<12) /* Bit 12:      PHY Read Ready */
190 #define XM_MMU_PHY_BUSY (1<<11) /* Bit 11:      PHY Busy */
191 #define XM_MMU_IGN_PF   (1<<10) /* Bit 10:      Ignore Pause Frame */
192 #define XM_MMU_MAC_LB   (1<<9)  /* Bit  9:      Enable MAC Loopback */
193                                                                 /* Bit  8:      reserved */
194 #define XM_MMU_FRC_COL  (1<<7)  /* Bit  7:      Force Collision */
195 #define XM_MMU_SIM_COL  (1<<6)  /* Bit  6:      Simulate Collision */
196 #define XM_MMU_NO_PRE   (1<<5)  /* Bit  5:      No MDIO Preamble */
197 #define XM_MMU_GMII_FD  (1<<4)  /* Bit  4:      GMII uses Full Duplex */
198 #define XM_MMU_RAT_CTRL (1<<3)  /* Bit  3:      Enable Rate Control */
199 #define XM_MMU_GMII_LOOP (1<<2) /* Bit  2:      PHY is in Loopback Mode */
200 #define XM_MMU_ENA_RX   (1<<1)  /* Bit  1:      Enable Receiver */
201 #define XM_MMU_ENA_TX   (1<<0)  /* Bit  0:      Enable Transmitter */
202
203
204 /*      XM_TX_CMD       16 bit r/w      Transmit Command Register */
205                                                                 /* Bit 15..7:   reserved */
206 #define XM_TX_BK2BK             (1<<6)  /* Bit  6:      Ignor Carrier Sense (Tx Bk2Bk)*/
207 #define XM_TX_ENC_BYP   (1<<5)  /* Bit  5:      Set Encoder in Bypass Mode */
208 #define XM_TX_SAM_LINE  (1<<4)  /* Bit  4: (sc) Start utilization calculation */
209 #define XM_TX_NO_GIG_MD (1<<3)  /* Bit  3:      Disable Carrier Extension */
210 #define XM_TX_NO_PRE    (1<<2)  /* Bit  2:      Disable Preamble Generation */
211 #define XM_TX_NO_CRC    (1<<1)  /* Bit  1:      Disable CRC Generation */
212 #define XM_TX_AUTO_PAD  (1<<0)  /* Bit  0:      Enable Automatic Padding */
213
214
215 /*      XM_TX_RT_LIM    16 bit r/w      Transmit Retry Limit Register */
216                                                                 /* Bit 15..5:   reserved */
217 #define XM_RT_LIM_MSK   0x1f    /* Bit  4..0:   Tx Retry Limit */
218
219
220 /*      XM_TX_STIME     16 bit r/w      Transmit Slottime Register */
221                                                                 /* Bit 15..7:   reserved */
222 #define XM_STIME_MSK    0x7f    /* Bit  6..0:   Tx Slottime bits */
223
224
225 /*      XM_TX_IPG       16 bit r/w      Transmit Inter Packet Gap */
226                                                                 /* Bit 15..8:   reserved */
227 #define XM_IPG_MSK              0xff    /* Bit  7..0:   IPG value bits */
228
229
230 /*      XM_RX_CMD       16 bit r/w      Receive Command Register */
231                                                                 /* Bit 15..9:   reserved */
232 #define XM_RX_LENERR_OK (1<<8)  /* Bit  8       don't set Rx Err bit for */
233                                                                 /*              inrange error packets */
234 #define XM_RX_BIG_PK_OK (1<<7)  /* Bit  7       don't set Rx Err bit for */
235                                                                 /*              jumbo packets */
236 #define XM_RX_IPG_CAP   (1<<6)  /* Bit  6       repl. type field with IPG */
237 #define XM_RX_TP_MD             (1<<5)  /* Bit  5:      Enable transparent Mode */
238 #define XM_RX_STRIP_FCS (1<<4)  /* Bit  4:      Enable FCS Stripping */
239 #define XM_RX_SELF_RX   (1<<3)  /* Bit  3:      Enable Rx of own packets */
240 #define XM_RX_SAM_LINE  (1<<2)  /* Bit  2: (sc) Start utilization calculation */
241 #define XM_RX_STRIP_PAD (1<<1)  /* Bit  1:      Strip pad bytes of Rx frames */
242 #define XM_RX_DIS_CEXT  (1<<0)  /* Bit  0:      Disable carrier ext. check */
243
244
245 /*      XM_PHY_ADDR     16 bit r/w      PHY Address Register */
246                                                                 /* Bit 15..5:   reserved */
247 #define XM_PHY_ADDR_SZ  0x1f    /* Bit  4..0:   PHY Address bits */
248
249
250 /*      XM_GP_PORT      32 bit r/w      General Purpose Port Register */
251                                                                 /* Bit 31..7:   reserved */
252 #define XM_GP_ANIP              (1L<<6) /* Bit  6: (ro) Auto-Neg. in progress */
253 #define XM_GP_FRC_INT   (1L<<5) /* Bit  5: (sc) Force Interrupt */
254                                                                 /* Bit  4:      reserved */
255 #define XM_GP_RES_MAC   (1L<<3) /* Bit  3: (sc) Reset MAC and FIFOs */
256 #define XM_GP_RES_STAT  (1L<<2) /* Bit  2: (sc) Reset the statistics module */
257                                                                 /* Bit  1:      reserved */
258 #define XM_GP_INP_ASS   (1L<<0) /* Bit  0: (ro) GP Input Pin asserted */
259
260
261 /*      XM_IMSK         16 bit r/w      Interrupt Mask Register */
262 /*      XM_ISRC         16 bit r/o      Interrupt Status Register */
263                                                                 /* Bit 15:      reserved */
264 #define XM_IS_LNK_AE    (1<<14) /* Bit 14:      Link Asynchronous Event */
265 #define XM_IS_TX_ABORT  (1<<13) /* Bit 13:      Transmit Abort, late Col. etc */
266 #define XM_IS_FRC_INT   (1<<12) /* Bit 12:      Force INT bit set in GP */
267 #define XM_IS_INP_ASS   (1<<11) /* Bit 11:      Input Asserted, GP bit 0 set */
268 #define XM_IS_LIPA_RC   (1<<10) /* Bit 10:      Link Partner requests config */
269 #define XM_IS_RX_PAGE   (1<<9)  /* Bit  9:      Page Received */
270 #define XM_IS_TX_PAGE   (1<<8)  /* Bit  8:      Next Page Loaded for Transmit */
271 #define XM_IS_AND               (1<<7)  /* Bit  7:      Auto-Negotiation Done */
272 #define XM_IS_TSC_OV    (1<<6)  /* Bit  6:      Time Stamp Counter Overflow */
273 #define XM_IS_RXC_OV    (1<<5)  /* Bit  5:      Rx Counter Event Overflow */
274 #define XM_IS_TXC_OV    (1<<4)  /* Bit  4:      Tx Counter Event Overflow */
275 #define XM_IS_RXF_OV    (1<<3)  /* Bit  3:      Receive FIFO Overflow */
276 #define XM_IS_TXF_UR    (1<<2)  /* Bit  2:      Transmit FIFO Underrun */
277 #define XM_IS_TX_COMP   (1<<1)  /* Bit  1:      Frame Tx Complete */
278 #define XM_IS_RX_COMP   (1<<0)  /* Bit  0:      Frame Rx Complete */
279
280 #define XM_DEF_MSK      (~(XM_IS_INP_ASS | XM_IS_LIPA_RC | XM_IS_RX_PAGE |\
281                         XM_IS_AND | XM_IS_RXC_OV | XM_IS_TXC_OV | XM_IS_TXF_UR))
282
283
284 /*      XM_HW_CFG       16 bit r/w      Hardware Config Register */
285                                                                 /* Bit 15.. 4:  reserved */
286 #define XM_HW_GEN_EOP   (1<<3)  /* Bit  3:      generate End of Packet pulse */
287 #define XM_HW_COM4SIG   (1<<2)  /* Bit  2:      use Comma Detect for Sig. Det.*/
288                                                                 /* Bit  1:      reserved */
289 #define XM_HW_GMII_MD   (1<<0)  /* Bit  0:      GMII Interface selected */
290
291
292 /*      XM_TX_LO_WM     16 bit r/w      Tx FIFO Low Water Mark */
293 /*      XM_TX_HI_WM     16 bit r/w      Tx FIFO High Water Mark */
294                                                                 /* Bit 15..10   reserved */
295 #define XM_TX_WM_MSK    0x01ff  /* Bit  9.. 0   Tx FIFO Watermark bits */
296
297 /*      XM_TX_THR       16 bit r/w      Tx Request Threshold */
298 /*      XM_HT_THR       16 bit r/w      Host Request Threshold */
299 /*      XM_RX_THR       16 bit r/w      Rx Request Threshold */
300                                                                 /* Bit 15..11   reserved */
301 #define XM_THR_MSK              0x03ff  /* Bit 10.. 0   Rx/Tx Request Threshold bits */
302
303
304 /*      XM_TX_STAT      32 bit r/o      Tx Status LIFO Register */
305 #define XM_ST_VALID             (1UL<<31)       /* Bit 31:      Status Valid */
306 #define XM_ST_BYTE_CNT  (0x3fffL<<17)   /* Bit 30..17:  Tx frame Length */
307 #define XM_ST_RETRY_CNT (0x1fL<<12)     /* Bit 16..12:  Retry Count */
308 #define XM_ST_EX_COL    (1L<<11)        /* Bit 11:      Excessive Collisions */
309 #define XM_ST_EX_DEF    (1L<<10)        /* Bit 10:      Excessive Deferral */
310 #define XM_ST_BURST             (1L<<9)         /* Bit  9:      p. xmitted in burst md*/
311 #define XM_ST_DEFER             (1L<<8)         /* Bit  8:      packet was defered */
312 #define XM_ST_BC                (1L<<7)         /* Bit  7:      Broadcast packet */
313 #define XM_ST_MC                (1L<<6)         /* Bit  6:      Multicast packet */
314 #define XM_ST_UC                (1L<<5)         /* Bit  5:      Unicast packet */
315 #define XM_ST_TX_UR             (1L<<4)         /* Bit  4:      FIFO Underrun occured */
316 #define XM_ST_CS_ERR    (1L<<3)         /* Bit  3:      Carrier Sense Error */
317 #define XM_ST_LAT_COL   (1L<<2)         /* Bit  2:      Late Collision Error */
318 #define XM_ST_MUL_COL   (1L<<1)         /* Bit  1:      Multiple Collisions */
319 #define XM_ST_SGN_COL   (1L<<0)         /* Bit  0:      Single Collision */
320
321 /*      XM_RX_LO_WM     16 bit r/w      Receive Low Water Mark */
322 /*      XM_RX_HI_WM     16 bit r/w      Receive High Water Mark */
323                                                                         /* Bit 15..11:  reserved */
324 #define XM_RX_WM_MSK    0x03ff          /* Bit 11.. 0:  Rx FIFO Watermark bits */
325
326
327 /*      XM_DEV_ID       32 bit r/o      Device ID Register */
328 #define XM_DEV_OUI      (0x00ffffffUL<<8)       /* Bit 31..8:   Device OUI */
329 #define XM_DEV_REV      (0x07L << 5)            /* Bit  7..5:   Chip Rev Num */
330
331
332 /*      XM_MODE         32 bit r/w      Mode Register */
333                                                                         /* Bit 31..27:  reserved */
334 #define XM_MD_ENA_REJ   (1L<<26)        /* Bit 26:      Enable Frame Reject */
335 #define XM_MD_SPOE_E    (1L<<25)        /* Bit 25:      Send Pause on Edge */
336                                                                         /*              extern generated */
337 #define XM_MD_TX_REP    (1L<<24)        /* Bit 24:      Transmit Repeater Mode */
338 #define XM_MD_SPOFF_I   (1L<<23)        /* Bit 23:      Send Pause on FIFO full */
339                                                                         /*              intern generated */
340 #define XM_MD_LE_STW    (1L<<22)        /* Bit 22:      Rx Stat Word in Little Endian */
341 #define XM_MD_TX_CONT   (1L<<21)        /* Bit 21:      Send Continuous */
342 #define XM_MD_TX_PAUSE  (1L<<20)        /* Bit 20: (sc) Send Pause Frame */
343 #define XM_MD_ATS               (1L<<19)        /* Bit 19:      Append Time Stamp */
344 #define XM_MD_SPOL_I    (1L<<18)        /* Bit 18:      Send Pause on Low */
345                                                                         /*              intern generated */
346 #define XM_MD_SPOH_I    (1L<<17)        /* Bit 17:      Send Pause on High */
347                                                                         /*              intern generated */
348 #define XM_MD_CAP               (1L<<16)        /* Bit 16:      Check Address Pair */
349 #define XM_MD_ENA_HASH  (1L<<15)        /* Bit 15:      Enable Hashing */
350 #define XM_MD_CSA               (1L<<14)        /* Bit 14:      Check Station Address */
351 #define XM_MD_CAA               (1L<<13)        /* Bit 13:      Check Address Array */
352 #define XM_MD_RX_MCTRL  (1L<<12)        /* Bit 12:      Rx MAC Control Frame */
353 #define XM_MD_RX_RUNT   (1L<<11)        /* Bit 11:      Rx Runt Frames */
354 #define XM_MD_RX_IRLE   (1L<<10)        /* Bit 10:      Rx in Range Len Err Frame */
355 #define XM_MD_RX_LONG   (1L<<9)         /* Bit  9:      Rx Long Frame */
356 #define XM_MD_RX_CRCE   (1L<<8)         /* Bit  8:      Rx CRC Error Frame */
357 #define XM_MD_RX_ERR    (1L<<7)         /* Bit  7:      Rx Error Frame */
358 #define XM_MD_DIS_UC    (1L<<6)         /* Bit  6:      Disable Rx Unicast */
359 #define XM_MD_DIS_MC    (1L<<5)         /* Bit  5:      Disable Rx Multicast */
360 #define XM_MD_DIS_BC    (1L<<4)         /* Bit  4:      Disable Rx Broadcast */
361 #define XM_MD_ENA_PROM  (1L<<3)         /* Bit  3:      Enable Promiscuous */
362 #define XM_MD_ENA_BE    (1L<<2)         /* Bit  2:      Enable Big Endian */
363 #define XM_MD_FTF               (1L<<1)         /* Bit  1: (sc) Flush Tx FIFO */
364 #define XM_MD_FRF               (1L<<0)         /* Bit  0: (sc) Flush Rx FIFO */
365
366 #define XM_PAUSE_MODE   (XM_MD_SPOE_E | XM_MD_SPOL_I | XM_MD_SPOH_I)
367 #define XM_DEF_MODE             (XM_MD_RX_RUNT | XM_MD_RX_IRLE | XM_MD_RX_LONG |\
368                                 XM_MD_RX_CRCE | XM_MD_RX_ERR | XM_MD_CSA | XM_MD_CAA)
369
370 /*      XM_STAT_CMD     16 bit r/w      Statistics Command Register */
371                                                                 /* Bit 16..6:   reserved */
372 #define XM_SC_SNP_RXC   (1<<5)  /* Bit  5: (sc) Snap Rx Counters */
373 #define XM_SC_SNP_TXC   (1<<4)  /* Bit  4: (sc) Snap Tx Counters */
374 #define XM_SC_CP_RXC    (1<<3)  /* Bit  3:      Copy Rx Counters Continuously */
375 #define XM_SC_CP_TXC    (1<<2)  /* Bit  2:      Copy Tx Counters Continuously */
376 #define XM_SC_CLR_RXC   (1<<1)  /* Bit  1: (sc) Clear Rx Counters */
377 #define XM_SC_CLR_TXC   (1<<0)  /* Bit  0: (sc) Clear Tx Counters */
378
379
380 /*      XM_RX_CNT_EV    32 bit r/o      Rx Counter Event Register */
381 /*      XM_RX_EV_MSK    32 bit r/w      Rx Counter Event Mask */
382 #define XMR_MAX_SZ_OV   (1UL<<31)       /* Bit 31:      1024-MaxSize Rx Cnt Ov*/
383 #define XMR_1023B_OV    (1L<<30)        /* Bit 30:      512-1023Byte Rx Cnt Ov*/
384 #define XMR_511B_OV             (1L<<29)        /* Bit 29:      256-511 Byte Rx Cnt Ov*/
385 #define XMR_255B_OV             (1L<<28)        /* Bit 28:      128-255 Byte Rx Cnt Ov*/
386 #define XMR_127B_OV             (1L<<27)        /* Bit 27:      65-127 Byte Rx Cnt Ov */
387 #define XMR_64B_OV              (1L<<26)        /* Bit 26:      64 Byte Rx Cnt Ov */
388 #define XMR_UTIL_OV             (1L<<25)        /* Bit 25:      Rx Util Cnt Overflow */
389 #define XMR_UTIL_UR             (1L<<24)        /* Bit 24:      Rx Util Cnt Underrun */
390 #define XMR_CEX_ERR_OV  (1L<<23)        /* Bit 23:      CEXT Err Cnt Ov */
391                                                                         /* Bit 22:      reserved */
392 #define XMR_FCS_ERR_OV  (1L<<21)        /* Bit 21:      Rx FCS Error Cnt Ov */
393 #define XMR_LNG_ERR_OV  (1L<<20)        /* Bit 20:      Rx too Long Err Cnt Ov*/
394 #define XMR_RUNT_OV             (1L<<19)        /* Bit 19:      Runt Event Cnt Ov */
395 #define XMR_SHT_ERR_OV  (1L<<18)        /* Bit 18:      Rx Short Ev Err Cnt Ov*/
396 #define XMR_SYM_ERR_OV  (1L<<17)        /* Bit 17:      Rx Sym Err Cnt Ov */
397                                                                         /* Bit 16:      reserved */
398 #define XMR_CAR_ERR_OV  (1L<<15)        /* Bit 15:      Rx Carr Ev Err Cnt Ov */
399 #define XMR_JAB_PKT_OV  (1L<<14)        /* Bit 14:      Rx Jabb Packet Cnt Ov */
400 #define XMR_FIFO_OV             (1L<<13)        /* Bit 13:      Rx FIFO Ov Ev Cnt Ov */
401 #define XMR_FRA_ERR_OV  (1L<<12)        /* Bit 12:      Rx Framing Err Cnt Ov */
402 #define XMR_FMISS_OV    (1L<<11)        /* Bit 11:      Rx Missed Ev Cnt Ov */
403 #define XMR_BURST               (1L<<10)        /* Bit 10:      Rx Burst Event Cnt Ov */
404 #define XMR_INV_MOC             (1L<<9)         /* Bit  9:      Rx with inv. MAC OC Ov*/
405 #define XMR_INV_MP              (1L<<8)         /* Bit  8:      Rx inv Pause Frame Ov */
406 #define XMR_MCTRL_OV    (1L<<7)         /* Bit  7:      Rx MAC Ctrl-F Cnt Ov */
407 #define XMR_MPAUSE_OV   (1L<<6)         /* Bit  6:      Rx Pause MAC Ctrl-F Ov*/
408 #define XMR_UC_OK_OV    (1L<<5)         /* Bit  5:      Rx Unicast Frame CntOv*/
409 #define XMR_MC_OK_OV    (1L<<4)         /* Bit  4:      Rx Multicast Cnt Ov */
410 #define XMR_BC_OK_OV    (1L<<3)         /* Bit  3:      Rx Broadcast Cnt Ov */
411 #define XMR_OK_LO_OV    (1L<<2)         /* Bit  2:      Octets Rx OK Low CntOv*/
412 #define XMR_OK_HI_OV    (1L<<1)         /* Bit  1:      Octets Rx OK Hi Cnt Ov*/
413 #define XMR_OK_OV               (1L<<0)         /* Bit  0:      Frames Received Ok Ov */
414
415 #define XMR_DEF_MSK             (XMR_OK_LO_OV | XMR_OK_HI_OV)
416
417 /*      XM_TX_CNT_EV    32 bit r/o      Tx Counter Event Register */
418 /*      XM_TX_EV_MSK    32 bit r/w      Tx Counter Event Mask */
419                                                                         /* Bit 31..26:  reserved */
420 #define XMT_MAX_SZ_OV   (1L<<25)        /* Bit 25:      1024-MaxSize Tx Cnt Ov*/
421 #define XMT_1023B_OV    (1L<<24)        /* Bit 24:      512-1023Byte Tx Cnt Ov*/
422 #define XMT_511B_OV             (1L<<23)        /* Bit 23:      256-511 Byte Tx Cnt Ov*/
423 #define XMT_255B_OV             (1L<<22)        /* Bit 22:      128-255 Byte Tx Cnt Ov*/
424 #define XMT_127B_OV             (1L<<21)        /* Bit 21:      65-127 Byte Tx Cnt Ov */
425 #define XMT_64B_OV              (1L<<20)        /* Bit 20:      64 Byte Tx Cnt Ov */
426 #define XMT_UTIL_OV             (1L<<19)        /* Bit 19:      Tx Util Cnt Overflow */
427 #define XMT_UTIL_UR             (1L<<18)        /* Bit 18:      Tx Util Cnt Underrun */
428 #define XMT_CS_ERR_OV   (1L<<17)        /* Bit 17:      Tx Carr Sen Err Cnt Ov*/
429 #define XMT_FIFO_UR_OV  (1L<<16)        /* Bit 16:      Tx FIFO Ur Ev Cnt Ov */
430 #define XMT_EX_DEF_OV   (1L<<15)        /* Bit 15:      Tx Ex Deferall Cnt Ov */
431 #define XMT_DEF                 (1L<<14)        /* Bit 14:      Tx Deferred Cnt Ov */
432 #define XMT_LAT_COL_OV  (1L<<13)        /* Bit 13:      Tx Late Col Cnt Ov */
433 #define XMT_ABO_COL_OV  (1L<<12)        /* Bit 12:      Tx abo dueto Ex Col Ov*/
434 #define XMT_MUL_COL_OV  (1L<<11)        /* Bit 11:      Tx Mult Col Cnt Ov */
435 #define XMT_SNG_COL             (1L<<10)        /* Bit 10:      Tx Single Col Cnt Ov */
436 #define XMT_MCTRL_OV    (1L<<9)         /* Bit  9:      Tx MAC Ctrl Counter Ov*/
437 #define XMT_MPAUSE              (1L<<8)         /* Bit  8:      Tx Pause MAC Ctrl-F Ov*/
438 #define XMT_BURST               (1L<<7)         /* Bit  7:      Tx Burst Event Cnt Ov */
439 #define XMT_LONG                (1L<<6)         /* Bit  6:      Tx Long Frame Cnt Ov */
440 #define XMT_UC_OK_OV    (1L<<5)         /* Bit  5:      Tx Unicast Cnt Ov */
441 #define XMT_MC_OK_OV    (1L<<4)         /* Bit  4:      Tx Multicast Cnt Ov */
442 #define XMT_BC_OK_OV    (1L<<3)         /* Bit  3:      Tx Broadcast Cnt Ov */
443 #define XMT_OK_LO_OV    (1L<<2)         /* Bit  2:      Octets Tx OK Low CntOv*/
444 #define XMT_OK_HI_OV    (1L<<1)         /* Bit  1:      Octets Tx OK Hi Cnt Ov*/
445 #define XMT_OK_OV               (1L<<0)         /* Bit  0:      Frames Tx Ok Ov */
446
447 #define XMT_DEF_MSK             (XMT_OK_LO_OV | XMT_OK_HI_OV)
448
449 /*
450  * Receive Frame Status Encoding
451  */
452 #define XMR_FS_LEN      (0x3fffUL<<18)  /* Bit 31..18:  Rx Frame Length */
453 #define XMR_FS_2L_VLAN  (1L<<17)        /* Bit 17:      tagged wh 2Lev VLAN ID*/
454 #define XMR_FS_1L_VLAN  (1L<<16)        /* Bit 16:      tagged wh 1Lev VLAN ID*/
455 #define XMR_FS_BC               (1L<<15)        /* Bit 15:      Broadcast Frame */
456 #define XMR_FS_MC               (1L<<14)        /* Bit 14:      Multicast Frame */
457 #define XMR_FS_UC               (1L<<13)        /* Bit 13:      Unicast Frame */
458                                                                         /* Bit 12:      reserved */
459 #define XMR_FS_BURST    (1L<<11)        /* Bit 11:      Burst Mode */
460 #define XMR_FS_CEX_ERR  (1L<<10)        /* Bit 10:      Carrier Ext. Error */
461 #define XMR_FS_802_3    (1L<<9)         /* Bit  9:      802.3 Frame */
462 #define XMR_FS_COL_ERR  (1L<<8)         /* Bit  8:      Collision Error */
463 #define XMR_FS_CAR_ERR  (1L<<7)         /* Bit  7:      Carrier Event Error */
464 #define XMR_FS_LEN_ERR  (1L<<6)         /* Bit  6:      In-Range Length Error */
465 #define XMR_FS_FRA_ERR  (1L<<5)         /* Bit  5:      Framing Error */
466 #define XMR_FS_RUNT             (1L<<4)         /* Bit  4:      Runt Frame */
467 #define XMR_FS_LNG_ERR  (1L<<3)         /* Bit  3:      Giant (Jumbo) Frame */
468 #define XMR_FS_FCS_ERR  (1L<<2)         /* Bit  2:      Frame Check Sequ Err */
469 #define XMR_FS_ERR              (1L<<1)         /* Bit  1:      Frame Error */
470 #define XMR_FS_MCTRL    (1L<<0)         /* Bit  0:      MAC Control Packet */
471
472 /*
473  * XMR_FS_ERR will be set if
474  *      XMR_FS_FCS_ERR, XMR_FS_LNG_ERR, XMR_FS_RUNT,
475  *      XMR_FS_FRA_ERR, XMR_FS_LEN_ERR, or XMR_FS_CEX_ERR
476  * is set. XMR_FS_LNG_ERR and XMR_FS_LEN_ERR will issue
477  * XMR_FS_ERR unless the corresponding bit in the Receive Command
478  * Register is set.
479  */
480 #define XMR_FS_ANY_ERR  XMR_FS_ERR
481
482 /*----------------------------------------------------------------------------*/
483 /*
484  * XMAC-PHY Registers, indirect addressed over the XMAC
485  */
486 #define PHY_XMAC_CTRL           0x00    /* 16 bit r/w   PHY Control Register */
487 #define PHY_XMAC_STAT           0x01    /* 16 bit r/w   PHY Status Register */
488 #define PHY_XMAC_ID0            0x02    /* 16 bit r/o   PHY ID0 Register */
489 #define PHY_XMAC_ID1            0x03    /* 16 bit r/o   PHY ID1 Register */
490 #define PHY_XMAC_AUNE_ADV       0x04    /* 16 bit r/w   Auto-Neg. Advertisement */
491 #define PHY_XMAC_AUNE_LP        0x05    /* 16 bit r/o   Link Partner Abi Reg */
492 #define PHY_XMAC_AUNE_EXP       0x06    /* 16 bit r/o   Auto-Neg. Expansion Reg */
493 #define PHY_XMAC_NEPG           0x07    /* 16 bit r/w   Next Page Register */
494 #define PHY_XMAC_NEPG_LP        0x08    /* 16 bit r/o   Next Page Link Partner */
495         /* 0x09 - 0x0e:         reserved */
496 #define PHY_XMAC_EXT_STAT       0x0f    /* 16 bit r/o   Ext Status Register */
497 #define PHY_XMAC_RES_ABI        0x10    /* 16 bit r/o   PHY Resolved Ability */
498
499 /*----------------------------------------------------------------------------*/
500 /*
501  * Broadcom-PHY Registers, indirect addressed over XMAC
502  */
503 #define PHY_BCOM_CTRL           0x00    /* 16 bit r/w   PHY Control Register */
504 #define PHY_BCOM_STAT           0x01    /* 16 bit r/o   PHY Status Register */
505 #define PHY_BCOM_ID0            0x02    /* 16 bit r/o   PHY ID0 Register */
506 #define PHY_BCOM_ID1            0x03    /* 16 bit r/o   PHY ID1 Register */
507 #define PHY_BCOM_AUNE_ADV       0x04    /* 16 bit r/w   Auto-Neg. Advertisement */
508 #define PHY_BCOM_AUNE_LP        0x05    /* 16 bit r/o   Link Part Ability Reg */
509 #define PHY_BCOM_AUNE_EXP       0x06    /* 16 bit r/o   Auto-Neg. Expansion Reg */
510 #define PHY_BCOM_NEPG           0x07    /* 16 bit r/w   Next Page Register */
511 #define PHY_BCOM_NEPG_LP        0x08    /* 16 bit r/o   Next Page Link Partner */
512         /* Broadcom-specific registers */
513 #define PHY_BCOM_1000T_CTRL     0x09    /* 16 bit r/w   1000Base-T Ctrl Reg */
514 #define PHY_BCOM_1000T_STAT     0x0a    /* 16 bit r/o   1000Base-T Status Reg */
515         /* 0x0b - 0x0e:         reserved */
516 #define PHY_BCOM_EXT_STAT       0x0f    /* 16 bit r/o   Extended Status Reg */
517 #define PHY_BCOM_P_EXT_CTRL     0x10    /* 16 bit r/w   PHY Extended Ctrl Reg */
518 #define PHY_BCOM_P_EXT_STAT     0x11    /* 16 bit r/o   PHY Extended Stat Reg */
519 #define PHY_BCOM_RE_CTR         0x12    /* 16 bit r/w   Receive Error Counter */
520 #define PHY_BCOM_FC_CTR         0x13    /* 16 bit r/w   False Carrier Sense Cnt */
521 #define PHY_BCOM_RNO_CTR        0x14    /* 16 bit r/w   Receiver NOT_OK Cnt */
522         /* 0x15 - 0x17:         reserved */
523 #define PHY_BCOM_AUX_CTRL       0x18    /* 16 bit r/w   Auxiliary Control Reg */
524 #define PHY_BCOM_AUX_STAT       0x19    /* 16 bit r/o   Auxiliary Stat Summary */
525 #define PHY_BCOM_INT_STAT       0x1a    /* 16 bit r/o   Interrupt Status Reg */
526 #define PHY_BCOM_INT_MASK       0x1b    /* 16 bit r/w   Interrupt Mask Reg */
527         /* 0x1c:                reserved */
528         /* 0x1d - 0x1f:         test registers */
529
530 /*----------------------------------------------------------------------------*/
531 /*
532  * Marvel-PHY Registers, indirect addressed over GMAC
533  */
534 #define PHY_MARV_CTRL           0x00    /* 16 bit r/w   PHY Control Register */
535 #define PHY_MARV_STAT           0x01    /* 16 bit r/o   PHY Status Register */
536 #define PHY_MARV_ID0            0x02    /* 16 bit r/o   PHY ID0 Register */
537 #define PHY_MARV_ID1            0x03    /* 16 bit r/o   PHY ID1 Register */
538 #define PHY_MARV_AUNE_ADV       0x04    /* 16 bit r/w   Auto-Neg. Advertisement */
539 #define PHY_MARV_AUNE_LP        0x05    /* 16 bit r/o   Link Part Ability Reg */
540 #define PHY_MARV_AUNE_EXP       0x06    /* 16 bit r/o   Auto-Neg. Expansion Reg */
541 #define PHY_MARV_NEPG           0x07    /* 16 bit r/w   Next Page Register */
542 #define PHY_MARV_NEPG_LP        0x08    /* 16 bit r/o   Next Page Link Partner */
543         /* Marvel-specific registers */
544 #define PHY_MARV_1000T_CTRL     0x09    /* 16 bit r/w   1000Base-T Ctrl Reg */
545 #define PHY_MARV_1000T_STAT     0x0a    /* 16 bit r/o   1000Base-T Status Reg */
546         /* 0x0b - 0x0e:         reserved */
547 #define PHY_MARV_EXT_STAT       0x0f    /* 16 bit r/o   Extended Status Reg */
548 #define PHY_MARV_PHY_CTRL       0x10    /* 16 bit r/w   PHY Specific Ctrl Reg */
549 #define PHY_MARV_PHY_STAT       0x11    /* 16 bit r/o   PHY Specific Stat Reg */
550 #define PHY_MARV_INT_MASK       0x12    /* 16 bit r/w   Interrupt Mask Reg */
551 #define PHY_MARV_INT_STAT       0x13    /* 16 bit r/o   Interrupt Status Reg */
552 #define PHY_MARV_EXT_CTRL       0x14    /* 16 bit r/w   Ext. PHY Specific Ctrl */
553 #define PHY_MARV_RXE_CNT        0x15    /* 16 bit r/w   Receive Error Counter */
554 #define PHY_MARV_EXT_ADR        0x16    /* 16 bit r/w   Ext. Ad. for Cable Diag. */
555         /* 0x17:                reserved */
556 #define PHY_MARV_LED_CTRL       0x18    /* 16 bit r/w   LED Control Reg */
557 #define PHY_MARV_LED_OVER       0x19    /* 16 bit r/w   Manual LED Override Reg */
558 #define PHY_MARV_EXT_CTRL_2     0x1a    /* 16 bit r/w   Ext. PHY Specific Ctrl 2 */
559 #define PHY_MARV_EXT_P_STAT     0x1b    /* 16 bit r/w   Ext. PHY Spec. Stat Reg */
560 #define PHY_MARV_CABLE_DIAG     0x1c    /* 16 bit r/o   Cable Diagnostic Reg */
561         /* 0x1d - 0x1f:         reserved */
562
563 /*----------------------------------------------------------------------------*/
564 /*
565  * Level One-PHY Registers, indirect addressed over XMAC
566  */
567 #define PHY_LONE_CTRL           0x00    /* 16 bit r/w   PHY Control Register */
568 #define PHY_LONE_STAT           0x01    /* 16 bit r/o   PHY Status Register */
569 #define PHY_LONE_ID0            0x02    /* 16 bit r/o   PHY ID0 Register */
570 #define PHY_LONE_ID1            0x03    /* 16 bit r/o   PHY ID1 Register */
571 #define PHY_LONE_AUNE_ADV       0x04    /* 16 bit r/w   Auto-Neg. Advertisement */
572 #define PHY_LONE_AUNE_LP        0x05    /* 16 bit r/o   Link Part Ability Reg */
573 #define PHY_LONE_AUNE_EXP       0x06    /* 16 bit r/o   Auto-Neg. Expansion Reg */
574 #define PHY_LONE_NEPG           0x07    /* 16 bit r/w   Next Page Register */
575 #define PHY_LONE_NEPG_LP        0x08    /* 16 bit r/o   Next Page Link Partner */
576         /* Level One-specific registers */
577 #define PHY_LONE_1000T_CTRL     0x09    /* 16 bit r/w   1000Base-T Control Reg*/
578 #define PHY_LONE_1000T_STAT     0x0a    /* 16 bit r/o   1000Base-T Status Reg */
579         /* 0x0b -0x0e:          reserved */
580 #define PHY_LONE_EXT_STAT       0x0f    /* 16 bit r/o   Extended Status Reg */
581 #define PHY_LONE_PORT_CFG       0x10    /* 16 bit r/w   Port Configuration Reg*/
582 #define PHY_LONE_Q_STAT         0x11    /* 16 bit r/o   Quick Status Reg */
583 #define PHY_LONE_INT_ENAB       0x12    /* 16 bit r/w   Interrupt Enable Reg */
584 #define PHY_LONE_INT_STAT       0x13    /* 16 bit r/o   Interrupt Status Reg */
585 #define PHY_LONE_LED_CFG        0x14    /* 16 bit r/w   LED Configuration Reg */
586 #define PHY_LONE_PORT_CTRL      0x15    /* 16 bit r/w   Port Control Reg */
587 #define PHY_LONE_CIM            0x16    /* 16 bit r/o   CIM Reg */
588         /* 0x17 -0x1c:          reserved */
589
590 /*----------------------------------------------------------------------------*/
591 /*
592  * National-PHY Registers, indirect addressed over XMAC
593  */
594 #define PHY_NAT_CTRL            0x00    /* 16 bit r/w   PHY Control Register */
595 #define PHY_NAT_STAT            0x01    /* 16 bit r/w   PHY Status Register */
596 #define PHY_NAT_ID0                     0x02    /* 16 bit r/o   PHY ID0 Register */
597 #define PHY_NAT_ID1                     0x03    /* 16 bit r/o   PHY ID1 Register */
598 #define PHY_NAT_AUNE_ADV        0x04    /* 16 bit r/w   Auto-Neg. Advertisement */
599 #define PHY_NAT_AUNE_LP         0x05    /* 16 bit r/o   Link Partner Ability Reg */
600 #define PHY_NAT_AUNE_EXP        0x06    /* 16 bit r/o   Auto-Neg. Expansion Reg */
601 #define PHY_NAT_NEPG            0x07    /* 16 bit r/w   Next Page Register */
602 #define PHY_NAT_NEPG_LP         0x08    /* 16 bit r/o   Next Page Link Partner Reg */
603         /* National-specific registers */
604 #define PHY_NAT_1000T_CTRL      0x09    /* 16 bit r/w   1000Base-T Control Reg */
605 #define PHY_NAT_1000T_STAT      0x0a    /* 16 bit r/o   1000Base-T Status Reg */
606         /* 0x0b -0x0e:          reserved */
607 #define PHY_NAT_EXT_STAT        0x0f    /* 16 bit r/o   Extended Status Register */
608 #define PHY_NAT_EXT_CTRL1       0x10    /* 16 bit r/o   Extended Control Reg1 */
609 #define PHY_NAT_Q_STAT1         0x11    /* 16 bit r/o   Quick Status Reg1 */
610 #define PHY_NAT_10B_OP          0x12    /* 16 bit r/o   10Base-T Operations Reg */
611 #define PHY_NAT_EXT_CTRL2       0x13    /* 16 bit r/o   Extended Control Reg1 */
612 #define PHY_NAT_Q_STAT2         0x14    /* 16 bit r/o   Quick Status Reg2 */
613         /* 0x15 -0x18:          reserved */
614 #define PHY_NAT_PHY_ADDR        0x19    /* 16 bit r/o   PHY Address Register */
615
616
617 /*----------------------------------------------------------------------------*/
618
619 /*
620  * PHY bit definitions
621  * Bits defined as PHY_X_..., PHY_B_..., PHY_L_... or PHY_N_... are
622  * XMAC/Broadcom/LevelOne/National/Marvell-specific.
623  * All other are general.
624  */
625
626 /*****  PHY_XMAC_CTRL   16 bit r/w      PHY Control Register *****/
627 /*****  PHY_BCOM_CTRL   16 bit r/w      PHY Control Register *****/
628 /*****  PHY_MARV_CTRL   16 bit r/w      PHY Status Register *****/
629 /*****  PHY_LONE_CTRL   16 bit r/w      PHY Control Register *****/
630 #define PHY_CT_RESET    (1<<15) /* Bit 15: (sc) clear all PHY related regs */
631 #define PHY_CT_LOOP             (1<<14) /* Bit 14:      enable Loopback over PHY */
632 #define PHY_CT_SPS_LSB  (1<<13) /* Bit 13: (BC,L1) Speed select, lower bit */
633 #define PHY_CT_ANE              (1<<12) /* Bit 12:      Auto-Negotiation Enabled */
634 #define PHY_CT_PDOWN    (1<<11) /* Bit 11: (BC,L1) Power Down Mode */
635 #define PHY_CT_ISOL             (1<<10) /* Bit 10: (BC,L1) Isolate Mode */
636 #define PHY_CT_RE_CFG   (1<<9)  /* Bit  9: (sc) Restart Auto-Negotiation */
637 #define PHY_CT_DUP_MD   (1<<8)  /* Bit  8:      Duplex Mode */
638 #define PHY_CT_COL_TST  (1<<7)  /* Bit  7: (BC,L1) Collision Test enabled */
639 #define PHY_CT_SPS_MSB  (1<<6)  /* Bit  6: (BC,L1) Speed select, upper bit */
640                                                                 /* Bit  5..0:   reserved */
641
642 #define PHY_CT_SP1000   PHY_CT_SPS_MSB  /* enable speed of 1000 Mbps */
643 #define PHY_CT_SP100    PHY_CT_SPS_LSB  /* enable speed of  100 Mbps */
644 #define PHY_CT_SP10             (0)                             /* enable speed of   10 Mbps */
645
646
647 /*****  PHY_XMAC_STAT   16 bit r/w      PHY Status Register *****/
648 /*****  PHY_BCOM_STAT   16 bit r/w      PHY Status Register *****/
649 /*****  PHY_MARV_STAT   16 bit r/w      PHY Status Register *****/
650 /*****  PHY_LONE_STAT   16 bit r/w      PHY Status Register *****/
651                                                                 /* Bit 15..9:   reserved */
652                                 /*      (BC/L1) 100/10 Mbps cap bits ignored*/
653 #define PHY_ST_EXT_ST   (1<<8)  /* Bit  8:      Extended Status Present */
654                                                                 /* Bit  7:      reserved */
655 #define PHY_ST_PRE_SUP  (1<<6)  /* Bit  6: (BC/L1) preamble suppression */
656 #define PHY_ST_AN_OVER  (1<<5)  /* Bit  5:      Auto-Negotiation Over */
657 #define PHY_ST_REM_FLT  (1<<4)  /* Bit  4:      Remote Fault Condition Occured */
658 #define PHY_ST_AN_CAP   (1<<3)  /* Bit  3:      Auto-Negotiation Capability */
659 #define PHY_ST_LSYNC    (1<<2)  /* Bit  2:      Link Synchronized */
660 #define PHY_ST_JAB_DET  (1<<1)  /* Bit  1: (BC/L1) Jabber Detected */
661 #define PHY_ST_EXT_REG  (1<<0)  /* Bit  0:      Extended Register available */
662
663
664 /*****  PHY_XMAC_ID1            16 bit r/o      PHY ID1 Register */
665 /*****  PHY_BCOM_ID1            16 bit r/o      PHY ID1 Register */
666 /*****  PHY_MARV_ID1            16 bit r/o      PHY ID1 Register */
667 /*****  PHY_LONE_ID1            16 bit r/o      PHY ID1 Register */
668 #define PHY_I1_OUI_MSK  (0x3f<<10)      /* Bit 15..10:  Organization Unique ID */
669 #define PHY_I1_MOD_NUM  (0x3f<<4)       /* Bit  9.. 4:  Model Number */
670 #define PHY_I1_REV_MSK  0x0f            /* Bit  3.. 0:  Revision Number */
671
672 /* different Broadcom PHY Ids */
673 #define PHY_BCOM_ID1_A1         0x6041
674 #define PHY_BCOM_ID1_B2         0x6043
675 #define PHY_BCOM_ID1_C0         0x6044
676 #define PHY_BCOM_ID1_C5         0x6047
677
678
679 /*****  PHY_XMAC_AUNE_ADV       16 bit r/w      Auto-Negotiation Advertisement *****/
680 /*****  PHY_XMAC_AUNE_LP        16 bit r/o      Link Partner Ability Reg *****/
681 #define PHY_AN_NXT_PG   (1<<15) /* Bit 15:      Request Next Page */
682 #define PHY_X_AN_ACK    (1<<14) /* Bit 14: (ro) Acknowledge Received */
683 #define PHY_X_AN_RFB    (3<<12) /* Bit 13..12:  Remote Fault Bits */
684                                                                 /* Bit 11.. 9:  reserved */
685 #define PHY_X_AN_PAUSE  (3<<7)  /* Bit  8.. 7:  Pause Bits */
686 #define PHY_X_AN_HD             (1<<6)  /* Bit  6:      Half Duplex */
687 #define PHY_X_AN_FD             (1<<5)  /* Bit  5:      Full Duplex */
688                                                                 /* Bit  4.. 0:  reserved */
689
690 /*****  PHY_BCOM_AUNE_ADV       16 bit r/w      Auto-Negotiation Advertisement *****/
691 /*****  PHY_BCOM_AUNE_LP        16 bit r/o      Link Partner Ability Reg *****/
692 /*      PHY_AN_NXT_PG           (see XMAC) Bit 15:      Request Next Page */
693                                                                 /* Bit 14:      reserved */
694 #define PHY_B_AN_RF             (1<<13) /* Bit 13:      Remote Fault */
695                                                                 /* Bit 12:      reserved */
696 #define PHY_B_AN_ASP    (1<<11) /* Bit 11:      Asymmetric Pause */
697 #define PHY_B_AN_PC             (1<<10) /* Bit 10:      Pause Capable */
698                                                                 /* Bit  9..5:   100/10 BT cap bits ingnored */
699 #define PHY_B_AN_SEL    0x1f    /* Bit 4..0:    Selector Field, 00001=Ethernet*/
700
701 /*****  PHY_LONE_AUNE_ADV       16 bit r/w      Auto-Negotiation Advertisement *****/
702 /*****  PHY_LONE_AUNE_LP        16 bit r/o      Link Partner Ability Reg *****/
703 /*      PHY_AN_NXT_PG           (see XMAC) Bit 15:      Request Next Page */
704                                                                 /* Bit 14:      reserved */
705 #define PHY_L_AN_RF             (1<<13) /* Bit 13:      Remote Fault */
706                                                                 /* Bit 12:      reserved */
707 #define PHY_L_AN_ASP    (1<<11) /* Bit 11:      Asymmetric Pause */
708 #define PHY_L_AN_PC             (1<<10) /* Bit 10:      Pause Capable */
709                                                                 /* Bit  9..5:   100/10 BT cap bits ingnored */
710 #define PHY_L_AN_SEL    0x1f    /* Bit 4..0:    Selector Field, 00001=Ethernet*/
711
712 /*****  PHY_NAT_AUNE_ADV        16 bit r/w      Auto-Negotiation Advertisement *****/
713 /*****  PHY_NAT_AUNE_LP         16 bit r/o      Link Partner Ability Reg *****/
714 /*      PHY_AN_NXT_PG           (see XMAC) Bit 15:      Request Next Page */
715                                                                 /* Bit 14:      reserved */
716 #define PHY_N_AN_RF             (1<<13) /* Bit 13:      Remote Fault */
717                                                                 /* Bit 12:      reserved */
718 #define PHY_N_AN_100F   (1<<11) /* Bit 11:      100Base-T2 FD Support */
719 #define PHY_N_AN_100H   (1<<10) /* Bit 10:      100Base-T2 HD Support */
720                                                                 /* Bit  9..5:   100/10 BT cap bits ingnored */
721 #define PHY_N_AN_SEL    0x1f    /* Bit 4..0:    Selector Field, 00001=Ethernet*/
722
723 /* field type definition for PHY_x_AN_SEL */
724 #define PHY_SEL_TYPE    0x01    /* 00001 = Ethernet */
725
726 /*****  PHY_XMAC_AUNE_EXP       16 bit r/o      Auto-Negotiation Expansion Reg *****/
727                                                                 /* Bit 15..4:   reserved */
728 #define PHY_ANE_LP_NP   (1<<3)  /* Bit  3:      Link Partner can Next Page */
729 #define PHY_ANE_LOC_NP  (1<<2)  /* Bit  2:      Local PHY can Next Page */
730 #define PHY_ANE_RX_PG   (1<<1)  /* Bit  1:      Page Received */
731                                                                 /* Bit  0:      reserved */
732
733 /*****  PHY_BCOM_AUNE_EXP       16 bit r/o      Auto-Negotiation Expansion Reg *****/
734 /*****  PHY_LONE_AUNE_EXP       16 bit r/o      Auto-Negotiation Expansion Reg *****/
735 /*****  PHY_MARV_AUNE_EXP       16 bit r/o      Auto-Negotiation Expansion Reg *****/
736                                                                 /* Bit 15..5:   reserved */
737 #define PHY_ANE_PAR_DF  (1<<4)  /* Bit  4:      Parallel Detection Fault */
738 /*      PHY_ANE_LP_NP           (see XMAC) Bit  3:      Link Partner can Next Page */
739 /*      PHY_ANE_LOC_NP          (see XMAC) Bit  2:      Local PHY can Next Page */
740 /*      PHY_ANE_RX_PG           (see XMAC) Bit  1:      Page Received */
741 #define PHY_ANE_LP_CAP  (1<<0)  /* Bit  0:      Link Partner Auto-Neg. Cap. */  
742
743 /*****  PHY_XMAC_NEPG           16 bit r/w      Next Page Register *****/
744 /*****  PHY_BCOM_NEPG           16 bit r/w      Next Page Register *****/
745 /*****  PHY_LONE_NEPG           16 bit r/w      Next Page Register *****/
746 /*****  PHY_XMAC_NEPG_LP        16 bit r/o      Next Page Link Partner *****/
747 /*****  PHY_BCOM_NEPG_LP        16 bit r/o      Next Page Link Partner *****/
748 /*****  PHY_LONE_NEPG_LP        16 bit r/o      Next Page Link Partner *****/
749 #define PHY_NP_MORE             (1<<15) /* Bit 15:      More, Next Pages to follow */
750 #define PHY_NP_ACK1             (1<<14) /* Bit 14: (ro) Ack1, for receiving a message */
751 #define PHY_NP_MSG_VAL  (1<<13) /* Bit 13:      Message Page valid */
752 #define PHY_NP_ACK2             (1<<12) /* Bit 12:      Ack2, comply with msg content */
753 #define PHY_NP_TOG              (1<<11) /* Bit 11:      Toggle Bit, ensure sync */
754 #define PHY_NP_MSG              0x07ff  /* Bit 10..0:   Message from/to Link Partner */
755
756 /*
757  * XMAC-Specific
758  */
759 /*****  PHY_XMAC_EXT_STAT       16 bit r/w      Extended Status Register *****/
760 #define PHY_X_EX_FD             (1<<15) /* Bit 15:      Device Supports Full Duplex */
761 #define PHY_X_EX_HD             (1<<14) /* Bit 14:      Device Supports Half Duplex */
762                                                                 /* Bit 13..0:   reserved */
763
764 /*****  PHY_XMAC_RES_ABI        16 bit r/o      PHY Resolved Ability *****/
765                                                                 /* Bit 15..9:   reserved */
766 #define PHY_X_RS_PAUSE  (3<<7)  /* Bit  8..7:   selected Pause Mode */
767 #define PHY_X_RS_HD             (1<<6)  /* Bit  6:      Half Duplex Mode selected */
768 #define PHY_X_RS_FD             (1<<5)  /* Bit  5:      Full Duplex Mode selected */
769 #define PHY_X_RS_ABLMIS (1<<4)  /* Bit  4:      duplex or pause cap mismatch */
770 #define PHY_X_RS_PAUMIS (1<<3)  /* Bit  3:      pause capability mismatch */
771                                                                 /* Bit  2..0:   reserved */
772 /*
773  * Remote Fault Bits (PHY_X_AN_RFB) encoding
774  */
775 #define X_RFB_OK                (0<<12) /* Bit 13..12   No errors, Link OK */
776 #define X_RFB_LF                (1<<12) /* Bit 13..12   Link Failure */
777 #define X_RFB_OFF               (2<<12) /* Bit 13..12   Offline */
778 #define X_RFB_AN_ERR    (3<<12) /* Bit 13..12   Auto-Negotiation Error */
779
780 /*
781  * Pause Bits (PHY_X_AN_PAUSE and PHY_X_RS_PAUSE) encoding
782  */
783 #define PHY_X_P_NO_PAUSE        (0<<7)  /* Bit  8..7:   no Pause Mode */
784 #define PHY_X_P_SYM_MD          (1<<7)  /* Bit  8..7:   symmetric Pause Mode */
785 #define PHY_X_P_ASYM_MD         (2<<7)  /* Bit  8..7:   asymmetric Pause Mode */
786 #define PHY_X_P_BOTH_MD         (3<<7)  /* Bit  8..7:   both Pause Mode */
787
788
789 /*
790  * Broadcom-Specific
791  */
792 /*****  PHY_BCOM_1000T_CTRL     16 bit r/w      1000Base-T Control Reg *****/
793 #define PHY_B_1000C_TEST        (7<<13) /* Bit 15..13:  Test Modes */
794 #define PHY_B_1000C_MSE         (1<<12) /* Bit 12:      Master/Slave Enable */
795 #define PHY_B_1000C_MSC         (1<<11) /* Bit 11:      M/S Configuration */
796 #define PHY_B_1000C_RD          (1<<10) /* Bit 10:      Repeater/DTE */
797 #define PHY_B_1000C_AFD         (1<<9)  /* Bit  9:      Advertise Full Duplex */
798 #define PHY_B_1000C_AHD         (1<<8)  /* Bit  8:      Advertise Half Duplex */
799                                                                         /* Bit  7..0:   reserved */
800
801 /*****  PHY_BCOM_1000T_STAT     16 bit r/o      1000Base-T Status Reg *****/
802 /*****  PHY_MARV_1000T_STAT     16 bit r/o      1000Base-T Status Reg *****/
803 #define PHY_B_1000S_MSF         (1<<15) /* Bit 15:      Master/Slave Fault */
804 #define PHY_B_1000S_MSR         (1<<14) /* Bit 14:      Master/Slave Result */
805 #define PHY_B_1000S_LRS         (1<<13) /* Bit 13:      Local Receiver Status */
806 #define PHY_B_1000S_RRS         (1<<12) /* Bit 12:      Remote Receiver Status */
807 #define PHY_B_1000S_LP_FD       (1<<11) /* Bit 11:      Link Partner can FD */
808 #define PHY_B_1000S_LP_HD       (1<<10) /* Bit 10:      Link Partner can HD */
809                                                                         /* Bit  9..8:   reserved */
810 #define PHY_B_1000S_IEC         0xff    /* Bit  7..0:   Idle Error Count */
811
812 /*****  PHY_BCOM_EXT_STAT       16 bit r/o      Extended Status Register *****/
813 #define PHY_B_ES_X_FD_CAP       (1<<15) /* Bit 15:      1000Base-X FD capable */
814 #define PHY_B_ES_X_HD_CAP       (1<<14) /* Bit 14:      1000Base-X HD capable */
815 #define PHY_B_ES_T_FD_CAP       (1<<13) /* Bit 13:      1000Base-T FD capable */
816 #define PHY_B_ES_T_HD_CAP       (1<<12) /* Bit 12:      1000Base-T HD capable */
817                                                                         /* Bit 11..0:   reserved */
818
819 /*****  PHY_BCOM_P_EXT_CTRL     16 bit r/w      PHY Extended Control Reg *****/
820 #define PHY_B_PEC_MAC_PHY       (1<<15) /* Bit 15:      10BIT/GMI-Interface */
821 #define PHY_B_PEC_DIS_CROSS     (1<<14) /* Bit 14:      Disable MDI Crossover */
822 #define PHY_B_PEC_TX_DIS        (1<<13) /* Bit 13:      Tx output Disabled */
823 #define PHY_B_PEC_INT_DIS       (1<<12) /* Bit 12:      Interrupts Disabled */
824 #define PHY_B_PEC_F_INT         (1<<11) /* Bit 11:      Force Interrupt */
825 #define PHY_B_PEC_BY_45         (1<<10) /* Bit 10:      Bypass 4B5B-Decoder */
826 #define PHY_B_PEC_BY_SCR        (1<<9)  /* Bit  9:      Bypass Scrambler */
827 #define PHY_B_PEC_BY_MLT3       (1<<8)  /* Bit  8:      Bypass MLT3 Encoder */
828 #define PHY_B_PEC_BY_RXA        (1<<7)  /* Bit  7:      Bypass Rx Alignm. */
829 #define PHY_B_PEC_RES_SCR       (1<<6)  /* Bit  6:      Reset Scrambler */
830 #define PHY_B_PEC_EN_LTR        (1<<5)  /* Bit  5:      Ena LED Traffic Mode */
831 #define PHY_B_PEC_LED_ON        (1<<4)  /* Bit  4:      Force LED's on */
832 #define PHY_B_PEC_LED_OFF       (1<<3)  /* Bit  3:      Force LED's off */
833 #define PHY_B_PEC_EX_IPG        (1<<2)  /* Bit  2:      Extend Tx IPG Mode */
834 #define PHY_B_PEC_3_LED         (1<<1)  /* Bit  1:      Three Link LED mode */
835 #define PHY_B_PEC_HIGH_LA       (1<<0)  /* Bit  0:      GMII FIFO Elasticy */
836
837 /*****  PHY_BCOM_P_EXT_STAT     16 bit r/o      PHY Extended Status Reg *****/
838                                                                         /* Bit 15..14:  reserved */
839 #define PHY_B_PES_CROSS_STAT    (1<<13) /* Bit 13:      MDI Crossover Status */
840 #define PHY_B_PES_INT_STAT      (1<<12) /* Bit 12:      Interrupt Status */
841 #define PHY_B_PES_RRS           (1<<11) /* Bit 11:      Remote Receiver Stat. */
842 #define PHY_B_PES_LRS           (1<<10) /* Bit 10:      Local Receiver Stat. */
843 #define PHY_B_PES_LOCKED        (1<<9)  /* Bit  9:      Locked */
844 #define PHY_B_PES_LS            (1<<8)  /* Bit  8:      Link Status */
845 #define PHY_B_PES_RF            (1<<7)  /* Bit  7:      Remote Fault */
846 #define PHY_B_PES_CE_ER         (1<<6)  /* Bit  6:      Carrier Ext Error */
847 #define PHY_B_PES_BAD_SSD       (1<<5)  /* Bit  5:      Bad SSD */
848 #define PHY_B_PES_BAD_ESD       (1<<4)  /* Bit  4:      Bad ESD */
849 #define PHY_B_PES_RX_ER         (1<<3)  /* Bit  3:      Receive Error */
850 #define PHY_B_PES_TX_ER         (1<<2)  /* Bit  2:      Transmit Error */
851 #define PHY_B_PES_LOCK_ER       (1<<1)  /* Bit  1:      Lock Error */
852 #define PHY_B_PES_MLT3_ER       (1<<0)  /* Bit  0:      MLT3 code Error */
853
854 /*****  PHY_BCOM_FC_CTR         16 bit r/w      False Carrier Counter *****/
855                                                                         /* Bit 15..8:   reserved */
856 #define PHY_B_FC_CTR            0xff    /* Bit  7..0:   False Carrier Counter */
857
858 /*****  PHY_BCOM_RNO_CTR        16 bit r/w      Receive NOT_OK Counter *****/
859 #define PHY_B_RC_LOC_MSK        0xff00  /* Bit 15..8:   Local Rx NOT_OK cnt */
860 #define PHY_B_RC_REM_MSK        0x00ff  /* Bit  7..0:   Remote Rx NOT_OK cnt */
861
862 /*****  PHY_BCOM_AUX_CTRL       16 bit r/w      Auxiliary Control Reg *****/
863 #define PHY_B_AC_L_SQE          (1<<15) /* Bit 15:      Low Squelch */
864 #define PHY_B_AC_LONG_PACK      (1<<14) /* Bit 14:      Rx Long Packets */
865 #define PHY_B_AC_ER_CTRL        (3<<12) /* Bit 13..12:  Edgerate Control */
866                                                                         /* Bit 11:      reserved */
867 #define PHY_B_AC_TX_TST         (1<<10) /* Bit 10:      Tx test bit, always 1 */
868                                                                         /* Bit  9.. 8:  reserved */
869 #define PHY_B_AC_DIS_PRF        (1<<7)  /* Bit  7:      dis part resp filter */
870                                                                         /* Bit  6:      reserved */
871 #define PHY_B_AC_DIS_PM         (1<<5)  /* Bit  5:      dis power management */
872                                                                         /* Bit  4:      reserved */
873 #define PHY_B_AC_DIAG           (1<<3)  /* Bit  3:      Diagnostic Mode */
874                                                                         /* Bit  2.. 0:  reserved */
875
876 /*****  PHY_BCOM_AUX_STAT       16 bit r/o      Auxiliary Status Reg *****/
877 #define PHY_B_AS_AN_C           (1<<15) /* Bit 15:      AutoNeg complete */
878 #define PHY_B_AS_AN_CA          (1<<14) /* Bit 14:      AN Complete Ack */
879 #define PHY_B_AS_ANACK_D        (1<<13) /* Bit 13:      AN Ack Detect */
880 #define PHY_B_AS_ANAB_D         (1<<12) /* Bit 12:      AN Ability Detect */
881 #define PHY_B_AS_NPW            (1<<11) /* Bit 11:      AN Next Page Wait */
882 #define PHY_B_AS_AN_RES_MSK     (7<<8)  /* Bit 10..8:   AN HDC */
883 #define PHY_B_AS_PDF            (1<<7)  /* Bit  7:      Parallel Detect. Fault */
884 #define PHY_B_AS_RF                     (1<<6)  /* Bit  6:      Remote Fault */
885 #define PHY_B_AS_ANP_R          (1<<5)  /* Bit  5:      AN Page Received */
886 #define PHY_B_AS_LP_ANAB        (1<<4)  /* Bit  4:      LP AN Ability */
887 #define PHY_B_AS_LP_NPAB        (1<<3)  /* Bit  3:      LP Next Page Ability */
888 #define PHY_B_AS_LS                     (1<<2)  /* Bit  2:      Link Status */
889 #define PHY_B_AS_PRR            (1<<1)  /* Bit  1:      Pause Resolution-Rx */
890 #define PHY_B_AS_PRT            (1<<0)  /* Bit  0:      Pause Resolution-Tx */
891
892 #define PHY_B_AS_PAUSE_MSK      (PHY_B_AS_PRR | PHY_B_AS_PRT)
893
894 /*****  PHY_BCOM_INT_STAT       16 bit r/o      Interrupt Status Reg *****/
895 /*****  PHY_BCOM_INT_MASK       16 bit r/w      Interrupt Mask Reg *****/
896                                                                         /* Bit 15:      reserved */
897 #define PHY_B_IS_PSE            (1<<14) /* Bit 14:      Pair Swap Error */
898 #define PHY_B_IS_MDXI_SC        (1<<13) /* Bit 13:      MDIX Status Change */
899 #define PHY_B_IS_HCT            (1<<12) /* Bit 12:      counter above 32k */
900 #define PHY_B_IS_LCT            (1<<11) /* Bit 11:      counter above 128 */
901 #define PHY_B_IS_AN_PR          (1<<10) /* Bit 10:      Page Received */
902 #define PHY_B_IS_NO_HDCL        (1<<9)  /* Bit  9:      No HCD Link */
903 #define PHY_B_IS_NO_HDC         (1<<8)  /* Bit  8:      No HCD */
904 #define PHY_B_IS_NEG_USHDC      (1<<7)  /* Bit  7:      Negotiated Unsup. HCD */
905 #define PHY_B_IS_SCR_S_ER       (1<<6)  /* Bit  6:      Scrambler Sync Error */
906 #define PHY_B_IS_RRS_CHANGE     (1<<5)  /* Bit  5:      Remote Rx Stat Change */
907 #define PHY_B_IS_LRS_CHANGE     (1<<4)  /* Bit  4:      Local Rx Stat Change */
908 #define PHY_B_IS_DUP_CHANGE     (1<<3)  /* Bit  3:      Duplex Mode Change */
909 #define PHY_B_IS_LSP_CHANGE     (1<<2)  /* Bit  2:      Link Speed Change */
910 #define PHY_B_IS_LST_CHANGE     (1<<1)  /* Bit  1:      Link Status Changed */
911 #define PHY_B_IS_CRC_ER         (1<<0)  /* Bit  0:      CRC Error */
912
913 #define PHY_B_DEF_MSK   (~(PHY_B_IS_AN_PR | PHY_B_IS_LST_CHANGE))
914
915 /* Pause Bits (PHY_B_AN_ASP and PHY_B_AN_PC) encoding */
916 #define PHY_B_P_NO_PAUSE        (0<<10) /* Bit 11..10:  no Pause Mode */
917 #define PHY_B_P_SYM_MD          (1<<10) /* Bit 11..10:  symmetric Pause Mode */
918 #define PHY_B_P_ASYM_MD         (2<<10) /* Bit 11..10:  asymmetric Pause Mode */
919 #define PHY_B_P_BOTH_MD         (3<<10) /* Bit 11..10:  both Pause Mode */
920
921 /*
922  * Resolved Duplex mode and Capabilities (Aux Status Summary Reg)
923  */
924 #define PHY_B_RES_1000FD        (7<<8)  /* Bit 10..8:   1000Base-T Full Dup. */
925 #define PHY_B_RES_1000HD        (6<<8)  /* Bit 10..8:   1000Base-T Half Dup. */
926 /* others: 100/10: invalid for us */
927
928 /*
929  * Level One-Specific
930  */
931 /*****  PHY_LONE_1000T_CTRL     16 bit r/w      1000Base-T Control Reg *****/
932 #define PHY_L_1000C_TEST        (7<<13) /* Bit 15..13:  Test Modes */
933 #define PHY_L_1000C_MSE         (1<<12) /* Bit 12:      Master/Slave Enable */
934 #define PHY_L_1000C_MSC         (1<<11) /* Bit 11:      M/S Configuration */
935 #define PHY_L_1000C_RD          (1<<10) /* Bit 10:      Repeater/DTE */
936 #define PHY_L_1000C_AFD         (1<<9)  /* Bit  9:      Advertise Full Duplex */
937 #define PHY_L_1000C_AHD         (1<<8)  /* Bit  8:      Advertise Half Duplex */
938                                                                         /* Bit  7..0:   reserved */
939
940 /*****  PHY_LONE_1000T_STAT     16 bit r/o      1000Base-T Status Reg *****/
941 #define PHY_L_1000S_MSF         (1<<15) /* Bit 15:      Master/Slave Fault */
942 #define PHY_L_1000S_MSR         (1<<14) /* Bit 14:      Master/Slave Result */
943 #define PHY_L_1000S_LRS         (1<<13) /* Bit 13:      Local Receiver Status */
944 #define PHY_L_1000S_RRS         (1<<12) /* Bit 12:      Remote Receiver Status */
945 #define PHY_L_1000S_LP_FD       (1<<11) /* Bit 11:      Link Partner can FD */
946 #define PHY_L_1000S_LP_HD       (1<<10) /* Bit 10:      Link Partner can HD */
947                                                                         /* Bit  9..8:   reserved */
948 #define PHY_B_1000S_IEC         0xff    /* Bit  7..0:   Idle Error Count */
949
950 /*****  PHY_LONE_EXT_STAT       16 bit r/o      Extended Status Register *****/
951 #define PHY_L_ES_X_FD_CAP       (1<<15) /* Bit 15:      1000Base-X FD capable */
952 #define PHY_L_ES_X_HD_CAP       (1<<14) /* Bit 14:      1000Base-X HD capable */
953 #define PHY_L_ES_T_FD_CAP       (1<<13) /* Bit 13:      1000Base-T FD capable */
954 #define PHY_L_ES_T_HD_CAP       (1<<12) /* Bit 12:      1000Base-T HD capable */
955                                                                         /* Bit 11..0:   reserved */
956
957 /*****  PHY_LONE_PORT_CFG       16 bit r/w      Port Configuration Reg *****/
958 #define PHY_L_PC_REP_MODE       (1<<15) /* Bit 15:      Repeater Mode */
959                                                                         /* Bit 14:      reserved */
960 #define PHY_L_PC_TX_DIS         (1<<13) /* Bit 13:      Tx output Disabled */
961 #define PHY_L_PC_BY_SCR         (1<<12) /* Bit 12:      Bypass Scrambler */
962 #define PHY_L_PC_BY_45          (1<<11) /* Bit 11:      Bypass 4B5B-Decoder */
963 #define PHY_L_PC_JAB_DIS        (1<<10) /* Bit 10:      Jabber Disabled */
964 #define PHY_L_PC_SQE            (1<<9)  /* Bit  9:      Enable Heartbeat */
965 #define PHY_L_PC_TP_LOOP        (1<<8)  /* Bit  8:      TP Loopback */
966 #define PHY_L_PC_SSS            (1<<7)  /* Bit  7:      Smart Speed Selection */
967 #define PHY_L_PC_FIFO_SIZE      (1<<6)  /* Bit  6:      FIFO Size */
968 #define PHY_L_PC_PRE_EN         (1<<5)  /* Bit  5:      Preamble Enable */
969 #define PHY_L_PC_CIM            (1<<4)  /* Bit  4:      Carrier Integrity Mon */
970 #define PHY_L_PC_10_SER         (1<<3)  /* Bit  3:      Use Serial Output */
971 #define PHY_L_PC_ANISOL         (1<<2)  /* Bit  2:      Unisolate Port */
972 #define PHY_L_PC_TEN_BIT        (1<<1)  /* Bit  1:      10bit iface mode on */
973 #define PHY_L_PC_ALTCLOCK       (1<<0)  /* Bit  0: (ro) ALTCLOCK Mode on */
974
975 /*****  PHY_LONE_Q_STAT         16 bit r/o      Quick Status Reg *****/
976 #define PHY_L_QS_D_RATE         (3<<14) /* Bit 15..14:  Data Rate */
977 #define PHY_L_QS_TX_STAT        (1<<13) /* Bit 13:      Transmitting */
978 #define PHY_L_QS_RX_STAT        (1<<12) /* Bit 12:      Receiving */
979 #define PHY_L_QS_COL_STAT       (1<<11) /* Bit 11:      Collision */
980 #define PHY_L_QS_L_STAT         (1<<10) /* Bit 10:      Link is up */
981 #define PHY_L_QS_DUP_MOD        (1<<9)  /* Bit  9:      Full/Half Duplex */
982 #define PHY_L_QS_AN                     (1<<8)  /* Bit  8:      AutoNeg is On */
983 #define PHY_L_QS_AN_C           (1<<7)  /* Bit  7:      AN is Complete */
984 #define PHY_L_QS_LLE            (7<<4)  /* Bit  6:      Line Length Estim. */
985 #define PHY_L_QS_PAUSE          (1<<3)  /* Bit  3:      LP advertised Pause */
986 #define PHY_L_QS_AS_PAUSE       (1<<2)  /* Bit  2:      LP adv. asym. Pause */
987 #define PHY_L_QS_ISOLATE        (1<<1)  /* Bit  1:      CIM Isolated */
988 #define PHY_L_QS_EVENT          (1<<0)  /* Bit  0:      Event has occurred */
989
990 /*****  PHY_LONE_INT_ENAB       16 bit r/w      Interrupt Enable Reg *****/
991 /*****  PHY_LONE_INT_STAT       16 bit r/o      Interrupt Status Reg *****/
992                                                                         /* Bit 15..14:  reserved */
993 #define PHY_L_IS_AN_F           (1<<13) /* Bit 13:      Auto-Negotiation fault */
994                                                                         /* Bit 12:      not described */
995 #define PHY_L_IS_CROSS          (1<<11) /* Bit 11:      Crossover used */
996 #define PHY_L_IS_POL            (1<<10) /* Bit 10:      Polarity correct. used */
997 #define PHY_L_IS_SS                     (1<<9)  /* Bit  9:      Smart Speed Downgrade */
998 #define PHY_L_IS_CFULL          (1<<8)  /* Bit  8:      Counter Full */
999 #define PHY_L_IS_AN_C           (1<<7)  /* Bit  7:      AutoNeg Complete */
1000 #define PHY_L_IS_SPEED          (1<<6)  /* Bit  6:      Speed Changed */
1001 #define PHY_L_IS_DUP            (1<<5)  /* Bit  5:      Duplex Changed */
1002 #define PHY_L_IS_LS                     (1<<4)  /* Bit  4:      Link Status Changed */
1003 #define PHY_L_IS_ISOL           (1<<3)  /* Bit  3:      Isolate Occured */
1004 #define PHY_L_IS_MDINT          (1<<2)  /* Bit  2: (ro) STAT: MII Int Pending */
1005 #define PHY_L_IS_INTEN          (1<<1)  /* Bit  1:      ENAB: Enable IRQs */
1006 #define PHY_L_IS_FORCE          (1<<0)  /* Bit  0:      ENAB: Force Interrupt */
1007
1008 /* int. mask */
1009 #define PHY_L_DEF_MSK           (PHY_L_IS_LS | PHY_L_IS_ISOL | PHY_L_IS_INTEN)
1010
1011 /*****  PHY_LONE_LED_CFG        16 bit r/w      LED Configuration Reg *****/
1012 #define PHY_L_LC_LEDC           (3<<14) /* Bit 15..14:  Col/Blink/On/Off */
1013 #define PHY_L_LC_LEDR           (3<<12) /* Bit 13..12:  Rx/Blink/On/Off */
1014 #define PHY_L_LC_LEDT           (3<<10) /* Bit 11..10:  Tx/Blink/On/Off */
1015 #define PHY_L_LC_LEDG           (3<<8)  /* Bit  9..8:   Giga/Blink/On/Off */
1016 #define PHY_L_LC_LEDS           (3<<6)  /* Bit  7..6:   10-100/Blink/On/Off */
1017 #define PHY_L_LC_LEDL           (3<<4)  /* Bit  5..4:   Link/Blink/On/Off */
1018 #define PHY_L_LC_LEDF           (3<<2)  /* Bit  3..2:   Duplex/Blink/On/Off */
1019 #define PHY_L_LC_PSTRECH        (1<<1)  /* Bit  1:      Strech LED Pulses */
1020 #define PHY_L_LC_FREQ           (1<<0)  /* Bit  0:      30/100 ms */
1021
1022 /*****  PHY_LONE_PORT_CTRL      16 bit r/w      Port Control Reg *****/
1023 #define PHY_L_PC_TX_TCLK        (1<<15) /* Bit 15:      Enable TX_TCLK */
1024                                                                         /* Bit 14:      reserved */
1025 #define PHY_L_PC_ALT_NP         (1<<13) /* Bit 14:      Alternate Next Page */
1026 #define PHY_L_PC_GMII_ALT       (1<<12) /* Bit 13:      Alternate GMII driver */
1027                                                                         /* Bit 11:      reserved */
1028 #define PHY_L_PC_TEN_CRS        (1<<10) /* Bit 10:      Extend CRS*/
1029                                                                         /* Bit  9..0:   not described */
1030
1031 /*****  PHY_LONE_CIM            16 bit r/o      CIM Reg *****/
1032 #define PHY_L_CIM_ISOL          (255<<8)/* Bit 15..8:   Isolate Count */
1033 #define PHY_L_CIM_FALSE_CAR     (255<<0)/* Bit  7..0:   False Carrier Count */
1034
1035
1036 /*
1037  * Pause Bits (PHY_L_AN_ASP and PHY_L_AN_PC) encoding
1038  */
1039 #define PHY_L_P_NO_PAUSE        (0<<10) /* Bit 11..10:  no Pause Mode */
1040 #define PHY_L_P_SYM_MD          (1<<10) /* Bit 11..10:  symmetric Pause Mode */
1041 #define PHY_L_P_ASYM_MD         (2<<10) /* Bit 11..10:  asymmetric Pause Mode */
1042 #define PHY_L_P_BOTH_MD         (3<<10) /* Bit 11..10:  both Pause Mode */
1043
1044
1045 /*
1046  * National-Specific
1047  */
1048 /*****  PHY_NAT_1000T_CTRL      16 bit r/w      1000Base-T Control Reg *****/
1049 #define PHY_N_1000C_TEST        (7<<13) /* Bit 15..13:  Test Modes */
1050 #define PHY_N_1000C_MSE         (1<<12) /* Bit 12:      Master/Slave Enable */
1051 #define PHY_N_1000C_MSC         (1<<11) /* Bit 11:      M/S Configuration */
1052 #define PHY_N_1000C_RD          (1<<10) /* Bit 10:      Repeater/DTE */
1053 #define PHY_N_1000C_AFD         (1<<9)  /* Bit  9:      Advertise Full Duplex */
1054 #define PHY_N_1000C_AHD         (1<<8)  /* Bit  8:      Advertise Half Duplex */
1055 #define PHY_N_1000C_APC         (1<<7)  /* Bit  7:      Asymmetric Pause Cap. */
1056                                                                         /* Bit  6..0:   reserved */
1057
1058 /*****  PHY_NAT_1000T_STAT      16 bit r/o      1000Base-T Status Reg *****/
1059 #define PHY_N_1000S_MSF         (1<<15) /* Bit 15:      Master/Slave Fault */
1060 #define PHY_N_1000S_MSR         (1<<14) /* Bit 14:      Master/Slave Result */
1061 #define PHY_N_1000S_LRS         (1<<13) /* Bit 13:      Local Receiver Status */
1062 #define PHY_N_1000S_RRS         (1<<12) /* Bit 12:      Remote Receiver Status*/
1063 #define PHY_N_1000S_LP_FD       (1<<11) /* Bit 11:      Link Partner can FD */
1064 #define PHY_N_1000S_LP_HD       (1<<10) /* Bit 10:      Link Partner can HD */
1065 #define PHY_N_1000C_LP_APC      (1<<9)  /* Bit  9:      LP Asym. Pause Cap. */
1066                                                                         /* Bit  8:      reserved */
1067 #define PHY_N_1000S_IEC         0xff    /* Bit  7..0:   Idle Error Count */
1068
1069 /*****  PHY_NAT_EXT_STAT        16 bit r/o      Extended Status Register *****/
1070 #define PHY_N_ES_X_FD_CAP       (1<<15) /* Bit 15:      1000Base-X FD capable */
1071 #define PHY_N_ES_X_HD_CAP       (1<<14) /* Bit 14:      1000Base-X HD capable */
1072 #define PHY_N_ES_T_FD_CAP       (1<<13) /* Bit 13:      1000Base-T FD capable */
1073 #define PHY_N_ES_T_HD_CAP       (1<<12) /* Bit 12:      1000Base-T HD capable */
1074                                                                         /* Bit 11..0:   reserved */
1075
1076 /* todo: those are still missing */
1077 /*****  PHY_NAT_EXT_CTRL1       16 bit r/o      Extended Control Reg1 *****/
1078 /*****  PHY_NAT_Q_STAT1         16 bit r/o      Quick Status Reg1 *****/
1079 /*****  PHY_NAT_10B_OP          16 bit r/o      10Base-T Operations Reg *****/
1080 /*****  PHY_NAT_EXT_CTRL2       16 bit r/o      Extended Control Reg1 *****/
1081 /*****  PHY_NAT_Q_STAT2         16 bit r/o      Quick Status Reg2 *****/
1082 /*****  PHY_NAT_PHY_ADDR        16 bit r/o      PHY Address Register *****/
1083
1084 /*
1085  * Marvell-Specific
1086  */
1087 /*****  PHY_MARV_AUNE_ADV       16 bit r/w      Auto-Negotiation Advertisement *****/
1088 /*****  PHY_MARV_AUNE_LP        16 bit r/w      Link Part Ability Reg *****/
1089 #define PHY_M_AN_NXT_PG         BIT_15  /* Request Next Page */
1090 #define PHY_M_AN_ACK            BIT_14  /* (ro) Acknowledge Received */
1091 #define PHY_M_AN_RF                     BIT_13  /* Remote Fault */
1092                                                                         /* Bit 12:      reserved */
1093 #define PHY_M_AN_ASP            BIT_11  /* Asymmetric Pause */
1094 #define PHY_M_AN_PC                     BIT_10  /* MAC Pause implemented */
1095 #define PHY_M_AN_100_FD         BIT_8   /* Advertise 100Base-TX Full Duplex */
1096 #define PHY_M_AN_100_HD         BIT_7   /* Advertise 100Base-TX Half Duplex */
1097 #define PHY_M_AN_10_FD          BIT_6   /* Advertise 10Base-TX Full Duplex */
1098 #define PHY_M_AN_10_HD          BIT_5   /* Advertise 10Base-TX Half Duplex */
1099
1100 /* special defines for FIBER (88E1011S only) */
1101 #define PHY_M_AN_ASP_X          BIT_8   /* Asymmetric Pause */
1102 #define PHY_M_AN_PC_X           BIT_7   /* MAC Pause implemented */
1103 #define PHY_M_AN_1000X_AHD      BIT_6   /* Advertise 10000Base-X Half Duplex */
1104 #define PHY_M_AN_1000X_AFD      BIT_5   /* Advertise 10000Base-X Full Duplex */
1105
1106 /* Pause Bits (PHY_M_AN_ASP_X and PHY_M_AN_PC_X) encoding */
1107 #define PHY_M_P_NO_PAUSE_X      (0<<7)  /* Bit  8.. 7:  no Pause Mode */
1108 #define PHY_M_P_SYM_MD_X        (1<<7)  /* Bit  8.. 7:  symmetric Pause Mode */
1109 #define PHY_M_P_ASYM_MD_X       (2<<7)  /* Bit  8.. 7:  asymmetric Pause Mode */
1110 #define PHY_M_P_BOTH_MD_X       (3<<7)  /* Bit  8.. 7:  both Pause Mode */
1111
1112 /*****  PHY_MARV_1000T_CTRL     16 bit r/w      1000Base-T Control Reg *****/
1113 #define PHY_M_1000C_TEST        (7<<13) /* Bit 15..13:  Test Modes */
1114 #define PHY_M_1000C_MSE         (1<<12) /* Bit 12:      Manual Master/Slave Enable */
1115 #define PHY_M_1000C_MSC         (1<<11) /* Bit 11:      M/S Configuration (1=Master) */
1116 #define PHY_M_1000C_MPD         (1<<10) /* Bit 10:      Multi-Port Device */
1117 #define PHY_M_1000C_AFD         (1<<9)  /* Bit  9:      Advertise Full Duplex */
1118 #define PHY_M_1000C_AHD         (1<<8)  /* Bit  8:      Advertise Half Duplex */
1119                                                                         /* Bit  7..0:   reserved */
1120
1121 /*****  PHY_MARV_PHY_CTRL       16 bit r/w      PHY Specific Ctrl Reg *****/
1122 #define PHY_M_PC_TX_FFD_MSK     (3<<14) /* Bit 15..14:  Tx FIFO Depth Mask */
1123 #define PHY_M_PC_RX_FFD_MSK     (3<<12) /* Bit 13..12:  Rx FIFO Depth Mask */
1124 #define PHY_M_PC_ASS_CRS_TX     (1<<11) /* Bit 11:      Assert CRS on Transmit */
1125 #define PHY_M_PC_FL_GOOD        (1<<10) /* Bit 10:      Force Link Good */
1126 #define PHY_M_PC_EN_DET_MSK     (3<<8)  /* Bit  9.. 8:  Energy Detect Mask */
1127 #define PHY_M_PC_ENA_EXT_D      (1<<7)  /* Bit  7:      Enable Ext. Distance (10BT) */
1128 #define PHY_M_PC_MDIX_MSK       (3<<5)  /* Bit  6.. 5:  MDI/MDIX Config. Mask */
1129 #define PHY_M_PC_DIS_125CLK     (1<<4)  /* Bit  4:      Disable 125 CLK */
1130 #define PHY_M_PC_MAC_POW_UP     (1<<3)  /* Bit  3:      MAC Power up */
1131 #define PHY_M_PC_SQE_T_ENA      (1<<2)  /* Bit  2:      SQE Test Enabled */
1132 #define PHY_M_PC_POL_R_DIS      (1<<1)  /* Bit  1:      Polarity Reversal Disabled */
1133 #define PHY_M_PC_DIS_JABBER     (1<<0)  /* Bit  0:      Disable Jabber */
1134
1135 #define PHY_M_PC_EN_DET                 SHIFT8(2)       /* Energy Detect (Mode 1) */
1136 #define PHY_M_PC_EN_DET_PLUS    SHIFT8(3)       /* Energy Detect Plus (Mode 2) */
1137
1138 #define PHY_M_PC_MDI_XMODE(x)   SHIFT5(x)       
1139 #define PHY_M_PC_MAN_MDI        0       /* 00 = Manual MDI configuration */
1140 #define PHY_M_PC_MAN_MDIX       1               /* 01 = Manual MDIX configuration */
1141 #define PHY_M_PC_ENA_AUTO       3               /* 11 = Enable Automatic Crossover */
1142
1143 /*****  PHY_MARV_PHY_STAT       16 bit r/o      PHY Specific Status Reg *****/
1144 #define PHY_M_PS_SPEED_MSK      (3<<14) /* Bit 15..14:  Speed Mask */
1145 #define PHY_M_PS_SPEED_1000     (1<<15) /*       10 = 1000 Mbps */
1146 #define PHY_M_PS_SPEED_100      (1<<14) /*       01 =  100 Mbps */
1147 #define PHY_M_PS_SPEED_10       0               /*       00 =   10 Mbps */
1148 #define PHY_M_PS_FULL_DUP       (1<<13) /* Bit 13:      Full Duplex */
1149 #define PHY_M_PS_PAGE_REC       (1<<12) /* Bit 12:      Page Received */
1150 #define PHY_M_PS_SPDUP_RES      (1<<11) /* Bit 11:      Speed & Duplex Resolved */
1151 #define PHY_M_PS_LINK_UP        (1<<10) /* Bit 10:      Link Up */
1152 #define PHY_M_PS_CABLE_MSK      (3<<7)  /* Bit  9.. 7:  Cable Length Mask */
1153 #define PHY_M_PS_MDI_X_STAT     (1<<6)  /* Bit  6:      MDI Crossover Stat (1=MDIX) */
1154 #define PHY_M_PS_DOWNS_STAT     (1<<5)  /* Bit  5:      Downshift Status (1=downsh.) */
1155 #define PHY_M_PS_ENDET_STAT     (1<<4)  /* Bit  4:      Energy Detect Status (1=act) */
1156 #define PHY_M_PS_TX_P_EN        (1<<3)  /* Bit  3:      Tx Pause Enabled */
1157 #define PHY_M_PS_RX_P_EN        (1<<2)  /* Bit  2:      Rx Pause Enabled */
1158 #define PHY_M_PS_POL_REV        (1<<1)  /* Bit  1:      Polarity Reversed */
1159 #define PHY_M_PC_JABBER         (1<<0)  /* Bit  0:      Jabber */
1160
1161 #define PHY_M_PS_PAUSE_MSK      (PHY_M_PS_TX_P_EN | PHY_M_PS_RX_P_EN)
1162
1163 /*****  PHY_MARV_INT_MASK       16 bit r/w      Interrupt Mask Reg *****/
1164 /*****  PHY_MARV_INT_STAT       16 bit r/o      Interrupt Status Reg *****/
1165 #define PHY_M_IS_AN_ERROR       (1<<15) /* Bit 15:      Auto-Negotiation Error */
1166 #define PHY_M_IS_LSP_CHANGE     (1<<14) /* Bit 14:      Link Speed Changed */
1167 #define PHY_M_IS_DUP_CHANGE     (1<<13) /* Bit 13:      Duplex Mode Changed */
1168 #define PHY_M_IS_AN_PR          (1<<12) /* Bit 12:      Page Received */
1169 #define PHY_M_IS_AN_COMPL       (1<<11) /* Bit 11:      Auto-Negotiation Completed */
1170 #define PHY_M_IS_LST_CHANGE     (1<<10) /* Bit 10:      Link Status Changed */
1171 #define PHY_M_IS_SYMB_ERROR     (1<<9)  /* Bit  9:      Symbol Error */
1172 #define PHY_M_IS_FALSE_CARR     (1<<8)  /* Bit  8:      False Carrier */
1173 #define PHY_M_IS_FIFO_ERROR     (1<<7)  /* Bit  7:      FIFO Overflow/Underrun Error */
1174 #define PHY_M_IS_MDI_CHANGE     (1<<6)  /* Bit  6:      MDI Crossover Changed */
1175 #define PHY_M_IS_DOWNSH_DET     (1<<5)  /* Bit  5:      Downshift Detected */
1176 #define PHY_M_IS_END_CHANGE     (1<<4)  /* Bit  4:      Energy Detect Changed */
1177                                                                         /* Bit  3..2:   reserved */
1178 #define PHY_M_IS_POL_CHANGE     (1<<1)  /* Bit  1:      Polarity Changed */
1179 #define PHY_M_IS_JABBER         (1<<0)  /* Bit  0:      Jabber */
1180
1181 #define PHY_M_DEF_MSK           (PHY_M_IS_AN_ERROR | PHY_M_IS_AN_PR | \
1182                                                         PHY_M_IS_LST_CHANGE | PHY_M_IS_FIFO_ERROR)
1183
1184 /*****  PHY_MARV_EXT_CTRL       16 bit r/w      Ext. PHY Specific Ctrl *****/
1185 #define PHY_M_EC_M_DSC_MSK      (3<<10) /* Bit 11..10:  Master downshift counter */
1186 #define PHY_M_EC_S_DSC_MSK      (3<<8)  /* Bit  9.. 8:  Slave  downshift counter */
1187 #define PHY_M_EC_MAC_S_MSK      (7<<4)  /* Bit  6.. 4:  Def. MAC interface speed */
1188 #define PHY_M_EC_FIB_AN_ENA     (1<<3)  /* Bit  3:      Fiber Auto-Neg. Enable */
1189
1190 #define PHY_M_EC_M_DSC(x)               SHIFT10(x)      /* 00=1x; 01=2x; 10=3x; 11=4x */
1191 #define PHY_M_EC_S_DSC(x)               SHIFT8(x)       /* 00=dis; 01=1x; 10=2x; 11=3x */
1192 #define PHY_M_EC_MAC_S(x)               SHIFT4(x)       /* 01X=0; 110=2.5; 111=25 (MHz) */
1193
1194 #define MAC_TX_CLK_0_MHZ        2
1195 #define MAC_TX_CLK_2_5_MHZ      6
1196 #define MAC_TX_CLK_25_MHZ       7
1197
1198 /*****  PHY_MARV_LED_CTRL       16 bit r/w      LED Control Reg *****/
1199 #define PHY_M_LEDC_DIS_LED      (1<<15) /* Bit 15:      Disable LED */
1200 #define PHY_M_LEDC_PULS_MSK     (7<<12) /* Bit 14..12:  Pulse Stretch Mask */
1201 #define PHY_M_LEDC_F_INT        (1<<11) /* Bit 11:      Force Interrupt */
1202 #define PHY_M_LEDC_BL_R_MSK     (7<<8)  /* Bit 10.. 8:  Blink Rate Mask */
1203                                                                         /* Bit  7.. 5:  reserved */
1204 #define PHY_M_LEDC_LINK_MSK     (3<<3)  /* Bit  4.. 3:  Link Control Mask */
1205 #define PHY_M_LEDC_DP_CTRL      (1<<2)  /* Bit  2:      Duplex Control */
1206 #define PHY_M_LEDC_RX_CTRL      (1<<1)  /* Bit  1:      Rx activity / Link */
1207 #define PHY_M_LEDC_TX_CTRL      (1<<0)  /* Bit  0:      Tx activity / Link */
1208
1209 #define PHY_M_LED_PULS_DUR(x)   SHIFT12(x)      /* Pulse Stretch Duration */
1210
1211 #define PULS_NO_STR             0               /* no pulse stretching */
1212 #define PULS_21MS               1               /* 21 ms to 42 ms */
1213 #define PULS_42MS               2               /* 42 ms to 84 ms */
1214 #define PULS_84MS               3               /* 84 ms to 170 ms */
1215 #define PULS_170MS              4               /* 170 ms to 340 ms */
1216 #define PULS_340MS              5               /* 340 ms to 670 ms */
1217 #define PULS_670MS              6               /* 670 ms to 1.3 s */
1218 #define PULS_1300MS             7               /* 1.3 s to 2.7 s */
1219
1220 #define PHY_M_LED_BLINK_RT(x)   SHIFT8(x)       /* Blink Rate */
1221
1222 #define BLINK_42MS              0               /* 42 ms */
1223 #define BLINK_84MS              1               /* 84 ms */
1224 #define BLINK_170MS             2               /* 170 ms */
1225 #define BLINK_340MS             3               /* 340 ms */
1226 #define BLINK_670MS             4               /* 670 ms */
1227                                                                 /* values 5 - 7: reserved */
1228
1229 /*****  PHY_MARV_LED_OVER       16 bit r/w      Manual LED Override Reg *****/
1230 #define PHY_M_LED_MO_DUP(x)             SHIFT10(x)      /* Bit 11..10:  Duplex */
1231 #define PHY_M_LED_MO_10(x)              SHIFT8(x)       /* Bit  9.. 8:  Link 10 */
1232 #define PHY_M_LED_MO_100(x)             SHIFT6(x)       /* Bit  7.. 6:  Link 100 */
1233 #define PHY_M_LED_MO_1000(x)    SHIFT4(x)       /* Bit  5.. 4:  Link 1000 */
1234 #define PHY_M_LED_MO_RX(x)              SHIFT2(x)       /* Bit  3.. 2:  Rx */
1235 #define PHY_M_LED_MO_TX(x)              SHIFT0(x)       /* Bit  1.. 0:  Tx */
1236
1237 #define MO_LED_NORM                     0
1238 #define MO_LED_BLINK            1
1239 #define MO_LED_OFF                      2
1240 #define MO_LED_ON                       3
1241
1242 /*****  PHY_MARV_EXT_CTRL_2     16 bit r/w      Ext. PHY Specific Ctrl 2 *****/
1243                                                                         /* Bit 15.. 7:  reserved */
1244 #define PHY_M_EC2_FI_IMPED      (1<<6)  /* Bit  6:      Fiber Input  Impedance */
1245 #define PHY_M_EC2_FO_IMPED      (1<<5)  /* Bit  5:      Fiber Output Impedance */
1246 #define PHY_M_EC2_FO_M_CLK      (1<<4)  /* Bit  4:      Fiber Mode Clock Enable */
1247 #define PHY_M_EC2_FO_BOOST      (1<<3)  /* Bit  3:      Fiber Output Boost */
1248 #define PHY_M_EC2_FO_AM_MSK     7               /* Bit  2.. 0:  Fiber Output Amplitude */
1249
1250 /*****  PHY_MARV_EXT_P_STAT 16 bit r/w  Ext. PHY Specific Status *****/
1251 #define PHY_M_FC_AUTO_SEL       (1<<15) /* Bit 15:      Fiber/Copper Auto Sel. dis. */
1252 #define PHY_M_FC_AN_REG_ACC (1<<14) /* Bit 14:  Fiber/Copper Autoneg. reg acc */
1253 #define PHY_M_FC_RESULUTION (1<<13)     /* Bit 13:      Fiber/Copper Resulution */
1254 #define PHY_M_SER_IF_AN_BP  (1<<12) /* Bit 12:  Ser IF autoneg. bypass enable */
1255 #define PHY_M_SER_IF_BP_ST      (1<<11) /* Bit 11:      Ser IF autoneg. bypass status */
1256 #define PHY_M_IRQ_POLARITY      (1<<10) /* Bit 10:      IRQ polarity */
1257                                                                         /* Bit 9..4: reserved */
1258 #define PHY_M_UNDOC1            (1<< 7) /* undocumented bit !! */
1259 #define PHY_M_MODE_MASK         (0xf<<0)/* Bit 3..0: copy of HWCFG MODE[3:0] */
1260
1261
1262 /*****  PHY_MARV_CABLE_DIAG     16 bit r/o      Cable Diagnostic Reg *****/
1263 #define PHY_M_CABD_ENA_TEST     (1<<15) /* Bit 15:      Enable Test */
1264 #define PHY_M_CABD_STAT_MSK     (3<<13) /* Bit 14..13:  Status */
1265                                                                         /* Bit 12.. 8:  reserved */
1266 #define PHY_M_CABD_DIST_MSK     0xff    /* Bit  7.. 0:  Distance */
1267
1268 /* values for Cable Diagnostic Status (11=fail; 00=OK; 10=open; 01=short) */
1269 #define CABD_STAT_NORMAL        0
1270 #define CABD_STAT_SHORT         1
1271 #define CABD_STAT_OPEN          2
1272 #define CABD_STAT_FAIL          3
1273
1274
1275 /*
1276  * GMAC registers
1277  *
1278  * The GMAC registers are 16 or 32 bits wide.
1279  * The GMACs host processor interface is 16 bits wide,
1280  * therefore ALL registers will be addressed with 16 bit accesses.
1281  *
1282  * The following macros are provided to access the GMAC registers
1283  * GM_IN16(), GM_OUT16, GM_IN32(), GM_OUT32(), GM_INADR(), GM_OUTADR(),
1284  * GM_INHASH(), and GM_OUTHASH().
1285  * The macros are defined in SkGeHw.h.
1286  *
1287  * Note:        NA reg  = Network Address e.g DA, SA etc.
1288  *
1289  */
1290
1291 /* Port Registers */
1292 #define GM_GP_STAT              0x0000          /* 16 bit r/o   General Purpose Status */
1293 #define GM_GP_CTRL              0x0004          /* 16 bit r/w   General Purpose Control */
1294 #define GM_TX_CTRL              0x0008          /* 16 bit r/w   Transmit Control Reg. */
1295 #define GM_RX_CTRL              0x000c          /* 16 bit r/w   Receive Control Reg. */
1296 #define GM_TX_FLOW_CTRL 0x0010          /* 16 bit r/w   Transmit Flow-Control */
1297 #define GM_TX_PARAM             0x0014          /* 16 bit r/w   Transmit Parameter Reg. */
1298 #define GM_SERIAL_MODE  0x0018          /* 16 bit r/w   Serial Mode Register */
1299
1300 /* Source Address Registers */
1301 #define GM_SRC_ADDR_1L  0x001c          /* 16 bit r/w   Source Address 1 (low) */
1302 #define GM_SRC_ADDR_1M  0x0020          /* 16 bit r/w   Source Address 1 (middle) */
1303 #define GM_SRC_ADDR_1H  0x0024          /* 16 bit r/w   Source Address 1 (high) */
1304 #define GM_SRC_ADDR_2L  0x0028          /* 16 bit r/w   Source Address 2 (low) */
1305 #define GM_SRC_ADDR_2M  0x002c          /* 16 bit r/w   Source Address 2 (middle) */
1306 #define GM_SRC_ADDR_2H  0x0030          /* 16 bit r/w   Source Address 2 (high) */
1307
1308 /* Multicast Address Hash Registers */
1309 #define GM_MC_ADDR_H1   0x0034          /* 16 bit r/w   Multicast Address Hash 1 */
1310 #define GM_MC_ADDR_H2   0x0038          /* 16 bit r/w   Multicast Address Hash 2 */
1311 #define GM_MC_ADDR_H3   0x003c          /* 16 bit r/w   Multicast Address Hash 3 */
1312 #define GM_MC_ADDR_H4   0x0040          /* 16 bit r/w   Multicast Address Hash 4 */
1313
1314 /* Interrupt Source Registers */
1315 #define GM_TX_IRQ_SRC   0x0044          /* 16 bit r/o   Tx Overflow IRQ Source */
1316 #define GM_RX_IRQ_SRC   0x0048          /* 16 bit r/o   Rx Overflow IRQ Source */
1317 #define GM_TR_IRQ_SRC   0x004c          /* 16 bit r/o   Tx/Rx Over. IRQ Source */
1318
1319 /* Interrupt Mask Registers */
1320 #define GM_TX_IRQ_MSK   0x0050          /* 16 bit r/w   Tx Overflow IRQ Mask */
1321 #define GM_RX_IRQ_MSK   0x0054          /* 16 bit r/w   Rx Overflow IRQ Mask */
1322 #define GM_TR_IRQ_MSK   0x0058          /* 16 bit r/w   Tx/Rx Over. IRQ Mask */
1323
1324 /* Serial Management Interface (SMI) Registers */
1325 #define GM_SMI_CTRL             0x0080          /* 16 bit r/w   SMI Control Register */
1326 #define GM_SMI_DATA             0x0084          /* 16 bit r/w   SMI Data Register */
1327 #define GM_PHY_ADDR             0x0088          /* 16 bit r/w   GPHY Address Register */
1328
1329 /* MIB Counters */
1330 #define GM_MIB_CNT_BASE 0x0100          /* Base Address of MIB Counters */
1331 #define GM_MIB_CNT_SIZE 44                      /* Number of MIB Counters */
1332
1333 /*
1334  * MIB Counters base address definitions (low word) -
1335  * use offset 4 for access to high word (32 bit r/o)
1336  */
1337 #define GM_RXF_UC_OK \
1338                         (GM_MIB_CNT_BASE + 0)   /* Unicast Frames Received OK */
1339 #define GM_RXF_BC_OK \
1340                         (GM_MIB_CNT_BASE + 8)   /* Broadcast Frames Received OK */
1341 #define GM_RXF_MPAUSE \
1342                         (GM_MIB_CNT_BASE + 16)  /* Pause MAC Ctrl Frames Received */
1343 #define GM_RXF_MC_OK \
1344                         (GM_MIB_CNT_BASE + 24)  /* Multicast Frames Received OK */
1345 #define GM_RXF_FCS_ERR \
1346                         (GM_MIB_CNT_BASE + 32)  /* Rx Frame Check Seq. Error */
1347         /* GM_MIB_CNT_BASE + 40:        reserved */
1348 #define GM_RXO_OK_LO \
1349                         (GM_MIB_CNT_BASE + 48)  /* Octets Received OK Low */
1350 #define GM_RXO_OK_HI \
1351                         (GM_MIB_CNT_BASE + 56)  /* Octets Received OK High */
1352 #define GM_RXO_ERR_LO \
1353                         (GM_MIB_CNT_BASE + 64)  /* Octets Received Invalid Low */
1354 #define GM_RXO_ERR_HI \
1355                         (GM_MIB_CNT_BASE + 72)  /* Octets Received Invalid High */
1356 #define GM_RXF_SHT \
1357                         (GM_MIB_CNT_BASE + 80)  /* Frames <64 Byte Received OK */
1358 #define GM_RXE_FRAG \
1359                         (GM_MIB_CNT_BASE + 88)  /* Frames <64 Byte Received with FCS Err */
1360 #define GM_RXF_64B \
1361                         (GM_MIB_CNT_BASE + 96)  /* 64 Byte Rx Frame */
1362 #define GM_RXF_127B \
1363                         (GM_MIB_CNT_BASE + 104) /* 65-127 Byte Rx Frame */
1364 #define GM_RXF_255B \
1365                         (GM_MIB_CNT_BASE + 112) /* 128-255 Byte Rx Frame */
1366 #define GM_RXF_511B \
1367                         (GM_MIB_CNT_BASE + 120) /* 256-511 Byte Rx Frame */
1368 #define GM_RXF_1023B \
1369                         (GM_MIB_CNT_BASE + 128) /* 512-1023 Byte Rx Frame */
1370 #define GM_RXF_1518B \
1371                         (GM_MIB_CNT_BASE + 136) /* 1024-1518 Byte Rx Frame */
1372 #define GM_RXF_MAX_SZ \
1373                         (GM_MIB_CNT_BASE + 144) /* 1519-MaxSize Byte Rx Frame */
1374 #define GM_RXF_LNG_ERR \
1375                         (GM_MIB_CNT_BASE + 152) /* Rx Frame too Long Error */
1376 #define GM_RXF_JAB_PKT \
1377                         (GM_MIB_CNT_BASE + 160) /* Rx Jabber Packet Frame */
1378         /* GM_MIB_CNT_BASE + 168:       reserved */
1379 #define GM_RXE_FIFO_OV \
1380                         (GM_MIB_CNT_BASE + 176) /* Rx FIFO overflow Event */
1381         /* GM_MIB_CNT_BASE + 184:       reserved */
1382 #define GM_TXF_UC_OK \
1383                         (GM_MIB_CNT_BASE + 192) /* Unicast Frames Xmitted OK */
1384 #define GM_TXF_BC_OK \
1385                         (GM_MIB_CNT_BASE + 200) /* Broadcast Frames Xmitted OK */
1386 #define GM_TXF_MPAUSE \
1387                         (GM_MIB_CNT_BASE + 208) /* Pause MAC Ctrl Frames Xmitted */
1388 #define GM_TXF_MC_OK \
1389                         (GM_MIB_CNT_BASE + 216) /* Multicast Frames Xmitted OK */
1390 #define GM_TXO_OK_LO \
1391                         (GM_MIB_CNT_BASE + 224) /* Octets Transmitted OK Low */
1392 #define GM_TXO_OK_HI \
1393                         (GM_MIB_CNT_BASE + 232) /* Octets Transmitted OK High */
1394 #define GM_TXF_64B \
1395                         (GM_MIB_CNT_BASE + 240) /* 64 Byte Tx Frame */
1396 #define GM_TXF_127B \
1397                         (GM_MIB_CNT_BASE + 248) /* 65-127 Byte Tx Frame */
1398 #define GM_TXF_255B \
1399                         (GM_MIB_CNT_BASE + 256) /* 128-255 Byte Tx Frame */
1400 #define GM_TXF_511B \
1401                         (GM_MIB_CNT_BASE + 264) /* 256-511 Byte Tx Frame */
1402 #define GM_TXF_1023B \
1403                         (GM_MIB_CNT_BASE + 272) /* 512-1023 Byte Tx Frame */
1404 #define GM_TXF_1518B \
1405                         (GM_MIB_CNT_BASE + 280) /* 1024-1518 Byte Tx Frame */
1406 #define GM_TXF_MAX_SZ \
1407                         (GM_MIB_CNT_BASE + 288) /* 1519-MaxSize Byte Tx Frame */
1408         /* GM_MIB_CNT_BASE + 296:       reserved */
1409 #define GM_TXF_COL \
1410                         (GM_MIB_CNT_BASE + 304) /* Tx Collision */
1411 #define GM_TXF_LAT_COL \
1412                         (GM_MIB_CNT_BASE + 312) /* Tx Late Collision */
1413 #define GM_TXF_ABO_COL \
1414                         (GM_MIB_CNT_BASE + 320) /* Tx aborted due to Exces. Col. */
1415 #define GM_TXF_MUL_COL \
1416                         (GM_MIB_CNT_BASE + 328) /* Tx Multiple Collision */
1417 #define GM_TXF_SNG_COL \
1418                         (GM_MIB_CNT_BASE + 336) /* Tx Single Collision */
1419 #define GM_TXE_FIFO_UR \
1420                         (GM_MIB_CNT_BASE + 344) /* Tx FIFO Underrun Event */
1421
1422 /*----------------------------------------------------------------------------*/
1423 /*
1424  * GMAC Bit Definitions
1425  *
1426  * If the bit access behaviour differs from the register access behaviour
1427  * (r/w, r/o) this is documented after the bit number.
1428  * The following bit access behaviours are used:
1429  *      (sc)    self clearing
1430  *      (r/o)   read only
1431  */
1432
1433 /*      GM_GP_STAT      16 bit r/o      General Purpose Status Register */
1434 #define GM_GPSR_SPEED           (1<<15) /* Bit 15:      Port Speed (1 = 100 Mbps) */
1435 #define GM_GPSR_DUPLEX          (1<<14) /* Bit 14:      Duplex Mode (1 = Full) */
1436 #define GM_GPSR_FC_TX_DIS       (1<<13) /* Bit 13:      Tx Flow-Control Mode Disabled */
1437 #define GM_GPSR_LINK_UP         (1<<12) /* Bit 12:      Link Up Status */
1438 #define GM_GPSR_PAUSE           (1<<11) /* Bit 11:      Pause State */
1439 #define GM_GPSR_TX_ACTIVE       (1<<10) /* Bit 10:      Tx in Progress */
1440 #define GM_GPSR_EXC_COL         (1<<9)  /* Bit  9:      Excessive Collisions Occured */
1441 #define GM_GPSR_LAT_COL         (1<<8)  /* Bit  8:      Late Collisions Occured */
1442                                                                 /* Bit  7..6:   reserved */
1443 #define GM_GPSR_PHY_ST_CH       (1<<5)  /* Bit  5:      PHY Status Change */
1444 #define GM_GPSR_GIG_SPEED       (1<<4)  /* Bit  4:      Gigabit Speed (1 = 1000 Mbps) */
1445 #define GM_GPSR_PART_MODE       (1<<3)  /* Bit  3:      Partition mode */
1446 #define GM_GPSR_FC_RX_DIS       (1<<2)  /* Bit  2:      Rx Flow-Control Mode Disabled */
1447 #define GM_GPSR_PROM_EN         (1<<1)  /* Bit  1:      Promiscuous Mode Enabled */
1448                                                                 /* Bit  0:      reserved */
1449         
1450 /*      GM_GP_CTRL      16 bit r/w      General Purpose Control Register */
1451                                                                 /* Bit 15:      reserved */
1452 #define GM_GPCR_PROM_ENA        (1<<14) /* Bit 14:      Enable Promiscuous Mode */
1453 #define GM_GPCR_FC_TX_DIS       (1<<13) /* Bit 13:      Disable Tx Flow-Control Mode */
1454 #define GM_GPCR_TX_ENA          (1<<12) /* Bit 12:      Enable Transmit */
1455 #define GM_GPCR_RX_ENA          (1<<11) /* Bit 11:      Enable Receive */
1456 #define GM_GPCR_BURST_ENA       (1<<10) /* Bit 10:      Enable Burst Mode */
1457 #define GM_GPCR_LOOP_ENA        (1<<9)  /* Bit  9:      Enable MAC Loopback Mode */
1458 #define GM_GPCR_PART_ENA        (1<<8)  /* Bit  8:      Enable Partition Mode */
1459 #define GM_GPCR_GIGS_ENA        (1<<7)  /* Bit  7:      Gigabit Speed (1000 Mbps) */
1460 #define GM_GPCR_FL_PASS         (1<<6)  /* Bit  6:      Force Link Pass */
1461 #define GM_GPCR_DUP_FULL        (1<<5)  /* Bit  5:      Full Duplex Mode */
1462 #define GM_GPCR_FC_RX_DIS       (1<<4)  /* Bit  4:      Disable Rx Flow-Control Mode */
1463 #define GM_GPCR_SPEED_100       (1<<3)  /* Bit  3:      Port Speed 100 Mbps */
1464 #define GM_GPCR_AU_DUP_DIS      (1<<2)  /* Bit  2:      Disable Auto-Update Duplex */
1465 #define GM_GPCR_AU_FCT_DIS      (1<<1)  /* Bit  1:      Disable Auto-Update Flow-C. */
1466 #define GM_GPCR_AU_SPD_DIS      (1<<0)  /* Bit  0:      Disable Auto-Update Speed */
1467
1468 #define GM_GPCR_SPEED_1000      (GM_GPCR_GIGS_ENA | GM_GPCR_SPEED_100)
1469 #define GM_GPCR_AU_ALL_DIS      (GM_GPCR_AU_DUP_DIS | GM_GPCR_AU_FCT_DIS |\
1470                                                          GM_GPCR_AU_SPD_DIS)
1471         
1472 /*      GM_TX_CTRL                              16 bit r/w      Transmit Control Register */
1473 #define GM_TXCR_FORCE_JAM       (1<<15) /* Bit 15:      Force Jam / Flow-Control */
1474 #define GM_TXCR_CRC_DIS         (1<<14) /* Bit 14:      Disable insertion of CRC */
1475 #define GM_TXCR_PAD_DIS         (1<<13) /* Bit 13:      Disable padding of packets */
1476 #define GM_TXCR_COL_THR_MSK     (1<<10) /* Bit 12..10:  Collision Threshold */
1477
1478 #define TX_COL_THR(x)           (SHIFT10(x) & GM_TXCR_COL_THR_MSK)
1479
1480 #define TX_COL_DEF                      0x04
1481         
1482 /*      GM_RX_CTRL                              16 bit r/w      Receive Control Register */
1483 #define GM_RXCR_UCF_ENA         (1<<15) /* Bit 15:      Enable Unicast filtering */
1484 #define GM_RXCR_MCF_ENA         (1<<14) /* Bit 14:      Enable Multicast filtering */
1485 #define GM_RXCR_CRC_DIS         (1<<13) /* Bit 13:      Remove 4-byte CRC */
1486 #define GM_RXCR_PASS_FC         (1<<12) /* Bit 12:      Pass FC packets to FIFO */
1487         
1488 /*      GM_TX_PARAM                             16 bit r/w      Transmit Parameter Register */
1489 #define GM_TXPA_JAMLEN_MSK      (0x03<<14)      /* Bit 15..14:  Jam Length */
1490 #define GM_TXPA_JAMIPG_MSK      (0x1f<<9)       /* Bit 13..9:   Jam IPG */
1491 #define GM_TXPA_JAMDAT_MSK      (0x1f<<4)       /* Bit  8..4:   IPG Jam to Data */
1492                                                                 /* Bit  3..0:   reserved */
1493
1494 #define TX_JAM_LEN_VAL(x)       (SHIFT14(x) & GM_TXPA_JAMLEN_MSK)
1495 #define TX_JAM_IPG_VAL(x)       (SHIFT9(x) & GM_TXPA_JAMIPG_MSK)
1496 #define TX_IPG_JAM_DATA(x)      (SHIFT4(x) & GM_TXPA_JAMDAT_MSK)
1497
1498 #define TX_JAM_LEN_DEF          0x03
1499 #define TX_JAM_IPG_DEF          0x0b
1500 #define TX_IPG_JAM_DEF          0x1c
1501
1502 /*      GM_SERIAL_MODE                  16 bit r/w      Serial Mode Register */
1503 #define GM_SMOD_DATABL_MSK      (0x1f<<11)      /* Bit 15..11:  Data Blinder (r/o) */
1504 #define GM_SMOD_LIMIT_4         (1<<10) /* Bit 10:      4 consecutive Tx trials */
1505 #define GM_SMOD_VLAN_ENA        (1<<9)  /* Bit  9:      Enable VLAN  (Max. Frame Len) */
1506 #define GM_SMOD_JUMBO_ENA       (1<<8)  /* Bit  8:      Enable Jumbo (Max. Frame Len) */
1507                                                                 /* Bit  7..5:   reserved */
1508 #define GM_SMOD_IPG_MSK         0x1f    /* Bit 4..0:    Inter-Packet Gap (IPG) */
1509         
1510 #define DATA_BLIND_VAL(x)       (SHIFT11(x) & GM_SMOD_DATABL_MSK)
1511 #define DATA_BLIND_DEF          0x04
1512
1513 #define IPG_DATA_VAL(x)         (x & GM_SMOD_IPG_MSK)
1514 #define IPG_DATA_DEF            0x1e
1515
1516 /*      GM_SMI_CTRL                             16 bit r/w      SMI Control Register */
1517 #define GM_SMI_CT_PHY_A_MSK     (0x1f<<11)      /* Bit 15..11:  PHY Device Address */
1518 #define GM_SMI_CT_REG_A_MSK     (0x1f<<6)       /* Bit 10.. 6:  PHY Register Address */
1519 #define GM_SMI_CT_OP_RD         (1<<5)  /* Bit  5:      OpCode Read (0=Write)*/
1520 #define GM_SMI_CT_RD_VAL        (1<<4)  /* Bit  4:      Read Valid (Read completed) */
1521 #define GM_SMI_CT_BUSY          (1<<3)  /* Bit  3:      Busy (Operation in progress) */
1522                                                                 /* Bit   2..0:  reserved */
1523         
1524 #define GM_SMI_CT_PHY_AD(x)     (SHIFT11(x) & GM_SMI_CT_PHY_A_MSK)
1525 #define GM_SMI_CT_REG_AD(x)     (SHIFT6(x) & GM_SMI_CT_REG_A_MSK)
1526
1527         /*      GM_PHY_ADDR                             16 bit r/w      GPHY Address Register */
1528                                                                 /* Bit  15..6:  reserved */
1529 #define GM_PAR_MIB_CLR          (1<<5)  /* Bit  5:      Set MIB Clear Counter Mode */
1530 #define GM_PAR_MIB_TST          (1<<4)  /* Bit  4:      MIB Load Counter (Test Mode) */
1531                                                                 /* Bit   3..0:  reserved */
1532         
1533 /* Receive Frame Status Encoding */
1534 #define GMR_FS_LEN      (0xffffUL<<16)  /* Bit 31..16:  Rx Frame Length */
1535                                                                 /* Bit  15..14: reserved */
1536 #define GMR_FS_VLAN             (1L<<13)        /* Bit 13:      VLAN Packet */
1537 #define GMR_FS_JABBER   (1L<<12)        /* Bit 12:      Jabber Packet */
1538 #define GMR_FS_UN_SIZE  (1L<<11)        /* Bit 11:      Undersize Packet */
1539 #define GMR_FS_MC               (1L<<10)        /* Bit 10:      Multicast Packet */
1540 #define GMR_FS_BC               (1L<<9)         /* Bit  9:      Broadcast Packet */
1541 #define GMR_FS_RX_OK    (1L<<8)         /* Bit  8:      Receive OK (Good Packet) */
1542 #define GMR_FS_GOOD_FC  (1L<<7)         /* Bit  7:      Good Flow-Control Packet */
1543 #define GMR_FS_BAD_FC   (1L<<6)         /* Bit  6:      Bad  Flow-Control Packet */
1544 #define GMR_FS_MII_ERR  (1L<<5)         /* Bit  5:      MII Error */
1545 #define GMR_FS_LONG_ERR (1L<<4)         /* Bit  4:      Too Long Packet */
1546 #define GMR_FS_FRAGMENT (1L<<3)         /* Bit  3:      Fragment */
1547                                                                 /* Bit  2:      reserved */
1548 #define GMR_FS_CRC_ERR  (1L<<1)         /* Bit  1:      CRC Error */
1549 #define GMR_FS_RX_FF_OV (1L<<0)         /* Bit  0:      Rx FIFO Overflow */
1550
1551 /*
1552  * GMR_FS_ANY_ERR (analogous to XMR_FS_ANY_ERR)
1553  */
1554 #define GMR_FS_ANY_ERR  (GMR_FS_CRC_ERR | \
1555                         GMR_FS_LONG_ERR | \
1556                         GMR_FS_MII_ERR | \
1557                         GMR_FS_BAD_FC | \
1558                         GMR_FS_GOOD_FC | \
1559                         GMR_FS_JABBER)
1560
1561 /* Rx GMAC FIFO Flush Mask (default) */
1562 #define RX_FF_FL_DEF_MSK        (GMR_FS_CRC_ERR | \
1563                         GMR_FS_RX_FF_OV | \
1564                         GMR_FS_MII_ERR | \
1565                         GMR_FS_BAD_FC | \
1566                         GMR_FS_GOOD_FC | \
1567                         GMR_FS_UN_SIZE | \
1568                         GMR_FS_JABBER)
1569
1570 /* typedefs *******************************************************************/
1571
1572
1573 /* function prototypes ********************************************************/
1574
1575 #ifdef __cplusplus
1576 }
1577 #endif  /* __cplusplus */
1578
1579 #endif  /* __INC_XMAC_H */