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