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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? isopwr.c

?? s3c2440的usb驅(qū)動代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:

Return Value:

    The function value is the final status from the operation.

--*/
{
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PDEVICE_EXTENSION deviceExtension;
    PIRP pIrp = NULL;

    deviceExtension =  DeviceObject->DeviceExtension;

    // This should have been reset in completion routine
    ISOUSB_ASSERT( !deviceExtension->SelfPowerIrp );

    if (  deviceExtension->CurrentDevicePowerState ==  PowerState.DeviceState )
        return STATUS_SUCCESS;  // nothing to do

    ISOUSB_KdPrint( DBGLVL_HIGH,("Enter IsoUsb_SelfRequestPowerIrp() will request power irp to state %s\n",
        ISOUSB_StringForDevState( PowerState.DeviceState )));

    IsoUsb_IncrementIoCount(DeviceObject);

	// flag we're handling a self-generated power irp
    deviceExtension->SelfPowerIrp = TRUE;

	// actually request the Irp
    ntStatus = PoRequestPowerIrp(deviceExtension->PhysicalDeviceObject, 
                         IRP_MN_SET_POWER,
                         PowerState,
                         IsoUsb_PoSelfRequestCompletion,
                         DeviceObject,
                         NULL);


    if  ( ntStatus == STATUS_PENDING ) { 
        // status pending is the return code we wanted

        // We only need to wait for completion if we're powering up
        if ( (ULONG) PowerState.DeviceState < deviceExtension->PowerDownLevel ) {

            NTSTATUS waitStatus;

            waitStatus = KeWaitForSingleObject(
                           &deviceExtension->SelfRequestedPowerIrpEvent,
                           Suspended,
                           KernelMode,
                           FALSE,
                           NULL);

        }

        ntStatus = STATUS_SUCCESS;

        deviceExtension->SelfPowerIrp = FALSE;

        ISOUSB_KdPrint( DBGLVL_HIGH, ("IsoUsb_SelfRequestPowerIrp() SUCCESS\n    IRP 0x%x to state %s\n",
            pIrp, ISOUSB_StringForDevState(PowerState.DeviceState) ));


    }
    else {
        // The return status was not STATUS_PENDING; any other codes must be considered in error here;
        //  i.e., it is not possible to get a STATUS_SUCCESS  or any other non-error return from this call;
        ISOUSB_KdPrint( DBGLVL_HIGH, ("IsoUsb_SelfRequestPowerIrp() to state %s FAILED, status = 0x%x\n",
            ISOUSB_StringForDevState( PowerState.DeviceState ),ntStatus));
    }

    return ntStatus;
}



NTSTATUS
IsoUsb_PoSelfRequestCompletion(
    IN PDEVICE_OBJECT       DeviceObject,
    IN UCHAR                MinorFunction,
    IN POWER_STATE          PowerState,
    IN PVOID                Context,
    IN PIO_STATUS_BLOCK     IoStatus
    )
/*++

Routine Description:

    This routine is called when the driver completes a self-originated power IRP 
	that was generated by a call to IsoUsb_SelfSuspendOrActivate().
    We power down whenever the last pipe is closed and power up when the first pipe is opened.

    For power-up , we set an event in our FDO extension to signal this IRP done
    so the power request can be treated as a synchronous call.
    We need to know the device is powered up before opening the first pipe, for example.
    For power-down, we do not set the event, as no caller waits for powerdown complete.

Arguments:

    DeviceObject - Pointer to the device object for the class device. ( Physical Device Object )

    Context - Driver defined context, in this case our FDO ( functional device object )

Return Value:

    The function value is the final status from the operation.

--*/
{
    PDEVICE_OBJECT deviceObject = Context;
    PDEVICE_EXTENSION deviceExtension = deviceObject->DeviceExtension;
    NTSTATUS ntStatus = IoStatus->Status;

    // we should not be in the midst of handling a system-generated power irp
    ISOUSB_ASSERT( NULL == deviceExtension->PowerIrp );

    // We only need to set the event if we're powering up;
    // No caller waits on power down complete
    if ( (ULONG) PowerState.DeviceState < deviceExtension->PowerDownLevel ) {

        // Trigger Self-requested power irp completed event;
        //  The caller is waiting for completion
        KeSetEvent(&deviceExtension->SelfRequestedPowerIrpEvent, 1, FALSE);
    }

    IsoUsb_DecrementIoCount(deviceObject);

    ISOUSB_KdPrintCond( DBGLVL_HIGH, !NT_SUCCESS(ntStatus),("Exit IsoUsb_PoSelfRequestCompletion() FAILED, ntStatus = 0x%x\n", ntStatus ));
   
    return ntStatus;
}


