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

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

?? etherelnk3.c

?? 著名操作系統Plan 9的第三版的部分核心源代碼。現在很難找到了。Plan 9是bell實驗室開發的Unix后繼者。
?? C
?? 第 1 頁 / 共 4 頁
字號:
			mdo = mgmtDir;		outs(port, mdo);		microdelay(1);		outs(port, mdo|mgmtClk);		microdelay(1);		outs(port, mdo);		microdelay(1);	}}static intmiir(int port, int phyad, int regad){	int data, w;	w = (STATUS(port)>>13) & 0x07;	COMMAND(port, SelectRegisterWindow, Wdiagnostic);	port += PhysicalMgmt;	/*	 * Preamble;	 * ST+OP+PHYAD+REGAD;	 * TA + 16 data bits.	 */	miimdo(port, 0xFFFFFFFF, 32);	miimdo(port, 0x1800|(phyad<<5)|regad, 14);	data = miimdi(port, 18);	port -= PhysicalMgmt;	COMMAND(port, SelectRegisterWindow, w);	if(data & 0x10000)		return -1;	return data & 0xFFFF;}static voidscanphy(int port){	int i, x;	for(i = 0; i < 32; i++){		if((x = miir(port, i, 2)) == -1 || x == 0)			continue;		x <<= 6;		x |= miir(port, i, 3)>>10;		XCVRDEBUG("phy%d: oui %uX reg1 %uX\n", i, x, miir(port, i, 1));		USED(x);	}}#ifdef notdefstatic struct xxx {	int	available;	int	next;} xxx[8] = {	{ base10TAvailable,	1, },		/* xcvr10BaseT	-> xcvrAui */	{ auiAvailable,		3, },		/* xcvrAui	-> xcvr10Base2 */	{ 0, -1, },	{ coaxAvailable,	-1, },		/* xcvr10Base2	-> nowhere */	{ baseTXAvailable,	5, },		/* xcvr100BaseTX-> xcvr100BaseFX */	{ baseFXAvailable,	-1, },		/* xcvr100BaseFX-> nowhere */	{ miiConnector,		-1, },		/* xcvrMii	-> nowhere */	{ 0, -1, },};#endif /* notdef */static struct {	char *name;	int avail;	int xcvr;} media[] = {	"10BaseT",	base10TAvailable,	xcvr10BaseT,	"10Base2",	coaxAvailable,		xcvr10Base2,	"100BaseTX",	baseTXAvailable,	xcvr100BaseTX,	"100BaseFX",	baseFXAvailable,	xcvr100BaseFX,	"aui",		auiAvailable,		xcvrAui,	"mii",		miiConnector,		xcvrMii};static intautoselect(int port, int xcvr, int is9){	int media, x;	USED(xcvr);	/*	 * Pathetic attempt at automatic media selection.	 * Really just to get the Fast Etherlink 10BASE-T/100BASE-TX	 * cards operational.	 * It's a bonus if it works for anything else.	 */	if(is9){		COMMAND(port, SelectRegisterWindow, Wsetup);		x = ins(port+ConfigControl);		media = 0;		if(x & base10TAvailable9)			media |= base10TAvailable;		if(x & coaxAvailable9)			media |= coaxAvailable;		if(x & auiAvailable9)			media |= auiAvailable;	}	else{		COMMAND(port, SelectRegisterWindow, Wfifo);		media = ins(port+ResetOptions);	}	XCVRDEBUG("autoselect: media %uX\n", media);	if(media & miiConnector)		return xcvrMii;	COMMAND(port, SelectRegisterWindow, Wdiagnostic);	XCVRDEBUG("autoselect: media status %uX\n", ins(port+MediaStatus));	if(media & baseTXAvailable){		/*		 * Must have InternalConfig register.		 */		setxcvr(port, xcvr100BaseTX, is9);		COMMAND(port, SelectRegisterWindow, Wdiagnostic);		x = ins(port+MediaStatus) & ~(dcConverterEnabled|jabberGuardEnable);		outs(port+MediaStatus, linkBeatEnable|x);		delay(10);		if(ins(port+MediaStatus) & linkBeatDetect)			return xcvr100BaseTX;		outs(port+MediaStatus, x);	}	if(media & base10TAvailable){		setxcvr(port, xcvr10BaseT, is9);		COMMAND(port, SelectRegisterWindow, Wdiagnostic);		x = ins(port+MediaStatus) & ~dcConverterEnabled;		outs(port+MediaStatus, linkBeatEnable|jabberGuardEnable|x);		delay(100);		XCVRDEBUG("autoselect: 10BaseT media status %uX\n", ins(port+MediaStatus));		if(ins(port+MediaStatus) & linkBeatDetect)			return xcvr10BaseT;		outs(port+MediaStatus, x);	}	/*	 * Botch.	 */	return autoSelect;}static inteepromdata(int port, int offset){	COMMAND(port, SelectRegisterWindow, Wsetup);	while(EEPROMBUSY(port))		;	EEPROMCMD(port, EepromReadRegister, offset);	while(EEPROMBUSY(port))		;	return EEPROMDATA(port);}intetherelnk3reset(Ether* ether){	int anar, anlpar, busmaster, did, i, j, phyaddr, port, rxearly, rxstatus9, x, xcvr;	Block *bp, **bpp;	Adapter *ap;	uchar ea[Eaddrlen];	Ctlr *ctlr;	static int scandone;	char *p;	/*	 * Scan for adapter on PCI, EISA and finally	 * using the little ISA configuration dance.	 */	if(scandone == 0){		tcm59Xpci();		tcm5XXeisa();		tcm509isa();		scandone = 1;	}	/*	 * Any adapter matches if no ether->port is supplied,	 * otherwise the ports must match.	 */	port = 0;	bpp = &adapter;	for(bp = *bpp; bp; bp = bp->next){		ap = (Adapter*)bp->rp;		if(ether->port == 0 || ether->port == ap->port){			port = ap->port;			ether->irq = ap->irq;			ether->tbdf = ap->tbdf;			*bpp = bp->next;			freeb(bp);			break;		}		bpp = &bp->next;	}	if(port == 0 && (port = tcm5XXpcmcia(ether)) == 0)		return -1;	/*	 * Read the DeviceID from the EEPROM, it's at offset 0x03,	 * and do something depending on capabilities.	 */	switch(did = eepromdata(port, 0x03)){	case 0x9000:	case 0x9001:	case 0x9005:	case 0x9050:	case 0x9051:	case 0x9055:		if(BUSTYPE(ether->tbdf) != BusPCI)			goto buggery;		busmaster = 2;		goto vortex;	case 0x5900:	case 0x5920:	case 0x5950:	case 0x5951:	case 0x5952:	case 0x5970:	case 0x5971:	case 0x5972:		busmaster = 1;	vortex:		COMMAND(port, SelectRegisterWindow, Wfifo);		xcvr = inl(port+InternalConfig) & (autoSelect|xcvrMask);		rxearly = 8188;		rxstatus9 = 0;		break;	buggery:	default:		busmaster = 0;		COMMAND(port, SelectRegisterWindow, Wsetup);		x = ins(port+AddressConfig);		xcvr = ((x & xcvrMask9)>>14)<<20;		if(x & autoSelect9)			xcvr |= autoSelect;		rxearly = 2044;		rxstatus9 = 1;		break;	}	/*	 * Check if the adapter's station address is to be overridden.	 * If not, read it from the EEPROM and set in ether->ea prior to loading the	 * station address in Wstation. The EEPROM returns 16-bits at a time.	 */	memset(ea, 0, Eaddrlen);	if(memcmp(ea, ether->ea, Eaddrlen) == 0){		for(i = 0; i < Eaddrlen/2; i++){			x = eepromdata(port, i);			ether->ea[2*i] = x>>8;			ether->ea[2*i+1] = x;		}	}	COMMAND(port, SelectRegisterWindow, Wstation);	for(i = 0; i < Eaddrlen; i++)		outb(port+i, ether->ea[i]);	/*	 * Enable the transceiver if necessary and determine whether	 * busmastering can be used. Due to bugs in the first revision	 * of the 3C59[05], don't use busmastering at 10Mbps.	 */	XCVRDEBUG("reset: xcvr %uX\n", xcvr);	/*	 * Allow user to specify desired media in plan9.ini	 */	for(i = 0; i < ether->nopt; i++){		if(cistrncmp(ether->opt[i], "media=", 6) != 0)			continue;		p = ether->opt[i]+6;		for(j = 0; j < nelem(media); j++)			if(cistrcmp(p, media[j].name) == 0)				xcvr = media[j].xcvr;	}	/* * forgive me, but i am weak */if(did == 0x9055){   xcvr = xcvrMii;   XCVRDEBUG("9055 reset ops 0x%uX\n",	ins(port+ResetOp905B));}else	if(xcvr & autoSelect)		xcvr = autoselect(port, xcvr, rxstatus9);	XCVRDEBUG("autoselect returns: xcvr %uX, did 0x%uX\n", xcvr, did);	switch(xcvr){	case xcvrMii:		/*		 * Quick hack.		scanphy(port);		 */		phyaddr = 24;for(i = 0; i < 7; i++)    XCVRDEBUG(" %2.2uX", miir(port, phyaddr, i));XCVRDEBUG("\n");{	int phystat, timeo;	for(timeo = 0; timeo < 30; timeo++){		phystat = miir(port, phyaddr, 0x01);		if(phystat & 0x20)			break;		XCVRDEBUG(" %2.2uX", phystat);		delay(100);	}	XCVRDEBUG(" %2.2uX", miir(port, phyaddr, 0x01));	XCVRDEBUG("\n");}		anar = miir(port, phyaddr, 0x04);		anlpar = miir(port, phyaddr, 0x05) & 0x03E0;		anar &= anlpar;		miir(port, phyaddr, 0x00);		XCVRDEBUG("mii an: %uX anlp: %uX r0:%uX r1:%uX\n",			anar, anlpar, miir(port, phyaddr, 0x00),			miir(port, phyaddr, 0x01));		for(i = 0; i < ether->nopt; i++){			if(cistrcmp(ether->opt[i], "fullduplex") == 0)				anar |= 0x0100;			else if(cistrcmp(ether->opt[i], "100BASE-TXFD") == 0)				anar |= 0x0100;			else if(cistrcmp(ether->opt[i], "force100") == 0)				anar |= 0x0080;		}		XCVRDEBUG("mii anar: %uX\n", anar);		if(anar & 0x0100){		/* 100BASE-TXFD */			ether->mbps = 100;			setfullduplex(port);		}		else if(anar & 0x0200)		/* 100BASE-T4 */			;		else if(anar & 0x0080)		/* 100BASE-TX */			ether->mbps = 100;		else if(anar & 0x0040)		/* 10BASE-TFD */			setfullduplex(port);		else				/* 10BASE-T */			;		break;	case xcvr100BaseTX:	case xcvr100BaseFX:		COMMAND(port, SelectRegisterWindow, Wfifo);		x = inl(port+InternalConfig) & ~ramPartitionMask;		outl(port+InternalConfig, x|ramPartition1to1);		COMMAND(port, SelectRegisterWindow, Wdiagnostic);		x = ins(port+MediaStatus) & ~(dcConverterEnabled|jabberGuardEnable);		x |= linkBeatEnable;		outs(port+MediaStatus, x);		if(x & dataRate100)			ether->mbps = 100;		break;	case xcvr10BaseT:		/*		 * Enable Link Beat and Jabber to start the		 * transceiver.		 */		COMMAND(port, SelectRegisterWindow, Wdiagnostic);		x = ins(port+MediaStatus) & ~dcConverterEnabled;		x |= linkBeatEnable|jabberGuardEnable;		outs(port+MediaStatus, x);		if((did & 0xFF00) == 0x5900)			busmaster = 0;		break;	case xcvr10Base2:		COMMAND(port, SelectRegisterWindow, Wdiagnostic);		x = ins(port+MediaStatus) & ~(linkBeatEnable|jabberGuardEnable);		outs(port+MediaStatus, x);		/*		 * Start the DC-DC converter.		 * Wait > 800 microseconds.		 */		COMMAND(port, EnableDcConverter, 0);		delay(1);		break;	}	/*	 * Wop is the normal operating register set.	 * The 3C59[0257] adapters allow access to more than one register window	 * at a time, but there are situations where switching still needs to be	 * done, so just do it.	 * Clear out any lingering Tx status.	 */	COMMAND(port, SelectRegisterWindow, Wop);	while(inb(port+TxStatus))		outb(port+TxStatus, 0);	/*	 * Allocate a controller structure, clear out the	 * adapter statistics, clear the statistics logged into ctlr	 * and enable statistics collection. Xcvr is needed in order	 * to collect the BadSSD statistics.	 */	ether->ctlr = malloc(sizeof(Ctlr));	ctlr = ether->ctlr;	ilock(&ctlr->wlock);	ctlr->xcvr = xcvr;	statistics(ether);	memset(ctlr->stats, 0, sizeof(ctlr->stats));	ctlr->busmaster = busmaster;	ctlr->xcvr = xcvr;	ctlr->rxstatus9 = rxstatus9;	ctlr->rxearly = rxearly;	if(rxearly >= 2048)		ctlr->ts = 2;	COMMAND(port, StatisticsEnable, 0);	/*	 * Allocate any receive buffers.	 */	switch(ctlr->busmaster){	case 2:		ctlr->dnenabled = 1;		/*		 * 10MUpldBug.		 * Disabling is too severe, can use receive busmastering at		 * 100Mbps OK, but how to tell which rate is actually being used -		 * the 3c905 always seems to have dataRate100 set?		 * Believe the bug doesn't apply if upRxEarlyEnable is set		 * and the threshold is set such that uploads won't start		 * until the whole packet has been received.		 */		ctlr->upenabled = 1;		x = eepromdata(port, 0x0F);		if(!(x & 0x01))			outl(port+PktStatus, upRxEarlyEnable);		if(ctlr->upenabled || ctlr->dnenabled){			ctlr->nup = Nup;			ctlr->ndn = Ndn;			init905(ctlr);		}		else			ctlr->rbp = rbpalloc(allocb);		outl(port+TxFreeThresh, HOWMANY(ETHERMAXTU, 256));		break;	default:		ctlr->rbp = rbpalloc(allocb);		break;	}	/*	 * Set a base TxStartThresh which will be incremented	 * if any txUnderrun errors occur and ensure no RxEarly	 * interrupts happen.	 */	ctlr->txthreshold = ETHERMAXTU/2;	COMMAND(port, SetTxStartThresh, ctlr->txthreshold>>ctlr->ts);	COMMAND(port, SetRxEarlyThresh, rxearly>>ctlr->ts);	iunlock(&ctlr->wlock);	/*	 * Linkage to the generic ethernet driver.	 */	ether->port = port;	ether->attach = attach;	ether->transmit = transmit;	ether->interrupt = interrupt;	ether->ifstat = ifstat;	ether->promiscuous = promiscuous;	ether->multicast = multicast;	ether->arg = ether;	return 0;}voidetherelnk3link(void){	addethercard("elnk3",  etherelnk3reset);	addethercard("3C509",  etherelnk3reset);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区不卡在线播放 | 久久网这里都是精品| 国产高清视频一区| 视频一区中文字幕| 国产精品久久久久久久久果冻传媒 | 中文字幕在线不卡一区| 欧美夫妻性生活| 91亚洲国产成人精品一区二区三 | 一区二区三区精品| 国产亚洲一二三区| 91精品国产入口在线| 91一区二区在线| 岛国精品在线播放| 久久aⅴ国产欧美74aaa| 亚洲第一久久影院| 亚洲乱码中文字幕| 国产精品午夜免费| www成人在线观看| 日韩亚洲欧美中文三级| 欧美在线不卡一区| 色综合视频在线观看| 国产精品中文欧美| 极品少妇xxxx偷拍精品少妇| 亚洲图片欧美一区| 亚洲欧美日韩小说| 亚洲少妇中出一区| 国产精品人成在线观看免费| 久久久亚洲精品石原莉奈 | 欧美精品丝袜中出| 欧美伊人精品成人久久综合97| 99精品视频在线观看免费| 成人自拍视频在线| 成人小视频在线| 成人黄色免费短视频| 福利一区二区在线观看| 国产成人午夜片在线观看高清观看| 免费在线看一区| 日本va欧美va瓶| 久久精品国产99久久6| 日本一道高清亚洲日美韩| 不卡av在线免费观看| 成人动漫一区二区在线| 成人免费va视频| 91网站黄www| 91久久一区二区| 欧美调教femdomvk| 欧美人与z0zoxxxx视频| 欧美麻豆精品久久久久久| 在线不卡a资源高清| 91精品国产综合久久久蜜臀粉嫩| 91精品国产综合久久福利| 欧美一卡在线观看| 久久久久99精品一区| 国产精品视频看| 亚洲精品久久久蜜桃| 亚洲一区在线播放| 全部av―极品视觉盛宴亚洲| 国产一区二区在线视频| 国产不卡在线一区| 91丨九色丨黑人外教| 欧美伊人久久久久久久久影院 | 欧美日韩二区三区| 56国语精品自产拍在线观看| 精品久久久三级丝袜| 国产婷婷精品av在线| 亚洲美女屁股眼交| 三级欧美在线一区| 国产v综合v亚洲欧| 在线观看欧美精品| 精品va天堂亚洲国产| 国产精品视频九色porn| 午夜免费久久看| 国产一区二区电影| 日本久久一区二区| 精品成人私密视频| 亚洲乱码国产乱码精品精的特点| 日韩中文字幕麻豆| 国产大陆a不卡| 欧美日韩一区不卡| 久久人人爽人人爽| 亚洲在线一区二区三区| 老鸭窝一区二区久久精品| www.亚洲人| 日韩一区二区在线看片| 国产精品传媒在线| 卡一卡二国产精品 | 国产女同互慰高潮91漫画| 亚洲一区二区三区在线看| 国产一区二区日韩精品| 欧美午夜宅男影院| 国产人成一区二区三区影院| 亚洲国产精品一区二区久久恐怖片| 精品在线播放午夜| 在线观看亚洲一区| 欧美经典一区二区| 日av在线不卡| 91国偷自产一区二区三区观看| 欧美精品一区二区三区蜜臀| 一区二区三区国产| 国产成人精品亚洲777人妖| 在线成人av影院| 亚洲精品美腿丝袜| 国产成a人亚洲| 日韩免费高清视频| 一区二区三区日韩精品| 懂色av噜噜一区二区三区av| 日韩免费电影一区| 三级不卡在线观看| 欧美色综合网站| 一区二区三区丝袜| 99久免费精品视频在线观看| 久久只精品国产| 麻豆精品久久久| 欧美另类久久久品| 亚洲综合在线电影| jlzzjlzz欧美大全| 久久―日本道色综合久久| 麻豆精品在线视频| 欧美一区二区在线免费播放| 亚洲一区二区高清| 色av成人天堂桃色av| 最新热久久免费视频| 成人国产精品免费网站| 国产日韩av一区| 国产乱人伦偷精品视频不卡 | 7777精品久久久大香线蕉| 亚洲女性喷水在线观看一区| 成人免费高清在线| 国产欧美va欧美不卡在线| 国产91丝袜在线18| 久久精品人人做| 国产a精品视频| 国产视频一区在线观看| 国产一区二区免费看| 国产午夜亚洲精品不卡 | 欧美情侣在线播放| 五月婷婷激情综合网| 欧美理论电影在线| 日韩高清中文字幕一区| 日韩一区二区三区免费看| 蜜臀av性久久久久蜜臀av麻豆| 欧美一区二区播放| 精品一区二区在线视频| 久久久一区二区三区| 国产成人av自拍| 中文字幕中文在线不卡住| eeuss鲁片一区二区三区在线看| 亚洲私人影院在线观看| 91成人免费在线视频| 午夜视频在线观看一区| 日韩欧美亚洲国产精品字幕久久久| 麻豆国产精品777777在线| 精品久久久网站| 成年人国产精品| 亚洲一区二三区| 91精品国产色综合久久不卡电影 | 精品一区二区影视| 国产日韩视频一区二区三区| 99久久777色| 午夜影院久久久| 精品国产网站在线观看| 高清在线不卡av| 亚洲自拍偷拍av| 亚洲精品一区二区精华| 懂色一区二区三区免费观看| 一区二区三区日韩欧美| 欧美大片免费久久精品三p| 国产成人午夜精品5599| 亚洲主播在线观看| 26uuu国产电影一区二区| aaa国产一区| 天天色 色综合| 国产日韩精品久久久| 欧美午夜精品电影| 国产剧情一区二区三区| 亚洲男人的天堂在线aⅴ视频 | 亚洲婷婷在线视频| 在线播放欧美女士性生活| 国产乱子伦视频一区二区三区| 亚洲私人黄色宅男| 欧美一级淫片007| 99久久久国产精品免费蜜臀| 日韩电影在线一区二区三区| 亚洲国产激情av| 欧美一区二区三区四区五区| 成人精品一区二区三区四区| 视频一区二区中文字幕| 中文字幕欧美国产| 91麻豆精品国产自产在线观看一区| 国产成人亚洲精品青草天美| 天天色天天操综合| 亚洲欧洲www| 精品福利视频一区二区三区| 91蜜桃传媒精品久久久一区二区| 日本不卡不码高清免费观看| 亚洲视频你懂的| 国产色爱av资源综合区| 91麻豆精品国产91久久久久久久久| 99精品黄色片免费大全| 极品瑜伽女神91|