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

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

?? routines.c

?? plx9054的WDM驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
    Adapter->GoodReceives += Adapter->StatsCounters->RcvGoodFrames;

    // update transmit error counts
    Adapter->TxAbortExcessCollisions += Adapter->StatsCounters->XmtMaxCollisions;
    Adapter->TxLateCollisions += Adapter->StatsCounters->XmtLateCollisions;
    Adapter->TxDmaUnderrun += Adapter->StatsCounters->XmtUnderruns;
    Adapter->TxLostCRS += Adapter->StatsCounters->XmtLostCRS;
    Adapter->TxOKButDeferred += Adapter->StatsCounters->XmtDeferred;
    Adapter->OneRetry += Adapter->StatsCounters->XmtSingleCollision;
    Adapter->MoreThanOneRetry += Adapter->StatsCounters->XmtMultCollisions;
    Adapter->TotalRetries += Adapter->StatsCounters->XmtTotalCollisions;

    // update receive error counts
    Adapter->RcvCrcErrors += Adapter->StatsCounters->RcvCrcErrors;
    Adapter->RcvAlignmentErrors += Adapter->StatsCounters->RcvAlignmentErrors;
    Adapter->RcvResourceErrors += Adapter->StatsCounters->RcvResourceErrors;
    Adapter->RcvDmaOverrunErrors += Adapter->StatsCounters->RcvOverrunErrors;
    Adapter->RcvCdtFrames += Adapter->StatsCounters->RcvCdtErrors;
    Adapter->RcvRuntErrors += Adapter->StatsCounters->RcvShortFrames;
}


//-----------------------------------------------------------------------------
// Procedure:   NICIssueSelectiveReset
//
// Description: This routine will issue a selective reset, forcing the adapter
//              the CU and RU back into their idle states.  The receive unit
//              will then be re-enabled if it was previously enabled, because
//              an RNR interrupt will be generated when we abort the RU.
//
// Arguments:
//      Adapter - ptr to Adapter object instance
//
// Returns:
//      NOTHING
//-----------------------------------------------------------------------------

VOID 
NICIssueSelectiveReset(
    PFDO_DATA Adapter
    )
{
    NTSTATUS     status;
    BOOLEAN         bResult;
    
    // Wait for the SCB to clear before we check the CU status.
    if (!MP_TEST_FLAG(Adapter, fMP_ADAPTER_HARDWARE_ERROR))
    {
        WaitScb(Adapter);
    }

    // If we have issued any transmits, then the CU will either be active, or
    // in the suspended state.  If the CU is active, then we wait for it to be
    // suspended.  If the the CU is suspended, then we need to put the CU back
    // into the idle state by issuing a selective reset.
    if (Adapter->TransmitIdle == FALSE)
    {
        // Wait up to 2 seconds for suspended state
        MP_STALL_AND_WAIT((Adapter->CSRAddress->ScbStatus & SCB_CUS_MASK) != SCB_CUS_ACTIVE, 2000, bResult) 
        if (!bResult)
        {
            MP_SET_HARDWARE_ERROR(Adapter);
        }

        // Check the current status of the receive unit
        if ((Adapter->CSRAddress->ScbStatus & SCB_RUS_MASK) != SCB_RUS_IDLE)
        {
            // Issue an RU abort.  Since an interrupt will be issued, the
            // RU will be started by the DPC.
            status = D100IssueScbCommand(Adapter, SCB_RUC_ABORT, TRUE);
        }

        // Issue a selective reset.
        DebugPrint(TRACE, DBG_HW_ACCESS, "CU suspended. ScbStatus=%04x Issue selective reset\n", Adapter->CSRAddress->ScbStatus);
        Adapter->CSRAddress->Port = PORT_SELECTIVE_RESET;

        // Wait after a port sel-reset command
        KeStallExecutionProcessor (NIC_DELAY_POST_RESET);

        // wait up to 2 ms for port command to complete                                                           
        MP_STALL_AND_WAIT(Adapter->CSRAddress->Port == 0, 2, bResult) 
        if (!bResult)
        {
            MP_SET_HARDWARE_ERROR(Adapter);
        }

        // disable interrupts after issuing reset, because the int
        // line gets raised when reset completes.
        NICDisableInterrupt(Adapter);

        // Restore the transmit software flags.
        Adapter->TransmitIdle = TRUE;
        Adapter->ResumeWait = TRUE;
    }
}

