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

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

?? dm9000.cpp

?? windows ce 50 drive program
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************************** *  * $Id: dm9000.cpp,v 1.2 2004/12/08 08:53:18 hychu Exp $ * * File: Dm9000.cpp * * Copyright (c) 2000-2002 Davicom Inc.  All rights reserved. * ********************************************************************************/#include	"dm9000.h"class CFifo{	public:	CFifo(int FifoSize=256)	{		m_nMaxSize = FifoSize;		m_pCont = (U32*)malloc(FifoSize*sizeof(U32));		if(!m_pCont)			THROW((ERR_STRING("DM9000: Insufficient Memory\n")));		m_nHead = m_nTail = 0;	}	~CFifo()	{		free(m_pCont);	}		int	Increment(int Index)	{		Index++;		if(Index == m_nMaxSize) Index = 0;		return Index;	}		int	IsEmpty(void) { return m_nHead == m_nTail; };		int	Push(U32 Val)	{		int	tmp;				tmp = Increment(m_nTail);		if(tmp == m_nHead) return 0;				m_pCont[m_nTail] = Val;		m_nTail = tmp;				return 1;	}	U32	Pull()	{		U32	val;				if(IsEmpty()) return (U32)-1;				val = m_pCont[m_nHead];		m_nHead = Increment(m_nHead);				return val;	}		private:	int		m_nMaxSize;	U32		*m_pCont;		int		m_nHead, m_nTail;};CFifo	*gf;/******************************************************************************* * * * ********************************************************************************/CONFIG_PARAMETER	g_szDm9ConfigParams[] ={	{ CID_CONNECTION_TYPE, -1, NDIS_STRING_CONST("ConnectionType") },	{ CID_SLOT_NUMBER, -1, NDIS_STRING_CONST("SlotNumber")},	{ CID_BUFFER_PHYSICAL_ADDRESS, 0, NDIS_STRING_CONST("BufferPhysicalAddress")},	{ CID_TXBUFFER_NUMBER, 0x20, NDIS_STRING_CONST("XmitBuffer")},	{ CID_RXBUFFER_NUMBER, 0x10, NDIS_STRING_CONST("RecvBuffer")},	{ CID_ADAPTER_NUMBER, 0, NDIS_STRING_CONST("AdapterNumber")},	{ CID_IO_BASE_ADDRESS, 0x18000300, NDIS_STRING_CONST("IoAddress")},	{ CID_IO_RANGE, 0x10, NDIS_STRING_CONST("IoRange")},	{ CID_IRQ_NUMBER, 0x1A, NDIS_STRING_CONST("IrqNumber")},	{ -1,-1,NULL}};/******************************************************************************* * * Device attributes and characteristics * ********************************************************************************/PCONFIG_PARAMETER	C_DM9000::DeviceConfigureParameters(void){	return (PCONFIG_PARAMETER)&g_szDm9ConfigParams[0];}void	C_DM9000::DeviceSetEepromFormat(void){	m_szEepromFormat[EID_MAC_ADDRESS] = 0;	m_szEepromFormat[EID_VENDOR_ID] = 8;	m_szEepromFormat[EID_PRODUCT_ID] = 10;}void	C_DM9000::EDeviceRegisterIoSpace(void){	NIC_DEVICE_OBJECT::EDeviceRegisterIoSpace();		U32	val;		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));	if( (DeviceReadPort(DM9_VIDL) != LOW_BYTE(DM9000_VID)) ||		(DeviceReadPort(DM9_VIDH) != HIGH_BYTE(DM9000_VID)) ||		(DeviceReadPort(DM9_PIDL) != LOW_BYTE(DM9000_PID)) ||		(DeviceReadPort(DM9_PIDH) != HIGH_BYTE(DM9000_PID)) )		THROW((ERR_STRING("Unknown device")));}void	C_DM9000::EDeviceValidateConfigurations(void){	NDIS_HANDLE		hndis = m_pUpper->GetNdisHandle();	// validate slot number	if( 		(m_szConfigures[CID_IO_BASE_ADDRESS] == -1) ||		(m_szConfigures[CID_IRQ_NUMBER] == -1) ) 		THROW(());	m_szCurrentSettings[SID_GEN_TRANSMIT_BUFFER_SPACE] = 		m_szConfigures[CID_TXBUFFER_NUMBER]		* ETH_MAX_FRAME_SIZE;	m_szCurrentSettings[SID_GEN_RECEIVE_BUFFER_SPACE] = 		m_szConfigures[CID_RXBUFFER_NUMBER]		* ETH_MAX_FRAME_SIZE;	m_szConfigures[CID_CHECK_FOR_HANG_PERIOD] = 3;	m_szConfigures[CID_IRQ_GEN_TYPE] = NdisInterruptLatched;	m_szConfigures[CID_IRQ_SHARED] = TRUE;	m_szConfigures[CID_IRQ_LEVEL] = 0x0F;	m_szConfigures[CID_INTERFACE_TYPE] = NdisInterfaceIsa;	m_szConfigures[CID_BUS_MASTER] = FALSE;	// set receive mode	// <5> discard long packet	// <4> discard CRC error packet	// <0> rx enable	m_szCurrentSettings[SID_OP_MODE] = MAKE_MASK3(5,4,0);	m_szCurrentSettings[SID_802_3_MAXIMUM_LIST_SIZE] = DM9_MULTICAST_LIST;}/******************************************************************************* * * Device access routines * ********************************************************************************/#define	ENTER_CRITICAL_SECTION	m_spinAccessToken.Lock();#define	LEAVE_CRITICAL_SECTION	m_spinAccessToken.Release();#define	VALIDATE_ADDR_PORT(p) \	if(m_uLastAddressPort != (p)) \		NdisRawWritePortUchar( \		m_szCurrentSettings[SID_PORT_BASE_ADDRESS] + DM9000_ADDR_OFFSET,  \		(U8) (m_uLastAddressPort=(U32(p))) )U32	C_DM9000::DeviceWritePort(	U32		uPort,	U32		uValue){	ENTER_CRITICAL_SECTION	VALIDATE_ADDR_PORT(uPort);	NdisRawWritePortUchar(		m_szCurrentSettings[SID_PORT_BASE_ADDRESS] + DM9000_DATA_OFFSET, 		(U8)uValue);	LEAVE_CRITICAL_SECTION		return uValue;}U32	C_DM9000::DeviceReadPort(	U32		uPort){	U16		val;	ENTER_CRITICAL_SECTION	VALIDATE_ADDR_PORT(uPort);	NdisRawReadPortUchar(		m_szCurrentSettings[SID_PORT_BASE_ADDRESS] + DM9000_DATA_OFFSET, &val);		LEAVE_CRITICAL_SECTION		return (U32)val;}U16	C_DM9000::DeviceReadEeprom(	U32		uWordAddress){	U16		highbyte,lowbyte;		// assign the register offset	DeviceWritePort(DM9_EPADDR,uWordAddress);		// issue EEPROM read command<2>	DeviceWritePort(DM9_EPCNTL,(1<<2));		// wait until status bit<0> cleared	// 80 uS, 5 times	if(!DevicePolling(DM9_EPCNTL,(1<<0),0x00,80,5))		return (U16)-1;		// stop command	DeviceWritePort(DM9_EPCNTL,0);	// retrive data	lowbyte  = (U16)DeviceReadPort(DM9_EPLOW);	highbyte = (U16)DeviceReadPort(DM9_EPHIGH);		return ((highbyte<<8) | lowbyte);}U16	C_DM9000::DeviceWriteEeprom(	U32		uWordAddress,	U16		uValue){	// assign the register offset	DeviceWritePort(DM9_EPADDR,uWordAddress);	// put data	DeviceWritePort(DM9_EPLOW, LOW_BYTE(uValue));	DeviceWritePort(DM9_EPHIGH,HIGH_BYTE(uValue));			// issue EEPROM write enable<4> and write command<1>	DeviceWritePort(DM9_EPCNTL,MAKE_MASK2(4,1));		// wait until status bit<0> cleared	DevicePolling(DM9_EPCNTL,MAKE_MASK(0),0x00);		// stop command	DeviceWritePort(DM9_EPCNTL,0);	return uValue;}U16	C_DM9000::DeviceReadPhy(	U32		uRegister,	U32		uOffset){	U16		highbyte,lowbyte;		// assign the phy register offset, internal phy(0x40) plus phy offset	DeviceWritePort(DM9_EPADDR,(0x40|(uOffset&0x3F)));		// issue PHY select<3> and PHY read command<2>	DeviceWritePort(DM9_EPCNTL,((1<<3)|(1<<2)) );		// wait until status bit<0> cleared	DevicePolling(DM9_EPCNTL,(1<<0),0x00);		// stop command	DeviceWritePort(DM9_EPCNTL,0);	// retrive data	lowbyte  = (U16)DeviceReadPort(DM9_EPLOW);	highbyte = (U16)DeviceReadPort(DM9_EPHIGH);		return ((highbyte<<8) | lowbyte);}U16	C_DM9000::DeviceWritePhy(	U32		uRegister,	U32		uOffset,	U16		uValue){	// assign the phy register offset, internal phy(0x40) plus phy offset	DeviceWritePort(DM9_EPADDR,(0x40|(uOffset&0x3F)));	// put data	DeviceWritePort(DM9_EPLOW, LOW_BYTE(uValue));	DeviceWritePort(DM9_EPHIGH,HIGH_BYTE(uValue));	// issue PHY select<3> and write command<1>			DeviceWritePort(DM9_EPCNTL,((1<<3)|(1<<1)) );		// wait until status bit<0> cleared	DevicePolling(DM9_EPCNTL,(1<<0),0x00);		// stop command	DeviceWritePort(DM9_EPCNTL,0);	return uValue;}	U32		C_DM9000::DeviceReadData(void){	U32		value;	return	*(PU32)DeviceReadString((PU8)&value,sizeof(value));}	U32		C_DM9000::DeviceReadDataWithoutIncrement(void){	U32		value,tmp;	ENTER_CRITICAL_SECTION	VALIDATE_ADDR_PORT(DM9_MRCMDX);	switch (m_nIoMode)	{		case BYTE_MODE:			NdisRawReadPortUchar(				m_szCurrentSettings[SID_PORT_BASE_ADDRESS] 				+ DM9000_DATA_OFFSET, (PU8)&tmp);			NdisRawReadPortUchar(				m_szCurrentSettings[SID_PORT_BASE_ADDRESS] 				+ DM9000_DATA_OFFSET, (PU8)&value);			value = (value&0x000000FF);			break;		case WORD_MODE:			NdisRawReadPortUshort(				m_szCurrentSettings[SID_PORT_BASE_ADDRESS] 				+ DM9000_DATA_OFFSET, (PU16)&tmp);			NdisRawReadPortUshort(				m_szCurrentSettings[SID_PORT_BASE_ADDRESS] 				+ DM9000_DATA_OFFSET, (PU16)&value);			value = (value&0x0000FFFF);			break;						case DWORD_MODE:			NdisRawReadPortUlong(				m_szCurrentSettings[SID_PORT_BASE_ADDRESS] 				+ DM9000_DATA_OFFSET, (PU32)&tmp);			NdisRawReadPortUlong(				m_szCurrentSettings[SID_PORT_BASE_ADDRESS] 				+ DM9000_DATA_OFFSET, (PU32)&value);			break;						default:			break;	} // of switch	LEAVE_CRITICAL_SECTION		return value;}PU8		C_DM9000::DeviceReadString(	PU8		ptrBuffer,	int		nLength){	int		count;		count = (nLength + m_nIoMaxPad) / m_nIoMode;	// select port to be read from	ENTER_CRITICAL_SECTION	VALIDATE_ADDR_PORT(DM9_MRCMD);	switch (m_nIoMode)	{		case BYTE_MODE:			NdisRawReadPortBufferUchar(				m_szCurrentSettings[SID_PORT_BASE_ADDRESS] + DM9000_DATA_OFFSET, 				ptrBuffer,count);			break;					case WORD_MODE:			NdisRawReadPortBufferUshort(				m_szCurrentSettings[SID_PORT_BASE_ADDRESS] + DM9000_DATA_OFFSET, 				(PU16)ptrBuffer,count);			break;		case DWORD_MODE:			NdisRawReadPortBufferUlong(				m_szCurrentSettings[SID_PORT_BASE_ADDRESS] + DM9000_DATA_OFFSET, 				(PU32)ptrBuffer,count);			break;				default:			break;	} // of switch	LEAVE_CRITICAL_SECTION		return ptrBuffer;}PU8		C_DM9000::DeviceWriteString(	PU8		ptrBuffer,	int		nLength){	int		count;		count = (nLength + m_nIoMaxPad) / m_nIoMode;	switch (m_nIoMode)	{		case BYTE_MODE:		{			PU8	pcurr=(PU8)ptrBuffer;			for(;count--;pcurr++)			{				ENTER_CRITICAL_SECTION				VALIDATE_ADDR_PORT(DM9_MWCMD);				NdisRawWritePortUchar(					m_szCurrentSettings[SID_PORT_BASE_ADDRESS] 					+ DM9000_DATA_OFFSET, *pcurr);								LEAVE_CRITICAL_SECTION			}		}			break;					case WORD_MODE:		{			PU16	pcurr=(PU16)ptrBuffer;						for(;count--;pcurr++)			{				ENTER_CRITICAL_SECTION				VALIDATE_ADDR_PORT(DM9_MWCMD);				NdisRawWritePortUshort(					m_szCurrentSettings[SID_PORT_BASE_ADDRESS] 					+ DM9000_DATA_OFFSET, *pcurr);				LEAVE_CRITICAL_SECTION			}		}			break;		case DWORD_MODE:		{			PU32	pcurr=(PU32)ptrBuffer;			for(;count--;pcurr++)			{				ENTER_CRITICAL_SECTION				VALIDATE_ADDR_PORT(DM9_MWCMD);				NdisRawWritePortUlong(					m_szCurrentSettings[SID_PORT_BASE_ADDRESS] 					+ DM9000_DATA_OFFSET, *pcurr);								LEAVE_CRITICAL_SECTION			}		}			break;				default:			break;	} // of switch		return ptrBuffer;}/******************************************************************************** * * Devcie control routines * ********************************************************************************/void	C_DM9000::DeviceEnableInterrupt(void){	// bits to turn on interrupt latch	// <7> buffer chain enable	// <3> rx overflow count overflow	// <2> rx overflow	// <1> tx completed indication	// <0> rx completed indication	DeviceWritePort(DM9_IMR,((1<<7)|(1<<3)|(1<<2)|(1<<1)|(1<<0)));}void	C_DM9000::DeviceDisableInterrupt(void){	// <7> buffer chain enable	DeviceWritePort(DM9_IMR,(1<<7));}void 	C_DM9000::DeviceEnableReceive(void){	// 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]);}void 	C_DM9000::DeviceDisableReceive(void){

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色妞www精品视频| 欧美日韩和欧美的一区二区| 蜜臀av在线播放一区二区三区| 亚洲精品成人精品456| 亚洲视频精选在线| 亚洲色图都市小说| 亚洲欧美日韩中文字幕一区二区三区| 亚洲色图视频网站| 中文字幕一区二区在线播放| 中文字幕永久在线不卡| 国产精品乱码一区二区三区软件| 国产日本欧美一区二区| 中文字幕的久久| |精品福利一区二区三区| 亚洲欧美日韩国产成人精品影院| 亚洲精品一二三| 亚洲在线视频网站| 午夜精品成人在线视频| 日韩精品亚洲一区二区三区免费| 免费成人小视频| 国产精一品亚洲二区在线视频| 国产美女视频91| 成人av网站在线观看| 99vv1com这只有精品| 色哟哟一区二区三区| 欧美日韩不卡一区| 久久综合九色综合97婷婷女人| 久久久久久电影| 中文字幕在线观看一区二区| 亚洲色图欧美激情| 免费在线看一区| 国产成a人亚洲| 色8久久精品久久久久久蜜| 欧美日韩精品一二三区| 久久免费电影网| 亚洲精品成人精品456| 美女在线视频一区| 成人激情av网| 91精品国产综合久久久久久| 久久久不卡影院| 亚洲图片欧美视频| 国内外精品视频| 一本到不卡免费一区二区| 337p亚洲精品色噜噜噜| 亚洲国产电影在线观看| 亚洲妇熟xx妇色黄| 国产传媒日韩欧美成人| 欧美日韩www| 国产精品三级视频| 亚洲国产wwwccc36天堂| 国产在线播放一区| 欧美午夜精品免费| 国产三级精品视频| 日韩电影在线看| av激情成人网| 精品久久99ma| 一区二区高清视频在线观看| 久久99精品一区二区三区三区| 不卡一区在线观看| 久久一夜天堂av一区二区三区| 亚洲精品国产一区二区三区四区在线| 日本特黄久久久高潮| 99久久精品一区二区| 69堂成人精品免费视频| 国产三区在线成人av| 蜜臀av性久久久久av蜜臀妖精| 成人av一区二区三区| 欧美成人福利视频| 中文在线免费一区三区高中清不卡| 午夜精品久久久久久| 成人激情免费网站| 久久久久久毛片| 亚洲特黄一级片| 国产成人精品www牛牛影视| 在线亚洲欧美专区二区| 中文字幕中文字幕一区二区| 亚洲综合丁香婷婷六月香| 国产精品69毛片高清亚洲| 欧美日韩亚洲另类| 一区二区不卡在线视频 午夜欧美不卡在 | ...xxx性欧美| 久久成人精品无人区| 91久久一区二区| 中文字幕亚洲电影| 国产剧情一区在线| xf在线a精品一区二区视频网站| 一区二区三区久久久| av午夜一区麻豆| 欧美精品一区二区三区高清aⅴ | 欧美a级理论片| 色噜噜夜夜夜综合网| 国产精品久久久久久久久图文区| 免费不卡在线视频| 日韩欧美国产不卡| 午夜av电影一区| 欧美日韩国产精品自在自线| 国产精品看片你懂得| 成人动漫中文字幕| 国产网站一区二区三区| 国产成人自拍网| 亚洲精品在线电影| 国产精品99久久久久久久女警 | 日韩欧美国产综合| 人人精品人人爱| 欧美精品久久一区二区三区| 亚洲曰韩产成在线| 91福利视频在线| 亚洲午夜影视影院在线观看| 一本色道久久综合亚洲aⅴ蜜桃 | 国产一区二区调教| 2023国产精华国产精品| 香蕉加勒比综合久久| 欧美精品日韩精品| 亚洲一区二区欧美| 91麻豆精品国产91久久久久久久久 | 日韩一区二区三区在线观看| 日本中文一区二区三区| 88在线观看91蜜桃国自产| 日韩成人精品视频| 欧美精品在线观看播放| 日韩精品乱码av一区二区| 91精品国产综合久久福利| 一区二区三区在线免费播放| 色狠狠综合天天综合综合| 亚洲综合色在线| 欧美老女人第四色| 青青草国产精品97视觉盛宴| 日韩欧美国产午夜精品| 国产麻豆日韩欧美久久| 欧美激情一区二区三区不卡 | 欧美日韩情趣电影| 午夜久久电影网| 久久九九国产精品| 成人免费视频播放| 亚洲香肠在线观看| 欧美日本一道本在线视频| 国产一二三精品| 国产精品久久久久四虎| 欧美三级午夜理伦三级中视频| 亚洲成a人v欧美综合天堂下载| 精品剧情在线观看| 国产不卡免费视频| 亚洲一区二区三区小说| 欧美日韩中文精品| 国产成人精品亚洲午夜麻豆| 亚洲欧美偷拍另类a∨色屁股| 欧美日精品一区视频| 国产在线精品免费| 亚洲精品中文在线观看| 精品国产伦一区二区三区观看体验 | 色综合咪咪久久| 日韩精品乱码免费| 1024精品合集| 欧美一级片在线看| 97se亚洲国产综合自在线不卡| 一区二区成人在线视频| 国产午夜精品一区二区| www.日韩av| 久久精品av麻豆的观看方式| 日韩精品一区二区三区在线播放| 国产成人在线免费观看| 日韩一区在线播放| 欧美一区二区三区人| 99这里都是精品| 麻豆精品一二三| 亚洲午夜免费视频| 久久久久久久久久久久久夜| 欧美无砖专区一中文字| 国产一区在线不卡| 日日夜夜一区二区| 欧美高清在线一区二区| 精品欧美一区二区久久| 色综合久久99| 成人国产精品免费观看| 午夜精品久久久久久久久久久 | 国产亚洲精品中文字幕| 91浏览器打开| 国产成人免费av在线| 免费成人深夜小野草| 亚洲另类一区二区| 国产精品久久一卡二卡| 51精品视频一区二区三区| 91久久免费观看| 国产黄色精品网站| 国产一区在线精品| 日日摸夜夜添夜夜添精品视频 | 国产91丝袜在线播放0| 免费看日韩a级影片| 依依成人综合视频| 亚洲日本免费电影| 日本一区二区免费在线| 欧美成人官网二区| 7777精品伊人久久久大香线蕉| 91久久香蕉国产日韩欧美9色| 成人午夜av电影| 豆国产96在线|亚洲| 久久国产精品无码网站| 偷拍与自拍一区| 午夜电影一区二区| 亚洲精品网站在线观看|