www.pudn.com > wavDEMO.zip > RTL8019A.H


/************************************* 
  Copyright 2001 by Haia Tech 
  海佳科技有限公司 
  www.haia2004.com 
  Email:haia2004@vip.sina.com 
  Tel:0731-4552122 4553216 
*************************************/ 
#define PAGE	0x44 
 
/*register declarations for RTL8019AS			*/ 
 
/*Page0(PS1=0,PS0=0)	*/ 
/*RD			*/ 
#define CR	port0000 
	/*Command*/ 
#define CLDA0	port0100 
	/*Curent Local DMA Address 0*/ 
#define CLDA1	port0200 
	/*Curent Local DMA Address 1*/ 
#define BNRY 	port0300 
	/*Boundary Pointer*/ 
#define TSR	port0400 
	/*Transmit Status Register*/ 
#define NCR	port0500 
	/*Number of Collisions Register*/ 
#define FIFO	port0600 
#define ISR	port0700 
	/*Interrupt Status Register*/ 
#define CRDA0	port0800 
	/*Current Remote DMA Address 0*/ 
#define CRDA1	port0900 
	/*Current Remote DMA Address 1*/ 
#define CRD0	port0A00 
	/*Configuration Register A*/ 
#define CRD1	port0B00 
	/*Configuration Register B*/ 
#define RSR	port0C00 
	/*Receive status Register*/ 
#define CNTR0  	port0D00 
	/*Tally Counter 0(Frame Alignment Errors)*/ 
#define CNTR1	port0E00 
	/*Tally Counter 1(CRC Errors)*/ 
#define CNTR2	port0F00 
	/*Tally Counter 2(Missed packet Errors)*/ 
/*WR		*/	 
#define PSTART	port0100 
	/*Page Start Register*/ 
#define PSTOP	port0200 
	/*Page stop Regiser*/ 
#define TPSR	port0400 
	/*Transmit Page Start Address*/ 
#define TBCR0	port0500 
	/*Transmit Byte Count Register 0*/ 
#define TBCR1	port0600 
	/*Transmit Byte Count Register 1*/ 
#define RSAR0	port0800 
	/*Remote Start Address Register 0*/ 
#define RSAR1	port0900 
	/*Remote Start Address Register 1*/ 
#define RBCR0	port0A00 
	/*Remote Byte Count Register 0*/ 
#define RBCR1	port0B00 
	/*Remote Byte Count Register 1*/ 
#define RCR	port0C00 
	/*Receive Configuration Register*/ 
#define TCR  	port0D00 
	/*Transmit Configuration Register*/ 
#define DCR	port0E00 
	/*Data Configuration Register*/ 
#define IMRR	port0F00 
	/*Interrupt Mask Register*/ 
 
/*Page1(PS1=0,PS0=1)	*/ 
#define CR	port0000 
	/*Command*/ 
#define PAR0	port0100 
	/*Physical Address Register 0*/ 
#define PAR1	port0200 
	/*Physical Address Register 1*/	 
#define PAR2	port0300 
	/*Physical Address Register 2*/ 
#define PAR3	port0400 
	/*Physical Address Register 3*/ 
#define PAR4	port0500 
	/*Physical Address Register 4*/ 
#define PAR5	port0600 
	/*Physical Address Register 5*/ 
#define CURR	port0700 
	/*Current Page Register */ 
#define MAR0	port0800 
	/*Multicast Address Register 0*/ 
#define MAR1	port0900 
	/*Multicast Address Register 1*/ 
#define MAR2	port0A00 
	/*Multicast Address Register 2*/ 
#define MAR3	port0B00 
	/*Multicast Address Register 3*/ 
#define MAR4	port0C00 
	/*Multicast Address Register 4*/ 
#define MAR5	port0D00 
	/*Multicast Address Register 5*/ 
#define MAR6	port0E00 
	/*Multicast Address Register 6*/ 
#define MAR7	port0F00 
	/*Multicast Address Register 7*/ 
 
/*Page 2(PS1=1,PS0=0)*/ 
	 
/*page 3(PS1=1,PS0=0)*/ 
#define CR93C46	port0100 
#define CONFIG3	port0600 
 
#define DMA	    port1000 
 
#define ARP	    1 
#define UDP     2 
#define IGMP    3 
#define LSS     4 
 
#define BROADCAST     1 
#define REC_ARP       2 
#define NOD           3 
 
 
	/*Configuration Register D*/ 
	 