VOID 
NICIssueFullReset(
    PFDO_DATA Adapter
    )
{
    BOOLEAN     bResult;

    NICIssueSelectiveReset(Adapter);

    Adapter->CSRAddress->Port = PORT_SOFTWARE_RESET;

    // wait up to 2 ms for port command to complete                                                           
    MP_STALL_AND_WAIT(Adapter->CSRAddress->Port == 0, 2, bResult);
    if (!bResult)
    {
        MP_SET_HARDWARE_ERROR(Adapter);
        return;
    }

    NICDisableInterrupt(Adapter);
}


//-----------------------------------------------------------------------------
// Procedure:   D100SubmitCommandBlockAndWait
//
// Description: This routine will submit a command block to be executed, and
//              then it will wait for that command block to be executed.  Since
//              board ints will be disabled, we will ack the interrupt in
//              this routine.
//
// Arguments:
//      Adapter - ptr to Adapter object instance
//
// Returns:
//  NDIS_STATUS_SUCCESS
//  STATUS_DEVICE_DATA_ERROR
//-----------------------------------------------------------------------------

NTSTATUS 
D100SubmitCommandBlockAndWait(
    IN PFDO_DATA Adapter
    )
{
    NTSTATUS     status;
    BOOLEAN         bResult;

    // Points to the Non Tx Command Block.
    volatile PNON_TRANSMIT_CB CommandBlock = Adapter->NonTxCmdBlock;

    // Set the Command Block to be the last command block
    CommandBlock->NonTxCb.Config.ConfigCBHeader.CbCommand |= CB_EL_BIT;

    // Clear the status of the command block
    CommandBlock->NonTxCb.Config.ConfigCBHeader.CbStatus = 0;

#if DBG
    // Don't try to start the CU if the command unit is active.
    if ((Adapter->CSRAddress->ScbStatus & SCB_CUS_MASK) == SCB_CUS_ACTIVE)
    {
        DebugPrint(ERROR, DBG_HW_ACCESS, "Scb %p ScbStatus %04x\n", Adapter->CSRAddress, Adapter->CSRAddress->ScbStatus);
        ASSERT(FALSE);
        MP_SET_HARDWARE_ERROR(Adapter);
        return(STATUS_DEVICE_DATA_ERROR);
    }
#endif

    // Start the command unit.
    D100IssueScbCommand(Adapter, SCB_CUC_START, FALSE);

    // Wait for the SCB to clear, indicating the completion of the command.
    if (!WaitScb(Adapter))
    {
        return(STATUS_DEVICE_DATA_ERROR);
    }

    // Wait for some status, timeout value 3 secs
    MP_STALL_AND_WAIT(CommandBlock->NonTxCb.Config.ConfigCBHeader.CbStatus & CB_STATUS_COMPLETE, 3000, bResult);
    if (!bResult)
    {
        MP_SET_HARDWARE_ERROR(Adapter);
        return(STATUS_DEVICE_DATA_ERROR);
    }

    // Ack any interrupts
    if (Adapter->CSRAddress->ScbStatus & SCB_ACK_MASK)
    {
        // Ack all pending interrupts now
        Adapter->CSRAddress->ScbStatus &= SCB_ACK_MASK;
    }

    // Check the status of the command, and if the command failed return FALSE,
    // otherwise return TRUE.
    if (!(CommandBlock->NonTxCb.Config.ConfigCBHeader.CbStatus & CB_STATUS_OK))
    {
        DebugPrint(ERROR, DBG_HW_ACCESS, "Command failed\n");
        MP_SET_HARDWARE_ERROR(Adapter);
        status = STATUS_DEVICE_DATA_ERROR;
    }
    else
        status = STATUS_SUCCESS;

    return(status);
}

