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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 8019drv.c

?? rt8019的驅(qū)動程序源代碼和驅(qū)動測試程序源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
// Driver of RTL8019AS
#include <intrins.h>
#include "pubdef.h"
#include "8019.h"

#define NIC_TX_MIN_PAGE		0x40
#define NIC_TX_MAX_PAGE		0x4b
#define NIC_RX_MIN_PAGE		0x4c
#define NIC_RX_MAX_PAGE		0x7f

/* enthernet frame type field indicates the top level protocol type */
#define	EFT_LOOP	0x0060		/* type: Loopback			*/
#define	EFT_ECHO	0x0200		/* type: Echo				*/
#define	EFT_PUP		0x0400		/* type: Xerox PUP			*/
#define	EFT_IP		0x0800		/* type: Internet Protocol	*/
#define	EFT_ARP		0x0806		/* type: ARP				*/
#define	EFT_RARP	0x8035		/* type: Reverse ARP		*/

#define VLAN_ID		0x8100
#define VLAN_LEN	4

typedef struct tagETHF{
	byte DA[6];
	byte SA[6];
	word frmType;
	byte pdu[1];
} ETHF, SPTR PETHF;

/*-------------------------------------------------------------------------------*/

void displayNICReg(byte pageNum)
{
	setNICRegPage(pageNum);
	
	TRACE("---content of Page %d registers list ---\n\r", (int)(pageNum - '0'));
	TRACE("reg00: %x\n\r", (int)reg00);
	TRACE("reg01: %x\n\r", (int)reg01);
	TRACE("reg02: %x\n\r", (int)reg02);
	TRACE("reg03: %x\n\r", (int)reg03);
	TRACE("reg04: %x\n\r", (int)reg04);
	TRACE("reg05: %x\n\r", (int)reg05);
	TRACE("reg06: %x\n\r", (int)reg06);
	TRACE("reg07: %x\n\r", (int)reg07);
	TRACE("reg08: %x\n\r", (int)reg08);
	TRACE("reg09: %x\n\r", (int)reg09);
	TRACE("reg0a: %x\n\r", (int)reg0a);
	TRACE("reg0b: %x\n\r", (int)reg0b);
	TRACE("reg0c: %x\n\r", (int)reg0c);
	TRACE("reg0d: %x\n\r", (int)reg0d);
	TRACE("reg0e: %x\n\r", (int)reg0e);
	TRACE("reg0f: %x\n\r", (int)reg0f);
}

