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

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

?? isrdpc.c

?? plx9054的WDM驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*++

Copyright (c) Microsoft Corporation.  All rights reserved.

    THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY      
    KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
    PURPOSE.

Module Name:

    ISRDPC.C

Abstract:

    Contains routine to handle interrupts, interrupt DPCs and WatchDogTimer DPC

Environment:

    Kernel mode


Revision History:

    Eliyas Yakub Feb 13, 2003

--*/

#include "precomp.h"

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

BOOLEAN 
NICInterruptHandler(
    IN PKINTERRUPT  Interupt, 
    IN PVOID        ServiceContext
    )
/*++
Routine Description:

    Interrupt handler for the device.

Arguments:

    Interupt - Address of the KINTERRUPT Object for our device.
    ServiceContext - Pointer to our adapter

Return Value:

     TRUE if our device is interrupting, FALSE otherwise.                                                    

--*/    
{
    BOOLEAN     InterruptRecognized = FALSE;
    PFDO_DATA   FdoData = (PFDO_DATA)ServiceContext;
    USHORT      IntStatus;

    DebugPrint(TRACE, DBG_INTERRUPT, "--> NICInterruptHandler\n");
    
    do 
    {
        //
        // If the adapter is in low power state, then it should not 
        // recognize any interrupt
        // 
        if (FdoData->DevicePowerState > PowerDeviceD0)
        {
            break;
        }
        //
        // We process the interrupt if it's not disabled and it's active                  
        //
        if (!NIC_INTERRUPT_DISABLED(FdoData) && NIC_INTERRUPT_ACTIVE(FdoData))
        {
            InterruptRecognized = TRUE;
        
            //
            // Disable the interrupt (will be re-enabled in NICDpcForIsr
            //
            NICDisableInterrupt(FdoData);
                
            //
            // Acknowledge the interrupt(s) and get the interrupt status
            //

            NIC_ACK_INTERRUPT(FdoData, IntStatus);

            DebugPrint(TRACE, DBG_INTERRUPT, "Requesting DPC\n");

            IoRequestDpc(FdoData->Self, NULL, FdoData);
            
        }
    }while (FALSE);    

    DebugPrint(TRACE, DBG_INTERRUPT, "<-- NICInterruptHandler\n");

    return InterruptRecognized;
}

VOID 
NICDpcForIsr(
    IN PKDPC            Dpc,
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp, //Unused
    IN PVOID            Context
    )

/*++

Routine Description:

    DPC callback for ISR. 

Arguments:

    DeviceObject - Pointer to the device object.

    Context - MiniportAdapterContext.

    Irp - Unused.

    Context - Pointer to FDO_DATA.

Return Value:

--*/
{
    PFDO_DATA fdoData = (PFDO_DATA) Context;

    DebugPrint(TRACE, DBG_DPC, "--> NICDpcForIsr\n");

    KeAcquireSpinLockAtDpcLevel(&fdoData->RcvLock);

    NICHandleRecvInterrupt(fdoData);

    KeReleaseSpinLockFromDpcLevel(&fdoData->RcvLock);

    //
    // Handle send interrupt    
    //
    KeAcquireSpinLockAtDpcLevel(&fdoData->SendLock);

    (VOID)NICHandleSendInterrupt(fdoData);

    KeReleaseSpinLockFromDpcLevel(&fdoData->SendLock);

    //
    // Start the receive unit if it had stopped
    //
    KeAcquireSpinLockAtDpcLevel(&fdoData->RcvLock);

    (VOID)NICStartRecv(fdoData);

    KeReleaseSpinLockFromDpcLevel(&fdoData->RcvLock);
    
    //
    // Re-enable the interrupt (disabled in MPIsr)
    //
    KeSynchronizeExecution(
        fdoData->Interrupt,
        (PKSYNCHRONIZE_ROUTINE)NICEnableInterrupt,
        fdoData);

    DebugPrint(TRACE, DBG_DPC, "<-- NICDpcForIsr\n");

}


