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

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

?? nicmiiaccess.c

?? 3com 3c905網卡驅動硬件部分源碼
?? C
字號:
/*******************************************************************************
*** Note: Copy rights resevered to Beijing Pacific Linkair Communications Co. 
***
*** File Name: NICMiiAccess.c
*** Purpose  : Basic Access to MII PHY
***
*** Author   : Guangzhao Tian
*** Modified : By Guangzhao Tian at 2000/9/11
***
**/

#include "NICMacro.h"
#include "NICWinReg.h"
#include "NICCommand.h"
#include "NICEeprom.h"
#include "NICData.h"
#include "NICHelper.h"
#include "NICMii.h"
#include "NICExport.h"

/*****************************************************************
***	Search for any PHY that is not known. 
**/
BOOLEAN NIC_MIIFindPhy(IN PNIC_INFORMATION pAdapter	) 
{
	USHORT MediaOptions = 0;
	USHORT PhyManagement = 0;
	UCHAR index;
 
	/* Read the MEDIA OPTIONS to see what connectors are available*/
	NIC_COMMAND(pAdapter->IoBaseAddress,COMMAND_SELECT_REGISTER_WINDOW | REGISTER_WINDOW_3);
   	MediaOptions = NIC_READ_PORT_USHORT(pAdapter->IoBaseAddress,MEDIA_OPTIONS_REGISTER);
    DebugMsg("MII Find Phy: Media Options from Reg Win 3 -- 0x%08X ! \n", MediaOptions);

	if ( (MediaOptions & MEDIA_OPTIONS_MII_AVAILABLE       ) || 
    	 (MediaOptions & MEDIA_OPTIONS_100BASET4_AVAILABLE ) ) 
	{
    	/* Drop everything, so we are not driving the data, and run the
    	   clock through 32 cycles in case the PHY is trying to tell us
    	   something. Then read the data line, since the PHY's pull-up
    	   will read as a 1 if it's present. */
		NIC_COMMAND(pAdapter->IoBaseAddress,COMMAND_SELECT_REGISTER_WINDOW | REGISTER_WINDOW_4);
		NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,0);
		for (index = 0; index < 32; index++) 
		{
			NIC_DELAY(MII_WAITTIMES);
			NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_CLOCK);
			NIC_DELAY(MII_WAITTIMES);
			NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,0);
		}
		
		PhyManagement = NIC_READ_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER);
		if ( PhyManagement & PHY_DATA1) return TRUE;
		else 	return FALSE;	
    } 
    	
	return TRUE;
}

/****************************************************************************
*** Reads a particular MII PHY register given the proper offset.
**/
BOOLEAN NIC_MIIReadPhy(IN PNIC_INFORMATION pAdapter,IN USHORT RegisterAddress, OUT PUSHORT pInput) 
{
	USHORT PhyManagement = 0;
    USHORT ReadCommand;
    ULONG  nThisBit;

    NIC_MIISendPhyPreamble(pAdapter);

	/* Bits 2..6 of the command word specify the register. */
	ReadCommand = MII_PHY_READCOMMAND | ( (RegisterAddress & 0x1F) << 2 );
                                      /*see the MII Management Frame Formats*/
   	for (nThisBit = 0x8000; nThisBit > 2; nThisBit >>= 1) 
	{
		NIC_COMMAND(pAdapter->IoBaseAddress , COMMAND_SELECT_REGISTER_WINDOW | REGISTER_WINDOW_4);
		if (ReadCommand & nThisBit) 
		{
			NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_WRITE | PHY_DATA1);

			NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER, 
				     				 PHY_WRITE | PHY_DATA1 | PHY_CLOCK);  /*drive 1 to PHY*/
		}
		else 
		{
		  	NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_WRITE);
			NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,
									PHY_WRITE | PHY_CLOCK);   /*drive 0 to PHY*/
		}

		NIC_DELAY(MII_WAITTIMES);
		NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_WRITE);
		NIC_DELAY(MII_WAITTIMES);
	}

    /* Now run one clock with nobody driving.to complete the rest 2 bit driving */
	NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,0);

	NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_CLOCK);

	NIC_DELAY(MII_WAITTIMES);
	
	NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,0);
	
	NIC_DELAY(MII_WAITTIMES);

    /* Now run one clock, expecting the PHY to be driving a 0 on the data
       line.  If we read a 1, it has to be just his pull-up, and he's not
       responding. */
   	PhyManagement = NIC_READ_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER);

	if (PhyManagement & PHY_DATA1) 
	{	return FALSE;  	}

	/* We think we are in sync.  Now we read 16 bits of data from the PHY. */
   	for (nThisBit = 0x8000; nThisBit; nThisBit >>= 1) 
	{
		/* Shift input up one to make room */
		NIC_COMMAND(pAdapter->IoBaseAddress,COMMAND_SELECT_REGISTER_WINDOW | REGISTER_WINDOW_4);

	  	NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER, PHY_CLOCK);
		NIC_DELAY(MII_WAITTIMES);

		NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,0);
		NIC_DELAY(MII_WAITTIMES);
	
		PhyManagement = NIC_READ_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER);

		if (PhyManagement & PHY_DATA1) 		*pInput |= nThisBit;
		else					    		*pInput &= ~nThisBit;
	}

    /* OK now give it a couple of clocks with nobody driving. */
	NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,0);
    for (nThisBit = 0; nThisBit < 2; nThisBit++) 
	{
		NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_CLOCK);
		NIC_DELAY(MII_WAITTIMES);
		NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER, 0);
		NIC_DELAY(MII_WAITTIMES);
	}
    
	return TRUE;
}

