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

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

?? dm9000.cpp

?? windows ce 50 drive program
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	// RX enable RXCR<0>	if(!(m_szCurrentSettings[SID_OP_MODE] & MAKE_MASK(0))) return;			m_szCurrentSettings[SID_OP_MODE] &= ~MAKE_MASK(0);			DeviceWritePort(DM9_RXCR,m_szCurrentSettings[SID_OP_MODE]);}U32	C_DM9000::DeviceGetInterruptStatus(void){	// mask for bits	// <3> rx overflow count overflow	// <2> rx overflowf	// <1> tx completed indication	// <0> rx completed indication	return DeviceReadPort(DM9_ISR) & MAKE_MASK4(3,2,1,0);}U32	C_DM9000::DeviceSetInterruptStatus(	U32	uValue){	return DeviceWritePort(DM9_ISR,uValue);}U32	C_DM9000::DeviceGetReceiveStatus(void){	U32	cr;	cr = DeviceReadPort(DM9_ROCR);		return ((cr>>7)&1)<<31 | (cr&0x7F);}void	C_DM9000::DeviceStart(void){#ifdef	IMPL_FLOW_CONTROL		U32		val;	// check full-duplex mode or not<3>	val = DeviceReadPort(DM9_NCR);	if( val & MAKE_MASK(3))	{		/* full duplex mode */		val = DeviceReadPort(DM9_PAUSETH);		DeviceWritePort(DM9_PAUSETH,(U8)val);				// enable flow control<0>		// enable pause packet<5>		DeviceWritePort(DM9_FLOW,MAKE_MASK2(5,0));	}	else	{		/* non full duplex mode */		val = DeviceReadPort(DM9_BACKTH);		DeviceWritePort(DM9_BACKTH,(U8)val);		// enable back pressure<half dumplex mode)<4,3>		DeviceWritePort(DM9_FLOW,MAKE_MASK2(4,3));	}#endif	// enable interrupt	DeviceEnableInterrupt();	DeviceWritePort(DM9_RXCR,m_szCurrentSettings[SID_OP_MODE]);}void	C_DM9000::DeviceReset(void){	// announce shutdown	m_bShutdown = 1;		// wait until all activities are fi.	m_mutexRxValidate.Lock();	m_mutexTxValidate.Lock();				C_Exception	*pexp;		TRY	{			EDeviceInitialize(++m_nResetCounts);			DeviceOnSetupFilter(0);				FI;	}	CATCH(pexp){		// nothing to do		CLEAN(pexp);	} // of catch	// dequeue for all objects in waiting and standby queue	PCQUEUE_GEN_HEADER	pcurr;	for(;(pcurr=m_TQWaiting.Dequeue());)		DeviceSendCompleted(pcurr);		for(;(pcurr=m_TQStandby.Dequeue());)		DeviceSendCompleted(pcurr);		for(;(pcurr=m_TxQueue.Dequeue());)		m_TxQueueCont.Enqueue(pcurr);			m_mutexRxValidate.Release();	m_mutexTxValidate.Release();	m_bShutdown = 0;}void	C_DM9000::EDeviceInitialize(	int		nResetCounts){	U32		val;		gf = new CFifo();		// reset member varialbes	m_uLastAddressPort = (U32)-1;		DeviceWritePort(0x1f, 0x00);	NdisStallExecution(20);	// software reset the device	DeviceWritePort(DM9_NCR, 0x03);	NdisStallExecution(20);	DeviceWritePort(DM9_NCR, 0x03);	NdisStallExecution(20);	//DeviceWritePort(DM9_NCR, 0x00);		val  = DeviceReadPort(0x28);	val |= DeviceReadPort(0x29)<<8;	val |= DeviceReadPort(0x2a)<<16;	val |= DeviceReadPort(0x2b)<<24;	RETAILMSG(1, (TEXT("[dm9: Chip signature is %08X\r\n"), val));	// read the io orgnization	// ISR<7:6> == x1, dword	// ISR<7:6> == 0x, word	// ISR<7:6> == 10, byte mode	val = DeviceReadPort(DM9_ISR);	if(val & MAKE_MASK(6))	{		m_nIoMode = DWORD_MODE;		m_nIoMaxPad = 3;	}	else if(!(val & MAKE_MASK(7)))	{		m_nIoMode = WORD_MODE;		m_nIoMaxPad = 1;	}	else	{		m_nIoMode = BYTE_MODE;		m_nIoMaxPad = 0;	}		// activate internal phy	// select GPIO 0<0>, set it to output	DeviceWritePort(DM9_GPCR, (1<<0));	// output zero to activate internal phy	DeviceWritePort(DM9_GPR,  0x00);		// clear TX status	DeviceWritePort(DM9_NSR, 0x00);			// Enable memory chain	DeviceWritePort(DM9_IMR, (1<<7));	#ifdef	IMPL_STORE_AND_INDICATION	if(nResetCounts) return;		/* init rx buffers */	U32		m,uaddr;	if(!(uaddr = (U32)malloc(sizeof(DATA_BLOCK)*		(m=m_szConfigures[CID_RXBUFFER_NUMBER]*2)))) 		THROW((ERR_STRING("Insufficient memory")));	for(;m--;uaddr+=sizeof(DATA_BLOCK))		m_RQueue.Enqueue((PCQUEUE_GEN_HEADER)uaddr);	/* set indication timer */	DeviceInitializeTimer();	#endif	/* init tx length buffers */	U32		m,uaddr;	if(!(uaddr = (U32)malloc(sizeof(CQUEUE_GEN_HEADER)*		(m=DM9_TX_CAPACITY>>5)))) 		THROW((ERR_STRING("Insufficient memory")));	for(;m--;uaddr+=sizeof(CQUEUE_GEN_HEADER))		m_TxQueueCont.Enqueue((PCQUEUE_GEN_HEADER)uaddr);}void	C_DM9000::DeviceResetPHYceiver(void){	return;}/******************************************************************************** * * Devcie handler routines * ********************************************************************************/#ifdef	IMPL_DEVICE_ISRvoid	C_DM9000::DeviceIsr(	U32		uState){}#endif#ifdef	IMPL_STORE_AND_INDICATIONvoid	C_DM9000::DeviceOnTimer(void){	int	val = m_RQStandby.Size();		PCQUEUE_GEN_HEADER	pcurr;		for(;(pcurr=m_RQStandby.Dequeue());m_RQueue.Enqueue(pcurr))	{		DeviceReceiveIndication(			0,CQueueGetUserPointer(pcurr),pcurr->nLength);	} // of for RQStandby loop	}#endifint	C_DM9000::DeviceOnSetupFilter(	U32		uFilter){	int		n;	U8		sz[8];	U32		hashval;	U32		newmode;		// save old op mode	newmode = m_szCurrentSettings[SID_OP_MODE];	// clear filter related bits,	// pass all multicast<3> and promiscuous<1>	newmode	&= ~MAKE_MASK2(3,1);	// zero input means one reset request	if(!(m_szCurrentSettings[SID_GEN_CURRENT_PACKET_FILTER]=uFilter)) 	{				/* 1. set unicast */		// retrive node address		DeviceMacAddress(&sz[0]);		// set node address		for(n=0;n<ETH_ADDRESS_LENGTH;n++)			DeviceWritePort(DM9_PAR0+n,(U32)sz[n]);					/* 2. clear multicast list and count */		m_nMulticasts = 0;		memset((void*)&m_szMulticastList,0,sizeof(m_szMulticastList));				/* 3. clear hash table */		// clear hash table		memset((void*)(&sz[0]),0,sizeof(sz));		for(n=0;n<sizeof(sz);n++)			DeviceWritePort(DM9_MAR0+n,(U32)sz[n]);		return uFilter;			}		// if promiscuous mode<1> is requested,	// just set this bit and return	if( (uFilter & NDIS_PACKET_TYPE_PROMISCUOUS) )	{		// add promiscuous<1>		newmode |= MAKE_MASK(1);		DeviceWritePort(DM9_RXCR,m_szCurrentSettings[SID_OP_MODE]=newmode);		return uFilter;	}	// if pass all multicast<3> is requested,	if(uFilter & NDIS_PACKET_TYPE_ALL_MULTICAST) newmode |= MAKE_MASK(3);	// prepare new hash table	memset((void*)(&sz[0]),0,sizeof(sz));		// if broadcast, its hash value is known as 63.	if(uFilter & NDIS_PACKET_TYPE_BROADCAST) sz[7] |= 0x80;	if(uFilter & NDIS_PACKET_TYPE_MULTICAST)		for(n=0;n<m_nMulticasts;n++)		{			hashval = DeviceCalculateCRC32(				&m_szMulticastList[n][0],ETH_ADDRESS_LENGTH,FALSE) & 0x3f;			sz[hashval/8] |= 1 << (hashval%8);		} // of calculate hash table	// submit the new hash table	for(n=0;n<sizeof(sz);n++)		DeviceWritePort(DM9_MAR0+n,(U32)sz[n]);		DeviceWritePort(DM9_RXCR,m_szCurrentSettings[SID_OP_MODE]=newmode);	return uFilter;}void C_DM9000::DeviceInterruptEventHandler(	U32	uValue){	// check RX activities 	if(uValue & 0x01) Dm9LookupRxBuffers();	// return if not TX latch	if(!(uValue & 0x02)) return;	U32	nsr, txs;	nsr = DeviceReadPort(DM9_NSR);	txs = nsr = (nsr>>2)&0x03;	for(;txs;txs>>=1)	{		if(!(txs & 1)) continue;		m_nTx--;		DeviceSendCompleted(m_TQWaiting.Dequeue());	} // of check txend loop	if(nsr) DeviceSend(NULL);}U32	C_DM9000::DeviceHardwareStatus(void){	U32		ret=0;	if(Dm9TxCapacity() == (DM9_TX_CAPACITY-1))		ret |= NIC_HW_TX_IDLE;	return ret;}				int	C_DM9000::DeviceSend(	PCQUEUE_GEN_HEADER	pObject){	PCQUEUE_GEN_HEADER pcurr;	if(pObject) m_TQStandby.Enqueue(pObject);		for(; m_nTx < 2;)	{		/* if there is no more standby packet, claim IDLE */		if(!(pcurr = m_TQStandby.GetHead()))		{			DeviceIndication(NIC_IND_TX_IDLE);			break;		}		/* increment counter */		m_nTx++;		/* get first pkt in queue */		m_TQWaiting.Enqueue(pcurr=m_TQStandby.Dequeue());		/* fill data */		DeviceWriteString((PU8)CQueueGetUserPointer(pcurr),pcurr->nLength);		DeviceWritePort(DM9_TXLENH,HIGH_BYTE(pcurr->nLength));		DeviceWritePort(DM9_TXLENL,LOW_BYTE(pcurr->nLength));					// TXCR<0>, issue TX request		DeviceWritePort(DM9_TXCR, MAKE_MASK(0));	} // of for feeding loop	return 0;}int	C_DM9000::Dm9LookupRxBuffers(void){	if(!m_mutexRxValidate.TryLock()) return 0;	int		counts=0;	int		errors=0;		U32		desc;	PDM9_RX_DESCRIPTOR	pdesc;#ifdef	IMPL_STORE_AND_INDICATION	PCQUEUE_GEN_HEADER	pcurr;#else	U8		szbuffer[DRIVER_BUFFER_SIZE];#endif			for(pdesc=(PDM9_RX_DESCRIPTOR)&desc;;)	{		CHECK_SHUTDOWN();		// probe first byte		desc = DeviceReadDataWithoutIncrement();			// check if packet available, 01h means available, 00h means no data		if(pdesc->bState != 0x01) break;		// get the data descriptor again		desc = DeviceReadData();		// read out the data to buffer		// Performance issue: maybe we may discard the data		// just add the rx address.		// if the length is greater than buffer size, ...		if((pdesc->nLength > DRIVER_BUFFER_SIZE))		{			DeviceIndication(AID_LARGE_INCOME_PACKET);			break;		}#ifdef	IMPL_STORE_AND_INDICATION		if(!(pcurr=m_RQueue.Dequeue()))		{			RETAILMSG(TRUE,(TEXT("Queue overflow")));			BREAK;			// packet will lost!!			break;		}				DeviceReadString((PU8)CQueueGetUserPointer(pcurr),pcurr->nLength=pdesc->nLength);#else		DeviceReadString((PU8)&szbuffer,pdesc->nLength);#endif				// check status, as specified in DM9_RXSR,		// the following bits are error		// <3> PLE		// <2> AE		// <1> CE		// <0> FOE		if(pdesc->bStatus & MAKE_MASK4(3,2,1,0))		{			errors++;#ifdef	IMPL_STORE_AND_INDICATION			m_RQueue.Enqueue(pcurr);#endif			continue;		} // of error happens		counts++;#ifdef	IMPL_STORE_AND_INDICATION		m_RQStandby.Enqueue(pcurr);#else		DeviceReceiveIndication(			0,			(PVOID)&szbuffer,			pdesc->nLength);#endif	} // of forever read loop	REPORT(TID_GEN_RCV_OK, counts);	REPORT(TID_GEN_RCV_ERROR, errors);	m_mutexRxValidate.Release();#ifdef	IMPL_STORE_AND_INDICATION	if (!m_RQStandby.IsQueueEmpty()) DeviceSetTimer(5);#endif		return counts;}U16	C_DM9000::Dm9TxCapacity(void){	U32		txwrite, txread;		txwrite = DeviceReadPort(DM9_MDWAH);	txwrite = (txwrite << 8) | DeviceReadPort(DM9_MDWAL);	txread = DeviceReadPort(DM9_TRAH);	txread = (txread << 8) | DeviceReadPort(DM9_TRAL);		U16	ret =(U16)	(((txread + DM9_TX_CAPACITY ) - txwrite - 1) % DM9_TX_CAPACITY);		return ret;	}int	C_DM9000::Dm9ValidateTxBuffers(void){	return 0;}/******************************************************************* * * Hooked function * *******************************************************************//******************************************************************* * * Device Entry * *******************************************************************/extern "C" NIC_DEVICE_OBJECT	*DeviceEntry(	NIC_DRIVER_OBJECT	*pDriverObject,	PVOID				pVoid){	return new C_DM9000(pDriverObject,pVoid);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色天使色偷偷av一区二区| 国产亚洲欧美一级| 国产日本亚洲高清| 亚洲成人av福利| 91丨porny丨国产入口| 精品日韩99亚洲| 日韩专区中文字幕一区二区| 成人av高清在线| 国产拍揄自揄精品视频麻豆| 美国十次综合导航| 欧美日韩国产在线观看| 亚洲久草在线视频| 99久久er热在这里只有精品66| 精品国产99国产精品| 视频一区国产视频| 欧美日韩精品一区二区三区| 亚洲美女区一区| 91麻豆国产福利在线观看| 久久久国产精品麻豆| 九九视频精品免费| 精品动漫一区二区三区在线观看| 日本中文字幕一区二区视频| 欧美浪妇xxxx高跟鞋交| 亚洲国产精品综合小说图片区| 99精品国产一区二区三区不卡| 国产无人区一区二区三区| 国产一区亚洲一区| 久久中文字幕电影| 国产乱子轮精品视频| 国产亚洲欧美日韩俺去了| 国产乱国产乱300精品| xfplay精品久久| 国产尤物一区二区| 国产亚洲人成网站| av在线综合网| 一区二区三区精品| 制服丝袜av成人在线看| 日本欧美在线看| 欧美mv日韩mv国产网站app| 精品在线视频一区| 久久久www成人免费毛片麻豆| 懂色av一区二区夜夜嗨| 国产精品系列在线| 色国产精品一区在线观看| 一个色综合av| 欧美高清视频不卡网| 国模一区二区三区白浆| 国产精品天美传媒| 欧洲一区在线观看| 久久精品二区亚洲w码| 国产日韩成人精品| 欧美性大战久久久久久久| 日本欧美一区二区三区乱码| 国产视频一区不卡| 欧美性高清videossexo| 久久se精品一区二区| 中文字幕一区视频| 欧美一级淫片007| 波多野结衣欧美| 午夜精品福利一区二区三区av| 精品剧情在线观看| 99久久免费国产| 免费高清在线一区| 亚洲六月丁香色婷婷综合久久| 51午夜精品国产| 懂色av一区二区三区免费看| 亚洲国产sm捆绑调教视频| 精品国产91乱码一区二区三区| 99天天综合性| 激情丁香综合五月| 亚洲一区二区在线免费观看视频 | 亚洲成人先锋电影| 久久色视频免费观看| 91女人视频在线观看| 久久99久久久久久久久久久| 亚洲欧美在线另类| 久久色视频免费观看| 欧美美女bb生活片| 91视频一区二区| 国产精品99久| 日本美女一区二区三区| 亚洲久草在线视频| 国产亚洲综合av| 日韩欧美一级在线播放| 欧美自拍偷拍午夜视频| 成人av电影在线| 蜜桃视频在线观看一区| 亚洲伊人色欲综合网| 国产精品理伦片| 337p日本欧洲亚洲大胆色噜噜| 欧美日本在线视频| 日本丰满少妇一区二区三区| 成人性生交大片免费看在线播放| 日韩激情视频在线观看| 亚洲一区二区三区精品在线| 综合av第一页| 中文字幕亚洲精品在线观看| 国产网站一区二区| 久久久精品国产免大香伊| 欧美丰满一区二区免费视频| 欧美性猛交xxxx乱大交退制版| 91蜜桃网址入口| 色综合亚洲欧洲| 972aa.com艺术欧美| www.欧美色图| 91香蕉视频黄| 欧洲av一区二区嗯嗯嗯啊| 99久久99久久免费精品蜜臀| 成人综合在线网站| voyeur盗摄精品| 色呦呦网站一区| 在线观看日韩精品| 欧洲激情一区二区| 欧美精品一二三| 91精品婷婷国产综合久久性色| 欧美精品久久久久久久久老牛影院| 欧美男男青年gay1069videost | 依依成人精品视频| 亚洲视频在线观看一区| 一区二区三区精品在线| 肉肉av福利一精品导航| 精品一区二区三区在线播放视频| 波多野结衣在线一区| 一本色道**综合亚洲精品蜜桃冫| 色狠狠色狠狠综合| 91麻豆精品国产自产在线 | 日本视频中文字幕一区二区三区| 婷婷国产在线综合| 精品一区二区在线播放| 精品无人码麻豆乱码1区2区 | 国产精品午夜久久| 亚洲色图第一区| 日韩电影在线一区二区| 国产一区二区在线免费观看| 国产成人99久久亚洲综合精品| 波多野结衣精品在线| 欧美日韩亚洲综合在线 | 免费亚洲电影在线| 国产在线日韩欧美| 北条麻妃国产九九精品视频| 欧美羞羞免费网站| 久久综合九色综合97_久久久 | 国产午夜亚洲精品羞羞网站| 国产精品福利影院| 日本成人中文字幕在线视频 | 韩国女主播一区| 91麻豆蜜桃一区二区三区| 在线电影国产精品| 中文字幕国产一区| 日韩av电影免费观看高清完整版| 风间由美一区二区三区在线观看| 欧美丝袜自拍制服另类| 久久亚洲欧美国产精品乐播| 一区二区三区资源| 国产一区二区三区四| 欧美三级电影一区| 日本一区二区三区四区| 视频精品一区二区| 成人中文字幕电影| 日韩欧美综合一区| 亚洲影院在线观看| 成人av网站免费观看| 日韩精品一区二区三区四区视频| 国产精品久久久久永久免费观看 | 精品福利视频一区二区三区| 一区二区三区四区不卡视频| 国产成人精品www牛牛影视| 51午夜精品国产| 一区二区三区四区视频精品免费| 国产乱人伦偷精品视频不卡| 欧美精品一级二级| 亚洲六月丁香色婷婷综合久久| 国产精品2024| 精品国内二区三区| 日韩成人免费电影| 欧美写真视频网站| 亚洲人午夜精品天堂一二香蕉| 国产成人亚洲精品青草天美| 日韩一区二区三区电影在线观看| 亚洲精品视频自拍| 97久久超碰国产精品| 国产亚洲欧美激情| 国产成人av一区| 久久久精品蜜桃| 国产电影一区在线| 国产日韩精品一区二区浪潮av| 狠狠色丁香久久婷婷综合_中| 欧美一区二区三区四区视频| 日韩精品视频网| 5858s免费视频成人| 日韩电影在线观看电影| 欧美精选一区二区| 奇米精品一区二区三区在线观看| 欧美丰满一区二区免费视频| 性欧美疯狂xxxxbbbb| 欧美精品久久久久久久久老牛影院| 亚洲成人中文在线| 欧美一区二区二区| 黄一区二区三区| 国产精品色婷婷|