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