BOOLEAN
IsoUsb_SetDevicePowerState(
    IN PDEVICE_OBJECT DeviceObject,
    IN DEVICE_POWER_STATE DeviceState
    )
/*++

Routine Description:

    This routine is called when An IRP_MN_SET_POWER of type 'DevicePowerState'
    has been received by IsoUsb_ProcessPowerIrp().


Arguments:

    DeviceObject - Pointer to the device object for the class device.

    DeviceState - Device specific power state to set the device in to.


Return Value:

    For requests to DeviceState D0 ( fully on ), returns TRUE to signal caller 
    that we must set a completion routine and finish there.

--*/
{
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PDEVICE_EXTENSION deviceExtension;
    BOOLEAN fRes = FALSE;

    deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    switch (DeviceState) {
    case PowerDeviceD3:

        //
        // Device will be going OFF, 
		// TODO: add any needed device-dependent code to save state here.
		//  ( We have nothing to do in this sample )
        //

        ISOUSB_KdPrint( DBGLVL_MEDIUM,("IsoUsb_SetDevicePowerState() PowerDeviceD3 (OFF)\n"));

        deviceExtension->CurrentDevicePowerState = DeviceState;
        break;

    case PowerDeviceD1:
    case PowerDeviceD2:
        //
        // power states D1,D2 translate to USB suspend

        ISOUSB_KdPrint( DBGLVL_MEDIUM,("IsoUsb_SetDevicePowerState()  %s\n",
            ISOUSB_StringForDevState(DeviceState) ));

        deviceExtension->CurrentDevicePowerState = DeviceState;
        break;

    case PowerDeviceD0:


        ISOUSB_KdPrint( DBGLVL_MEDIUM,("IsoUsb_SetDevicePowerState() PowerDeviceD0 (ON)\n"));

        // We'll need to finish the rest in the completion routine;
        //   signal caller we're going to D0 and will need to set a completion routine
        fRes = TRUE;

        // Caller will pass on to PDO ( Physical Device object )
        break;

    default:

        ISOUSB_KdPrint( DBGLVL_MEDIUM,(" Bogus DeviceState = %x\n", DeviceState));
    }

    return fRes;
}



NTSTATUS
IsoUsb_QueryCapabilities(
    IN PDEVICE_OBJECT PdoDeviceObject,
    IN PDEVICE_CAPABILITIES DeviceCapabilities
    )

/*++

Routine Description:

    This routine generates an internal IRP from this driver to the PDO
    to obtain information on the Physical Device Object's capabilities.
    We are most interested in learning which system power states
    are to be mapped to which device power states for honoring IRP_MJ_SET_POWER Irps.

    This is a blocking call which waits for the IRP completion routine
    to set an event on finishing.

Arguments:

    DeviceObject        - Physical DeviceObject for this USB controller.

Return Value:

    NTSTATUS value from the IoCallDriver() call.

--*/