/*****************************************************************************
***Writes to a particular MII PHY register given the proper offset.
**/
VOID NIC_MIIWritePhy( IN PNIC_INFORMATION pAdapter,IN USHORT RegAddr,IN USHORT Output )
{
   	ULONG index,index2;
    USHORT wWritecmd[2];

	wWritecmd[0] = 0;
	wWritecmd[1] = 0;
 
	NIC_MIISendPhyPreamble(pAdapter);
    /* Bits 2..6 of the command word specify the register. */
    wWritecmd[0] =MII_PHY_WRITECOMMAND |( (RegAddr & 0x1F) << 2 ) ;
    wWritecmd[1] = Output;

	NIC_COMMAND(pAdapter->IoBaseAddress,COMMAND_SELECT_REGISTER_WINDOW | REGISTER_WINDOW_4);

    for (index2 = 0; index2 < 2; index2++) 
	{
		for (index = 0x8000; index; index >>= 1) 
		{
			if (wWritecmd[index2] & index) 
			{
				NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,	PHYSICAL_MANAGEMENT_REGISTER,PHY_WRITE | PHY_DATA1);

				NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,	PHYSICAL_MANAGEMENT_REGISTER,
						PHY_WRITE | PHY_DATA1 | PHY_CLOCK);
			} 
	    	else 
			{
			 	NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_WRITE);

	       		NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_WRITE | PHY_CLOCK);
			}

			NIC_DELAY(MII_WAITTIMES);
			NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,	PHYSICAL_MANAGEMENT_REGISTER,PHY_WRITE);
			NIC_DELAY(MII_WAITTIMES);
		}
	}
    
    /* OK now give it a couple of clocks with nobody driving. */
   	NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,0);
	for (index = 0; index < 2; index++) 
	{
    	NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_CLOCK);
		NIC_DELAY(MII_WAITTIMES);

		NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,0);
		NIC_DELAY(MII_WAITTIMES);
	}

}


/********************************************************************************
*** Establishes the synchronization for each MII transaction. This
***	is done by sending thirty-two "1" bits.
**/
VOID NIC_MIISendPhyPreamble(IN PNIC_INFORMATION pAdapter) 
{
    UCHAR index;
    /* Set up and send the preamble, a sequence of 32 "1" bits */
	NIC_COMMAND(pAdapter->IoBaseAddress,COMMAND_SELECT_REGISTER_WINDOW | REGISTER_WINDOW_4);
	NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_WRITE);

    for (index = 0; index < 32; index++) 
	{
		NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_WRITE | PHY_DATA1);
		NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER, 
			           					 PHY_WRITE | PHY_DATA1 | PHY_CLOCK);
		NIC_DELAY(MII_WAITTIMES);
		NIC_WRITE_PORT_USHORT(pAdapter->IoBaseAddress,PHYSICAL_MANAGEMENT_REGISTER,PHY_WRITE);
		NIC_DELAY(MII_WAITTIMES);  
	}
}


