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