亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hub.bak

?? RDC R2886 Ethernet hub功能 源碼,paradigm c++上運行測試
?? BAK
?? 第 1 頁 / 共 2 頁
字號:
/*
 	R2886 sample driver, 09/05/2003 V09C
   RDC semiconductor Co. Ltd
   6F-1, No.2, Lihsin Rd 3, Science-Base Park, HsinChu 300, Taiwan, R.O.C.
   Tel: 886-3-666-2866, FAX: 886-3-563-1498, http://www.rdc.com.tw

   This sample code is very simple. It uses the interrupt driven for
   transmit and receive. It works like as two port HUB. MAC1 receieved
   packet then MAC2 will send. MAC2 received packet then MAC1 will send.

   In normal process, it do nothing.

   In interrupt handler, MAC1 received then MAC2 send. MAC2 received
   then MAC1 send.


   Modification List:
   11/07/2003	Start

*/

#include <systypes.h>					/* Paradigm C++ standard types */
#include <stdio.h>
#include <dos.h>
#include <alloc.h>
#include <embedded.h>
#include "hub.h"

#define 	__CPPARGS
#define	CACHE_CTRL			0x0	/* Cache Control: b15 IC, b14 DC, b11 NCR3, b10 NCR2, b9 NCR1, b8 NCR0, b7 WIR */
#define	REFRESH_COUNT_D	1000		/* Host Clock 100Mhz, 10 us */
#define	SDRAM_MODE_D		0x0030	/* FEF2h, CAS latency 2 */
#define	SDRAM_CTRL_D		0x0009	/* FEF4h, 4M*16bits, SDRAM enable */
#define	SDRAM_TIMING_D		0xF933	/* FEF6h, Tsrx 15clk, Mrx 9clk, Mpc 3clk, RCD 3clk */
#define	SDRAM_DELAYL_D		0x0577	/* FFFAh, Delay Line */

#define	DESC_COUNT		16
#define BUF_SIZE		1536
#define MCR0_DEFAULT	(MC_PRO)
#define	MCR1_DEFAULT	MC_MXLEN1
#define	MBCR_DEFAULT   BC_BLW32 | BC_RHPT32
#define	TXINTC			0		/* TX Interrupt Count */
#define	TXTIMER			0		/* TX interrupt timeout */
#define	RXINTC			0		/* RX Interrupt Count */
#define	RXTIMER			0		/* RX interrupt timeout */
#define 	PFTH				0x0700 /* Pause Frame Threshold */
#define	MAC_ADDRL		0x0000
#define	MAC_ADDRM		0x6000
#define	MAC_ADDRH		0x5001
#define	HOST_CLOCK	125000000L		/* 100M hz */
#define	BAUD_RATE	115200				/* Baud Rate */
#define	UARTBASE0	0xff80
#define	UARTBASE1	0xff10

/* Select Target Board, only can chioce one */
//#define	DEMO_BOARD				/* With SWITCH chip and Kendin PHY chip KS6103 */
#define	EVB_BOARD				/* With INTEL PHY chip LXT972 */

#ifdef	DEMO_BOARD
#define	SWITCH_EN			  /* With SWITCH Chip in EVB */
#define	KEDDIN_PHY_KS6103		/* Keddin PHY chip KS6103 */
#endif

#ifdef	EVB_BOARD
//#define	INTEL_PHY_LXT972	  /* INTEL PHY chip LXT972 */
#define	IP101  			  /* INTEL PHY chip IP101 */
#endif

int	dummy_reserved;
MAC_STRU mac1_info, mac2_info;