/*NOTE:									*/ 
/*	Some registers in page 2 are complementary to the registers in 	*/ 
/*	page 0.								*/ 
/*	Page0	RD		WR					*/		 
/*	0X01	CLDA0		PSTART					*/ 
/*	0X02	CLDA1		PSTOP					*/ 
/*	0X04			TPSR					*/ 
/*	0X0C			RCR					*/ 
/*	0X0D			TCR					*/ 
/*	0X0E			DCR					*/ 
/*	0X0F			IMR					*/ 
	 
 
struct ipaddr 
{ 
  unsigned short addr2_1; 
  unsigned short addr4_3; 
}; 
struct mac 
{ 
  unsigned short addr2_1; 
  unsigned short addr4_3; 
  unsigned short addr6_5; 
}; 
 
struct iphdr 
{ 
  unsigned short  tos_version; 
  unsigned short tol_len; 
  unsigned short id; 
  unsigned short frag_off; 
  unsigned short protocal_ttl; 
  unsigned short chksum; 
  struct ipaddr saddr; 
  struct ipaddr daddr; 
}; 
struct udphdr 
{ 
  unsigned short sport; 
  unsigned short dport; 
  unsigned short length; 
  unsigned short chksum; 
}; 
 
struct igmphdr 
{ 
  unsigned short type_mrt; 
  unsigned short chksum; 
  struct  ipaddr groupaddr; 
}; 
struct pre_udphdr 
{ 
  struct ipaddr saddr; 
  struct ipaddr daddr; 
  unsigned short  protocal_value; 
  unsigned short  length; 
}; 
struct arp 
{ 
  unsigned short hard_type; 
  unsigned short proto_type; 
  unsigned short proto_hard_length; 
  unsigned short op_code; 
  struct mac    send_macaddr; 
  struct ipaddr send_ipaddr; 
  struct mac    rec_macaddr; 
  struct ipaddr rec_ipaddr; 
}; 
 
ioport unsigned short CR; 
ioport unsigned short CLDA0; 
ioport unsigned short CLDA1; 
ioport unsigned short BNRY; 
ioport unsigned short TSR; 
ioport unsigned short NCR; 
ioport unsigned short FIFO; 
ioport unsigned short ISR; 
ioport unsigned short ISR; 
ioport unsigned short CRDA0; 
ioport unsigned short CLDA1; 
ioport unsigned short CRD0; 
ioport unsigned short CRD1; 
ioport unsigned short RSR; 
ioport unsigned short CNTR0; 
ioport unsigned short CNTR1; 
ioport unsigned short CNTR2; 
ioport unsigned short PSTART; 
ioport unsigned short PSTOP; 
ioport unsigned short TPSR; 
ioport unsigned short TBCR0; 
ioport unsigned short TBCR1; 
ioport unsigned short RSAR0; 
ioport unsigned short RSAR1; 
ioport unsigned short RBCR0; 
ioport unsigned short RBCR1; 
ioport unsigned short RCR; 
ioport unsigned short TCR; 
ioport unsigned short DCR; 
ioport unsigned short IMRR; 
/*Page1(PS1=0,PS0=1)	*/ 
ioport unsigned short PAR0; 
ioport unsigned short PAR1; 
ioport unsigned short PAR2; 
ioport unsigned short PAR3; 
ioport unsigned short PAR4; 
ioport unsigned short PAR5; 
ioport unsigned short CURR; 
ioport unsigned short MAR0; 
ioport unsigned short MAR1; 
ioport unsigned short MAR2; 
ioport unsigned short MAR3; 
ioport unsigned short MAR4; 
ioport unsigned short MAR5; 
ioport unsigned short MAR6; 
ioport unsigned short MAR7; 
/*page 3(PS1=1,PS0=0)*/ 
ioport unsigned short CR93C46; 
ioport unsigned short CONFIG3; 
 
ioport unsigned short DMA; 
 
 
void init_protocal(); 
void load_udp(unsigned short *buf,unsigned short *length); 
void load_ip(unsigned short *buf,unsigned short *length); 
void send_frame(unsigned short *buf,unsigned short MAC_type,unsigned short PROTO_type,unsigned short length); 
void send_arp(struct ipaddr *ip,unsigned short arp_type); 
unsigned short checksum(unsigned short *buffer, short size); 
unsigned short  change_byte(unsigned short value); 
void send_igmp(unsigned short type);