Exemplo n.º 1
0
VOID
HwSimD0Exit(
    _In_ WDFDEVICE Device
    )
/*++
Routine Description:

    This routine simulates the device exiting D0

Arguments:

    Device - Handle to the framework device object

Return Value:

    None

--*/
{
    PHWSIM_CONTEXT devCtx;

    devCtx = HwSimGetDeviceContext(Device);

    devCtx->DevicePoweredOn = FALSE;
    
    return;
}
Exemplo n.º 2
0
ULONG
HwSimReadComponent(
    _In_ WDFDEVICE Device, 
    _In_ ULONG Component
    )
/*++
Routine Description:

    This routine simulates the reading of data from a component

Arguments:

    Device - Handle to the framework device object

    Component - Component from which data is being read

Return Value:

    A ULONG value representing the data that was read from the component

--*/
{
    ULONG componentData;
    PHWSIM_CONTEXT devCtx;

    devCtx = HwSimGetDeviceContext(Device);

    //
    // The caller should have ensured that this routine is called only when the
    // device is powered on. Verify this. If false, we'll generate a verifier 
    // breakpoint.
    //
    if (FALSE == devCtx->DevicePoweredOn) {
        Trace(TRACE_LEVEL_ERROR, 
              "%!FUNC! - Expected device to be powered on, but it was not.");
        WdfVerifierDbgBreakPoint();
    }

    //
    // The caller should have ensured that this routine is called only when the
    // component is in F0. Verify this. If false, we'll generate a verifier 
    // breakpoint.
    //
    if (0 != devCtx->ComponentFState[Component]) {
        Trace(TRACE_LEVEL_ERROR, 
              "%!FUNC! - Expected component %d to be in F0, but it was in F%d.", 
              Component,
              devCtx->ComponentFState[Component]);
        WdfVerifierDbgBreakPoint();
    }

    //
    // In this sample, component data is just a bit-wise complement of the 
    // component number.
    //
    componentData = ~Component;
    return componentData;
}
Exemplo n.º 3
0
ULONG
HwSimReadComponent(
    _In_ WDFDEVICE Device
    )
/*++
Routine Description:

    This routine simulates the reading of data from a component

Arguments:

    Device - Handle to the framework device object

    Component - Component from which data is being read

Return Value:

    A ULONG value representing the data that was read from the component

--*/
{
    ULONG componentData;
    PHWSIM_CONTEXT devCtx;
    ULONG component = 0;
    
    Trace(TRACE_LEVEL_INFORMATION, "%!FUNC! Entry\n");

    devCtx = HwSimGetDeviceContext(Device);
    
    //
    // Verify that the device is powered on
    //
    if (FALSE == devCtx->DevicePoweredOn) {
        //
        // This means that our driver is attempting to read from the component
        // while the device is not powered on.
        //
        Trace(TRACE_LEVEL_ERROR, 
              "%!FUNC! - Expected device to be powered on, but it was not.");

        WdfVerifierDbgBreakPoint();
    }

    assert(devCtx->DevicePoweredOn);

    //
    // In this sample, component data is just a bit-wise complement of the 
    // component number.
    //
    componentData = ~component;
    
    Trace(TRACE_LEVEL_INFORMATION, "%!FUNC! Exit\n");
    
    return componentData;
}
Exemplo n.º 4
0
VOID
HwSimFStateChange(
    _In_ WDFDEVICE Device, 
    _In_ ULONG State
    )
/*++
Routine Description:

    This routine simulates a component changing its F-state

Arguments:

    Device - Handle to the framework device object

    State - New F-state for the component

Return Value:

    None

--*/
{
    PHWSIM_CONTEXT devCtx;

    devCtx = HwSimGetDeviceContext(Device);

    //
    // Verify that the device is powered on
    //
    if (FALSE == devCtx->DevicePoweredOn) {
        //
        // This means that our driver is handling an F state transition while 
        // device is not in D0.
        //
        Trace(TRACE_LEVEL_ERROR, 
              "%!FUNC! - Expected device to be powered on, but it was not.");

        WdfVerifierDbgBreakPoint();
    }

    ASSERT(devCtx->DevicePoweredOn);

    //
    // Put the component in the requested F-state
    //
    devCtx->ComponentFState = State;

    //
    // For an actual hardware, save any hardware state on Fx transition
    // and restore state on F0 transition.
    //
    
    return;
}
Exemplo n.º 5
0
VOID
HwSimFStateChange(
    _In_ WDFDEVICE Device, 
    _In_ ULONG Component, 
    _In_ ULONG State
    )
/*++
Routine Description:

    This routine simulates a component changing its F-state

Arguments:

    Device - Handle to the framework device object

    Component - Index of the component whose F-state is changing

    State - New F-state for the component

Return Value:

    None

--*/
{
    PHWSIM_CONTEXT devCtx;

    devCtx = HwSimGetDeviceContext(Device);

    //
    // The caller should have ensured that this routine is called only when the
    // device is powered on. Verify this. If false, we'll generate a verifier 
    // breakpoint.
    //
    if (FALSE == devCtx->DevicePoweredOn) {
        Trace(TRACE_LEVEL_ERROR, 
              "%!FUNC! - Expected device to be powered on, but it was not.");
        WdfVerifierDbgBreakPoint();
    }

    //
    // Put the component in the requested F-state
    //
    devCtx->ComponentFState[Component] = State;
    return;
}
Exemplo n.º 6
0
VOID
HwSimD0Entry(
    _In_ WDFDEVICE Device
    )
/*++
Routine Description:

    This routine simulates the device entering D0

Arguments:

    Device - Handle to the framework device object

Return Value:

    None

--*/
{
    PHWSIM_CONTEXT devCtx;
    ULONG i;

    devCtx = HwSimGetDeviceContext(Device);

    if (devCtx->FirstD0Entry) {
        devCtx->FirstD0Entry = FALSE;

        //
        // Put all components in F0
        //
        for (i=0; i < COMPONENT_COUNT; i++) {
            devCtx->ComponentFState[i] = 0;
        }
    }

    devCtx->DevicePoweredOn = TRUE;
    
    return;
}
Exemplo n.º 7
0
VOID
HwSimD0Entry(
    _In_ WDFDEVICE Device
    )
/*++
Routine Description:

    This routine simulates the device entering D0

Arguments:

    Device - Handle to the framework device object

Return Value:

    None

--*/
{
    PHWSIM_CONTEXT devCtx;

    devCtx = HwSimGetDeviceContext(Device);

    if (devCtx->FirstD0Entry) {
        devCtx->FirstD0Entry = FALSE;

        //
        // On the first D0 entry component is in F0 state
        //
        devCtx->ComponentFState = 0;
    }

    devCtx->DevicePoweredOn = TRUE;
    
    return;
}