Merge remote-tracking branch 'origin/master'
[unleashed/lotheac.git] / usr / src / uts / common / io / dmfe / dmfe.h
blobc2080468481774202146ffe7a1499578aa4092e4
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _SYS_DMFE_H
27 #define _SYS_DMFE_H
29 #pragma ident "%Z%%M% %I% %E% SMI"
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
35 /* Chip ID */
36 #define DAVICOM_VENDOR_ID 0x1282
37 #define DEVICE_ID_9100 0x9100
38 #define DEVICE_ID_9132 0x9132
39 /* The 9102 and 9102A are distinguished by revision ID */
40 #define DEVICE_ID_9102 0x9102
41 #define DEVICE_ID_9102A 0x9102
43 /* Streams */
44 #define DMFEHIWAT 32768 /* driver flow control high water */
45 #define DMFELOWAT 4096 /* driver flow control low water */
46 #define DMFEIDNUM 0 /* DMFE Id; zero works */
48 /* Size/count parameters */
49 #define SROM_SIZE 128
50 #define SETUPBUF_SIZE 192 /* Setup buffer size in bytes */
51 #define MCASTBUF_SIZE 512 /* multicast hash table size in bits */
52 #define HASH_POLY 0x04C11DB6
53 #define HASH_CRC 0xFFFFFFFFU
54 #define SETUPBUF_PHYS 39 /* word offset of station physical */
55 /* address within setup buffer */
59 * Tx/Rx descriptor ring entry formats
61 * These structures are not actually used; they are just here to show
62 * the layout of the descriptor entries used by the DMFE chip hardware
63 * (we do use "sizeof" these structures). The code uses the #defined
64 * offsets below to access the various members of the descriptors, via
65 * the DDI access functions (remember the DMFE h/w is little-endian).
68 struct rx_desc_type {
69 uint32_t desc0;
70 uint32_t desc1;
71 uint32_t buffer1;
72 uint32_t rd_next;
75 struct tx_desc_type {
76 uint32_t desc0;
77 uint32_t desc1;
78 uint32_t buffer1;
79 uint32_t td_next;
83 * Offsets & sizes for tx/rx descriptors, expressed in (d)words
85 #define DESC0 0
86 #define DESC1 1
87 #define BUFFER1 2
88 #define RD_NEXT 3
89 #define TD_NEXT 3
90 #define DESC_SIZE 4
93 * Receive descriptor description
95 /* desc0 bit definitions */
96 #define RX_OVERFLOW (1UL<<0)
97 #define RX_CRC (1UL<<1)
98 #define RX_DRIBBLING (1UL<<2)
99 #define RX_MII_ERR (1UL<<3)
100 #define RX_RCV_WD_TO (1UL<<4)
101 #define RX_FRAME_TYPE (1UL<<5)
102 #define RX_COLLISION (1UL<<6)
103 #define RX_FRAME2LONG (1UL<<7)
104 #define RX_LAST_DESC (1UL<<8)
105 #define RX_FIRST_DESC (1UL<<9)
106 #define RX_MULTI_FRAME (1UL<<10)
107 #define RX_RUNT_FRAME (1UL<<11)
108 #define RX_LOOP_MODE (3UL<<12)
109 #define RX_DESC_ERR (1UL<<14)
110 #define RX_ERR_SUMMARY (1UL<<15)
111 #define RX_FRAME_LEN (0x3fffUL<<16)
112 #define RX_FILTER_FAIL (1UL<<30)
113 #define RX_OWN (1UL<<31)
115 /* desc1 bit definitions */
116 #define RX_BUFFER_SIZE (0x7ff)
117 #define RX_CHAINING (1UL<<24)
118 #define RX_END_OF_RING (1UL<<25)
121 * Transmit descriptor description
123 /* desc0 bit definitions */
124 #define TX_DEFERRED (1UL<<0)
125 #define TX_UNDERFLOW (1UL<<1)
126 #define TX_LINK_FAIL (1UL<<2)
127 #define TX_COLL_COUNT (0xfUL<<3)
128 #define TX_HEARTBEAT_FAIL (1UL<<7)
129 #define TX_EXCESS_COLL (1UL<<8)
130 #define TX_LATE_COLL (1UL<<9)
131 #define TX_NO_CARRIER (1UL<<10)
132 #define TX_CARRIER_LOSS (1UL<<11)
133 #define TX_JABBER_TO (1UL<<14)
134 #define TX_ERR_SUMMARY (1UL<<15)
135 #define TX_SPARE (0x7fffUL<<16)
136 #define TX_OWN (1UL<<31)
138 /* desc1 bit definitions */
139 #define TX_BUFFER_SIZE1 (0x7ffUL<<0)
140 #define TX_BUFFER_SIZE2 (0x7ffUL<<11)
141 #define TX_FILTER_TYPE0 (1UL<<22)
142 #define TX_DISABLE_PAD (1UL<<23)
143 #define TX_CHAINING (1UL<<24)
144 #define TX_END_OF_RING (1UL<<25)
145 #define TX_CRC_DISABLE (1UL<<26)
146 #define TX_SETUP_PACKET (1UL<<27)
147 #define TX_FILTER_TYPE1 (1UL<<28)
148 #define TX_FIRST_DESC (1UL<<29)
149 #define TX_LAST_DESC (1UL<<30)
150 #define TX_INT_ON_COMP (1UL<<31)
153 /* Device-defined PCI config space registers */
154 #define PCI_DMFE_CONF_CFDD 0x40
155 #define CFDD_SNOOZE (1UL<<30)
156 #define CFDD_SLEEP (1UL<<31)
159 /* Operating registers in I/O or MEMORY space */
160 #define BUS_MODE_REG 0x00
161 #define TX_POLL_REG 0x08
162 #define RX_POLL_REG 0x10
163 #define RX_BASE_ADDR_REG 0x18
164 #define TX_BASE_ADDR_REG 0x20
165 #define STATUS_REG 0x28
166 #define OPN_MODE_REG 0x30
167 #define INT_MASK_REG 0x38
168 #define MISSED_FRAME_REG 0x40
169 #define ETHER_ROM_REG 0x48
170 #define BOOT_ROM_REG 0x50
171 #define GP_TIMER_REG 0x58
172 #define PHY_STATUS_REG 0x60
173 #define FRAME_ACCESS_REG 0x68
174 #define FRAME_DATA_REG 0x70
175 #define W_J_TIMER_REG 0x78
178 /* Bit descriptions of CSR registers */
180 /* BUS_MODE_REG, CSR0 */
181 #define SW_RESET 0x00000001
182 #define BURST_SIZE 0 /* unlimited burst length */
183 #define CACHE_ALIGN (3 << 14) /* 32 Dwords */
184 #define TX_POLL_INTVL (1 << 17) /* 200us polling */
185 #define READ_MULTIPLE (1 << 21) /* use Memory Read */
186 /* Multiple PCI cycles */
188 /* STATUS_REG, CSR5 */
189 #define TX_PKTDONE_INT 0x00000001UL
190 #define TX_STOPPED_INT 0x00000002UL
191 #define TX_ALLDONE_INT 0x00000004UL
192 #define TX_JABBER_INT 0x00000008UL
193 #define TX_RESERVED_INT 0x00000010UL
194 #define TX_UNDERFLOW_INT 0x00000020UL
196 #define RX_PKTDONE_INT 0x00000040UL
197 #define RX_UNAVAIL_INT 0x00000080UL
198 #define RX_STOPPED_INT 0x00000100UL
199 #define RX_WATCHDOG_INT 0x00000200UL
201 #define TX_EARLY_INT 0x00000400UL
202 #define GP_TIMER_INT 0x00000800UL
203 #define LINK_STATUS_INT 0x00001000UL
204 #define SYSTEM_ERR_INT 0x00002000UL
205 #define RX_EARLY_INT 0x00004000UL
207 #define ABNORMAL_SUMMARY_INT 0x00008000UL
208 #define NORMAL_SUMMARY_INT 0x00010000UL
209 #define INT_STATUS_MASK 0x0001ffffUL
211 #define RX_PROCESS_STOPPED 0x00000000UL
212 #define RX_PROCESS_FETCH_DESC 0x00020000UL
213 #define RX_PROCESS_WAIT_PKT 0x00040000UL
214 #define RX_PROCESS_STORE_DATA 0x00060000UL
215 #define RX_PROCESS_CLOSE_OWNER 0x00080000UL
216 #define RX_PROCESS_CLOSE_STATUS 0x000a0000UL
217 #define RX_PROCESS_SUSPEND 0x000c0000UL
218 #define RX_PROCESS_PURGE 0x000e0000UL
219 #define RX_PROCESS_STATE_MASK 0x000e0000UL
220 #define TX_PROCESS_STOPPED 0x00000000UL
221 #define TX_PROCESS_FETCH_DESC 0x00100000UL
222 #define TX_PROCESS_FETCH_SETUP 0x00200000UL
223 #define TX_PROCESS_FETCH_DATA 0x00300000UL
224 #define TX_PROCESS_CLOSE_OWNER 0x00400000UL
225 #define TX_PROCESS_WAIT_END 0x00500000UL
226 #define TX_PROCESS_CLOSE_STATUS 0x00600000UL
227 #define TX_PROCESS_SUSPEND 0x00700000UL
228 #define TX_PROCESS_STATE_MASK 0x00700000UL
229 #define SYSTEM_ERR_BITS 0x03800000UL
230 #define SYSTEM_ERR_PARITY 0x00000000UL
231 #define SYSTEM_ERR_M_ABORT 0x00800000UL
232 #define SYSTEM_ERR_T_ABORT 0x01000000UL
234 #define RX_PROCESS_STATE(csr5) (((csr5) & RX_PROCESS_STATE_MASK) >> 17)
235 #define RX_PROCESS_MAX_STATE 7
236 #define TX_PROCESS_STATE(csr5) (((csr5) & TX_PROCESS_STATE_MASK) >> 20)
237 #define TX_PROCESS_MAX_STATE 7
239 /* OPN_REG , CSR6 */
240 #define HASH_FILTERING (1UL<<0)
241 #define START_RECEIVE (1UL<<1)
242 #define HASH_ONLY (1UL<<2)
243 #define PASSBAD (1UL<<3)
244 #define INV_FILTER (1UL<<4)
245 #define PROMISC_MODE (1UL<<6)
246 #define PASS_MULTICAST (1UL<<7)
247 #define FULL_DUPLEX (1UL<<9)
248 #define LOOPBACK_OFF (0UL<<10)
249 #define LOOPBACK_INTERNAL (1UL<<10)
250 #define LOOPBACK_PHY_D (2UL<<10)
251 #define LOOPBACK_PHY_A (3UL<<10)
252 #define LOOPBACK_MODE_MASK (3UL<<10)
253 #define FORCE_COLLISION (1UL<<12)
254 #define START_TRANSMIT (1UL<<13)
255 #define TX_THRESHOLD_LOW (0UL<<14)
256 #define TX_THRESHOLD_MID (1UL<<14)
257 #define TX_THRESHOLD_HI (2UL<<14)
258 #define TX_THRESHOLD_MASK (3UL<<14)
259 #define ONE_PKT_MODE (1UL<<16)
260 #define EXT_MII_IF (1UL<<18)
261 #define START_TX_IMMED (1UL<<20)
262 #define STORE_AND_FORWARD (1UL<<21)
263 #define TX_THRESHOLD_MODE (1UL<<22)
264 #define OPN_25_MB1 (1UL<<25)
265 #define NO_RX_PURGE (1UL<<29)
266 #define RECEIVEALL (1UL<<30)
268 /* INT_MASK_REG , CSR7 */
270 * Use the values defined for the INT_STATUS_MASK bits (0..16)
271 * of CSR5. The remaining bits (17..31) are not used.
274 /* MISSED_FRAME_REG, CSR8 */
275 #define MISSED_FRAME_MASK 0x00000ffffUL
276 #define MISSED_OVERFLOW 0x000010000UL
277 #define PURGED_PACKET_MASK 0x07ffe0000UL
278 #define PURGED_OVERFLOW 0x080000000UL
280 /* Serial ROM/MII Register CSR9 */
281 #define SEL_CHIP 0x00000001UL
282 #define SEL_CLK 0x00000002UL
283 #define DATA_IN 0x00000004UL
284 #define DATA_OUT 0x00000008UL
285 #define SER_8_MB1 0x00000300UL
286 #define SEL_XRS 0x00000400UL
287 #define SEL_EEPROM 0x00000800UL
288 #define SEL_BOOTROM 0x00001000UL
289 #define WRITE_OP 0x00002000UL
290 #define READ_OP 0x00004000UL
291 #define SER_15_MB1 0x00008000UL
292 #define READ_EEPROM (READ_OP | SEL_EEPROM)
293 #define READ_EEPROM_CS (READ_OP | SEL_EEPROM | SEL_CHIP)
295 #define MII_CLOCK 0x00010000UL
296 #define MII_DATA_OUT 0x00020000UL
297 #define MII_DATA_OUT_SHIFT 17
298 #define MII_READ 0x00040000UL
299 #define MII_TRISTATE 0x00040000UL
300 #define MII_WRITE 0x00000000UL
301 #define MII_DATA_IN 0x00080000UL
302 #define MII_DATA_IN_SHIFT 19
304 #define RELOAD_EEPROM 0x00100000UL
305 #define LOADED_EEPROM 0x00200000UL
307 /* GPR Timer reg, CSR11 */
308 #define GPTIMER_CONT (1UL<<16)
310 /* PHY Status reg, CSR12 */
311 #define GPS_LINK_10 0x00000001UL
312 #define GPS_LINK_100 0x00000002UL
313 #define GPS_FULL_DUPLEX 0x00000004UL
314 #define GPS_LINK_STATUS 0x00000008UL
315 #define GPS_RX_LOCK 0x00000010UL
316 #define GPS_SIGNAL_DETECT 0x00000020UL
317 #define GPS_UTP_SIG 0x00000040UL
318 #define GPS_PHY_RESET 0x00000080UL
319 #define GPS_WRITE_ENABLE 0x00000100UL
321 /* Sample Frame Access reg, CSR13 */
322 #define TX_FIFO_ACCESS (0x32<<3)
323 #define RX_FIFO_ACCESS (0x35<<3)
324 #define DIAG_RESET (0x38<<3)
326 /* Sample Frame Data reg, CSR14, when CSR13 is set to DIAG_RESET */
327 #define DIAG_TX_FIFO_WRITE_0 0x00000001UL
328 #define DIAG_TX_FIFO_READ_0 0x00000002UL
329 #define DIAG_RX_FIFO_WRITE_0 0x00000004UL
330 #define DIAG_RX_FIFO_READ_0 0x00000008UL
331 #define DIAG_TX_FIFO_WRITE_100 0x00000020UL
332 #define DIAG_RX_FIFO_WRITE_100 0x00000040UL
334 /* CSR15 */
335 #define TX_JABBER_DISABLE 0x00000001UL
336 #define UNJABBER_INTERVAL 0x00000002UL
337 #define JABBER_CLOCK 0x00000004UL
338 #define WD_TIMER_DISABLE 0x00000010UL
339 #define WD_TIMER_RELEASE 0x00000020UL
340 #define VLAN_ENABLE 0x00000040UL
341 #define PAUSE_STATUS_1 0x00000080UL
342 #define PAUSE_STATUS_2 0x00000200UL
343 #define FLOW_CONTROL 0x00000400UL
344 #define PAUSE_ENABLE_1 0x00000800UL
345 #define PAUSE_ENABLE_2 0x00001000UL
346 #define PAUSE_TX_FFFF 0x00002000UL
347 #define PAUSE_TX_0000 0x00004000UL
348 #define PAUSE_CONDITION 0x00008000UL
349 #define RX_FIFO_THRES_MASK 0x003f0000UL
350 #define RX_EARLY_THRES_MASK 0x01c00000UL
353 /* SROM access definitions */
354 #define HIGH_ADDRESS_BIT 0x20 /* 6 bits */
355 #define HIGH_CMD_BIT 0x4 /* 3 bits */
356 #define HIGH_DATA_BIT 0x8000 /* 16 bits */
357 #define SROM_DELAY 5 /* 5 microseconds */
358 #define EEPROM_READ_CMD 6
359 #define EEPROM_EN_ADDR 20
361 /* MII access definitions */
362 #define MII_REG_ADDR_SHIFT 18
363 #define MII_PHY_ADDR_SHIFT 23
364 #define MII_DELAY 1 /* 1 microsecond */
365 #define MII_PREAMBLE 0xffffffffUL
366 #define MII_READ_FRAME 0x60000000UL
367 #define MII_WRITE_FRAME 0x50020000UL
370 /* DMFE IOCTLS */
371 #define ND_BASE ('N' << 8) /* base */
372 #define ND_GET (ND_BASE + 0) /* Get a value */
373 #define ND_SET (ND_BASE + 1) /* Set a value */
375 #define DMFE_ND_GET ND_GET
376 #define DMFE_ND_SET ND_SET
378 #define DMFEIOC ('G' << 8)
379 #define DMFE_SET_LOOP_MODE (DMFEIOC|1)
380 #define DMFE_GET_LOOP_MODE (DMFEIOC|2)
382 /* argument structure for above */
383 typedef struct {
384 int loopback;
385 } loopback_t;
387 #define DMFE_LOOPBACK_OFF 0
388 #define DMFE_PHY_A_LOOPBACK_ON 1
389 #define DMFE_PHY_D_LOOPBACK_ON 2
390 #define DMFE_INT_LOOPBACK_ON 4
391 #define DMFE_LOOPBACK_MODES 7 /* Bitwise OR of above */
393 #ifdef __cplusplus
395 #endif
397 #endif /* _SYS_DMFE_H */