/* $NetBSD: dp8390.h,v 1.3 1994/10/27 04:21:11 cgd Exp $ */ /* * source in this file came from * the Mach ethernet boot written by Leendert van Doorn. * * National Semiconductor DP8390 Network Interface Controller */ /* page 0: for reading */ #define DP_CR 0x00 /* read side of command register */ #define DP_CLDA0 0x01 /* current local DMA address 0 */ #define DP_CLDA1 0x02 /* current local DMA address 1 */ #define DP_BNRY 0x03 /* boundary pointer */ #define DP_TSR 0x04 /* transmit status register */ #define DP_NCR 0x05 /* number of collisions register */ #define DP_FIFO 0x06 /* FIFO */ #define DP_ISR 0x07 /* interrupt status register */ #define DP_CRDA0 0x08 /* current remote DMA address 0 */ #define DP_CRDA1 0x09 /* current remote DMA address 1 */ #define DP_RSR 0x0C /* receive status register */ #define DP_CNTR0 0x0D /* tally counter 0 */ #define DP_CNTR1 0x0E /* tally counter 1 */ #define DP_CNTR2 0x0F /* tally counter 2 */ /* page 0: for writing */ #define DP_CR 0x00 /* write side of command register */ #define DP_PSTART 0x01 /* page start register */ #define DP_PSTOP 0x02 /* page stop register */ #define DP_BNRY 0x03 /* boundary pointer */ #define DP_TPSR 0x04 /* transmit page start register */ #define DP_TBCR0 0x05 /* transmit byte count register 0 */ #define DP_TBCR1 0x06 /* transmit byte count register 1 */ #define DP_ISR 0x07 /* interrupt status register */ #define DP_RSAR0 0x08 /* remote start address register 0 */ #define DP_RSAR1 0x09 /* remote start address register 1 */ #define DP_RBCR0 0x0A /* remote byte count register 0 */ #define DP_RBCR1 0x0B /* remote byte count register 1 */ #define DP_RCR 0x0C /* receive configuration register */ #define DP_TCR 0x0D /* transmit configuration register */ #define DP_DCR 0x0E /* data configuration register */ #define DP_IMR 0x0F /* interrupt mask register */ /* page 1: read/write */ #define DP_CR 0x00 /* command register */ #define DP_PAR0 0x01 /* physical address register 0 */ #define DP_PAR1 0x02 /* physical address register 1 */ #define DP_PAR2 0x03 /* physical address register 2 */ #define DP_PAR3 0x04 /* physical address register 3 */ #define DP_PAR4 0x05 /* physical address register 4 */ #define DP_PAR5 0x06 /* physical address register 5 */ #define DP_CURR 0x07 /* current page register */ #define DP_MAR0 0x08 /* multicast address register 0 */ #define DP_MAR1 0x09 /* multicast address register 1 */ #define DP_MAR2 0x0A /* multicast address register 2 */ #define DP_MAR3 0x0B /* multicast address register 3 */ #define DP_MAR4 0x0C /* multicast address register 4 */ #define DP_MAR5 0x0D /* multicast address register 5 */ #define DP_MAR6 0x0E /* multicast address register 6 */ #define DP_MAR7 0x0F /* multicast address register 7 */ /* bits in command register */ #define CR_STP 0x01 /* stop: software reset */ #define CR_STA 0x02 /* start: activate NIC */ #define CR_TXP 0x04 /* transmit packet */ #define CR_DMA 0x38 /* mask for DMA control */ # define CR_DM_NOP 0x00 /* DMA: no operation */ # define CR_DM_RR 0x08 /* DMA: remote read */ # define CR_DM_RW 0x10 /* DMA: remote write */ # define CR_DM_SP 0x18 /* DMA: send packet */ # define CR_DM_ABORT 0x20 /* DMA: abort remote DMA operation */ #define CR_PS 0xC0 /* mask for page select */ # define CR_PS_P0 0x00 /* register page 0 */ # define CR_PS_P1 0x40 /* register page 1 */ # define CR_PS_T0 0x80 /* test mode register map */ # define CR_SP_T1 0xC0 /* test mode register map */ /* bits in interrupt status register */ #define ISR_PRX 0x01 /* packet received with no errors */ #define ISR_PTX 0x02 /* packet transmitted with no errors */ #define ISR_RXE 0x04 /* receive error */ #define ISR_TXE 0x08 /* transmit error */ #define ISR_OVW 0x10 /* overwrite warning */ #define ISR_CNT 0x20 /* counter overflow */ #define ISR_RDC 0x40 /* remote DMA complete */ #define ISR_RST 0x80 /* reset status */ /* bits in interrupt mask register */ #define IMR_PRXE 0x01 /* packet received ienable */ #define IMR_PTXE 0x02 /* packet transmitted ienable */ #define IMR_RXEE 0x04 /* receive error ienable */ #define IMR_TXEE 0x08 /* transmit error ienable */ #define IMR_OVWE 0x10 /* overwrite warning ienable */ #define IMR_CNTE 0x20 /* counter overflow ienable */ #define IMR_RDCE 0x40 /* DMA complete ienable */ /* bits in data control register */ #define DCR_WTS 0x01 /* word transfer select */ # define DCR_BYTEWIDE 0x00 /* WTS: byte wide transfers */ # define DCR_WORDWIDE 0x01 /* WTS: word wide transfers */ #define DCR_BOS 0x02 /* byte order select */ # define DCR_LTLENDIAN 0x00 /* BOS: little endian */ # define DCR_BIGENDIAN 0x02 /* BOS: big endian */ #define DCR_LAS 0x04 /* long address select */ #define DCR_BMS 0x08 /* burst mode select */ #define DCR_AR 0x10 /* autoinitialize remote */ #define DCR_FTS 0x60 /* FIFO threshold select */ # define DCR_2BYTES 0x00 /* 2 bytes */ # define DCR_4BYTES 0x40 /* 4 bytes */ # define DCR_8BYTES 0x20 /* 8 bytes */ # define DCR_12BYTES 0x60 /* 12 bytes */ /* bits in transmit configuration register */ #define TCR_CRC 0x01 /* inhibit CRC */ #define TCR_ELC 0x06 /* encoded loopback control */ # define TCR_NORMAL 0x00 /* ELC: normal operation */ # define TCR_INTERNAL 0x02 /* ELC: internal loopback */ # define TCR_0EXTERNAL 0x04 /* ELC: external loopback LPBK=0 */ # define TCR_1EXTERNAL 0x06 /* ELC: external loopback LPBK=1 */ #define TCR_ATD 0x08 /* auto transmit */ #define TCR_OFST 0x10 /* collision offset enable (be nice) */ /* bits in transmit status register */ #define TSR_PTX 0x01 /* packet transmitted (without error)*/ #define TSR_DFR 0x02 /* transmit deferred */ #define TSR_COL 0x04 /* transmit collided */ #define TSR_ABT 0x08 /* transmit aborted */ #define TSR_CRS 0x10 /* carrier sense lost */ #define TSR_FU 0x20 /* fifo underrun */ #define TSR_CDH 0x40 /* CD heartbeat */ #define TSR_OWC 0x80 /* out of window collision */ /* bits in receive configuration register */ #define RCR_SEP 0x01 /* save errored packets */ #define RCR_AR 0x02 /* accept runt packets */ #define RCR_AB 0x04 /* accept broadcast */ #define RCR_AM 0x08 /* accept multicast */ #define RCR_PRO 0x10 /* physical promiscuous */ #define RCR_MON 0x20 /* monitor mode */ /* bits in receive status register */ #define RSR_PRX 0x01 /* packet received intact */ #define RSR_CRC 0x02 /* CRC error */ #define RSR_FAE 0x04 /* frame alignment error */ #define RSR_FO 0x08 /* FIFO overrun */ #define RSR_MPA 0x10 /* missed packet */ #define RSR_PHY 0x20 /* multicast address match !! */ #define RSR_DIS 0x40 /* receiver disabled */ /* dp8390 configuration information */ typedef struct { u_short dc_reg; /* dp8390 base address */ u_long dc_mem; /* base memory */ u_char dc_tpsr; /* transmit start page */ u_char dc_pstart; /* receive start page */ u_char dc_pstop; /* receive end page */ } dpconf_t; /* dp8390 receive header */ typedef struct { u_char dh_status; /* copy of rsr */ u_char dh_next; /* pointer to next packet */ u_char dh_rbcl; /* receive byte count low */ u_char dh_rbch; /* receive byte count high */ } dphdr_t;