1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2021-04-21
9  */
10 
11 
12 /*  $NetBSD: lan9118reg.h,v 1.3 2010/09/27 12:29:03 kiyohara Exp $  */
13 /*
14  * Copyright (c) 2008 KIYOHARA Takashi
15  * All rights reserved.
16  *
17  * Redistribution and use in source and binary forms, with or without
18  * modification, are permitted provided that the following conditions
19  * are met:
20  * 1. Redistributions of source code must retain the above copyright
21  *    notice, this list of conditions and the following disclaimer.
22  * 2. Redistributions in binary form must reproduce the above copyright
23  *    notice, this list of conditions and the following disclaimer in the
24  *    documentation and/or other materials provided with the distribution.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
27  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
28  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
30  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
31  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
32  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36  * POSSIBILITY OF SUCH DAMAGE.
37  */
38 
39 #ifndef _LAN9118REG_H_
40 #define _LAN9118REG_H_
41 
42 
43 #define CONFIG_SMC911X_32_BIT
44 
45 #define LAN9118_IOSIZE   0x100
46 
47 #define LAN9118_ID_89218 0x218a
48 #define LAN9118_ID_9115  0x0115
49 #define LAN9118_ID_9116  0x0116
50 #define LAN9118_ID_9117  0x0117
51 #define LAN9118_ID_9118  0x0118
52 #define LAN9218_ID_9215  0x115a
53 #define LAN9218_ID_9216  0x116a
54 #define LAN9218_ID_9217  0x117a
55 #define LAN9218_ID_9218  0x118a
56 
57 #define LAN9210_ID_9210  0x9210
58 #define LAN9210_ID_9211  0x9211
59 #define LAN9220_ID_9220  0x9220
60 #define LAN9220_ID_9221  0x9221
61 
62 #define IS_LAN9118(id)  ((id) >= LAN9118_ID_9115 && (id) <= LAN9118_ID_9118)
63 #define IS_LAN9218(id)  ((id) >= LAN9218_ID_9215 && (id) <= LAN9218_ID_9218)
64 
65 #define LAN9118_IPHY_ADDR   0x01    /* Internal PHY Address */
66 
67 
68 #define LAN9118_RXDFIFOP    0x00    /* RX Data FIFO Port */
69 #define LAN9118_RXDFIFOAP   0x04    /* RX Data FIFO Alias Ports */
70 #define LAN9118_TXDFIFOP    0x20    /* TX Data FIFO Port */
71 #define LAN9118_TXDFIFOAP   0x24    /* TX Data FIFO Alias Ports */
72 #define LAN9118_RXSFIFOP    0x40    /* RX Status FIFO Port */
73 #define LAN9118_RXSFIFOPEEK 0x44    /* RX Status FIFO PEEK */
74 #define LAN9118_TXSFIFOP    0x48    /* TX Status FIFO Port */
75 #define LAN9118_TXSFIFOPEEK 0x4c    /* TX Status FIFO PEEK */
76 
77 /* System Control and Status Registers */
78 #define LAN9118_ID_REV                      0x50    /* Chip ID and Revision */
79 #define LAN9118_ID_REV_ID(x)                (((x) >> 16) & 0xffff)
80 #define LAN9118_ID_REV_REV(x)               ((x) & 0xffff)
81 #define LAN9118_IRQ_CFG                     0x54    /* Main Interrupt Configuration */
82 #define LAN9118_IRQ_CFG_INT_DEAS(t)         ((t) << 24) /* Intr Deassert Interval */
83 #define LAN9118_IRQ_CFG_INT_DEAS_CLR        (1 << 14)   /* Intr Deass Intrval clr */
84 #define LAN9118_IRQ_CFG_INT_DEAS_STS        (1 << 13)   /* Intr Deassert Status */
85 #define LAN9118_IRQ_CFG_IRQ_INT             (1 << 12)   /* Master Interrupt */
86 #define LAN9118_IRQ_CFG_IRQ_EN              (1 << 8)    /* IRQ Enable */
87 #define LAN9118_IRQ_CFG_IRQ_POL             (1 << 4)    /* IRQ Polarity */
88 #define LAN9118_IRQ_CFG_IRQ_TYPE            (1 << 0)    /* IRQ Buffer Type */
89 #define LAN9118_INT_STS                     0x58    /* Interrupt Status */
90 #define LAN9118_INT_EN                      0x5c    /* Interrupt Enable Register */
91 #define LAN9118_INT_SW_INT                  (1 << 31) /* Software Interrupt */
92 #define LAN9118_INT_TXSTOP_INT              (1 << 25) /* TX Stopped */
93 #define LAN9118_INT_RXSTOP_INT              (1 << 24) /* RX Stopped */
94 #define LAN9118_INT_RXDFH_INT               (1 << 23) /* RX Drppd Frm Cnt Halfway */
95 #define LAN9118_INT_TX_IOC                  (1 << 21) /* TX IOC Interrupt */
96 #define LAN9118_INT_RXD_INT                 (1 << 20) /* RX DMA Interrupt */
97 #define LAN9118_INT_GPT_INT                 (1 << 19) /* GP Timer */
98 #define LAN9118_INT_PHY_INT                 (1 << 18) /* PHY */
99 #define LAN9118_INT_PME_INT                 (1 << 17) /* Power Management Event */
100 #define LAN9118_INT_TXSO                    (1 << 16) /* TX Status FIFO Overflow */
101 #define LAN9118_INT_RWT                     (1 << 15) /* Rcv Watchdog Time-out */
102 #define LAN9118_INT_RXE                     (1 << 14) /* Receive Error */
103 #define LAN9118_INT_TXE                     (1 << 13) /* Transmitter Error */
104 #define LAN9118_INT_TDFO                    (1 << 10) /* TX Data FIFO Overrun */
105 #define LAN9118_INT_TDFA                    (1 << 9)  /* TX Data FIFO Available */
106 #define LAN9118_INT_TSFF                    (1 << 8)  /* TX Status FIFO Full */
107 #define LAN9118_INT_TSFL                    (1 << 7)  /* TX Status FIFO Level */
108 #define LAN9118_INT_RXDF_INT                (1 << 6)  /* RX Dropped Frame Intr */
109 #define LAN9118_INT_RSFF                    (1 << 4)  /* RX Status FIFO Full */
110 #define LAN9118_INT_RSFL                    (1 << 3)  /* RX Status FIFO Level */
111 #define LAN9118_INT_GPIOX_INT(x)            (1 << (x)) /* GPIO[2:0] */
112 /*              0x60       Reserved for future use */
113 #define LAN9118_BYTE_TEST                   0x64    /* Read-only byte order testing reg */
114 #define LAN9118_BYTE_TEST_VALUE             0x87654321
115 #define LAN9118_FIFO_INT                    0x68    /* FIFO Level Interrupt */
116 #define LAN9118_FIFO_INT_TXDAL(x)           ((x) << 24) /* TX Data Available Lvl */
117 #define LAN9118_FIFO_INT_TXSL(x)            ((x) << 16) /* TX Status Level */
118 #define LAN9118_FIFO_INT_RXSL(x)            ((x) << 0)  /* RX Status Level */
119 #define LAN9118_RX_CFG                      0x6c    /* Receive Configuration */
120 #define LAN9118_RX_CFG_RXEA_4B              (0 << 30) /* RX End Alignment: 4 Byte */
121 #define LAN9118_RX_CFG_RXEA_16B             (1 << 30) /*                  16 Byte */
122 #define LAN9118_RX_CFG_RXEA_32B             (2 << 30) /*                  32 Byte */
123 #define LAN9118_RX_CFG_RX_DMA_CNT(x)        ((x) << 16) /* RX DMA Count */
124 #define LAN9118_RX_CFG_RX_DUMP              (1 << 15)   /* Force RX Discard */
125 #define LAN9118_RX_CFG_RXDOFF(x)            ((x) << 8)  /* RX Data Offset */
126 #define LAN9118_TX_CFG                      0x70    /* Transmit Configuration */
127 #define LAN9118_TX_CFG_TXS_DUMP             (1 << 15) /* Force TX Status Discard */
128 #define LAN9118_TX_CFG_TXD_DUMP             (1 << 14) /* Force TX Data Discard */
129 #define LAN9118_TX_CFG_TXSAO                (1 << 2)  /* TX Status Allow Overrun */
130 #define LAN9118_TX_CFG_TX_ON                (1 << 1)  /* Transmitter Enable */
131 #define LAN9118_TX_CFG_STOP_TX              (1 << 0)  /* Stop Transmitter */
132 #define LAN9118_HW_CFG                      0x74    /* Hardware Configuration */
133 #define LAN9118_HW_CFG_MBO                  (1 << 20)/* Must Be One */
134 #define LAN9118_HW_CFG_TX_FIF_MASK          (0xf << 16) /* TX FIFO Size */
135 #define LAN9118_HW_CFG_TX_FIF_SZ(sz)        ((sz) << 16)
136 #define LAN9118_HW_CFG_PHY_CLK_SEL_MASK     (3 << 5) /* PHY Clock Select */
137 #define LAN9118_HW_CFG_PHY_CLK_SEL_IPHY     (0 << 5) /*   Internal PHY */
138 #define LAN9118_HW_CFG_PHY_CLK_SEL_EMII     (1 << 5) /*   External MII Port */
139 #define LAN9118_HW_CFG_PHY_CLK_SEL_CD       (2 << 5) /*   Clock Disabled */
140 #define LAN9118_HW_CFG_SMI_SEL              (1 << 4) /* Serial Mgmt Interface Sel */
141 #define LAN9118_HW_CFG_EXT_PHY_DET          (1 << 3) /* External PHY Detect */
142 #define LAN9118_HW_CFG_EXT_PHY_EN           (1 << 2) /* External PHY Enable */
143 #define LAN9118_HW_CFG_SRST_TO              (1 << 1) /* Soft Reset Timeout */
144 #define LAN9118_HW_CFG_SRST                 (1 << 0) /* Soft Reset */
145 #define LAN9118_RX_DP_CTL                   0x78    /* RX Datapath Control */
146 #define LAN9118_RX_DP_CTL_RX_FFWD           (1 << 31)/* RX Data FIFO Fast Forward */
147 #define LAN9118_RX_FIFO_INF                 0x7c    /* Receive FIFO Information */
148 #define LAN9118_RX_FIFO_INF_RXSUSED(x)      (((x) >> 16) & 0xff) /*Sts Used Space*/
149 #define LAN9118_RX_FIFO_INF_RXDUSED(x)      ((x) & 0xffff)  /*Data FIFO Used Space*/
150 #define LAN9118_TX_FIFO_INF                 0x80    /* Transmit FIFO Information */
151 #define LAN9118_TX_FIFO_INF_TXSUSED(x)      (((x) >> 16) & 0xff) /*Sts Used Space*/
152 #define LAN9118_TX_FIFO_INF_TDFREE(x)       ((x) & 0xffff) /*Data FIFO Free Space*/
153 #define LAN9118_PMT_CTRL                    0x84    /* Power Management Control */
154 #define LAN9118_PMT_CTRL_PM_MODE_MASK       (3 << 12)
155 #define LAN9118_PMT_CTRL_PM_MODE_D0         (0 << 12)
156 #define LAN9118_PMT_CTRL_PM_MODE_D1         (1 << 12)
157 #define LAN9118_PMT_CTRL_PM_MODE_D2         (2 << 12)
158 #define LAN9118_PMT_CTRL_PHY_RST            (1 << 10) /* PHY Reset */
159 #define LAN9118_PMT_CTRL_WOL_EN             (1 << 9)  /* Wake-On-LAN Enable */
160 #define LAN9118_PMT_CTRL_ED_EN              (1 << 8)  /* Energy-Detect Enable */
161 #define LAN9118_PMT_CTRL_PME_TYPE           (1 << 6)  /* PME Buffer Type */
162 #define LAN9118_PMT_CTRL_WUPS_NWUED         (0 << 4) /* WAKE-UP Status: No Event */
163 #define LAN9118_PMT_CTRL_WUPS_ED            (1 << 4) /* WAKE-UP Status: Energy */
164 #define LAN9118_PMT_CTRL_WUPS_WUD           (2 << 4) /* WAKE-UP Status: Wake-up */
165 #define LAN9118_PMT_CTRL_PME_IND            (1 << 3)  /* PME indication */
166 #define LAN9118_PMT_CTRL_PME_POL            (1 << 2)  /* PME Polarity */
167 #define LAN9118_PMT_CTRL_PME_EN             (1 << 1)  /* PME Enable */
168 #define LAN9118_PMT_CTRL_READY              (1 << 0)  /* Device Ready */
169 #define LAN9118_GPIO_CFG                    0x88    /* General Purpose IO Configuration */
170 #define LAN9118_GPIO_CFG_LEDX_EN(x)         (1 << ((x) + 28))  /* LED[3:1] enable */
171 #define LAN9118_GPIO_CFG_GPIO_INT_POL(p)    (1 << ((p) + 24)) /* Intr Polarity */
172 #define LAN9118_GPIO_CFG_EEPR_EN            (7 << 20)          /* EEPROM Enable */
173 #define LAN9118_GPIO_CFG_GPIOBUFN(n)        (1 << ((n) + 16))  /* Buffer Type */
174 #define LAN9118_GPIO_CFG_GPDIRN(n)          (1 << ((n) + 8))   /* Direction */
175 #define LAN9118_GPIO_CFG_GPODN(n)           (1 << (n)) /* GPIO Data (3,4 is WO) */
176 #define LAN9118_GPT_CFG                     0x8c    /* General Purpose Timer Config */
177 #define LAN9118_GPT_CNT                     0x90    /* General Purpose Timer Count */
178 /*              0x94       Reserved for future use */
179 #define LAN9118_WORD_SWAP                   0x98    /* WORD SWAP Register */
180 #define LAN9118_FREE_RUN                    0x9c    /* Free Run Counter */
181 #define LAN9118_RX_DROP                     0xa0    /* RX Drop Frame Counter */
182 #define LAN9118_MAC_CSR_CMD                 0xa4    /* MAC CSR Synchronizer Command */
183 #define LAN9118_MAC_CSR_CMD_BUSY            (1 << 31)
184 #define LAN9118_MAC_CSR_CMD_W               (0 << 30)
185 #define LAN9118_MAC_CSR_CMD_R               (1 << 30)
186 #define LAN9118_MAC_CSR_CMD_ADDRESS(a)      ((a) & 0xff)
187 #define LAN9118_MAC_CSR_DATA                0xa8    /* MAC CSR Synchronizer Data */
188 #define LAN9118_AFC_CFG                     0xac    /* Automatic Flow Control Config */
189 #define LAN9118_AFC_CFG_AFC_HI(x)           ((x) << 16)
190 #define LAN9118_AFC_CFG_AFC_LO(x)           ((x) << 8)
191 #define LAN9118_AFC_CFG_BACK_DUR(x)         ((x) << 4)
192 #define LAN9118_AFC_CFG_FCMULT              (1 << 3) /* Flow Control on Multicast */
193 #define LAN9118_AFC_CFG_FCBRD               (1 << 2) /* Flow Control on Broadcast */
194 #define LAN9118_AFC_CFG_FCADD               (1 << 1) /* Flow Control on Addr Dec */
195 #define LAN9118_AFC_CFG_FCANY               (1 << 0) /* Flow Control on Any Frame */
196 #define LAN9118_E2P_CMD                     0xb0    /* EEPROM command */
197 #define LAN9118_E2P_CMD_EPCB                (1 << 31) /* EPC Busy */
198 #define LAN9118_E2P_CMD_EPCC_READ           (0 << 28) /* EPC Command: READ */
199 #define LAN9118_E2P_CMD_EPCC_EWDS           (1 << 28) /*              EWDS */
200 #define LAN9118_E2P_CMD_EPCC_EWEN           (2 << 28) /*              EWEN */
201 #define LAN9118_E2P_CMD_EPCC_WRITE          (3 << 28) /*              WRITE */
202 #define LAN9118_E2P_CMD_EPCC_WRAL           (4 << 28) /*              WRAL */
203 #define LAN9118_E2P_CMD_EPCC_ERASE          (5 << 28) /*              ERASE */
204 #define LAN9118_E2P_CMD_EPCC_ERAL           (6 << 28) /*              ERAL */
205 #define LAN9118_E2P_CMD_EPCC_RELOAD         (7 << 28) /*              Reload */
206 #define LAN9118_E2P_CMD_EPCTO               (1 << 9)  /* EPC Time-out */
207 #define LAN9118_E2P_CMD_MACAL               (1 << 8)  /* MAC Address Loaded */
208 #define LAN9118_E2P_CMD_EPCA(a)             ((a) & 0xff) /* EPC Address */
209 #define LAN9118_E2P_DATA                    0xb4    /* EEPROM Data */
210 /*              0xb8 - 0xfc Reserved for future use */
211 
212 /* MAC Control and Status Registers */
213 #define LAN9118_MAC_CR              0x1 /* MAC Control Register */
214 #define LAN9118_MAC_CR_RXALL        (1 << 31) /* Receive All Mode */
215 #define LAN9118_MAC_CR_RCVOWN       (1 << 23) /* Disable Receive Own */
216 #define LAN9118_MAC_CR_LOOPBK       (1 << 21) /* Loopback operation Mode */
217 #define LAN9118_MAC_CR_FDPX         (1 << 20) /* Full Duplex Mode */
218 #define LAN9118_MAC_CR_MCPAS        (1 << 19) /* Pass All Multicast */
219 #define LAN9118_MAC_CR_PRMS         (1 << 18) /* Promiscuous Mode */
220 #define LAN9118_MAC_CR_INVFILT      (1 << 17) /* Inverse filtering */
221 #define LAN9118_MAC_CR_PASSBAD      (1 << 16) /* Pass Bad Frames */
222 #define LAN9118_MAC_CR_HO           (1 << 15) /* Hash Only Filtering mode */
223 #define LAN9118_MAC_CR_HPFILT       (1 << 13) /* Hash/Perfect Flt Mode */
224 #define LAN9118_MAC_CR_LCOLL        (1 << 12) /* Late Collision Control */
225 #define LAN9118_MAC_CR_BCAST        (1 << 11) /* Disable Broardcast Frms */
226 #define LAN9118_MAC_CR_DISRTY       (1 << 10) /* Disable Retry */
227 #define LAN9118_MAC_CR_PADSTR       (1 << 8)  /* Automatic Pad String */
228 #define LAN9118_MAC_CR_BOLMT        (1 << 7)  /* BackOff Limit */
229 #define LAN9118_MAC_CR_DFCHK        (1 << 5)  /* Deferral Check */
230 #define LAN9118_MAC_CR_TXEN         (1 << 3)  /* Transmitter enable */
231 #define LAN9118_MAC_CR_RXEN         (1 << 2)  /* Receiver enable */
232 #define LAN9118_ADDRH               0x2 /* MAC Address High */
233 #define LAN9118_ADDRL               0x3 /* MAC Address Low */
234 #define LAN9118_HASHH               0x4 /* Multicast Hash Table High */
235 #define LAN9118_HASHL               0x5 /* Multicast Hash Table Low */
236 #define LAN9118_MII_ACC             0x6 /* MII Access */
237 #define LAN9118_MII_ACC_PHYA(a)     ((a) << 11) /* PHY Address */
238 #define LAN9118_MII_ACC_MIIRINDA(i) ((i) << 6)  /* MII Register Index */
239 #define LAN9118_MII_ACC_MIIWNR      (1 << 1)    /* MII Write */
240 #define LAN9118_MII_ACC_MIIBZY      (1 << 0)    /* MII Busy */
241 #define LAN9118_MII_DATA            0x7 /* MII Data */
242 #define LAN9118_FLOW                0x8 /* Flow Control */
243 #define LAN9118_FLOW_FCPT(t)        ((t) << 16) /* Pause Time */
244 #define LAN9118_FLOW_FCPASS         (1 << 2)    /* Pass Control Frame */
245 #define LAN9118_FLOW_FCEN           (1 << 1)    /* Flow Control Enable */
246 #define LAN9118_FLOW_FCBUSY         (1 << 0)    /* Flow Control Busy */
247 #define LAN9118_VLAN1               0x9 /* VLAN1 Tag */
248 #define LAN9118_VLAN2               0xa /* VLAN2 Tag */
249 #define LAN9118_WUFF                0xb /* Wake-up Frame Filter */
250 #define LAN9118_WUCSR               0xc /* Wake-up Control and Status */
251 
252 /* PHY Registers */
253 #define LAN9118_MCSR                0x11    /* Mode Control/Status Register */
254 #define LAN9118_MCSR_EDPWRDOWN      (1 << 13) /* Energy Detect Power Down */
255 #define LAN9118_MCSR_ENERGYON       (1 << 1)
256 #define LAN9118_SMR                 0x12    /* Special Modes Register */
257 #define LAN9118_SMR_PHYAD           (0x01)
258 #define LAN9118_SCSI                0x1b    /* Special Control/Status Indications */
259 #define LAN9118_SCSI_VCOOFF_LP      (1 << 10)
260 #define LAN9118_SCSI_XPOL           (1 << 4)  /* Polarity state */
261 #define LAN9118_ISR                 0x1d    /* Interrupt Source Register */
262 #define LAN9118_IMR                 0x1e    /* Interrupt Mask Register */
263 #define LAN9118_I_ENERGYON          (1 << 7)
264 #define LAN9118_I_AUTONEGOCOMPL     (1 << 6)
265 #define LAN9118_I_REMOTEFAULT       (1 << 5)
266 #define LAN9118_I_LINKDOWN          (1 << 4)
267 #define LAN9118_I_AUTONEGOLPACK     (1 << 3) /* AutoNego LP Acknowledge */
268 #define LAN9118_I_PDF               (1 << 2) /* Parallel Detection Fault */
269 #define LAN9118_I_AUTONEGOPR        (1 << 1) /* AutoNego Page Received */
270 #define LAN9118_PHYSCSR             0x1f    /* PHY Special Control/Status Reg */
271 #define LAN9118_PHYSCSR_AUTODONE    (1 << 12) /* AutoNego done indication */
272 #define LAN9118_PHYSCSR_SI_10       (1 << 2)  /* Speed Indication */
273 #define LAN9118_PHYSCSR_SI_100      (2 << 2)
274 #define LAN9118_PHYSCSR_SI_FDX      (4 << 2)
275 
276 
277 /* TX Command 'A' Format */
278 #define LAN9118_TXC_A_IC        (1 << 31) /* Interrupt on Completion */
279 #define LAN9118_TXC_A_BEA_4B    (0 << 24) /* Buffer End Alignment: 4B */
280 #define LAN9118_TXC_A_BEA_16B   (1 << 24) /*                      16B */
281 #define LAN9118_TXC_A_BEA_32B   (2 << 24) /*                      32B */
282 #define LAN9118_TXC_A_DSO(x)    ((x) << 16) /*Data Start Offset: bytes*/
283 #define LAN9118_TXC_A_FS        (1 << 13) /* First Segment */
284 #define LAN9118_TXC_A_LS        (1 << 12) /* Last Segment */
285 #define LAN9118_TXC_A_BS(x)     ((x) << 0) /* Buffer Size */
286 
287 /* TX Command 'B' Format */
288 #define LAN9118_TXC_B_PT(x)     ((x) << 16) /* Packet Tag */
289 #define LAN9118_TXC_B_ACRCD     (1 << 13)  /* Add CRC Disable */
290 #define LAN9118_TXC_B_DEFP      (1 << 12)  /* Dis Ether Frame Padding */
291 #define LAN9118_TXC_B_PL(x)     ((x) << 0) /* Packet Length */
292 
293 /* TX Status Format */
294 #define LAN9118_TXS_PKTTAG(x)   (((x) >> 16) & 0xff) /* Packet Tag */
295 #define LAN9118_TXS_ES          (1 << 15)   /* Error Status */
296 #define LAN9118_TXS_LOC         (1 << 11)   /* Loss Of Carrier */
297 #define LAN9118_TXS_NC          (1 << 10)   /* No Carrier */
298 #define LAN9118_TXS_LCOL        (1 << 9)    /* Late Collision */
299 #define LAN9118_TXS_ECOL        (1 << 8)    /* Excessive Collision*/
300 #define LAN9118_TXS_COLCNT(x)   (((x) >> 3) & 0xf) /* Collision Count */
301 #define LAN9118_TXS_ED          (1 << 2)    /* Excessive Deferral */
302 #define LAN9118_TXS_DEFERRED    (1 << 0)    /* Deferred */
303 
304 /* RX Status Format */
305 #define LAN9118_RXS_FILTFAIL    (1 << 30) /* Filtering Fail */
306 #define LAN9118_RXS_PKTLEN(x)   (((x) >> 16) & 0x3fff) /* Packet Len */
307 #define LAN9118_RXS_ES          (1 << 15) /* Error Status */
308 #define LAN9118_RXS_BCF         (1 << 13) /* Broadcast Frame */
309 #define LAN9118_RXS_LENERR      (1 << 12) /* Length Error */
310 #define LAN9118_RXS_RUNTF       (1 << 11) /* Runt Frame */
311 #define LAN9118_RXS_MCF         (1 << 10) /* Multicast Frame */
312 #define LAN9118_RXS_FTL         (1 << 7)  /* Frame Too Long */
313 #define LAN9118_RXS_COLS        (1 << 6)  /* Collision Seen */
314 #define LAN9118_RXS_FT          (1 << 5)  /* Frame Type */
315 #define LAN9118_RXS_RWTO        (1 << 4)  /* Rcv Watchdog time-out */
316 #define LAN9118_RXS_MIIERR      (1 << 3)  /* MII Error */
317 #define LAN9118_RXS_DBIT        (1 << 2)  /* Drabbling Bit */
318 #define LAN9118_RXS_CRCERR      (1 << 1)  /* CRC Error */
319 
320 /* Basic mode control register. */
321 #define LAN9118_BMCR_ANRESTART      0x0200  /* Auto negotiation restart  */
322 #define LAN9118_BMCR_ANENABLE       0x1000  /* Enable auto negotiation   */
323 #define LAN9118_BMCR_RESET          0x8000  /* Reset the DP83840     */
324 #define LAN9118_BMSR_LSTATUS        0x0004  /* Link status    */
325 
326 /* Generic MII registers. */
327 #define LAN9118_MII_BMCR            0x00  /* Basic mode control register */
328 #define LAN9118_MII_BMSR            0x01  /* Basic mode status register  */
329 #define LAN9118_MII_ADVERTISE       0x04  /* Advertisement control register */
330 
331 #define LAN9118_GPT_CFG_TIMER_EN    0x20000000  /* R/W */
332 
333 #define LAN9118_RX_STS_PKT_LEN      0x3FFF0000
334 #define LAN9118_TX_STS_UNDERRUN     0x00000002
335 
336 #define LAN9118_HW_CFG_SF           0x00100000  /* R/W */
337 
338 #define LAN9118_INT_STS_RSFL        0x00000008  /* R/WC */
339 #define LAN9118_INT_EN_RDFL_EN      0x00000020  /* R/W */
340 #define LAN9118_MAC_CR_HBDIS        0x10000000
341 
342 #endif  /* _LAN9118REG_H_ */
343