\r
Module Name:\r
\r
- PciDrv.c\r
+ mthca_kmdf.c\r
\r
Abstract:\r
\r
--*/\r
\r
#include "hca_driver.h"\r
-#include "pcidrv.h"\r
-#include "trace.h"\r
-\r
-#include <ntstrsafe.h>\r
#include <ntintsafe.h>\r
#include <initguid.h>\r
\r
-#include "public.h"\r
+#include "mthca_public.h"\r
+\r
+DRIVER_INITIALIZE DriverEntry;\r
+DRIVER_UNLOAD hca_drv_unload;\r
+\r
+// hca_driver.c - previous DriverEntry()\r
+NTSTATUS\r
+HcaEntry (\r
+ IN PDRIVER_OBJECT p_driver_obj,\r
+ IN PUNICODE_STRING p_registry_path );\r
+\r
+void\r
+hca_drv_unload( IN PDRIVER_OBJECT p_driver_obj );\r
+\r
+NTSTATUS\r
+HcaWmiRegistration( WDFDEVICE Device );\r
+\r
+NTSTATUS\r
+HcaAllocSWResources(PFDO_DATA fdoData);\r
+\r
+NTSTATUS\r
+HcaFreeSWResources(PFDO_DATA fdoData);\r
+\r
+VOID\r
+HcaEvtDeviceSelfManagedIoCleanup( IN WDFDEVICE Device );\r
+\r
+NTSTATUS\r
+HcaEvtDeviceSelfManagedIoSuspend( IN WDFDEVICE Device );\r
\r
-DRIVER_INITIALIZE DriverEntry;\r
+NTSTATUS\r
+HcaEvtDeviceD0ExitPreInterruptsDisabled(\r
+ IN WDFDEVICE Device,\r
+ IN WDF_POWER_DEVICE_STATE TargetState );\r
\r
NTSTATUS\r
-HcaEntry(\r
- IN PDRIVER_OBJECT p_driver_obj,\r
- IN PUNICODE_STRING p_registry_path );\r
+HcaEvtDeviceD0EntryPostInterruptsEnabled(\r
+ IN WDFDEVICE Device,\r
+ IN WDF_POWER_DEVICE_STATE PreviousState );\r
\r
-NTSTATUS HcaAllocateSoftwareResources(PFDO_DATA fdoData);\r
-NTSTATUS HcaFreeSoftwareResources(PFDO_DATA fdoData);\r
-VOID HcaEvtDeviceSelfManagedIoCleanup( IN WDFDEVICE Device );\r
-NTSTATUS HcaEvtDeviceSelfManagedIoSuspend( IN WDFDEVICE Device );\r
\r
#if defined(EVENT_TRACING)\r
//\r
#pragma alloc_text (PAGE, HcaEvtDeviceWakeArmSx)\r
#pragma alloc_text (PAGE, HcaSetPowerPolicy)\r
#pragma alloc_text (PAGE, HcaReadFdoRegistryKeyValue)\r
+#pragma alloc_text (PAGE, HcaEvtDeviceD0ExitPreInterruptsDisabled)\r
+#pragma alloc_text (PAGE, HcaEvtDeviceD0EntryPostInterruptsEnabled)\r
#endif\r
\r
-\r
#define PARAMATER_NAME_LEN 80\r
\r
__inline\r
)\r
{\r
#if 1\r
- return TRUE;\r
+ UNREFERENCED_PARAMETER(FdoData);\r
+ return TRUE;\r
#else\r
if (FdoData->RevsionID >= E100_82559_A_STEP\r
/*&& FdoData->RevsionID <= E100_82559_C_STEP*/)\r
WDF_DRIVER_CONFIG config;\r
WDF_OBJECT_ATTRIBUTES attrib;\r
WDFDRIVER driver;\r
-// PDRIVER_CONTEXT driverContext;\r
+ PDRIVER_CONTEXT driverContext;\r
\r
//\r
// Initialize WPP Tracing\r
return status;\r
}\r
\r
-#if 0\r
driverContext = GetDriverContext(driver);\r
+ driverContext->DrvObj = DriverObject; // for DeviceAdd\r
+#if 0\r
//\r
// Create a driver wide lookside list used for allocating memory for the\r
// MP_RFD structure for all device instances (if there are multiple present).\r
WDF_OBJECT_ATTRIBUTES fdoAttributes;\r
WDFDEVICE device;\r
PFDO_DATA fdoData = NULL;\r
+ PDRIVER_CONTEXT DriverContext;\r
\r
PAGED_CODE();\r
\r
TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "-->HcaEvtDeviceAdd routine. Driver: 0x%p\n", Driver);\r
+ "-->%s() Driver: 0x%p\n", __FUNCTION__, Driver);\r
\r
//\r
// I/O type is Buffered by default. If required to use something else,\r
WdfDeviceWdmGetAttachedDevice(device),\r
fdoData);\r
\r
- status = hca_add_device( WdfDriverWdmGetDriverObject(device), // DRIVER OBJ\r
- WdfDeviceWdmGetPhysicalDevice(device), // PDO\r
- WdfDeviceWdmGetAttachedDevice(device) );// DEV OBJ\r
+ DriverContext = GetDriverContext(Driver);\r
+\r
+ status = hca_add_device( DriverContext->DrvObj,\r
+ WdfDeviceWdmGetPhysicalDevice(device),\r
+ WdfDeviceWdmGetAttachedDevice(device) );\r
//\r
// Initialize the device extension and allocate all the software resources\r
//\r
- status = HcaAllocateSoftwareResources(fdoData);\r
+ status = HcaAllocSWResources(fdoData);\r
if (!NT_SUCCESS (status)){\r
TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,\r
- "HcaAllocateSoftwareResources failed: %!STATUS!\n",\r
+ "HcaAllocSWResources failed: %!STATUS!\n",\r
status);\r
return status;\r
}\r
\r
status = HcaWmiRegistration(device);\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "<-- HcaEvtDeviceAdd \n");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "<-- %s \n",__FUNCTION__);\r
\r
return status;\r
}\r
TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
"--> HcaEvtDeviceContextCleanup\n");\r
\r
- status = HcaFreeSoftwareResources(fdoData);\r
+ status = HcaFreeSWResources(fdoData);\r
\r
TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
"<-- HcaEvtDeviceContextCleanup\n");\r
\r
}\r
\r
-NTSTATUS\r
-HcaEvtDevicePrepareHardware (\r
- WDFDEVICE Device,\r
- WDFCMRESLIST Resources,\r
- WDFCMRESLIST ResourcesTranslated\r
- )\r
+\r
/*++\r
\r
Routine Description:\r
WDF status code\r
\r
--*/\r
+\r
+NTSTATUS\r
+HcaEvtDevicePrepareHardware (\r
+ WDFDEVICE Device,\r
+ WDFCMRESLIST Resources,\r
+ WDFCMRESLIST ResourcesTranslated )\r
{\r
NTSTATUS status = STATUS_SUCCESS;\r
PFDO_DATA fdoData = NULL;\r
\r
}\r
\r
-NTSTATUS\r
-HcaEvtDeviceReleaseHardware(\r
- IN WDFDEVICE Device,\r
- IN WDFCMRESLIST ResourcesTranslated\r
- )\r
+\r
/*++\r
\r
Routine Description:\r
NTSTATUS - Failures will be logged, but not acted on.\r
\r
--*/\r
+\r
+NTSTATUS\r
+HcaEvtDeviceReleaseHardware(\r
+ IN WDFDEVICE Device,\r
+ IN WDFCMRESLIST ResourcesTranslated )\r
{\r
PFDO_DATA fdoData = NULL;\r
\r
return STATUS_SUCCESS;\r
}\r
\r
-NTSTATUS\r
-HcaEvtDeviceD0Entry(\r
- IN WDFDEVICE Device,\r
- IN WDF_POWER_DEVICE_STATE PreviousState\r
- )\r
+\r
/*++\r
\r
Routine Description:\r
NTSTATUS\r
\r
--*/\r
+\r
+NTSTATUS\r
+HcaEvtDeviceD0Entry(\r
+ IN WDFDEVICE Device,\r
+ IN WDF_POWER_DEVICE_STATE PreviousState )\r
{\r
PFDO_DATA fdoData;\r
\r
#endif\r
}\r
\r
-\r
TraceEvents(TRACE_LEVEL_INFORMATION, DBG_POWER, "<--HcaEvtDeviceD0Entry\n");\r
\r
return STATUS_SUCCESS;\r
return STATUS_SUCCESS;\r
}\r
\r
-NTSTATUS\r
-HcaEvtDeviceSelfManagedIoInit(\r
- IN WDFDEVICE Device\r
- )\r
+\r
/*++\r
\r
Routine Description:\r
HcaEvtDeviceSelfManagedIoInit is called by the Framework when the device\r
enters the D0 state. Its job is to start any I/O-related actions that the\r
Framework isn't managing. This might include releasing queues that are not\r
- power-managed, that is, the Framework is not automatically holding and releasing\r
- them across PnP/Power transitions. (The default behavior for WDFQUEUE is\r
- auto-managed, so most queues don't need to be dealt with here.) This might\r
- also include setting up non-queue-based actions.\r
+ power-managed, that is, the Framework is not automatically holding and\r
+ releasing them across PnP/Power transitions. (The default behavior for\r
+ WDFQUEUE is auto-managed, so most queues don't need to be dealt with here.)\r
+ This might also include setting up non-queue-based actions.\r
\r
If you allow the Framework to manage most or all of your queues, then when\r
you build a driver from this sample, you can probably delete this function.\r
\r
- In this driver, the SelfManagedIo callbacks are used to implement a watchdog timer.\r
+ In this driver, the SelfManagedIo callbacks are used to implement a\r
+ watchdog timer.\r
\r
This function is not marked pagable because this function is in the\r
device power up path. When a function is marked pagable and the code\r
NTSTATUS - Failures will result in the device stack being torn down.\r
\r
--*/\r
+\r
+NTSTATUS\r
+HcaEvtDeviceSelfManagedIoInit( IN WDFDEVICE Device )\r
{\r
PFDO_DATA fdoData = NULL;\r
- NTSTATUS status;\r
+ NTSTATUS status=STATUS_SUCCESS;\r
// WDF_TIMER_CONFIG wdfTimerConfig;\r
// WDF_OBJECT_ATTRIBUTES timerAttributes;\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "--> HcaEvtDeviceSelfManagedIoInit\n");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "--> %s()\n", __FUNCTION__);\r
\r
fdoData = FdoGetData(Device);\r
\r
#endif\r
\r
TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "<-- HcaEvtDeviceSelfManagedIoInit\n");\r
+ "<-- %s() ret %x\n", __FUNCTION__, status);\r
\r
return status;\r
}\r
}\r
\r
\r
-VOID\r
-HcaEvtIoDeviceControl(\r
- IN WDFQUEUE Queue,\r
- IN WDFREQUEST Request,\r
- IN size_t OutputBufferLength,\r
- IN size_t InputBufferLength,\r
- IN ULONG IoControlCode\r
- )\r
/*++\r
\r
Routine Description:\r
VOID\r
\r
--*/\r
+\r
+VOID\r
+HcaEvtIoDeviceControl(\r
+ IN WDFQUEUE Queue,\r
+ IN WDFREQUEST Request,\r
+ IN size_t OutputBufferLength,\r
+ IN size_t InputBufferLength,\r
+ IN ULONG IoControlCode )\r
{\r
- NTSTATUS status= STATUS_SUCCESS;\r
+ //NTSTATUS status= STATUS_SUCCESS;\r
PFDO_DATA fdoData = NULL;\r
WDFDEVICE hDevice;\r
WDF_REQUEST_PARAMETERS params;\r
WdfRequestComplete(Request, STATUS_INVALID_DEVICE_REQUEST);\r
break;\r
}\r
-\r
- return status;\r
}\r
\r
\r
NTSTATUS\r
HcaEvtDeviceWakeArmS0( IN WDFDEVICE Device )\r
{\r
- NTSTATUS status;\r
- PFDO_DATA fdoData;\r
+ NTSTATUS status=STATUS_SUCCESS;\r
+ PFDO_DATA fdoData;\r
\r
PAGED_CODE();\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "--> HcaEvtDeviceWakeArmS0\n");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "--> %s()\n", __FUNCTION__);\r
\r
fdoData = FdoGetData(Device);\r
\r
#endif\r
\r
TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "<-- HcaEvtDeviceWakeArmS0 %x\n", status);\r
+ "<-- %s() %x\n", __FUNCTION__, status);\r
\r
return status;\r
}\r
\r
-NTSTATUS\r
-HcaEvtDeviceWakeArmSx(\r
- IN WDFDEVICE Device\r
- )\r
+\r
/*++\r
\r
Routine Description:\r
while the system is in Sx.\r
\r
--*/\r
+\r
+NTSTATUS\r
+HcaEvtDeviceWakeArmSx( IN WDFDEVICE Device )\r
{\r
- NTSTATUS status;\r
+ NTSTATUS status=STATUS_SUCCESS;\r
PFDO_DATA fdoData;\r
\r
PAGED_CODE();\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "--> HcaEvtDeviceWakeArmSx\n");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "--> %s()\n", __FUNCTION__);\r
\r
fdoData = FdoGetData(Device);\r
//\r
#endif\r
\r
TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "<-- HcaEvtDeviceWakeArmSx %x\n", status);\r
+ "<-- %s() ret %x\n", __FUNCTION__, status);\r
\r
return status;\r
}\r
\r
-VOID\r
-HcaEvtDeviceWakeDisarmS0(\r
- IN WDFDEVICE Device\r
- )\r
+\r
/*++\r
\r
Routine Description:\r
VOID.\r
\r
--*/\r
+\r
+VOID\r
+HcaEvtDeviceWakeDisarmS0( IN WDFDEVICE Device )\r
{\r
- NTSTATUS status;\r
- PFDO_DATA fdoData;\r
+ NTSTATUS status=STATUS_SUCCESS;\r
+ PFDO_DATA fdoData;\r
\r
PAGED_CODE();\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "--> HcaEvtDeviceWakeDisarmS0\n");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "--> %s\n", __FUNCTION__);\r
\r
fdoData = FdoGetData(Device);\r
#if 0\r
#endif\r
\r
TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "<-- HcaEvtDeviceWakeDisarmS0 %x\n", status);\r
-\r
- return ;\r
+ "<-- %s %x\n", __FUNCTION__, status);\r
}\r
\r
-VOID\r
-HcaEvtDeviceWakeDisarmSx(\r
- IN WDFDEVICE Device\r
- )\r
+\r
/*++\r
\r
Routine Description:\r
VOID\r
\r
--*/\r
+\r
+VOID\r
+HcaEvtDeviceWakeDisarmSx( IN WDFDEVICE Device )\r
{\r
- NTSTATUS status;\r
+ NTSTATUS status=STATUS_SUCCESS;\r
PFDO_DATA fdoData;\r
\r
UNREFERENCED_PARAMETER(Device);\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "--> HcaEvtDeviceWakeDisarmSx\n");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "--> %s\n", __FUNCTION__);\r
\r
fdoData = FdoGetData(Device);\r
#if 0\r
#endif\r
\r
TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "<-- HcaEvtDeviceWakeDisarmSx %x\n", status);\r
-\r
- return;\r
+ "<-- %s %x\n", __FUNCTION__, status);\r
}\r
\r
-VOID\r
-HcaEvtDeviceWakeTriggeredS0(\r
- IN WDFDEVICE Device\r
- )\r
+\r
/*++\r
\r
Routine Description:\r
VOID\r
\r
--*/\r
+\r
+VOID\r
+HcaEvtDeviceWakeTriggeredS0( IN WDFDEVICE Device )\r
{\r
UNREFERENCED_PARAMETER(Device);\r
\r
PAGED_CODE();\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "--> HcaEvtDeviceWakeTriggeredS0\n");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "--> %s\n", __FUNCTION__);\r
\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "<-- HcaEvtDeviceWakeTriggeredS0\n");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "<-- %s\n", __FUNCTION__);\r
}\r
\r
-VOID\r
-HcaEvtDeviceWakeTriggeredSx(\r
- IN WDFDEVICE Device\r
- )\r
+\r
/*++\r
\r
Routine Description:\r
VOID\r
\r
--*/\r
+\r
+VOID\r
+HcaEvtDeviceWakeTriggeredSx( IN WDFDEVICE Device )\r
{\r
UNREFERENCED_PARAMETER(Device);\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "--> HcaEvtDeviceWakeTriggeredSx");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "--> %s", __FUNCTION__);\r
\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "<-- HcaEvtDeviceWakeTriggeredSx");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "<-- %s", __FUNCTION__);\r
\r
return;\r
}\r
\r
\r
/*++\r
- Routine Description:\r
+\r
+Routine Description:\r
\r
This routine is used to queue workitems so that the callback\r
functions can be executed at PASSIVE_LEVEL in the conext of\r
}\r
\r
\r
-BOOLEAN\r
-HcaReadRegistryValue(\r
- __in PFDO_DATA FdoData,\r
- __in PWCHAR Name,\r
- __out PULONG Value\r
- )\r
/*++\r
\r
Routine Description:\r
FALSE if not present/error in reading registry\r
\r
--*/\r
+\r
+BOOLEAN\r
+HcaReadRegistryValue(\r
+ __in PFDO_DATA FdoData,\r
+ __in PWCHAR Name,\r
+ __out PULONG Value )\r
{\r
WDFKEY hKey = NULL;\r
NTSTATUS status;\r
BOOLEAN retValue = FALSE;\r
UNICODE_STRING valueName;\r
\r
-\r
-\r
PAGED_CODE();\r
\r
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_INIT,\r
- "-->HcaReadRegistryValue \n");\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_INIT, "--> %s()\n", __FUNCTION__);\r
\r
*Value = 0;\r
\r
}\r
\r
TraceEvents(TRACE_LEVEL_VERBOSE, DBG_INIT,\r
- "<--HcaReadRegistryValue %ws %d \n", Name, *Value);\r
+ "<-- %s() %ws %d \n", __FUNCTION__, Name, *Value);\r
\r
return retValue;\r
}\r
\r
-BOOLEAN\r
-HcaWriteRegistryValue(\r
- __in PFDO_DATA FdoData,\r
- __in PWCHAR Name,\r
- __in ULONG Value\r
- )\r
+\r
/*++\r
\r
Routine Description:\r
FALSE - otherwise\r
\r
--*/\r
+\r
+BOOLEAN\r
+HcaWriteRegistryValue(\r
+ __in PFDO_DATA FdoData,\r
+ __in PWCHAR Name,\r
+ __in ULONG Value )\r
{\r
WDFKEY hKey = NULL;\r
NTSTATUS status;\r
\r
PAGED_CODE();\r
\r
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_INIT,\r
- "Entered HcaWriteRegistryValue\n");\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_INIT, "--> %s()\n", __FUNCTION__);\r
\r
//\r
// write the value out to the registry\r
WdfRegistryClose(hKey);\r
}\r
\r
- return retValue;\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_INIT,\r
+ "<-- ret %s() %s\n", __FUNCTION__, (retValue ? "True":"False"));\r
\r
+ return retValue;\r
}\r
\r
-#define PARAMATER_NAME_LEN 80\r
\r
-BOOLEAN\r
-HcaReadFdoRegistryKeyValue(\r
- __in PWDFDEVICE_INIT DeviceInit,\r
- __in PWCHAR Name,\r
- __out PULONG Value\r
- )\r
/*++\r
\r
Routine Description:\r
FALSE if not present/error in reading registry\r
\r
--*/\r
+\r
+BOOLEAN\r
+HcaReadFdoRegistryKeyValue(\r
+ __in PWDFDEVICE_INIT DeviceInit,\r
+ __in PWCHAR Name,\r
+ __out PULONG Value )\r
{\r
WDFKEY hKey = NULL;\r
NTSTATUS status;\r
\r
PAGED_CODE();\r
\r
- TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP,\r
- "-->HcaReadFdoRegistryKeyValue\n");\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP, "--> %s()\n", __FUNCTION__);\r
\r
*Value = 0;\r
\r
}\r
\r
TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP,\r
- "<--HcaReadFdoRegistryKeyValue %ws %d \n",\r
- Name, *Value);\r
+ "<-- %s() %ws %d \n", __FUNCTION__, Name, *Value);\r
\r
return retValue;\r
}\r
\r
-VOID\r
-HcaEvtDriverContextCleanup(\r
- IN WDFDRIVER Driver\r
- )\r
+\r
/*++\r
Routine Description:\r
\r
VOID.\r
\r
--*/\r
+\r
+VOID\r
+HcaEvtDriverContextCleanup( IN WDFDRIVER Driver )\r
{\r
- UNREFERENCED_PARAMETER(Driver);\r
+ UNREFERENCED_PARAMETER( Driver );\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INIT,\r
- "--> HcaEvtDriverContextCleanup\n");\r
PAGED_CODE ();\r
\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INIT, "--> %s()\n",__FUNCTION__);\r
+\r
// Stop WPP Tracing\r
//\r
WPP_CLEANUP( WdfDriverWdmGetDriverObject( Driver ) );\r
\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_INIT, "<-- %s()\n",__FUNCTION__);\r
}\r
\r
+\r
NTSTATUS\r
HcaSetPowerPolicy(\r
IN PFDO_DATA FdoData\r
{\r
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS idleSettings;\r
WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS wakeSettings;\r
- NTSTATUS status = STATUS_SUCCESS;\r
+ NTSTATUS status = STATUS_SUCCESS;\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "--> HcaSetPowerPolicy\n");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "--> %s()\n", __FUNCTION__);\r
\r
PAGED_CODE();\r
\r
return status;\r
}\r
\r
- TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP,\r
- "<-- HcaSetPowerPolicy\n");\r
+ TraceEvents(TRACE_LEVEL_INFORMATION, DBG_PNP, "<-- %s()\n", __FUNCTION__);\r
\r
return status;\r
}\r
\r
-PCHAR\r
-DbgDevicePowerString(\r
- IN WDF_POWER_DEVICE_STATE Type\r
- )\r
+\r
/*++\r
\r
Updated Routine Description:\r
DbgDevicePowerString does not change in this stage of the function driver.\r
\r
--*/\r
+\r
+PCHAR\r
+DbgDevicePowerString( IN WDF_POWER_DEVICE_STATE Type )\r
{\r
switch (Type)\r
{\r
\r
#endif\r
\r
+\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This event is called so that driver can do PASSIVE_LEVEL work before\r
+ the interrupt is disconnected and disabled.\r
+\r
+Arguments:\r
+\r
+ Interrupt - Handle to a Framework interrupt object.\r
+\r
+ AssociatedDevice - Handle to a Framework device object.\r
+\r
+Return Value:\r
+\r
+ STATUS_SUCCESS - indicates success.\r
+\r
+--*/\r
+\r
+NTSTATUS\r
+HcaEvtDeviceD0ExitPreInterruptsDisabled(\r
+ IN WDFDEVICE Device,\r
+ IN WDF_POWER_DEVICE_STATE TargetState )\r
+{\r
+ PFDO_DATA fdoData;\r
+\r
+ UNREFERENCED_PARAMETER(TargetState);\r
+\r
+ PAGED_CODE();\r
+\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP, "--> %s()\n", __FUNCTION__);\r
+\r
+ fdoData = FdoGetData(Device);\r
+\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP, "<-- %s()\n", __FUNCTION__);\r
+\r
+ return STATUS_SUCCESS;\r
+\r
+}\r
+\r
+\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This event is called so that driver can do PASSIVE_LEVEL work after\r
+ the interrupt is connected and enabled. Here we start the watchdog timer.\r
+ Watch dog timer is used to do the initial link detection during\r
+ start and then used to make sure the device is not stuck for any reason.\r
+\r
+ This function is not marked pageable because this function is in the\r
+ device power up path. When a function is marked pagable and the code\r
+ section is paged out, it will generate a page fault which could impact\r
+ the fast resume behavior because the client driver will have to wait\r
+ until the system drivers can service this page fault.\r
+\r
+Arguments:\r
+\r
+ Interrupt - Handle to a Framework interrupt object.\r
+\r
+ AssociatedDevice - Handle to a Framework device object.\r
+\r
+Return Value:\r
+\r
+ STATUS_SUCCESS - indicates success.\r
+\r
+--*/\r
+\r
+NTSTATUS\r
+HcaEvtDeviceD0EntryPostInterruptsEnabled(\r
+ IN WDFDEVICE Device,\r
+ IN WDF_POWER_DEVICE_STATE PreviousState )\r
+{\r
+ PFDO_DATA fdoData;\r
+\r
+ UNREFERENCED_PARAMETER( PreviousState );\r
+\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP, "--> %s()\n", __FUNCTION__);\r
+\r
+ fdoData = FdoGetData(Device);\r
+\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP, "<-- %s()\n", __FUNCTION__);\r
+\r
+ return STATUS_SUCCESS;\r
+\r
+}\r
+\r
+NTSTATUS\r
+HcaAllocSWResources(PFDO_DATA fdoData)\r
+{\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP,\r
+ "--> %s() fdoData %p\n", __FUNCTION__, fdoData);\r
+\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP, "<-- %s()\n", __FUNCTION__);\r
+\r
+ return STATUS_SUCCESS;\r
+}\r
+\r
+NTSTATUS\r
+HcaFreeSWResources(PFDO_DATA fdoData)\r
+{\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP,\r
+ "--> %s() fdoData %p\n", __FUNCTION__, fdoData);\r
+\r
+ TraceEvents(TRACE_LEVEL_VERBOSE, DBG_PNP, "<-- %s()\n", __FUNCTION__);\r
+\r
+ return STATUS_SUCCESS;\r
+}\r
+\r