Mercurial > flash_v2
diff packages/devs/eth/cf/current/src/dp8390.h @ 115:6ed91473a1cd ecos-sw-2000-08-21
Merge from eCos master repository on 2000-08-21-22:40:54-BST
| author | jlarmour |
|---|---|
| date | Fri, 25 Aug 2000 17:32:38 +0000 |
| parents | |
| children | 518f42066aba |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/packages/devs/eth/cf/current/src/dp8390.h @@ -0,0 +1,260 @@ +//========================================================================== +// +// dev/dp8390.h +// +// National Semiconductor ethernet chip +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//####BSDCOPYRIGHTBEGIN#### +// +// ------------------------------------------- +// +// Portions of this software may have been derived from OpenBSD or other sources, +// and are covered by the appropriate copyright disclaimers included herein. +// +// ------------------------------------------- +// +//####BSDCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2000-07-07 +// Purpose: +// Description: +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +typedef volatile union { + union { + struct { + unsigned char cr; + unsigned char clda0; + unsigned char clda1; + unsigned char bndry; + unsigned char tsr; + unsigned char ncr; + unsigned char fifo; + unsigned char isr; + unsigned char crda0; + unsigned char crda1; + unsigned char _reserved[2]; + unsigned char rsr; + unsigned char fer; + unsigned char cer; + unsigned char missed; + unsigned char data; + unsigned char _reserved2[14]; + unsigned char reset; + } page0; + struct { + unsigned char cr; + unsigned char par[6]; + unsigned char curp; + unsigned char mar[8]; + } page1; + struct { + unsigned char cr; + unsigned char pstart; + unsigned char pstop; + unsigned char rnpp; + unsigned char tpsr; + unsigned char lnpp; + unsigned char ach; + unsigned char acl; + unsigned char _reserved[4]; + unsigned char rcr; + unsigned char tcr; + unsigned char dcr; + unsigned char imr; + } page2; + unsigned char data; + } r; // Read registers + union { + struct { + unsigned char cr; + unsigned char pstart; + unsigned char pstop; + unsigned char bndry; + unsigned char tpsr; + unsigned char tbcl; + unsigned char tbch; + unsigned char isr; + unsigned char rsal; + unsigned char rsah; + unsigned char rbcl; + unsigned char rbch; + unsigned char rcr; + unsigned char tcr; + unsigned char dcr; + unsigned char imr; + unsigned char data; + unsigned char _reserved[14]; + unsigned char reset; + } page0; + struct { + unsigned char cr; + unsigned char par[6]; + unsigned char curp; + unsigned char mar[8]; + } page1; + struct { + unsigned char cr; + unsigned char clda0; + unsigned char clda1; + unsigned char rnpp; + unsigned char tpsr; + unsigned char lnpp; + unsigned char ach; + unsigned char acl; + unsigned char _reserved[8]; + } page2; + } w; // Write registers +} dp8390_regs; // __attribute__ ((aligned(1), packed)); + +// Command register - common to all pages + +#define DP8390_CR_STOP 0x01 // Stop: software reset +#define DP8390_CR_START 0x02 // Start: initialize device +#define DP8390_CR_TXPKT 0x04 // Transmit packet +#define DP8390_CR_RDMA 0x08 // Read DMA (recv data from device) +#define DP8390_CR_WDMA 0x10 // Write DMA (send data to device) +#define DP8390_CR_SEND 0x18 // Send packet +#define DP8390_CR_NODMA 0x20 // Remote (or no) DMA +#define DP8390_CR_PAGE0 0x00 // Page select +#define DP8390_CR_PAGE1 0x40 +#define DP8390_CR_PAGE2 0x80 +#define DP8390_CR_PAGEMSK 0x3F // Used to mask out page bits + +// Data configuration register + +#define DP8390_DCR_WTS 0x01 // 1=16 bit word transfers +#define DP8390_DCR_BOS 0x02 // 1=Little Endian +#define DP8390_DCR_LAS 0x04 // 1=Single 32 bit DMA mode +#define DP8390_DCR_LS 0x08 // 1=normal mode, 0=loopback +#define DP8390_DCR_ARM 0x10 // 0=no send command (program I/O) +#define DP8390_DCR_FIFO_1 0x00 // FIFO threshold +#define DP8390_DCR_FIFO_2 0x20 +#define DP8390_DCR_FIFO_4 0x40 +#define DP8390_DCR_FIFO_6 0x60 + +#define DP8390_DCR_INIT (DP8390_DCR_LS|DP8390_DCR_FIFO_4) + +// Interrupt status register + +#define DP8390_ISR_RxP 0x01 // Packet received +#define DP8390_ISR_TxP 0x02 // Packet transmitted +#define DP8390_ISR_RxE 0x04 // Receive error +#define DP8390_ISR_TxE 0x08 // Transmit error +#define DP8390_ISR_OFLW 0x10 // Receive overflow +#define DP8390_ISR_CNT 0x20 // Tally counters need emptying +#define DP8390_ISR_RDC 0x40 // Remote DMA complete +#define DP8390_ISR_RESET 0x80 // Device has reset (shutdown, error) + +// Interrupt mask register + +#define DP8390_IMR_RxP 0x01 // Packet received +#define DP8390_IMR_TxP 0x02 // Packet transmitted +#define DP8390_IMR_RxE 0x04 // Receive error +#define DP8390_IMR_TxE 0x08 // Transmit error +#define DP8390_IMR_OFLW 0x10 // Receive overflow +#define DP8390_IMR_CNT 0x20 // Tall counters need emptying +#define DP8390_IMR_RDC 0x40 // Remote DMA complete + +#define DP8390_IMR_All 0x3F // Everything but remote DMA + +// Receiver control register + +#define DP8390_RCR_SEP 0x01 // Save bad(error) packets +#define DP8390_RCR_AR 0x02 // Accept runt packets +#define DP8390_RCR_AB 0x04 // Accept broadcast packets +#define DP8390_RCR_AM 0x08 // Accept multicast packets +#define DP8390_RCR_PROM 0x10 // Promiscuous mode +#define DP8390_RCR_MON 0x20 // Monitor mode - 1=accept no packets + +// Receiver status register + +#define DP8390_RSR_RxP 0x01 // Packet received +#define DP8390_RSR_CRC 0x02 // CRC error +#define DP8390_RSR_FRAME 0x04 // Framing error +#define DP8390_RSR_FO 0x08 // FIFO overrun +#define DP8390_RSR_MISS 0x10 // Missed packet +#define DP8390_RSR_PHY 0x20 // 0=pad match, 1=mad match +#define DP8390_RSR_DIS 0x40 // Receiver disabled +#define DP8390_RSR_DFR 0x80 // Receiver processing deferred + +// Transmitter control register + +#define DP8390_TCR_NOCRC 0x01 // 1=inhibit CRC +#define DP8390_TCR_NORMAL 0x00 // Normal transmitter operation +#define DP8390_TCR_LOCAL 0x02 // Internal NIC loopback +#define DP8390_TCR_INLOOP 0x04 // Full internal loopback +#define DP8390_TCR_OUTLOOP 0x08 // External loopback +#define DP8390_TCR_ATD 0x10 // Auto transmit disable +#define DP8390_TCR_OFFSET 0x20 // Collision offset adjust + +// Transmit status register + +#define DP8390_TSR_TxP 0x01 // Packet transmitted +#define DP8390_TSR_COL 0x04 // Collision (at least one) +#define DP8390_TSR_ABT 0x08 // Aborted because of too many collisions +#define DP8390_TSR_CRS 0x10 // Lost carrier +#define DP8390_TSR_FU 0x20 // FIFO underrun +#define DP8390_TSR_CDH 0x40 // Collision Detect Heartbeat +#define DP8390_TSR_OWC 0x80 // Collision outside normal window + +// Page (buffer) allocation +#if 0 +#define DP8390_RX_START 1 +#define DP8390_RX_STOP 255-12 +#define DP8390_TX_BUF1 (DP8390_RX_STOP+1) +#define DP8390_TX_BUF2 (DP8390_TX_BUF1+6) +#define DP8390_TX_STOP 255 +#else +#if 0 +#define DP8390_RX_START 1 +#define DP8390_RX_STOP 127-12 +#define DP8390_TX_BUF1 (DP8390_RX_STOP+1) +#define DP8390_TX_BUF2 (DP8390_TX_BUF1+6) +#define DP8390_TX_STOP 127 +#else +#define DP8390_RX_START 0x60 +#define DP8390_RX_STOP 0x80 +#define DP8390_TX_BUF1 0x40 +#define DP8390_TX_BUF2 0x50 +#define DP8390_TX_STOP 127 +#endif +#endif + +#define IEEE_8023_MAX_FRAME 1518 // Largest possible ethernet frame +#define IEEE_8023_MIN_FRAME 64 // Smallest possible ethernet frame + +#define SC_LPE_MANUF 0x0104 +
