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

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

?? routines.c

?? plx9054的WDM驅(qū)動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************************
** 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:
    routines.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
*****************************************************************************/

//#pragma warning (disable: 4514 4706)

//-----------------------------------------------------------------------------
// Procedure:   MdiWrite
//
// Description: This routine will write a value to the specified MII register
//              of an external MDI compliant device (e.g. PHY 100).  The
//              command will execute in polled mode.
//
// Arguments:
//      Adapter - ptr to Adapter object instance
//      RegAddress - The MII register that we are writing to
//      PhyAddress - The MDI address of the Phy component.
//      DataValue - The value that we are writing to the MII register.
//
// Returns:
//      NOTHING
//-----------------------------------------------------------------------------

#include "precomp.h"

#if defined(EVENT_TRACING)
#include "routines.tmh"
#endif

//-----------------------------------------------------------------------------
// Procedure:   WaitScb
//
// Description: This routine checks to see if the D100 has accepted a command.
//              It does so by checking the command field in the SCB, which will
//              be zeroed by the D100 upon accepting a command.  The loop waits
//              for up to 600 milliseconds for command acceptance.
//
// Arguments:
//      Adapter - ptr to Adapter object instance
//
// Returns:
//      TRUE if the SCB cleared within 600 milliseconds.
//      FALSE if it didn't clear within 600 milliseconds
//-----------------------------------------------------------------------------
__inline BOOLEAN 
WaitScb(
    IN PFDO_DATA FdoData
    )
{
    BOOLEAN     bResult;
    
    HW_CSR volatile *pCSRAddress = FdoData->CSRAddress;

    MP_STALL_AND_WAIT(pCSRAddress->ScbCommandLow == 0, 600, bResult);
    if(!bResult)
    {
        DebugPrint(ERROR, DBG_HW_ACCESS, "WaitScb failed, ScbCommandLow=%x\n", pCSRAddress->ScbCommandLow);
        if(pCSRAddress->ScbCommandLow != 0x80)
        {
            //ASSERT(FALSE); 
        }
        MP_SET_HARDWARE_ERROR(FdoData);
    }

    return bResult;
}


VOID 
MdiWrite(
    IN PFDO_DATA Adapter,
    IN ULONG RegAddress,
    IN ULONG PhyAddress,
    IN USHORT DataValue
    )
{
    BOOLEAN bResult;

    // Issue the write command to the MDI control register.
    Adapter->CSRAddress->MDIControl = (((ULONG) DataValue) |
                                          (RegAddress << 16) |
                                          (PhyAddress << 21) |
                                          (MDI_WRITE << 26));

    // wait 20usec before checking status
    KeStallExecutionProcessor (20);

    // wait 2 seconds for the mdi write to complete
    MP_STALL_AND_WAIT(Adapter->CSRAddress->MDIControl & MDI_PHY_READY, 2000, bResult);
    
    if (!bResult)
    {
        MP_SET_HARDWARE_ERROR(Adapter);
    }
}


//-----------------------------------------------------------------------------
// Procedure:   MdiRead
//
// Description: This routine will read a value from the specified MII register
//              of an external MDI compliant device (e.g. PHY 100), and return
//              it to the calling routine.  The command will execute in polled
//              mode.
//
// Arguments:
//      Adapter - ptr to Adapter object instance
//      RegAddress - The MII register that we are reading from
//      PhyAddress - The MDI address of the Phy component.
//      Recoverable - Whether the hardware error(if any)if recoverable or not
//
// Results:
//      DataValue - The value that we read from the MII register.
//
// Returns:
//     None
//-----------------------------------------------------------------------------
BOOLEAN 
MdiRead(
    IN PFDO_DATA Adapter,
    IN ULONG RegAddress,
    IN ULONG PhyAddress,
    IN BOOLEAN  Recoverable,
    IN OUT PUSHORT DataValue
    )
{
    BOOLEAN bResult;
               
    // Issue the read command to the MDI control register.
    Adapter->CSRAddress->MDIControl = ((RegAddress << 16) |
                                          (PhyAddress << 21) |
                                          (MDI_READ << 26));

    // wait 20usec before checking status
    KeStallExecutionProcessor (20);

    // Wait up to 2 seconds for the mdi read to complete
    MP_STALL_AND_WAIT(Adapter->CSRAddress->MDIControl & MDI_PHY_READY, 2000, bResult);
    if (!bResult)
    {
        if (!Recoverable)
        {
            MP_SET_NON_RECOVER_ERROR(Adapter);
        }
        MP_SET_HARDWARE_ERROR(Adapter);
        return bResult;
    }

    *DataValue = (USHORT) Adapter->CSRAddress->MDIControl;
    return bResult;

}


