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

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

?? routines.c

?? Intel EtherExpressTM PRO/100+ Ethernet 網卡在Windows2000/xp下的PCI驅動程序源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:

//-----------------------------------------------------------------------------
// 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(
    PMP_ADAPTER Adapter)
{
    NDIS_STATUS     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.
        DBGPRINT(MP_INFO, ("CU suspended. ScbStatus=%04x Issue selective reset\n", Adapter->CSRAddress->ScbStatus));
        Adapter->CSRAddress->Port = PORT_SELECTIVE_RESET;

        // Wait after a port sel-reset command
        NdisStallExecution(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(
    PMP_ADAPTER 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
//  NDIS_STATUS_HARD_ERRORS
//-----------------------------------------------------------------------------

NDIS_STATUS D100SubmitCommandBlockAndWait(
    IN PMP_ADAPTER Adapter)
{
    NDIS_STATUS     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)
    {
        DBGPRINT(MP_ERROR, ("Scb "PTR_FORMAT" ScbStatus %04x\n", Adapter->CSRAddress, Adapter->CSRAddress->ScbStatus));
        ASSERT(FALSE);
        MP_SET_HARDWARE_ERROR(Adapter);
        return(NDIS_STATUS_HARD_ERRORS);
    }
#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(NDIS_STATUS_HARD_ERRORS);
    }

    // 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(NDIS_STATUS_HARD_ERRORS);
    }

    // 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))
    {
        DBGPRINT(MP_ERROR, ("Command failed\n"));
        MP_SET_HARDWARE_ERROR(Adapter);
        Status = NDIS_STATUS_HARD_ERRORS;
    }
    else
        Status = NDIS_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
//-----------------------------------------------------------------------------
NDIS_MEDIA_STATE NICGetMediaState(IN PMP_ADAPTER 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(NdisMediaStateConnected);
    else
        return(NdisMediaStateDisconnected);

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频免费在线| 一区二区三区成人| 亚洲裸体xxx| 久久99国产精品久久99果冻传媒| 99久久综合99久久综合网站| 日韩欧美国产综合在线一区二区三区 | 亚洲精品成a人| 国产原创一区二区| 欧美一级淫片007| 亚洲欧洲精品一区二区三区| 精品一区二区影视| 欧美精品一二三四| 亚洲精品国产精华液| 国产成人小视频| 精品欧美一区二区久久| 图片区小说区国产精品视频| 一本大道av一区二区在线播放| 国产亚洲欧美日韩在线一区| 麻豆91精品91久久久的内涵| 欧美日韩成人一区二区| 亚洲资源在线观看| 欧美最猛性xxxxx直播| 亚洲女人小视频在线观看| 成人教育av在线| 久久久久久久综合日本| 久久99国产精品免费| 欧美一区二区在线不卡| 爽爽淫人综合网网站| 欧美三级在线播放| 偷拍一区二区三区四区| 欧美久久久久久蜜桃| 婷婷综合五月天| 91精品啪在线观看国产60岁| 毛片av一区二区| 日韩女同互慰一区二区| 国产一区视频网站| 欧美经典三级视频一区二区三区| 国产成人一区二区精品非洲| 亚洲国产精品国自产拍av| 成人精品视频.| 伊人色综合久久天天人手人婷| 91久久久免费一区二区| 亚洲一二三专区| 日韩欧美国产综合| 国产精品一区二区久久不卡| 中文子幕无线码一区tr| 91小视频免费看| 亚洲成人精品影院| 欧美日韩高清影院| 欧美国产精品专区| 99久久婷婷国产精品综合| 国产精品污污网站在线观看| 成人激情图片网| 日韩毛片视频在线看| 色狠狠一区二区| 久久中文娱乐网| 99久久精品情趣| 亚洲无人区一区| 欧美伦理影视网| 男男成人高潮片免费网站| 在线综合亚洲欧美在线视频| 久久av中文字幕片| 国产喷白浆一区二区三区| 国产成+人+日韩+欧美+亚洲| 久久久91精品国产一区二区精品 | aaa欧美日韩| 一区二区三区成人| 91高清视频在线| 国产精品资源在线看| 1024精品合集| 正在播放一区二区| 国产一区二区成人久久免费影院| 日本一区二区三区视频视频| av一区二区不卡| 亚洲成人动漫在线免费观看| 日韩小视频在线观看专区| 高清国产午夜精品久久久久久| 中文字幕在线一区免费| 日本韩国欧美在线| 奇米色一区二区三区四区| www久久精品| 欧美亚洲日本一区| 狠狠色丁香婷婷综合久久片| 国产精品不卡视频| 欧美日韩另类国产亚洲欧美一级| 久久se这里有精品| 亚洲午夜国产一区99re久久| 久久久三级国产网站| 国产一区二区三区高清播放| 综合久久久久综合| 日韩一区二区三区高清免费看看| 成人动漫中文字幕| 美女脱光内衣内裤视频久久网站 | 欧洲av在线精品| 精品一区二区三区视频在线观看| 17c精品麻豆一区二区免费| 日韩一本二本av| 91福利在线导航| 韩国欧美国产一区| 亚洲在线观看免费| 欧美高清一级片在线观看| 欧美日韩免费高清一区色橹橹 | 亚洲一区在线播放| 欧美激情一区在线| 欧美成人一区二区三区| 欧美精品v日韩精品v韩国精品v| 成人激情综合网站| 国产一区二区三区久久悠悠色av| 日韩和欧美一区二区三区| 成人免费在线视频| 国产女主播一区| 久久婷婷成人综合色| 欧美一区二区在线免费播放| jvid福利写真一区二区三区| 日韩av成人高清| 香蕉加勒比综合久久| 一区二区三区四区在线| 国产精品网站在线| 精品国产污网站| 欧美一区二区三区婷婷月色| 欧美男生操女生| 欧美另类高清zo欧美| 欧美视频在线一区| 在线播放中文字幕一区| 在线不卡免费欧美| 91精品国产91久久久久久一区二区 | 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲综合在线第一页| 亚洲三级小视频| 亚洲欧美日韩国产手机在线| 国产精品美女久久福利网站 | 精品无人码麻豆乱码1区2区 | 欧美主播一区二区三区| 97久久超碰精品国产| 粉嫩在线一区二区三区视频| 国产精品123| 成人a区在线观看| 欧美亚洲综合网| 欧美乱熟臀69xxxxxx| 91精品国产免费| 欧美电影免费观看高清完整版在| 制服丝袜成人动漫| 日韩女优制服丝袜电影| 欧美本精品男人aⅴ天堂| 2017欧美狠狠色| 国产欧美精品区一区二区三区| 国产女同互慰高潮91漫画| 精品国产百合女同互慰| 久久―日本道色综合久久| 欧美激情自拍偷拍| 亚洲精选在线视频| 秋霞电影网一区二区| 国产精品一区二区x88av| 99精品欧美一区二区蜜桃免费| 日本精品一区二区三区高清 | 精品国产髙清在线看国产毛片| 久久这里都是精品| 国产精品美女久久久久久久网站| 一区二区三区欧美日| 亚洲欧洲日韩综合一区二区| 亚洲国产一区二区a毛片| 久久av中文字幕片| 狠狠久久亚洲欧美| 欧美主播一区二区三区| 精品久久久久久久一区二区蜜臀| 国产欧美精品一区二区三区四区 | 久久99久久久久| 成人av网站免费观看| 97久久精品人人做人人爽50路 | 欧美大白屁股肥臀xxxxxx| 国产精品天美传媒沈樵| 一二三区精品视频| 国产呦精品一区二区三区网站| 91免费视频大全| 2021中文字幕一区亚洲| 亚洲综合一区二区三区| 国产精品一品视频| 欧美军同video69gay| 2021中文字幕一区亚洲| 亚洲超丰满肉感bbw| 成人亚洲一区二区一| 日韩一区二区免费在线电影| 亚洲区小说区图片区qvod| 国产乱理伦片在线观看夜一区| 91黄色免费版| 国产精品毛片高清在线完整版| 青青青爽久久午夜综合久久午夜 | 欧美日韩综合在线免费观看| 免费美女久久99| 一本久道久久综合中文字幕| 精品国产伦一区二区三区观看方式| 一区二区三区在线免费播放| 国产一区二区精品久久91| 欧美日韩中字一区| 国产精品成人一区二区艾草| 国产精品系列在线观看| 欧美大片顶级少妇| 天天色 色综合| 欧美性xxxxxx少妇| 亚洲日本在线视频观看|