if_dgereg.h revision 1.1.4.3 1 1.1.4.3 skrll /* $NetBSD: if_dgereg.h,v 1.1.4.3 2004/09/18 14:49:03 skrll Exp $ */
2 1.1.4.2 skrll
3 1.1.4.2 skrll /*
4 1.1.4.2 skrll * Copyright (c) 2004, SUNET, Swedish University Computer Network.
5 1.1.4.2 skrll * All rights reserved.
6 1.1.4.2 skrll *
7 1.1.4.2 skrll * Written by Anders Magnusson for SUNET, Swedish University Computer Network.
8 1.1.4.2 skrll *
9 1.1.4.2 skrll * Redistribution and use in source and binary forms, with or without
10 1.1.4.2 skrll * modification, are permitted provided that the following conditions
11 1.1.4.2 skrll * are met:
12 1.1.4.2 skrll * 1. Redistributions of source code must retain the above copyright
13 1.1.4.2 skrll * notice, this list of conditions and the following disclaimer.
14 1.1.4.2 skrll * 2. Redistributions in binary form must reproduce the above copyright
15 1.1.4.2 skrll * notice, this list of conditions and the following disclaimer in the
16 1.1.4.2 skrll * documentation and/or other materials provided with the distribution.
17 1.1.4.2 skrll * 3. All advertising materials mentioning features or use of this software
18 1.1.4.2 skrll * must display the following acknowledgement:
19 1.1.4.2 skrll * This product includes software developed for the NetBSD Project by
20 1.1.4.2 skrll * SUNET, Swedish University Computer Network.
21 1.1.4.2 skrll * 4. The name of SUNET may not be used to endorse or promote products
22 1.1.4.2 skrll * derived from this software without specific prior written permission.
23 1.1.4.2 skrll *
24 1.1.4.2 skrll * THIS SOFTWARE IS PROVIDED BY SUNET ``AS IS'' AND
25 1.1.4.2 skrll * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
26 1.1.4.2 skrll * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27 1.1.4.2 skrll * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
28 1.1.4.2 skrll * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 1.1.4.2 skrll * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 1.1.4.2 skrll * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 1.1.4.2 skrll * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 1.1.4.2 skrll * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 1.1.4.2 skrll * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 1.1.4.2 skrll * POSSIBILITY OF SUCH DAMAGE.
35 1.1.4.2 skrll */
36 1.1.4.2 skrll
37 1.1.4.2 skrll /* PCI registers */
38 1.1.4.2 skrll #define DGE_PCI_BAR 0x10
39 1.1.4.2 skrll #define DGE_PCIX_CMD 0xe4
40 1.1.4.2 skrll
41 1.1.4.2 skrll /* PCIX CMD bits */
42 1.1.4.2 skrll #define PCIX_MMRBC_MSK 0x000c0000
43 1.1.4.2 skrll #define PCIX_MMRBC_512 0x00000000
44 1.1.4.2 skrll #define PCIX_MMRBC_1024 0x00040000
45 1.1.4.2 skrll #define PCIX_MMRBC_2048 0x00080000
46 1.1.4.2 skrll #define PCIX_MMRBC_4096 0x000c0000
47 1.1.4.2 skrll
48 1.1.4.2 skrll
49 1.1.4.2 skrll /* General registers */
50 1.1.4.2 skrll #define DGE_CTRL0 0x000
51 1.1.4.2 skrll #define DGE_CTRL1 0x008
52 1.1.4.2 skrll #define DGE_STATUS 0x010
53 1.1.4.2 skrll #define DGE_EECD 0x018
54 1.1.4.2 skrll #define DGE_MFS 0x020
55 1.1.4.2 skrll
56 1.1.4.2 skrll /* Interrupt control registers */
57 1.1.4.2 skrll #define DGE_ICR 0x080
58 1.1.4.2 skrll #define DGE_ICS 0x088
59 1.1.4.2 skrll #define DGE_IMS 0x090
60 1.1.4.2 skrll #define DGE_IMC 0x098
61 1.1.4.2 skrll
62 1.1.4.2 skrll /* Receiver control registers */
63 1.1.4.2 skrll #define DGE_RCTL 0x0100
64 1.1.4.2 skrll #define DGE_FCRTL 0x0108
65 1.1.4.2 skrll #define DGE_FCRTH 0x0110
66 1.1.4.2 skrll #define DGE_RDBAL 0x0118
67 1.1.4.2 skrll #define DGE_RDBAH 0x011c
68 1.1.4.2 skrll #define DGE_RDLEN 0x0120
69 1.1.4.2 skrll #define DGE_RDH 0x0128
70 1.1.4.2 skrll #define DGE_RDT 0x0130
71 1.1.4.2 skrll #define DGE_RDTR 0x0138
72 1.1.4.2 skrll #define DGE_RXDCTL 0x0140
73 1.1.4.2 skrll #define DGE_RAIDC 0x0148
74 1.1.4.2 skrll #define DGE_RXCSUM 0x0158
75 1.1.4.2 skrll #define DGE_RAL 0x0180
76 1.1.4.2 skrll #define DGE_RAH 0x0184
77 1.1.4.2 skrll #define DGE_MTA 0x0200
78 1.1.4.2 skrll
79 1.1.4.2 skrll /* Transmit control registers */
80 1.1.4.2 skrll #define DGE_TCTL 0x0600
81 1.1.4.2 skrll #define DGE_TDBAL 0x0608
82 1.1.4.2 skrll #define DGE_TDBAH 0x060c
83 1.1.4.2 skrll #define DGE_TDLEN 0x0610
84 1.1.4.2 skrll #define DGE_TDH 0x0618
85 1.1.4.2 skrll #define DGE_TDT 0x0620
86 1.1.4.2 skrll #define DGE_TIDV 0x0628
87 1.1.4.2 skrll #define DGE_TXDCTL 0x0630
88 1.1.4.2 skrll #define DGE_TSPMT 0x0638
89 1.1.4.2 skrll #define DGE_PAP 0x0640
90 1.1.4.2 skrll
91 1.1.4.2 skrll /* PHY communications */
92 1.1.4.2 skrll #define DGE_MDIO 0x0758
93 1.1.4.2 skrll #define DGE_MDIRW 0x0760
94 1.1.4.2 skrll
95 1.1.4.2 skrll /* Statistics */
96 1.1.4.2 skrll #define DGE_TPRL 0x2000
97 1.1.4.2 skrll #define DGE_TPRH 0x2004
98 1.1.4.2 skrll
99 1.1.4.2 skrll /*
100 1.1.4.2 skrll * CTRL0 bit definitions.
101 1.1.4.2 skrll */
102 1.1.4.2 skrll #define CTRL0_LRST 0x00000008
103 1.1.4.2 skrll #define CTRL0_JFE 0x00000010
104 1.1.4.2 skrll #define CTRL0_XLE 0x00000020
105 1.1.4.2 skrll #define CTRL0_MDCS 0x00000040
106 1.1.4.2 skrll #define CTRL0_CMDC 0x00000080
107 1.1.4.2 skrll #define CTRL0_SDP0 0x00040000
108 1.1.4.2 skrll #define CTRL0_SDP1 0x00080000
109 1.1.4.2 skrll #define CTRL0_SDP2 0x00100000
110 1.1.4.2 skrll #define CTRL0_SDP3 0x00200000
111 1.1.4.2 skrll #define CTRL0_SDP0_DIR 0x00400000
112 1.1.4.2 skrll #define CTRL0_SDP1_DIR 0x00800000
113 1.1.4.2 skrll #define CTRL0_SDP2_DIR 0x01000000
114 1.1.4.2 skrll #define CTRL0_SDP3_DIR 0x02000000
115 1.1.4.2 skrll #define CTRL0_RST 0x04000000
116 1.1.4.2 skrll #define CTRL0_RPE 0x08000000
117 1.1.4.2 skrll #define CTRL0_TPE 0x10000000
118 1.1.4.2 skrll #define CTRL0_VME 0x40000000
119 1.1.4.2 skrll
120 1.1.4.2 skrll /*
121 1.1.4.2 skrll * CTRL1 bit definitions.
122 1.1.4.2 skrll */
123 1.1.4.2 skrll #define CTRL1_EE_RST 0x00002000
124 1.1.4.2 skrll /*
125 1.1.4.2 skrll * STATUS bit definitions.
126 1.1.4.2 skrll */
127 1.1.4.2 skrll #define STATUS_LINKUP 0x00000002
128 1.1.4.2 skrll #define STATUS_BUS64 0x00001000
129 1.1.4.2 skrll #define STATUS_PCIX 0x00002000
130 1.1.4.2 skrll #define STATUS_PCIX_MSK 0x0000C000
131 1.1.4.2 skrll #define STATUS_PCIX_66 0x00000000
132 1.1.4.2 skrll #define STATUS_PCIX_100 0x00004000
133 1.1.4.2 skrll #define STATUS_PCIX_133 0x00008000
134 1.1.4.2 skrll
135 1.1.4.2 skrll /*
136 1.1.4.2 skrll * Interrupt control registers bit definitions.
137 1.1.4.2 skrll */
138 1.1.4.2 skrll #define ICR_TXDW 0x00000001
139 1.1.4.2 skrll #define ICR_TXQE 0x00000002
140 1.1.4.2 skrll #define ICR_LSC 0x00000004
141 1.1.4.2 skrll #define ICR_RXSEQ 0x00000008
142 1.1.4.2 skrll #define ICR_RXDMT0 0x00000010
143 1.1.4.2 skrll #define ICR_RXO 0x00000040
144 1.1.4.2 skrll #define ICR_RXT0 0x00000080
145 1.1.4.2 skrll #define ICR_GPI0 0x00000800
146 1.1.4.2 skrll #define ICR_GPI1 0x00001000
147 1.1.4.2 skrll #define ICR_GPI2 0x00002000
148 1.1.4.2 skrll #define ICR_GPI3 0x00004000
149 1.1.4.2 skrll
150 1.1.4.2 skrll /*
151 1.1.4.2 skrll * RCTL bit definitions.
152 1.1.4.2 skrll */
153 1.1.4.2 skrll #define RCTL_RXEN 0x00000002
154 1.1.4.2 skrll #define RCTL_SBP 0x00000004
155 1.1.4.2 skrll #define RCTL_UPE 0x00000008
156 1.1.4.2 skrll #define RCTL_MPE 0x00000010
157 1.1.4.2 skrll #define RCTL_RDMTS_12 0x00000000
158 1.1.4.2 skrll #define RCTL_RDMTS_14 0x00000100
159 1.1.4.2 skrll #define RCTL_RDMTS_18 0x00000200
160 1.1.4.2 skrll #define RCTL_BAM 0x00008000
161 1.1.4.2 skrll #define RCTL_BSIZE_2k 0x00000000
162 1.1.4.2 skrll #define RCTL_BSIZE_4k 0x00010000
163 1.1.4.2 skrll #define RCTL_BSIZE_8k 0x00020000
164 1.1.4.2 skrll #define RCTL_BSIZE_16k 0x00030000
165 1.1.4.2 skrll #define RCTL_VFE 0x00040000
166 1.1.4.2 skrll #define RCTL_CFIEN 0x00080000
167 1.1.4.2 skrll #define RCTL_CFI 0x00100000
168 1.1.4.2 skrll #define RCTL_RPDA_MC 0x00400000
169 1.1.4.2 skrll #define RCTL_CFF 0x00800000
170 1.1.4.2 skrll #define RCTL_SECRC 0x04000000
171 1.1.4.2 skrll
172 1.1.4.2 skrll #define RCTL_MO(x) ((x) << 12)
173 1.1.4.2 skrll
174 1.1.4.2 skrll #define FCRTL_XONE 0x80000000
175 1.1.4.2 skrll
176 1.1.4.2 skrll /*
177 1.1.4.2 skrll * RXDCTL macros.
178 1.1.4.2 skrll */
179 1.1.4.2 skrll #define RXDCTL_PTHRESH(x) (x)
180 1.1.4.2 skrll #define RXDCTL_HTHRESH(x) ((x) << 9)
181 1.1.4.2 skrll #define RXDCTL_WTHRESH(x) ((x) << 18)
182 1.1.4.2 skrll
183 1.1.4.2 skrll /*
184 1.1.4.2 skrll * RXCSUM bit definitions.
185 1.1.4.2 skrll */
186 1.1.4.2 skrll #define RXCSUM_IPOFL 0x00000100
187 1.1.4.2 skrll #define RXCSUM_TUOFL 0x00000200
188 1.1.4.2 skrll
189 1.1.4.2 skrll /*
190 1.1.4.2 skrll * RAH/RAL macros.
191 1.1.4.2 skrll */
192 1.1.4.2 skrll #define RAH_AV 0x80000000
193 1.1.4.2 skrll #define RA_TABSIZE 16 /* # of direct-filtered addresses */
194 1.1.4.2 skrll #define RA_ADDR(reg, idx) ((reg) + (idx) * 8)
195 1.1.4.2 skrll
196 1.1.4.2 skrll /*
197 1.1.4.2 skrll * MTA macros.
198 1.1.4.2 skrll */
199 1.1.4.2 skrll #define MC_TABSIZE 128 /* Size of multicast array table */
200 1.1.4.2 skrll
201 1.1.4.2 skrll /*
202 1.1.4.2 skrll * TCTL bit definitions.
203 1.1.4.2 skrll */
204 1.1.4.2 skrll #define TCTL_TCE 0x00000001
205 1.1.4.2 skrll #define TCTL_TXEN 0x00000002
206 1.1.4.2 skrll #define TCTL_TPDE 0x00000004
207 1.1.4.2 skrll
208 1.1.4.2 skrll /*
209 1.1.4.2 skrll * TXDCTL macros.
210 1.1.4.2 skrll */
211 1.1.4.2 skrll #define TXDCTL_PTHRESH(x) (x)
212 1.1.4.2 skrll #define TXDCTL_HTHRESH(x) ((x) << 8)
213 1.1.4.2 skrll #define TXDCTL_WTHRESH(x) ((x) << 16)
214 1.1.4.2 skrll
215 1.1.4.2 skrll /*
216 1.1.4.2 skrll * MDIO communication bits.
217 1.1.4.2 skrll * This is for "New Protocol".
218 1.1.4.2 skrll */
219 1.1.4.2 skrll #define MDIO_REG(x) ((x) & 0xffff)
220 1.1.4.2 skrll #define MDIO_DEV(x) ((x) << 16)
221 1.1.4.2 skrll #define MDIO_PHY(x) ((x) << 21)
222 1.1.4.2 skrll #define MDIO_ADDR 0
223 1.1.4.2 skrll #define MDIO_WRITE (1 << 26)
224 1.1.4.2 skrll #define MDIO_READ (1 << 27)
225 1.1.4.2 skrll #define MDIO_OLD_P (1 << 28)
226 1.1.4.2 skrll #define MDIO_CMD (1 << 30)
227 1.1.4.2 skrll
228 1.1.4.2 skrll /*
229 1.1.4.2 skrll * EEPROM stuff.
230 1.1.4.2 skrll * The 10GbE card uses an ATMEL AT93C46 in 64x16 mode,
231 1.1.4.2 skrll * see http://www.atmel.com/dyn/resources/prod_documents/doc0172.pdf
232 1.1.4.2 skrll */
233 1.1.4.2 skrll /* EEPROM bit masks in the EECD register */
234 1.1.4.2 skrll #define EECD_SK 0x01
235 1.1.4.2 skrll #define EECD_CS 0x02
236 1.1.4.2 skrll #define EECD_DI 0x04
237 1.1.4.2 skrll #define EECD_DO 0x08
238 1.1.4.2 skrll
239 1.1.4.2 skrll #define EEPROM_SIZE 64 /* 64 word in length */
240 1.1.4.2 skrll #define EEPROM_CKSUM 0xbaba
241 1.1.4.2 skrll
242 1.1.4.2 skrll #define EE_ADDR01 0 /* Offset in EEPROM for MAC address 0-1 */
243 1.1.4.2 skrll #define EE_ADDR23 1 /* Offset in EEPROM for MAC address 2-3 */
244 1.1.4.2 skrll #define EE_ADDR45 2 /* Offset in EEPROM for MAC address 4-5 */
245 1.1.4.2 skrll
246 1.1.4.2 skrll /*
247 1.1.4.2 skrll * Transmit descriptor definitions.
248 1.1.4.2 skrll */
249 1.1.4.2 skrll struct dge_tdes {
250 1.1.4.2 skrll uint32_t dt_baddrl; /* Lower 32 bits of buffer address */
251 1.1.4.2 skrll uint32_t dt_baddrh; /* Upper 32 bits of buffer address */
252 1.1.4.2 skrll uint32_t dt_ctl; /* Command/Type/Length */
253 1.1.4.2 skrll uint8_t dt_status; /* Transmitted data status info */
254 1.1.4.2 skrll uint8_t dt_popts; /* Packet options */
255 1.1.4.2 skrll uint16_t dt_vlan; /* VLAN information */
256 1.1.4.2 skrll } __attribute__((__packed__));
257 1.1.4.2 skrll
258 1.1.4.2 skrll /*
259 1.1.4.2 skrll * Context transmit descriptor, "overlayed" on the above struct.
260 1.1.4.2 skrll */
261 1.1.4.2 skrll struct dge_ctdes {
262 1.1.4.2 skrll #if 0
263 1.1.4.2 skrll uint8_t dc_ipcss; /* IP checksum start */
264 1.1.4.2 skrll uint8_t dc_ipcso; /* IP checksum offset */
265 1.1.4.2 skrll uint16_t dc_ipcse; /* IP checksum ending */
266 1.1.4.2 skrll uint8_t dc_tucss; /* TCP/UDP checksum start */
267 1.1.4.2 skrll uint8_t dc_tucso; /* TCP/UDP checksum offset */
268 1.1.4.2 skrll uint16_t dc_tucse; /* TCP/UDP checksum ending */
269 1.1.4.2 skrll uint32_t dc_ctl; /* Command/Type/Length (as above) */
270 1.1.4.2 skrll uint8_t dc_status; /* Status info (as above) */
271 1.1.4.2 skrll uint8_t dc_hdrlen; /* Header length */
272 1.1.4.2 skrll uint16_t dc_mss; /* Maximum segment size */
273 1.1.4.2 skrll #else
274 1.1.4.2 skrll uint32_t dc_tcpip_ipcs; /* IP checksum context */
275 1.1.4.2 skrll uint32_t dc_tcpip_tucs; /* TCP/UDP checksum context */
276 1.1.4.2 skrll uint32_t dc_tcpip_cmdlen;
277 1.1.4.2 skrll uint32_t dc_tcpip_seg; /* TCP segmentation context */
278 1.1.4.2 skrll #endif
279 1.1.4.2 skrll } __attribute__((__packed__));
280 1.1.4.2 skrll
281 1.1.4.2 skrll #define TDESC_DTYP_CTD 0x00000000
282 1.1.4.2 skrll #define TDESC_DTYP_DATA 0x00100000
283 1.1.4.2 skrll #define TDESC_DCMD_IDE 0x80000000
284 1.1.4.2 skrll #define TDESC_DCMD_VLE 0x40000000
285 1.1.4.2 skrll #define TDESC_DCMD_RS 0x08000000
286 1.1.4.2 skrll #define TDESC_DCMD_TSE 0x04000000
287 1.1.4.2 skrll #define TDESC_DCMD_EOP 0x01000000
288 1.1.4.2 skrll #define TDESC_TUCMD_IDE 0x80000000
289 1.1.4.2 skrll #define TDESC_TUCMD_RS 0x08000000
290 1.1.4.2 skrll #define TDESC_TUCMD_TSE 0x04000000
291 1.1.4.2 skrll #define TDESC_TUCMD_IP 0x02000000
292 1.1.4.2 skrll #define TDESC_TUCMD_TCP 0x01000000
293 1.1.4.2 skrll
294 1.1.4.2 skrll #define DGE_TCPIP_IPCSS(x) (x)
295 1.1.4.2 skrll #define DGE_TCPIP_IPCSO(x) ((x) << 8)
296 1.1.4.2 skrll #define DGE_TCPIP_IPCSE(x) ((x) << 16)
297 1.1.4.2 skrll #define DGE_TCPIP_TUCSS(x) (x)
298 1.1.4.2 skrll #define DGE_TCPIP_TUCSO(x) ((x) << 8)
299 1.1.4.2 skrll #define DGE_TCPIP_TUCSE(x) ((x) << 16)
300 1.1.4.2 skrll
301 1.1.4.2 skrll #define TDESC_STA_DD 0x01
302 1.1.4.2 skrll
303 1.1.4.2 skrll #define TDESC_POPTS_TXSM 0x02
304 1.1.4.2 skrll #define TDESC_POPTS_IXSM 0x01
305 1.1.4.2 skrll /*
306 1.1.4.2 skrll * Receive descriptor definitions.
307 1.1.4.2 skrll */
308 1.1.4.2 skrll struct dge_rdes {
309 1.1.4.2 skrll uint32_t dr_baddrl; /* Lower 32 bits of buffer address */
310 1.1.4.2 skrll uint32_t dr_baddrh; /* Upper 32 bits of buffer address */
311 1.1.4.2 skrll uint16_t dr_len; /* Length of receive packet */
312 1.1.4.2 skrll uint16_t dr_cksum; /* Packet checksum */
313 1.1.4.2 skrll uint8_t dr_status; /* Received data status info */
314 1.1.4.2 skrll uint8_t dr_errors; /* Receive errors */
315 1.1.4.2 skrll uint16_t dr_special; /* VLAN (802.1q) information */
316 1.1.4.2 skrll } __attribute__((__packed__));
317 1.1.4.2 skrll
318 1.1.4.2 skrll #define RDESC_STS_PIF 0x80 /* Exact filter match */
319 1.1.4.2 skrll #define RDESC_STS_IPCS 0x40 /* IP Checksum calculated */
320 1.1.4.2 skrll #define RDESC_STS_TCPCS 0x20 /* TCP checksum calculated */
321 1.1.4.2 skrll #define RDESC_STS_VP 0x08 /* Packet is 802.1q */
322 1.1.4.2 skrll #define RDESC_STS_IXSM 0x04 /* Ignore checksum */
323 1.1.4.2 skrll #define RDESC_STS_EOP 0x02 /* End of packet */
324 1.1.4.2 skrll #define RDESC_STS_DD 0x01 /* Descriptor done */
325 1.1.4.2 skrll
326 1.1.4.2 skrll #define RDESC_ERR_RXE 0x80 /* RX data error */
327 1.1.4.2 skrll #define RDESC_ERR_IPE 0x40 /* IP checksum error */
328 1.1.4.2 skrll #define RDESC_ERR_TCPE 0x20 /* TCP/UDP checksum error */
329 1.1.4.2 skrll #define RDESC_ERR_P 0x08 /* Parity error */
330 1.1.4.2 skrll #define RDESC_ERR_SE 0x02 /* Symbol error */
331 1.1.4.2 skrll #define RDESC_ERR_CE 0x01 /* CRC/Alignment error */
332