/** Above are routines about MII Phy Accessging
***  End of NICMiiAccess.c
*****************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu亚洲综合色| 成人综合婷婷国产精品久久免费| 色婷婷精品大视频在线蜜桃视频| 国产精品国模大尺度视频| av午夜一区麻豆| 亚洲天堂av老司机| 欧美性受极品xxxx喷水| 婷婷成人激情在线网| 欧美电影免费观看高清完整版| 国产一区二区影院| 中文字幕一区在线观看| 欧美性色黄大片| 免费视频最近日韩| 中国色在线观看另类| 在线免费精品视频| 日韩电影一区二区三区四区| 久久久美女毛片| a级精品国产片在线观看| 亚洲国产aⅴ天堂久久| 日韩午夜小视频| 国产精品一二二区| 一区二区三区精品视频在线| 91精品国产综合久久精品app | 日韩综合在线视频| 欧美精品一区二区三区一线天视频| 成人伦理片在线| 日韩中文字幕麻豆| 国产精品久久久久久久久免费丝袜| 在线观看亚洲a| 久久99久久99| 亚洲人成精品久久久久久| 宅男在线国产精品| av一区二区三区在线| 蜜桃久久久久久| 中文字幕国产一区| 91麻豆精品国产综合久久久久久 | 天堂av在线一区| 国产日韩三级在线| 91精品国产综合久久久蜜臀图片| 成人av影视在线观看| 久久99在线观看| 一区二区三区日韩欧美| 久久婷婷成人综合色| 欧美日韩国产片| 成人黄色a**站在线观看| 青青草成人在线观看| 亚洲男女毛片无遮挡| 国产欧美一区二区三区网站| 91麻豆精品国产91| 欧日韩精品视频| 不卡影院免费观看| 国产真实精品久久二三区| 亚洲18色成人| 亚洲自拍欧美精品| 国产精品的网站| 欧美激情一区二区三区蜜桃视频| 日韩免费观看高清完整版在线观看 | 日韩免费一区二区| 欧美日韩视频在线第一区| www.成人在线| 成人黄色777网| 国产高清在线精品| 精一区二区三区| 丝袜a∨在线一区二区三区不卡| 亚洲人成网站色在线观看| 欧美国产成人精品| 国产欧美精品在线观看| 国产日韩欧美麻豆| 国产欧美视频一区二区| 久久网站最新地址| 久久久精品蜜桃| www一区二区| 久久久午夜精品| 欧美韩国日本综合| 国产精品久久久久一区二区三区 | 在线播放欧美女士性生活| 欧美午夜精品一区二区三区| 在线观看av不卡| 在线精品视频免费观看| 欧美一a一片一级一片| 欧美做爰猛烈大尺度电影无法无天| 欧美综合久久久| 欧美精品少妇一区二区三区| 欧美日韩一级二级| 日韩一区二区麻豆国产| 久久综合色鬼综合色| 久久久久国产精品厨房| 国产亲近乱来精品视频| 自拍偷自拍亚洲精品播放| 亚洲欧美日韩在线不卡| 亚洲视频网在线直播| 亚洲成人黄色影院| 日韩二区三区在线观看| 国产自产视频一区二区三区| 国产激情视频一区二区三区欧美 | 国产精品1区2区| 成人精品亚洲人成在线| 91麻豆123| 3d动漫精品啪啪一区二区竹菊| 精品免费国产一区二区三区四区| 久久亚洲影视婷婷| ㊣最新国产の精品bt伙计久久| 亚洲一区二区视频在线观看| 日本不卡不码高清免费观看| 国产精品一区在线观看乱码 | 欧美日精品一区视频| 欧美一区二区三区思思人| 久久久亚洲精品石原莉奈 | 亚洲影院久久精品| 日本伊人色综合网| 成人永久免费视频| 欧美猛男超大videosgay| 2020国产成人综合网| 亚洲色图19p| 免费观看日韩av| 99久久精品免费| 欧美一区日本一区韩国一区| 久久综合给合久久狠狠狠97色69| 亚洲色图在线看| 久久99久久久久久久久久久| 99国产精品久久久久久久久久久| 91精品国产麻豆| 综合av第一页| 国产一区二区视频在线播放| 日本精品裸体写真集在线观看| 日韩免费观看高清完整版在线观看| 成人免费一区二区三区在线观看| 日韩电影一区二区三区四区| 91天堂素人约啪| 精品久久国产97色综合| 一区二区三区美女视频| 粉嫩av一区二区三区在线播放| 欧美日韩午夜影院| 综合久久久久久| 国产99精品视频| 日韩亚洲欧美成人一区| 亚洲一二三四在线| 成人av电影在线| 日韩精品一区二区在线| 亚洲一级二级在线| a4yy欧美一区二区三区| 久久婷婷色综合| 麻豆精品视频在线观看视频| 欧美日韩国产系列| 一区二区不卡在线播放| 成+人+亚洲+综合天堂| 久久久久久久免费视频了| 奇米四色…亚洲| 欧美巨大另类极品videosbest| 亚洲日本一区二区| 91小视频免费看| 国产日产欧美一区二区三区 | 国v精品久久久网| 久久久久国产一区二区三区四区| 视频在线观看一区二区三区| 日本高清视频一区二区| 国产精品久久午夜夜伦鲁鲁| 国产成人精品午夜视频免费| 久久夜色精品一区| 国产精品一区二区无线| 精品久久久久久久人人人人传媒 | 不卡一区二区在线| 欧美激情一区二区三区| 国产suv一区二区三区88区| 精品粉嫩aⅴ一区二区三区四区| 免费观看久久久4p| 日韩视频国产视频| 美女任你摸久久| 欧美不卡一区二区三区四区| 美女视频黄 久久| 精品电影一区二区三区| 激情五月婷婷综合| 精品国产乱码久久| 国产福利精品一区| 中文字幕一区二区三区色视频| 成人午夜电影久久影院| 亚洲色图丝袜美腿| 欧美唯美清纯偷拍| 丝袜脚交一区二区| 26uuu久久综合| 成人avav影音| 亚洲国产中文字幕在线视频综合| 欧美女孩性生活视频| 日本91福利区| 久久精品亚洲国产奇米99| 国产98色在线|日韩| 亚洲精品成a人| 91精品国产乱| 国产不卡在线一区| 亚洲制服丝袜av| 欧美一区二区三区日韩| 国产精品一二三区在线| 亚洲欧美另类小说| 777xxx欧美| 丁香六月综合激情| 亚洲五月六月丁香激情| 精品久久久久久久久久久久久久久| 国产.欧美.日韩| 亚洲第一成人在线| 国产午夜久久久久|