⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dev_net_rtl8019.h

📁 这是Skyeye 0.9 版本的源代码
💻 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 + -