summaryrefslogtreecommitdiff
path: root/sys/dev/ic/i82596reg.h
blob: 1fae6e86802e4d8bb2ac399bc5904293c28b3fe5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
/* $NetBSD: i82596reg.h,v 1.4 2008/04/05 08:42:35 skrll Exp $ */

/*
 * Copyright (c) 2003 Jochen Kunz.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of Jochen Kunz may not be used to endorse or promote
 *    products derived from this software without specific prior
 *    written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY JOCHEN KUNZ
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL JOCHEN KUNZ
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/* All definitions are for a Intel 82596 DX/SX / CA in linear 32 bit mode. */

#define IEE_SYSBUS_BE	0x80	/* == 1 32 bit pointers are big endian */
#define IEE_SYSBUS_INT	0x20	/* == 1 interrupt pin is active low */
#define IEE_SYSBUS_LOCK	0x10	/* == 1 lock function disabled */
#define IEE_SYSBUS_TRG	0x08	/* == 1 external triggering of bus throttle */
#define IEE_SYSBUS_M1	0x04	/* M1 == 0 && M0 == 0 82586 mode */
#define IEE_SYSBUS_M0	0x02	/* M1 == 0 && M0 == 1 32 bit segmented mode */
				/* M1 == 1 && M0 == 0 linear mode */
				/* M1 == 1 && M0 == 1 reserved */
#define IEE_SYSBUS_M	0x06	/* mode mask */
#define IEE_SYSBUS_82586	0x00	/* 82586 mode */
#define IEE_SYSBUS_32SEG	0x02	/* 32 bit segmented mode */
#define IEE_SYSBUS_LIEAR	0x04	/* linear mode */
#define IEE_SYSBUS_STD	0x40	/* must be 1 all times */

#define IEE_PORT_RESET	0x0	/* PORT command reset */
#define IEE_PORT_SEFTST	0x1	/* PORT command self test */
#define IEE_PORT_SCP	0x2	/* PORT command set SCP */
#define IEE_PORT_DUMP	0x3	/* PORT command dump aread pointer */

/* System Control Block Command word.*/
#define IEE_SCB_ACK_CX	0x8000	/* CU completed an Action */
#define IEE_SCB_ACK_FR	0x4000	/* RU received a frame */
#define IEE_SCB_ACK_CNA	0x2000	/* CU became not active */
#define IEE_SCB_ACK_RNR	0x1000	/* RU became not active */
#define IEE_SCB_ACK	0xf000	/* Acknowledge mask */

#define IEE_SCB_CUC_NOP	0x0000	/* NOP, does not affect state of unit */
#define IEE_SCB_CUC_EXE	0x0100	/* Start execution of CMD on CBL */
#define IEE_SCB_CUC_RES	0x0200	/* Resume operat. of CU after suspend */
#define IEE_SCB_CUC_SUS	0x0300	/* Suspend exec. of cmds on CBL */
#define IEE_SCB_CUC_ABR	0x0400	/* Abort current command */
#define IEE_SCB_CUC_BT	0x0500	/* Load Bus Throttle */
#define IEE_SCB_CUC_BTI	0x0600	/* Load Bus Throttle immediately */
#define IEE_SCB_CUC	0x0700	/* Command mask */

#define IEE_SCB_RESET	0x0080	/* Reset the Chip */

#define IEE_SCB_RUC_NOP	0x0000	/* NOP, does not affect state of unit */
#define IEE_SCB_RUC_ST	0x0010	/* Start reception of frames */
#define IEE_SCB_RUC_RES	0x0020	/* Resume operat. of RU after suspend */
#define IEE_SCB_RUC_SUS	0x0030	/* Suspend frame reception */
#define IEE_SCB_RUC_ABR	0x0040	/* Abort receiver operat. immediately */
#define IEE_SCB_RUC	0x0070	/* Command mask */

