📄 reg_8019.h
字号:
/* a few useful Ethernet definitions. */
#define BUFSIZ 1600
#define NBUF 10
#define MIN_PACKET_SIZE 60 /* smallest legal size packet, no fcs */
#define MAX_PACKET_SIZE 1514 /* largest legal size packet, no fcs */
#define ETHER_ADDR_LEN 6 /* Etherne;a few useful Ethernet definitions.*/
#define TX_PAGES 6
#define NE_START_PG 0x40 /* First page of TX buffer */
#define TX_START_PG NE_START_PG
#define NE_STOP_PG 0x80 /* Last page + 1 of RX Ring */
#define RX_STOP_PG NE_STOP_PG
#define RX_START_PG NE_START_PG + TX_PAGES
#define RX_CURR_PG RX_START_PG + 1
#define EN_RBUF_STAT 0 /* Received frame status */
#define EN_RBUF_NXT_PG 1 /* Page after this frame */
#define EN_RBUF_SIZE_LO 2 /* Length of this frame */
#define EN_RBUF_SIZE_HI 3 /* Length of this frame */
#define SIZE_OF_8019_HDR 4 /* size of 8019 specific packet header */
#define SBUFSIZ 1600
#define BUFSIZ 1600
#define PKT_DEST 0
#define PKT_SRC 6
#define PKT_TYPE 12
#define SIZE_OF_ETH_PKT_HDR 14
/*****************************************************************************/
/* The EN registers - the Realtek RTL8019AS chip registers */
/* There are four pages of registers in the chip. You select */
/* which page you want, then address them at offsets 00-0F from base. */
/* The chip command register (EN_CMD) appears in all pages. */
#define EN_CMD XBYTE [0x300] /* The command register (for all pages) */
#define EN_DATA XBYTE [0x310] /* Remote DMA Port10~17h (for all pages)*/
#define EN_RESET XBYTE [0x318] /* Reset Port 18~1fh(for all pages) */
/* Register accessed at EN_CMD, the RTL8019 base addr */
#define EN_STOP 0x01 /* Stop and reset the chip */
#define EN_START 0x02 /* Start the chip, clear reset */
#define EN_TRANS 0x04 /* Transmit a frame */
#define EN_RREAD 0x08 /* Remote read */
#define EN_RWRITE 0x10 /* Remote write */
#define EN_NODMA 0x20 /* Remote DMA */
#define EN_PAGE0 0x00 /* Select page chip registers */
#define EN_PAGE1 0x40 /* using the two high-order bits */
#define EN_PAGE2 0x80
#define EN_PAGE3 0xc0
#define E8390_STOP 0x01 /* Stop and reset the chip */
#define E8390_START 0x02 /* Start the chip, clear reset */
#define E8390_TRANS 0x04 /* Transmit a frame */
#define E8390_RREAD 0x08 /* Remote read */
#define E8390_RWRITE 0x10 /* Remote write */
#define E8390_SPACKET 0x18 /* Send Packet */
#define E8390_NODMA 0x00 /* Remote DMA */
#define E8390_PAGE0 0x00 /* Select page chip registers */
#define E8390_PAGE1 0x40 /* using the two high-order bits */
#define E8390_PAGE2 0x80 /* Page 3 is invalid. */
/* Page 0 register offsets */
#define EN0_CLDALO XBYTE [0x301] /* RD Low byte of current local dma addr*/
#define EN0_STARTPG XBYTE [0x301] /* WR Starting page of ring buffer */
#define EN0_CLDAHI XBYTE [0x302] /* RD High byte of current local dma add*/
#define EN0_STOPPG XBYTE [0x302] /* WR Ending page +1 of ring buffer */
#define EN0_BOUNDARY XBYTE [0x303] /* RD/WR Boundary page of ring buffer */
#define EN0_TSR XBYTE [0x304] /* RD Transmit status reg */
#define EN0_TPSR XBYTE [0x304] /* WR Transmit starting page */
#define EN0_NCR XBYTE [0x305] /* RD Number of collision reg */
#define EN0_TCNTLO XBYTE [0x305] /* WR Low byte of tx byte count */
#define EN0_FIFO XBYTE [0x306] /* RD FIFO */
#define EN0_TCNTHI XBYTE [0x306] /* WR High byte of tx byte count */
#define EN0_ISR XBYTE [0x307] /* RD/WR Interrupt status reg */
#define EN0_CRDALO XBYTE [0x308] /* RD low byte of current remote dma add*/
#define EN0_RSARLO XBYTE [0x308] /* WR Remote start address reg 0 */
#define EN0_CRDAHI XBYTE [0x309] /* RD high byte, current remote dma add.*/
#define EN0_RSARHI XBYTE [0x309] /* WR Remote start address reg 1 */
#define EN0_RCNTLO XBYTE [0x30a] /* WR Remote byte count reg 0 */
#define EN0_8019ID0 XBYTE [0x30a] /* Only 8019AS */
#define EN0_RCNTHI XBYTE [0x30b] /* WR Remote byte count reg 1 */
#define EN0_8019ID1 XBYTE [0x30b] /* Only 8019AS */
#define EN0_RSR XBYTE [0x30c] /* RD RX status reg */
#define EN0_RXCR XBYTE [0x30c] /* WR RX configuration reg */
#define EN0_TXCR XBYTE [0x30d] /* WR TX configuration reg */
#define EN0_COUNTER0 XBYTE [0x30d] /* RD Rcv alignment error counter */
#define EN0_DCFG XBYTE [0x30e] /* WR Data configuration reg */
#define EN0_COUNTER1 XBYTE [0x30e] /* RD Rcv CRC error counter */
#define EN0_IMR XBYTE [0x30f] /* WR Interrupt mask reg */
#define EN0_COUNTER2 XBYTE [0x30f] /* RD Rcv missed frame error counter */
/* Bits in EN0_TSR - Transmitted packet status */
#define ENTSR_PTX 0x01 /* Packet transmitted without error */
#define ENTSR_ND 0x02 /* The transmit wasn't deferred. ? */
#define ENTSR_COL 0x04 /* The transmit collided at least once. */
/* Record of collision remain NCR reg. */
#define ENTSR_ABT 0x08 /* The transmit collided 16 times, and was deferred. */
#define ENTSR_CRS 0x10 /* The carrier sense was lost. */
#define ENTSR_FU 0x20 /* A "FIFO underrun" occurred during transmit. */
#define ENTSR_CDH 0x40 /* The collision detect "heartbeat" signal was lost. */
#define ENTSR_OWC 0x80 /* There was an out-of-window collision.*/
/* After slot time, there was collision. This case was excuted retransmission. ? */
/* Bits in EN0_ISR - Interrupt status register (RD WR) */
#define ENISR_RX 0x01 /* Receiver, no error */
#define ENISR_TX 0x02 /* Transceiver, no error */
#define ENISR_RX_ERR 0x04 /* Receiver, with error */
#define ENISR_TX_ERR 0x08 /* Transmitter, with error */
#define ENISR_OVER 0x10 /* Receiver overwrote the ring */
/* Gap area of receiver ring buffer was disappeared */
#define ENISR_COUNTERS 0x20 /* Counters need emptying */
/* MSB of network tally counter became 1 */
#define ENISR_RDC 0x40 /* remote dma complete */
#define ENISR_RESET 0x80 /* Reset completed */
#define ENISR_ALL 0x35 /*3f Interrupts we will enable 俊矾荐沥窃 */
/* RST RDC CNT OVW TXE RXE PTX PRX */
/* Bits in EN0_RSR and received packet status byte */
#define ENRSR_RXOK 0x01 /* Received a good packet */
#define ENRSR_CRC 0x02 /* CRC error(CNTR1++) */
#define ENRSR_FAE 0x04 /* Frame alignment error(CNTR0++) */
/*Packet isn't finished in byte boundary.*/
#define ENRSR_FO 0x08 /* FIFO overrun when receiving */
#define ENRSR_MPA 0x10 /* Missed packet.. Gap area isn't exist */
/* or because of monitor mode, packet is not buffered (CNTR2++) */
#define ENRSR_PHY 0x20 /* Physical/multicase address */
/* 荐脚茄 菩哦狼 荐脚瘤 绢靛饭胶(destination address)狼 辆幅
乔瘤拿 绢靛饭胶(PAR0~6)看带 版快俊绰 1, 钢萍 某胶飘 绢靛饭胶看带 版快绰 0 */
#define ENRSR_DIS 0x40 /* Receiver disable.set in monitor mode */
#define ENRSR_DEF 0x80 /* Deferring because of collision */
/*****************************************************************************/
/* Some generic ethernet register configurations. */
#define E8390_TX_IRQ_MASK 0x0A /* For register EN0_ISR */
#define E8390_RX_IRQ_MASK 0x05 */
#define E8390_RXCONFIG 0x04 /* EN0_RXCR: broadcasts, no multicast & errors */
#define E8390_RXOFF 0x20 /* EN0_RXCR: Accept no packets */
#define E8390_TXCONFIG 0x00 /* EN0_TXCR: Normal transmit mode */
#define E8390_TXOFF 0x02 /* EN0_TXCR: Transmitter off */
/*****************************************************************************/
/* Bits in EN0_RXCR - RX configuration reg */
//#define ENRXCR_RXCONFIG 0x04 /* EN0_RXCR: broadcasts,no multicast,errors */
#define ENRXCR_RXCONFIG 0x00 /* EN0_RXCR: only unicast */
#define ENRXCR_CRC 0x01 /* Save error packets(admit) */
#define ENRXCR_RUNT 0x02 /* Accept runt pckt(below 64bytes) */
#define ENRXCR_BCST 0x04 /* Accept broadcasts when 1 */
#define ENRXCR_MULTI 0x08 /* Multicast (if pass filter) when 0 */
#define ENRXCR_PROMP 0x10 /* Promiscuous physical addresses when 1*/
/* when 0,accept assigned PAR0~5 address */
#define ENRXCR_MON 0x20 /* Monitor mode (no packets rcvd) */
/* Bits in EN0_TXCR - TX configuration reg */
#define ENTXCR_TXCONFIG 0x00 /* Normal transmit mode */
#define ENTXCR_CRC 0x01 /* inhibit CRC,do not append crc when 1 */
#define ENTXCR_LOOP 0x02 /* set internal loopback mode ? */
#define ENTXCR_LB01 0x06 /* encoded loopback control ? */
#define ENTXCR_ATD 0x08 /* auto tx disable */
/* when 1, if specified multicast packet was received, disable transmit */
#define ENTXCR_OFST 0x10 /* collision offset enable */
/* selection of collision algorithm. When 0, gererally back-off algorithm select */
/* 1 捞扼搁 快急 鉴困啊 郴妨哎 荐 乐绰 归坷橇 舅绊府硫阑 急琶茄促. */
/* Bank0/Reg0E */
/* Bits in EN0_DCFG - Data config register */
#define ENDCFG_WTS 0x01 /* byte transfer mode selection */
/*#endif */
#define ENDCFG_BOS 0x02 /* byte order selection */
/* 0: MD15-8, LSB on MD7-0;little endian */
/* 1: MSB on MD7-0, LSB on MD15-8 ? */
#define ENDCFG_LAS 0x04 /* long addr selection (must be set to zero) */
/* when 1 is 32bit address mode */
/* 泅犁 磊悼 檬扁拳 葛靛绰 瘤沥登绢 乐瘤 臼促.. 恐 弊凡鳖? */
#define ENDCFG_BMS 0x08 /* loopback select set is normal mode */
/* 0: Loopback mode select. Bits 1 and 2 of the
EN0_TXCR must also be programmed for Loopback
1: Normal operation */
#define ENDCFG_ARM 0x10 /* autoinitialize remote when 1 */
#define ENDCFG_FT00 0x00 /* fifo treshold 2 byte */
#define ENDCFG_FT01 0x20 /* 4 byte */
#define ENDCFG_FT10 0x40 /* 8 byte */
#define ENDCFG_FT11 0x60 /* 12 byte */
/* Page 1 register offsets */
#define EN1_PAR0 XBYTE [0x301] /* RD/WR This board's physical ethernet addr */
#define EN1_PAR1 XBYTE [0x302]
#define EN1_PAR2 XBYTE [0x303]
#define EN1_PAR3 XBYTE [0x304]
#define EN1_PAR4 XBYTE [0x305]
#define EN1_PAR5 XBYTE [0x306]
#define EN1_CURR XBYTE [0x307] /* RD/WR current page reg */
#define EN1_CURPAG EN1_CURR
#define EN1_MAR0 XBYTE [0x308] /* RD/WR Multicast filter mask array (8 bytes) */
#define EN1_MAR1 XBYTE [0x309]
#define EN1_MAR2 XBYTE [0x30a]
#define EN1_MAR3 XBYTE [0x30b]
#define EN1_MAR4 XBYTE [0x30c]
#define EN1_MAR5 XBYTE [0x30d]
#define EN1_MAR6 XBYTE [0x30e]
#define EN1_MAR7 XBYTE [0x30f]
/* Page 2 register offsets */
#define EN2_STARTPG XBYTE [0x301] /* RD only Reg. */
#define EN2_STOPPG XBYTE [0x302]
#define EN2_TPSR XBYTE [0x304]
#define EN2_RXCR XBYTE [0x30c]
#define EN2_TXCR XBYTE [0x30d]
#define EN2_DCFG XBYTE [0x30e]
#define EN2_IMR XBYTE [0x30f]
/* Page 3 register offsets There is no Reg. in the DP8390. */
#define CR9346 XBYTE [0x301] /* RD/WR There is no Reg. in the DP8390 */
#define BPAGE XBYTE [0x302] /* RD/WR */
#define CONFIG0 XBYTE [0x303] /* RD */
#define CONFIG1 XBYTE [0x304] /* RD/WR */
#define CONFIG2 XBYTE [0x305] /* RD/WR */
#define CONFIG3 XBYTE [0x306] /* RD/WR */
#define CONFIG4 XBYTE [0x30d] /* RD */
#define CSNSAV XBYTE [0x308] /* RD */
#define HLTCLK XBYTE [0x309] /* WR */
#define INTR XBYTE [0x30B] /* RD */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -