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

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

?? isopwr.c

?? linux環(huán)境下USB驅(qū)動(dòng)程序,適用三星ARM2410B
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):

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;
}








?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区欧美日| 97久久超碰精品国产| 不卡的av中国片| 69堂成人精品免费视频| 中文字幕欧美激情| 美女脱光内衣内裤视频久久网站| 成人av小说网| 久久精品一区二区| 日本成人在线不卡视频| 91国在线观看| 中文字幕亚洲欧美在线不卡| 国产激情视频一区二区三区欧美| 91精品婷婷国产综合久久性色| 一色桃子久久精品亚洲| 国产精品99久久久久久似苏梦涵| 欧美一区二区免费视频| 亚洲制服丝袜一区| 91亚洲国产成人精品一区二区三| 久久久综合激的五月天| 美国毛片一区二区三区| 91.com视频| 日韩精品一级中文字幕精品视频免费观看| 99国产精品国产精品毛片| 日本一区二区视频在线观看| 狠狠色狠狠色综合| 久久综合国产精品| 国产综合久久久久久鬼色 | 久久久久久**毛片大全| 日韩国产欧美在线播放| 欧美妇女性影城| 午夜精品福利久久久| 欧美日韩综合在线| 亚洲国产cao| 欧美高清性hdvideosex| 另类人妖一区二区av| 欧美va亚洲va| 国产aⅴ精品一区二区三区色成熟| 精品国产一区二区三区不卡| 国产主播一区二区三区| 亚洲国产wwwccc36天堂| 欧美日韩一区二区三区不卡| 亚洲国产一区在线观看| 精品视频一区三区九区| 日本免费新一区视频| 亚洲精品一区二区在线观看| 韩日欧美一区二区三区| 欧美高清在线一区| 色呦呦国产精品| 午夜婷婷国产麻豆精品| 日韩欧美国产不卡| 风流少妇一区二区| 亚洲人成在线观看一区二区| 欧美私人免费视频| 久久66热偷产精品| 中文字幕高清一区| 在线观看日韩电影| 久久激情综合网| 国产精品久久久久aaaa樱花| 欧美在线色视频| 奇米影视一区二区三区小说| 中文字幕精品三区| 欧美美女网站色| 国产一区二区精品久久91| 亚洲欧美一区二区三区国产精品 | 亚洲精品在线观看网站| 国产suv精品一区二区三区| 亚洲欧美日本韩国| 欧美一级欧美三级在线观看| 福利一区福利二区| 婷婷久久综合九色综合伊人色| 欧美精品一区二区三区蜜桃视频| 99国产一区二区三精品乱码| 蜜臀av一级做a爰片久久| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美精品777| 成人黄色一级视频| 蜜桃一区二区三区四区| 亚洲人123区| 久久蜜桃av一区二区天堂| 欧美日韩国产天堂| 暴力调教一区二区三区| 久久国产综合精品| 亚洲一区二区在线观看视频| 久久免费美女视频| 欧美人妇做爰xxxⅹ性高电影| 岛国精品在线播放| 麻豆精品国产91久久久久久| 亚洲国产精品久久一线不卡| 国产精品无遮挡| 精品播放一区二区| 日本一区二区久久| 日韩一区二区免费在线观看| 色天天综合久久久久综合片| 国产黄色91视频| 国内国产精品久久| 麻豆精品久久久| 日韩中文字幕不卡| 亚洲最大成人综合| 亚洲黄色免费电影| 日韩一区中文字幕| 亚洲国产电影在线观看| 精品国产乱码久久久久久免费 | 久久综合九色综合欧美98 | 欧美三级资源在线| 色呦呦国产精品| 色久综合一二码| 99re免费视频精品全部| 东方欧美亚洲色图在线| 国产乱码精品一区二区三区忘忧草| 视频一区欧美日韩| 舔着乳尖日韩一区| 午夜欧美视频在线观看| 亚洲高清免费视频| 丝袜亚洲另类欧美综合| 亚洲高清久久久| 亚洲二区在线观看| 日韩国产精品久久| 狂野欧美性猛交blacked| 蜜桃免费网站一区二区三区| 美女在线一区二区| 国产九色sp调教91| 成人一区二区三区视频在线观看 | 国产尤物一区二区| 国产一区二区在线影院| 国产精品一区二区在线播放 | 久久99精品久久久久久国产越南| 久久草av在线| 国产在线国偷精品免费看| 精品一区二区三区免费视频| 极品少妇xxxx精品少妇| 国产福利一区在线观看| 91啪亚洲精品| 欧美丰满一区二区免费视频 | 欧美日韩中文一区| 欧美精品 日韩| 久久婷婷一区二区三区| 国产精品理论在线观看| 亚洲自拍偷拍欧美| 六月丁香综合在线视频| jlzzjlzz欧美大全| 欧美视频三区在线播放| 欧美videossexotv100| 国产精品福利影院| 丝袜脚交一区二区| 国产精品亚洲一区二区三区在线 | 国产老妇另类xxxxx| 99久久伊人网影院| 777xxx欧美| 国产精品久久久久久久久久久免费看| 亚洲精品国产高清久久伦理二区| 青青草国产精品97视觉盛宴| 不卡视频一二三四| 制服.丝袜.亚洲.中文.综合| 国产日产亚洲精品系列| 亚洲一区二区欧美| 国产精品一区二区三区网站| 色婷婷国产精品综合在线观看| 欧美大胆一级视频| 亚洲综合在线视频| 国产成人在线视频免费播放| 欧美日韩免费观看一区三区| 久久精品视频免费观看| 亚洲国产另类av| 成人福利视频网站| 欧美不卡一区二区| 亚洲夂夂婷婷色拍ww47| 处破女av一区二区| 日韩天堂在线观看| 一区二区免费在线播放| 福利一区二区在线观看| 欧美不卡在线视频| 日韩国产精品久久久| 在线看日本不卡| 国产精品欧美久久久久无广告 | 日韩avvvv在线播放| av激情亚洲男人天堂| 亚洲精品一线二线三线无人区| 亚洲国产sm捆绑调教视频| 99精品视频在线免费观看| 国产区在线观看成人精品| 青青草精品视频| 91精品国产综合久久国产大片| 亚洲一区二区在线免费观看视频 | 亚洲欧洲综合另类在线| 国产激情一区二区三区| 2024国产精品| 久久激五月天综合精品| 日韩美女在线视频| 人人狠狠综合久久亚洲| 欧美二区在线观看| 爽好多水快深点欧美视频| 欧美综合色免费| 亚洲国产精品嫩草影院| 欧美日韩在线播| 偷拍与自拍一区| 欧美精品1区2区| 青青草视频一区| 日韩欧美电影在线| 国产一区二区免费视频| 久久久.com|