/* System Control Block Status word.*/
#define IEE_SCB_STAT_CX	0x8000	/* CU finished cmd with int bit set */
#define IEE_SCB_STAT_FR	0x4000	/* RU finished receiving a frame */
#define IEE_SCB_STAT_CNA	0x2000	/* CU left active state */
#define IEE_SCB_STAT_RNR	0x1000	/* RU left ready state */
#define IEE_SCB_STAT		0xf000	/* Status mask */

#define IEE_SCB_CUS_IDL	0x0000	/* Idle */
#define IEE_SCB_CUS_SUS	0x0100	/* Suspend */
#define IEE_SCB_CUS_ACT	0x0200	/* Active */
#define IEE_SCB_CUS	0x0700	/* CU status bit mask */

#define IEE_SCB_RUS_IDL	0x0000	/* Idle */
#define IEE_SCB_RUS_SUS	0x0010	/* Suspend */
#define IEE_SCB_RUS_NR1	0x0020	/* No Resources (RFDs and / or RBDs) */
#define IEE_SCB_RUS_RDY	0x0040	/* Ready */
#define IEE_SCB_RUS_NR2	0x00a0	/* No Resources (no RBDs) */
#define IEE_SCB_RUS_NR3	0x00c0	/* No more RBDs */
#define IEE_SCB_RUS	0x00f0	/* RU status bit mask */

#define IEE_SCB_T	0x0008	/* Bus Throttle timers loaded */

#define IEE_SCB_TON	0x0000ffff	/* Bus Throttle TON mask */
#define IEE_SCB_TOFF	0xffff0000	/* Bus Throttle TOFF mask */

/* Bits in the Command Block Command word. */
#define IEE_CB_EL	0x8000	/* End of List, cmd is last on CBL */
#define IEE_CB_S	0x4000	/* Suspend after exec of this CB */
#define IEE_CB_I	0x2000	/* generate Interrupt after exec */
#define IEE_CB_NC	0x0010	/* No CRC insertion disable */
#define IEE_CB_SF	0x0008	/* Flexible Mode, data in TCB and TBD */

/* Bits in the Command Block Status word. */
#define IEE_CB_C	0x8000	/* Command is executed */
#define IEE_CB_B	0x4000	/* Command running or fetching CB */
#define IEE_CB_OK	0x2000	/* Command finished without error */
#define IEE_CB_A	0x1000	/* CU Abort control cmd was issued */
#define IEE_CB_F	0x0800	/* self test failed */
#define IEE_CB_EOF	0x8000	/* End Of Frame */
#define IEE_CB_STAT	0xf800	/* Status bit mask */
#define IEE_CB_COL	0x0020	/* TX stopped because of to much collisions */
#define IEE_CB_MAXCOL	0x000f	/* Number of Collisions mask */
/* Commands */
#define IEE_CB_CMD_NOP	0x0000	/* NOP */
#define IEE_CB_CMD_IAS	0x0001	/* Individual Address Setup */
#define IEE_CB_CMD_CONF	0x0002	/* Configure */
#define IEE_CB_CMD_MCS	0x0003	/* Multicast Setup */
#define IEE_CB_CMD_TR	0x0004	/* Transmit */
#define IEE_CB_CMD_TDR	0x0005	/* Time Domain Reflectometry */
#define IEE_CB_CMD_DUMP	0x0006	/* Dump */
#define IEE_CB_CMD_DIAG	0x0007	/* Diagnose */
#define IEE_CB_CMD	0x0007	/* CMD bit mask */