void init_system(void);
void init_mac_info(void);
uint32 linear_to_real(uint32);
void init_mac_desc(MAC_STRU *, RDC_DESCRIPTOR *, char *);
int init_mac_reg(MAC_STRU *);
int find_phy_addr(MAC_STRU *);
int mii_write(MAC_STRU *, int, int);
int mii_read(MAC_STRU *, int);
int send_pkt(MAC_STRU *, char *, int);
void send_complete(MAC_STRU *);
void receive_pkt(MAC_STRU *);
void alloc_rx_buf(MAC_STRU *);
void _interrupt int4_handler(__CPPARGS);
void mac_handler(MAC_STRU *);
void mac_tx_handler(MAC_STRU *);
void mac_rx_handler(MAC_STRU *);
void delaye(void);
void Loops(void);
void FlashLed(void);
void _interrupt uart0_handler(__CPPARGS);
void _interrupt uart1_handler(__CPPARGS);
uint32 linear_to_real(uint32 linear_addr);
void PutStr(int p,char *pstr);
void PutCh(int p,char ch);



void adjust_buffer(void)
{
   RDC_DESCRIPTOR *rxd_ptr, *txd_ptr;
   int i;

   /* Let MAC1 TX buffer same to MAC2 RX buffer */
   rxd_ptr = mac2_info.rx_insert_ptr;
   txd_ptr = mac1_info.tx_insert_ptr;

   for (i = 0; i < DESC_COUNT; i++) {
   	txd_ptr->buf_ptr = rxd_ptr->buf_ptr;
   	txd_ptr->vbuf_ptr = rxd_ptr->vbuf_ptr;
      txd_ptr = txd_ptr->vndesc_ptr;
      rxd_ptr = rxd_ptr->vndesc_ptr;
	}

   /* Let MAC2 TX buffer same to MAC1 RX buffer */
   txd_ptr = mac2_info.tx_insert_ptr;
   rxd_ptr = mac1_info.rx_insert_ptr;

   for (i = 0; i < DESC_COUNT; i++) {
   	txd_ptr->buf_ptr = rxd_ptr->buf_ptr;
   	txd_ptr->vbuf_ptr = rxd_ptr->vbuf_ptr;
      txd_ptr = txd_ptr->vndesc_ptr;
      rxd_ptr = rxd_ptr->vndesc_ptr;
	}
}

/* Cache Function Setting                          */
void cache_set(char * buf_pool)
{
	uint32 real_addr;
   uint16 loww, highw;

   real_addr = linear_to_real((uint32)buf_pool);

   /* Non-Cache Region0 for MAC descriptor and buffer */
	loww = (uint16)real_addr & 0xFFFF;
   highw = (uint16)(real_addr >> 16);
   outport(0xfec2, loww);			/* NCR0 start low word */
   outport(0xfec4, highw);			/* NCR0 start high word */
   real_addr += (0x1020 + BUF_SIZE * DESC_COUNT);
	loww = (uint16)real_addr & 0xFFFF;
   highw = (uint16)(real_addr >> 16);
   outport(0xfec6, loww);			/* NCR0 end low word */
   outport(0xfec8, highw);			/* NCR0 end high word */

   /* Cache Control Setting */
   outport(0xfec0, CACHE_CTRL | 0x0100);	/* NCR0 enable */
}


