i82596reg.h revision 1.1 1 1.1 jkunz /* $NetBSD: i82596reg.h,v 1.1 2004/03/12 11:37:17 jkunz Exp $ */
2 1.1 jkunz
3 1.1 jkunz /*
4 1.1 jkunz * Copyright (c) 2003 Jochen Kunz.
5 1.1 jkunz * All rights reserved.
6 1.1 jkunz *
7 1.1 jkunz * Redistribution and use in source and binary forms, with or without
8 1.1 jkunz * modification, are permitted provided that the following conditions
9 1.1 jkunz * are met:
10 1.1 jkunz * 1. Redistributions of source code must retain the above copyright
11 1.1 jkunz * notice, this list of conditions and the following disclaimer.
12 1.1 jkunz * 2. Redistributions in binary form must reproduce the above copyright
13 1.1 jkunz * notice, this list of conditions and the following disclaimer in the
14 1.1 jkunz * documentation and/or other materials provided with the distribution.
15 1.1 jkunz * 3. The name of Jochen Kunz may not be used to endorse or promote
16 1.1 jkunz * products derived from this software without specific prior
17 1.1 jkunz * written permission.
18 1.1 jkunz *
19 1.1 jkunz * THIS SOFTWARE IS PROVIDED BY JOCHEN KUNZ
20 1.1 jkunz * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 1.1 jkunz * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 1.1 jkunz * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JOCHEN KUNZ
23 1.1 jkunz * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 1.1 jkunz * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 1.1 jkunz * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 1.1 jkunz * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 1.1 jkunz * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 1.1 jkunz * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 1.1 jkunz * POSSIBILITY OF SUCH DAMAGE.
30 1.1 jkunz */
31 1.1 jkunz
32 1.1 jkunz /* All definitions are for a Intel 82596 DX/SX / CA in linear 32 bit mode. */
33 1.1 jkunz
34 1.1 jkunz #define IEE_SYSBUS_BE 0x80 /* == 1 32 bit pointers are big endian */
35 1.1 jkunz #define IEE_SYSBUS_INT 0x20 /* == 1 interrupt pin is active low */
36 1.1 jkunz #define IEE_SYSBUS_LOCK 0x10 /* == 1 lock funtion disabled */
37 1.1 jkunz #define IEE_SYSBUS_TRG 0x08 /* == 1 external triggering of bus throtle */
38 1.1 jkunz #define IEE_SYSBUS_M1 0x04 /* M1 == 0 && M0 == 0 82586 mode */
39 1.1 jkunz #define IEE_SYSBUS_M0 0x02 /* M1 == 0 && M0 == 1 32 bit segmented mode */
40 1.1 jkunz /* M1 == 1 && M0 == 0 linear mode */
41 1.1 jkunz /* M1 == 1 && M0 == 1 reserved */
42 1.1 jkunz #define IEE_SYSBUS_M 0x06 /* mode mask */
43 1.1 jkunz #define IEE_SYSBUS_82586 0x00 /* 82586 mode */
44 1.1 jkunz #define IEE_SYSBUS_32SEG 0x02 /* 32 bit segmented mode */
45 1.1 jkunz #define IEE_SYSBUS_LIEAR 0x04 /* linear mode */
46 1.1 jkunz #define IEE_SYSBUS_STD 0x40 /* must be 1 all times */
47 1.1 jkunz
48 1.1 jkunz #define IEE_PORT_RESET 0x0 /* PORT command reset */
49 1.1 jkunz #define IEE_PORT_SEFTST 0x1 /* PORT command self test */
50 1.1 jkunz #define IEE_PORT_SCP 0x2 /* PORT command set SCP */
51 1.1 jkunz #define IEE_PORT_DUMP 0x3 /* PORT command dump aread pointer */
52 1.1 jkunz
53 1.1 jkunz /* System Control Block Command word.*/
54 1.1 jkunz #define IEE_SCB_ACK_CX 0x8000 /* CU completed an Action */
55 1.1 jkunz #define IEE_SCB_ACK_FR 0x4000 /* RU received a frame */
56 1.1 jkunz #define IEE_SCB_ACK_CNA 0x2000 /* CU became not active */
57 1.1 jkunz #define IEE_SCB_ACK_RNR 0x1000 /* RU became not active */
58 1.1 jkunz #define IEE_SCB_ACK 0xf000 /* Acknowledge mask */
59 1.1 jkunz
60 1.1 jkunz #define IEE_SCB_CUC_NOP 0x0000 /* NOP, does not affect state of unit */
61 1.1 jkunz #define IEE_SCB_CUC_EXE 0x0100 /* Start execution off CMD on CBL */
62 1.1 jkunz #define IEE_SCB_CUC_RES 0x0200 /* Resume operat. of CU after suspend */
63 1.1 jkunz #define IEE_SCB_CUC_SUS 0x0300 /* Suspend exec. of cmds on CBL */
64 1.1 jkunz #define IEE_SCB_CUC_ABR 0x0400 /* Abort current command */
65 1.1 jkunz #define IEE_SCB_CUC_BT 0x0500 /* Load Bus Throtle */
66 1.1 jkunz #define IEE_SCB_CUC_BTI 0x0600 /* Load Bus Throtle immediately */
67 1.1 jkunz #define IEE_SCB_CUC 0x0700 /* Command mask */
68 1.1 jkunz
69 1.1 jkunz #define IEE_SCB_RESET 0x0080 /* Reset the Chip */
70 1.1 jkunz
71 1.1 jkunz #define IEE_SCB_RUC_NOP 0x0000 /* NOP, does not affect state of unit */
72 1.1 jkunz #define IEE_SCB_RUC_ST 0x0010 /* Start reception of frames */
73 1.1 jkunz #define IEE_SCB_RUC_RES 0x0020 /* Resume operat. of RU after suspend */
74 1.1 jkunz #define IEE_SCB_RUC_SUS 0x0030 /* Suspend frame reception */
75 1.1 jkunz #define IEE_SCB_RUC_ABR 0x0040 /* Abort receiver operat. immediately */
76 1.1 jkunz #define IEE_SCB_RUC 0x0070 /* Command mask */
77 1.1 jkunz
78 1.1 jkunz /* System Control Block Status word.*/
79 1.1 jkunz #define IEE_SCB_STAT_CX 0x8000 /* CU finished cmd with int bit set */
80 1.1 jkunz #define IEE_SCB_STAT_FR 0x4000 /* RU finished receiving a frame */
81 1.1 jkunz #define IEE_SCB_STAT_CNA 0x2000 /* CU left active state */
82 1.1 jkunz #define IEE_SCB_STAT_RNR 0x1000 /* RU left ready state */
83 1.1 jkunz #define IEE_SCB_STAT 0xf000 /* Status mask */
84 1.1 jkunz
85 1.1 jkunz #define IEE_SCB_CUS_IDL 0x0000 /* Idle */
86 1.1 jkunz #define IEE_SCB_CUS_SUS 0x0100 /* Suspend */
87 1.1 jkunz #define IEE_SCB_CUS_ACT 0x0200 /* Active */
88 1.1 jkunz #define IEE_SCB_CUS 0x0700 /* CU status bit mask */
89 1.1 jkunz
90 1.1 jkunz #define IEE_SCB_RUS_IDL 0x0000 /* Idle */
91 1.1 jkunz #define IEE_SCB_RUS_SUS 0x0010 /* Suspend */
92 1.1 jkunz #define IEE_SCB_RUS_NR1 0x0020 /* No Resources (RFDs and / or RBDs) */
93 1.1 jkunz #define IEE_SCB_RUS_RDY 0x0040 /* Ready */
94 1.1 jkunz #define IEE_SCB_RUS_NR2 0x00a0 /* No Resources (no RBDs) */
95 1.1 jkunz #define IEE_SCB_RUS_NR3 0x00c0 /* No more RBDs */
96 1.1 jkunz #define IEE_SCB_RUS 0x00f0 /* RU status bit mask */
97 1.1 jkunz
98 1.1 jkunz #define IEE_SCB_T 0x0008 /* Bus Throtle timers loaded */
99 1.1 jkunz
100 1.1 jkunz #define IEE_SCB_TON 0x0000ffff /* Bus Throtle TON mask */
101 1.1 jkunz #define IEE_SCB_TOFF 0xffff0000 /* Bus Throtle TOFF mask */
102 1.1 jkunz
103 1.1 jkunz /* Bits in the Command Block Command word. */
104 1.1 jkunz #define IEE_CB_EL 0x8000 /* End of List, cmd is last on CBL */
105 1.1 jkunz #define IEE_CB_S 0x4000 /* Suspend after exec of this CB */
106 1.1 jkunz #define IEE_CB_I 0x2000 /* generate Interrupt after exec */
107 1.1 jkunz #define IEE_CB_NC 0x0010 /* No CRC insertaton disable */
108 1.1 jkunz #define IEE_CB_SF 0x0008 /* Flexible Mode, data in TCB and TBD */
109 1.1 jkunz
110 1.1 jkunz /* Bits in the Command Block Status word. */
111 1.1 jkunz #define IEE_CB_C 0x8000 /* Command is executed */
112 1.1 jkunz #define IEE_CB_B 0x4000 /* Command running or fetching CB */
113 1.1 jkunz #define IEE_CB_OK 0x2000 /* Command finished without error */
114 1.1 jkunz #define IEE_CB_A 0x1000 /* CU Abort control cmd was issued */
115 1.1 jkunz #define IEE_CB_F 0x0800 /* self test faild */
116 1.1 jkunz #define IEE_CB_EOF 0x8000 /* End Of Frame */
117 1.1 jkunz #define IEE_CB_STAT 0xf800 /* Status bit mask */
118 1.1 jkunz #define IEE_CB_COL 0x0020 /* TX stopped because of to much collisions */
119 1.1 jkunz #define IEE_CB_MAXCOL 0x000f /* Number of Collisions mask */
120 1.1 jkunz /* Commands */
121 1.1 jkunz #define IEE_CB_CMD_NOP 0x0000 /* NOP */
122 1.1 jkunz #define IEE_CB_CMD_IAS 0x0001 /* Individual Address Setup */
123 1.1 jkunz #define IEE_CB_CMD_CONF 0x0002 /* Configure */
124 1.1 jkunz #define IEE_CB_CMD_MCS 0x0003 /* Multicast Setup */
125 1.1 jkunz #define IEE_CB_CMD_TR 0x0004 /* Transmit */
126 1.1 jkunz #define IEE_CB_CMD_TDR 0x0005 /* Time Domain Reflectometry */
127 1.1 jkunz #define IEE_CB_CMD_DUMP 0x0006 /* Dump */
128 1.1 jkunz #define IEE_CB_CMD_DIAG 0x0007 /* Diagnose */
129 1.1 jkunz #define IEE_CB_CMD 0x0007 /* CMD bit mask */
130 1.1 jkunz
131 1.1 jkunz /* Receive Frame Descriptor bits */
132 1.1 jkunz #define IEE_RFD_EL 0x8000 /* End of List, RFD is last on list */
133 1.1 jkunz #define IEE_RFD_S 0x4000 /* Suspend after this RFD is filled */
134 1.1 jkunz #define IEE_RFD_SF 0x0008 /* Flexible Mode, data in RFD and RBD */
135 1.1 jkunz #define IEE_RFD_C 0x8000 /* Frame reception has completed */
136 1.1 jkunz #define IEE_RFD_B 0x4000 /* i82596 is bussy on this RFD */
137 1.1 jkunz #define IEE_RFD_OK 0x2000 /* Frame received without error */
138 1.1 jkunz #define IEE_RFD_STAT 0x1fff /* Status bits */
139 1.1 jkunz #define IEE_RFD_STAT_LEN 0x1000 /* Lenghth error */
140 1.1 jkunz #define IEE_RFD_STAT_CRC 0x0800 /* CRC error */
141 1.1 jkunz #define IEE_RFD_STAT_ALIGN 0x0400 /* Alignment error */
142 1.1 jkunz #define IEE_RFD_STAT_NORES 0x0200 /* Ran out of buffer space */
143 1.1 jkunz #define IEE_RFD_STAT_DMA 0x0100 /* DMA Overrun */
144 1.1 jkunz #define IEE_RFD_STAT_SHORT 0x0080 /* Frame to short */
145 1.1 jkunz #define IEE_RFD_STAT_NOEOP 0x0040 /* No EOP Flag */
146 1.1 jkunz #define IEE_RFD_STAT_TRUNC 0x0020 /* Frame was truncated */
147 1.1 jkunz #define IEE_RFD_STAT_IA 0x0002 /* Frame doesn't match Individ. Addr. */
148 1.1 jkunz #define IEE_RFD_STAT_COLL 0x0001 /* Receive Collision */
149 1.1 jkunz #define IEE_RFD_EOF 0x8000 /* this is last buffer on list */
150 1.1 jkunz #define IEE_RFD_F 0x4000 /* buffer has already been used */
151 1.1 jkunz #define IEE_RFD_COUNT 0xc000 /* count mask */
152 1.1 jkunz
153 1.1 jkunz /* Receive Buffer Descriptor bits */
154 1.1 jkunz #define IEE_RBD_EOF 0x8000 /* last buffer related to frame */
155 1.1 jkunz #define IEE_RBD_F 0x4000 /* buffer has already been used */
156 1.1 jkunz #define IEE_RBD_EL 0x8000 /* this is last buffer on list */
157 1.1 jkunz #define IEE_RBD_P 0x4000 /* this buffer is already prefetched */
158 1.1 jkunz #define IEE_RBD_COUNT 0x3fff /* count mask */
159 1.1 jkunz
160 1.1 jkunz /* Bits in Configure Bytes */
161 1.1 jkunz #define IEE_CF_0_CNT(x) ((x) & 0x0f) /* Count of CF Bytes */
162 1.1 jkunz #define IEE_CF_0_CNT_DEF 0x0e /* 14 Bytes is the default */
163 1.1 jkunz #define IEE_CF_0_CNT_M 0x0f /* Mask */
164 1.1 jkunz #define IEE_CF_0_PREF 0x80 /* Write Prefetched bit */
165 1.1 jkunz #define IEE_CF_0_DEF 0x0e /* Configuration Byte 0 Default Value */
166 1.1 jkunz
167 1.1 jkunz #define IEE_CF_1_FIFO(x) ((x) & 0x0f) /* FIFO Limit */
168 1.1 jkunz #define IEE_CF_1_FIFO_DEF 0x08 /* FIFO Default Value */
169 1.1 jkunz #define IEE_CF_1_MON2 (((x) & 0x3) << 6) /* Monitor Bits */
170 1.1 jkunz #define IEE_CF_1_MON_DEF 0xc0 /* Monitor Bits Default */
171 1.1 jkunz #define IEE_CF_1_DEF 0xc8 /* Configuration Byte 1 Default Value */
172 1.1 jkunz
173 1.1 jkunz #define IEE_CF_2_SAVBF 0x02 /* Save Bad frames */
174 1.1 jkunz #define IEE_CF_2_RESUM 0x80 /* Resume next CB */
175 1.1 jkunz #define IEE_CF_2_DEF 0x40 /* Configuration Byte 2 Default Value */
176 1.1 jkunz #define IEE_CF_2_STD 0x40 /* Configuration Byte 2 Standard Val. */
177 1.1 jkunz
178 1.1 jkunz #define IEE_CF_3_ADDRLEN(x) ((x) & 0x07) /* Address Length */
179 1.1 jkunz #define IEE_CF_3_ADDRLEN_DEF 0x06 /* Address Length Default */
180 1.1 jkunz #define IEE_CF_3_NSAI 0x08 /* No Source Address Insertation */
181 1.1 jkunz #define IEE_CF_3_ALLOC 0x08 /* == AL_LOC */
182 1.1 jkunz #define IEE_CF_3_PREAMLEN(x) (((x) & 0x3) << 4) /* Preamble Length */
183 1.1 jkunz #define IEE_CF_3_PREAMLEN_DEF 0x20 /* */
184 1.1 jkunz #define IEE_CF_3_LOOPBK(x) (((x) & 0x3) << 6) /* Loopback Mode */
185 1.1 jkunz #define IEE_CF_3_LOOPBK_DEF 0x00 /* */
186 1.1 jkunz #define IEE_CF_3_DEF 0x26 /* Configuration Byte 3 Default Value */
187 1.1 jkunz
188 1.1 jkunz #define IEE_CF_4_LINPRIO(x) ((x) & 0x07) /* Linear Priority */
189 1.1 jkunz #define IEE_CF_4_LINPRIO_DEF 0x00 /* Linear Priority */
190 1.1 jkunz #define IEE_CF_4_EXPPRIO(x) (((x) & 0x07) << 4) /* Exponential Prio. */
191 1.1 jkunz #define IEE_CF_4_EXPPRIO_DEF 0x00 /* Exponential Prio. */
192 1.1 jkunz #define IEE_CF_4_BOFMETD 0x80 /* Exponential Backoff Method */
193 1.1 jkunz #define IEE_CF_4_DEF 0x00 /* Configuration Byte 4 Default Value */
194 1.1 jkunz
195 1.1 jkunz #define IEE_CF_5_IFSP(x) ((x) & 0xff) /* Inter Frame Spacing */
196 1.1 jkunz #define IEE_CF_5_IFSP_DEF 0x60 /* */
197 1.1 jkunz #define IEE_CF_5_DEF 0x60 /* Configuration Byte 5 Default Value */
198 1.1 jkunz
199 1.1 jkunz #define IEE_CF_6_SLOT_TL(x) ((x) & 0xff) /* Slot Time Low */
200 1.1 jkunz #define IEE_CF_6_SLOT_TL_DEF 0x00 /* */
201 1.1 jkunz #define IEE_CF_6_DEF 0x00 /* Configuration Byte 6 Default Value */
202 1.1 jkunz
203 1.1 jkunz #define IEE_CF_7_SLOT_TH(x) ((x) & 0x0f) /* Slot Time High */
204 1.1 jkunz #define IEE_CF_7_SLOT_TH_DEF 0x02 /* */
205 1.1 jkunz #define IEE_CF_7_RETR(x) (((x) & 0x0f) << 4) /* Num Retrans Retry */
206 1.1 jkunz #define IEE_CF_7_RETR_DEF 0xf0 /* */
207 1.1 jkunz #define IEE_CF_7_DEF 0xf2 /* Configuration Byte 7 Default Value */
208 1.1 jkunz
209 1.1 jkunz #define IEE_CF_8_PRM 0x01 /* Promiscuous Mode */
210 1.1 jkunz #define IEE_CF_8_BCDIS 0x02 /* Bradcast Disable */
211 1.1 jkunz #define IEE_CF_8_MANCH 0x04 /* Manchester encoding */
212 1.1 jkunz #define IEE_CF_8_TONO 0x08 /* Transmit on no CRS */
213 1.1 jkunz #define IEE_CF_8_NOCRCINS 0x10 /* No CRC Insertion */
214 1.1 jkunz #define IEE_CF_8_CRC16 0x20 /* CRC16 */
215 1.1 jkunz #define IEE_CF_8_BITSTF 0x40 /* Bit Stuffing */
216 1.1 jkunz #define IEE_CF_8_PAD 0x80 /* Padding */
217 1.1 jkunz #define IEE_CF_8_DEF 0x00 /* Configuration Byte 8 Default Value */
218 1.1 jkunz
219 1.1 jkunz #define IEE_CF_9_CRSF(x) ((x) & 0x07) /* Carrier Sense Filter Len */
220 1.1 jkunz #define IEE_CF_9_CRSF_DEF 0x00 /* */
221 1.1 jkunz #define IEE_CF_9_CRSSRC 0x08 /* Carrier Sense Source */
222 1.1 jkunz #define IEE_CF_9_CDTF(x) (((x) & 0x07) << 4)/* Carrier Detect Filt Len */
223 1.1 jkunz #define IEE_CF_9_CDTF_DEF 0x00 /* */
224 1.1 jkunz #define IEE_CF_9_CDTSRC 0x80 /* Carrier Detect Source */
225 1.1 jkunz #define IEE_CF_9_DEF 0x00 /* Configuration Byte 9 Default Value */
226 1.1 jkunz
227 1.1 jkunz #define IEE_CF_10_MINFRMLEN(x) ((x) & 0xff) /* Minimum Frame Length */
228 1.1 jkunz #define IEE_CF_10_DEF 0x40 /* Configuration Byte 10 Default Val. */
229 1.1 jkunz
230 1.1 jkunz #define IEE_CF_11_PRECRS 0x01 /* Preamble until Carrier Sense */
231 1.1 jkunz #define IEE_CF_11_LNGFLD 0x02 /* Length field. Enable padding */
232 1.1 jkunz #define IEE_CF_11_CRCINM 0x04 /* Rx CRC appended to the frame in MEM*/
233 1.1 jkunz #define IEE_CF_11_AUTOTX 0x08 /* Auto Retransmit when Coll in Preamb*/
234 1.1 jkunz #define IEE_CF_11_CDBSAC 0x10 /* Coll Detect by source Addr Recogn */
235 1.1 jkunz #define IEE_CF_11_MCALL 0x20 /* Enable to receive all MC Frames */
236 1.1 jkunz #define IEE_CF_11_MON(x) (((x) & 0x03) << 6) /* Receive Monitor Bits */
237 1.1 jkunz #define IEE_CF_11_MON_DEF 0xc0 /* */
238 1.1 jkunz #define IEE_CF_11_DEF 0xff /* Configuration Byte 11 Default Val. */
239 1.1 jkunz
240 1.1 jkunz #define IEE_CF_12_FDX 0x40 /* Enable Full Duplex */
241 1.1 jkunz #define IEE_CF_12_DEF 0x00 /* Configuration Byte 12 Default Val. */
242 1.1 jkunz
243 1.1 jkunz #define IEE_CF_13_MULTIA 0x40 /* Multiple Individual Address */
244 1.1 jkunz #define IEE_CF_13_DISBOF 0x80 /* Disable the Backoff Algorithm */
245 1.1 jkunz #define IEE_CF_13_DEF 0x3f /* Configuration Byte 13 Default Val. */
246 1.1 jkunz
247