bit initNIC(void)
{	
	RESET_NIC;
  	  	
  	/* the following initializing sequence come from doucment DP83901A.pdf
  	   Initialization Sequence
	   The following initialization procedure is mandatory. */
	// 1. Program Command Register for Page 0 (Command Register e 21H)
	//    followed by a wait state of at least 1.5 ms for the NIC to reset.
	CR = 0x21;
	delayMsec(5);
	
	/* check RTL8019AS */
	if (CR != 0x21)
		return false;
	
	// 2. Initialize Data Configuration Register (DCR)
	PAGE0_DCR = 0xc8;				/* FIFO threshold = 8 bytes, normal operation, 8-bit byte write DMA, BOS=0 */
	
	// 3. Clear Remote Byte Count Registers (RBCR0, RBCR1)
	PAGE0_RBCR0 = 0;
	PAGE0_RBCR1 = 0;
	
	// 4. Initialize Receive Configuration Register (RCR)
	PAGE0_RCR = 0xc4;				/* rxed packets be buffered to memory, only rx match physical address packet, 
									   accept with broadcast destination address packet,
									   reject packet with length less than 64 bytes and receive error */
	
	// 5. Place the SNIC in LOOPBACK mode 1 or 2 (Transmit Configuration Register e 02H or 04H)
	setNICInLoopbackMode;
	selectInternalLoopbackMode;
	
	// 6. Initialize Receive Buffer Ring: Boundary Pointer(BNDRY), Page Start (PSTART), and Page Stop(PSTOP)
	PAGE0_PSTART = NIC_RX_MIN_PAGE;
	PAGE0_PSTOP = NIC_RX_MAX_PAGE + 1;
	PAGE0_BNRY = NIC_RX_MIN_PAGE;
	
	// 7. Clear Interrupt Status Register (ISR) by writing 0FFH to it.
	PAGE0_ISR = 0xff;
	
	// 8. Initialize Interrupt Mask Register (IMR)
	PAGE0_IMR = 0x3f;				/* 允許中斷CNT, OVW, TXE, RXE, PTX, PRX */
	// PAGE0_IMR = 0;
	
	// 9. Program Command Register for page 1 (Command Register e 61H)
	setNICRegPage(1);
	
	// I) Initialize Physical Address Registers (PAR0±PAR5)
		
	// II) Initialize Multicast Address Registers (MAR0±MAR5)
	/*
	PAGE1_MAR0 = 0x00;
	PAGE1_MAR1 = 0x41;
	PAGE1_MAR2 = 0x00;
	PAGE1_MAR3 = 0x80;
	PAGE1_MAR4 = 0x00;
	PAGE1_MAR5 = 0x00;
	*/
		
	// III) Initialize CURRent pointer
	PAGE1_CURR = NIC_RX_MIN_PAGE;
	
	// 10. Put SNIC in START mode and for page 0 (Command Register equal to 22H).
	CR = 0x22;
	
	// 11. Initialize the Transmit Configuration for the intended val-ue. 
	setNICRegPage(0);
	PAGE0_TCR = 0xe0;
	
	// 9. I) Initialize Physical Address Registers (PAR0±PAR5)
	// NOTE : pNIFP stores the fixed general parameters of Network Interface
	setNICRegPage(1);
	PAGE1_PAR0 = pNIFP->myMAC[0];
	PAGE1_PAR1 = pNIFP->myMAC[1];
	PAGE1_PAR2 = pNIFP->myMAC[2];
	PAGE1_PAR3 = pNIFP->myMAC[3];
	PAGE1_PAR4 = pNIFP->myMAC[4];
	PAGE1_PAR5 = pNIFP->myMAC[5];
	TRACE("--- My Mac Address : 0x%x %x %x %x %x %x\n\r", 
			 (int)PAGE1_PAR0,
			 (int)PAGE1_PAR1,
			 (int)PAGE1_PAR2,
			 (int)PAGE1_PAR3,
			 (int)PAGE1_PAR4,
			 (int)PAGE1_PAR5);
	
	setNICRegPage(0);
	disableNICInLoopbackMode;
	// OK! The NIC is now ready for transmission and recep-tion.
	
	/*-------------------------------------------------------------------------------*/
	
	/* determine RTl8019AS mode, document P29 */
	setNICRegPage(3);
	if (PAGE3_CONFIG0 & 0x08)	/* Config0.JP(bit 3) refect the state of pin JP input, if JP = High, NIC in Jumper mode */
		TRACE("--- NIC in Jumper mode\n\r");
	else
		/* Pin JP = Low set NIC in jumpless mode */
		if (PAGE3_CONFIG2 & 0x10 || PAGE3_CONFIG3 & 0x80)
			TRACE("--- NIC in PNP mode\n\r");	/* Config0.PNPJP(bit 4) refect the state of pin PNP input */
				  	 /* Config3.PNP(bit 7), if in Jumperless mode, set this bit indicates NIC in PNP mode */
		else
			TRACE("--- NIC in RT Jumperless mode\n\r");
	
	PAGE3_9346CR |= 0xc0;			/* before writing to the Page3 Config1-3 registers, Bit7, 6of 9346CR must be 11b */
	PAGE3_CONFIG1 |= 0x80;			/* IRQ enable																	 */
	PAGE3_CONFIG2 &= 0x3f;			/* Medium Type os TP/CX auto-detect(10BaseT link test is enable)				 */
	PAGE3_CONFIG2 |= 0x20;			/* BSELB, This bit, when set, forces the BROM disabled							 */
	PAGE3_CONFIG3 &= 0xf0;			/* make sure that NIC is not Sleep/PWRDN/ACTIVEB mode							 */
	PAGE3_9346CR &= 0x3f;			/* prevent writing to Page3 Config1-3 registers 								 */
	delayMsec(100);					/* wait for NIC detecting medium type automatically							     */
	
	if (PAGE3_CONFIG3 & 0x40)
		TRACE("--- NIC in full-duplex mode\n\r");
	else 
		TRACE("--- NIC in half-duplex mode\n\r");
		
	TRACE("--- NIC in Auto-Detect mode, ");
	if (PAGE3_CONFIG0 & 0x04)
		TRACE("test failure, set medium type 10Base2 by default\n\r");
	else
		TRACE("test success, medium type 10BaseT\n\r");
	
	/*-------------------------------------------------------------------------------*/

	return true;
}