//-----------------------------------------------------------------------------
// Procedure:   DumpStatsCounters
//
// Description: This routine will dump and reset the 82557's internal
//              Statistics counters.  The current stats dump values will be
//              added to the "Adapter's" overall statistics.
// Arguments:
//      Adapter - ptr to Adapter object instance
//
// Returns:
//      NOTHING
//-----------------------------------------------------------------------------
VOID 
DumpStatsCounters(
    IN PFDO_DATA Adapter
    )
{
    BOOLEAN bResult;
    KIRQL oldIrql;
    
    // The query is for a driver statistic, so we need to first
    // update our statistics in software.

    // clear the dump counters complete DWORD
    Adapter->StatsCounters->CommandComplete = 0;

    KeAcquireSpinLock(&Adapter->Lock, &oldIrql);
    
    // Dump and reset the hardware's statistic counters
    D100IssueScbCommand(Adapter, SCB_CUC_DUMP_RST_STAT, TRUE);

    // Restore the resume transmit software flag.  After the dump counters
    // command is issued, we should do a WaitSCB before issuing the next send.
    Adapter->ResumeWait = TRUE;
    
    KeReleaseSpinLock(&Adapter->Lock, oldIrql);

    // wait up to 2 seconds for the dump/reset to complete
    MP_STALL_AND_WAIT(Adapter->StatsCounters->CommandComplete == 0xA007, 2000, bResult);
    if (!bResult)
    {
        MP_SET_HARDWARE_ERROR(Adapter);
        return;
    }

    // Output the debug counters to the debug terminal.
    DebugPrint(LOUD, DBG_IOCTLS, "Good Transmits %d\n", Adapter->StatsCounters->XmtGoodFrames);
    DebugPrint(LOUD, DBG_IOCTLS, "Good Receives %d\n", Adapter->StatsCounters->RcvGoodFrames);
    DebugPrint(LOUD, DBG_IOCTLS, "Max Collisions %d\n", Adapter->StatsCounters->XmtMaxCollisions);
    DebugPrint(LOUD, DBG_IOCTLS, "Late Collisions %d\n", Adapter->StatsCounters->XmtLateCollisions);
    DebugPrint(LOUD, DBG_IOCTLS, "Transmit Underruns %d\n", Adapter->StatsCounters->XmtUnderruns);
    DebugPrint(LOUD, DBG_IOCTLS, "Transmit Lost CRS %d\n", Adapter->StatsCounters->XmtLostCRS);
    DebugPrint(LOUD, DBG_IOCTLS, "Transmits Deferred %d\n", Adapter->StatsCounters->XmtDeferred);
    DebugPrint(LOUD, DBG_IOCTLS, "One Collision xmits %d\n", Adapter->StatsCounters->XmtSingleCollision);
    DebugPrint(LOUD, DBG_IOCTLS, "Mult Collision xmits %d\n", Adapter->StatsCounters->XmtMultCollisions);
    DebugPrint(LOUD, DBG_IOCTLS, "Total Collisions %d\n", Adapter->StatsCounters->XmtTotalCollisions);

    DebugPrint(LOUD, DBG_IOCTLS, "Receive CRC errors %d\n", Adapter->StatsCounters->RcvCrcErrors);
    DebugPrint(LOUD, DBG_IOCTLS, "Receive Alignment errors %d\n", Adapter->StatsCounters->RcvAlignmentErrors);
    DebugPrint(LOUD, DBG_IOCTLS, "Receive no resources %d\n", Adapter->StatsCounters->RcvResourceErrors);
    DebugPrint(LOUD, DBG_IOCTLS, "Receive overrun errors %d\n", Adapter->StatsCounters->RcvOverrunErrors);
    DebugPrint(LOUD, DBG_IOCTLS, "Receive CDT errors %d\n", Adapter->StatsCounters->RcvCdtErrors);
    DebugPrint(LOUD, DBG_IOCTLS, "Receive short frames %d\n", Adapter->StatsCounters->RcvShortFrames);

    // update packet counts
    Adapter->GoodTransmits += Adapter->StatsCounters->XmtGoodFrames;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美96一区二区免费视频| 精品在线免费视频| 亚洲国产精品人人做人人爽| 日本午夜一区二区| 岛国av在线一区| 欧美日韩一级视频| 久久久久久99久久久精品网站| 国产精品国产成人国产三级| 丝袜美腿成人在线| aaa亚洲精品一二三区| 日韩视频一区在线观看| 亚洲欧洲三级电影| 蜜臀av性久久久久av蜜臀妖精| caoporen国产精品视频| 日韩美女视频一区二区在线观看| 国产精品不卡一区二区三区| 日韩二区在线观看| 日本丰满少妇一区二区三区| 亚洲精品一区二区三区在线观看 | 欧美视频在线一区二区三区 | 欧美日韩一卡二卡| 中文字幕五月欧美| 国产一区二区三区电影在线观看| 在线亚洲精品福利网址导航| 亚洲国产高清不卡| 精品一区二区三区香蕉蜜桃| 欧美日韩午夜在线| 亚洲国产成人高清精品| 99这里都是精品| 国产日韩欧美精品一区| 免费观看成人鲁鲁鲁鲁鲁视频| 91亚洲精品久久久蜜桃网站| 国产女主播一区| 国产精品亚洲午夜一区二区三区| 欧美不卡一区二区三区| 欧美日韩大陆一区二区| 亚洲精品欧美综合四区| 99精品视频一区二区三区| 亚洲国产成人午夜在线一区| 国产成人精品亚洲777人妖| 久久久综合视频| 国产一区二区三区国产| 久久一留热品黄| 国模一区二区三区白浆| 精品久久久网站| 国产精品夜夜嗨| 日本一区免费视频| 国产91富婆露脸刺激对白| 中文字幕第一区第二区| 懂色av中文一区二区三区| 国产欧美精品一区| 91亚洲国产成人精品一区二三| 亚洲欧美激情一区二区| 91国产福利在线| 香蕉久久夜色精品国产使用方法| 欧美丰满少妇xxxxx高潮对白| 亚洲成年人影院| 欧美日本视频在线| 麻豆成人久久精品二区三区红 | 2021国产精品久久精品| 精品午夜一区二区三区在线观看| 日韩精品中文字幕在线一区| 国产精品77777| 国产精品电影院| 一本久久精品一区二区| 亚洲va欧美va人人爽午夜| 91精品视频网| 国产成+人+日韩+欧美+亚洲| 亚洲视频综合在线| 欧美日韩一区二区不卡| 国产一区二区三区在线观看免费视频| 亚洲精品一区二区在线观看| voyeur盗摄精品| 天天色综合成人网| 日本一区二区高清| 91国偷自产一区二区三区观看| 日韩av电影一区| 国产日韩高清在线| 欧美日韩精品免费观看视频| 久久成人麻豆午夜电影| 国产精品久久777777| 欧美精品第1页| 成人免费黄色在线| 日韩高清不卡在线| 亚洲图片激情小说| 日韩免费高清视频| 日本精品免费观看高清观看| 麻豆精品国产传媒mv男同| 亚洲人成小说网站色在线| 欧美日韩成人在线一区| 99精品视频免费在线观看| 日产欧产美韩系列久久99| 国产精品美女久久久久aⅴ| 欧美男女性生活在线直播观看| 国产一区二区三区四| 香蕉久久一区二区不卡无毒影院| 国产目拍亚洲精品99久久精品| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产麻豆一精品一av一免费| 亚洲国产精品麻豆| 中文字幕一区二区三区四区不卡| 日韩亚洲欧美高清| 欧美在线观看视频一区二区三区 | 粉嫩蜜臀av国产精品网站| 日韩国产在线一| 日韩理论片网站| 日本一区二区视频在线| 欧美一区二区大片| 欧美网站大全在线观看| 不卡高清视频专区| 国产一区二区在线免费观看| 日本不卡123| 亚洲图片有声小说| 亚洲欧美日韩一区二区 | 99久久精品免费看| 激情综合色播五月| 免费的国产精品| 五月天久久比比资源色| 亚洲视频在线观看三级| 国产婷婷色一区二区三区四区| 精品国产sm最大网站| 91精品国产高清一区二区三区 | 国产真实乱对白精彩久久| 日本aⅴ精品一区二区三区 | 中文成人综合网| 久久久精品人体av艺术| 精品久久久久99| 精品国产污污免费网站入口| 日韩一区二区中文字幕| 日韩一卡二卡三卡国产欧美| 欧美性生交片4| 欧美亚洲国产一卡| 欧美日韩一区二区在线观看 | 波多野结衣精品在线| 成人三级在线视频| 成人午夜av影视| 成人激情免费电影网址| 丁香激情综合五月| 丁香啪啪综合成人亚洲小说 | 欧美mv日韩mv| 欧美电视剧免费观看| 精品国精品国产| 久久久久久久久久久久久女国产乱 | 国产一区中文字幕| 国产一区二区美女诱惑| 国产麻豆精品视频| 成人午夜av电影| 色综合久久中文字幕| 精品视频在线视频| 日韩美女在线视频 | 色丁香久综合在线久综合在线观看| 99视频一区二区三区| caoporen国产精品视频| 欧美性大战久久久久久久| 欧美电影影音先锋| 精品国产成人系列| 亚洲日本va午夜在线电影| 亚洲妇女屁股眼交7| 美女www一区二区| 国产九色精品成人porny| 成人h精品动漫一区二区三区| 色88888久久久久久影院按摩| 在线播放国产精品二区一二区四区| 欧美一级高清片在线观看| 中文字幕欧美日韩一区| 亚洲国产精品久久不卡毛片| 麻豆久久一区二区| 成人福利在线看| 欧美日韩成人一区二区| 欧美xxxxx裸体时装秀| 欧美日韩在线综合| 久久久亚洲高清| 亚洲欧美一区二区不卡| 蜜桃视频第一区免费观看| 成人av片在线观看| 91精品国产麻豆国产自产在线 | 亚洲欧美国产三级| 日韩电影免费在线看| 国产成人亚洲综合色影视| 欧美三级中文字幕| 国产欧美va欧美不卡在线| 午夜视黄欧洲亚洲| 成人动漫中文字幕| 日韩欧美综合一区| 亚洲青青青在线视频| 韩国女主播成人在线| 欧美午夜精品久久久久久超碰| www激情久久| 亚洲成av人片www| 99久久精品一区| 国产性色一区二区| 日韩精彩视频在线观看| 91啦中文在线观看| 国产情人综合久久777777| 蜜桃免费网站一区二区三区| 色呦呦一区二区三区| 日本一区二区电影| 国产精品一区二区无线| 日韩一二三区不卡| 天天色图综合网|