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

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

?? nic_pm.c

?? plx9054的WDM驅動程序
?? C
?? 第 1 頁 / 共 4 頁
字號:
    }

    
    // Lets move to the next DWORD. Init variables
    pCurrentByte += 4 ;
    NumBytesWritten = 4;
    pCurrentUlong = (PULONG)pCurrentByte;
    
    // We Copy in the Mask over here
    {
        // The Mask is at the end of the pattern

        PUCHAR pMask = (PUCHAR)pNdisPattern + sizeof(*pNdisPattern);

        //Dump (pMask,pNdisPattern->MaskSize, 0,1);

        RtlMoveMemory (pCurrentByte, pMask, pNdisPattern->MaskSize);

        NumBytesWritten += pNdisPattern->MaskSize;
            
    }


    // Update the output value        
    {
        ULONG NumUlongs = (NumBytesWritten /4);

        if ((NumBytesWritten %4) != 0)
        {
            NumUlongs ++;
        }

        ASSERT (NumUlongs == LengthOfFilter);

        *pNext = *pNext + NumUlongs;
    }

    DebugPrint(TRACE, DBG_POWER, "<-- MPCreateProgrammableFilter\n");

    return;
}

NTSTATUS
MPSetPowerD0(
    PFDO_DATA  FdoData
    )
/*++
Routine Description:

    This routine is called when the adapter receives a SetPower 
    to D0.
    
Arguments:
    
    Adapter                 Pointer to the adapter structure
    PowerState              NewPowerState
    
Return Value:

    
--*/
{
    NTSTATUS            status;
    KIRQL               oldIrql;
    LARGE_INTEGER       DueTime;
    
    //
    // MPSetPowerD0Private Initializes the adapte, issues a selective reset.
    // 
    MPSetPowerD0Private (FdoData); 
    ASSERT(FdoData->DevicePowerState == PowerDeviceD0);
    //
    // Set up the packet filter
    //
    KeAcquireSpinLock(&FdoData->Lock, &oldIrql);
    status = NICSetPacketFilter(
                 FdoData,
                 FdoData->OldPacketFilter);
    //
    // If Set Packet Filter succeeds, restore the old packet filter
    // 
    if (status == STATUS_SUCCESS)
    {
        FdoData->PacketFilter = FdoData->OldPacketFilter;
    }

    KeReleaseSpinLock(&FdoData->Lock, oldIrql);
    
    //
    // Set up the multicast list address
    //
    //
    // We need to raise the IRQL before acquiring the lock
    // because the functions called inside the guarded
    // region assume that they are called at Dpc level and release
    // and reacquire the lock using DpcLevel spinlock functions.
    //
    KeRaiseIrql(DISPATCH_LEVEL, &oldIrql);
    KeAcquireSpinLockAtDpcLevel(&FdoData->RcvLock);

    status = NICSetMulticastList(FdoData);

    NICStartRecv(FdoData);

    KeReleaseSpinLockFromDpcLevel(&FdoData->RcvLock);
    KeLowerIrql(oldIrql);

    //
    // Restart the watchdog timer.
    //
    KeClearEvent(&FdoData->WatchDogTimerEvent);    
    DueTime.QuadPart = NIC_CHECK_FOR_HANG_DELAY;    
    KeSetTimer( &FdoData->WatchDogTimer,   // Timer
                        DueTime,         // DueTime
                        &FdoData->WatchDogTimerDpc      // Dpc  
                        );           
    
    //
    // Register the interrupt if it's not done already
    //
    if(!MP_TEST_FLAG(FdoData, fMP_ADAPTER_INTERRUPT_IN_USE)) {

        status = IoConnectInterrupt(&FdoData->Interrupt,
                                  NICInterruptHandler,
                                  FdoData, // ISR Context
                                  NULL,
                                  FdoData->InterruptVector,
                                  FdoData->InterruptLevel,
                                  FdoData->InterruptLevel,
                                  FdoData->InterruptMode,
                                  TRUE, // shared interrupt
                                  FdoData->InterruptAffinity,
                                  FALSE);   
        if (!NT_SUCCESS(status)) {
            DebugPrint(ERROR, DBG_INIT, "IoConnectInterrupt failed %x\n", status);
        } 
        else { 
        
            MP_SET_FLAG(FdoData, fMP_ADAPTER_INTERRUPT_IN_USE);
            //
            // Enable the interrupt, so the driver can send/receive packets
            //
            NICEnableInterrupt(FdoData);
        }
    } else {
        NICEnableInterrupt(FdoData);
    }
    
    return status;
}

NTSTATUS
MPSetPowerLow(
    PFDO_DATA              FdoData,
    DEVICE_POWER_STATE  PowerState 
    )