/* Main routine for HUB Program */
void main(void)
{
	char 	*mac_memory_ptr, *buf_ptr;
                RDC_DESCRIPTOR *desc_ptr;


	/* Init sysytem */
   init_system();

   /* Allocate MAC information structure */
   mac_memory_ptr = (char *)malloc(0x1020 + BUF_SIZE * DESC_COUNT * 2);
   mac_memory_ptr = (char *) (((unsigned long)mac_memory_ptr + 0xf) & ~0xf);

   /* Cache Setting */
   cache_set(mac_memory_ptr);

   /* Init MAC information */
   init_mac_info();

   /* Init descriptor */
   desc_ptr = (RDC_DESCRIPTOR *) mac_memory_ptr;
   buf_ptr = (char *) (mac_memory_ptr + 0x1000);	/* Allocate 4K for descriptor area */
   init_mac_desc(&mac1_info, desc_ptr, buf_ptr);
   init_mac_desc(&mac2_info, desc_ptr + DESC_COUNT * 2, buf_ptr + BUF_SIZE * DESC_COUNT);
	/* For HUB function, MAC1 TX same to MAC2 RX, MAC1 RX same to MAC2 TX */
   adjust_buffer();

	/* Init & Activate MAC */
   init_mac_reg(&mac1_info);
   init_mac_reg(&mac2_info);

   /* Enable INT4 and level trigger mode */
   outport(INTC_INT4, 0x0017);
   outport(0xff28, 0xfeff);
 
 //  outport(0xff28, 0x06fd);
   
     /* Enable UART0 interrupt */
   outport(0xff44, 0x0000);	/* UART0 priority 0, enable */
//   outport(0xff28, 0x03fd);	/* UART0 interrupt enable */

   /* Enable UART1 interrupt */
   outport(0xff42, 0x0000);	/* UART1 priority 0, enable */
   outport(0xff28, 0x00fd);	/* UART0 and UART1 interrupt enable */
   
   /* Register Interrupt 4 handler */
   setvect(INT4_TYPE, int4_handler);
   
       /* Register UART0 Interrupt handler */
   setvect(UART0_TYPE, uart0_handler);

   /* Register UART1 Interrupt handler */
   setvect(UART1_TYPE, uart1_handler);
   
   /* normal process */
   do {
   	outport(PIO_DATA1_REG, (unsigned int)mac1_info.TxSuccCounter);
   	   	FlashLed();	
   } while(1);

}





/* Linear address to physical address */
uint32 linear_to_real(uint32 linear_addr)
{
	uint32 real_addr;

   real_addr = (linear_addr & 0xffff0000L) >> 8;
   real_addr += (linear_addr & 0x0000ffffL);
   return real_addr;
}
/* Intilize MAC information structure */
void init_mac_info(void)
{
	/* MAC1 information structure */
   mac1_info.io_base = 0xfd00;
   mac1_info.TxFreeDesc = DESC_COUNT;
   mac1_info.RxFreeDesc = DESC_COUNT;
   mac1_info.next_mac = &mac2_info;
   mac1_info.sn = 0;
   mac1_info.phy_addr = PHY1_ADDR;	//Miles
   
	/* MAC2 information structure */
   mac2_info.io_base = 0xfe00;
   mac2_info.TxFreeDesc = DESC_COUNT;
   mac2_info.RxFreeDesc = DESC_COUNT;
   mac2_info.next_mac = &mac1_info;
   mac2_info.sn = 1;
   mac2_info.phy_addr = PHY2_ADDR;	//Miles
}

/* Initilize MAC control registers */
int init_mac_reg(MAC_STRU *mac_ipr)
{
	unsigned int	tmpv, phy_status, mac_duplex, mac_mctl;
	int	io_base = mac_ipr->io_base;

   /* Software Reset MAC */
   outport(io_base + IO_MCR1, 0x01);
   while(inport(io_base + IO_MCR1) & 0x01);

   /* Set TX/RX descriptor start address */
	outport(io_base + IO_MTDSR0, (uint16)(mac_ipr->txd_raddr & 0xffff));
	outport(io_base + IO_MTDSR1, (uint16)(mac_ipr->txd_raddr >> 16));
	outport(io_base + IO_MRDSR0, (uint16)(mac_ipr->rxd_raddr & 0xffff));
	outport(io_base + IO_MRDSR1, (uint16)(mac_ipr->rxd_raddr >> 16));

   /* Set Special Control Register */
   outport(io_base + IO_MCR1, MCR1_DEFAULT);

   /* Set MAC control register */
   outport(io_base + IO_MCR0, MCR0_DEFAULT);

   /* Enabel TX threshold function */
   //outport(io_base + IO_MTSCF, inport(io_base + IO_MTSCF) | 0x0004);

   /* Set Bus Control register */
   outport(io_base + IO_MBCR, MBCR_DEFAULT);

   /* RX descriptor count register */
   outport(io_base + IO_MRDC, DESC_COUNT | PFTH);

   /* RX buffer size register */
   outport(io_base + IO_MRBS, BUF_SIZE > 2047 ? 2046:BUF_SIZE);

   /* TX interrupt count & timer */
   outport(io_base + IO_MTICR, TXINTC * 0x100 + TXTIMER);

   /* RX interrupt count & timer */
   outport(io_base + IO_MRICR, RXINTC * 0x100 + RXTIMER);

   /* SWITCH CHIP, MAC2 directly connect SWITCH chip and always use full-duplex mode */
#ifdef SWITCH_EN
	if (mac_ipr->sn == 1) {
		mac_duplex = MC_FULLD;
      goto set_mac_duplex;
   }
#endif

   /* Find PHY address */
   //if (find_phy_addr(mac_ipr)) return 1;


   /* INTEL PHY Special setting */
#ifdef INTEL_PHY_LXT972
   mii_write(mac_ipr, 0x14, 0x0DE2);	/* LED mode */
   mii_write(mac_ipr, 0x12, 0x00F2);	/* PHY INT request enable */
   mii_read(mac_ipr, 0x13);				/* Clear INT request status */
#endif

   /* PHY media mode check */
   /* Wait PHY link OK */
   outport(0x80, 0x03);
   while(!((phy_status = mii_read(mac_ipr, 0x1)) & 0x4));

   /* PHY mode check */
   phy_status = mii_read(mac_ipr, 0x0);
   if (phy_status & 0x1000) { /* N-WAY mode */
	   /* Wait PHY N-WAY complete */
   	while(!(mii_read(mac_ipr, 0x1) & 0x20));
      phy_status = mii_read(mac_ipr, 0x05);
      phy_status &= mii_read(mac_ipr, 0x04);
      mac_duplex = (phy_status & 0x0140) ? MC_FULLD:0;
   } else { /* Force Mode */
      mac_duplex = (phy_status & 0x0100) ? MC_FULLD:0;
   }
   outport(0x80, 0x0c);

   /* MAC duplex mode */
set_mac_duplex:
   mac_mctl = (MCR0_DEFAULT & ~MC_FULLD) | mac_duplex;
   outport(io_base + IO_MCR0, mac_mctl);

   /* Set MAC address and multi-case address,
   	Now no multicast address. Let all address regsiter
   	have same MAC address 	  											*/
   tmpv = io_base + IO_MID0L;
   do {
   	outport(tmpv, MAC_ADDRL);
   	outport(tmpv + 2, MAC_ADDRM);
   	outport(tmpv + 4, MAC_ADDRH);
      tmpv += 8;
	} while(tmpv < (io_base + IO_MID3H));

   /* Everything Done, Now activate TX/RX machine */
   tmpv = inport(io_base + IO_MCR0) | MC_XMTEN | MC_RCVEN;
   outport(io_base + IO_MCR0, tmpv);

   /* Enable interrupt */
   outport(io_base + IO_MIMR, INT_TXEE | INT_RXEE);

   return 0;
}


/* Initilize MAC TX/RX descriptor */
void init_mac_desc(MAC_STRU *mac_ipr, RDC_DESCRIPTOR *desc_ptr, char *buf_ptr)
{
	uint32 r_desc_addr, r_buf_addr;
	int	i;

   mac_ipr->tx_insert_ptr = desc_ptr;
   mac_ipr->tx_remove_ptr = desc_ptr;
   mac_ipr->rx_insert_ptr = (desc_ptr + DESC_COUNT);
   mac_ipr->rx_remove_ptr = mac_ipr->rx_insert_ptr;
   r_desc_addr = linear_to_real((uint32)desc_ptr);
   r_buf_addr = linear_to_real((uint32)buf_ptr);

   /* Init TX descriptor: Don't allocate TX buffer */
   mac_ipr->txd_raddr = r_desc_addr;
   for (i = 0; i < DESC_COUNT; i++) {
		desc_ptr->status = 0;
      desc_ptr->len = 0;
      desc_ptr->ndesc_ptr = r_desc_addr + RDC_DESC_SIZE;
      desc_ptr->vndesc_ptr = desc_ptr + 1;
      r_desc_addr += RDC_DESC_SIZE;
		buf_ptr = (buf_ptr + BUF_SIZE);
      desc_ptr = desc_ptr + 1;
   }
   (desc_ptr - 1)->ndesc_ptr = mac_ipr->txd_raddr;
   (desc_ptr - 1)->vndesc_ptr = mac_ipr->tx_insert_ptr;

   /* Init RX descriptor: Allocate RX buffer */
   mac_ipr->rxd_raddr = r_desc_addr;
   for (i = 0; i < DESC_COUNT; i++) {
      desc_ptr->len = 0;
      desc_ptr->buf_ptr = r_buf_addr;
      desc_ptr->ndesc_ptr = r_desc_addr + RDC_DESC_SIZE;
      desc_ptr->vbuf_ptr = buf_ptr;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久一区二区三区| 亚洲国产精品久久久久婷婷884| 日本精品一区二区三区高清| 国产91露脸合集magnet| 蜜桃av噜噜一区| 日韩精品福利网| 婷婷中文字幕一区三区| 亚洲一二三级电影| 亚洲男帅同性gay1069| 国产精品麻豆久久久| 欧美国产一区在线| 国产欧美精品国产国产专区| 久久综合色天天久久综合图片| 日韩精品一区二区三区四区| 久久综合久久久久88| 国产亚洲成aⅴ人片在线观看 | 国内精品不卡在线| 精品无人区卡一卡二卡三乱码免费卡 | 成人午夜在线播放| 成人动漫视频在线| 色综合天天综合在线视频| 91精品办公室少妇高潮对白| 欧美中文一区二区三区| 欧美日韩1234| 日韩一级片在线观看| 久久久久国产精品厨房| 综合自拍亚洲综合图不卡区| 亚洲精品日韩综合观看成人91| 一区二区三区在线看| 视频精品一区二区| 国产一区二区三区久久悠悠色av| 成人免费看片app下载| 91高清视频在线| 日韩三级伦理片妻子的秘密按摩| 久久久久国产免费免费| 亚洲日本在线a| 日本成人超碰在线观看| 欧美激情资源网| 成人av片在线观看| 欧美在线免费视屏| 日韩欧美视频在线 | 亚洲一区av在线| 丝袜亚洲另类丝袜在线| 国产a视频精品免费观看| 欧美色图免费看| 国产午夜三级一区二区三| 亚洲一区影音先锋| 国产成人啪午夜精品网站男同| 色中色一区二区| 精品久久久久av影院| 亚洲精品一二三| 国产一区二区三区免费看| 一本色道综合亚洲| 久久一夜天堂av一区二区三区 | 91精品办公室少妇高潮对白| 日韩女优电影在线观看| 一二三区精品福利视频| 成人性生交大合| 欧美大黄免费观看| 亚洲国产一区二区视频| 成人黄色国产精品网站大全在线免费观看| 欧美日韩精品一区二区三区四区 | 国产日产欧美一区| 日本不卡一二三区黄网| 在线日韩一区二区| 日本一区二区三级电影在线观看| 五月天中文字幕一区二区| 色综合视频在线观看| 国产精品欧美一级免费| 激情综合色丁香一区二区| 91精品欧美久久久久久动漫 | 91小视频免费看| 国产午夜亚洲精品午夜鲁丝片| 美女久久久精品| 67194成人在线观看| 亚洲国产欧美日韩另类综合| 色婷婷亚洲综合| 一区二区中文视频| av电影在线不卡| 中文字幕高清不卡| 国产精品一二三四| 国产欧美精品一区二区色综合| 九色|91porny| 精品国产一区二区三区久久久蜜月| 视频一区视频二区中文| 欧美精品99久久久**| 婷婷久久综合九色综合绿巨人| 欧美怡红院视频| 偷拍一区二区三区四区| 91精品国产麻豆国产自产在线| 亚洲bdsm女犯bdsm网站| 91.com视频| 美国精品在线观看| 精品国产凹凸成av人导航| 国产在线播放一区三区四| 国产欧美一区二区精品性色| 国产成人超碰人人澡人人澡| 国产精品进线69影院| av亚洲精华国产精华| 一区二区三区在线视频播放 | 午夜激情一区二区三区| 日韩欧美成人一区| 国产精品小仙女| 亚洲色图第一区| 欧美在线色视频| 精品一区二区三区在线观看国产| 久久理论电影网| 91丝袜国产在线播放| 天天操天天色综合| 久久亚区不卡日本| 91天堂素人约啪| 蜜桃一区二区三区在线观看| 国产午夜精品一区二区三区四区| 91农村精品一区二区在线| 三级不卡在线观看| 国产日韩欧美在线一区| 欧美午夜理伦三级在线观看| 另类小说综合欧美亚洲| 综合中文字幕亚洲| 欧美一级黄色录像| 99re成人在线| 麻豆精品一区二区三区| 中文字幕一区二区三区乱码在线| 欧美精品在线观看播放| 风间由美一区二区三区在线观看 | 亚洲伦理在线精品| 精品欧美乱码久久久久久| 色欧美乱欧美15图片| 国产老妇另类xxxxx| 一个色在线综合| 国产欧美日韩在线视频| 欧美日韩精品一区二区三区蜜桃 | 99视频在线精品| 久久国产精品免费| 亚洲一区在线免费观看| 国产欧美精品区一区二区三区| 8v天堂国产在线一区二区| 国产mv日韩mv欧美| 久久99精品国产麻豆不卡| 亚洲va韩国va欧美va| 亚洲欧美区自拍先锋| 国产欧美一区二区精品婷婷| 日韩一区二区在线观看视频| 欧美在线观看视频在线| 不卡的av电影| 国产一区二区剧情av在线| 日本成人中文字幕| 亚洲图片欧美综合| 一区二区三区在线观看网站| 国产精品久99| 国产精品视频在线看| 久久久一区二区三区捆绑**| 日韩精品一区二区三区在线观看| 欧美日韩情趣电影| 欧美午夜不卡视频| 欧美性高清videossexo| 色综合久久久网| 色狠狠一区二区三区香蕉| 色呦呦一区二区三区| 一本色道久久综合精品竹菊| av在线这里只有精品| jizz一区二区| 91免费版pro下载短视频| 99精品视频在线观看| www.亚洲在线| 91伊人久久大香线蕉| 色噜噜久久综合| 欧美视频一区二区三区四区| 欧美日韩在线一区二区| 在线电影国产精品| 日韩区在线观看| 久久亚洲一区二区三区四区| 久久精品夜夜夜夜久久| 国产精品色眯眯| 亚洲欧美国产毛片在线| 夜夜精品浪潮av一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了| 一二三区精品视频| 日韩精品1区2区3区| 九九**精品视频免费播放| 国产一区二区免费视频| aaa欧美大片| 欧美美女喷水视频| 精品国产乱码久久久久久闺蜜 | 久久久亚洲午夜电影| 国产精品伦理在线| 亚洲成av人片在线观看无码| 日本人妖一区二区| 国产精华液一区二区三区| 91网站在线播放| 欧美一区二区三区日韩视频| 久久精品视频在线看| 一区二区三区中文在线| 日韩电影在线观看一区| 国产成人激情av| 欧美男男青年gay1069videost| 精品91自产拍在线观看一区| 亚洲欧美激情小说另类| 精彩视频一区二区| 色香蕉久久蜜桃|