📄 dev_net_rtl8019.h
字号:
/* dev_net_rtl8019.h - skyeye realtek 8019 ethernet controllor simulation Copyright (C) 2003 - 2005 Skyeye Develop Group for help please send mail to <skyeye-developer@lists.gro.clinux.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *//* * 05/25/2005 modified for rtl8019 * walimis <wlm@student.dlut.edu.cn> * * 02/25/2003 initial version * yangye <yangye@163.net> * chenyu <chenyu@hpclab.cs.tsinghua.edu.cn> */#ifndef _DEV_NET_RTL8019_H_#define _DEV_NET_RTL8019_H_#define NE_CR 0x0 //R/W,对不同的页,CR都是同一个//page0 registers #define NE_PSTART 0x01 //W,接收缓冲环起始页#define NE_PSTOP 0x02 //W,接收缓冲环终止页(不包括此页)#define NE_BNRY 0x03 //R/W,接收缓冲环读指针,指向下一个包到来时的起始页,应初始化成=CURR=PSTART#define NE_TPSR 0x04 //W,Local DMA发送缓冲起始页寄存器#define NE_TBCR0 0x05 //W,Local DMA发送长度低位#define NE_TBCR1 0x06 //W,Local DMA发送长度高位#define NE_ISR 0x07 //R/W,中断状态寄存器#define NE_RSAR0 0x08 //W,Remote DMA目的起始地址低位#define NE_RSAR1 0x09 //W,Remote DMA目的起始地址高位//这两个是CPU向网卡写入或读出数据包的实际长度,执行Remote DMA命令前设置#define NE_RBCR0 0x0a //W,Remote DMA数据长度低位#define NE_RBCR1 0x0b //W,Remote DMA数据长度高位#define NE_RCR 0x0c //W,接收配置寄存器,初始化时写入0x04,表示只接收发给本网卡MAC地址的,大于64字节的以太网包或广播包#define NE_TCR 0x0d //发送配置寄存器,初始化开始时写入0x02,置网卡为Loop Back模式,停止发送数据包,初始化结束写入0x00。正常发送数据包并加上CRC#define NE_DCR 0x0e //W,数据配置寄存器,初始化时写入0x48,8位模式,FIFO深度8字节,DMA方式#define NE_IMR 0x0f //W,中断屏蔽寄存器它的各位和ISR中的各位相对应,向IMR写入值即为打开相应中断//page1 registers#define NE_PAR0 0x01 //R/W,网卡MAC地址最高位#define NE_PAR1 0x02 //R/W,网卡MAC地址#define NE_PAR2 0x03 //R/W,网卡MAC地址#define NE_PAR3 0x04 //R/W,网卡MAC地址#define NE_PAR4 0x05 //R/W,网卡MAC地址#define NE_PAR5 0x06 //R/W,网卡MAC地址最低位#define NE_CURR 0x07 //R/W,接收缓冲环写指针#define NE_MAR0 0x08 //R/W,组播寄存器#define NE_MAR1 0x09 //R/W,组播寄存器#define NE_MAR2 0x0a //R/W,组播寄存器#define NE_MAR3 0x0b //R/W,组播寄存器#define NE_MAR4 0x0c //R/W,组播寄存器#define NE_MAR5 0x0d //R/W,组播寄存器#define NE_MAR6 0x0e //R/W,组播寄存器#define NE_MAR7 0x0f //R/W,组播寄存器//page2 registers//#define NE_PSTART 0x01 //R,接收缓冲环起始页//#define NE_PSTOP 0x02 //R,接收缓冲环终止页(不包括此页)//#define NE_TPSR 0x04 //R,Local DMA发送缓冲起始页寄存器//#define NE_RCR 0x0c //R,接收配置寄存器//#define NE_TCR 0x0d //R,发送配置寄存器//#define NE_DCR 0x0e //R,数据配置寄存器//#define NE_IMR 0x0f //R,用来读中断屏蔽寄存器IMR状态//CR命令寄存器的命令 #define CMD_STOP 0x01 //网卡停止收发数据#define CMD_RUN 0x02 //网卡执行命令并开始收发数据包(命令为下面四种)#define CMD_XMIT 0x04 //Local DMA SEND(网卡――>以太网 )#define CMD_READ 0x08 //Remote DMA READ,用于手动接收数据(网卡――>CPU)#define CMD_WRITE 0x10 //Remote DMA WRITE (网卡<――CPU)#define CMD_SEND 0x18 //SEND COMMAND命令,用于自动接收数据包 (网卡――>CPU)#define CMD_NODMA 0x20 //停止DMA操作#define CMD_PAGE0 0x00 // 选择第0页(要先选页,再读写该页寄存器)#define CMD_PAGE1 0x40 // 选择第1页#define CMD_PAGE2 0x80 // 选择第2页//写入TPSR的值 #define XMIT_START 0x4000 //发送缓冲起始地址(写入时要右移8位得到页号)//写入PSTART的值 #define RECV_START 0x4600 //接收缓冲起始地址(写入时要右移8位得到页号)//写入PSTOP的值 #define RECV_STOP 0x6000 //接收缓冲结束地址(写入时要右移8位得到页号)//中断状态寄存器的值 #define ISR_PRX 0x01 //正确接收数据包中断。做接收处理#define ISR_PTX 0x02 //正确发送数据包中断。做不做处理要看上层软件了。#define ISR_RXE 0x04 //接收数据包出错。做重新设置BNRY=CURR处理。#define ISR_TXE 0x08 //由于冲突次数过多,发送出错。做重发处理#define ISR_OVW 0x10 //网卡内存溢出。做软件重启网卡处理。见手册。#define ISR_CNT 0x20 //出错计数器中断,屏蔽掉(屏蔽用IMR寄存器)。#define ISR_RDC 0x40 //Remote DMA结束 。屏蔽掉。轮询等待DMA结束。#define ISR_RST 0x80 //网卡Reset,屏蔽掉。//中断屏蔽寄存器的值 #define ISR_PRX 0x01#define ISR_PTX 0x02#define ISR_RXE 0x04#define ISR_TXE 0x08#define ISR_OVW 0x10#define ISR_CNT 0x20#define ISR_RDC 0x40#define ISR_RST 0x80//数据控制寄存器//初始化时写入0x48,8位模式,FIFO深度8字节,DMA方式。#define DCR_WTS 0x01#define DCR_BOS 0x02#define DCR_LAS 0x04#define DCR_LS 0x08#define DCR_ARM 0x10#define DCR_FIFO2 0x00#define DCR_FIFO4 0x20#define DCR_FIFO8 0x40#define DCR_FIFO12 0x60//TCR发送配置寄存器//初始化开始时写入0x02,置网卡为Loop Back模式,停止发送数据包,//初始化结束写入0x00。正常发送数据包并加上CRC。#define TCR_CRC 0x01#define TCR_LOOP_NONE 0x00#define TCR_LOOP_INT 0x02#define TCR_LOOP_EXT 0x06#define TCR_ATD 0x08#define TCR_OFST 0x10//RCR接收配置寄存器//初始化时写入0x04。只接收发给本网卡MAC地址大于64字节的以太网包或广播包#define RCR_SEP 0x01#define RCR_AR 0x02#define RCR_AB 0x04#define RCR_AM 0x08#define RCR_PRO 0x10#define RCR_MON 0x20/* Bits in received packet status byte and EN0_RSR*/#define RSR_RXOK 0x01 /* Received a good packet */#define RSR_CRC 0x02 /* CRC error */#define RSR_FAE 0x04 /* frame alignment error */#define RSR_FO 0x08 /* FIFO overrun */#define RSR_MPA 0x10 /* missed pkt */#define RSR_PHY 0x20 /* physical/multicast address */#define RSR_DIS 0x40 /* receiver disable. set in monitor mode */#define RSR_DEF 0x80 /* deferring *//* Transmitted packet status, EN0_TSR. */#define TSR_PTX 0x01 /* Packet transmitted without error */#define TSR_ND 0x02 /* The transmit wasn't deferred. */#define TSR_COL 0x04 /* The transmit collided at least once. */#define TSR_ABT 0x08 /* The transmit collided 16 times, and was deferred. */#define TSR_CRS 0x10 /* The carrier sense was lost. */#define TSR_FU 0x20 /* A "FIFO underrun" occurred during transmit. */#define TSR_CDH 0x40 /* The collision detect "heartbeat" signal was lost. */#define TSR_OWC 0x80 /* There was an out-of-window collision. *//* walimis */#define START_PAGE 0x40#define END_PAGE 0x80#define PAGE_SIZE 0x100#define PAGE_NUM (END_PAGE - START_PAGE) /* 16Kbytes */#define INT_RTL8019 0//the structure typedef struct net_rtl8019_io{ // Page 0 // Command Register - 00h read/write u8 CR; //01h write ; page start register u8 PSTART; //02h write ; page stop register u8 PSTOP; //03h read/write ; boundary pointer u8 BNRY; //04h write ; transmit page start register u8 TSR; u8 TPSR; //05,06h write ; transmit byte-count register u8 TBCR0; u8 TBCR1; // Interrupt Status Register - 07h read/write u8 ISR; //08,09h write ; remote start address register u8 RSAR0; u8 RSAR1; //0a,0bh write ; remote byte-count register u8 RBCR0; u8 RBCR1; // Receive Configuration Register - 0ch write u8 RSR; u8 RCR; // Transmit Configuration Register - 0dh write u8 CNTR0; u8 TCR; // Data Configuration Register - 0eh write u8 CNTR1; u8 DCR; // Interrupt Mask Register - 0fh write u8 CNTR2; u8 IMR; // Page 1 // // Command Register 00h (repeated) //01-06h read/write ; MAC address u8 PAR0; u8 PAR1; u8 PAR2; u8 PAR3; u8 PAR4; u8 PAR5; // 07h read/write ; current page register u8 CURR; // 08-0fh read/write ; multicast hash array //Bit8u MAR[8]; // // Page 2 - diagnostic use only // // Command Register 00h (repeated) // // Page Start Register 01h read (repeated) PSTART // Page Stop Register 02h read (repeated) PSTOP // Transmit Page start address 04h read (repeated) TPSR // Receive Configuration Register 0ch read (repeated) RCR // Transmit Configuration Register 0dh read (repeated)TCR // Data Configuration Register 0eh read (repeated) DCR // Interrupt Mask Register 0fh read (repeated) IMR // u8 PROM[12]; // 12 bytes in Prom for MAC addr. u8 *sram; u32 remote_read_offset; u32 remote_write_offset; u32 remote_read_count; u32 remote_write_count; int need_update;} net_rtl8019_io_t;static u8 rtl8019_output (struct device_desc *dev, u8 * buf, u16 packet_len);static void rtl8019_input (struct device_desc *dev);#endif //_DEV_NET_RTL8019_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -