]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/dev/altera/atse/if_atsereg.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / dev / altera / atse / if_atsereg.h
1 /*-
2  * Copyright (c) 2012 Bjoern A. Zeeb
3  * All rights reserved.
4  *
5  * This software was developed by SRI International and the University of
6  * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-11-C-0249)
7  * ("MRC2"), as part of the DARPA MRC research programme.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  *
30  * $FreeBSD$
31  */
32
33 #ifndef _DEV_IF_ATSEREG_H
34 #define _DEV_IF_ATSEREG_H
35
36 #define ATSE_VENDOR                     0x6af7
37 #define ATSE_DEVICE                     0x00bd
38
39 /* See hints file/fdt for ctrl port and Avalon FIFO addresses. */
40
41 /* Section 3. Parameter Settings. */
42 /*
43  * This is a lot of options that affect the way things are synthesized.
44  * We cannot really make them all hints and most of them might be stale.
45  */
46
47 /* 3-1 Core Configuration */
48 #if 0
49 static const char *atse_core_core_variation[] = {
50         [0] = "10/100/1000 Mbps Ethernet MAC only",
51         [1] = "10/100/1000 Mbps Ethernet MAC with 1000BASE-X/SGMII PCS",
52         [2] = "1000BASE-X/SGMII PCS only",
53         [3] = "1000 Mbps Small MAC",
54         [4] = "10/100 Mbps Small MAC",
55         NULL
56 };
57 static const char *atse_core_interface[] = {
58         [0] = "MII",                            /* Core variation 4. */
59         [1] = "GMII",                           /* Core variation 3. */
60         [2] = "RGMII",                          /* Core variation 0,1,3. */
61         [3] = "MII/GMII",                       /* Core variation 0,1. */
62         NULL
63 };
64 #endif
65 #define CORE_CORE_VARIATION             1       /* atse_core_core_variation[] */
66 #define CORE_INTERFACE                  3       /* atse_core_interface[] */
67 #define CORE_USE_INTERNAL_FIFO          1
68 #define CORE_NUMBER_OF_PORTS            1       /* Internal FIFO count. */
69 #define CORE_USE_TRANSCEIVER_BLOCK      1       /* SGMII PCS transceiver:
70                                                  * LVDS I/O. */
71
72 /* 3-2 MAC Options. */
73 /* Ethernet MAC Options. */
74 #define MAC_ENABLE_10_100_HDX_SUPPORT   0
75 #define MAC_ENABLE_RG_G_MII_LOOPBACK    0
76 #define MAC_ENABLE_SUPL_MAC_UCAST_ADDR  0       /* Supplementary MAC unicast. */
77 #define MAC_INCLUDE_STATISTICS_COUNTERS 0
78 #define MAC_STATISTICS_COUNTERS_64BIT   0
79 #define MAC_INCLUDE_MC_HASHTABLE        0       /* Multicast. */
80 #define MAC_ALIGN_PKTHDR_32BIT          1
81 #define MAC_ENABLE_FDX_FLOW_CTRL        0
82 #define MAC_ENABLE_VLAN_DETECTION       0       /* VLAN and stacked VLANs. */
83 #define MAC_ENABLE_MAGIC_PKT_DETECTION  0
84 /* MDIO Module. */
85 #define MAC_MDIO_INCLUDE_MDIO_MODULE    1
86 #define MAC_MDIO_HOST_CLOCK_DIVISOR     40      /* Not just On/Off. */
87
88 /* 3-4 FIFO Options. */
89 /* Width and Memory Type. */
90 #if 0
91 static char *fifo_memory_block[] = {
92         [0] = "M4K",
93         [1] = "M9K",
94         [2] = "M144K",
95         [3] = "MRAM",
96         [4] = "AUTO",
97         NULL
98 };
99 #endif
100 #define FIFO_MEMORY_BLOCK               4
101 #define FIFO_WITDH                      32      /* Other: 8 bits. */
102 /* Depth. */
103 #define FIFO_DEPTH_TX                   2048    /* 64 .. 64k, 2048x32bits. */
104 #define FIFO_DEPTH_RX                   2048    /* 64 .. 64k, 2048x32bits. */
105
106 #define ATSE_TX_LIST_CNT                5       /* Certainly not bufferbloat. */
107
108 /* 3-4 PCS/Transceiver Options */
109 /* PCS Options. */
110 #define PCS_TXRX_PHY_ID                 0x00000000      /* 32 bits */
111 #define PCS_TXRX_ENABLE_SGMII_BRIDGE    0
112 /* Transceiver Options. */
113 #define PCS_TXRX_EXP_POWER_DOWN_SIGNAL  0       /* Export power down signal. */
114 #define PCS_TXRX_ENABLE_DYNAMIC_RECONF  0       /* Dynamic trans. reconfig. */
115 #define PCS_TXRX_STARTING_CHANNEL       0       /* 0..284. */
116
117
118 /* -------------------------------------------------------------------------- */
119
120 /* XXX more values based on the bitmaps provided. Cleanup. */
121 /* See regs above. */
122 #define AVALON_FIFO_TX_BLOCK_DIAGRAM            0
123 #define AVALON_FIFO_TX_BLOCK_DIAGRAM_SHOW_SIGANLS       0
124 #define AVALON_FIFO_TX_PARAM_SINGLE_RESET_MODE  0
125 #define AVALON_FIFO_TX_BASIC_OPTS_DEPTH         16
126 #define AVALON_FIFO_TX_BASIC_OPTS_ALLOW_BACKPRESSURE    1
127 #define AVALON_FIFO_TX_BASIC_OPTS_CLOCK_SETTING "Single Clock Mode"
128 #define AVALON_FIFO_TX_BASIC_OPTS_FIFO_IMPL     "Construct FIFO from embedded memory blocks"
129 #define AVALON_FIFO_TX_STATUS_PORT_CREATE_STATUS_INT_FOR_INPUT  1
130 #define AVALON_FIFO_TX_STATUS_PORT_CREATE_STATUS_INT_FOR_OUTPUT 0
131 #define AVALON_FIFO_TX_STATUS_PORT_ENABLE_IRQ_FOR_STATUS_PORT   1
132 #define AVALON_FIFO_TX_INPUT_TYPE                       "AVALONMM_WRITE"
133 #define AVALON_FIFO_TX_OUTPUT_TYPE                      "AVALONST_SOURCE"
134 #define AVALON_FIFO_TX_AVALON_MM_PORT_SETTINGS_DATA_WIDTH       ""
135 #define AVALON_FIFO_TX_AVALON_ST_PORT_SETTINGS_BITS_PER_SYMBOL  8
136 #define AVALON_FIFO_TX_AVALON_ST_PORT_SETTINGS_SYM_PER_BEAT     4
137 #define AVALON_FIFO_TX_AVALON_ST_PORT_SETTINGS_ERROR_WIDTH              1
138 #define AVALON_FIFO_TX_AVALON_ST_PORT_SETTINGS_CHANNEL_WIDTH    0
139 #define AVALON_FIFO_TX_AVALON_ST_PORT_SETTINGS_ENABLE_PACKET_DATA       1
140
141 #define AVALON_FIFO_RX_BLOCK_DIAGRAM            0
142 #define AVALON_FIFO_RX_BLOCK_DIAGRAM_SHOW_SIGNALS               0
143 #define AVALON_FIFO_RX_PARAM_SINGLE_RESET_MODE  0
144 #define AVALON_FIFO_RX_BASIC_OPTS_DEPTH         16
145 #define AVALON_FIFO_RX_BASIC_OPTS_ALLOW_BACKPRESSURE    1
146 #define AVALON_FIFO_RX_BASIC_OPTS_CLOCK_SETTING "Single Clock Mode"
147 #define AVALON_FIFO_RX_BASIC_OPTS_FIFO_IMPL     "Construct FIFO from embedded memory blocks"
148 #define AVALON_FIFO_RX_STATUS_PORT_CREATE_STATUS_INT_FOR_INPUT  1
149 #define AVALON_FIFO_RX_STATUS_PORT_CREATE_STATUS_INT_FOR_OUTPUT 0
150 #define AVALON_FIFO_RX_STATUS_PORT_ENABLE_IRQ_FOR_STATUS_PORT   1
151 #define AVALON_FIFO_RX_INPUT_TYPE                       "AVALONST_SINK"
152 #define AVALON_FIFO_RX_OUTPUT_TYPE                      "AVALONMM_READ"
153 #define AVALON_FIFO_RX_AVALON_MM_PORT_SETTINGS_DATA_WIDTH       ""
154 #define AVALON_FIFO_RX_AVALON_ST_PORT_SETTINGS_BITS_PER_SYMBOL  8
155 #define AVALON_FIFO_RX_AVALON_ST_PORT_SETTINGS_SYM_PER_BEAT     4
156 #define AVALON_FIFO_RX_AVALON_ST_PORT_SETTINGS_ERROR_WIDTH              6
157 #define AVALON_FIFO_RX_AVALON_ST_PORT_SETTINGS_CHANNEL_WIDTH    0
158 #define AVALON_FIFO_RX_AVALON_ST_PORT_SETTINGS_ENABLE_PACKET_DATA       1
159
160 /* -------------------------------------------------------------------------- */
161
162 /* 5. Configuration Register Space. */
163
164 /* 5-1, MAC Configuration Register Space; Dword offsets. */
165 /* 0x00 - 0x17, Base Configuration. */
166 #define BASE_CONFIG_REV                 0x00            /* ro, IP Core ver. */
167 #define BASE_CFG_REV_VER_MASK                   0x0000FFFF
168 #define BASE_CFG_REV_CUST_VERSION__MASK         0xFFFF0000
169
170 #define BASE_CFG_SCRATCH                0x01            /* rw, 0 */
171
172 #define BASE_CFG_COMMAND_CONFIG         0x02            /* rw, 0 */
173 #define BASE_CFG_COMMAND_CONFIG_TX_ENA          (1<<0)  /* rw */
174 #define BASE_CFG_COMMAND_CONFIG_RX_ENA          (1<<1)  /* rw */
175 #define BASE_CFG_COMMAND_CONFIG_XON_GEN         (1<<2)  /* rw */
176 #define BASE_CFG_COMMAND_CONFIG_ETH_SPEED       (1<<3)  /* rw */
177 #define BASE_CFG_COMMAND_CONFIG_PROMIS_EN       (1<<4)  /* rw */
178 #define BASE_CFG_COMMAND_CONFIG_PAD_EN          (1<<5)  /* rw */
179 #define BASE_CFG_COMMAND_CONFIG_CRC_FWD         (1<<6)  /* rw */
180 #define BASE_CFG_COMMAND_CONFIG_PAUSE_FWD       (1<<7)  /* rw */
181 #define BASE_CFG_COMMAND_CONFIG_PAUSE_IGNORE    (1<<8)  /* rw */
182 #define BASE_CFG_COMMAND_CONFIG_TX_ADDR_INS     (1<<9)  /* rw */
183 #define BASE_CFG_COMMAND_CONFIG_HD_ENA          (1<<10) /* rw */
184 #define BASE_CFG_COMMAND_CONFIG_EXCESS_COL      (1<<11) /* ro */
185 #define BASE_CFG_COMMAND_CONFIG_LATE_COL        (1<<12) /* ro */
186 #define BASE_CFG_COMMAND_CONFIG_SW_RESET        (1<<13) /* rw */
187 #define BASE_CFG_COMMAND_CONFIG_MHASH_SEL       (1<<14) /* rw */
188 #define BASE_CFG_COMMAND_CONFIG_LOOP_ENA        (1<<15) /* rw */
189 #define BASE_CFG_COMMAND_CONFIG_TX_ADDR_SEL     (1<<16|1<<17|1<<18) /* rw */
190 #define BASE_CFG_COMMAND_CONFIG_MAGIC_ENA       (1<<19) /* rw */
191 #define BASE_CFG_COMMAND_CONFIG_SLEEP           (1<<20) /* rw */
192 #define BASE_CFG_COMMAND_CONFIG_WAKEUP          (1<<21) /* ro */
193 #define BASE_CFG_COMMAND_CONFIG_XOFF_GEN        (1<<22) /* rw */
194 #define BASE_CFG_COMMAND_CONFIG_CNTL_FRM_ENA    (1<<23) /* rw */
195 #define BASE_CFG_COMMAND_CONFIG_NO_LGTH_CHECK   (1<<24) /* rw */
196 #define BASE_CFG_COMMAND_CONFIG_ENA_10          (1<<25) /* rw */
197 #define BASE_CFG_COMMAND_CONFIG_RX_ERR_DISC     (1<<26) /* rw */
198 #define BASE_CFG_COMMAND_CONFIG_DISABLE_READ_TIMEOUT    (1<<27) /* rw */
199         /* 28-30 Reserved. */                           /* - */
200 #define BASE_CFG_COMMAND_CONFIG_CNT_RESET       (1<<31) /* rw */
201
202 #define BASE_CFG_MAC_0                  0x03            /* rw, 0 */
203 #define BASE_CFG_MAC_1                  0x04            /* rw, 0 */
204 #define BASE_CFG_FRM_LENGTH             0x05            /* rw/ro, 1518 */
205 #define BASE_CFG_PAUSE_QUANT            0x06            /* rw, 0 */
206 #define BASE_CFG_RX_SECTION_EMPTY       0x07            /* rw/ro, 0 */
207 #define BASE_CFG_RX_SECTION_FULL        0x08            /* rw/ro, 0 */
208 #define BASE_CFG_TX_SECTION_EMPTY       0x09            /* rw/ro, 0 */
209 #define BASE_CFG_TX_SECTION_FULL        0x0A            /* rw/ro, 0 */
210 #define BASE_CFG_RX_ALMOST_EMPTY        0x0B            /* rw/ro, 0 */
211 #define BASE_CFG_RX_ALMOST_FULL         0x0C            /* rw/ro, 0 */
212 #define BASE_CFG_TX_ALMOST_EMPTY        0x0D            /* rw/ro, 0 */
213 #define BASE_CFG_TX_ALMOST_FULL         0x0E            /* rw/ro, 0 */
214 #define BASE_CFG_MDIO_ADDR0             0x0F            /* rw, 0 */
215 #define BASE_CFG_MDIO_ADDR1             0x10            /* rw, 1 */
216 #define BASE_CFG_HOLDOFF_QUANT          0x11            /* rw, 0xFFFF */
217 /* 0x12-0x16 Reserved. */                               /* -, 0 */
218 #define BASE_CFG_TX_IPG_LENGTH          0x17            /* rw, 0 */
219
220 /* 0x18 - 0x38, Statistics Counters. */
221 #define STATS_A_MAC_ID_0                0x18            /* ro */
222 #define STATS_A_MAC_ID_1                0x19            /* ro */
223 #define STATS_A_FRAMES_TX_OK            0x1A            /* ro */
224 #define STATS_A_FRAMES_RX_OK            0x1B            /* ro */
225 #define STATS_A_FCS_ERRORS              0x1C            /* ro */
226 #define STATS_A_ALIGNMENT_ERRORS        0x1D            /* ro */
227 #define STATS_A_OCTETS_TX_OK            0x1E            /* ro */
228 #define STATS_A_OCTETS_RX_OK            0x1F            /* ro */
229 #define STATS_A_TX_PAUSE_MAX_CTRL_FRAME 0x20            /* ro */
230 #define STATS_A_RX_PAUSE_MAX_CTRL_FRAME 0x21            /* ro */
231 #define STATS_IF_IN_ERRORS              0x22            /* ro */
232 #define STATS_IF_OUT_ERRORS             0x23            /* ro */
233 #define STATS_IF_IN_UCAST_PKTS          0x24            /* ro */
234 #define STATS_IF_IN_MULTICAST_PKTS      0x25            /* ro */
235 #define STATS_IF_IN_BROADCAST_PKTS      0x26            /* ro */
236 #define STATS_IF_OUT_DISCARDS           0x27            /* ro */
237 #define STATS_IF_OUT_UCAST_PKTS         0x28            /* ro */
238 #define STATS_IF_OUT_MULTICAST_PKTS     0x29            /* ro */
239 #define STATS_IF_OUT_BROADCAST_PKTS     0x2A            /* ro */
240 #define STATS_ETHER_STATS_DROP_EVENT    0x2B            /* ro */
241 #define STATS_ETHER_STATS_OCTETS        0x2C            /* ro */
242 #define STATS_ETHER_STATS_PKTS          0x2D            /* ro */
243 #define STATS_ETHER_STATS_USIZE_PKTS    0x2E            /* ro */
244 #define STATS_ETHER_STATS_OSIZE_PKTS    0x2F            /* ro */
245 #define STATS_ETHER_STATS_PKTS_64_OCTETS 0x30           /* ro */
246 #define STATS_ETHER_STATS_PKTS_65_TO_127_OCTETS  0x31   /* ro */
247 #define STATS_ETHER_STATS_PKTS_128_TO_255_OCTETS 0x32   /* ro */
248 #define STATS_ETHER_STATS_PKTS_256_TO_511_OCTETS 0x33   /* ro */
249 #define STATS_ETHER_STATS_PKTS_512_TO_1023_OCTETS 0x34  /* ro */
250 #define STATS_ETHER_STATS_PKTS_1024_TO_1518_OCTETS 0x35 /* ro */
251 #define STATS_ETHER_STATS_PKTS_1519_TO_X_OCTETS 0x36    /* ro */
252 #define STATS_ETHER_STATS_JABBERS       0x37            /* ro */
253 #define STATS_ETHER_STATS_FRAGMENTS     0x38            /* ro */
254         /* 0x39, Reserved. */                           /* - */
255
256 /* 0x3A, Transmit Command. */
257 #define TX_CMD_STAT                     0x3A            /* rw */
258 #define TX_CMD_STAT_OMIT_CRC                    (1<<17)
259 #define TX_CMD_STAT_TX_SHIFT16                  (1<<18)
260
261 /* 0x3B, Receive Command. */
262 #define RX_CMD_STAT                     0x3B            /* rw */
263 #define RX_CMD_STAT_RX_SHIFT16                  (1<<25)
264
265 /* 0x3C - 0x3E, Extended Statistics Counters. */
266 #define ESTATS_MSB_A_OCTETS_TX_OK       0x3C            /* ro */
267 #define ESTATS_MSB_A_OCTETS_RX_OK       0x3D            /* ro */
268 #define ESTATS_MSB_ETHER_STATS_OCTETS   0x3E            /* ro */
269
270 /* 0x3F, Reserved. */
271
272 /* 0x40 - 0x7F, Multicast Hash Table. */
273 #define MHASH_START                     0x40
274 #define MHASH_LEN                       0x3F
275
276 /* 0x80 - 0x9F, MDIO Space 0 or PCS Function Configuration. */
277 #define MDIO_0_START                    0x80
278
279 /* The following are offsets to the first PCS register at 0x80. */
280 /* See sys/dev/mii/mii.h. */
281 #define PCS_CONTROL                     0x00            /* rw */
282         /* Bits 0:4, Reserved. */                       /* - */
283 #define PCS_CONTROL_UNIDIRECTIONAL_ENABLE       (1<<5)  /* rw */
284 #define PCS_CONTROL_SPEED_SELECTION             (1<<6|1<<13) /* ro */
285 #define PCS_CONTROL_COLLISION_TEST              (1<<7)  /* ro */
286 #define PCS_CONTROL_DUPLEX_MODE                 (1<<8)  /* ro */
287 #define PCS_CONTROL_RESTART_AUTO_NEGOTIATION    (1<<9)  /* rw */
288 #define PCS_CONTROL_ISOLATE                     (1<<10) /* rw */
289 #define PCS_CONTROL_POWERDOWN                   (1<<11) /* rw */
290 #define PCS_CONTROL_AUTO_NEGOTIATION_ENABLE     (1<<12) /* rw */
291         /* See bit 6 above. */                          /* ro */
292 #define PCS_CONTROL_LOOPBACK                    (1<<14) /* rw */
293 #define PCS_CONTROL_RESET                       (1<<15) /* rw */
294
295 #define PCS_STATUS                      0x01            /* ro */
296 #define PCS_STATUS_EXTENDED_CAPABILITY          (1<<0)  /* ro */
297 #define PCS_STATUS_JABBER_DETECT                (1<<1)  /* -, 0 */
298 #define PCS_STATUS_LINK_STATUS                  (1<<2)  /* ro */
299 #define PCS_STATUS_AUTO_NEGOTIATION_ABILITY     (1<<3)  /* ro */
300 #define PCS_STATUS_REMOTE_FAULT                 (1<<4)  /* -, 0 */
301 #define PCS_STATUS_AUTO_NEGOTIATION_COMPLETE    (1<<5)  /* ro */
302 #define PCS_STATUS_MF_PREAMBLE_SUPPRESSION      (1<<6)  /* -, 0 */
303 #define PCS_STATUS_UNIDIRECTIONAL_ABILITY       (1<<7)  /* ro */
304 #define PCS_STATUS_EXTENDED_STATUS              (1<<8)  /* -, 0 */
305 #define PCS_STATUS_100BASET2_HALF_DUPLEX        (1<<9)  /* ro */
306 #define PCS_STATUS_100BASET2_FULL_DUPLEX        (1<<10) /* ro */
307 #define PCS_STATUS_10MBPS_HALF_DUPLEX           (1<<11) /* ro */
308 #define PCS_STATUS_10MBPS_FULL_DUPLEX           (1<<12) /* ro */
309 #define PCS_STATUS_100BASE_X_HALF_DUPLEX        (1<<13) /* ro */
310 #define PCS_STATUS_100BASE_X_FULL_DUPLEX        (1<<14) /* ro */
311 #define PCS_STATUS_100BASE_T4                   (1<<15) /* ro */
312
313 #define PCS_PHY_IDENTIFIER_0            0x02            /* ro */
314 #define PCS_PHY_IDENTIFIER_1            0x03            /* ro */
315
316 #define PCS_DEV_ABILITY                 0x04            /* rw */
317         /* 1000BASE-X */
318         /* Bits 0:4, Reserved. */                       /* - */
319 #define PCS_DEV_ABILITY_1000BASE_X_FD           (1<<5)  /* rw */
320 #define PCS_DEV_ABILITY_1000BASE_X_HD           (1<<6)  /* rw */
321 #define PCS_DEV_ABILITY_1000BASE_X_PS1          (1<<7)  /* rw */
322 #define PCS_DEV_ABILITY_1000BASE_X_PS2          (1<<8)  /* rw */
323         /* Bits 9:11, Reserved. */                      /* - */
324 #define PCS_DEV_ABILITY_1000BASE_X_RF1          (1<<12) /* rw */
325 #define PCS_DEV_ABILITY_1000BASE_X_RF2          (1<<13) /* rw */
326 #define PCS_DEV_ABILITY_1000BASE_X_ACK          (1<<14) /* rw */
327 #define PCS_DEV_ABILITY_1000BASE_X_NP           (1<<15) /* rw */
328
329 #define PCS_PARTNER_ABILITY             0x05            /* ro */
330         /* 1000BASE-X */
331         /* Bits 0:4, Reserved. */                       /* - */
332 #define PCS_PARTNER_ABILITY_1000BASE_X_FD       (1<<5)  /* ro */
333 #define PCS_PARTNER_ABILITY_1000BASE_X_HD       (1<<6)  /* ro */
334 #define PCS_PARTNER_ABILITY_1000BASE_X_PS1      (1<<7)  /* ro */
335 #define PCS_PARTNER_ABILITY_1000BASE_X_PS2      (1<<8)  /* ro */
336         /* Bits 9:11, Reserved. */                      /* - */
337 #define PCS_PARTNER_ABILITY_1000BASE_X_RF1      (1<<12) /* ro */
338 #define PCS_PARTNER_ABILITY_1000BASE_X_RF2      (1<<13) /* ro */
339 #define PCS_PARTNER_ABILITY_1000BASE_X_ACK      (1<<14) /* ro */
340 #define PCS_PARTNER_ABILITY_1000BASE_X_NP       (1<<15) /* ro */
341         /* SGMII */
342         /* Bits 0:9, Reserved. */                       /* - */
343 #define PCS_PARTNER_ABILITY_SGMII_COPPER_SPEED0 (1<<10) /* ro */
344 #define PCS_PARTNER_ABILITY_SGMII_COPPER_SPEED1 (1<<11) /* ro */
345 #define PCS_PARTNER_ABILITY_SGMII_COPPER_DUPLEX_STATUS  (1<<12) /* ro */
346         /* Bit 13, Reserved. */                         /* - */
347 #define PCS_PARTNER_ABILITY_SGMII_ACK           (1<<14) /* ro */
348 #define PCS_PARTNER_ABILITY_SGMII_COPPER_LINK_STATUS    (1<<15) /* ro */
349
350 #define PCS_AN_EXPANSION                0x06            /* ro */
351 #define PCS_AN_EXPANSION_LINK_PARTNER_AUTO_NEGOTIATION_ABLE     (1<<0)  /* ro */
352 #define PCS_AN_EXPANSION_PAGE_RECEIVE           (1<<1)  /* ro */
353 #define PCS_AN_EXPANSION_NEXT_PAGE_ABLE         (1<<2)  /* -, 0 */
354         /* Bits 3:15, Reserved. */                      /* - */
355
356 #define PCS_DEVICE_NEXT_PAGE            0x07            /* ro */
357 #define PCS_PARTNER_NEXT_PAGE           0x08            /* ro */
358 #define PCS_MASTER_SLAVE_CNTL           0x09            /* ro */
359 #define PCS_MASTER_SLAVE_STAT           0x0A            /* ro */
360         /* 0x0B - 0x0E, Reserved */                     /* - */
361 #define PCS_EXTENDED_STATUS             0x0F            /* ro */
362 /* Specific Extended Registers. */
363 #define PCS_EXT_SCRATCH                 0x10            /* rw */
364 #define PCS_EXT_REV                     0x11            /* ro */
365 #define PCS_EXT_LINK_TIMER_0            0x12            /* rw */
366 #define PCS_EXT_LINK_TIMER_1            0x13            /* rw */
367 #define PCS_EXT_IF_MODE                 0x14            /* rw */
368 #define PCS_EXT_IF_MODE_SGMII_ENA               (1<<0)  /* rw */
369 #define PCS_EXT_IF_MODE_USE_SGMII_AN            (1<<1)  /* rw */
370 #define PCS_EXT_IF_MODE_SGMII_SPEED1            (1<<2)  /* rw */
371 #define PCS_EXT_IF_MODE_SGMII_SPEED0            (1<<3)  /* rw */
372 #define PCS_EXT_IF_MODE_SGMII_DUPLEX            (1<<4)  /* rw */
373         /* Bits 5:15, Reserved. */                      /* - */
374
375 #define PCS_EXT_DISABLE_READ_TIMEOUT    0x15            /* rw */
376 #define PCS_EXT_READ_TIMEOUT            0x16            /* r0 */
377         /* 0x17-0x1F, Reserved. */
378
379 /* 0xA0 - 0xBF, MDIO Space 1. */
380 #define MDIO_1_START                    0xA0
381 #define ATSE_BMCR                       MDIO_1_START
382
383 /* 0xC0 - 0xC7, Supplementary Address. */
384 #define SUPPL_ADDR_SMAC_0_0             0xC0            /* rw */
385 #define SUPPL_ADDR_SMAC_0_1             0xC1            /* rw */
386 #define SUPPL_ADDR_SMAC_1_0             0xC2            /* rw */
387 #define SUPPL_ADDR_SMAC_1_1             0xC3            /* rw */
388 #define SUPPL_ADDR_SMAC_2_0             0xC4            /* rw */
389 #define SUPPL_ADDR_SMAC_2_1             0xC5            /* rw */
390 #define SUPPL_ADDR_SMAC_3_0             0xC6            /* rw */
391 #define SUPPL_ADDR_SMAC_3_1             0xC7            /* rw */
392
393 /* 0xC8 - 0xCF, Reserved; set to zero, ignore on read. */
394 /* 0xD7 - 0xFF, Reserved; set to zero, ignore on read. */
395
396
397 /* -------------------------------------------------------------------------- */
398
399 /* DE4 Intel Strata Flash Ethernet Option Bits area. */
400 /* XXX-BZ this is something a loader will have to handle for us. */
401 #define ALTERA_ETHERNET_OPTION_BITS_OFF 0x00008000
402 #define ALTERA_ETHERNET_OPTION_BITS_LEN 0x00007fff
403
404 /* -------------------------------------------------------------------------- */
405
406 struct atse_softc {
407         struct ifnet            *atse_ifp;
408         struct mbuf             *atse_rx_m;
409         struct mbuf             *atse_tx_m;
410         uint8_t                 *atse_tx_buf;
411         struct resource         *atse_mem_res;
412         struct resource         *atse_rx_irq_res;
413         struct resource         *atse_rx_mem_res;
414         struct resource         *atse_rxc_mem_res;
415         struct resource         *atse_tx_irq_res;
416         struct resource         *atse_tx_mem_res;
417         struct resource         *atse_txc_mem_res;
418         device_t                atse_miibus;
419         device_t                atse_dev;
420         int                     atse_unit;
421         int                     atse_mem_rid;
422         int                     atse_rx_irq_rid;
423         int                     atse_rx_mem_rid;
424         int                     atse_rxc_mem_rid;
425         int                     atse_tx_irq_rid;
426         int                     atse_tx_mem_rid;
427         int                     atse_txc_mem_rid;
428         int                     atse_phy_addr;
429         int                     atse_if_flags;
430         int                     atse_rx_irq;
431         int                     atse_tx_irq;
432         u_long                  atse_rx_maddr;
433         u_long                  atse_rx_msize;
434         u_long                  atse_tx_maddr;
435         u_long                  atse_tx_msize;
436         u_long                  atse_rxc_maddr;
437         u_long                  atse_rxc_msize;
438         u_long                  atse_txc_maddr;
439         u_long                  atse_txc_msize;
440         void                    *atse_rx_intrhand;
441         void                    *atse_tx_intrhand;
442         bus_addr_t              atse_bmcr0;
443         bus_addr_t              atse_bmcr1;
444         uint32_t                atse_flags;
445 #define ATSE_FLAGS_LINK                 0x00000001
446 #define ATSE_FLAGS_ERROR                0x00000002
447 #define ATSE_FLAGS_SOP_SEEN             0x00000004
448         uint8_t                 atse_eth_addr[ETHER_ADDR_LEN];
449 #define ATSE_ETH_ADDR_DEF       0x01
450 #define ATSE_ETH_ADDR_SUPP1     0x02
451 #define ATSE_ETH_ADDR_SUPP2     0x04
452 #define ATSE_ETH_ADDR_SUPP3     0x08
453 #define ATSE_ETH_ADDR_SUPP4     0x10
454 #define ATSE_ETH_ADDR_ALL       0x1f
455         uint16_t                atse_watchdog_timer;
456         uint16_t                atse_tx_m_offset;
457         uint16_t                atse_tx_buf_len;
458         uint16_t                atse_rx_buf_len;
459         int16_t                 atse_rx_cycles;         /* POLLING */
460 #define RX_CYCLES_IN_INTR       5
461         uint32_t                atse_rx_err[6];
462 #define ATSE_RX_ERR_FIFO_THRES_EOP      0 /* FIFO threshold reached, on EOP. */
463 #define ATSE_RX_ERR_ELEN                1 /* Frame/payload length not valid. */
464 #define ATSE_RX_ERR_CRC32               2 /* CRC-32 error. */
465 #define ATSE_RX_ERR_FIFO_THRES_TRUNC    3 /* FIFO thresh., truncated frame. */
466 #define ATSE_RX_ERR_4                   4 /* ? */
467 #define ATSE_RX_ERR_5                   5 /* / */
468 #define ATSE_RX_ERR_MAX                 6
469         struct callout          atse_tick;
470         struct mtx              atse_mtx;
471 };
472
473
474 int     atse_attach(device_t);
475 int     atse_detach_dev(device_t);
476 void    atse_detach_resources(device_t);
477
478 int     atse_miibus_readreg(device_t, int, int);
479 int     atse_miibus_writereg(device_t, int, int, int);
480 void    atse_miibus_statchg(device_t);
481
482 extern devclass_t atse_devclass;
483
484 #endif /* _DEV_IF_ATSEREG_H */
485
486 /* end */