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

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

?? physet.c

?? Intel EtherExpressTM PRO/100+ Ethernet 網(wǎng)卡在Windows2000/xp下的PCI驅(qū)動程序源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/****************************************************************************
** COPYRIGHT (C) 1994-1997 INTEL CORPORATION                               **
** DEVELOPED FOR MICROSOFT BY INTEL CORP., HILLSBORO, OREGON               **
** HTTP://WWW.INTEL.COM/                                                   **
** THIS FILE IS PART OF THE INTEL ETHEREXPRESS PRO/100B(TM) AND            **
** ETHEREXPRESS PRO/100+(TM) NDIS 5.0 MINIPORT SAMPLE DRIVER               **
****************************************************************************/

/****************************************************************************
Module Name:
    physet.c

This driver runs on the following hardware:
    - 82558 based PCI 10/100Mb ethernet adapters
    (aka Intel EtherExpress(TM) PRO Adapters)

Environment:
    Kernel Mode - Or whatever is the equivalent on WinNT

Revision History
    - JCB 8/14/97 Example Driver Created
    - Dchen 11-01-99    Modified for the new sample driver
*****************************************************************************/

#include "precomp.h"
#pragma hdrstop
#pragma warning (disable: 4514)

//-----------------------------------------------------------------------------
// Procedure:   PhyDetect
//
// Description: This routine will detect what phy we are using, set the line
//              speed, FDX or HDX, and configure the phy if necessary.
//
//              The following combinations are supported:
//              - TX or T4 PHY alone at PHY address 1
//              - T4 or TX PHY at address 1 and MII PHY at address 0
//              - 82503 alone (10Base-T mode, no full duplex support)
//              - 82503 and MII PHY (TX or T4) at address 0
//
//              The sequence / priority of detection is as follows:
//                  If there is a PHY Address override use that address.
//                  else scan based on the 'Connector' setting.
//                      Switch Connector
//                          0 = AutoScan
//                          1 = Onboard TPE only
//                          2 = MII connector only
//
//              Each of the above cases is explained below.
//
//              AutoScan means:
//                Look for link on addresses 1, 0, 2..31 (in that order).  Use the first
//                address found that has link.
//                If link is not found then use the first valid PHY found in the same scan
//                order 1,0,2..31.  NOTE: this means that NO LINK or Multi-link cases will
//                default to the onboard PHY (address 1).
//
//              Onboard TPE only:
//                Phy address is set to 1 (No Scanning).
//
//              MII connector only means:
//                Look for link on addresses 0, 2..31 (again in that order, Note address 1 is
//                NOT scanned).   Use the first address found that has link.
//                If link is not found then use the first valid Phy found in the same scan
//                order 0, 2..31.
//                In the AutoScan case above we should always find a valid PHY at address 1,
//                there is no such guarantee here, so, If NO Phy is found then the driver
//                should default to address 0 and continue to load.  Note: External
//                transceivers should be at address 0 but our early Nitro3 testing found
//                transceivers at several non-zero addresses (6,10,14).
//
//
//   NWAY
//              Additionally auto-negotiation capable (NWAY) and parallel
//              detection PHYs are supported. The flow-chart is described in
//              the 82557 software writer's manual.
//
//   NOTE:  1.  All PHY MDI registers are read in polled mode.
//          2.  The routines assume that the 82557 has been RESET and we have
//              obtained the virtual memory address of the CSR.
//          3.  PhyDetect will not RESET the PHY.
//          4.  If FORCEFDX is set, SPEED should also be set. The driver will
//              check the values for inconsistency with the detected PHY
//              technology.
//          5.  PHY 1 (the PHY on the adapter) MUST be at address 1.
//          6.  Driver ignores FORCEFDX and SPEED overrides if a 503 interface
//              is detected.
//
//
// Arguments:
//      Adapter - ptr to Adapter object instance
//
// Result:
// Returns:
//  NDIS_STATUS_SUCCESS
//  NDIS_STATUS_FAILURE
//-----------------------------------------------------------------------------

