:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / drivers / bus / acpi / ospm / pdo.c
1 /* $Id$
2  *
3  * PROJECT:         ReactOS ACPI bus driver
4  * FILE:            acpi/ospm/pdo.c
5  * PURPOSE:         Child device object dispatch routines
6  * PROGRAMMERS:     Casper S. Hornstrup (chorns@users.sourceforge.net)
7  * UPDATE HISTORY:
8  *      08-08-2001  CSH  Created
9  */
10 #include <acpisys.h>
11 #include <bm.h>
12 #include <bn.h>
13
14 #define NDEBUG
15 #include <debug.h>
16
17 /*** PRIVATE *****************************************************************/
18
19 NTSTATUS
20 PdoQueryId(
21   IN PDEVICE_OBJECT DeviceObject,
22   IN PIRP Irp,
23   PIO_STACK_LOCATION IrpSp)
24 {
25   PPDO_DEVICE_EXTENSION DeviceExtension;
26   ACPI_STATUS AcpiStatus;
27   NTSTATUS Status;
28
29   DPRINT("Called\n");
30
31   DeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
32
33 //  Irp->IoStatus.Information = 0;
34
35   switch (IrpSp->Parameters.QueryId.IdType) {
36     case BusQueryDeviceID:
37       break;
38
39     case BusQueryHardwareIDs:
40     case BusQueryCompatibleIDs:
41     case BusQueryInstanceID:
42     case BusQueryDeviceSerialNumber:
43     default:
44       Status = STATUS_NOT_IMPLEMENTED;
45   }
46
47   return Status;
48 }
49
50
51 NTSTATUS
52 PdoSetPower(
53   IN PDEVICE_OBJECT DeviceObject,
54   IN PIRP Irp,
55   PIO_STACK_LOCATION IrpSp)
56 {
57   PPDO_DEVICE_EXTENSION DeviceExtension;
58   ACPI_STATUS AcpiStatus;
59   NTSTATUS Status;
60   ULONG AcpiState;
61
62   DPRINT("Called\n");
63
64   DeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
65
66   if (IrpSp->Parameters.Power.Type == DevicePowerState) {
67     Status = STATUS_SUCCESS;
68     switch (IrpSp->Parameters.Power.State.SystemState) {
69     default:
70       Status = STATUS_UNSUCCESSFUL;
71     }
72   } else {
73     Status = STATUS_UNSUCCESSFUL;
74   }
75
76   return Status;
77 }
78
79
80 /*** PUBLIC ******************************************************************/
81
82 NTSTATUS
83 STDCALL
84 PdoPnpControl(
85   PDEVICE_OBJECT DeviceObject,
86   PIRP Irp)
87 /*
88  * FUNCTION: Handle Plug and Play IRPs for the child device
89  * ARGUMENTS:
90  *     DeviceObject = Pointer to physical device object of the child device
91  *     Irp          = Pointer to IRP that should be handled
92  * RETURNS:
93  *     Status
94  */
95 {
96   PIO_STACK_LOCATION IrpSp;
97   NTSTATUS Status;
98
99   DPRINT("Called\n");
100
101   Status = Irp->IoStatus.Status;
102
103   IrpSp = IoGetCurrentIrpStackLocation(Irp);
104
105   switch (IrpSp->MinorFunction) {
106   case IRP_MN_CANCEL_REMOVE_DEVICE:
107     break;
108
109   case IRP_MN_CANCEL_STOP_DEVICE:
110     break;
111
112   case IRP_MN_DEVICE_USAGE_NOTIFICATION:
113     break;
114
115   case IRP_MN_EJECT:
116     break;
117
118   case IRP_MN_QUERY_BUS_INFORMATION:
119     break;
120
121   case IRP_MN_QUERY_CAPABILITIES:
122     break;
123
124   case IRP_MN_QUERY_DEVICE_RELATIONS:
125     /* FIXME: Possibly handle for RemovalRelations */
126     break;
127
128   case IRP_MN_QUERY_DEVICE_TEXT:
129     break;
130
131   case IRP_MN_QUERY_ID:
132     break;
133
134   case IRP_MN_QUERY_PNP_DEVICE_STATE:
135     break;
136
137   case IRP_MN_QUERY_REMOVE_DEVICE:
138     break;
139
140   case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
141     break;
142
143   case IRP_MN_QUERY_RESOURCES:
144     break;
145
146   case IRP_MN_QUERY_STOP_DEVICE:
147     break;
148
149   case IRP_MN_REMOVE_DEVICE:
150     break;
151
152   case IRP_MN_SET_LOCK:
153     break;
154
155   case IRP_MN_START_DEVICE:
156     break;
157
158   case IRP_MN_STOP_DEVICE:
159     break;
160
161   case IRP_MN_SURPRISE_REMOVAL:
162     break;
163
164   default:
165     DPRINT("Unknown IOCTL 0x%X\n", IrpSp->MinorFunction);
166     break;
167   }
168
169   if (Status != STATUS_PENDING) {
170     Irp->IoStatus.Status = Status;
171     IoCompleteRequest(Irp, IO_NO_INCREMENT);
172   }
173
174   DPRINT("Leaving. Status 0x%X\n", Status);
175
176   return Status;
177 }
178
179 NTSTATUS
180 STDCALL
181 PdoPowerControl(
182   PDEVICE_OBJECT DeviceObject,
183   PIRP Irp)
184 /*
185  * FUNCTION: Handle power management IRPs for the child device
186  * ARGUMENTS:
187  *     DeviceObject = Pointer to physical device object of the child device
188  *     Irp          = Pointer to IRP that should be handled
189  * RETURNS:
190  *     Status
191  */
192 {
193   PIO_STACK_LOCATION IrpSp;
194   NTSTATUS Status;
195
196   DPRINT("Called\n");
197
198   IrpSp = IoGetCurrentIrpStackLocation(Irp);
199
200   switch (IrpSp->MinorFunction) {
201   case IRP_MN_SET_POWER:
202     Status = PdoSetPower(DeviceObject, Irp, IrpSp);
203     break;
204
205   default:
206     DPRINT("Unknown IOCTL 0x%X\n", IrpSp->MinorFunction);
207     Status = STATUS_NOT_IMPLEMENTED;
208     break;
209   }
210
211   if (Status != STATUS_PENDING) {
212     Irp->IoStatus.Status = Status;
213     IoCompleteRequest(Irp, IO_NO_INCREMENT);
214   }
215
216   DPRINT("Leaving. Status 0x%X\n", Status);
217
218   return Status;
219 }
220
221 /* EOF */