/*++
Routine Description:

    This routine is called when the FdoData receives a SetPower 
    to a PowerState > D0
    
Arguments:
    
    FdoData                 Pointer to the FdoData structure
    PowerState              NewPowerState
    
Return Value:

    NT Status code
    
--*/
{

    NTSTATUS status = STATUS_SUCCESS;

    do
    {
        //FdoData->DevicePowerState = PowerState;

        //        
        // Stop sending packets. Create a new flag and make it part 
        // of the Send Fail Mask
        //

        //
        // Stop hardware from receiving packets - Set the RU to idle 
        //
        
        //
        // Check the current status of the receive unit
        //
        if ((FdoData->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(FdoData, SCB_RUC_ABORT, TRUE);
        }

        if (status != STATUS_SUCCESS)
        {
            break;
        }
       
        //
        // MPSetPowerLowPrivate first disables the interrupt, acknowledges all the pending 
        // interrupts and sets FdoData->DevicePowerState to the given low power state
        // then starts Hardware specific part of the transition to low power state
        // Setting up wake-up patterns, filters, wake-up events etc
        //
        KeSynchronizeExecution(
                FdoData->Interrupt,
                (PKSYNCHRONIZE_ROUTINE)MPSetPowerLowPrivate,
                FdoData);

        //
        // Disconnect the interrupt when the device is in low power state.
        // This is to avoid being in the ISR calling chain in case our interrupt
        // line is shared by other devices, which is pretty normal for PCI
        // devices. We will register our ISR when we resume from sleep.
        //
        IoDisconnectInterrupt(FdoData->Interrupt);
        FdoData->Interrupt = NULL;
        MP_CLEAR_FLAG(FdoData, fMP_ADAPTER_INTERRUPT_IN_USE);

        status = STATUS_SUCCESS;

    } while (FALSE);

    return status;
}

BOOLEAN 
MPAreTwoPatternsEqual(
    IN PNDIS_PM_PACKET_PATTERN pNdisPattern1,
    IN PNDIS_PM_PACKET_PATTERN pNdisPattern2
    )
/*++
Routine Description:

    This routine will compare two wake up patterns to see if they are equal

Arguments:
    
    pNdisPattern1 - Pattern1 
    pNdisPattern2 - Pattern 2
    
    
Return Value:

    True - if patterns are equal
    False - Otherwise
--*/
{
    BOOLEAN bEqual = FALSE;

    // Local variables used later in the compare section of this function
    PUCHAR  pMask1, pMask2;
    PUCHAR  pPattern1, pPattern2;
    UINT    MaskSize, PatternSize;

    do
    {
    	
        bEqual = (BOOLEAN)(pNdisPattern1->Priority == pNdisPattern2->Priority);

        if (bEqual == FALSE)
        {
            break;
        }

        bEqual = (BOOLEAN)(pNdisPattern1->MaskSize == pNdisPattern2->MaskSize);
        if (bEqual == FALSE)
        {
            break;
        }

        //
        // Verify the Mask 
        //
        MaskSize = pNdisPattern1->MaskSize ; 
        pMask1 = (PUCHAR) pNdisPattern1 + sizeof (NDIS_PM_PACKET_PATTERN);
        pMask2 = (PUCHAR) pNdisPattern2 + sizeof (NDIS_PM_PACKET_PATTERN);
        
        bEqual = (BOOLEAN)RtlEqualMemory (pMask1, pMask2, MaskSize);

        if (bEqual == FALSE)
        {
            break;
        }

        //
        // Verify the Pattern
        //
        bEqual = (BOOLEAN)(pNdisPattern1->PatternSize == pNdisPattern2->PatternSize);
        
        if (bEqual == FALSE)
        {
            break;
        }

        PatternSize = pNdisPattern2->PatternSize;
        pPattern1 = (PUCHAR) pNdisPattern1 + pNdisPattern1->PatternOffset;
        pPattern2 = (PUCHAR) pNdisPattern2 + pNdisPattern2->PatternOffset;
        
        bEqual  = (BOOLEAN)RtlEqualMemory (pPattern1, pPattern2, PatternSize );

        if (bEqual == FALSE)
        {
            break;
        }

    } while (FALSE);

    return bEqual;
}

VOID 
NICExtractPMInfoFromPciSpace(
    PFDO_DATA FdoData,
    PUCHAR pPciConfig
    )
/*++
Routine Description:

    Looks at the PM information in the 
    device specific section of the PCI Config space.
    
    Interprets the register values and stores it 
    in the adapter structure
  
    Definitions from Table 4.2 & 4.3, Pg 4-9 & 4-10 
    of the 10/100 Mbit Ethernet Family Software Technical 
    Reference Manual
  

Arguments:

    Adapter     Pointer to our adapter
    pPciConfig  Pointer to Common Pci Space

Return Value:

--*/    
{
    PMP_PM_PCI_SPACE    pPmPciConfig = (PMP_PM_PCI_SPACE )pPciConfig;
    MP_PMCSR            PMCSR;

    //
    // First interpret the PM Capabities register
    //
    {
        MP_PM_CAP_REG   PmCaps;

        PmCaps = pPmPciConfig->PMCaps;

        if(PmCaps.PME_Support &  E100_PMC_WAKE_FROM_D0)
        {
            FdoData->PoMgmt.bWakeFromD0 = TRUE;       
        }
    
        if(PmCaps.PME_Support &  E100_PMC_WAKE_FROM_D1)
        {
            FdoData->PoMgmt.bWakeFromD1 = TRUE;       
        }

        if(PmCaps.PME_Support &  E100_PMC_WAKE_FROM_D2)
        {
            FdoData->PoMgmt.bWakeFromD2 = TRUE;       
        }

        if(PmCaps.PME_Support &  E100_PMC_WAKE_FROM_D3HOT)
        {
            FdoData->PoMgmt.bWakeFromD3Hot = TRUE;       
        }

        if(PmCaps.PME_Support &  E100_PMC_WAKE_FROM_D3_AUX)
        {
            FdoData->PoMgmt.bWakeFromD3Aux = TRUE;       
        }

    }

    //
    // Interpret the PM Control/Status Register
    //
    {
        PMCSR = pPmPciConfig->PMCSR;

        if (PMCSR.PME_En == 1)
        {
            //
            // PME is enabled. Clear the PME_En bit.
            // So that it is not asserted
            //
            MpClearPME_En (FdoData,PMCSR);

        }

    }        

}


NTSTATUS
NICSetPower(
    PFDO_DATA     FdoData ,
    DEVICE_POWER_STATE   PowerState 
    )
/*++
Routine Description:

    This routine is called when the FdoData receives a SetPower 
    request. It redirects the call to an appropriate routine to
    Set the New PowerState
    
Arguments:
    
    FdoData                 Pointer to the FdoData structure
    PowerState              NewPowerState
    
Return Value:
   
    NTSTATUS Code
    
--*/
{
    NTSTATUS      status = STATUS_SUCCESS;

      
    if (PowerState == PowerDeviceD0)
    {
        DebugPrint(TRACE, DBG_POWER, "Entering fully on state\n");          

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丨porny丨首页| 日韩欧美国产不卡| 欧美一区二区久久久| 国产精品色婷婷久久58| 日韩中文字幕区一区有砖一区| 经典一区二区三区| 欧美色视频一区| 日韩理论在线观看| 国产精品91一区二区| 日韩视频一区二区在线观看| 亚洲欧美欧美一区二区三区| 成人午夜私人影院| 久久这里都是精品| 毛片av一区二区| 3d动漫精品啪啪| 日日夜夜免费精品视频| 91国内精品野花午夜精品| 国产精品网站在线播放| 国产一区二区三区免费看| 日韩一区二区视频| 日韩电影在线观看网站| 欧美日韩高清在线播放| 亚洲一区二区三区视频在线 | 久久久久9999亚洲精品| 日韩av电影免费观看高清完整版| 欧美网站一区二区| 亚洲一区影音先锋| 欧美欧美欧美欧美| 偷拍一区二区三区| 日韩一区二区三区在线观看| 日韩精品乱码av一区二区| 在线电影院国产精品| 午夜不卡av免费| 欧美一区二区在线看| 日韩高清中文字幕一区| 欧美一区二区三区四区在线观看| 天天色天天爱天天射综合| 欧美日韩高清一区二区| 美女脱光内衣内裤视频久久影院| 4438x亚洲最大成人网| 免费成人在线视频观看| 久久色成人在线| 国产ts人妖一区二区| 中文字幕一区免费在线观看| 99精品久久免费看蜜臀剧情介绍| 亚洲欧美日韩在线播放| 欧美视频你懂的| 日韩不卡免费视频| 久久久久国产精品麻豆ai换脸| 国产v综合v亚洲欧| 一区二区三区在线免费播放| 欧美日韩一区二区三区不卡| 免费成人小视频| 国产精品乱码人人做人人爱 | 中文字幕日本不卡| 色播五月激情综合网| 午夜精品久久久久久久久久| 欧美成人精品3d动漫h| 国产成人在线看| 亚洲成年人网站在线观看| 欧美一二三区在线| 99视频国产精品| 青青草原综合久久大伊人精品 | 欧美日韩国产综合一区二区| 黑人巨大精品欧美黑白配亚洲| 亚洲国产精华液网站w| 色噜噜狠狠成人网p站| 日韩专区中文字幕一区二区| 欧美韩国日本综合| 88在线观看91蜜桃国自产| 国产**成人网毛片九色| 婷婷久久综合九色国产成人| 国产清纯美女被跳蛋高潮一区二区久久w| 色综合久久综合网欧美综合网| 日韩电影免费在线观看网站| 日本一二三四高清不卡| 91精品国产日韩91久久久久久| 成人国产免费视频| 日韩成人伦理电影在线观看| 国产精品色噜噜| 91精品国产福利在线观看| eeuss国产一区二区三区| 美女一区二区三区| 亚洲一卡二卡三卡四卡五卡| 久久久亚洲高清| 欧美高清激情brazzers| 99久久免费精品高清特色大片| 青草国产精品久久久久久| 伊人色综合久久天天| 久久综合九色综合97_久久久| 欧美日韩一级大片网址| 91在线观看地址| 成人动漫一区二区| 国产又粗又猛又爽又黄91精品| 日韩和的一区二区| 亚洲综合丁香婷婷六月香| 国产日韩三级在线| 久久久久久9999| 亚洲精品一区二区三区在线观看| 欧美性一二三区| 色天天综合久久久久综合片| 成人激情小说乱人伦| 国产精品自在欧美一区| 狠狠色狠狠色合久久伊人| 六月丁香婷婷久久| 美女视频黄久久| 18成人在线观看| 精品福利一二区| 中文字幕一区二区三区精华液 | 欧美麻豆精品久久久久久| 99精品久久久久久| 成人av在线影院| av电影天堂一区二区在线| 成人午夜在线免费| 成人av网站大全| 99久久国产综合精品色伊| 成人ar影院免费观看视频| 成人激情黄色小说| 99国产精品一区| 色综合网站在线| 欧美专区亚洲专区| 欧美精品丝袜久久久中文字幕| 精品视频在线视频| 欧美一区二区三区四区在线观看| 欧美一二三四区在线| 精品国一区二区三区| 国产亚洲视频系列| 成人免费小视频| 一区二区三区在线视频观看58| 亚洲国产综合色| 欧美日韩视频不卡| 欧美色窝79yyyycom| 欧美日韩一区 二区 三区 久久精品| 久久国产麻豆精品| 日韩精品一二三| 日韩精品乱码av一区二区| 免费久久99精品国产| 国产美女久久久久| gogogo免费视频观看亚洲一| 色播五月激情综合网| 日韩一区二区在线观看视频| 精品国产乱码久久久久久蜜臀| 国产欧美日韩另类视频免费观看| 中文字幕字幕中文在线中不卡视频| 亚洲欧美偷拍三级| 日本亚洲欧美天堂免费| 国产精品18久久久| 欧美在线视频日韩| 久久久久国产成人精品亚洲午夜| 亚洲三级视频在线观看| 天堂av在线一区| 国产成人一级电影| 欧美日韩一区二区三区不卡| 久久色在线视频| 亚洲福利国产精品| 国产二区国产一区在线观看| 蜜臀av亚洲一区中文字幕| 久久久777精品电影网影网| 亚洲欧美日韩一区二区| 久久精品国产免费| 在线看日韩精品电影| 国产网红主播福利一区二区| 亚洲成人午夜电影| 成人免费视频播放| 精品少妇一区二区三区免费观看| 亚洲黄色尤物视频| 成人免费高清在线观看| 日韩美女主播在线视频一区二区三区| 国产精品传媒在线| 国内国产精品久久| 91超碰这里只有精品国产| 自拍视频在线观看一区二区| 久久国产精品区| 91精品国产综合久久香蕉麻豆| 亚洲欧洲日韩女同| 国产一区欧美二区| 日韩欧美黄色影院| 午夜国产精品影院在线观看| 99re亚洲国产精品| 国产精品亲子伦对白| 国产乱码精品一品二品| 日韩你懂的在线播放| 日韩二区三区四区| 欧美日韩免费高清一区色橹橹| 亚洲欧洲一区二区三区| 国产激情精品久久久第一区二区| 欧美一级欧美三级| 首页综合国产亚洲丝袜| 欧美在线观看视频在线| 中文字幕日韩一区| 成人高清免费在线播放| 国产三级欧美三级日产三级99| 国内欧美视频一区二区| 日韩欧美中文一区二区| 日本美女视频一区二区| 3751色影院一区二区三区| 日韩高清在线观看| 日韩一二三四区| 加勒比av一区二区| 欧美精品一区二区高清在线观看|