BUS_PRINT( BUS_DBG_POWER, \r
("***** re-register CA, IRQL %d\n", KeGetCurrentIrql()));\r
\r
+ // stat\r
+ if ( p_ext->p_stat ) {\r
+ p_ext->p_stat->thread[BUS_ST_THREAD_POWER_UP].p_thread = KeGetCurrentThread();\r
+ memcpy( p_ext->p_stat->thread[BUS_ST_THREAD_POWER_UP].thread_name, "PowerUp", 8 );\r
+ }\r
+ \r
status = __register_ca( p_dev_obj );\r
if( !NT_SUCCESS( status ) ) {\r
BUS_PRINT( BUS_DBG_POWER, \r
("Power increased to: device %d, system %d.\n",\r
(int)p_ext->device_power_state, (int)p_ext->system_power_state));\r
\r
+ if ( p_ext->p_stat ) {\r
+ p_ext->p_stat->thread[BUS_ST_THREAD_POWER_UP].p_thread = NULL;\r
+ *p_ext->p_stat->thread[BUS_ST_THREAD_POWER_UP].thread_name = '\0';\r
+ }\r
+ \r
goto exit;\r
\r
err_fdo_start:\r
PoStartNextPowerIrp( p_irp );\r
IoReleaseRemoveLock( &p_ext->cl_ext.remove_lock, p_irp );\r
\r
+ // stat\r
+ if ( p_ext->p_stat ) {\r
+ p_ext->p_stat->thread[BUS_ST_THREAD_POWER_DOWN].p_thread = NULL;\r
+ *p_ext->p_stat->thread[BUS_ST_THREAD_POWER_DOWN].thread_name = '\0';\r
+ }\r
+\r
BUS_EXIT( BUS_DBG_POWER );\r
return STATUS_SUCCESS;\r
}\r
BUS_PRINT( BUS_DBG_POWER, \r
("***** deregister CA \n"));\r
\r
+ // stat\r
+ if ( p_ext->p_stat ) {\r
+ p_ext->p_stat->thread[BUS_ST_THREAD_POWER_DOWN].p_thread = KeGetCurrentThread();\r
+ memcpy( p_ext->p_stat->thread[BUS_ST_THREAD_POWER_DOWN].thread_name, "PowerDown", 10 );\r
+ }\r
+ \r
__deregister_ca( p_dev_obj );\r
\r
IoCopyCurrentIrpStackLocationToNext( p_irp );\r
//\r
\r
#define BUS_ST_MAX_DEVICES 8\r
+#define BUS_ST_MAX_THREADS 4\r
\r
//\r
// enums\r
typedef struct _bus_globals bus_globals_t;\r
typedef struct _al_mgr al_mgr_t;\r
\r
+#define BUS_ST_THREAD_POWER_DOWN 0\r
+#define BUS_ST_THREAD_POWER_UP 1\r
\r
+typedef struct _BUS_ST_THREAD\r
+{\r
+ PKTHREAD p_thread;\r
+ char thread_name[16];\r
+ \r
+} BUS_ST_THREAD, *PBUS_ST_THREAD;\r
\r
typedef struct _BUS_ST_DEVICE\r
{\r
boolean_t valid;\r
bus_fdo_ext_t *p_fdo;\r
+ BUS_ST_THREAD thread[BUS_ST_MAX_THREADS];\r
\r
} BUS_ST_DEVICE, *PBUS_ST_DEVICE;\r
\r