2 * Amiga Linux/68k A2065 Ethernet Driver 4 * (C) Copyright 1995 by Geert Uytterhoeven <geert@linux-m68k.org> 6 * --------------------------------------------------------------------------- 8 * This program is based on 10 * ariadne.?: Amiga Linux/68k Ariadne Ethernet Driver 11 * (C) Copyright 1995 by Geert Uytterhoeven, 14 * lance.c: An AMD LANCE ethernet driver for linux. 15 * Written 1993-94 by Donald Becker. 17 * Am79C960: PCnet(tm)-ISA Single-Chip Ethernet Controller 18 * Advanced Micro Devices 19 * Publication #16907, Rev. B, Amendment/0, May 1994 21 * --------------------------------------------------------------------------- 23 * This file is subject to the terms and conditions of the GNU General Public 24 * License. See the file COPYING in the main directory of the Linux 25 * distribution for more details. 27 * --------------------------------------------------------------------------- 29 * The A2065 is a Zorro-II board made by Commodore/Ameristar. It contains: 31 * - an Am7990 Local Area Network Controller for Ethernet (LANCE) with 32 * both 10BASE-2 (thin coax) and AUI (DB-15) connectors 37 * Am7990 Local Area Network Controller for Ethernet (LANCE) 41 unsigned short rdp
;/* Register Data Port */ 42 unsigned short rap
;/* Register Address Port */ 46 #define CRC_POLYNOMIAL_BE 0x04c11db7UL/* Ethernet CRC, big endian */ 47 #define CRC_POLYNOMIAL_LE 0xedb88320UL/* Ethernet CRC, little endian */ 50 * Am7990 Control and Status Registers 53 #define LE_CSR0 0x0000/* LANCE Controller Status */ 54 #define LE_CSR1 0x0001/* IADR[15:0] */ 55 #define LE_CSR2 0x0002/* IADR[23:16] */ 56 #define LE_CSR3 0x0003/* Misc */ 60 * Bit definitions for CSR0 (LANCE Controller Status) 63 #define LE_C0_ERR 0x8000/* Error */ 64 #define LE_C0_BABL 0x4000/* Babble: Transmitted too many bits */ 65 #define LE_C0_CERR 0x2000/* No Heartbeat (10BASE-T) */ 66 #define LE_C0_MISS 0x1000/* Missed Frame */ 67 #define LE_C0_MERR 0x0800/* Memory Error */ 68 #define LE_C0_RINT 0x0400/* Receive Interrupt */ 69 #define LE_C0_TINT 0x0200/* Transmit Interrupt */ 70 #define LE_C0_IDON 0x0100/* Initialization Done */ 71 #define LE_C0_INTR 0x0080/* Interrupt Flag */ 72 #define LE_C0_INEA 0x0040/* Interrupt Enable */ 73 #define LE_C0_RXON 0x0020/* Receive On */ 74 #define LE_C0_TXON 0x0010/* Transmit On */ 75 #define LE_C0_TDMD 0x0008/* Transmit Demand */ 76 #define LE_C0_STOP 0x0004/* Stop */ 77 #define LE_C0_STRT 0x0002/* Start */ 78 #define LE_C0_INIT 0x0001/* Initialize */ 82 * Bit definitions for CSR3 85 #define LE_C3_BSWP 0x0004/* Byte Swap 86 (on for big endian byte order) */ 87 #define LE_C3_ACON 0x0002/* ALE Control 88 (on for active low ALE) */ 89 #define LE_C3_BCON 0x0001/* Byte Control */ 96 #define LE_MO_PROM 0x8000/* Promiscuous Mode */ 97 #define LE_MO_INTL 0x0040/* Internal Loopback */ 98 #define LE_MO_DRTY 0x0020/* Disable Retry */ 99 #define LE_MO_FCOLL 0x0010/* Force Collision */ 100 #define LE_MO_DXMTFCS 0x0008/* Disable Transmit CRC */ 101 #define LE_MO_LOOP 0x0004/* Loopback Enable */ 102 #define LE_MO_DTX 0x0002/* Disable Transmitter */ 103 #define LE_MO_DRX 0x0001/* Disable Receiver */ 106 struct lance_rx_desc
{ 107 unsigned short rmd0
;/* low address of packet */ 108 unsigned char rmd1_bits
;/* descriptor bits */ 109 unsigned char rmd1_hadr
;/* high address of packet */ 110 short length
;/* This length is 2s complement (negative)! 113 unsigned short mblength
;/* Aactual number of bytes received */ 116 struct lance_tx_desc
{ 117 unsigned short tmd0
;/* low address of packet */ 118 unsigned char tmd1_bits
;/* descriptor bits */ 119 unsigned char tmd1_hadr
;/* high address of packet */ 120 short length
;/* Length is 2s complement (negative)! */ 129 #define LE_R1_OWN 0x80/* LANCE owns the descriptor */ 130 #define LE_R1_ERR 0x40/* Error */ 131 #define LE_R1_FRA 0x20/* Framing Error */ 132 #define LE_R1_OFL 0x10/* Overflow Error */ 133 #define LE_R1_CRC 0x08/* CRC Error */ 134 #define LE_R1_BUF 0x04/* Buffer Error */ 135 #define LE_R1_SOP 0x02/* Start of Packet */ 136 #define LE_R1_EOP 0x01/* End of Packet */ 137 #define LE_R1_POK 0x03/* Packet is complete: SOP + EOP */ 144 #define LE_T1_OWN 0x80/* LANCE owns the descriptor */ 145 #define LE_T1_ERR 0x40/* Error */ 146 #define LE_T1_RES 0x20/* Reserved, 147 LANCE writes this with a zero */ 148 #define LE_T1_EMORE 0x10/* More than one retry needed */ 149 #define LE_T1_EONE 0x08/* One retry needed */ 150 #define LE_T1_EDEF 0x04/* Deferred */ 151 #define LE_T1_SOP 0x02/* Start of Packet */ 152 #define LE_T1_EOP 0x01/* End of Packet */ 153 #define LE_T1_POK 0x03/* Packet is complete: SOP + EOP */ 160 #define LE_T3_BUF 0x8000/* Buffer Error */ 161 #define LE_T3_UFL 0x4000/* Underflow Error */ 162 #define LE_T3_LCOL 0x1000/* Late Collision */ 163 #define LE_T3_CLOS 0x0800/* Loss of Carrier */ 164 #define LE_T3_RTY 0x0400/* Retry Error */ 165 #define LE_T3_TDR 0x03ff/* Time Domain Reflectometry */ 169 * A2065 Expansion Board Structure 172 #define A2065_LANCE 0x4000 174 #define A2065_RAM 0x8000 175 #define A2065_RAM_SIZE 0x8000