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

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

?? smc91x.c

?? lubbock是Intel官方為pxa255提供的bios
?? C
?? 第 1 頁 / 共 3 頁
字號:
	// Start code <01>	bits[clk_idx++] = MII_MDOE;	bits[clk_idx++] = MII_MDOE | MII_MDO;	// Read command <10>	bits[clk_idx++] = MII_MDOE | MII_MDO;	bits[clk_idx++] = MII_MDOE;	// Output the PHY address, msb first	mask = (byte)0x10;	for (i = 0; i < 5; ++i)		{		if (phyaddr & mask)			bits[clk_idx++] = MII_MDOE | MII_MDO;		else			bits[clk_idx++] = MII_MDOE;		// Shift to next lowest bit		mask >>= 1;		}	// Output the phy register number, msb first	mask = (byte)0x10;	for (i = 0; i < 5; ++i)		{		if (phyreg & mask)			bits[clk_idx++] = MII_MDOE | MII_MDO;		else			bits[clk_idx++] = MII_MDOE;		// Shift to next lowest bit		mask >>= 1;		}	// Tristate and turnaround (2 bit times)	bits[clk_idx++] = 0;	//bits[clk_idx++] = 0;	// Input starts at this bit time	input_idx = clk_idx;	// Will input 16 bits	for (i = 0; i < 16; ++i)		bits[clk_idx++] = 0;	// Final clock bit	bits[clk_idx++] = 0;	// Save the current bank	oldBank = SMC_inw( BANK_SELECT );	// Select bank 3	SMC_SELECT_BANK( 3 );	// Get the current MII register value	mii_reg = SMC_inw( MII_REG );	// Turn off all MII Interface bits	mii_reg &= ~(MII_MDOE|MII_MCLK|MII_MDI|MII_MDO);	// Clock all 64 cycles	for (i = 0; i < sizeof bits; ++i)		{		// Clock Low - output data		SMC_outw( mii_reg | bits[i], MII_REG );		msleep(SMC_PHY_CLOCK_DELAY);		// Clock Hi - input data		SMC_outw( mii_reg | bits[i] | MII_MCLK, MII_REG );		msleep(SMC_PHY_CLOCK_DELAY);		bits[i] |= SMC_inw( MII_REG ) & MII_MDI;		}	// Return to idle state	// Set clock to low, data to low, and output tristated	SMC_outw( mii_reg, MII_REG );	msleep(SMC_PHY_CLOCK_DELAY);	// Restore original bank select	SMC_SELECT_BANK( oldBank );	// Recover input data	phydata = 0;	for (i = 0; i < 16; ++i)		{		phydata <<= 1;		if (bits[input_idx++] & MII_MDI)			phydata |= 0x0001;		}#if (SMC_DEBUG > 2 )	printf("smc_read_phy_register(): phyaddr=%x,phyreg=%x,phydata=%x\n",		phyaddr, phyreg, phydata);	smc_dump_mii_stream(bits, sizeof bits);#endif	return(phydata);	}/*------------------------------------------------------------ . Writes a register to the MII Management serial interface .-------------------------------------------------------------*/static void smc_write_phy_register(byte phyreg, word phydata){	int oldBank;	int i;	word mask;	word mii_reg;	byte bits[65];	int clk_idx = 0;	byte phyaddr = SMC_PHY_ADDR;	// 32 consecutive ones on MDO to establish sync	for (i = 0; i < 32; ++i)		bits[clk_idx++] = MII_MDOE | MII_MDO;	// Start code <01>	bits[clk_idx++] = MII_MDOE;	bits[clk_idx++] = MII_MDOE | MII_MDO;	// Write command <01>	bits[clk_idx++] = MII_MDOE;	bits[clk_idx++] = MII_MDOE | MII_MDO;	// Output the PHY address, msb first	mask = (byte)0x10;	for (i = 0; i < 5; ++i)		{		if (phyaddr & mask)			bits[clk_idx++] = MII_MDOE | MII_MDO;		else			bits[clk_idx++] = MII_MDOE;		// Shift to next lowest bit		mask >>= 1;		}	// Output the phy register number, msb first	mask = (byte)0x10;	for (i = 0; i < 5; ++i)		{		if (phyreg & mask)			bits[clk_idx++] = MII_MDOE | MII_MDO;		else			bits[clk_idx++] = MII_MDOE;		// Shift to next lowest bit		mask >>= 1;		}	// Tristate and turnaround (2 bit times)	bits[clk_idx++] = 0;	bits[clk_idx++] = 0;	// Write out 16 bits of data, msb first	mask = 0x8000;	for (i = 0; i < 16; ++i)		{		if (phydata & mask)			bits[clk_idx++] = MII_MDOE | MII_MDO;		else			bits[clk_idx++] = MII_MDOE;		// Shift to next lowest bit		mask >>= 1;		}	// Final clock bit (tristate)	bits[clk_idx++] = 0;	// Save the current bank	oldBank = SMC_inw( BANK_SELECT );	// Select bank 3	SMC_SELECT_BANK( 3 );	// Get the current MII register value	mii_reg = SMC_inw( MII_REG );	// Turn off all MII Interface bits	mii_reg &= ~(MII_MDOE|MII_MCLK|MII_MDI|MII_MDO);	// Clock all cycles	for (i = 0; i < sizeof bits; ++i)		{		// Clock Low - output data		SMC_outw( mii_reg | bits[i], MII_REG );		msleep(SMC_PHY_CLOCK_DELAY);		// Clock Hi - input data		SMC_outw( mii_reg | bits[i] | MII_MCLK, MII_REG );		msleep(SMC_PHY_CLOCK_DELAY);		bits[i] |= SMC_inw( MII_REG ) & MII_MDI;		}	// Return to idle state	// Set clock to low, data to low, and output tristated	SMC_outw( mii_reg, MII_REG );	msleep(SMC_PHY_CLOCK_DELAY);	// Restore original bank select	SMC_SELECT_BANK( oldBank );#if (SMC_DEBUG > 2 )	printf("smc_write_phy_register(): phyaddr=%x,phyreg=%x,phydata=%x\n",		phyaddr, phyreg, phydata);	smc_dump_mii_stream(bits, sizeof bits);#endif}/*------------------------------------------------------------ . Waits the specified number of milliseconds - kernel friendly .-------------------------------------------------------------*/static void smc_wait_ms(unsigned int ms){	msleep(ms);}/*------------------------------------------------------------ . Configures the specified PHY using Autonegotiation. Calls . smc_phy_fixed() if the user has requested a certain config. .-------------------------------------------------------------*/static void smc_phy_configure(){	int timeout;	byte phyaddr;	word my_phy_caps; // My PHY capabilities	word my_ad_caps;  // My Advertised capabilities	word status = 0;  //;my status = 0	int failed = 0;	PRINTK3("%s:smc_program_phy()\n", SMC_DEV_NAME);	// Get the detected phy address	phyaddr = SMC_PHY_ADDR;	// Reset the PHY, setting all other bits to zero	smc_write_phy_register(PHY_CNTL_REG, PHY_CNTL_RST);	// Wait for the reset to complete, or time out	timeout = 6; // Wait up to 3 seconds	while (timeout--)		{		if (!(smc_read_phy_register(PHY_CNTL_REG)		    & PHY_CNTL_RST))			{			// reset complete			break;			}		smc_wait_ms(500); // wait 500 millisecs		}	if (timeout < 1)		{		//printf("%s:PHY reset timed out\n", SMC_DEV_NAME);		goto smc_phy_configure_exit;		}	// Read PHY Register 18, Status Output	// lp->lastPhy18 = smc_read_phy_register(PHY_INT_REG);	// Enable PHY Interrupts (for register 18)	// Interrupts listed here are disabled	smc_write_phy_register(PHY_INT_REG, 0xffff);	/* Configure the Receive/Phy Control register */	SMC_SELECT_BANK( 0 );	SMC_outw( RPC_DEFAULT, RPC_REG );	// Copy our capabilities from PHY_STAT_REG to PHY_AD_REG	my_phy_caps = smc_read_phy_register(PHY_STAT_REG);	my_ad_caps  = PHY_AD_CSMA; // I am CSMA capable	if (my_phy_caps & PHY_STAT_CAP_T4)		my_ad_caps |= PHY_AD_T4;	if (my_phy_caps & PHY_STAT_CAP_TXF)		my_ad_caps |= PHY_AD_TX_FDX;	if (my_phy_caps & PHY_STAT_CAP_TXH)		my_ad_caps |= PHY_AD_TX_HDX;	if (my_phy_caps & PHY_STAT_CAP_TF)		my_ad_caps |= PHY_AD_10_FDX;	if (my_phy_caps & PHY_STAT_CAP_TH)		my_ad_caps |= PHY_AD_10_HDX;	// Update our Auto-Neg Advertisement Register	smc_write_phy_register( PHY_AD_REG, my_ad_caps);	PRINTK2("%s:phy caps=%x\n", SMC_DEV_NAME, my_phy_caps);	PRINTK2("%s:phy advertised caps=%x\n", SMC_DEV_NAME, my_ad_caps);	// Restart auto-negotiation process in order to advertise my caps	smc_write_phy_register( PHY_CNTL_REG,		PHY_CNTL_ANEG_EN | PHY_CNTL_ANEG_RST );	// Wait for the auto-negotiation to complete.  This may take from	// 2 to 3 seconds.	// Wait for the reset to complete, or time out	timeout = 20; // Wait up to 10 seconds	while (timeout--)		{		status = smc_read_phy_register( PHY_STAT_REG);		if (status & PHY_STAT_ANEG_ACK)			{			// auto-negotiate complete			break;			}		smc_wait_ms(500); // wait 500 millisecs		// Restart auto-negotiation if remote fault		if (status & PHY_STAT_REM_FLT)			{			//printf("%s:PHY remote fault detected\n", SMC_DEV_NAME);			// Restart auto-negotiation			//printf("%s:PHY restarting auto-negotiation\n",			//	SMC_DEV_NAME);			smc_write_phy_register( PHY_CNTL_REG,				PHY_CNTL_ANEG_EN | PHY_CNTL_ANEG_RST |				PHY_CNTL_SPEED | PHY_CNTL_DPLX);			}		}	if (timeout < 1)		{		//printf("%s:PHY auto-negotiate timed out\n",		//	SMC_DEV_NAME);		//printf("%s:PHY auto-negotiate timed out\n", SMC_DEV_NAME);		failed = 1;		}	// Fail if we detected an auto-negotiate remote fault	if (status & PHY_STAT_REM_FLT)		{		//printf( "%s:PHY remote fault detected\n", SMC_DEV_NAME);		//printf("%s:PHY remote fault detected\n", SMC_DEV_NAME);		failed = 1;		}	// Re-Configure the Receive/Phy Control register	SMC_outw( RPC_DEFAULT, RPC_REG );  smc_phy_configure_exit:	return;}#if SMC_DEBUG > 2static void print_packet( byte * buf, int length ){        int i;        int remainder;        int lines;        printf("Packet of length %d \n", length );#if SMC_DEBUG > 3        lines = length / 16;        remainder = length % 16;        for ( i = 0; i < lines ; i ++ ) {                int cur;                for ( cur = 0; cur < 8; cur ++ ) {                        byte a, b;                        a = *(buf ++ );                        b = *(buf ++ );                        printf("%02x%02x ", a, b );                }                printf("\n");        }        for ( i = 0; i < remainder/2 ; i++ ) {                byte a, b;                a = *(buf ++ );                b = *(buf ++ );                printf("%02x%02x ", a, b );        }        printf("\n");#endif}#endifint smc_init(){		/* SMC91c96 */		volatile u32 * attaddr = (volatile u32*)0x0E000000;		u16 bank;		testpoint[0] = 1;				attaddr[ECOR] |= ECOR_RESET;		msleep(1);		attaddr[ECOR] &= ~ECOR_RESET;		attaddr[ECOR] |= ECOR_ENABLE;		/* force 16-bit mode */		attaddr[ECSR] &= ~ECSR_IOIS8;		msleep(1);		bank = SMC_inw(BANK_SELECT);		if( (bank & 0xff00) != 0x3300 ) { 			printf("Can't detect : %04x\n", bank);			testpoint[10] = 1;			return 0;		}		testpoint[9] = 1;				return 1;}int eth_init() {	int ok;	ok = smc_init ();	if (ok) smc_open();	return 0;}void eth_halt() {	smc_close();}int eth_rx() {	return smc_rcv();}int eth_xmit(struct mybuf *packet) {	int ret;	ret = smc_send_packet(packet->buf, packet->len);	packet->len = 0;	return ret;}__initlist(eth_init, INIT_LEVEL_INITIAL_HARDWARE);//__exitlist(eth_exit, INIT_LEVEL_INITIAL_HARDWARE);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线影院| 日韩一区二区中文字幕| 欧美久久久久久蜜桃| 久久婷婷国产综合精品青草| 一区二区三区在线观看国产| 国产米奇在线777精品观看| 欧美色图激情小说| 综合中文字幕亚洲| 国产ts人妖一区二区| 日韩欧美一区在线| 天天综合天天综合色| 91久久精品一区二区三| 亚洲国产成人午夜在线一区 | 亚洲精品高清视频在线观看| 久久99国产精品久久99| 欧美日韩二区三区| 樱桃视频在线观看一区| av毛片久久久久**hd| 国产色产综合产在线视频| 精品一区二区免费看| 在线播放日韩导航| 亚洲小少妇裸体bbw| av一二三不卡影片| 中文字幕制服丝袜一区二区三区| 在线观看不卡视频| 国产精品污网站| 风间由美一区二区av101| 久久丝袜美腿综合| 国产乱人伦偷精品视频免下载| 欧美大片国产精品| 免费精品视频在线| 日韩视频123| 久久er精品视频| 欧美videofree性高清杂交| 蜜桃视频免费观看一区| 日韩欧美高清在线| 国产成人啪午夜精品网站男同| 中文字幕免费一区| 成人av在线网站| 亚洲精品精品亚洲| 欧美亚洲日本国产| 日韩中文字幕av电影| 欧美一区二区三区四区视频| 日本不卡的三区四区五区| 日韩免费在线观看| 国产成人免费视频| 中国av一区二区三区| www.亚洲精品| 亚洲bt欧美bt精品777| 51精品视频一区二区三区| 久久国产福利国产秒拍| 国产亚洲一本大道中文在线| 99这里都是精品| 亚洲福利电影网| 精品少妇一区二区| 成人av中文字幕| 丝袜美腿亚洲一区| 久久影院视频免费| 99精品国产一区二区三区不卡| 国产福利不卡视频| 亚洲激情在线激情| 欧美成人精品福利| 91蜜桃在线免费视频| 五月综合激情网| 国产午夜亚洲精品理论片色戒 | 久久成人免费电影| 国产精品人成在线观看免费| 欧美性猛交一区二区三区精品| 久久精品国产亚洲a| 亚洲欧美另类小说视频| 欧美一区二区三区的| 成人h版在线观看| 日韩av电影免费观看高清完整版在线观看| 久久久精品黄色| 在线播放国产精品二区一二区四区| 久久成人免费电影| 亚洲国产日韩综合久久精品| 久久午夜色播影院免费高清| 欧美日韩精品欧美日韩精品| 国产1区2区3区精品美女| 亚洲午夜久久久久| 国产女主播在线一区二区| 欧美日韩成人综合天天影院| jlzzjlzz欧美大全| 极品少妇xxxx偷拍精品少妇| 亚洲午夜久久久久中文字幕久| 久久一区二区三区国产精品| 5月丁香婷婷综合| 91福利视频在线| 99免费精品视频| 国产精品综合在线视频| 日本午夜精品视频在线观看 | 3d动漫精品啪啪一区二区竹菊| 成人性生交大片免费看在线播放| 男人的天堂亚洲一区| 国产麻豆午夜三级精品| 午夜精品一区二区三区三上悠亚| 日韩一区中文字幕| 国产午夜亚洲精品不卡| 日韩亚洲欧美在线| 欧美一卡二卡三卡四卡| 欧美日韩久久不卡| 欧美在线三级电影| 色哦色哦哦色天天综合| 99精品欧美一区二区蜜桃免费 | 亚洲人成网站精品片在线观看| 26uuu精品一区二区| 日韩一卡二卡三卡国产欧美| 在线播放中文字幕一区| 欧美精品高清视频| 91精品午夜视频| 欧美一区二区观看视频| 欧美大片免费久久精品三p| 欧美一级高清片| 日韩丝袜美女视频| 精品欧美久久久| 久久久久久久久免费| 欧美国产日韩在线观看| 中文字幕高清一区| 亚洲同性gay激情无套| 亚洲免费伊人电影| 亚洲精品五月天| 亚洲高清免费视频| 日av在线不卡| 国产在线国偷精品产拍免费yy| 韩国av一区二区三区| 国产激情视频一区二区在线观看| 国产精品99久久久久久久女警| 国产精品资源站在线| 国产精品一二三四五| www.欧美.com| 欧美色图12p| 欧美精品一区男女天堂| 国产亚洲综合av| 亚洲色图视频免费播放| 亚洲小说春色综合另类电影| 日韩av一区二区在线影视| 国产一区在线不卡| 99re8在线精品视频免费播放| 欧美亚洲综合另类| 日韩欧美国产一区二区在线播放 | 国产成人在线视频播放| av一二三不卡影片| 欧美美女直播网站| 久久久91精品国产一区二区精品| 国产精品成人一区二区三区夜夜夜| 亚洲一区在线电影| 精品一区二区三区影院在线午夜| 丰满白嫩尤物一区二区| 欧美日本在线观看| 久久综合色鬼综合色| 亚洲欧美精品午睡沙发| 日本欧美在线看| 成人av综合在线| 欧美成人女星排行榜| 国产精品福利av | 亚洲精品乱码久久久久久| 久久国产婷婷国产香蕉| 99久久er热在这里只有精品15| 欧美精品乱人伦久久久久久| 日本一区二区视频在线| 日韩福利电影在线| 97久久精品人人做人人爽50路| 91精品久久久久久久99蜜桃 | 精品国内片67194| 国产亚洲精品免费| 国产精品99久久久久久宅男| 亚洲欧洲日韩综合一区二区| 日韩电影在线免费看| 99国产精品久久久久久久久久| 国产精品网曝门| 麻豆精品视频在线观看| 欧美在线观看视频一区二区| 久久老女人爱爱| 久久疯狂做爰流白浆xx| 欧美体内she精视频| 国产精品黄色在线观看| 韩国av一区二区三区| 欧美一区二区啪啪| 性欧美大战久久久久久久久| 91麻豆免费观看| 国产女人水真多18毛片18精品视频| 日韩av不卡在线观看| 欧美三级蜜桃2在线观看| 亚洲欧美成人一区二区三区| 丁香婷婷综合激情五月色| 久久一区二区视频| 久久99久久99精品免视看婷婷 | 亚洲色图第一区| 欧美在线观看视频一区二区 | 五月婷婷欧美视频| 色综合中文字幕国产 | 日韩一区二区视频| 亚洲一区视频在线| 日本精品一级二级| 亚洲精品v日韩精品| 99精品视频一区| 亚洲精品免费在线| 91成人免费在线| 亚洲国产精品久久人人爱|