xref: /reactos/modules/rosapps/drivers/green/power.c (revision 40462c92)
1 /*
2  * PROJECT:     ReactOS VT100 emulator
3  * LICENSE:     GPL - See COPYING in the top level directory
4  * FILE:        drivers/base/green/power.c
5  * PURPOSE:     IRP_MJ_POWER operations
6  * PROGRAMMERS: Copyright 2006 Herv� Poussineau (hpoussin@reactos.org)
7  */
8 
9 #include "green.h"
10 
11 #define NDEBUG
12 #include <debug.h>
13 
14 NTSTATUS
15 GreenPower(
16 	IN PDEVICE_OBJECT DeviceObject,
17 	IN PIRP Irp)
18 {
19 	GREEN_DEVICE_TYPE Type;
20 	PIO_STACK_LOCATION Stack;
21 	ULONG_PTR Information = Irp->IoStatus.Information;
22 	NTSTATUS Status = Irp->IoStatus.Status;
23 
24 	Type = ((PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->Type;
25 	Stack = IoGetCurrentIrpStackLocation(Irp);
26 
27 	switch (Stack->MinorFunction)
28 	{
29 		case IRP_MN_SET_POWER: /* 0x02 */
30 		{
31 			DPRINT("IRP_MJ_POWER / IRP_MN_SET_POWER\n");
32 			if (Type == GreenFDO)
33 			{
34 				PoStartNextPowerIrp(Irp);
35 				Status = STATUS_SUCCESS;
36 			}
37 			else
38 			{
39 				DPRINT1("IRP_MJ_POWER / IRP_MN_SET_POWER / Unknown type 0x%lx\n",
40 					Type);
41 				ASSERT(FALSE);
42 			}
43 			break;
44 		}
45 		default:
46 		{
47 			DPRINT1("IRP_MJ_POWER / unknown minor function 0x%lx\n", Stack->MinorFunction);
48 			break;
49 		}
50 	}
51 
52 	Irp->IoStatus.Status = Status;
53 	Irp->IoStatus.Information = Information;
54 	if (Status != STATUS_PENDING)
55 		IoCompleteRequest(Irp, IO_NO_INCREMENT);
56 
57 	return Status;
58 }
59