VOID 
NICWatchDogTimerDpc(
    IN  PVOID	    SystemSpecific1,
    IN  PVOID	    FunctionContext,
    IN  PVOID	    SystemSpecific2, 
    IN  PVOID	    SystemSpecific3
    )
/*++

Routine Description:
    
    This DPC is used to do both link detection during hardware init and
    after that for hardware hang detection.
    
Arguments:

    SystemSpecific1     Not used
    FunctionContext     Pointer to our FdoData
    SystemSpecific2     Not used
    SystemSpecific3     Not used

Return Value:

    None
    
--*/
{
    PFDO_DATA           FdoData = (PFDO_DATA)FunctionContext;
    LARGE_INTEGER       DueTime;
    NTSTATUS            status = STATUS_SUCCESS;
    
    UNREFERENCED_PARAMETER(SystemSpecific1);
    UNREFERENCED_PARAMETER(SystemSpecific2);
    UNREFERENCED_PARAMETER(SystemSpecific3);

    DueTime.QuadPart = NIC_CHECK_FOR_HANG_DELAY;

    PciDrvIoIncrement(FdoData);

    if(MP_TEST_FLAG(FdoData, fMP_ADAPTER_HALT_IN_PROGRESS)){
        status = STATUS_DEVICE_REMOVED;
        goto Exit;
    }

    //
    // If the device has been power down, we will return without
    // touching the hardware. The timer will be restarted when
    // the device powers up.
    //
    if(FdoData->DevicePowerState == PowerDeviceD0)
    {
        if(!FdoData->CheckForHang){
            //
            // We are still doing link detection
            //            
            status = NICLinkDetection(FdoData);
            if(status == STATUS_PENDING) {
                // Wait for 100 ms   
                FdoData->bLinkDetectionWait = TRUE;
                DueTime.QuadPart = NIC_LINK_DETECTION_DELAY;
            }else {
                FdoData->CheckForHang = TRUE;
            }        
        }else {
            //
            // Link detection is over, let us check to see
            // if the hardware is hung.
            //
            if(NICCheckForHang(FdoData)){
                
                status = NICReset(FdoData);
                if(!NT_SUCCESS(status)){                    
                    goto Exit;
                }
            }
        }

        KeSetTimer( &FdoData->WatchDogTimer,   // Timer
                            DueTime,         // DueTime
                            &FdoData->WatchDogTimerDpc      // Dpc  
                            );           
     } else{
        goto Exit;
     }

     
     PciDrvIoDecrement(FdoData);
     return;
    
Exit:
    PciDrvIoDecrement(FdoData);  
    KeSetEvent(&FdoData->WatchDogTimerEvent, IO_NO_INCREMENT, FALSE);    
    DebugPrint(INFO, DBG_DPC, "WatchDogTimer is exiting %x\n", status);    
    return;
    
}


BOOLEAN 
NICCheckForHang(
    IN  PFDO_DATA     FdoData
    )
/*++

Routine Description:
    
    CheckForHang handler is called in the context of a timer DPC. 
    take advantage of this fact when acquiring/releasing spinlocks
    
Arguments:

    FdoData  Pointer to our adapter

Return Value:

    TRUE    This NIC needs a reset
    FALSE   Everything is fine

--*/
{
    PMP_TCB             pMpTcb;
    
    //
    // Just skip this part if the adapter is doing link detection
    //
    if (MP_TEST_FLAG(FdoData, fMP_ADAPTER_LINK_DETECTION))
    {
        return(FALSE);   
    }

    //
    // any nonrecoverable hardware error?
    //
    if (MP_TEST_FLAG(FdoData, fMP_ADAPTER_NON_RECOVER_ERROR))
    {
        DebugPrint(WARNING, DBG_DPC, "Non recoverable error - remove\n");
        return (TRUE);
    }
            
    //
    // hardware failure?
    //
    if (MP_TEST_FLAG(FdoData, fMP_ADAPTER_HARDWARE_ERROR))
    {
        DebugPrint(WARNING, DBG_DPC, "hardware error - reset\n");
        return(TRUE);
    }
          
    //
    // Is send stuck?                  
    //
    
    KeAcquireSpinLockAtDpcLevel(&FdoData->SendLock);

    if (FdoData->nBusySend > 0)
    {
        pMpTcb = FdoData->CurrSendHead;
        pMpTcb->Count++;
        if (pMpTcb->Count > NIC_SEND_HANG_THRESHOLD)
        {
            KeReleaseSpinLockFromDpcLevel(&FdoData->SendLock);
            DebugPrint(WARNING, DBG_DPC, "Send is stuck - reset\n");
            return(TRUE);
        }
    }
    
    KeReleaseSpinLockFromDpcLevel(&FdoData->SendLock);

    KeAcquireSpinLockAtDpcLevel(&FdoData->RcvLock);

    //
    // Update the RFD shrink count                                          
    //
    if (FdoData->CurrNumRfd > FdoData->NumRfd)
    {
        FdoData->RfdShrinkCount++;          
    }

    KeReleaseSpinLockFromDpcLevel(&FdoData->RcvLock);

    NICIndicateMediaState(FdoData);
    
    return(FALSE);
}