/* Receive Frame Descriptor bits */
#define IEE_RFD_EL	0x8000	/* End of List, RFD is last on list */
#define IEE_RFD_S	0x4000	/* Suspend after this RFD is filled */
#define IEE_RFD_SF	0x0008	/* Flexible Mode, data in RFD and RBD */
#define IEE_RFD_C	0x8000	/* Frame reception has completed */
#define IEE_RFD_B	0x4000	/* i82596 is busy on this RFD */
#define IEE_RFD_OK	0x2000	/* Frame received without error */
#define IEE_RFD_STAT	0x1fff	/* Status bits */
#define IEE_RFD_STAT_LEN	0x1000	/* Length error */
#define IEE_RFD_STAT_CRC	0x0800	/* CRC error */
#define IEE_RFD_STAT_ALIGN	0x0400	/* Alignment error */
#define IEE_RFD_STAT_NORES	0x0200	/* Ran out of buffer space */
#define IEE_RFD_STAT_DMA	0x0100	/* DMA Overrun */
#define IEE_RFD_STAT_SHORT	0x0080	/* Frame to short */
#define IEE_RFD_STAT_NOEOP	0x0040	/* No EOP Flag */
#define IEE_RFD_STAT_TRUNC	0x0020	/* Frame was truncated */
#define IEE_RFD_STAT_IA		0x0002	/* Frame doesn't match Individ. Addr. */
#define IEE_RFD_STAT_COLL	0x0001	/* Receive Collision */
#define IEE_RFD_EOF	0x8000		/* this is last buffer on list */
#define IEE_RFD_F	0x4000		/* buffer has already been used */
#define IEE_RFD_COUNT	0xc000		/* count mask */

/* Receive Buffer Descriptor bits */
#define IEE_RBD_EOF	0x8000		/* last buffer related to frame */
#define IEE_RBD_F	0x4000		/* buffer has already been used */
#define IEE_RBD_EL	0x8000		/* this is last buffer on list */
#define IEE_RBD_P	0x4000		/* this buffer is already prefetched */
#define IEE_RBD_COUNT	0x3fff		/* count mask */

/* Bits in Configure Bytes */
#define IEE_CF_0_CNT(x)		((x) & 0x0f)	/* Count of CF Bytes */
#define IEE_CF_0_CNT_DEF	0x0e	/* 14 Bytes is the default */
#define IEE_CF_0_CNT_M		0x0f	/* Mask */
#define IEE_CF_0_PREF		0x80	/* Write Prefetched bit */
#define IEE_CF_0_DEF		0x0e	/* Configuration Byte 0 Default Value */

#define IEE_CF_1_FIFO(x)	((x) & 0x0f)	/* FIFO Limit */
#define IEE_CF_1_FIFO_DEF	0x08	/* FIFO Default Value */
#define IEE_CF_1_MON2		(((x) & 0x3) << 6)	/* Monitor Bits */
#define IEE_CF_1_MON_DEF	0xc0	/* Monitor Bits Default */
#define IEE_CF_1_DEF		0xc8	/* Configuration Byte 1 Default Value */

#define IEE_CF_2_SAVBF		0x02	/* Save Bad frames */
#define IEE_CF_2_RESUM		0x80	/* Resume next CB */
#define IEE_CF_2_DEF		0x40	/* Configuration Byte 2 Default Value */
#define IEE_CF_2_STD		0x40	/* Configuration Byte 2 Standard Val. */

#define IEE_CF_3_ADDRLEN(x)	((x) & 0x07)	/* Address Length */
#define IEE_CF_3_ADDRLEN_DEF	0x06	/* Address Length Default */
#define IEE_CF_3_NSAI		0x08	/* No Source Address Insertion */
#define IEE_CF_3_ALLOC		0x08	/* == AL_LOC */
#define IEE_CF_3_PREAMLEN(x)	(((x) & 0x3) << 4)	/* Preamble Length */
#define IEE_CF_3_PREAMLEN_DEF	0x20	/*  */
#define IEE_CF_3_LOOPBK(x)	(((x) & 0x3) << 6)	/* Loopback Mode */
#define IEE_CF_3_LOOPBK_DEF	0x00	/*  */
#define IEE_CF_3_DEF		0x26	/* Configuration Byte 3 Default Value */

#define IEE_CF_4_LINPRIO(x)	((x) & 0x07)	/* Linear Priority */
#define IEE_CF_4_LINPRIO_DEF	0x00	/* Linear Priority */
#define IEE_CF_4_EXPPRIO(x)	(((x) & 0x07) << 4)	/* Exponential Prio. */
#define IEE_CF_4_EXPPRIO_DEF	0x00	/* Exponential Prio. */
#define IEE_CF_4_BOFMETD	0x80	/* Exponential Backoff Method */
#define IEE_CF_4_DEF		0x00	/* Configuration Byte 4 Default Value */