{
    PIO_STACK_LOCATION nextStack;
    PIRP irp;
    NTSTATUS ntStatus;
    KEVENT event;


    // This is a DDK-defined DBG-only macro that ASSERTS we are not running pageable code
    // at higher than APC_LEVEL.
    PAGED_CODE();


    // Build an IRP for us to generate an internal query request to the PDO
    irp = IoAllocateIrp(PdoDeviceObject->StackSize, FALSE);

    if (!irp) {
        return STATUS_INSUFFICIENT_RESOURCES;
    }


    // IoGetNextIrpStackLocation gives a higher level driver access to the next-lower
    // driver's I/O stack location in an IRP so the caller can set it up for the lower driver.
    nextStack = IoGetNextIrpStackLocation(irp);
    ISOUSB_ASSERT(nextStack != NULL);
    nextStack->MajorFunction= IRP_MJ_PNP;
    nextStack->MinorFunction= IRP_MN_QUERY_CAPABILITIES;

    // init an event to tell us when the completion routine's been called
    KeInitializeEvent(&event, NotificationEvent, FALSE);

    // Set a completion routine so it can signal our event when
    //  the next lower driver is done with the Irp
    IoSetCompletionRoutine(irp,
                           IsoUsb_IrpCompletionRoutine,
                           &event,  // pass the event as Context to completion routine
                           TRUE,    // invoke on success
                           TRUE,    // invoke on error
                           TRUE);   // invoke on cancellation of the Irp


    // set our pointer to the DEVICE_CAPABILITIES struct
    nextStack->Parameters.DeviceCapabilities.Capabilities = DeviceCapabilities;

    ntStatus = IoCallDriver(PdoDeviceObject,
                            irp);

    ISOUSB_KdPrint( DBGLVL_MEDIUM,(" IsoUsb_QueryCapabilities() ntStatus from IoCallDriver to PCI = 0x%x\n", ntStatus));

    if (ntStatus == STATUS_PENDING) {
       // wait for irp to complete

       KeWaitForSingleObject(
            &event,
            Suspended,
            KernelMode,
            FALSE,
            NULL);
    }

    // failed? this is probably a bug
    ISOUSB_KdPrintCond( DBGLVL_DEFAULT,(!NT_SUCCESS(ntStatus)), ("IsoUsb_QueryCapabilities() failed\n"));

    IoFreeIrp(irp);

    return ntStatus;
}








