亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
精品国产91乱码一区二区三区| 国产精品欧美综合在线| 午夜国产精品影院在线观看| 欧美亚洲动漫精品| 日韩国产精品久久| 久久精品网站免费观看| 一本色道**综合亚洲精品蜜桃冫| 亚洲午夜精品久久久久久久久| 麻豆视频观看网址久久| 国产精品三级av| 欧美日韩国产高清一区二区| 国产精品自在在线| 亚洲图片欧美综合| 中文字幕一区二区三区不卡在线| 欧亚洲嫩模精品一区三区| 国产成人免费视频网站高清观看视频| 亚洲乱码国产乱码精品精的特点 | 久久 天天综合| 亚洲精品成人在线| 国产欧美视频一区二区三区| 91麻豆精品国产| 欧美色爱综合网| 欧美在线影院一区二区| av电影在线观看一区| 国产99久久精品| 国产成人综合在线观看| 国产一区二区主播在线| 1024成人网| 中文字幕乱码一区二区免费| 久久丝袜美腿综合| 久久精品视频免费观看| 日韩精品一区二区三区在线播放| 69堂精品视频| 日韩免费一区二区三区在线播放| 91精品国产综合久久久久久| 欧美一三区三区四区免费在线看| 欧美日韩国产首页| 日韩欧美www| 国产情人综合久久777777| 亚洲丝袜制服诱惑| 亚洲国产美女搞黄色| 天堂一区二区在线免费观看| 日本视频一区二区三区| 国产一区二区0| 91麻豆免费看片| 日韩一区二区在线观看视频播放 | 国产精品无圣光一区二区| 91麻豆精品国产91| 国产精品情趣视频| 亚洲午夜久久久久久久久久久| 日本成人在线不卡视频| 国产999精品久久久久久绿帽| 91黄色激情网站| 国产精品天干天干在线综合| 亚洲成人第一页| 不卡的av在线| 国产色婷婷亚洲99精品小说| 亚洲一区中文在线| 99久久久久久| 国产亚洲短视频| 久久成人av少妇免费| 欧美在线啊v一区| 国产精品国产三级国产aⅴ无密码| 日韩二区三区四区| 色94色欧美sute亚洲13| 亚洲三级在线观看| 99久久99久久精品免费看蜜桃| 日韩午夜精品电影| 日本亚洲三级在线| 色综合中文字幕国产| 久久理论电影网| 国内精品不卡在线| 国产日韩精品一区| 成人永久免费视频| 国产精品国模大尺度视频| 国产精品性做久久久久久| 欧美国产成人精品| 91在线高清观看| 亚洲成av人综合在线观看| 欧美日韩精品一区二区三区四区 | 久久久久久97三级| 日韩精品一区二区三区三区免费| 粉嫩av一区二区三区| 日本一区免费视频| 懂色av一区二区三区免费观看| 国产精品无圣光一区二区| 色综合中文综合网| 蜜臀久久99精品久久久久久9 | 99riav久久精品riav| 一区二区三区四区乱视频| 91精品免费在线| 国产伦精品一区二区三区在线观看| 国产欧美一区在线| 欧美视频在线不卡| 国产成人av一区二区三区在线观看| 中文字幕制服丝袜成人av| 欧美日韩在线播| 国产91丝袜在线播放九色| 日韩高清不卡一区二区| 中文字幕日本不卡| 久久久91精品国产一区二区三区| 91久久线看在观草草青青| 蜜臀精品一区二区三区在线观看 | 日韩毛片高清在线播放| 日韩精品一区二| 日韩一区二区不卡| 欧美在线不卡视频| 色8久久人人97超碰香蕉987| 风流少妇一区二区| 国产中文字幕一区| 激情综合色综合久久| 免费观看30秒视频久久| 日韩精品乱码免费| 日韩精品一级二级 | 国产999精品久久久久久| 韩国一区二区视频| 国产精品1区2区3区在线观看| 美日韩黄色大片| 久久se精品一区精品二区| 免费观看久久久4p| 东方aⅴ免费观看久久av| 五月天丁香久久| 麻豆精品在线播放| 国产九色sp调教91| 99久久精品99国产精品| 色婷婷精品久久二区二区蜜臂av | 亚洲图片有声小说| 免费看黄色91| 91丨porny丨国产| 欧美裸体bbwbbwbbw| 国产欧美精品一区二区色综合 | 99精品视频一区二区三区| 欧美在线免费观看视频| 91精品国产综合久久婷婷香蕉 | 日韩欧美电影一区| 中文字幕免费一区| 亚洲日本青草视频在线怡红院 | 亚洲靠逼com| 国产精品影视在线| 91精品综合久久久久久| 国产精品久久久久久久久动漫 | 国产精品66部| 69堂成人精品免费视频| 亚洲欧美福利一区二区| 欧美日韩一级大片网址| 日韩午夜激情免费电影| 亚洲精品五月天| 国产一区二区免费视频| 日韩一级免费一区| 午夜欧美大尺度福利影院在线看| 99精品欧美一区二区三区综合在线| 91黄色免费版| 亚洲精品日日夜夜| 91蝌蚪国产九色| 亚洲欧美综合网| 色成年激情久久综合| 伊人婷婷欧美激情| 色综合久久综合网欧美综合网| 欧美国产亚洲另类动漫| 成人91在线观看| 成人免费一区二区三区在线观看| 国产69精品久久久久毛片| 亚洲国产经典视频| 99久久免费精品高清特色大片| 一区二区三区在线播放| 91国在线观看| 精品亚洲成a人在线观看| 欧美不卡在线视频| 成人成人成人在线视频| 亚洲图片激情小说| 欧美日韩一区在线观看| 激情久久五月天| 国产精品久久久久久久久果冻传媒| 在线观看成人免费视频| 免费精品视频在线| 亚洲人成7777| 91精品欧美福利在线观看| 国产不卡在线一区| 久久成人av少妇免费| 久久影院午夜论| 色哟哟国产精品免费观看| 日韩av在线播放中文字幕| 亚洲国产精品国自产拍av| 在线观看视频91| 成人综合激情网| 男女性色大片免费观看一区二区| 国产精品毛片高清在线完整版 | 91婷婷韩国欧美一区二区| 久久99国产精品久久99| 天堂蜜桃一区二区三区| 亚洲欧美色一区| 亚洲色欲色欲www| 国产蜜臀av在线一区二区三区| 精品粉嫩超白一线天av| 777奇米成人网| 欧美一区二区在线不卡| 欧美综合视频在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 国产一级精品在线| 国产寡妇亲子伦一区二区|