//-----------------------------------------------------------------------------
// Procedure: GetConnectionStatus
//
// Description: This function returns the connection status that is
//              a required indication for PC 97 specification from MS
//              the value we are looking for is if there is link to the
//              wire or not.
//
// Arguments: IN Adapter structure pointer
//
// Returns:   NdisMediaStateConnected
//            NdisMediaStateDisconnected
//-----------------------------------------------------------------------------
MEDIA_STATE 
GetMediaState(
    IN PFDO_DATA Adapter
    )
{
    USHORT  MdiStatusReg = 0;
    BOOLEAN bResult1;
    BOOLEAN bResult2;
     
    
    // Read the status register at phy 1
    bResult1 = MdiRead(Adapter, MDI_STATUS_REG, Adapter->PhyAddress, TRUE, &MdiStatusReg);
    bResult2 = MdiRead(Adapter, MDI_STATUS_REG, Adapter->PhyAddress, TRUE, &MdiStatusReg);
    
    // if there is hardware failure, or let the state remains the same
    if (!bResult1 || !bResult2)
    {
        return Adapter->MediaState;
    }
    if (MdiStatusReg & MDI_SR_LINK_STATUS)
        return(Connected);
    else
        return(Disconnected);

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黑人巨大精品欧美一区| 欧美日韩国产首页在线观看| 日本精品一区二区三区高清| 日韩一级片在线观看| 亚洲国产高清在线| 蜜臀av一区二区| 在线精品亚洲一区二区不卡| 久久品道一品道久久精品| 亚洲一卡二卡三卡四卡| 成人一级片在线观看| 欧美一区二区播放| 亚洲精品乱码久久久久久黑人 | 亚洲一区在线观看免费| 国产精品69毛片高清亚洲| 日韩欧美在线一区二区三区| 亚洲综合免费观看高清完整版 | 国产精品网站在线播放| 精品系列免费在线观看| 69堂亚洲精品首页| 亚洲午夜精品在线| 色噜噜狠狠成人中文综合| 国产欧美视频一区二区三区| 九九**精品视频免费播放| 欧美三级蜜桃2在线观看| 亚洲精品中文字幕乱码三区| 成人精品免费视频| 久久久99精品免费观看| 久久精品99国产精品| 欧美精品成人一区二区三区四区| 亚洲精品大片www| 色悠久久久久综合欧美99| 中文字幕在线一区| av男人天堂一区| 日韩毛片视频在线看| 99v久久综合狠狠综合久久| 中文字幕不卡三区| 成人听书哪个软件好| 国产欧美日韩在线视频| 国产成人精品亚洲日本在线桃色| 欧美激情中文不卡| 国产伦精品一区二区三区免费| 久久久久久电影| 国产成人综合在线| 欧美国产精品一区二区| av中文字幕在线不卡| 亚洲欧洲制服丝袜| 欧美日本韩国一区| 久久国产精品露脸对白| 国产午夜精品一区二区三区视频 | 亚洲免费在线播放| 欧洲亚洲国产日韩| 日本最新不卡在线| 精品国产乱码久久久久久老虎| 日本系列欧美系列| 久久久99久久| 在线视频综合导航| 午夜精品一区二区三区电影天堂| 欧美精三区欧美精三区| 激情丁香综合五月| 日韩毛片高清在线播放| 欧美精品久久一区二区三区| 老司机精品视频导航| 国产精品免费aⅴ片在线观看| 色综合久久久久久久久久久| 视频一区免费在线观看| 久久女同性恋中文字幕| 99免费精品视频| 日韩中文字幕一区二区三区| 久久一二三国产| 在线免费观看日本欧美| 国内一区二区视频| 亚洲另类在线一区| 欧美成人一区二区三区| 北条麻妃一区二区三区| 免费成人在线观看| 国产精品国产三级国产aⅴ入口 | 日韩精品一区在线观看| hitomi一区二区三区精品| 五月婷婷欧美视频| 中文字幕va一区二区三区| 欧美精品1区2区3区| 丁香婷婷综合五月| 午夜国产精品一区| 亚洲国产经典视频| 欧美成人激情免费网| 不卡的av网站| 六月丁香综合在线视频| 亚洲精品免费看| 久久精品一区二区三区不卡牛牛| 色吧成人激情小说| 高清国产一区二区| 精品一区二区三区影院在线午夜| 亚洲专区一二三| 国产精品美女久久久久aⅴ| 欧美一区二区三区影视| 色婷婷精品大视频在线蜜桃视频| 国产盗摄女厕一区二区三区| 五月天一区二区三区| 中文字幕中文字幕一区二区| 久久久影视传媒| 日韩一区二区三区四区五区六区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 成人少妇影院yyyy| 国产黄色精品网站| 国产一区在线观看麻豆| 强制捆绑调教一区二区| 午夜欧美在线一二页| 亚洲国产精品久久人人爱| 亚洲日本在线天堂| 国产精品高潮呻吟久久| 国产欧美一区二区三区网站| 2021久久国产精品不只是精品| 精品欧美久久久| 日韩女优毛片在线| 精品久久国产字幕高潮| 5566中文字幕一区二区电影| 欧美日韩国产一区二区三区地区| 色哟哟亚洲精品| 欧美亚洲动漫制服丝袜| 在线观看免费成人| 欧洲视频一区二区| 欧美色偷偷大香| 91精品国产综合久久久久| 欧美一区午夜视频在线观看| 91麻豆精品国产91久久久资源速度| 欧美日本一区二区在线观看| 91精品国产全国免费观看| 日韩你懂的在线播放| 精品久久久久久久久久久久久久久久久 | 日韩一区二区三区免费看| 欧美日韩国产高清一区二区三区 | 岛国一区二区在线观看| 国产999精品久久久久久| 99精品久久只有精品| 色综合一区二区| 欧美日韩日日夜夜| 欧美变态凌虐bdsm| 国产丝袜美腿一区二区三区| 国产精品久久久久久户外露出 | 国产精品不卡在线| 亚洲专区一二三| 精品一区二区三区免费观看| 国产成人av资源| 日本乱码高清不卡字幕| 欧美精品久久久久久久久老牛影院| 欧美成人a视频| 国产精品成人免费在线| 午夜av一区二区| 国产美女主播视频一区| k8久久久一区二区三区| 欧美精品亚洲二区| 久久久久9999亚洲精品| 一区二区三区中文在线| 日本aⅴ免费视频一区二区三区 | 国产精品久久久久久久久免费桃花| 亚洲黄色片在线观看| 日韩av成人高清| 99国产精品久久久久久久久久| 91麻豆精品91久久久久久清纯| 国产三级精品三级在线专区| 亚洲五码中文字幕| 成人av高清在线| 精品国产乱码久久久久久图片| 亚洲一区二区三区在线播放| 国产伦精品一区二区三区免费迷 | 五月婷婷另类国产| www.亚洲精品| 欧美精品一区二区三区蜜桃| 一区二区成人在线观看| 国产精品456| 欧美一区二区三区成人| 欧美激情综合在线| 久久99国产精品尤物| 欧美四级电影网| 国产精品久久毛片av大全日韩| 蜜臀99久久精品久久久久久软件| 99久久99久久精品国产片果冻| 久久综合九色综合欧美就去吻| 亚洲图片欧美综合| gogogo免费视频观看亚洲一| 欧美大片一区二区三区| 亚洲成人www| 色噜噜偷拍精品综合在线| 国产人久久人人人人爽| 日本成人超碰在线观看| 欧美午夜精品一区二区蜜桃 | 欧美国产日韩一二三区| 久久99国产精品麻豆| 欧美日韩精品欧美日韩精品一 | 国产精品国产精品国产专区不片| 久久av老司机精品网站导航| 欧美日韩国产首页在线观看| 一区二区三区欧美日| 97久久超碰国产精品| 国产欧美日本一区视频| 久久91精品久久久久久秒播| 日韩午夜在线观看视频| 丝袜国产日韩另类美女| 欧美日本在线视频| 日韩中文欧美在线|