NTSTATUS 
NICReset(
    IN PFDO_DATA FdoData
    )
/*++

Routine Description:
    
    Function to reset the device.
    
Arguments:

    FdoData  Pointer to our adapter


Return Value:

    NT Status code.
    
Note:
    NICReset is called at DPC. Take advantage of this fact 
    when acquiring or releasing spinlocks
    
--*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成伊人成综合网小说| 99久久夜色精品国产网站| 国产精品影音先锋| 欧美性猛片aaaaaaa做受| 国产午夜亚洲精品午夜鲁丝片| 一区二区三区四区不卡在线 | 日本一区二区三区国色天香| 五月婷婷另类国产| 色噜噜久久综合| 18欧美亚洲精品| 国产美女精品一区二区三区| 欧美一区二区不卡视频| 亚洲成人黄色小说| 欧美色视频一区| 亚洲视频在线一区| 99精品国产视频| 中文字幕一区二区不卡| 成人免费视频视频| 国产日韩欧美一区二区三区乱码| 精品一区二区久久久| 欧美videossexotv100| 男男视频亚洲欧美| 日韩欧美一区二区视频| 日韩福利电影在线| 欧美一级免费大片| 另类综合日韩欧美亚洲| 日韩一级完整毛片| 激情小说欧美图片| 337p日本欧洲亚洲大胆精品 | 欧美一区二区三区播放老司机| 亚洲在线视频一区| 欧美午夜片在线观看| 亚洲一二三四久久| 欧美日韩一本到| 日韩精品五月天| 欧美成人女星排行榜| 精品亚洲国产成人av制服丝袜| 日韩欧美激情四射| 国产激情视频一区二区在线观看 | 久久久久久夜精品精品免费| 国产精品小仙女| 亚洲欧美一区二区久久| 91成人免费网站| 日韩福利电影在线观看| 日韩欧美在线不卡| 国产精品综合在线视频| 中国色在线观看另类| 色成年激情久久综合| 天堂影院一区二区| 国产人成亚洲第一网站在线播放| 99精品欧美一区二区三区综合在线| 亚洲一区二区三区四区五区黄| 欧美日本一区二区在线观看| 久久69国产一区二区蜜臀| 欧美国产一区在线| 欧美视频日韩视频在线观看| 久久99久久精品欧美| 亚洲国产成人私人影院tom| 欧美影视一区在线| 韩国午夜理伦三级不卡影院| 最新国产精品久久精品| 4438x亚洲最大成人网| 国产精品亚洲视频| 亚洲va在线va天堂| 中文乱码免费一区二区| 欧美精品亚洲一区二区在线播放| 国产麻豆午夜三级精品| 亚洲一区二区四区蜜桃| 久久久久久免费| 欧美麻豆精品久久久久久| 国产福利一区二区三区视频在线| 亚洲综合在线视频| 久久精品一区二区三区四区| 欧美视频一区二区三区在线观看| 黄色小说综合网站| 亚洲午夜电影在线观看| 欧美国产禁国产网站cc| 538prom精品视频线放| 91色.com| 福利一区二区在线| 毛片av中文字幕一区二区| 亚洲欧美视频一区| 久久久久久97三级| 99精品欧美一区二区三区小说| 美国十次综合导航| 亚洲欧美色图小说| 久久综合久久99| 日韩网站在线看片你懂的| 色综合一个色综合亚洲| 国产精品亚洲а∨天堂免在线| 视频一区中文字幕| 一区二区免费视频| 综合中文字幕亚洲| 国产精品免费aⅴ片在线观看| 日韩精品一区在线| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲成人黄色小说| 亚洲色图清纯唯美| 国产精品久久久久久久蜜臀| 久久综合99re88久久爱| 欧美mv和日韩mv的网站| 欧美精品久久一区二区三区| 在线观看日产精品| 91成人在线观看喷潮| 91麻豆精品久久久久蜜臀| 日韩激情一二三区| 亚洲在线免费播放| 亚洲精品五月天| 1024精品合集| 亚洲欧美aⅴ...| 一区二区三区四区中文字幕| 亚洲精品成人悠悠色影视| 综合色天天鬼久久鬼色| 亚洲同性gay激情无套| 国产精品天干天干在线综合| 国产精品天天摸av网| 亚洲国产电影在线观看| 国产精品久久久久久妇女6080| 国产欧美一区视频| 国产精品视频你懂的| 亚洲三级在线看| 亚洲成a人v欧美综合天堂| 亚洲成av人片一区二区三区| 日韩中文字幕麻豆| 美美哒免费高清在线观看视频一区二区 | 亚洲一区二区中文在线| 亚洲香肠在线观看| 毛片av一区二区| 国产尤物一区二区| 99re成人在线| 欧美日韩精品一区二区在线播放| 欧美精品视频www在线观看| 日韩免费高清av| 亚洲伊人色欲综合网| 亚洲影视在线播放| 精品一区二区在线看| 成人污视频在线观看| 色呦呦网站一区| 欧美一个色资源| 国产精品免费av| 亚洲成人激情自拍| 国产成人综合在线观看| 在线视频一区二区三区| 日韩一区二区三区在线视频| 中文字幕不卡在线| 午夜一区二区三区在线观看| 激情综合色丁香一区二区| 99热这里都是精品| 欧美电影在线免费观看| 中文字幕电影一区| 日韩激情av在线| www.欧美日韩国产在线| 欧美精品在线观看播放| 欧美韩国日本不卡| 日韩国产欧美三级| 91视视频在线直接观看在线看网页在线看| 欧美午夜免费电影| 国产精品日韩成人| 免费高清不卡av| 色综合久久综合网| 久久无码av三级| 亚洲不卡一区二区三区| 国产91丝袜在线播放| 日韩欧美一级在线播放| 亚洲欧美中日韩| 国产裸体歌舞团一区二区| 欧美裸体一区二区三区| 中文字幕中文字幕一区| 狠狠v欧美v日韩v亚洲ⅴ| 欧美日韩高清影院| 国产精品不卡在线| 国产精品1区2区3区在线观看| 欧美日韩视频在线第一区| 国产精品久久久久影院色老大| 免费成人在线网站| 欧美色窝79yyyycom| 国产精品国产a级| 国产一区二区三区在线观看免费 | av电影一区二区| 久久蜜桃香蕉精品一区二区三区| 亚洲小说欧美激情另类| 色婷婷av一区二区三区大白胸| 国产色产综合产在线视频| 免费欧美高清视频| 91精品国产综合久久久久久久 | 久久久五月婷婷| 精品午夜久久福利影院| 欧美日韩三级一区| 亚洲黄色小视频| 色菇凉天天综合网| 亚洲精品国产视频| 色婷婷综合久久久| 一区二区三区在线观看动漫| 一本到高清视频免费精品| 亚洲人123区| 91视频观看免费| 亚洲精品成人悠悠色影视| 在线视频观看一区| 成人一级片在线观看| 国产日产欧美精品一区二区三区|