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

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

?? routines.c

?? plx9054的WDM驅動程序
?? 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产视频亚洲色图| 亚洲国产精品久久人人爱| 亚洲自拍另类综合| 韩国三级中文字幕hd久久精品| 99视频超级精品| 精品av久久707| 亚洲bt欧美bt精品777| av爱爱亚洲一区| 欧美精品一区二区三区蜜桃视频| 亚洲小少妇裸体bbw| 粉嫩av一区二区三区| 精品国产乱码久久久久久图片 | 亚洲福利电影网| 成人精品在线视频观看| 精品久久久久久久久久久久久久久 | 无码av免费一区二区三区试看 | 亚洲男女毛片无遮挡| 黑人巨大精品欧美一区| 91精品国产综合久久精品麻豆| 国产精品美女一区二区在线观看| 久久激情综合网| 欧美精品在线视频| 午夜精品久久久久久久久| 色哦色哦哦色天天综合| 亚洲日本中文字幕区| jizz一区二区| 日韩一区有码在线| 不卡一区二区在线| 亚洲国产精品精华液ab| 国产mv日韩mv欧美| 国产精品无遮挡| 成人免费高清在线| 国产精品欧美久久久久一区二区 | 亚洲成人第一页| 欧美色手机在线观看| 一区2区3区在线看| 色婷婷综合久色| 亚洲综合av网| 欧美日韩一区视频| 秋霞午夜鲁丝一区二区老狼| 日韩午夜在线播放| 极品少妇一区二区三区精品视频| 精品成人一区二区三区四区| 国产二区国产一区在线观看| 久久久国产一区二区三区四区小说| 狠狠色丁香久久婷婷综合_中| 久久天堂av综合合色蜜桃网| 国产·精品毛片| 亚洲欧美日韩中文播放| 在线精品视频免费播放| 午夜精品久久久| 欧美成人精品1314www| 国产精品18久久久久久久久| 欧美激情一区二区三区| 色综合久久久久综合体| 热久久免费视频| 国产日韩欧美综合一区| 色悠悠久久综合| 日韩一区欧美二区| 国产亚洲污的网站| 99久久国产综合色|国产精品| 亚洲自拍偷拍综合| 精品国产凹凸成av人网站| a级高清视频欧美日韩| 亚洲愉拍自拍另类高清精品| 日韩欧美另类在线| 99re成人精品视频| 蜜桃视频免费观看一区| 国产午夜精品久久久久久免费视 | 国产精品夜夜嗨| 亚洲三级久久久| 日韩欧美123| 成人av在线看| 青青草伊人久久| 综合激情成人伊人| 日韩精品一区二区三区四区视频| 99久久er热在这里只有精品15 | 国产综合色视频| 亚洲综合丝袜美腿| 国产日产精品一区| 欧美日韩mp4| 成人av电影免费观看| 免费成人在线影院| 一区av在线播放| 国产精品久久久久久久午夜片| 欧美疯狂做受xxxx富婆| 成人a级免费电影| 九一九一国产精品| 午夜影视日本亚洲欧洲精品| 日本一区二区三区久久久久久久久不 | 久久久久久久综合| 91在线播放网址| 国产综合成人久久大片91| 三级不卡在线观看| 一区二区三区在线不卡| 国产欧美精品一区二区三区四区| 欧美亚洲综合网| 波多野结衣中文一区| 激情欧美一区二区| 日韩**一区毛片| 亚洲大片一区二区三区| 亚洲精品欧美激情| 中文字幕在线一区| 久久九九99视频| 日韩精品一区二区在线| 在线成人av网站| 欧美视频中文字幕| 91黄色免费网站| 在线精品视频一区二区| 色猫猫国产区一区二在线视频| 国产91丝袜在线观看| 国产精品综合一区二区| 精品一区精品二区高清| 久久99久久精品| 麻豆国产精品777777在线| 免费成人在线影院| 精品一区二区三区久久久| 欧美aaa在线| 九九国产精品视频| 国产精品18久久久久久vr| 国产91高潮流白浆在线麻豆 | 91麻豆免费视频| 97精品久久久久中文字幕| 99热国产精品| 一本久久精品一区二区| 色噜噜狠狠成人网p站| 欧美日本乱大交xxxxx| 日韩一区二区在线观看视频| 日韩免费一区二区三区在线播放| 26uuu色噜噜精品一区| 国产欧美一区二区精品婷婷 | 色综合久久88色综合天天免费| 99久久er热在这里只有精品66| 欧美性猛片xxxx免费看久爱| 91精品国产福利在线观看| 精品成人a区在线观看| 中文字幕一区二区三区四区不卡| 亚洲激情在线播放| 日韩国产一区二| 国产麻豆精品在线| 99热在这里有精品免费| 欧美美女一区二区三区| 精品国产乱码久久| 亚洲另类色综合网站| 日韩和欧美的一区| 成人激情文学综合网| 欧美日韩国产一级| 久久精品欧美一区二区三区不卡 | 91免费观看视频| 欧美绝品在线观看成人午夜影视| 日韩一区二区在线观看视频| 国产精品欧美极品| 五月婷婷久久综合| 国产成人精品三级| 欧美人动与zoxxxx乱| 国产日韩欧美激情| 亚洲成人中文在线| 成人免费的视频| 欧美一区二区三区爱爱| 亚洲免费观看视频| 国产精品综合一区二区三区| 在线观看国产精品网站| 久久久国产一区二区三区四区小说 | 成人午夜激情视频| 欧美日韩精品欧美日韩精品一| 日韩欧美一二三区| 亚洲精品国产一区二区三区四区在线| 日韩精品欧美精品| 久久精品一区二区三区av| 亚洲成a人在线观看| 成人美女在线观看| 精品国产乱码91久久久久久网站| 亚洲一区二区三区在线| 成人小视频在线观看| 精品乱人伦小说| 日本不卡在线视频| 欧美视频在线一区二区三区| 国产精品二区一区二区aⅴ污介绍| 精品一区二区三区在线播放 | 成人的网站免费观看| 精品久久久久一区二区国产| 丝袜诱惑亚洲看片| 欧美少妇性性性| 亚洲激情成人在线| 91一区二区在线| 国产精品国模大尺度视频| 国产精品一区二区无线| 精品国产乱码久久久久久影片| 青青草国产成人99久久| 欧美乱妇20p| 图片区小说区国产精品视频| 欧美性做爰猛烈叫床潮| 亚洲精品美腿丝袜| 色婷婷综合久久| 一区二区三区**美女毛片| 91在线视频网址| 一区二区三区在线观看视频| 色哟哟精品一区| 亚洲一区二区欧美日韩 | 午夜欧美在线一二页|