]> git.sur5r.net Git - freertos/blob - FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/ksz8851snl/ksz8851snl_reg.h
3102fcc42f20b33f1e01e632c237b0a3c394d4b4
[freertos] / FreeRTOS-Plus / Source / FreeRTOS-Plus-TCP / portable / NetworkInterface / ksz8851snl / ksz8851snl_reg.h
1 /**\r
2  *\r
3  * \file\r
4  *\r
5  * \brief KS8851SNL registers definitions.\r
6  *\r
7  * Copyright (c) 2013-2015 Atmel Corporation. All rights reserved.\r
8  *\r
9  * \asf_license_start\r
10  *\r
11  * \page License\r
12  *\r
13  * Redistribution and use in source and binary forms, with or without\r
14  * modification, are permitted provided that the following conditions are met:\r
15  *\r
16  * 1. Redistributions of source code must retain the above copyright notice,\r
17  *    this list of conditions and the following disclaimer.\r
18  *\r
19  * 2. Redistributions in binary form must reproduce the above copyright notice,\r
20  *    this list of conditions and the following disclaimer in the documentation\r
21  *    and/or other materials provided with the distribution.\r
22  *\r
23  * 3. The name of Atmel may not be used to endorse or promote products derived\r
24  *    from this software without specific prior written permission.\r
25  *\r
26  * 4. This software may only be redistributed and used in connection with an\r
27  *    Atmel microcontroller product.\r
28  *\r
29  * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
30  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
31  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
32  * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
33  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
34  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
35  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
36  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
37  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
38  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
39  * POSSIBILITY OF SUCH DAMAGE.\r
40  *\r
41  * \asf_license_stop\r
42  *\r
43  */\r
44 /*\r
45  * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>\r
46  */\r
47 \r
48 #ifndef KSZ8851SNL_REG_H_INCLUDED\r
49 #define KSZ8851SNL_REG_H_INCLUDED\r
50 \r
51 #define REG_ADDR_MASK              (0x3F0)      /* Register address mask */\r
52 #define OPCODE_MASK                (3 << 14)\r
53 #define CMD_READ                   (0 << 14)\r
54 #define CMD_WRITE                  (1 << 14)\r
55 #define FIFO_READ                  (0x80)\r
56 #define FIFO_WRITE                 (0xC0)\r
57 \r
58 /*\r
59  * MAC Registers\r
60  * (Offset 0x00 - 0x25)\r
61  */\r
62 #define REG_BUS_ERROR_STATUS       (0x06)       /* BESR */\r
63 #define   BUS_ERROR_IBEC              (0x8000)\r
64 #define   BUS_ERROR_IBECV_MASK        (0x7800)    /* Default IPSec clock at 166Mhz */\r
65 \r
66 #define REG_CHIP_CFG_STATUS        (0x08)       /* CCFG */\r
67 #define   LITTLE_ENDIAN_BUS_MODE      (0x0400)    /* Bus in little endian mode */\r
68 #define   EEPROM_PRESENCE             (0x0200)    /* External EEPROM is used */\r
69 #define   SPI_BUS_MODE                (0x0100)    /* In SPI bus mode */\r
70 #define   DATA_BUS_8BIT               (0x0080)    /* In 8-bit bus mode operation */\r
71 #define   DATA_BUS_16BIT              (0x0040)    /* In 16-bit bus mode operation */\r
72 #define   DATA_BUS_32BIT              (0x0020)    /* In 32-bit bus mode operation */\r
73 #define   MULTIPLEX_MODE              (0x0010)    /* Data and address bus are shared */\r
74 #define   CHIP_PACKAGE_128PIN         (0x0008)    /* 128-pin package */\r
75 #define   CHIP_PACKAGE_80PIN          (0x0004)    /* 80-pin package */\r
76 #define   CHIP_PACKAGE_48PIN          (0x0002)    /* 48-pin package */\r
77 #define   CHIP_PACKAGE_32PIN          (0x0001)    /* 32-pin package for SPI host interface only */\r
78 \r
79 #define REG_MAC_ADDR_0             (0x10)       /* MARL */\r
80 #define REG_MAC_ADDR_1             (0x11)       /* MARL */\r
81 #define REG_MAC_ADDR_2             (0x12)       /* MARM */\r
82 #define REG_MAC_ADDR_3             (0x13)       /* MARM */\r
83 #define REG_MAC_ADDR_4             (0x14)       /* MARH */\r
84 #define REG_MAC_ADDR_5             (0x15)       /* MARH */\r
85 \r
86 #define REG_BUS_CLOCK_CTRL         (0x20)       /* OBCR */\r
87 #define   BUS_CLOCK_166               (0x0004)    /* 166 MHz on-chip bus clock (defaul is 125MHz) */\r
88 #define   BUS_CLOCK_DIVIDEDBY_5       (0x0003)    /* Bus clock devided by 5 */\r
89 #define   BUS_CLOCK_DIVIDEDBY_3       (0x0002)    /* Bus clock devided by 3 */\r
90 #define   BUS_CLOCK_DIVIDEDBY_2       (0x0001)    /* Bus clock devided by 2 */\r
91 #define   BUS_CLOCK_DIVIDEDBY_1       (0x0000)    /* Bus clock devided by 1 */\r
92 #define   BUS_CLOCK_DIVIDED_MASK      (0x0003)    /* Bus clock devider mask */\r
93 \r
94 #define   BUS_SPEED_166_MHZ           (0x0004)    /* Set bus speed to 166 MHz */\r
95 #define   BUS_SPEED_125_MHZ           (0x0000)    /* Set bus speed to 125 MHz */\r
96 #define   BUS_SPEED_83_MHZ            (0x0005)    /* Set bus speed to 83 MHz (166/2)*/\r
97 #define   BUS_SPEED_62_5_MHZ          (0x0001)    /* Set bus speed to 62.5 MHz (125/2) */\r
98 #define   BUS_SPEED_53_3_MHZ          (0x0006)    /* Set bus speed to 53.3 MHz (166/3) */\r
99 #define   BUS_SPEED_41_7_MHZ          (0x0002)    /* Set bus speed to 41.67 MHz (125/3) */\r
100 #define   BUS_SPEED_33_2_MHZ          (0x0007)    /* Set bus speed to 33.2 MHz (166/5) */\r
101 #define   BUS_SPEED_25_MHZ            (0x0003)    /* Set bus speed to 25 MHz (125/5) */\r
102 \r
103 #define REG_EEPROM_CTRL            (0x22)       /* EEPCR */\r
104 #define   EEPROM_ACCESS_ENABLE        (0x0010)    /* Enable software to access EEPROM through bit 3 to bit 0 */\r
105 #define   EEPROM_DATA_IN              (0x0008)    /* Data receive from EEPROM (EEDI pin) */\r
106 #define   EEPROM_DATA_OUT             (0x0004)    /* Data transmit to EEPROM (EEDO pin) */\r
107 #define   EEPROM_SERIAL_CLOCK         (0x0002)    /* Serial clock (EESK pin) */\r
108 #define   EEPROM_CHIP_SELECT          (0x0001)    /* EEPROM chip select (EECS pin) */\r
109 \r
110 #define REG_MEM_BIST_INFO          (0x24)       /* MBIR */\r
111 #define   TX_MEM_TEST_FINISHED        (0x1000)    /* TX memeory BIST test finish */\r
112 #define   TX_MEM_TEST_FAILED          (0x0800)    /* TX memory BIST test fail */\r
113 #define   TX_MEM_TEST_FAILED_COUNT    (0x0700)    /* TX memory BIST test fail count */\r
114 #define   RX_MEM_TEST_FINISHED        (0x0010)    /* RX memory BIST test finish */\r
115 #define   RX_MEM_TEST_FAILED          (0x0008)    /* RX memory BIST test fail */\r
116 #define   RX_MEM_TEST_FAILED_COUNT    (0x0003)    /* RX memory BIST test fail count */\r
117 \r
118 #define REG_RESET_CTRL             (0x26)       /* GRR */\r
119 #define   QMU_SOFTWARE_RESET          (0x0002)    /* QMU soft reset (clear TxQ, RxQ) */\r
120 #define   GLOBAL_SOFTWARE_RESET       (0x0001)    /* Global soft reset (PHY, MAC, QMU) */\r
121 \r
122 /*\r
123  * Wake On Lan Control Registers\r
124  * (Offset 0x2A - 0x6B)\r
125  */\r
126 #define REG_WOL_CTRL               (0x2A)       /* WFCR */\r
127 #define   WOL_MAGIC_ENABLE            (0x0080)    /* Enable the magic packet pattern detection */\r
128 #define   WOL_FRAME3_ENABLE           (0x0008)    /* Enable the wake up frame 3 pattern detection */\r
129 #define   WOL_FRAME2_ENABLE           (0x0004)    /* Enable the wake up frame 2 pattern detection */\r
130 #define   WOL_FRAME1_ENABLE           (0x0002)    /* Enable the wake up frame 1 pattern detection */\r
131 #define   WOL_FRAME0_ENABLE           (0x0001)    /* Enable the wake up frame 0 pattern detection */\r
132 \r
133 #define REG_WOL_FRAME0_CRC0        (0x30)       /* WF0CRC0 */\r
134 #define REG_WOL_FRAME0_CRC1        (0x32)       /* WF0CRC1 */\r
135 #define REG_WOL_FRAME0_BYTE_MASK0  (0x34)       /* WF0BM0 */\r
136 #define REG_WOL_FRAME0_BYTE_MASK1  (0x36)       /* WF0BM1 */\r
137 #define REG_WOL_FRAME0_BYTE_MASK2  (0x38)       /* WF0BM2 */\r
138 #define REG_WOL_FRAME0_BYTE_MASK3  (0x3A)       /* WF0BM3 */\r
139 \r
140 #define REG_WOL_FRAME1_CRC0        (0x40)       /* WF1CRC0 */\r
141 #define REG_WOL_FRAME1_CRC1        (0x42)       /* WF1CRC1 */\r
142 #define REG_WOL_FRAME1_BYTE_MASK0  (0x44)       /* WF1BM0 */\r
143 #define REG_WOL_FRAME1_BYTE_MASK1  (0x46)       /* WF1BM1 */\r
144 #define REG_WOL_FRAME1_BYTE_MASK2  (0x48)       /* WF1BM2 */\r
145 #define REG_WOL_FRAME1_BYTE_MASK3  (0x4A)       /* WF1BM3 */\r
146 \r
147 #define REG_WOL_FRAME2_CRC0        (0x50)       /* WF2CRC0 */\r
148 #define REG_WOL_FRAME2_CRC1        (0x52)       /* WF2CRC1 */\r
149 #define REG_WOL_FRAME2_BYTE_MASK0  (0x54)       /* WF2BM0 */\r
150 #define REG_WOL_FRAME2_BYTE_MASK1  (0x56)       /* WF2BM1 */\r
151 #define REG_WOL_FRAME2_BYTE_MASK2  (0x58)       /* WF2BM2 */\r
152 #define REG_WOL_FRAME2_BYTE_MASK3  (0x5A)       /* WF2BM3 */\r
153 \r
154 #define REG_WOL_FRAME3_CRC0        (0x60)       /* WF3CRC0 */\r
155 #define REG_WOL_FRAME3_CRC1        (0x62)       /* WF3CRC1 */\r
156 #define REG_WOL_FRAME3_BYTE_MASK0  (0x64)       /* WF3BM0 */\r
157 #define REG_WOL_FRAME3_BYTE_MASK1  (0x66)       /* WF3BM1 */\r
158 #define REG_WOL_FRAME3_BYTE_MASK2  (0x68)       /* WF3BM2 */\r
159 #define REG_WOL_FRAME3_BYTE_MASK3  (0x6A)       /* WF3BM3 */\r
160 \r
161 /*\r
162  * Transmit/Receive Control Registers\r
163  * (Offset 0x70 - 0x9F)\r
164  */\r
165 \r
166 /* Transmit Frame Header */\r
167 #define REG_QDR_DUMMY              (0x00)       /* Dummy address to access QMU RxQ, TxQ */\r
168 #define   TX_CTRL_INTERRUPT_ON        (0x8000)    /* Transmit Interrupt on Completion */\r
169 \r
170 #define REG_TX_CTRL                (0x70)       /* TXCR */\r
171 #define   TX_CTRL_ICMP_CHECKSUM       (0x0100)    /* Enable ICMP frame checksum generation */\r
172 #define   TX_CTRL_UDP_CHECKSUM        (0x0080)    /* Enable UDP frame checksum generation */\r
173 #define   TX_CTRL_TCP_CHECKSUM        (0x0040)    /* Enable TCP frame checksum generation */\r
174 #define   TX_CTRL_IP_CHECKSUM         (0x0020)    /* Enable IP frame checksum generation */\r
175 #define   TX_CTRL_FLUSH_QUEUE         (0x0010)    /* Clear transmit queue, reset tx frame pointer */\r
176 #define   TX_CTRL_FLOW_ENABLE         (0x0008)    /* Enable transmit flow control */\r
177 #define   TX_CTRL_PAD_ENABLE          (0x0004)    /* Eanble adding a padding to a packet shorter than 64 bytes */\r
178 #define   TX_CTRL_CRC_ENABLE          (0x0002)    /* Enable adding a CRC to the end of transmit frame */\r
179 #define   TX_CTRL_ENABLE              (0x0001)    /* Enable tranmsit */\r
180 \r
181 #define REG_TX_STATUS              (0x72)       /* TXSR */\r
182 #define   TX_STAT_LATE_COL            (0x2000)    /* Tranmsit late collision occurs */\r
183 #define   TX_STAT_MAX_COL             (0x1000)    /* Tranmsit maximum collision is reached */\r
184 #define   TX_FRAME_ID_MASK            (0x003F)    /* Transmit frame ID mask */\r
185 #define   TX_STAT_ERRORS             ( TX_STAT_MAX_COL | TX_STAT_LATE_COL )\r
186 \r
187 #define REG_RX_CTRL1               (0x74)       /* RXCR1 */\r
188 #define   RX_CTRL_FLUSH_QUEUE         (0x8000)    /* Clear receive queue, reset rx frame pointer */\r
189 #define   RX_CTRL_UDP_CHECKSUM        (0x4000)    /* Enable UDP frame checksum verification */\r
190 #define   RX_CTRL_TCP_CHECKSUM        (0x2000)    /* Enable TCP frame checksum verification */\r
191 #define   RX_CTRL_IP_CHECKSUM         (0x1000)    /* Enable IP frame checksum verification */\r
192 #define   RX_CTRL_MAC_FILTER          (0x0800)    /* Receive with address that pass MAC address filtering */\r
193 #define   RX_CTRL_FLOW_ENABLE         (0x0400)    /* Enable receive flow control */\r
194 #define   RX_CTRL_BAD_PACKET          (0x0200)    /* Eanble receive CRC error frames */\r
195 #define   RX_CTRL_MULTICAST           (0x0100)    /* Receive multicast frames that pass the CRC hash filtering */\r
196 #define   RX_CTRL_BROADCAST           (0x0080)    /* Receive all the broadcast frames */\r
197 #define   RX_CTRL_ALL_MULTICAST       (0x0040)    /* Receive all the multicast frames (including broadcast frames) */\r
198 #define   RX_CTRL_UNICAST             (0x0020)    /* Receive unicast frames that match the device MAC address */\r
199 #define   RX_CTRL_PROMISCUOUS         (0x0010)    /* Receive all incoming frames, regardless of frame's DA */\r
200 #define   RX_CTRL_STRIP_CRC           (0x0008)    /* Enable strip CRC on the received frames */\r
201 #define   RX_CTRL_INVERSE_FILTER      (0x0002)    /* Receive with address check in inverse filtering mode */\r
202 #define   RX_CTRL_ENABLE              (0x0001)    /* Enable receive */\r
203 \r
204 /* Address filtering scheme mask */\r
205 #define RX_CTRL_FILTER_MASK    ( RX_CTRL_INVERSE_FILTER | RX_CTRL_PROMISCUOUS | RX_CTRL_MULTICAST | RX_CTRL_MAC_FILTER )\r
206 \r
207 #define REG_RX_CTRL2               (0x76)       /* RXCR2 */\r
208 #define   RX_CTRL_IPV6_UDP_NOCHECKSUM (0x0010)    /* No checksum generation and verification if IPv6 UDP is fragment */\r
209 #define   RX_CTRL_IPV6_UDP_CHECKSUM   (0x0008)    /* Receive pass IPv6 UDP frame with UDP checksum is zero */\r
210 #define   RX_CTRL_UDP_LITE_CHECKSUM   (0x0004)    /* Enable UDP Lite frame checksum generation and verification */\r
211 #define   RX_CTRL_ICMP_CHECKSUM       (0x0002)    /* Enable ICMP frame checksum verification */\r
212 #define   RX_CTRL_BLOCK_MAC           (0x0001)    /* Receive drop frame if the SA is same as device MAC address */\r
213 #define   RX_CTRL_BURST_LEN_MASK      (0x00e0)    /* SRDBL SPI Receive Data Burst Length */\r
214 #define   RX_CTRL_BURST_LEN_4         (0x0000)\r
215 #define   RX_CTRL_BURST_LEN_8         (0x0020)\r
216 #define   RX_CTRL_BURST_LEN_16        (0x0040)\r
217 #define   RX_CTRL_BURST_LEN_32        (0x0060)\r
218 #define   RX_CTRL_BURST_LEN_FRAME     (0x0080)\r
219 \r
220 #define REG_TX_MEM_INFO            (0x78)       /* TXMIR */\r
221 #define   TX_MEM_AVAILABLE_MASK       (0x1FFF)    /* The amount of memory available in TXQ */\r
222 \r
223 #define REG_RX_FHR_STATUS          (0x7C)       /* RXFHSR */\r
224 #define   RX_VALID                    (0x8000)    /* Frame in the receive packet memory is valid */\r
225 #define   RX_ICMP_ERROR               (0x2000)    /* ICMP checksum field doesn't match */\r
226 #define   RX_IP_ERROR                 (0x1000)    /* IP checksum field doesn't match */\r
227 #define   RX_TCP_ERROR                (0x0800)    /* TCP checksum field doesn't match */\r
228 #define   RX_UDP_ERROR                (0x0400)    /* UDP checksum field doesn't match */\r
229 #define   RX_BROADCAST                (0x0080)    /* Received frame is a broadcast frame */\r
230 #define   RX_MULTICAST                (0x0040)    /* Received frame is a multicast frame */\r
231 #define   RX_UNICAST                  (0x0020)    /* Received frame is a unicast frame */\r
232 #define   RX_PHY_ERROR                (0x0010)    /* Received frame has runt error */\r
233 #define   RX_FRAME_ETHER              (0x0008)    /* Received frame is an Ethernet-type frame */\r
234 #define   RX_TOO_LONG                 (0x0004)    /* Received frame length exceeds max size 0f 2048 bytes */\r
235 #define   RX_RUNT_ERROR               (0x0002)    /* Received frame was demaged by a collision */\r
236 #define   RX_BAD_CRC                  (0x0001)    /* Received frame has a CRC error */\r
237 #define   RX_ERRORS                   ( RX_BAD_CRC | RX_TOO_LONG | RX_RUNT_ERROR | RX_PHY_ERROR | \\r
238                                         RX_ICMP_ERROR | RX_IP_ERROR | RX_TCP_ERROR | RX_UDP_ERROR )\r
239 \r
240 #define REG_RX_FHR_BYTE_CNT        (0x7E)       /* RXFHBCR */\r
241 #define   RX_BYTE_CNT_MASK            (0x0FFF)    /* Received frame byte size mask */\r
242 \r
243 #define REG_TXQ_CMD                (0x80)       /* TXQCR */\r
244 #define   TXQ_AUTO_ENQUEUE            (0x0004)    /* Enable enqueue tx frames from tx buffer automatically */\r
245 #define   TXQ_MEM_AVAILABLE_INT       (0x0002)    /* Enable generate interrupt when tx memory is available */\r
246 #define   TXQ_ENQUEUE                 (0x0001)    /* Enable enqueue tx frames one frame at a time */\r
247 \r
248 #define REG_RXQ_CMD                (0x82)       /* RXQCR */\r
249 #define   RXQ_STAT_TIME_INT           (0x1000)    /* RX interrupt is occured by timer duration */\r
250 #define   RXQ_STAT_BYTE_CNT_INT       (0x0800)    /* RX interrupt is occured by byte count threshold */\r
251 #define   RXQ_STAT_FRAME_CNT_INT      (0x0400)    /* RX interrupt is occured by frame count threshold */\r
252 #define   RXQ_TWOBYTE_OFFSET          (0x0200)    /* Enable adding 2-byte before frame header for IP aligned with DWORD */\r
253 #define   RXQ_TIME_INT                (0x0080)    /* Enable RX interrupt by timer duration */\r
254 #define   RXQ_BYTE_CNT_INT            (0x0040)    /* Enable RX interrupt by byte count threshold */\r
255 #define   RXQ_FRAME_CNT_INT           (0x0020)    /* Enable RX interrupt by frame count threshold */\r
256 #define   RXQ_AUTO_DEQUEUE            (0x0010)    /* Enable release rx frames from rx buffer automatically */\r
257 #define   RXQ_START                   (0x0008)    /* Start QMU transfer operation */\r
258 #define   RXQ_CMD_FREE_PACKET         (0x0001)    /* Manual dequeue (release the current frame from RxQ) */\r
259 \r
260 #define   RXQ_CMD_CNTL                (RXQ_FRAME_CNT_INT|RXQ_AUTO_DEQUEUE)\r
261 \r
262 #define REG_TX_ADDR_PTR            (0x84)       /* TXFDPR */\r
263 #define REG_RX_ADDR_PTR            (0x86)       /* RXFDPR */\r
264 #define   ADDR_PTR_AUTO_INC           (0x4000)    /* Enable Frame data pointer increments automatically */\r
265 #define   ADDR_PTR_MASK               (0x03ff)    /* Address pointer mask */\r
266 \r
267 #define REG_RX_TIME_THRES          (0x8C)       /* RXDTTR */\r
268 #define   RX_TIME_THRESHOLD_MASK      (0xFFFF)    /* Set receive timer duration threshold */\r
269 \r
270 #define REG_RX_BYTE_CNT_THRES      (0x8E)       /* RXDBCTR */\r
271 #define   RX_BYTE_THRESHOLD_MASK      (0xFFFF)    /* Set receive byte count threshold */\r
272 \r
273 #define REG_INT_MASK               (0x90)       /* IER */\r
274 #define   INT_PHY                     (0x8000)    /* Enable link change interrupt */\r
275 #define   INT_TX                      (0x4000)    /* Enable transmit done interrupt */\r
276 #define   INT_RX                      (0x2000)    /* Enable receive interrupt */\r
277 #define   INT_RX_OVERRUN              (0x0800)    /* Enable receive overrun interrupt */\r
278 #define   INT_TX_STOPPED              (0x0200)    /* Enable transmit process stopped interrupt */\r
279 #define   INT_RX_STOPPED              (0x0100)    /* Enable receive process stopped interrupt */\r
280 #define   INT_TX_SPACE                (0x0040)    /* Enable transmit space available interrupt */\r
281 #define   INT_RX_WOL_FRAME            (0x0020)    /* Enable WOL on receive wake-up frame detect interrupt */\r
282 #define   INT_RX_WOL_MAGIC            (0x0010)    /* Enable WOL on receive magic packet detect interrupt */\r
283 #define   INT_RX_WOL_LINKUP           (0x0008)    /* Enable WOL on link up detect interrupt */\r
284 #define   INT_RX_WOL_ENERGY           (0x0004)    /* Enable WOL on energy detect interrupt */\r
285 #define   INT_RX_SPI_ERROR            (0x0002)    /* Enable receive SPI bus error interrupt */\r
286 #define   INT_RX_WOL_DELAY_ENERGY     (0x0001)    /* Enable WOL on delay energy detect interrupt */\r
287 #define   INT_MASK                    ( INT_RX | INT_TX | INT_PHY )\r
288 \r
289 #define REG_INT_STATUS             (0x92)       /* ISR */\r
290 \r
291 #define REG_RX_FRAME_CNT_THRES     (0x9C)       /* RXFCTFC */\r
292 #define   RX_FRAME_CNT_MASK           (0xFF00)    /* Received frame count mask */\r
293 #define   RX_FRAME_THRESHOLD_MASK     (0x00FF)    /* Set receive frame count threshold mask */\r
294 \r
295 #define REG_TX_TOTAL_FRAME_SIZE    (0x9E)       /* TXNTFSR */\r
296 #define   TX_TOTAL_FRAME_SIZE_MASK    (0xFFFF)    /* Set next total tx frame size mask */\r
297 \r
298 /*\r
299  * MAC Address Hash Table Control Registers\r
300  * (Offset 0xA0 - 0xA7)\r
301  */\r
302 #define REG_MAC_HASH_0             (0xA0)       /* MAHTR0 */\r
303 #define REG_MAC_HASH_1             (0xA1)\r
304 \r
305 #define REG_MAC_HASH_2             (0xA2)       /* MAHTR1 */\r
306 #define REG_MAC_HASH_3             (0xA3)\r
307 \r
308 #define REG_MAC_HASH_4             (0xA4)       /* MAHTR2 */\r
309 #define REG_MAC_HASH_5             (0xA5)\r
310 \r
311 #define REG_MAC_HASH_6             (0xA6)       /* MAHTR3 */\r
312 #define REG_MAC_HASH_7             (0xA7)\r
313 \r
314 /*\r
315  * QMU Receive Queue Watermark Control Registers\r
316  * (Offset 0xB0 - 0xB5)\r
317  */\r
318 #define REG_RX_LOW_WATERMARK       (0xB0)       /* FCLWR */\r
319 #define   RX_LOW_WATERMARK_MASK       (0x0FFF)    /* Set QMU RxQ low watermark mask */\r
320 \r
321 #define REG_RX_HIGH_WATERMARK      (0xB2)       /* FCHWR */\r
322 #define   RX_HIGH_WATERMARK_MASK      (0x0FFF)    /* Set QMU RxQ high watermark mask */\r
323 \r
324 #define REG_RX_OVERRUN_WATERMARK   (0xB4)       /* FCOWR */\r
325 #define   RX_OVERRUN_WATERMARK_MASK   (0x0FFF)    /* Set QMU RxQ overrun watermark mask */\r
326 \r
327 /*\r
328  * Global Control Registers\r
329  * (Offset 0xC0 - 0xD3)\r
330  */\r
331 #define REG_CHIP_ID                (0xC0)       /* CIDER */\r
332 #define   CHIP_ID_MASK                (0xFFF0)     /* Family ID and chip ID mask */\r
333 #define   REVISION_MASK               (0x000E)     /* Chip revision mask */\r
334 #define   CHIP_ID_SHIFT               (4)\r
335 #define   REVISION_SHIFT              (1)\r
336 #define   CHIP_ID_8851_16             (0x8870)     /* KS8851-16/32MQL chip ID */\r
337 \r
338 #define REG_LED_CTRL               (0xC6)       /* CGCR */\r
339 #define   LED_CTRL_SEL1               (0x8000)     /* Select LED3/LED2/LED1/LED0 indication */\r
340 #define   LED_CTRL_SEL0               (0x0200)     /* Select LED3/LED2/LED1/LED0 indication */\r
341 \r
342 #define REG_IND_IACR               (0xC8)       /* IACR */\r
343 #define   TABLE_READ                  (0x1000)     /* Indirect read */\r
344 #define   TABLE_MIB                   (0x0C00)     /* Select MIB counter table */\r
345 #define   TABLE_ENTRY_MASK            (0x001F)     /* Set table entry to access */\r
346 \r
347 #define REG_IND_DATA_LOW           (0xD0)       /* IADLR */\r
348 #define REG_IND_DATA_HIGH          (0xD2)       /* IADHR */\r
349 \r
350 /*\r
351  * Power Management Control Registers\r
352  * (Offset 0xD4 - 0xD7)\r
353  */\r
354 #define REG_POWER_CNTL             (0xD4)       /* PMECR */\r
355 #define   PME_DELAY_ENABLE            (0x4000)    /* Enable the PME output pin assertion delay */\r
356 #define   PME_ACTIVE_HIGHT            (0x1000)    /* PME output pin is active high */\r
357 #define   PME_FROM_WKFRAME            (0x0800)    /* PME asserted when wake-up frame is detected */\r
358 #define   PME_FROM_MAGIC              (0x0400)    /* PME asserted when magic packet is detected */\r
359 #define   PME_FROM_LINKUP             (0x0200)    /* PME asserted when link up is detected */\r
360 #define   PME_FROM_ENERGY             (0x0100)    /* PME asserted when energy is detected */\r
361 #define   PME_EVENT_MASK              (0x0F00)    /* PME asserted event mask */\r
362 #define   WAKEUP_AUTO_ENABLE          (0x0080)    /* Enable auto wake-up in energy mode */\r
363 #define   WAKEUP_NORMAL_AUTO_ENABLE   (0x0040)    /* Enable auto goto normal mode from energy detecion mode */\r
364 #define   WAKEUP_FROM_WKFRAME         (0x0020)    /* Wake-up from wake-up frame event detected */\r
365 #define   WAKEUP_FROM_MAGIC           (0x0010)    /* Wake-up from magic packet event detected */\r
366 #define   WAKEUP_FROM_LINKUP          (0x0008)    /* Wake-up from link up event detected */\r
367 #define   WAKEUP_FROM_ENERGY          (0x0004)    /* Wake-up from energy event detected */\r
368 #define   WAKEUP_EVENT_MASK           (0x003C)    /* Wake-up event mask */\r
369 #define   POWER_STATE_D1              (0x0003)    /* Power saving mode */\r
370 #define   POWER_STATE_D3              (0x0002)    /* Power down mode */\r
371 #define   POWER_STATE_D2              (0x0001)    /* Power detection mode */\r
372 #define   POWER_STATE_D0              (0x0000)    /* Normal operation mode (default) */\r
373 #define   POWER_STATE_MASK            (0x0003)    /* Power management mode mask */\r
374 \r
375 #define REG_WAKEUP_TIME            (0xD6)       /* GSWUTR */\r
376 #define   WAKEUP_TIME                 (0xFF00)    /* Min time (sec) wake-uo after detected energy */\r
377 #define   GOSLEEP_TIME                (0x00FF)    /* Min time (sec) before goto sleep when in energy mode */\r
378 \r
379 /*\r
380  * PHY Control Registers\r
381  * (Offset 0xD8 - 0xF9)\r
382  */\r
383 #define REG_PHY_RESET              (0xD8)       /* PHYRR */\r
384 #define   PHY_RESET                   (0x0001)    /* Reset PHY */\r
385 \r
386 #define REG_PHY_CNTL               (0xE4)       /* P1MBCR */\r
387 #define   PHY_SPEED_100MBIT           (0x2000)     /* Force PHY 100Mbps */\r
388 #define   PHY_AUTO_NEG_ENABLE         (0x1000)     /* Enable PHY auto-negotiation */\r
389 #define   PHY_POWER_DOWN              (0x0800)     /* Set PHY power-down */\r
390 #define   PHY_AUTO_NEG_RESTART        (0x0200)     /* Restart PHY auto-negotiation */\r
391 #define   PHY_FULL_DUPLEX             (0x0100)     /* Force PHY in full duplex mode */\r
392 #define   PHY_HP_MDIX                 (0x0020)     /* Set PHY in HP auto MDI-X mode */\r
393 #define   PHY_FORCE_MDIX              (0x0010)     /* Force MDI-X */\r
394 #define   PHY_AUTO_MDIX_DISABLE       (0x0008)     /* Disable auto MDI-X */\r
395 #define   PHY_TRANSMIT_DISABLE        (0x0002)     /* Disable PHY transmit */\r
396 #define   PHY_LED_DISABLE             (0x0001)     /* Disable PHY LED */\r
397 \r
398 #define REG_PHY_STATUS             (0xE6)       /* P1MBSR */\r
399 #define   PHY_100BT4_CAPABLE          (0x8000)     /* 100 BASE-T4 capable */\r
400 #define   PHY_100BTX_FD_CAPABLE       (0x4000)     /* 100BASE-TX full duplex capable */\r
401 #define   PHY_100BTX_CAPABLE          (0x2000)     /* 100BASE-TX half duplex capable */\r
402 #define   PHY_10BT_FD_CAPABLE         (0x1000)     /* 10BASE-TX full duplex capable */\r
403 #define   PHY_10BT_CAPABLE            (0x0800)     /* 10BASE-TX half duplex capable */\r
404 #define   PHY_AUTO_NEG_ACKNOWLEDGE    (0x0020)     /* Auto-negotiation complete */\r
405 #define   PHY_AUTO_NEG_CAPABLE        (0x0008)     /* Auto-negotiation capable */\r
406 #define   PHY_LINK_UP                 (0x0004)     /* PHY link is up */\r
407 #define   PHY_EXTENDED_CAPABILITY     (0x0001)     /* PHY extended register capable */\r
408 \r
409 #define REG_PHY_ID_LOW             (0xE8)       /* PHY1ILR */\r
410 #define REG_PHY_ID_HIGH            (0xEA)       /* PHY1IHR */\r
411 \r
412 #define REG_PHY_AUTO_NEGOTIATION   (0xEC)       /* P1ANAR */\r
413 #define   PHY_AUTO_NEG_SYM_PAUSE      (0x0400)     /* Advertise pause capability */\r
414 #define   PHY_AUTO_NEG_100BTX_FD      (0x0100)     /* Advertise 100 full-duplex capability */\r
415 #define   PHY_AUTO_NEG_100BTX         (0x0080)     /* Advertise 100 half-duplex capability */\r
416 #define   PHY_AUTO_NEG_10BT_FD        (0x0040)     /* Advertise 10 full-duplex capability */\r
417 #define   PHY_AUTO_NEG_10BT           (0x0020)     /* Advertise 10 half-duplex capability */\r
418 #define   PHY_AUTO_NEG_SELECTOR       (0x001F)     /* Selector field mask */\r
419 #define   PHY_AUTO_NEG_802_3          (0x0001)     /* 802.3 */\r
420 \r
421 #define REG_PHY_REMOTE_CAPABILITY  (0xEE)       /* P1ANLPR */\r
422 #define   PHY_REMOTE_SYM_PAUSE        (0x0400)     /* Link partner pause capability */\r
423 #define   PHY_REMOTE_100BTX_FD        (0x0100)     /* Link partner 100 full-duplex capability */\r
424 #define   PHY_REMOTE_100BTX           (0x0080)     /* Link partner 100 half-duplex capability */\r
425 #define   PHY_REMOTE_10BT_FD          (0x0040)     /* Link partner 10 full-duplex capability */\r
426 #define   PHY_REMOTE_10BT             (0x0020)     /* Link partner 10 half-duplex capability */\r
427 \r
428 #define REG_PORT_LINK_MD           (0xF4)       /* P1SCLMD */\r
429 #define   PORT_CABLE_10M_SHORT        (0x8000)     /* Cable length is less than 10m short */\r
430 #define   PORT_CABLE_STAT_FAILED      (0x6000)     /* Cable diagnostic test fail */\r
431 #define   PORT_CABLE_STAT_SHORT       (0x4000)     /* Short condition detected in the cable */\r
432 #define   PORT_CABLE_STAT_OPEN        (0x2000)     /* Open condition detected in the cable */\r
433 #define   PORT_CABLE_STAT_NORMAL      (0x0000)     /* Normal condition */\r
434 #define   PORT_CABLE_DIAG_RESULT      (0x6000)     /* Cable diagnostic test result mask */\r
435 #define   PORT_START_CABLE_DIAG       (0x1000)     /* Enable cable diagnostic test */\r
436 #define   PORT_FORCE_LINK             (0x0800)     /* Enable force link pass */\r
437 #define   PORT_POWER_SAVING           (0x0400)     /* Disable power saving */\r
438 #define   PORT_REMOTE_LOOPBACK        (0x0200)     /* Enable remote loopback at PHY */\r
439 #define   PORT_CABLE_FAULT_COUNTER    (0x01FF)     /* Cable length distance to the fault */\r
440 \r
441 #define REG_PORT_CTRL              (0xF6)       /* P1CR */\r
442 #define   PORT_LED_OFF                (0x8000)     /* Turn off all the port LEDs (LED3/LED2/LED1/LED0) */\r
443 #define   PORT_TX_DISABLE             (0x4000)     /* Disable port transmit */\r
444 #define   PORT_AUTO_NEG_RESTART       (0x2000)     /* Restart auto-negotiation */\r
445 #define   PORT_POWER_DOWN             (0x0800)     /* Set port power-down */\r
446 #define   PORT_AUTO_MDIX_DISABLE      (0x0400)     /* Disable auto MDI-X */\r
447 #define   PORT_FORCE_MDIX             (0x0200)     /* Force MDI-X */\r
448 #define   PORT_AUTO_NEG_ENABLE        (0x0080)     /* Enable auto-negotiation */\r
449 #define   PORT_FORCE_100_MBIT         (0x0040)     /* Force PHY 100Mbps */\r
450 #define   PORT_FORCE_FULL_DUPLEX      (0x0020)     /* Force PHY in full duplex mode */\r
451 #define   PORT_AUTO_NEG_SYM_PAUSE     (0x0010)     /* Advertise pause capability */\r
452 #define   PORT_AUTO_NEG_100BTX_FD     (0x0008)     /* Advertise 100 full-duplex capability */\r
453 #define   PORT_AUTO_NEG_100BTX        (0x0004)     /* Advertise 100 half-duplex capability */\r
454 #define   PORT_AUTO_NEG_10BT_FD       (0x0002)     /* Advertise 10 full-duplex capability */\r
455 #define   PORT_AUTO_NEG_10BT          (0x0001)     /* Advertise 10 half-duplex capability */\r
456 \r
457 #define REG_PORT_STATUS            (0xF8)       /* P1SR */\r
458 #define   PORT_HP_MDIX                (0x8000)     /* Set PHY in HP auto MDI-X mode */\r
459 #define   PORT_REVERSED_POLARITY      (0x2000)     /* Polarity is reversed */\r
460 #define   PORT_RX_FLOW_CTRL           (0x1000)     /* Reeive flow control feature is active */\r
461 #define   PORT_TX_FLOW_CTRL           (0x0800)     /* Transmit flow control feature is active */\r
462 #define   PORT_STAT_SPEED_100MBIT     (0x0400)     /* Link is 100Mbps */\r
463 #define   PORT_STAT_FULL_DUPLEX       (0x0200)     /* Link is full duplex mode */\r
464 #define   PORT_MDIX_STATUS            (0x0080)     /* Is MDI */\r
465 #define   PORT_AUTO_NEG_COMPLETE      (0x0040)     /* Auto-negotiation complete */\r
466 #define   PORT_STATUS_LINK_GOOD       (0x0020)     /* PHY link is up */\r
467 #define   PORT_REMOTE_SYM_PAUSE       (0x0010)     /* Link partner pause capability */\r
468 #define   PORT_REMOTE_100BTX_FD       (0x0008)     /* Link partner 100 full-duplex capability */\r
469 #define   PORT_REMOTE_100BTX          (0x0004)     /* Link partner 100 half-duplex capability */\r
470 #define   PORT_REMOTE_10BT_FD         (0x0002)     /* Link partner 10 full-duplex capability */\r
471 #define   PORT_REMOTE_10BT            (0x0001)     /* Link partner 10 half-duplex capability */\r
472 \r
473 #endif /* KSZ8851SNL_REG_H_INCLUDED */\r