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

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

?? cs8900aend.c

?? 附件是一份S3C2410的原廠BSP源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	cs_chip_event_enable(pDrvCtrl);	/* receive style. */	cs_pp_w(pDrvCtrl,		CS_PKTPG_RX_CTL,		CS_RX_CTL_RX_OK_A | CS_RX_CTL_ALL_FRAME_A | CS_RX_CTL_BCAST_A | CS_RX_CTL_IND_A);	/* select 10baseT, and turn on rx/tx. */	cs_pp_w(pDrvCtrl,		CS_PKTPG_LINE_CTL,		CS_LINE_CTL_10BASET | CS_LINE_CTL_TX_ON | CS_LINE_CTL_RX_ON);	/* full duplex mode. */	cs_pp_w(pDrvCtrl,		CS_PKTPG_TEST_CTL,		CS_TEST_CTL_FDX | CS_TEST_CTL_DIS_LT);	/* led. */	cs_pp_w(pDrvCtrl, CS_PKTPG_SELF_CTL, 0);	return;}/* * cs8900aAddrFilterSet - set the address filter for multicast addresses * * This routine goes through all of the multicast addresses on the list * of addresses (added with the endAddrAdd() routine) and sets the * device's filter correctly. * * RETURNS: N/A. */LOCAL void cs8900aAddrFilterSet	(		END_DEVICE* pDrvCtrl	/* device to be updated */	){	ETHER_MULTI* pCurr;	pCurr = END_MULTI_LST_FIRST (&pDrvCtrl->end);	while(pCurr != NULL)	{		/* TODO - set up the multicast list */		pCurr = END_MULTI_LST_NEXT(pCurr);	}	/* TODO - update the device filter list */	/* Address Filter Register. */	cs_pp_w(pDrvCtrl, CS_PKTPG_IND_ADDR, pDrvCtrl->enetAddr[0]);	cs_pp_w(pDrvCtrl, CS_PKTPG_IND_ADDR+2, pDrvCtrl->enetAddr[1]);	cs_pp_w(pDrvCtrl, CS_PKTPG_IND_ADDR+4, pDrvCtrl->enetAddr[2]);}/* * cs8900aPollRcv - routine to receive a packet in polled mode. * * Polled mode operation takes place without any kernel or other OS * services available.  Use extreme care to insure that this code does not * call any kernel services.  Polled mode is only for WDB system mode use. * Kernel services, semaphores, tasks, etc, are not available during WDB * system mode. * * The WDB agent polls the device constantly looking for new data.  Typically * the device has a ring of RFDs to receive incoming packets.  This routine * examines the ring for any new data and copies it to the provided mblk. * The concern here is to keep the device supplied with empty buffers at all * time. * * RETURNS: OK upon success.  EAGAIN is returned when no packet is available. * A return of ERROR indicates a hardware fault or no support for polled mode * at all. */LOCAL STATUS cs8900aPollRcv	(		END_DEVICE*	pDrvCtrl,	/* device to be polled */		M_BLK_ID	pMblk		/* ptr to buffer */	){	USHORT	stat = 0;	int	len = 0;	int	i = 0;	/* Upper layer must provide a valid buffer. */	if((pMblk->mBlkHdr.mLen < len) || (!(pMblk->mBlkHdr.mFlags & M_EXT)))	{		return EAGAIN;	}	/* TODO - Invalidate any inbound RFD DMA buffers */	/* TODO - clear any status bits that may be set. */	stat = cs_pp_r(pDrvCtrl, CS_PKTPG_ISQ);	if(!(stat & CS_RX_EVENT_RX_OK)) return EAGAIN;		/* TODO - Check packet and device for errors */	/* Get packet and  length from device buffer/descriptor */	stat = cs_pp_r(pDrvCtrl, CS_PKTPG_RX_STATUS);	if(stat & CS_RX_EVENT_RX_OK)	{		len = cs_pp_r(pDrvCtrl, CS_PKTPG_RX_LENGTH);		/* TODO - Process device packet into net buffer */		/* bcopy(pPacket, pMblk->m_data, len); */		for(i = 0; i < (len / 2); i++)		{			((USHORT *)(pMblk->m_data + 2))[i] = 				cs_pp_r(pDrvCtrl, CS_PKTPG_RX_FRAME + (i * 2));		}		pMblk->mBlkHdr.mFlags |= M_PKTHDR;	/* set the packet header */		pMblk->mBlkHdr.mLen = len + 2;		/* set the data len */		pMblk->mBlkPktHdr.len = len + 2;	/* set the total len */	}	/*	 * TODO - Done with this packet, clean up device. If needed	 * setup a new RFD/buffer for incoming packets	 */	return OK;}/* * cs8900aPollSend - routine to send a packet in polled mode. * * Polled mode operation takes place without any kernel or other OS * services available.  Use extreme care to insure that this code does not * call any kernel services.  Polled mode is only for WDB system mode use. * Kernel services, semaphores, tasks, etc, are not available during WDB * system mode. * * A typical implementation is to set aside a fixed buffer for polled send * operation.  Copy the mblk data to the buffer and pass the fixed buffer * to the device.  Performance is not a consideration for polled operations. * * An alternate implementation is a synchronous one.  The routine accepts * user data but does not return until the data has actually been sent.  If an * error occurs, the routine returns EAGAIN and the user will retry the request. * * If the device returns OK, then the data has been sent and the user may free * the associated mblk.  The driver never frees the mblk in polled mode. * The calling routine will free the mblk upon success. * * RETURNS: OK upon success.  EAGAIN if device is busy or no resources. * A return of ERROR indicates a hardware fault or no support for polled mode * at all. */LOCAL STATUS cs8900aPollSend	(		END_DEVICE*	pDrvCtrl,	/* device to be polled */		M_BLK_ID	pMblk		/* packet to send */	){	static UCHAR p_src_buf[CS_CHIP_FRAME_BUF_SIZE];	int	length = 0;	STATUS	tx_status = ERROR;	/* reset? */ 	if(pDrvCtrl->resetting)	{		return EAGAIN;	}	/* Get data from Mblk to tx buffer. */	length = netMblkToBufCopy(pMblk, p_src_buf, NULL);	/* transmit it. */	tx_status = cs_chip_send_frame(pDrvCtrl, (USHORT *)p_src_buf, length);		END_ERR_ADD(&pDrvCtrl->end, MIB2_OUT_UCAST, +1);	if(tx_status == ERROR)	{		return EAGAIN;	}	netMblkClChainFree(pMblk);	return OK;}/* * cs8900aMCastAdd - add a multicast address for the device * * This routine adds a multicast address to whatever the driver * is already listening for.  It then resets the address filter. * * RETURNS: OK or ERROR. */LOCAL STATUS cs8900aMCastAdd	(		END_DEVICE* pDrvCtrl,	/* device pointer */		char* pAddress		/* new address to add */	){	int error;	if((error = etherMultiAdd(&pDrvCtrl->end.multiList, pAddress)) == ENETRESET)	{		cs8900aConfig(pDrvCtrl);	}	return OK;}/* * cs8900aMCastDel - delete a multicast address for the device * * This routine removes a multicast address from whatever the driver * is listening for.  It then resets the address filter. * * RETURNS: OK or ERROR. */LOCAL STATUS cs8900aMCastDel	(		END_DEVICE* pDrvCtrl,	/* device pointer */		char* pAddress		/* address to be deleted */	){	int error;	if((error = etherMultiDel(&pDrvCtrl->end.multiList, (char*)pAddress)) == ENETRESET)	{		cs8900aConfig(pDrvCtrl);	}	return OK;}/* * cs8900aMCastGet - get the multicast address list for the device * * This routine gets the multicast list of whatever the driver * is already listening for. * * RETURNS: OK or ERROR. */LOCAL STATUS cs8900aMCastGet	(		END_DEVICE*	pDrvCtrl,	/* device pointer */		MULTI_TABLE*	pTable		/* address table to be filled in */	){	return(etherMultiGet(&pDrvCtrl->end.multiList, pTable));}/* * cs8900aStop - stop the device * * This function calls BSP functions to disconnect interrupts and stop * the device from operating in interrupt mode. * * RETURNS: OK or ERROR. */LOCAL STATUS cs8900aStop	(		END_DEVICE* pDrvCtrl	/* device to be stopped */	){	END_FLAGS_CLR(&pDrvCtrl->end, IFF_UP | IFF_RUNNING);	/* TODO - stop/disable the device. */	if(intDisable(pDrvCtrl->ilevel) == ERROR)	{		DRV_LOG(DRV_DEBUG_LOAD, "Could not disconnect interrupt!\n", 1, 2, 3, 4, 5, 6);		return ERROR;	}	/* disable the interrupt input pin of cs. */	cs8900a_pin_disable();	cs_chip_int_disable(pDrvCtrl);	return OK;}/* * cs8900aUnload - unload a driver from the system * * This function first brings down the device, and then frees any * stuff that was allocated by the driver in the load function. * * RETURNS: OK or ERROR. */LOCAL STATUS cs8900aUnload	(		END_DEVICE* pDrvCtrl	/* device to be unloaded */	){	if(pDrvCtrl == NULL) return ERROR;		END_OBJECT_UNLOAD(&pDrvCtrl->end);	/* stop it. */	cs8900aStop(pDrvCtrl);	/* reset it. */	cs8900aReset(pDrvCtrl);	/* TODO - Free any special allocated memory */	if(pDrvCtrl->end.pNetPool)	{		netPoolDelete(pDrvCtrl->end.pNetPool);		free(pDrvCtrl->end.pNetPool);		pDrvCtrl->end.pNetPool = (NET_POOL_ID)0;	}	if(cs8900aClDescTbl[0].memArea)	{		free(cs8900aClDescTbl[0].memArea);		cs8900aClDescTbl[0].memArea = (char *)0;	}	if(cs8900aMclBlkConfig.memArea)	{		free(cs8900aMclBlkConfig.memArea);		cs8900aMclBlkConfig.memArea = (char *)0;	}	/* New: free the END_OBJ structure allocated during cs8900aLoad() */	cfree((char *)pDrvCtrl);	pDrvCtrl = NULL;	return OK;}/* * cs8900aPollStart - start polled mode operations * * RETURNS: OK or ERROR. */LOCAL STATUS cs8900aPollStart	(		END_DEVICE* pDrvCtrl	/* device to be polled */	){	int	oldLevel;	oldLevel = intLock();          /* disable ints during update */	/* TODO - turn off interrupts */	pDrvCtrl->flags |= cs8900a_POLLING;	intUnlock(oldLevel);   /* now cs8900aInt won't get confused */	DRV_LOG(DRV_DEBUG_POLL, "STARTED\n", 1, 2, 3, 4, 5, 6);	cs8900aConfig(pDrvCtrl);	/* reconfigure device */	cs_chip_int_disable(pDrvCtrl);	return OK;}/* * cs8900aPollStop - stop polled mode operations * * This function terminates polled mode operation.  The device returns to * interrupt mode. * * The device interrupts are enabled, the current mode flag is switched * to indicate interrupt mode and the device is then reconfigured for * interrupt operation. * * RETURNS: OK or ERROR. */LOCAL STATUS cs8900aPollStop	(		END_DEVICE* pDrvCtrl	/* device to be polled */	){	int	oldLevel;	oldLevel = intLock();	/* disable ints during register updates */	/* TODO - re-enable interrupts */	pDrvCtrl->flags &= ~cs8900a_POLLING;	intUnlock(oldLevel);	cs8900aConfig(pDrvCtrl);	DRV_LOG(DRV_DEBUG_POLL, "STOPPED\n", 1, 2, 3, 4, 5, 6);	return OK;}/* * cs8900aReset - reset device * * RETURNS: N/A. */LOCAL void cs8900aReset	(		END_DEVICE* pDrvCtrl	){	int intState;	if(pDrvCtrl->unit != 0) return;	pDrvCtrl->resetting = TRUE;	/* chip reset. */	intState = intLock();	cs_chip_self_reset(pDrvCtrl);	intUnlock(intState);	/* TODO - reset all device counters/pointers, etc. */	cs_soft_end_init(pDrvCtrl);	pDrvCtrl->resetting = FALSE;	return;}/* Addition. *//* * cs8900a_pin_enable - Enable the pin for the interrupt of cs8900a. *  * RETURNS: status(int). */#if 0int cs8900a_pin_enable(void){	mask32_change_bsp(			(int*)0x56000050,	/* GPFCON of s3c2410x */			(int)0,			/* start bit0 */			(int)2,			/* change length 2, bit0..1 */			(int)0			/* Value is 2 for EINT0. */			);	mask32_change_bsp(			(int*)0x56000088,	/* EXTINT0 of s3c2410x */			(int)0,			/* start bit0 */			(int)3,			/* change length 3, bit0..2 */			(int)4			/* Value is 4, that rise edge triggered for EINT0. *//*			(int)1			 Value is 1, that high level triggered for EINT0. */			);	mask32_change_bsp(			(int*)0x56000058,	/* GPFUP of s3c2410x */			(int)0,			/* start bit0 */			(int)1,			/* change length 1, bit0 */			(int)1			/* Value is 1 for disable EINT0's pull-up. */			);	mask32_change_bsp(			(int*)0x56000050,	/* GPFCON of s3c2410x */			(int)0,			/* start bit0 */			(int)2,			/* change length 2, bit0..1 */			(int)2			/* Value is 2 for EINT0. */			);	return 0;}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品白丝在线| 国产99久久久久| 国产91丝袜在线播放九色| 欧美色手机在线观看| 国产精品视频观看| 精品一区二区三区日韩| 在线观看免费视频综合| 国产精品天天看| 精品午夜一区二区三区在线观看| 欧美在线|欧美| 中文字幕一区二区三区四区不卡| 另类调教123区| 欧美日韩不卡视频| 亚洲综合激情另类小说区| 成人97人人超碰人人99| 久久久国产一区二区三区四区小说| 日韩在线卡一卡二| 欧美性大战久久久久久久| 亚洲免费在线电影| 91在线观看污| 国产精品久久久久久久久搜平片 | 欧美一区二区三级| 亚洲精品ww久久久久久p站| 国产91综合网| 欧美国产一区二区在线观看| 国内成人精品2018免费看| 国产精品久久午夜夜伦鲁鲁| 狠狠色狠狠色综合日日91app| 欧美一卡2卡3卡4卡| 久久精品国产秦先生| 欧美一区二区三级| 精品一区二区三区久久| 国产亚洲污的网站| 国产一区二区三区四区五区入口 | 亚洲综合一区二区三区| 色狠狠一区二区三区香蕉| 樱桃视频在线观看一区| 在线视频一区二区三| 亚洲电影你懂得| 91麻豆精品国产91久久久更新时间| 日韩精品电影一区亚洲| 欧美成人国产一区二区| 国精产品一区一区三区mba桃花| 国产亚洲欧美日韩日本| av不卡免费在线观看| 亚洲福利一二三区| 欧美一级片在线| 丁香另类激情小说| 亚洲午夜免费视频| 欧美成人在线直播| 99视频有精品| 石原莉奈在线亚洲三区| 精品少妇一区二区三区日产乱码| 国产盗摄一区二区| 一区二区三区国产| 日韩午夜在线播放| 成人精品国产免费网站| 夜夜嗨av一区二区三区网页| 日韩欧美精品在线| www.欧美精品一二区| 亚洲va欧美va人人爽午夜| 久久久久久久免费视频了| 色拍拍在线精品视频8848| 久久99国产精品久久99果冻传媒| 国产偷v国产偷v亚洲高清| 蜜桃传媒麻豆第一区在线观看| av成人免费在线观看| 欧美国产在线观看| 94-欧美-setu| 免费久久99精品国产| 中文字幕一区二区在线观看| 欧美一区二区在线不卡| 波多野结衣欧美| 日本女优在线视频一区二区| 国产精品不卡在线观看| 日韩欧美一区二区在线视频| 色综合久久天天| 激情综合网av| 一区二区三区高清在线| 欧美国产精品劲爆| 欧美一三区三区四区免费在线看| 成人午夜私人影院| 久久黄色级2电影| 一区二区不卡在线播放 | 久久99久国产精品黄毛片色诱| 日韩美女久久久| 久久久久高清精品| 91精品国产一区二区三区| 色系网站成人免费| 欧美放荡的少妇| 欧洲色大大久久| 波多野结衣中文一区| 国产剧情一区二区| 六月婷婷色综合| 午夜久久电影网| 亚洲国产精品尤物yw在线观看| 一区免费观看视频| 中文字幕一区二区视频| 国产精品网友自拍| 日本一区二区三区久久久久久久久不 | 日本视频一区二区三区| 亚洲综合免费观看高清完整版在线| 欧美激情一区二区三区全黄 | 欧美精品亚洲一区二区在线播放| 色综合欧美在线视频区| 成人免费视频一区| 成人免费电影视频| 成人av在线观| 成人av电影在线| 成人黄色a**站在线观看| 国产成人免费在线观看不卡| 韩国av一区二区三区在线观看| 丝袜亚洲另类欧美| 日韩精品一二区| 乱中年女人伦av一区二区| 美女视频一区二区三区| 激情伊人五月天久久综合| 久久精品噜噜噜成人88aⅴ| 久久99日本精品| 黄色日韩三级电影| 国产成人亚洲综合a∨婷婷 | 欧美性感一区二区三区| 欧美色综合网站| 777午夜精品免费视频| 欧美一级二级在线观看| 欧美白人最猛性xxxxx69交| 欧美va亚洲va| 日本一区二区三区高清不卡| 亚洲三级久久久| 亚洲黄色在线视频| 偷拍亚洲欧洲综合| 麻豆国产精品777777在线| 国产一区二区三区综合| 99久久婷婷国产| 在线一区二区视频| 91精品国产综合久久精品性色| 欧美videos大乳护士334| 欧美国产视频在线| 一个色综合网站| 美女任你摸久久| 成人午夜av影视| 宅男在线国产精品| 亚洲国产精品成人综合色在线婷婷 | 欧美性xxxxxxxx| 精品国产一区二区三区久久久蜜月| 国产蜜臀97一区二区三区| 亚洲一区二区av在线| 精品一区二区三区视频 | 欧美成人video| 亚洲欧美在线aaa| 肉丝袜脚交视频一区二区| 国产呦精品一区二区三区网站| 91在线观看地址| 精品国产三级电影在线观看| 麻豆精品视频在线| 成人免费黄色在线| 91精品中文字幕一区二区三区| 国产日韩欧美制服另类| 亚洲愉拍自拍另类高清精品| 国产乱妇无码大片在线观看| 欧美日韩一本到| 亚洲国产高清aⅴ视频| 五月天亚洲精品| 不卡欧美aaaaa| 精品日韩一区二区三区免费视频| 亚洲视频小说图片| 国产伦精品一区二区三区在线观看| 欧美性受xxxx黑人xyx| 国产欧美一区在线| 久久99精品久久久久久国产越南| 色美美综合视频| 国产精品每日更新| 麻豆成人久久精品二区三区红 | 国产精品久久久久影视| 毛片av中文字幕一区二区| 欧美午夜在线观看| 国产精品另类一区| 国产精选一区二区三区| 91麻豆精品国产91久久久久久久久| 亚洲激情第一区| 国产黄色精品视频| 亚洲精品一区二区三区福利| 午夜欧美一区二区三区在线播放| 色综合天天综合网国产成人综合天| 久久色在线观看| 国产一区二区在线免费观看| 欧美一二三四区在线| 婷婷国产在线综合| 欧美男男青年gay1069videost| 亚洲精品乱码久久久久| 色综合色综合色综合色综合色综合| 国产精品视频第一区| www.成人网.com| 亚洲欧美日韩在线不卡| 91麻豆国产在线观看| 亚洲天堂2014| 日本乱人伦一区| 一区二区三区在线视频观看| 在线看国产一区| 亚洲一区二区精品视频|