static void waitRDMAOperationDone(void)
{
	int i = 0;
	
	// setNICRegPage(0);
	while (!(PAGE0_ISR & ISR_RomteDMAComplete) && i<300)
		i++;										// loop until Remote DMA Reading done or force to break the loop
	if (i <300)
		PAGE0_ISR = ISR_RomteDMAComplete;			// clear ISR.RDC bit
	else {
		// #ifdef debug_time
		TRACE("waitRDMAOperationDone() >> force to break loop due to i is 300 at least\n\r");
		// #endif
	}
}

void NICRxFrame(void)
{
	byte 		i, NICReadPtr, nextPage;
	byte		NICWritePtr, lenLowByte, status, lenHighByte, desTaskID;
	byte  		SPTR p, SPTR s;
	PETHF 		pFrm;
	bit bdata	isFrameLegal;
	PNIDP 		pNIDP;
	word		w;
	bit	bdata	canReadNICData;
			
	setNICRegPage(1);
	NICWritePtr = PAGE1_CURR;
	setNICRegPage(0);
	NICReadPtr = PAGE0_BNRY;
	
	NICRxFrameInvokedCnt++;
	
	/*-------------------------------------------------------------------------------*/
	
	canReadNICData = true;
	while (1) {
		if (NICReadPtr == NICWritePtr)
			break;					// rx buffer is empty
		
		#ifdef debug_time
		internalReport(ETH_DETECT_A_FRM);
		#endif
		
		NICRxedFrameCnt++;
							
		// read NIC rxed buffer index
		PAGE0_RSAR0 = 0;
		PAGE0_RSAR1 = NICReadPtr;
		PAGE0_RBCR0 = 4;
		PAGE0_RBCR1 = 0;
		CR = 0x0a;						// enable Remote DMA read
	
		status = REMOTE_DMA_PORT;
		nextPage = REMOTE_DMA_PORT;
		lenLowByte = REMOTE_DMA_PORT;
		lenHighByte = REMOTE_DMA_PORT;
		
		if (nextPage > NIC_RX_MAX_PAGE || nextPage < NIC_RX_MIN_PAGE) {
			// error on read NIC rxed data!!!
			
			// #ifdef debug_time
			TRACE("NICReadPtr = %x, NICWritePtr = %x\n\r", (int)NICReadPtr, (int)NICWritePtr);
			TRACE("Rxed Packet header : %x  %x  %x  %x\n\r", (int)status, (int)nextPage, (int)lenLowByte, (int)lenHighByte);
			// #endif
						
			if (canReadNICData) {
				// try to read NIC rxed data again
				canReadNICData = false;
				continue;
			} else {
				// ignor all frame
				PAGE0_BNRY = NICWritePtr;
				// enableAllInt;
				return;
			}
		}
		#ifdef debug_time
		else
			TRACE("Rxed Packet header : %x  %x  %x  %x\n\r", (int)status, (int)nextPage, (int)lenLowByte, (int)lenHighByte);
		#endif
					
		#ifdef real_runtime
		waitRDMAOperationDone();
		#endif
	
		if (lenHighByte || lenLowByte > MAX_ETH_LEN) {
			#ifdef debug_time
			internalReport(ETH_RX_OVERLARGE);
			#endif
		
			// discard the current rxed frame
			PAGE0_BNRY = nextPage;
			NICReadPtr = nextPage;
    		continue;
		}
			
		/*-------------------------------------------------------------------------------*/
		
		// copy the rxed Ethernet frame to Host Network Interface data buffer
		
		pNIDP = allocNIDP(TASK_NI_DRV);
		if (pNIDP == '\0') {
			// Error, NIDP table is overflow!, discard the current rxed frame
			   		
    		// enableAllInt;
    		return;
		}
		
		p = pNIDP->db;
		s = p;
		
		// copy data from NIC local memory to Host memory
		i = lenLowByte + 1;
		i &= 0xfe;			// make even
		PAGE0_RSAR0 = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu国产电影一区二区| 亚洲一区二区高清| 亚洲夂夂婷婷色拍ww47| 蜜桃视频一区二区三区在线观看| 成人理论电影网| 91精品国产综合久久精品性色| 国产精品视频在线看| 亚洲妇女屁股眼交7| av一区二区三区| 精品欧美乱码久久久久久1区2区| 亚洲丝袜美腿综合| 国产一区二区三区精品视频| 9191成人精品久久| 亚洲激情av在线| av不卡在线播放| 久久久久国产一区二区三区四区 | 91在线无精精品入口| 欧美成人在线直播| 五月天网站亚洲| 91久久精品日日躁夜夜躁欧美| 欧美精品一区男女天堂| 亚洲va欧美va天堂v国产综合| 99久久婷婷国产综合精品| 久久久久久久久97黄色工厂| 人禽交欧美网站| 欧美色爱综合网| 亚洲一区二区三区四区不卡| 91在线精品秘密一区二区| 国产精品成人午夜| 成人av影院在线| 亚洲国产高清aⅴ视频| 国产在线一区二区| 久久新电视剧免费观看| 狠狠色综合播放一区二区| 日韩欧美一卡二卡| 久久精品免费观看| 欧美电影免费观看高清完整版 | 日韩av网站免费在线| 日韩欧美视频在线| 精品一区二区三区久久| 精品国产人成亚洲区| 国产麻豆视频一区二区| 国产亚洲精品bt天堂精选| 国产成人精品免费一区二区| 国产欧美中文在线| 色诱亚洲精品久久久久久| 亚洲制服丝袜av| 91精品国产综合久久香蕉的特点| 奇米777欧美一区二区| wwwwxxxxx欧美| 国产白丝精品91爽爽久久| 亚洲国产成人私人影院tom| 99九九99九九九视频精品| 亚洲激情av在线| 欧美一区二区三区婷婷月色| 韩国精品主播一区二区在线观看| 久久久久久97三级| 色综合久久天天| 日韩中文字幕1| 久久精品水蜜桃av综合天堂| 99re成人在线| 日韩电影网1区2区| 国产午夜精品一区二区| 色婷婷精品大在线视频| 免费看黄色91| 国产精品毛片无遮挡高清| 精品1区2区3区| 国产精品中文字幕日韩精品| 一区二区三区欧美视频| 日韩一区二区三区在线观看| 成人av影视在线观看| 日韩av中文字幕一区二区三区| 国产午夜精品一区二区三区四区 | 91福利社在线观看| 免费在线观看一区| 亚洲日本在线天堂| 欧美成人欧美edvon| 色999日韩国产欧美一区二区| 日韩在线一区二区| 亚洲第一主播视频| 久久毛片高清国产| 欧美性欧美巨大黑白大战| 国产一区二区在线视频| 亚洲愉拍自拍另类高清精品| 久久久久久9999| 91精品国产入口在线| 色诱亚洲精品久久久久久| 国产一区二区福利| 日本伊人色综合网| 一区二区三区四区在线免费观看 | 成人免费毛片a| 日产国产欧美视频一区精品 | 大尺度一区二区| 日本va欧美va精品发布| 亚洲欧美另类久久久精品2019| 精品美女被调教视频大全网站| 欧美在线观看视频在线| 成人在线综合网站| 国内精品免费**视频| 亚洲风情在线资源站| 一区在线观看视频| 国产欧美va欧美不卡在线| 欧美大片在线观看| 91精品国产麻豆| 欧美日韩国产一级二级| 在线一区二区三区| 色综合天天性综合| 波多野结衣91| 成人午夜在线免费| 国产suv精品一区二区6| 国产一区二区三区在线看麻豆| 亚洲444eee在线观看| 一区二区三区电影在线播| 综合久久久久综合| 中文字幕亚洲一区二区av在线| 欧美韩日一区二区三区四区| 久久嫩草精品久久久精品一| 精品国产一区二区三区忘忧草 | 国产 日韩 欧美大片| 国产一区二区网址| 国产伦精品一区二区三区视频青涩 | 欧美色综合天天久久综合精品| 91麻豆精品秘密| 91黄色免费看| 欧美日韩电影在线播放| 制服丝袜亚洲播放| 日韩美女在线视频| 国产午夜精品一区二区| 中文字幕亚洲综合久久菠萝蜜| 亚洲精品视频在线看| 亚洲午夜视频在线观看| 日韩高清不卡一区二区| 精品制服美女丁香| 高清不卡在线观看av| 一本色道久久综合亚洲aⅴ蜜桃| 色婷婷亚洲一区二区三区| 欧美日韩成人综合在线一区二区| 91精品国产丝袜白色高跟鞋| 久久影院视频免费| 亚洲三级电影网站| 天堂在线一区二区| 国产一区二区三区美女| av不卡在线观看| 在线91免费看| 久久久久高清精品| 日韩美女视频一区| 午夜伊人狠狠久久| 国产黑丝在线一区二区三区| 99久久99久久精品国产片果冻| 欧美久久久久久久久久| www激情久久| 亚洲最新在线观看| 激情图片小说一区| 色综合久久99| 精品久久国产老人久久综合| 国产精品国产三级国产专播品爱网| 一级日本不卡的影视| 精彩视频一区二区三区| 91在线无精精品入口| 日韩欧美精品在线视频| 亚洲图片你懂的| 精东粉嫩av免费一区二区三区| 91久久香蕉国产日韩欧美9色| 欧美成人三级在线| 亚洲午夜电影网| 丰满少妇在线播放bd日韩电影| 欧美精品自拍偷拍| 亚洲天堂中文字幕| 国产乱国产乱300精品| 欧美日韩国产另类一区| 综合久久久久久| 国产精品一区久久久久| 6080午夜不卡| 一区二区三区四区在线| 高清beeg欧美| 欧美精品一区二区三区在线播放| 午夜久久久影院| 色综合天天做天天爱| 欧美激情在线免费观看| 奇米色777欧美一区二区| 色嗨嗨av一区二区三区| 亚洲国产高清aⅴ视频| 国精品**一区二区三区在线蜜桃| 在线亚洲+欧美+日本专区| 国产精品久久久久婷婷二区次| 久久精品国产网站| 欧美一区二区三区四区在线观看| 亚洲日本护士毛茸茸| 风间由美中文字幕在线看视频国产欧美| 制服丝袜成人动漫| 亚洲成人久久影院| 欧美在线一二三| 亚洲综合久久av| 在线欧美小视频| 夜夜揉揉日日人人青青一国产精品| 91亚洲国产成人精品一区二区三| 亚洲国产精品激情在线观看| 国产一区 二区| 久久久99久久| 成人黄色免费短视频|