diff options
Diffstat (limited to 'system/alpha/h/am79c960.h')
-rw-r--r-- | system/alpha/h/am79c960.h | 381 |
1 files changed, 381 insertions, 0 deletions
diff --git a/system/alpha/h/am79c960.h b/system/alpha/h/am79c960.h new file mode 100644 index 000000000..727d99292 --- /dev/null +++ b/system/alpha/h/am79c960.h @@ -0,0 +1,381 @@ +#ifndef __AM79C960_H_LOADED +#define __AM79C960_H_LOADED +/***************************************************************************** + + Copyright © 1993, 1994 Digital Equipment Corporation, + Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the copyright notice and this permission notice appear in all copies +of software and supporting documentation, and that the name of Digital not +be used in advertising or publicity pertaining to distribution of the software +without specific, written prior permission. Digital grants this permission +provided that you prominently mark, as not part of the original, any +modifications made to this software or documentation. + +Digital Equipment Corporation disclaims all warranties and/or guarantees +with regard to this software, including all implied warranties of fitness for +a particular purpose and merchantability, and makes no representations +regarding the use of, or the results of the use of, the software and +documentation in terms of correctness, accuracy, reliability, currentness or +otherwise; and you rely on the software, documentation and results solely at +your own risk. + +******************************************************************************/ + +/* + * $Id: am79c960.h,v 1.1.1.1 1997/10/30 23:27:13 verghese Exp $ + */ + +/* + * MODULE DESCRIPTION: + * + * Parameters and logicals for AM79C960 drivers in EB64 monitor + * + * HISTORY: + * + * $Log: am79c960.h,v $ + * Revision 1.1.1.1 1997/10/30 23:27:13 verghese + * current 10/29/97 + * + * Revision 1.8 1994/12/12 21:31:59 cruz + * Fixed bug in TMD3 constants + * + * Revision 1.7 1994/08/05 20:13:47 fdh + * Updated Copyright header and RCS $Id: identifier. + * + * Revision 1.6 1994/06/28 20:08:21 fdh + * Modified filenames and build precedure to fit into a FAT filesystem. + * + * Revision 1.5 1994/06/24 15:26:49 rusling + * Fixed initialization alignment problems. + * + * Revision 1.4 1994/06/20 14:18:59 fdh + * Fixup header file preprocessor #include conditionals. + * + * Revision 1.3 1994/06/17 19:34:01 fdh + * Clean-up... + * + * Revision 1.2 1994/06/03 20:11:11 fdh + * Replaced shorts declared in bitfields to ints. + * + * Revision 1.1 1993/08/06 10:10:05 berent + * Initial revision + * + * + */ + + + +/* The embedded Ethernet controller on the EB64 is an AMD Am79C960 device. + * + * This device integrates an Am7990 LANCE Ethernet controller with an ISA + * bus interface plus all the serial interface logic bar some discrete + * termination and isolation transformers for AUI (10base5) and twisted + * pair (10baseT) connections. + * + * The AUI port on EB64 is connected to an Am7996 thinwire transceiver to + * provide a 10base2 port (BNC) as well as the twisted pair (MMJ) + * connectivity. + * + * The device is programmed in a similar but not identical fashion to the + * LANCE. The following programming differences and features are noted: + * + * A RAP/RDP mechanism is used for register access like the LANCE, but with + * a much larger register set: + * + * Initialisation block now part of on-chip register set with new + * ...features added to the mode register. This can be set up in + * ...memory and copied by the device using the csr0_INIT bit, or + * ...programmed directly to the device using the extended CSR map. + * + * CSR3 completely changed - interrupt mask and enabling bits for + * ...new features + * + * CSR3 can be accessed while the "LANCE" running + * + * A register added for controlling the ISA bus DMA profile eg. FIFO + * ...watermarks for DMA loads and stores, TX transmission start + * ...point wrt data in TX FIFO, DMA burstsizes. + * + * Registers to overrule ring sizes in initialisation blocks allowing + * ...ring sizes from 1-64k entries. CSR76 for RX; CSR78 for TX + * + * Timer and ID registers + * + * Missed pkt and RX collision counters + * + * A similar RAP/IDP mechanism is used to program ISA DMA signal timing, ISA + * bus configuration, bits, and the functionality for the three LED drives + * provided. + * + * The Am79C960 *must* use a 16-bit DMA path, but can use an 8-bit path for + * CSR (IO) access. It also supports access to a sixteen byte area for + * keeping the MAC address in PROM. This is always byte-wide access, as is a + * shared memory mode to a larger local address space, not used on EB64. + * + * EB64 accesses to the 79C960 are through the VL82C486 ISA controller. All + * CSR accesses should be done as 16-bit words, with the VL82C486 taking care + * of the packing/unpacking issue. Enet PROM accesses are done as byte + * accesses. The EB64 memory controller will perform read_modify_write cycles + * into main memory to correctly merge the bytes/words, and preserve longword + * parity. + * + * + * Please see the Am7990 and Am79C960 literature for definitive lists and + * further detail. + * + * PLEASE NOTE: LANCE is used in many definitions for historical reasons. + */ + + + /* Maximum number of AMD79C960's supported in the EB64 monitor */ + +#define AM79C960_MAX_DEVICES 2 + + + /* Base addresses supported for 79C960 in ISA address space */ + +#define EMBEDDED_79C960_BASE 0x360 /* IOAM pins = 0b11 */ +#define OPTION_79C960_BASE 0x300 /* IOAM pins = 0b00 */ + + /* Assigned interrupt numbers for 8259 controller */ + +#define EMBEDDED_79C960_INT 9 +#define OPTION_79C960_INT 12 + + /* Assigned mask numbers for enabling appropriate DMA channel */ + +#define EMBEDDED_79C960_DMA 1 +#define OPTION_79C960_DMA 2 + + + /* CSR access offsets for 79C960 */ + +#define HW_ADDR_OFFSET 0 /* The hardware address is at the base address for the device */ +#define RDP_OFFSET 0x10 +#define RAP_OFFSET 0x12 +#define RESET_OFFSET 0x14 +#define IDP_OFFSET 0x16 +#define VSW_OFFSET 0x18 + +#define LANCE_CSR0 0 /* Main csr */ +#define LANCE_IADRL 1 /* Init block low address bits */ +#define LANCE_IADRH 2 /* Init block high address bits */ +#define LANCE_CSR3 3 /* Mask and function bits */ +#define LANCE_CSR4 4 /* Additional mask and function bits, only exists on amd 79c960 */ + + /* CSR bit definitions - CSR1 and 2 have no bit fields */ + + /* CSR0 Bit definitions */ + +#define csr0_INIT 0x0001 /* Initialize - can be set with STRT on 79C960*/ +#define csr0_STRT 0x0002 /* Start operation */ +#define csr0_STOP 0x0004 /* Stop LANCE */ +#define csr0_TDMD 0x0008 /* Transmit demand */ +#define csr0_TXON 0x0010 /* Transmitter ON */ +#define csr0_RXON 0x0020 /* Receiver ON */ +#define csr0_IENA 0x0040 /* Interrupt enable */ +#define csr0_INTR 0x0080 /* Interrupt received */ +#define csr0_IDON 0x0100 /* Initialization done */ +#define csr0_TINT 0x0200 /* Transmitter interrupt */ +#define csr0_RINT 0x0400 /* Receiver interrupt */ +#define csr0_MERR 0x0800 /* Memory error */ +#define csr0_MISS 0x1000 /* Missed packet */ +#define csr0_CERR 0x2000 /* Collision error */ +#define csr0_BABL 0x4000 /* Babbling on the wire */ +#define csr0_ERR 0x8000 /* Error logical OR */ + + + /* CSR3 Bit definitions - all undefined bits reserved */ + +#define csr3_EMBA 0x0008 /* Enable Alternate Backoff Algorithm - 79C960 */ +#define csr3_DXMT2PD 0x0010 /* Disable 2-part TX deferral - 79C960 */ +#define csr3_IDONM 0x0100 /* Initialise Done interrupt mask */ +#define csr3_TINT 0x0200 /* TX interrupt mask */ +#define csr3_RINT 0x0400 /* RX interrupt mask */ +#define csr3_MERM 0x0800 /* Memory error interrupt mask */ +#define csr3_MISSM 0x1000 /* Missed pkt interrupt mask */ +#define csr3_BABLM 0x4000 /* Babble interrupt mask */ +#define csr3_MASKALL 0x5F00 /* Mask all CSR3 maskable interrupts */ + + /* CSR4 Bit definitions - all undefined bits reserved */ + /* This register is unique to the 79C960 */ + +#define csr4_JABM 0x0001 /* Jabber interrupt mask +#define csr4_JAB 0x0002 /* set if T-MAU detects a jabber condition +#define csr4_TXSTRTM 0x0004 /* TX start (of packet) interrupt mask */ +#define csr4_TXSTRT 0x0008 /* */ +#define csr4_RCVCCOM 0x0010 /* RX Collision Counter Overflow interrupt mask */ +#define csr4_RCVCCO 0x0020 /* RX Collision Counter Overflow bit */ +#define csr4_MPCOM 0x0100 /* Missed Pkt counter overflow interrupt mask */ +#define csr4_MPCO 0x0200 /* Missed Pkt counter overflow bit */ +#define csr4_ASTRPRCV 0x0400 /* Enable Automatic Pad Stripping on RX - IEEE802.3 */ +#define csr4_APADXMT 0x0800 /* Enable Automatic Padding on TX - IEEE802.3 */ +#define csr4_DPOLL 0x1000 /* Disable polling - TX rings */ +#define csr4_TIMER 0x2000 /* */ +#define csr4_DMAPLUS 0x4000 /* Disable CSR80 DMA burst counter */ +#define csr4_ENTST 0x8000 /* Enable Test mode */ + + + + /* Receive Message Descriptor */ + /* RMD0, RMD2 and RMD3 have no bit fields */ + + /* Bits 0 -> 7 of RMD1 part of buffer address */ + +#define rmd1_ENP 0x0100 /* End of packet */ +#define rmd1_STP 0x0200 /* Start of packet */ +#define rmd1_BUFF 0x0400 /* Buffer error */ +#define rmd1_CRC 0x0800 /* CRC error */ +#define rmd1_OFLO 0x1000 /* Overflow error */ +#define rmd1_FRAM 0x2000 /* Framing error */ +#define rmd1_ERR 0x4000 /* Error logical OR */ +#define rmd1_OWN 0x8000 /* Who owns it */ + + + + /* Transmit Message Descriptor */ + /* TMD0 and TMD2 have no bit fields */ + + /* Bits 0 -> 7 of TMD1 part of buffer address */ + +#define tmd1_ENP 0x0100 /* End of packet */ +#define tmd1_STP 0x0200 /* Start of packet */ +#define tmd1_DEF 0x0400 /* Had to defer */ +#define tmd1_ONE 0x0800 /* One eretry needed */ +#define tdm1_MORE 0x1000 /* More than one retry */ +#define tmd1_ADDFCS 0x2000 /* Am79C960 specific - add FCS on pkt basis */ +#define tmd1_ERR 0x4000 /* Error logical OR */ +#define tmd1_OWN 0x8000 /* Who owns it */ + + + /* Bits 0 -> 9 of TMD3 provide a TDR counter for finding cable faults */ + +#define tmd3_RTRY 0x0400 /* Too many retries */ +#define tmd3_LCAR 0x0800 /* Loss of Carrier */ +#define tmd3_LCOL 0x1000 /* Late Collision on send */ +#define tmd3_RES 0x2000 /* RESERVED */ +#define tmd3_UFLO 0x4000 /* Underflow Error */ +#define tmd3_BUFF 0x8000 /* Buffer Error */ + + + /* For init block - operating modes */ + +#define mode_DRX 0x0001 /* Disable receiver */ +#define mode_DTX 0x0002 /* Disable transmitter */ +#define mode_LOOP 0x0004 /* Loopback mode */ +#define mode_DTCR 0x0008 /* Disable transmit CRC */ +#define mode_COLL 0x0010 /* Force collision */ +#define mode_DRTY 0x0020 /* Disable retries */ +#define mode_INTL 0x0040 /* Internal loopback */ +#define mode_PORTSEL0 0x0080 /* 0 = AUI; 1 = T-MAU */ +#define mode_PORTSEL1 0x0100 /* MBZ */ +#define mode_LRT_TSEL 0x0200 /* Low RX threshold/TX mode select */ +#define mode_MENDECL 0x0400 /* MENDEC loopback mode */ +#define mode_DAPC 0x0800 /* T-MAU: disable automatic polarity correction */ +#define mode_DLNKTST 0x1000 /* Disable link status */ +#define mode_DRCVPA 0x2000 /* Disable RX physical address */ +#define mode_DRCVBC 0x4000 /* Disable RX broadcast */ +#define mode_PROM 0x8000 /* Promiscuous mode */ + + + + /* Initialization block. */ + +#define LANCE_INIT_BLOCK_SIZE 24 +#define LANCE_INIT_BLOCK_MODE_OFFSET 0 +#define LANCE_INIT_BLOCK_PADR_OFFSET 2 +#define LANCE_INIT_BLOCK_LADRF_OFFSET 8 +#define LANCE_INIT_BLOCK_RD_OFFSET 16 +#define LANCE_INIT_BLOCK_TD_OFFSET 20 + + +typedef struct { + unsigned + radr : 24, /* Ring address. */ + : 5, + rlen : 3; /* Entries (0=1, 1=2, 2=4, 3=8...) */ +} INIT_BLOCK_DESC; + + /* Receive buffer descriptor. */ + +typedef struct{ + unsigned int + ladr : 24, /* Buffer address. */ + enp : 1, /* End of packet. */ + stp : 1, /* Start of packet. */ + buff : 1, /* Buffer error. */ + crc : 1, /* CRC error. */ + oflo : 1, /* Overflow error. */ + fram : 1, /* Framing error. */ + err : 1, /* Error summary: buff + crc + oflo + fram */ + own : 1; /* Buffer owner: host=0, lance=1. */ + uw bcnt; /* Buffer size. */ + uw mcnt; /* Message size. */ +} LANCE_RECV_BD; + + /* Transmit buffer descriptor. */ + +typedef struct{ + unsigned int + ladr : 24, /* Buffer address. */ + enp : 1, /* End of packet. */ + stp : 1, /* Start of packet. */ + def : 1, /* Deferred. */ + one : 1, /* One retry. */ + more : 1, /* More retries. */ + add_fcs : 1, /* Add FCS on packet basis - 79C960 specific feature */ + err : 1, /* Error summary: lcol + lcar + uflo + rtry */ + own : 1; /* Buffer owner: host=0, lance=1. */ + uw bcnt; /* Buffer size. */ + uw tmd3; /* TMD 3 */ +} LANCE_SEND_BD; + +#define LANCE_OWNS 1 +#define HOST_OWNS 0 + + /* Lance counters. */ + +typedef struct{ + time_t zeroed; + int b_recv; + int b_sent; + int f_recv; + int f_sent; + int mc_b_recv; + int mc_f_recv; + int f_sent_def; + int f_sent_sgl_col; + int f_sent_mult_col; + int send_fail_exs_col; + int send_fail_cc; + int send_fail_short; + int send_fail_open; + int send_fail_flen; + int send_fail_defer; + int recv_fail_fcs; + int recv_fail_f_err; + int recv_fail_flen; + int data_overrun; + int sbuf_unav; + int ubuf_unav; + int cc_fail; +} LANCE_CTRS; + +typedef struct{ + int base_addr; + int interrupt_line; + int dma_mask; +} AM79C960_CONFIG; + +#define AM79C960_FLUSH_WATCHDOG 5000 /* watchdog timeout - in ms - for TX flush routine */ + +/* /ether/am79c960.c */ +extern int am79c960_device_register(int device_no); +extern void am79c960_device_init_module(void ); + +#endif /* __AM79C960_H_LOADED */ |