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