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

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

?? skge.c

?? 移植好的楊創(chuàng)utu2440F ARM9 的uboot1.1.4代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/**************************************************************************** * *	SkGeClose - Stop initialized adapter * * Description: *	Close initialized adapter. * * Returns: *	0 - on success *	error code - on error */#if 0static int SkGeClose(#elseint SkGeClose(#endifstruct SK_NET_DEVICE	*dev){	DEV_NET			*pNet;	SK_AC			*pAC;	unsigned long	Flags;		/* for spin lock */	int				i;	int				PortIdx;	SK_EVPARA		EvPara;	netif_stop_queue(dev);	pNet = (DEV_NET*) dev->priv;	pAC = pNet->pAC;	if (pAC->RlmtNets == 1)		PortIdx = pAC->ActivePort;	else		PortIdx = pNet->NetNr;	SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,		("SkGeClose: pAC=0x%lX ", (unsigned long)pAC));	/*	 * Clear multicast table, promiscuous mode ....	 */	SkAddrMcClear(pAC, pAC->IoBase, PortIdx, 0);	SkAddrPromiscuousChange(pAC, pAC->IoBase, PortIdx,		SK_PROM_MODE_NONE);	if (pAC->MaxPorts == 1) {		spin_lock_irqsave(&pAC->SlowPathLock, Flags);		/* disable interrupts */		SK_OUT32(pAC->IoBase, B0_IMSK, 0);		EvPara.Para32[0] = pNet->NetNr;		EvPara.Para32[1] = -1;		SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);		SkEventDispatcher(pAC, pAC->IoBase);		SK_OUT32(pAC->IoBase, B0_IMSK, 0);		/* stop the hardware */		SkGeDeInit(pAC, pAC->IoBase);		pAC->BoardLevel = 0;		spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);	} else {		spin_lock_irqsave(&pAC->SlowPathLock, Flags);		EvPara.Para32[0] = pNet->NetNr;		EvPara.Para32[1] = -1;		SkEventQueue(pAC, SKGE_RLMT, SK_RLMT_STOP, EvPara);		SkEventDispatcher(pAC, pAC->IoBase);		spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);		/* Stop port */		spin_lock_irqsave(&pAC->TxPort[pNet->PortNr]			[TX_PRIO_LOW].TxDesRingLock, Flags);		SkGeStopPort(pAC, pAC->IoBase, pNet->PortNr,			SK_STOP_ALL, SK_HARD_RST);		spin_unlock_irqrestore(&pAC->TxPort[pNet->PortNr]			[TX_PRIO_LOW].TxDesRingLock, Flags);	}	if (pAC->RlmtNets == 1) {		/* clear all descriptor rings */		for (i=0; i<pAC->GIni.GIMacsFound; i++) {			ReceiveIrq(pAC, &pAC->RxPort[i], SK_TRUE);			ClearRxRing(pAC, &pAC->RxPort[i]);			ClearTxRing(pAC, &pAC->TxPort[i][TX_PRIO_LOW]);		}	} else {		/* clear port descriptor rings */		ReceiveIrq(pAC, &pAC->RxPort[pNet->PortNr], SK_TRUE);		ClearRxRing(pAC, &pAC->RxPort[pNet->PortNr]);		ClearTxRing(pAC, &pAC->TxPort[pNet->PortNr][TX_PRIO_LOW]);	}	SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_ENTRY,		("SkGeClose: done "));	pAC->MaxPorts--;	pNet->Up = 0;	MOD_DEC_USE_COUNT;	return (0);} /* SkGeClose *//***************************************************************************** * * 	SkGeXmit - Linux frame transmit function * * Description: *	The system calls this function to send frames onto the wire. *	It puts the frame in the tx descriptor ring. If the ring is *	full then, the 'tbusy' flag is set. * * Returns: *	0, if everything is ok *	!=0, on error * WARNING: returning 1 in 'tbusy' case caused system crashes (double *	allocated skb's) !!! */#if 0static int SkGeXmit(struct sk_buff *skb, struct SK_NET_DEVICE *dev)#elseint SkGeXmit(struct sk_buff *skb, struct SK_NET_DEVICE *dev)#endif{DEV_NET		*pNet;SK_AC		*pAC;int			Rc;	/* return code of XmitFrame */	pNet = (DEV_NET*) dev->priv;	pAC = pNet->pAC;#if 0	if ((!skb_shinfo(skb)->nr_frags) ||#else	if (1 ||#endif		(pAC->GIni.GIChipId == CHIP_ID_GENESIS)) {		/* Don't activate scatter-gather and hardware checksum */		if (pAC->RlmtNets == 2)			Rc = XmitFrame(				pAC,				&pAC->TxPort[pNet->PortNr][TX_PRIO_LOW],				skb);		else			Rc = XmitFrame(				pAC,				&pAC->TxPort[pAC->ActivePort][TX_PRIO_LOW],				skb);	} else {#if 0		/* scatter-gather and hardware TCP checksumming anabled*/		if (pAC->RlmtNets == 2)			Rc = XmitFrameSG(				pAC,				&pAC->TxPort[pNet->PortNr][TX_PRIO_LOW],				skb);		else			Rc = XmitFrameSG(				pAC,				&pAC->TxPort[pAC->ActivePort][TX_PRIO_LOW],				skb);#endif	}	/* Transmitter out of resources? */	if (Rc <= 0) {		netif_stop_queue(dev);	}	/* If not taken, give buffer ownership back to the	 * queueing layer.	 */	if (Rc < 0)		return (1);#if 0	dev->trans_start = jiffies;#endif	return (0);} /* SkGeXmit *//***************************************************************************** * * 	XmitFrame - fill one socket buffer into the transmit ring * * Description: *	This function puts a message into the transmit descriptor ring *	if there is a descriptors left. *	Linux skb's consist of only one continuous buffer. *	The first step locks the ring. It is held locked *	all time to avoid problems with SWITCH_../PORT_RESET. *	Then the descriptoris allocated. *	The second part is linking the buffer to the descriptor. *	At the very last, the Control field of the descriptor *	is made valid for the BMU and a start TX command is given *	if necessary. * * Returns: *	> 0 - on succes: the number of bytes in the message *	= 0 - on resource shortage: this frame sent or dropped, now *		the ring is full ( -> set tbusy) *	< 0 - on failure: other problems ( -> return failure to upper layers) */static int XmitFrame(SK_AC 		*pAC,		/* pointer to adapter context */TX_PORT		*pTxPort,	/* pointer to struct of port to send to */struct sk_buff	*pMessage)	/* pointer to send-message */{TXD		*pTxd;		/* the rxd to fill */unsigned long	Flags;SK_U64		PhysAddr;int		BytesSend;	SK_DBG_MSG(NULL, SK_DBGMOD_DRV, SK_DBGCAT_DRV_TX_PROGRESS,		("X"));	spin_lock_irqsave(&pTxPort->TxDesRingLock, Flags);#ifndef USE_TX_COMPLETE	FreeTxDescriptors(pAC, pTxPort);#endif	if (pTxPort->TxdRingFree == 0) {		/* no enough free descriptors in ring at the moment */		FreeTxDescriptors(pAC, pTxPort);		if (pTxPort->TxdRingFree == 0) {			spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);			SK_PNMI_CNT_NO_TX_BUF(pAC, pTxPort->PortIndex);			SK_DBG_MSG(NULL, SK_DBGMOD_DRV,				SK_DBGCAT_DRV_TX_PROGRESS,				("XmitFrame failed\n"));			/* this message can not be sent now */			/* Because tbusy seems to be set, the message should not be freed here */			/* It will be used by the scheduler of the ethernet handler */			return (-1);		}	}	/* advance head counter behind descriptor needed for this frame */	pTxd = pTxPort->pTxdRingHead;	pTxPort->pTxdRingHead = pTxd->pNextTxd;	pTxPort->TxdRingFree--;	/* the needed descriptor is reserved now */	/*	 * everything allocated ok, so add buffer to descriptor	 */#ifdef SK_DUMP_TX	DumpMsg(pMessage, "XmitFrame");#endif	/* set up descriptor and CONTROL dword */#if 0	PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,		virt_to_page(pMessage->data),		((unsigned long) pMessage->data &		~PAGE_MASK),		pMessage->len,		PCI_DMA_TODEVICE);#else	PhysAddr = (SK_U64) pci_phys_to_mem(pAC->PciDev, (u32) pMessage->data);#endif	pTxd->VDataLow = (SK_U32)  (PhysAddr & 0xffffffff);	pTxd->VDataHigh = (SK_U32) (PhysAddr >> 32);	pTxd->pMBuf = pMessage;	pTxd->TBControl = TX_CTRL_OWN_BMU | TX_CTRL_STF |		TX_CTRL_CHECK_DEFAULT | TX_CTRL_SOFTWARE |#ifdef USE_TX_COMPLETE		TX_CTRL_EOF | TX_CTRL_EOF_IRQ | pMessage->len;#else		TX_CTRL_EOF | pMessage->len;#endif	if ((pTxPort->pTxdRingPrev->TBControl & TX_CTRL_OWN_BMU) == 0) {		/* previous descriptor already done, so give tx start cmd */		/* StartTx(pAC, pTxPort->HwAddr); */		SK_OUT8(pTxPort->HwAddr, TX_Q_CTRL, TX_Q_CTRL_START);	}	pTxPort->pTxdRingPrev = pTxd;	BytesSend = pMessage->len;	spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);	/* after releasing the lock, the skb may be immidiately freed */	if (pTxPort->TxdRingFree != 0)		return (BytesSend);	else		return (0);} /* XmitFrame *//***************************************************************************** * * 	XmitFrameSG - fill one socket buffer into the transmit ring *                (use SG and TCP/UDP hardware checksumming) * * Description: *	This function puts a message into the transmit descriptor ring *	if there is a descriptors left. * * Returns: *	> 0 - on succes: the number of bytes in the message *	= 0 - on resource shortage: this frame sent or dropped, now *		the ring is full ( -> set tbusy) *	< 0 - on failure: other problems ( -> return failure to upper layers) */#if 0static int XmitFrameSG(SK_AC 		*pAC,			/* pointer to adapter context */TX_PORT		*pTxPort,		/* pointer to struct of port to send to */struct sk_buff	*pMessage)	/* pointer to send-message */{	int 		i;	int			BytesSend;	int			hlength;	int			protocol;	skb_frag_t		*sk_frag;	TXD			*pTxd;	TXD			*pTxdFst;	TXD			*pTxdLst;	SK_U64		PhysAddr;	unsigned long	Flags;	spin_lock_irqsave(&pTxPort->TxDesRingLock, Flags);#ifndef USE_TX_COMPLETE	FreeTxDescriptors(pAC, pTxPort);#endif	if ((skb_shinfo(pMessage)->nr_frags +1) > pTxPort->TxdRingFree) {		FreeTxDescriptors(pAC, pTxPort);		if ((skb_shinfo(pMessage)->nr_frags + 1) > pTxPort->TxdRingFree) {			spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);			SK_PNMI_CNT_NO_TX_BUF(pAC, pTxPort->PortIndex);			SK_DBG_MSG(NULL, SK_DBGMOD_DRV,				SK_DBGCAT_DRV_TX_PROGRESS,				("XmitFrameSG failed - Ring full\n"));				/* this message can not be sent now */			return(-1);		}	}	pTxd = pTxPort->pTxdRingHead;	pTxdFst = pTxd;	pTxdLst = pTxd;	BytesSend = 0;	protocol = 0;	/* map first fragment (header) */	PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,			virt_to_page(pMessage->data),			((unsigned long) pMessage->data & ~PAGE_MASK),			skb_headlen(pMessage),			PCI_DMA_TODEVICE);	pTxd->VDataLow = (SK_U32)  (PhysAddr & 0xffffffff);	pTxd->VDataHigh = (SK_U32) (PhysAddr >> 32);	/* HW checksum? */	if (pMessage->ip_summed == CHECKSUM_HW) {		pTxd->TBControl = TX_CTRL_STF |				  TX_CTRL_ST_FWD |				  skb_headlen(pMessage);		/* We have to use the opcode for tcp here because the opcode for		udp is not working in the hardware yet (revision 2.0)*/		protocol = ((SK_U8)pMessage->data[23] & 0xf);		if ((protocol == 17) && (pAC->GIni.GIChipRev != 0))			pTxd->TBControl |=  BMU_UDP_CHECK;		else			pTxd->TBControl |= BMU_TCP_CHECK ;		hlength = ((SK_U8)pMessage->data[14] & 0xf) * 4;		pTxd->TcpSumOfs = 0; /* PH-Checksum already claculated */		pTxd->TcpSumSt = 14+hlength+16;		pTxd->TcpSumWr = 14+hlength;	} else {		pTxd->TBControl = TX_CTRL_CHECK_DEFAULT |				  TX_CTRL_SOFTWARE |				  TX_CTRL_STF |				  skb_headlen(pMessage);	}	pTxd = pTxd->pNextTxd;	pTxPort->TxdRingFree--;	BytesSend += skb_headlen(pMessage);	/* Map SG fragments */	for (i = 0; i < skb_shinfo(pMessage)->nr_frags; i++) {		sk_frag = &skb_shinfo(pMessage)->frags[i];		/* we already have the proper value in entry */		PhysAddr = (SK_U64) pci_map_page(pAC->PciDev,						 sk_frag->page,						 sk_frag->page_offset,						 sk_frag->size,						 PCI_DMA_TODEVICE);		pTxd->VDataLow = (SK_U32)  (PhysAddr & 0xffffffff);		pTxd->VDataHigh = (SK_U32) (PhysAddr >> 32);		pTxd->pMBuf = pMessage;		/* HW checksum */		if (pMessage->ip_summed == CHECKSUM_HW) {			pTxd->TBControl = TX_CTRL_OWN_BMU |					  TX_CTRL_SOFTWARE |					  TX_CTRL_ST_FWD;			/* We have to use the opcode for tcp here because the opcode for			udp is not working in the hardware yet (revision 2.0)*/			if ((protocol == 17) && (pAC->GIni.GIChipRev != 0))				pTxd->TBControl |= BMU_UDP_CHECK ;			else				pTxd->TBControl |= BMU_TCP_CHECK ;		} else {			pTxd->TBControl = TX_CTRL_CHECK_DEFAULT |					  TX_CTRL_SOFTWARE |					  TX_CTRL_OWN_BMU;		}		/* Last fragment  */		if( (i+1) == skb_shinfo(pMessage)->nr_frags )  {#ifdef USE_TX_COMPLETE			pTxd->TBControl |= TX_CTRL_EOF |					   TX_CTRL_EOF_IRQ |					   sk_frag->size;#else			pTxd->TBControl |= TX_CTRL_EOF |					   sk_frag->size;#endif			pTxdFst->TBControl |= TX_CTRL_OWN_BMU |					      TX_CTRL_SOFTWARE;		} else {			pTxd->TBControl |= sk_frag->size;		}		pTxdLst = pTxd;		pTxd = pTxd->pNextTxd;		pTxPort->TxdRingFree--;		BytesSend += sk_frag->size;	}	if ((pTxPort->pTxdRingPrev->TBControl & TX_CTRL_OWN_BMU) == 0) {		/* previous descriptor already done, so give tx start cmd */		/* StartTx(pAC, pTxPort->HwAddr); */		SK_OUT8(pTxPort->HwAddr, TX_Q_CTRL, TX_Q_CTRL_START);	}	pTxPort->pTxdRingPrev = pTxdLst;	pTxPort->pTxdRingHead = pTxd;	spin_unlock_irqrestore(&pTxPort->TxDesRingLock, Flags);	if (pTxPort->TxdRingFree > 0)		return (BytesSend);	else		return (0);}#endifvoid dump_frag( SK_U8 *data, int length){	int i;	printk("Length: %d\n", length);	for( i=0; i < length; i++ ) {		printk(" %02x", (SK_U8)*(data + i) );		if( !((i+1) % 2

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜在线免费| 国产精品 日产精品 欧美精品| 一本色道久久综合狠狠躁的推荐| 国产精品不卡视频| 色婷婷av一区| 日韩极品在线观看| 精品久久久久久无| 国产高清亚洲一区| 中文字幕欧美日本乱码一线二线| 99久久综合色| 午夜精品免费在线| 欧美变态tickle挠乳网站| 国产精品一区二区不卡| 亚洲欧洲国产专区| 欧美性感一区二区三区| 久久99久久久久久久久久久| 久久久久久久综合色一本| 91年精品国产| 奇米888四色在线精品| 国产欧美一区二区精品性| 91久久一区二区| 久久99国产精品免费网站| 中文字幕乱码久久午夜不卡| 欧美日韩视频专区在线播放| 狠狠色丁香久久婷婷综合_中| 国产精品免费视频观看| 欧美精品在欧美一区二区少妇| 国产精品自在在线| 亚洲一卡二卡三卡四卡五卡| 久久中文字幕电影| 日本高清不卡视频| 激情久久五月天| 亚洲综合精品自拍| 国产欧美一区二区精品婷婷| 欧美三级电影网站| av不卡免费在线观看| 免费在线观看日韩欧美| 18成人在线观看| 久久精品一区二区| 欧美日韩三级视频| 91免费看片在线观看| 日本欧美一区二区三区| 国产精品麻豆欧美日韩ww| 日韩视频在线永久播放| 欧美午夜精品理论片a级按摩| 国产一区二区视频在线播放| 午夜av一区二区三区| 中文字幕一区二区三区不卡 | 北岛玲一区二区三区四区| 日韩影视精彩在线| 亚洲精品欧美综合四区| 久久麻豆一区二区| 日韩欧美激情一区| 69久久99精品久久久久婷婷 | 亚洲国产精品嫩草影院| 国产精品丝袜久久久久久app| 日韩欧美国产综合一区| 欧美伦理视频网站| 欧美日韩在线播放一区| 91丨porny丨在线| 成人免费高清在线| 国产精品1024| 国产大陆精品国产| 国产美女av一区二区三区| 久久精品国产澳门| 美女一区二区在线观看| 日韩福利视频网| 日韩高清在线不卡| 午夜久久久久久久久久一区二区| 一二三四区精品视频| 亚洲精品视频在线| 一区av在线播放| 亚洲国产中文字幕在线视频综合| 亚洲视频一二三区| 亚洲精品美腿丝袜| 一区二区三区影院| 亚洲国产aⅴ天堂久久| 一区二区视频在线看| 亚洲欧美日韩电影| 一区二区欧美国产| 亚洲午夜成aⅴ人片| 香蕉影视欧美成人| 日本特黄久久久高潮| 美女视频黄频大全不卡视频在线播放| 日韩精品91亚洲二区在线观看| 五月天一区二区| 免费日本视频一区| 九色|91porny| 国产大片一区二区| 99re在线视频这里只有精品| 色哟哟欧美精品| 色综合久久66| 3atv在线一区二区三区| 亚洲精品一区二区三区在线观看| 精品播放一区二区| 国产精品网站在线播放| 亚洲精品网站在线观看| 日韩1区2区3区| 国产精品一区二区x88av| 成人福利视频在线看| 91久久精品网| 精品美女一区二区| 日韩美女视频一区| 日韩精品1区2区3区| 国产成a人亚洲精品| 欧美专区在线观看一区| 日韩欧美一级在线播放| 国产精品久线在线观看| 午夜免费久久看| 国产盗摄精品一区二区三区在线 | 日本一不卡视频| 国v精品久久久网| 欧美性感一类影片在线播放| 日韩欧美123| 亚洲欧美自拍偷拍色图| 视频一区视频二区中文字幕| 国产福利一区二区| 精品精品国产高清a毛片牛牛| 国产亚洲一区二区三区四区| 亚洲香肠在线观看| 国产成人一区二区精品非洲| 欧美又粗又大又爽| 国产亚洲一区二区三区四区 | 国产精品一区二区久久不卡| 欧亚一区二区三区| 国产拍揄自揄精品视频麻豆| 婷婷久久综合九色综合伊人色| 国产成人一级电影| 日韩一本二本av| 亚洲午夜免费视频| a美女胸又www黄视频久久| 91精品国产色综合久久不卡蜜臀| 国产精品网站导航| 国内精品伊人久久久久影院对白| 欧美视频一区二区| 亚洲视频小说图片| 国产精品99久久久久久有的能看| 欧美日韩大陆一区二区| 国产精品久久久久三级| 国内久久精品视频| 日韩久久精品一区| 亚洲国产精品天堂| 日本乱人伦一区| 国产精品伦理在线| 国产乱子轮精品视频| 91精品国产91久久久久久一区二区 | 欧美mv日韩mv国产网站| 亚洲a一区二区| 一本大道久久精品懂色aⅴ| 中文av字幕一区| 国产91精品在线观看| 久久嫩草精品久久久精品一| 久久精品国产99国产精品| 69精品人人人人| 亚洲高清一区二区三区| 色哟哟一区二区三区| 亚洲免费资源在线播放| proumb性欧美在线观看| 国产精品久久久久久久裸模 | 亚洲天堂免费在线观看视频| 懂色av中文一区二区三区| 2023国产一二三区日本精品2022| 日韩精品成人一区二区在线| 884aa四虎影成人精品一区| 洋洋av久久久久久久一区| 91视频com| 亚洲一二三四在线| 欧美日韩一区二区不卡| 午夜伊人狠狠久久| 欧美人妇做爰xxxⅹ性高电影| 亚洲第一搞黄网站| 欧美另类z0zxhd电影| 日本在线不卡视频| 精品久久久久久久久久久久久久久久久| 日日夜夜免费精品视频| 日韩一级黄色片| 激情综合色综合久久| 国产亚洲一区二区三区在线观看 | 国产日韩欧美一区二区三区综合 | 国内不卡的二区三区中文字幕| 7777精品伊人久久久大香线蕉| 日本人妖一区二区| 26uuu国产一区二区三区| 国产乱色国产精品免费视频| 欧美激情一区二区在线| 波多野结衣的一区二区三区| 亚洲男人的天堂av| 正在播放一区二区| 国产精品一二一区| 亚洲色图19p| 在线综合+亚洲+欧美中文字幕| 精品中文av资源站在线观看| 国产精品毛片无遮挡高清| 色婷婷久久综合| 蜜臀av一区二区在线免费观看| 欧美tickle裸体挠脚心vk| 9人人澡人人爽人人精品| 亚洲福利视频一区| 久久久影院官网| 色激情天天射综合网|