NDIS_STATUS PhyDetect(
    IN PMP_ADAPTER Adapter
    )
{
#if DBG    
    USHORT  MdiControlReg; 
    USHORT  MdiStatusReg;
#endif

    //
    // Check for a phy address over-ride of 32 which indicates a 503
    //
    if (Adapter->PhyAddress == 32)
    {
        //
        // 503 interface over-ride
        //
        DBGPRINT(MP_INFO, ("   503 serial component over-ride\n"));

        Adapter->PhyAddress = 32;

        //
        // Record the current speed and duplex.  We will be in half duplex
        // mode unless the user used the force full duplex over-ride.
        //
        Adapter->usLinkSpeed = 10;
        Adapter->usDuplexMode = (USHORT) Adapter->AiForceDpx;
        if (!Adapter->usDuplexMode)
        {
            Adapter->usDuplexMode = 1;
        }

        return(NDIS_STATUS_SUCCESS);
    }

    //
    // Check for other phy address over-rides.
    //   If the Phy Address is between 0-31 then there is an over-ride.
    //   Or the connector was set to 1
    //
    if ((Adapter->PhyAddress < 32) || (Adapter->Connector == CONNECTOR_TPE))
    {
            
        //
        // User Override nothing to do but setup Phy and leave
        //
        if ((Adapter->PhyAddress > 32) && (Adapter->Connector == CONNECTOR_TPE))
        {
            Adapter->PhyAddress = 1;  // Connector was forced

            // Isolate all other PHYs and unisolate this one
            SelectPhy(Adapter, Adapter->PhyAddress, FALSE);

        }

        DBGPRINT(MP_INFO, 
            ("   Phy address Override to address %d\n", Adapter->PhyAddress));

#if DBG
        //
        // Read the MDI control register at override address.
        //
        MdiRead(Adapter, MDI_CONTROL_REG, Adapter->PhyAddress, FALSE, &MdiControlReg);

        //
        // Read the status register at override address.
        //
        MdiRead(Adapter, MDI_STATUS_REG, Adapter->PhyAddress, FALSE, &MdiStatusReg);
        //
        // Read the status register again because of sticky bits
        //
        MdiRead(Adapter, MDI_STATUS_REG, Adapter->PhyAddress, FALSE, &MdiStatusReg);

        //
        // check if we found a valid phy
        //
        if (!((MdiControlReg == 0xffff) || ((MdiStatusReg == 0) && (MdiControlReg == 0))))
        {
            //
            // we have a valid phy1
            //
            DBGPRINT(MP_INFO, ("   Over-ride address %d has a valid Phy.\n", Adapter->PhyAddress));

            //
            // Read the status register again
            //
            MdiRead(Adapter, MDI_STATUS_REG, Adapter->PhyAddress, FALSE, &MdiStatusReg);

            //
            // If there is a valid link then use this Phy.
            //
            if (MdiStatusReg & MDI_SR_LINK_STATUS)
            {
                DBGPRINT(MP_INFO, ("   Phy at address %d has link\n", Adapter->PhyAddress));
            }

        }
        else
        {
            //
            // no PHY at over-ride address
            //
            DBGPRINT(MP_INFO, ("   Over-ride address %d has no Phy!!!!\n", Adapter->PhyAddress));
        }
#endif
        return(SetupPhy(Adapter));
    }
    else // Need to scan - No address over-ride and Connector is AUTO or MII
    {
        Adapter->CurrentScanPhyIndex = 0;
        Adapter->LinkDetectionWaitCount = 0;
        Adapter->FoundPhyAt = 0xff;
        Adapter->bLookForLink = TRUE;
        
        return(ScanAndSetupPhy(Adapter));
    
    } // End else scan


}