?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美激情一区二区| 国产精品看片你懂得 | 91精品国产综合久久婷婷香蕉| 成人黄色大片在线观看| 国产乱国产乱300精品| 国产福利91精品一区| 国产成人无遮挡在线视频| 成人动漫一区二区三区| 91亚洲国产成人精品一区二区三| 99国产精品久久久| 色综合天天综合狠狠| www.久久久久久久久| 欧美日韩在线免费视频| 亚洲一区二区综合| 国产精品不卡在线| 一本色道久久综合狠狠躁的推荐| 中文字幕中文在线不卡住| 精品欧美乱码久久久久久1区2区| av不卡一区二区三区| 捆绑调教一区二区三区| 亚洲成人你懂的| 视频在线观看国产精品| 成人国产免费视频| 亚洲国产精品t66y| 欧洲激情一区二区| 欧美精品精品一区| 精品久久人人做人人爽| 久久新电视剧免费观看| 亚洲欧洲韩国日本视频| 亚洲成人精品在线观看| 久久国产剧场电影| 国产成人aaaa| 欧美性色黄大片| 欧美一级片免费看| 国产欧美一区二区精品性色 | av欧美精品.com| 欧美性做爰猛烈叫床潮| 91精品在线一区二区| 久久伊人蜜桃av一区二区| 国产精品网站导航| 亚洲va欧美va国产va天堂影院| 日韩影院精彩在线| 国产成人丝袜美腿| 色综合天天性综合| 欧美视频日韩视频| 国产亚洲精品福利| 亚洲综合丁香婷婷六月香| 亚洲aⅴ怡春院| 国产老妇另类xxxxx| 91在线播放网址| 91精品国产麻豆国产自产在线| 2024国产精品视频| 自拍偷拍亚洲激情| 丝袜美腿亚洲综合| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美一区二区黄| 久久精品网站免费观看| 久久精品99久久久| 欧美日韩久久一区二区| 欧美一区二区三区四区五区| 中文字幕精品在线不卡| 国产精品一区二区免费不卡| 国产精品久久一卡二卡| 欧美精品一区二区蜜臀亚洲| 成人高清视频免费观看| 91精品国产综合久久国产大片| 中文欧美字幕免费| 奇米色一区二区| 日本道在线观看一区二区| 国产喂奶挤奶一区二区三区| 日韩经典一区二区| 色综合久久99| 日精品一区二区三区| av日韩在线网站| 国产精品视频一区二区三区不卡 | 色综合中文字幕国产| 在线观看av一区二区| 一区在线播放视频| 激情图片小说一区| 欧美一级黄色录像| 国产在线精品免费| 肉色丝袜一区二区| 天天av天天翘天天综合网| 一区二区三区四区五区视频在线观看| 久久精品国产一区二区| 欧美日韩三级视频| 亚洲自拍偷拍综合| 一本久久a久久免费精品不卡| 国产精品乱人伦中文| 国产精品一区二区黑丝| 精品国内二区三区| 免费成人美女在线观看| 欧美日韩一区在线观看| 亚洲一区二区精品3399| 色婷婷狠狠综合| 亚洲欧美另类久久久精品2019| 成人网在线免费视频| 国产日韩精品一区二区浪潮av| 久国产精品韩国三级视频| 日韩一区二区麻豆国产| 蜜臀av一区二区在线免费观看| 欧美日韩高清不卡| 日韩影视精彩在线| 日韩一区二区三区免费观看| 日韩不卡在线观看日韩不卡视频| 欧美日韩免费观看一区二区三区 | 中文字幕在线免费不卡| av电影在线观看完整版一区二区| 中文字幕国产一区二区| 丁香网亚洲国际| 中文字幕在线一区免费| 99久久精品国产毛片| 一区二区三区日韩欧美精品| 欧美四级电影网| 秋霞影院一区二区| 欧美大片一区二区三区| 国产专区欧美精品| 国产欧美日韩麻豆91| av高清不卡在线| 亚洲成人激情自拍| 日韩欧美中文一区| 国产成人免费视频精品含羞草妖精| 国产精品乱码久久久久久| 91麻豆蜜桃一区二区三区| 香蕉加勒比综合久久| 精品久久一区二区三区| 大胆亚洲人体视频| 亚洲精品亚洲人成人网| 91精品国产综合久久香蕉麻豆| 国产一区二区女| 中文字幕一区二区5566日韩| 在线一区二区三区| 日本成人在线视频网站| 国产丝袜在线精品| 日本久久电影网| 日韩精品91亚洲二区在线观看 | 国产欧美1区2区3区| 色诱视频网站一区| 青青国产91久久久久久| 国产片一区二区| 欧美三级一区二区| 韩国一区二区三区| 亚洲欧美一区二区三区国产精品| 欧美一区二区三区四区五区| 成人午夜av电影| 日韩在线一区二区三区| 中文成人av在线| 91精品午夜视频| 91一区在线观看| 开心九九激情九九欧美日韩精美视频电影| 久久久777精品电影网影网| 色乱码一区二区三区88| 麻豆精品在线看| 最新久久zyz资源站| 51午夜精品国产| 99精品热视频| 成人av网站在线观看免费| 日韩成人dvd| 亚洲蜜臀av乱码久久精品| 日韩一区二区三免费高清| 成人国产精品免费观看动漫| 琪琪久久久久日韩精品| 亚洲六月丁香色婷婷综合久久 | 欧美剧情片在线观看| 成人精品高清在线| 蜜臀av国产精品久久久久| 亚洲乱码中文字幕| 国产欧美久久久精品影院| 欧美精品xxxxbbbb| 91蜜桃视频在线| 国产凹凸在线观看一区二区| 日韩av成人高清| 亚洲自拍偷拍麻豆| 中文字幕一区二区三区色视频 | 日韩不卡在线观看日韩不卡视频| 亚洲色欲色欲www| 国产欧美日韩视频在线观看| 91麻豆精品国产91久久久久| 在线免费观看视频一区| 风间由美中文字幕在线看视频国产欧美 | 久久久久久久久久久久电影| 精品视频1区2区| 色悠久久久久综合欧美99| 丁香婷婷深情五月亚洲| 免费观看91视频大全| 亚洲风情在线资源站| 亚洲另类在线视频| 国产精品电影一区二区| 久久久久久久久99精品| 日韩午夜中文字幕| 欧美一区在线视频| 欧美日韩激情在线| 在线这里只有精品| 日本久久电影网| 91一区二区三区在线观看| 国产91对白在线观看九色| 国产一区二区久久| 激情五月激情综合网| 久久精品免费看| 久久黄色级2电影|