![]() |
|
|||
0001 /* 0002 * Amiga Linux/m68k Ariadne Ethernet Driver 0003 * 0004 * © Copyright 1995 by Geert Uytterhoeven (geert@linux-m68k.org) 0005 * Peter De Schrijver 0006 * (Peter.DeSchrijver@linux.cc.kuleuven.ac.be) 0007 * 0008 * ---------------------------------------------------------------------------------- 0009 * 0010 * This program is based on 0011 * 0012 * lance.c: An AMD LANCE ethernet driver for linux. 0013 * Written 1993-94 by Donald Becker. 0014 * 0015 * Am79C960: PCnet(tm)-ISA Single-Chip Ethernet Controller 0016 * Advanced Micro Devices 0017 * Publication #16907, Rev. B, Amendment/0, May 1994 0018 * 0019 * MC68230: Parallel Interface/Timer (PI/T) 0020 * Motorola Semiconductors, December, 1983 0021 * 0022 * ---------------------------------------------------------------------------------- 0023 * 0024 * This file is subject to the terms and conditions of the GNU General Public 0025 * License. See the file COPYING in the main directory of the Linux 0026 * distribution for more details. 0027 * 0028 * ---------------------------------------------------------------------------------- 0029 * 0030 * The Ariadne is a Zorro-II board made by Village Tronic. It contains: 0031 * 0032 * - an Am79C960 PCnet-ISA Single-Chip Ethernet Controller with both 0033 * 10BASE-2 (thin coax) and 10BASE-T (UTP) connectors 0034 * 0035 * - an MC68230 Parallel Interface/Timer configured as 2 parallel ports 0036 */ 0037 0038 0039 /* 0040 * Am79C960 PCnet-ISA 0041 */ 0042 0043 struct Am79C960 { 0044 volatile u_short AddressPROM[8]; 0045 /* IEEE Address PROM (Unused in the Ariadne) */ 0046 volatile u_short RDP; /* Register Data Port */ 0047 volatile u_short RAP; /* Register Address Port */ 0048 volatile u_short Reset; /* Reset Chip on Read Access */ 0049 volatile u_short IDP; /* ISACSR Data Port */ 0050 }; 0051 0052 0053 /* 0054 * Am79C960 Control and Status Registers 0055 * 0056 * These values are already swap()ed!! 0057 * 0058 * Only registers marked with a `-' are intended for network software 0059 * access 0060 */ 0061 0062 #define CSR0 0x0000 /* - PCnet-ISA Controller Status */ 0063 #define CSR1 0x0100 /* - IADR[15:0] */ 0064 #define CSR2 0x0200 /* - IADR[23:16] */ 0065 #define CSR3 0x0300 /* - Interrupt Masks and Deferral Control */ 0066 #define CSR4 0x0400 /* - Test and Features Control */ 0067 #define CSR6 0x0600 /* RCV/XMT Descriptor Table Length */ 0068 #define CSR8 0x0800 /* - Logical Address Filter, LADRF[15:0] */ 0069 #define CSR9 0x0900 /* - Logical Address Filter, LADRF[31:16] */ 0070 #define CSR10 0x0a00 /* - Logical Address Filter, LADRF[47:32] */ 0071 #define CSR11 0x0b00 /* - Logical Address Filter, LADRF[63:48] */ 0072 #define CSR12 0x0c00 /* - Physical Address Register, PADR[15:0] */ 0073 #define CSR13 0x0d00 /* - Physical Address Register, PADR[31:16] */ 0074 #define CSR14 0x0e00 /* - Physical Address Register, PADR[47:32] */ 0075 #define CSR15 0x0f00 /* - Mode Register */ 0076 #define CSR16 0x1000 /* Initialization Block Address Lower */ 0077 #define CSR17 0x1100 /* Initialization Block Address Upper */ 0078 #define CSR18 0x1200 /* Current Receive Buffer Address */ 0079 #define CSR19 0x1300 /* Current Receive Buffer Address */ 0080 #define CSR20 0x1400 /* Current Transmit Buffer Address */ 0081 #define CSR21 0x1500 /* Current Transmit Buffer Address */ 0082 #define CSR22 0x1600 /* Next Receive Buffer Address */ 0083 #define CSR23 0x1700 /* Next Receive Buffer Address */ 0084 #define CSR24 0x1800 /* - Base Address of Receive Ring */ 0085 #define CSR25 0x1900 /* - Base Address of Receive Ring */ 0086 #define CSR26 0x1a00 /* Next Receive Descriptor Address */ 0087 #define CSR27 0x1b00 /* Next Receive Descriptor Address */ 0088 #define CSR28 0x1c00 /* Current Receive Descriptor Address */ 0089 #define CSR29 0x1d00 /* Current Receive Descriptor Address */ 0090 #define CSR30 0x1e00 /* - Base Address of Transmit Ring */ 0091 #define CSR31 0x1f00 /* - Base Address of transmit Ring */ 0092 #define CSR32 0x2000 /* Next Transmit Descriptor Address */ 0093 #define CSR33 0x2100 /* Next Transmit Descriptor Address */ 0094 #define CSR34 0x2200 /* Current Transmit Descriptor Address */ 0095 #define CSR35 0x2300 /* Current Transmit Descriptor Address */ 0096 #define CSR36 0x2400 /* Next Next Receive Descriptor Address */ 0097 #define CSR37 0x2500 /* Next Next Receive Descriptor Address */ 0098 #define CSR38 0x2600 /* Next Next Transmit Descriptor Address */ 0099 #define CSR39 0x2700 /* Next Next Transmit Descriptor Address */ 0100 #define CSR40 0x2800 /* Current Receive Status and Byte Count */ 0101 #define CSR41 0x2900 /* Current Receive Status and Byte Count */ 0102 #define CSR42 0x2a00 /* Current Transmit Status and Byte Count */ 0103 #define CSR43 0x2b00 /* Current Transmit Status and Byte Count */ 0104 #define CSR44 0x2c00 /* Next Receive Status and Byte Count */ 0105 #define CSR45 0x2d00 /* Next Receive Status and Byte Count */ 0106 #define CSR46 0x2e00 /* Poll Time Counter */ 0107 #define CSR47 0x2f00 /* Polling Interval */ 0108 #define CSR48 0x3000 /* Temporary Storage */ 0109 #define CSR49 0x3100 /* Temporary Storage */ 0110 #define CSR50 0x3200 /* Temporary Storage */ 0111 #define CSR51 0x3300 /* Temporary Storage */ 0112 #define CSR52 0x3400 /* Temporary Storage */ 0113 #define CSR53 0x3500 /* Temporary Storage */ 0114 #define CSR54 0x3600 /* Temporary Storage */ 0115 #define CSR55 0x3700 /* Temporary Storage */ 0116 #define CSR56 0x3800 /* Temporary Storage */ 0117 #define CSR57 0x3900 /* Temporary Storage */ 0118 #define CSR58 0x3a00 /* Temporary Storage */ 0119 #define CSR59 0x3b00 /* Temporary Storage */ 0120 #define CSR60 0x3c00 /* Previous Transmit Descriptor Address */ 0121 #define CSR61 0x3d00 /* Previous Transmit Descriptor Address */ 0122 #define CSR62 0x3e00 /* Previous Transmit Status and Byte Count */ 0123 #define CSR63 0x3f00 /* Previous Transmit Status and Byte Count */ 0124 #define CSR64 0x4000 /* Next Transmit Buffer Address */ 0125 #define CSR65 0x4100 /* Next Transmit Buffer Address */ 0126 #define CSR66 0x4200 /* Next Transmit Status and Byte Count */ 0127 #define CSR67 0x4300 /* Next Transmit Status and Byte Count */ 0128 #define CSR68 0x4400 /* Transmit Status Temporary Storage */ 0129 #define CSR69 0x4500 /* Transmit Status Temporary Storage */ 0130 #define CSR70 0x4600 /* Temporary Storage */ 0131 #define CSR71 0x4700 /* Temporary Storage */ 0132 #define CSR72 0x4800 /* Receive Ring Counter */ 0133 #define CSR74 0x4a00 /* Transmit Ring Counter */ 0134 #define CSR76 0x4c00 /* - Receive Ring Length */ 0135 #define CSR78 0x4e00 /* - Transmit Ring Length */ 0136 #define CSR80 0x5000 /* - Burst and FIFO Threshold Control */ 0137 #define CSR82 0x5200 /* - Bus Activity Timer */ 0138 #define CSR84 0x5400 /* DMA Address */ 0139 #define CSR85 0x5500 /* DMA Address */ 0140 #define CSR86 0x5600 /* Buffer Byte Counter */ 0141 #define CSR88 0x5800 /* - Chip ID */ 0142 #define CSR89 0x5900 /* - Chip ID */ 0143 #define CSR92 0x5c00 /* Ring Length Conversion */ 0144 #define CSR94 0x5e00 /* Transmit Time Domain Reflectometry Count */ 0145 #define CSR96 0x6000 /* Bus Interface Scratch Register 0 */ 0146 #define CSR97 0x6100 /* Bus Interface Scratch Register 0 */ 0147 #define CSR98 0x6200 /* Bus Interface Scratch Register 1 */ 0148 #define CSR99 0x6300 /* Bus Interface Scratch Register 1 */ 0149 #define CSR104 0x6800 /* SWAP */ 0150 #define CSR105 0x6900 /* SWAP */ 0151 #define CSR108 0x6c00 /* Buffer Management Scratch */ 0152 #define CSR109 0x6d00 /* Buffer Management Scratch */ 0153 #define CSR112 0x7000 /* - Missed Frame Count */ 0154 #define CSR114 0x7200 /* - Receive Collision Count */ 0155 #define CSR124 0x7c00 /* - Buffer Management Unit Test */ 0156 0157 0158 /* 0159 * Am79C960 ISA Control and Status Registers 0160 * 0161 * These values are already swap()ed!! 0162 */ 0163 0164 #define ISACSR0 0x0000 /* Master Mode Read Active */ 0165 #define ISACSR1 0x0100 /* Master Mode Write Active */ 0166 #define ISACSR2 0x0200 /* Miscellaneous Configuration */ 0167 #define ISACSR4 0x0400 /* LED0 Status (Link Integrity) */ 0168 #define ISACSR5 0x0500 /* LED1 Status */ 0169 #define ISACSR6 0x0600 /* LED2 Status */ 0170 #define ISACSR7 0x0700 /* LED3 Status */ 0171 0172 0173 /* 0174 * Bit definitions for CSR0 (PCnet-ISA Controller Status) 0175 * 0176 * These values are already swap()ed!! 0177 */ 0178 0179 #define ERR 0x0080 /* Error */ 0180 #define BABL 0x0040 /* Babble: Transmitted too many bits */ 0181 #define CERR 0x0020 /* No Heartbeat (10BASE-T) */ 0182 #define MISS 0x0010 /* Missed Frame */ 0183 #define MERR 0x0008 /* Memory Error */ 0184 #define RINT 0x0004 /* Receive Interrupt */ 0185 #define TINT 0x0002 /* Transmit Interrupt */ 0186 #define IDON 0x0001 /* Initialization Done */ 0187 #define INTR 0x8000 /* Interrupt Flag */ 0188 #define INEA 0x4000 /* Interrupt Enable */ 0189 #define RXON 0x2000 /* Receive On */ 0190 #define TXON 0x1000 /* Transmit On */ 0191 #define TDMD 0x0800 /* Transmit Demand */ 0192 #define STOP 0x0400 /* Stop */ 0193 #define STRT 0x0200 /* Start */ 0194 #define INIT 0x0100 /* Initialize */ 0195 0196 0197 /* 0198 * Bit definitions for CSR3 (Interrupt Masks and Deferral Control) 0199 * 0200 * These values are already swap()ed!! 0201 */ 0202 0203 #define BABLM 0x0040 /* Babble Mask */ 0204 #define MISSM 0x0010 /* Missed Frame Mask */ 0205 #define MERRM 0x0008 /* Memory Error Mask */ 0206 #define RINTM 0x0004 /* Receive Interrupt Mask */ 0207 #define TINTM 0x0002 /* Transmit Interrupt Mask */ 0208 #define IDONM 0x0001 /* Initialization Done Mask */ 0209 #define DXMT2PD 0x1000 /* Disable Transmit Two Part Deferral */ 0210 #define EMBA 0x0800 /* Enable Modified Back-off Algorithm */ 0211 0212 0213 /* 0214 * Bit definitions for CSR4 (Test and Features Control) 0215 * 0216 * These values are already swap()ed!! 0217 */ 0218 0219 #define ENTST 0x0080 /* Enable Test Mode */ 0220 #define DMAPLUS 0x0040 /* Disable Burst Transaction Counter */ 0221 #define TIMER 0x0020 /* Timer Enable Register */ 0222 #define DPOLL 0x0010 /* Disable Transmit Polling */ 0223 #define APAD_XMT 0x0008 /* Auto Pad Transmit */ 0224 #define ASTRP_RCV 0x0004 /* Auto Pad Stripping */ 0225 #define MFCO 0x0002 /* Missed Frame Counter Overflow Interrupt */ 0226 #define MFCOM 0x0001 /* Missed Frame Counter Overflow Mask */ 0227 #define RCVCCO 0x2000 /* Receive Collision Counter Overflow Interrupt */ 0228 #define RCVCCOM 0x1000 /* Receive Collision Counter Overflow Mask */ 0229 #define TXSTRT 0x0800 /* Transmit Start Status */ 0230 #define TXSTRTM 0x0400 /* Transmit Start Mask */ 0231 #define JAB 0x0200 /* Jabber Error */ 0232 #define JABM 0x0100 /* Jabber Error Mask */ 0233 0234 0235 /* 0236 * Bit definitions for CSR15 (Mode Register) 0237 * 0238 * These values are already swap()ed!! 0239 */ 0240 0241 #define PROM 0x0080 /* Promiscuous Mode */ 0242 #define DRCVBC 0x0040 /* Disable Receive Broadcast */ 0243 #define DRCVPA 0x0020 /* Disable Receive Physical Address */ 0244 #define DLNKTST 0x0010 /* Disable Link Status */ 0245 #define DAPC 0x0008 /* Disable Automatic Polarity Correction */ 0246 #define MENDECL 0x0004 /* MENDEC Loopback Mode */ 0247 #define LRTTSEL 0x0002 /* Low Receive Threshold/Transmit Mode Select */ 0248 #define PORTSEL1 0x0001 /* Port Select Bits */ 0249 #define PORTSEL2 0x8000 /* Port Select Bits */ 0250 #define INTL 0x4000 /* Internal Loopback */ 0251 #define DRTY 0x2000 /* Disable Retry */ 0252 #define FCOLL 0x1000 /* Force Collision */ 0253 #define DXMTFCS 0x0800 /* Disable Transmit CRC */ 0254 #define LOOP 0x0400 /* Loopback Enable */ 0255 #define DTX 0x0200 /* Disable Transmitter */ 0256 #define DRX 0x0100 /* Disable Receiver */ 0257 0258 0259 /* 0260 * Bit definitions for ISACSR2 (Miscellaneous Configuration) 0261 * 0262 * These values are already swap()ed!! 0263 */ 0264 0265 #define ASEL 0x0200 /* Media Interface Port Auto Select */ 0266 0267 0268 /* 0269 * Bit definitions for ISACSR5-7 (LED1-3 Status) 0270 * 0271 * These values are already swap()ed!! 0272 */ 0273 0274 #define LEDOUT 0x0080 /* Current LED Status */ 0275 #define PSE 0x8000 /* Pulse Stretcher Enable */ 0276 #define XMTE 0x1000 /* Enable Transmit Status Signal */ 0277 #define RVPOLE 0x0800 /* Enable Receive Polarity Signal */ 0278 #define RCVE 0x0400 /* Enable Receive Status Signal */ 0279 #define JABE 0x0200 /* Enable Jabber Signal */ 0280 #define COLE 0x0100 /* Enable Collision Signal */ 0281 0282 0283 /* 0284 * Receive Descriptor Ring Entry 0285 */ 0286 0287 struct RDRE { 0288 volatile u_short RMD0; /* LADR[15:0] */ 0289 volatile u_short RMD1; /* HADR[23:16] | Receive Flags */ 0290 volatile u_short RMD2; /* Buffer Byte Count (two's complement) */ 0291 volatile u_short RMD3; /* Message Byte Count */ 0292 }; 0293 0294 0295 /* 0296 * Transmit Descriptor Ring Entry 0297 */ 0298 0299 struct TDRE { 0300 volatile u_short TMD0; /* LADR[15:0] */ 0301 volatile u_short TMD1; /* HADR[23:16] | Transmit Flags */ 0302 volatile u_short TMD2; /* Buffer Byte Count (two's complement) */ 0303 volatile u_short TMD3; /* Error Flags */ 0304 }; 0305 0306 0307 /* 0308 * Receive Flags 0309 */ 0310 0311 #define RF_OWN 0x0080 /* PCnet-ISA controller owns the descriptor */ 0312 #define RF_ERR 0x0040 /* Error */ 0313 #define RF_FRAM 0x0020 /* Framing Error */ 0314 #define RF_OFLO 0x0010 /* Overflow Error */ 0315 #define RF_CRC 0x0008 /* CRC Error */ 0316 #define RF_BUFF 0x0004 /* Buffer Error */ 0317 #define RF_STP 0x0002 /* Start of Packet */ 0318 #define RF_ENP 0x0001 /* End of Packet */ 0319 0320 0321 /* 0322 * Transmit Flags 0323 */ 0324 0325 #define TF_OWN 0x0080 /* PCnet-ISA controller owns the descriptor */ 0326 #define TF_ERR 0x0040 /* Error */ 0327 #define TF_ADD_FCS 0x0020 /* Controls FCS Generation */ 0328 #define TF_MORE 0x0010 /* More than one retry needed */ 0329 #define TF_ONE 0x0008 /* One retry needed */ 0330 #define TF_DEF 0x0004 /* Deferred */ 0331 #define TF_STP 0x0002 /* Start of Packet */ 0332 #define TF_ENP 0x0001 /* End of Packet */ 0333 0334 0335 /* 0336 * Error Flags 0337 */ 0338 0339 #define EF_BUFF 0x0080 /* Buffer Error */ 0340 #define EF_UFLO 0x0040 /* Underflow Error */ 0341 #define EF_LCOL 0x0010 /* Late Collision */ 0342 #define EF_LCAR 0x0008 /* Loss of Carrier */ 0343 #define EF_RTRY 0x0004 /* Retry Error */ 0344 #define EF_TDR 0xff03 /* Time Domain Reflectometry */ 0345 0346 0347 0348 /* 0349 * MC68230 Parallel Interface/Timer 0350 */ 0351 0352 struct MC68230 { 0353 volatile u_char PGCR; /* Port General Control Register */ 0354 u_char Pad1[1]; 0355 volatile u_char PSRR; /* Port Service Request Register */ 0356 u_char Pad2[1]; 0357 volatile u_char PADDR; /* Port A Data Direction Register */ 0358 u_char Pad3[1]; 0359 volatile u_char PBDDR; /* Port B Data Direction Register */ 0360 u_char Pad4[1]; 0361 volatile u_char PCDDR; /* Port C Data Direction Register */ 0362 u_char Pad5[1]; 0363 volatile u_char PIVR; /* Port Interrupt Vector Register */ 0364 u_char Pad6[1]; 0365 volatile u_char PACR; /* Port A Control Register */ 0366 u_char Pad7[1]; 0367 volatile u_char PBCR; /* Port B Control Register */ 0368 u_char Pad8[1]; 0369 volatile u_char PADR; /* Port A Data Register */ 0370 u_char Pad9[1]; 0371 volatile u_char PBDR; /* Port B Data Register */ 0372 u_char Pad10[1]; 0373 volatile u_char PAAR; /* Port A Alternate Register */ 0374 u_char Pad11[1]; 0375 volatile u_char PBAR; /* Port B Alternate Register */ 0376 u_char Pad12[1]; 0377 volatile u_char PCDR; /* Port C Data Register */ 0378 u_char Pad13[1]; 0379 volatile u_char PSR; /* Port Status Register */ 0380 u_char Pad14[5]; 0381 volatile u_char TCR; /* Timer Control Register */ 0382 u_char Pad15[1]; 0383 volatile u_char TIVR; /* Timer Interrupt Vector Register */ 0384 u_char Pad16[3]; 0385 volatile u_char CPRH; /* Counter Preload Register (High) */ 0386 u_char Pad17[1]; 0387 volatile u_char CPRM; /* Counter Preload Register (Mid) */ 0388 u_char Pad18[1]; 0389 volatile u_char CPRL; /* Counter Preload Register (Low) */ 0390 u_char Pad19[3]; 0391 volatile u_char CNTRH; /* Count Register (High) */ 0392 u_char Pad20[1]; 0393 volatile u_char CNTRM; /* Count Register (Mid) */ 0394 u_char Pad21[1]; 0395 volatile u_char CNTRL; /* Count Register (Low) */ 0396 u_char Pad22[1]; 0397 volatile u_char TSR; /* Timer Status Register */ 0398 u_char Pad23[11]; 0399 }; 0400 0401 0402 /* 0403 * Ariadne Expansion Board Structure 0404 */ 0405 0406 #define ARIADNE_LANCE 0x360 0407 0408 #define ARIADNE_PIT 0x1000 0409 0410 #define ARIADNE_BOOTPROM 0x4000 /* I guess it's here :-) */ 0411 #define ARIADNE_BOOTPROM_SIZE 0x4000 0412 0413 #define ARIADNE_RAM 0x8000 /* Always access WORDs!! */ 0414 #define ARIADNE_RAM_SIZE 0x8000 0415
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.1.0 LXR engine. The LXR team |
![]() ![]() |