NDIS_STATUS ScanAndSetupPhy(
    IN PMP_ADAPTER Adapter
    )
{
    USHORT MdiControlReg = 0; 
    USHORT MdiStatusReg = 0;

    if (Adapter->bLinkDetectionWait)
    {
        goto NEGOTIATION_WAIT;
    }
           
    SCAN_PHY_START:
    
    //
    // For each PhyAddress 0 - 31
    //
    DBGPRINT(MP_INFO, ("   Index=%d, bLookForLink=%d\n", 
        Adapter->CurrentScanPhyIndex, Adapter->bLookForLink));

    if (Adapter->bLookForLink)
    {
        //
        // Phy Addresses must be tested in the order 1,0,2..31.
        //
        switch(Adapter->CurrentScanPhyIndex)
        {
            case 0:
                Adapter->PhyAddress = 1;
                break;

            case 1:
                Adapter->PhyAddress = 0;
                break;
            
            default:
                Adapter->PhyAddress = Adapter->CurrentScanPhyIndex;
                break;
        }

        //
        // Skip OnBoard for MII only case
        //
        if ((Adapter->PhyAddress == 1)&&(Adapter->Connector == CONNECTOR_MII))
        {
            goto SCAN_PHY_NEXT;    
        }

        DBGPRINT(MP_INFO, ("   Scanning Phy address %d for link\n", Adapter->PhyAddress));

        //
        // Read the MDI control register
        //
        MdiRead(Adapter, MDI_CONTROL_REG, Adapter->PhyAddress, FALSE, &MdiControlReg);

        //
        // Read the status register
        //
        MdiRead(Adapter, MDI_STATUS_REG, Adapter->PhyAddress, FALSE, &MdiStatusReg);
        MdiRead(Adapter, MDI_STATUS_REG, Adapter->PhyAddress, FALSE, &MdiStatusReg);
        // Sticky Bits
    }
    else
    {   
        //
        // Not looking for link
        //
        if (Adapter->FoundPhyAt < 32)
        {
            Adapter->PhyAddress = Adapter->FoundPhyAt;
        }
        else if (Adapter->Connector == CONNECTOR_MII) 
	{
            //
            // No valid PHYs were found last time so just default
            //
            Adapter->PhyAddress = 0;  // Default for MII
        }
        else 
        { 
            //
            // assume a 503 interface
            //
            Adapter->PhyAddress = 32;

            //
            // Record the current speed and duplex.  We will be in half duplex
            // mode unless the user used the force full duplex over-ride.
            //
            Adapter->usLinkSpeed = 10;
            Adapter->usDuplexMode = (USHORT) Adapter->AiForceDpx;
            if (!Adapter->usDuplexMode)
            {
                Adapter->usDuplexMode = 1;
            }

            return(NDIS_STATUS_SUCCESS);
        }

        DBGPRINT(MP_INFO, ("   No Links Found!!\n"));
    }

    //
    // check if we found a valid phy or on !LookForLink pass
    //
    if (!( (MdiControlReg == 0xffff) || ((MdiStatusReg == 0) && (MdiControlReg == 0))) 
        || (!Adapter->bLookForLink))
    {   
        
        //
        // Valid phy or Not looking for Link
        //

#if DBG
        if (!( (MdiControlReg == 0xffff) || ((MdiStatusReg == 0) && (MdiControlReg == 0))))

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜在线影院| 国产精品久久久久桃色tv| 欧美成人aa大片| 亚洲码国产岛国毛片在线| 免费观看一级欧美片| 色就色 综合激情| 久久久蜜桃精品| 免费精品视频在线| 欧美体内she精高潮| 国产精品丝袜久久久久久app| 免费高清在线一区| 欧美日韩国产首页| 亚洲午夜影视影院在线观看| 成人美女视频在线观看| 精品久久久久99| 免费日本视频一区| 欧美一区二区精品在线| 亚洲成人av一区二区三区| 99久久精品免费看| 中文字幕中文在线不卡住| 成人综合婷婷国产精品久久| 久久综合久久综合久久综合| 麻豆视频一区二区| 欧美一区二区三区免费大片| 日韩激情视频网站| 欧美精品乱码久久久久久| 亚洲国产精品麻豆| 欧美日韩国产色站一区二区三区| 亚洲美女淫视频| 91在线一区二区三区| 中文字幕日韩精品一区| av激情成人网| 亚洲麻豆国产自偷在线| 色综合天天综合网国产成人综合天 | 久久久久国产一区二区三区四区| 午夜电影久久久| 69堂精品视频| 久久99精品久久久久婷婷| 精品国内片67194| 国产伦精品一区二区三区免费迷 | 日韩免费电影一区| 久久国产精品免费| 久久精品无码一区二区三区| 高清shemale亚洲人妖| 中文字幕精品在线不卡| 色综合久久中文综合久久97| 亚洲永久精品大片| 欧美一卡2卡3卡4卡| 国产在线观看免费一区| 中文字幕一区av| 欧美日韩亚洲不卡| 久久99久久精品| 国产精品久久久久久久久免费桃花| 91一区在线观看| 视频一区视频二区中文| 久久久久88色偷偷免费| 91视视频在线直接观看在线看网页在线看| 亚洲精品欧美激情| 日韩一区二区三区高清免费看看| 韩国成人精品a∨在线观看| 国产精品妹子av| 欧美精品丝袜中出| 成人永久免费视频| 首页综合国产亚洲丝袜| 国产欧美日韩亚州综合| 欧美视频一区二区三区四区| 国产在线视视频有精品| 伊人色综合久久天天| 日韩精品一区二区三区四区视频| 从欧美一区二区三区| 午夜伦欧美伦电影理论片| 国产婷婷色一区二区三区四区| 在线亚洲+欧美+日本专区| 韩国理伦片一区二区三区在线播放| 中文字幕一区二区三区色视频| 91精品国产综合久久福利软件| 成人免费毛片a| 免费欧美日韩国产三级电影| 亚洲免费在线视频一区 二区| 精品福利一二区| 欧美日本国产一区| 91亚洲大成网污www| 激情都市一区二区| 五月天一区二区三区| **欧美大码日韩| 国产拍揄自揄精品视频麻豆| 欧美一区二区三区免费大片| 在线观看亚洲a| gogogo免费视频观看亚洲一| 国产一区二区三区蝌蚪| 日韩黄色小视频| 亚洲国产三级在线| 亚洲人吸女人奶水| 国产精品久久久久7777按摩| 久久亚洲欧美国产精品乐播| 欧美一级夜夜爽| 欧美乱妇一区二区三区不卡视频| 在线观看成人小视频| aaa欧美日韩| 99久久精品情趣| 不卡av免费在线观看| 国产成人综合亚洲网站| 国内久久精品视频| 美女性感视频久久| 麻豆一区二区99久久久久| 日韩福利视频导航| 视频一区二区三区在线| 五月婷婷激情综合网| 日韩有码一区二区三区| 亚洲综合男人的天堂| 一区二区三区在线观看国产| 亚洲免费观看高清| 亚洲精选视频在线| 亚洲一区二区三区四区不卡| 亚洲一二三四久久| 亚洲高清免费视频| 首页亚洲欧美制服丝腿| 免费在线成人网| 国产在线视频不卡二| 狠狠色丁香婷婷综合久久片| 国产综合一区二区| 国产69精品久久久久毛片| 成人激情小说网站| 97久久超碰国产精品电影| 91精品1区2区| 欧美美女黄视频| 久久久久国产精品人| 国产精品不卡一区| 亚洲v中文字幕| 另类综合日韩欧美亚洲| 国产99精品国产| 99r国产精品| 精品视频1区2区| www激情久久| 国产精品美女久久久久久久久| 1区2区3区精品视频| 亚洲午夜久久久久久久久久久| 日韩国产一区二| 国产精品一二三四五| 色综合久久综合中文综合网| 91精品欧美久久久久久动漫| 久久婷婷一区二区三区| 亚洲视频资源在线| 日日夜夜精品视频天天综合网| 国内精品免费**视频| 99riav一区二区三区| 欧美一区二区三区婷婷月色| 欧美国产日韩精品免费观看| 亚洲午夜在线观看视频在线| 精品一区二区三区在线播放 | 日韩一级二级三级精品视频| 久久久久久麻豆| 亚洲一区视频在线观看视频| 激情六月婷婷综合| 91国偷自产一区二区三区观看| 日韩一级黄色大片| 亚洲乱码中文字幕综合| 国产在线精品一区在线观看麻豆| 95精品视频在线| 日韩欧美中文字幕一区| 亚洲欧洲综合另类在线| 久久不见久久见中文字幕免费| 色综合天天综合狠狠| xfplay精品久久| 日韩精品三区四区| 91丝袜高跟美女视频| 久久女同互慰一区二区三区| 日韩精品一区第一页| 91女人视频在线观看| 久久久五月婷婷| 老汉av免费一区二区三区| 91成人看片片| 国产精品灌醉下药二区| 国产一区二区成人久久免费影院| 8v天堂国产在线一区二区| 亚洲人妖av一区二区| 东方aⅴ免费观看久久av| 日韩欧美一级在线播放| 日韩福利电影在线| 欧美视频在线观看一区二区| 亚洲欧美日韩综合aⅴ视频| 国产成人午夜99999| 久久―日本道色综合久久| 免费在线看一区| 欧美一卡在线观看| 日本伊人精品一区二区三区观看方式| 色综合久久中文字幕综合网| 一色桃子久久精品亚洲| caoporm超碰国产精品| 国产日韩亚洲欧美综合| 国产激情视频一区二区三区欧美 | 亚洲线精品一区二区三区| 91在线你懂得| 中文字幕一区二区三中文字幕| 国产99久久久久久免费看农村| 国产视频911| 风间由美一区二区av101| 国产欧美一区二区在线观看| 国产成人综合亚洲91猫咪| 国产欧美日韩在线看|