#define IEE_CF_5_IFSP(x)	((x) & 0xff)	/* Inter Frame Spacing */
#define IEE_CF_5_IFSP_DEF	0x60	/*  */
#define IEE_CF_5_DEF		0x60	/* Configuration Byte 5 Default Value */

#define IEE_CF_6_SLOT_TL(x) 	((x) & 0xff)	/* Slot Time Low */
#define IEE_CF_6_SLOT_TL_DEF	0x00	/*  */
#define IEE_CF_6_DEF		0x00	/* Configuration Byte 6 Default Value */

#define IEE_CF_7_SLOT_TH(x) 	((x) & 0x0f)	/* Slot Time High */
#define IEE_CF_7_SLOT_TH_DEF	0x02	/*  */
#define IEE_CF_7_RETR(x)	(((x) & 0x0f) << 4)	/* Num Retrans Retry */
#define IEE_CF_7_RETR_DEF	0xf0	/*  */
#define IEE_CF_7_DEF		0xf2	/* Configuration Byte 7 Default Value */

#define IEE_CF_8_PRM		0x01	/* Promiscuous Mode */
#define IEE_CF_8_BCDIS		0x02	/* Bradcast Disable */
#define IEE_CF_8_MANCH		0x04	/* Manchester encoding */
#define IEE_CF_8_TONO		0x08	/* Transmit on no CRS */
#define IEE_CF_8_NOCRCINS	0x10	/* No CRC Insertion */
#define IEE_CF_8_CRC16		0x20	/* CRC16 */
#define IEE_CF_8_BITSTF		0x40	/* Bit Stuffing */
#define IEE_CF_8_PAD		0x80	/* Padding */
#define IEE_CF_8_DEF		0x00	/* Configuration Byte 8 Default Value */

#define IEE_CF_9_CRSF(x)	((x) & 0x07)	/* Carrier Sense Filter Len */
#define IEE_CF_9_CRSF_DEF	0x00	/*  */
#define IEE_CF_9_CRSSRC		0x08	/* Carrier Sense Source */
#define IEE_CF_9_CDTF(x)	(((x) & 0x07) << 4)/* Carrier Detect Filt Len */
#define IEE_CF_9_CDTF_DEF	0x00	/*  */
#define IEE_CF_9_CDTSRC		0x80	/* Carrier Detect Source */
#define IEE_CF_9_DEF		0x00	/* Configuration Byte 9 Default Value */

#define IEE_CF_10_MINFRMLEN(x)	((x) & 0xff)	/* Minimum Frame Length */
#define IEE_CF_10_DEF		0x40	/* Configuration Byte 10 Default Val. */

#define IEE_CF_11_PRECRS	0x01	/* Preamble until Carrier Sense */
#define IEE_CF_11_LNGFLD	0x02	/* Length field. Enable padding */
#define IEE_CF_11_CRCINM	0x04	/* Rx CRC appended to the frame in MEM*/
#define IEE_CF_11_AUTOTX	0x08	/* Auto Retransmit when Coll in Preamb*/
#define IEE_CF_11_CDBSAC	0x10	/* Coll Detect by source Addr Recogn */
#define IEE_CF_11_MCALL		0x20	/* Enable to receive all MC Frames */
#define IEE_CF_11_MON(x)	(((x) & 0x03) << 6) /* Receive Monitor Bits */
#define IEE_CF_11_MON_DEF	0xc0	/*  */
#define IEE_CF_11_DEF		0xff	/* Configuration Byte 11 Default Val. */

#define IEE_CF_12_FDX		0x40	/* Enable Full Duplex */
#define IEE_CF_12_DEF		0x00	/* Configuration Byte 12 Default Val. */

#define IEE_CF_13_MULTIA	0x40	/* Multiple Individual Address */
#define IEE_CF_13_DISBOF	0x80	/* Disable the Backoff Algorithm */
#define IEE_CF_13_DEF		0x3f	/* Configuration Byte 13 Default Val. */