[MTHCA] fixed a build break.
[mirror/winof/.git] / hw / mlx4 / kernel / hca / wmi.c
1 /*\r
2  * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
3  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. \r
4  *\r
5  * This software is available to you under the OpenIB.org BSD license\r
6  * below:\r
7  *\r
8  *     Redistribution and use in source and binary forms, with or\r
9  *     without modification, are permitted provided that the following\r
10  *     conditions are met:\r
11  *\r
12  *      - Redistributions of source code must retain the above\r
13  *        copyright notice, this list of conditions and the following\r
14  *        disclaimer.\r
15  *\r
16  *      - Redistributions in binary form must reproduce the above\r
17  *        copyright notice, this list of conditions and the following\r
18  *        disclaimer in the documentation and/or other materials\r
19  *        provided with the distribution.\r
20  *\r
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
22  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
23  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
24  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
25  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
26  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
27  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
28  * SOFTWARE.\r
29  *\r
30  * $Id: al.c 1611 2006-08-20 14:48:55Z sleybo $\r
31  */\r
32 \r
33 #include "precomp.h"\r
34 \r
35 #ifdef USE_WDM_FRAMEWORK\r
36 \r
37 #pragma warning( disable : 4206)\r
38 \r
39 #else\r
40 \r
41 #if defined(EVENT_TRACING)\r
42 #ifdef offsetof\r
43 #undef offsetof\r
44 #endif\r
45 #include "wmi.tmh"\r
46 #endif\r
47 \r
48 NTSTATUS\r
49 WmiRegistration(\r
50         WDFDEVICE      Device\r
51         )\r
52 /*++\r
53 Routine Description\r
54 \r
55         Registers with WMI as a data provider for this\r
56         instance of the device\r
57 \r
58 --*/\r
59 {\r
60         WDF_WMI_PROVIDER_CONFIG providerConfig;\r
61         WDF_WMI_INSTANCE_CONFIG instanceConfig;\r
62         PFDO_DEVICE_DATA deviceData;\r
63         NTSTATUS status;\r
64         DECLARE_CONST_UNICODE_STRING(hcaRsrcName, HCARESOURCENAME);\r
65 \r
66         PAGED_CODE();\r
67 \r
68         deviceData = FdoGetData(Device);\r
69 \r
70         //\r
71         // Register WMI classes.\r
72         // First specify the resource name which contain the binary mof resource.\r
73         //\r
74         status = WdfDeviceAssignMofResourceName(Device, &hcaRsrcName);\r
75         if (!NT_SUCCESS(status)) {\r
76                 return status;\r
77         }\r
78 \r
79         WDF_WMI_PROVIDER_CONFIG_INIT(&providerConfig, &MLX4_HCA_WMI_STD_DATA_GUID);\r
80         providerConfig.MinInstanceBufferSize = sizeof(HCA_WMI_STD_DATA);\r
81 \r
82         //\r
83         // You would want to create a WDFWMIPROVIDER handle separately if you are\r
84         // going to dynamically create instances on the provider.  Since we are\r
85         // statically creating one instance, there is no need to create the provider\r
86         // handle.\r
87         //\r
88         WDF_WMI_INSTANCE_CONFIG_INIT_PROVIDER_CONFIG(&instanceConfig, &providerConfig);\r
89 \r
90         //\r
91         // By setting Register to TRUE, we tell the framework to create a provider\r
92         // as part of the Instance creation call. This eliminates the need to\r
93         // call WdfWmiProviderRegister.\r
94         //\r
95         instanceConfig.Register = TRUE;\r
96         instanceConfig.EvtWmiInstanceQueryInstance = EvtStdDataQueryInstance;\r
97         instanceConfig.EvtWmiInstanceSetInstance = EvtStdDataSetInstance;\r
98         instanceConfig.EvtWmiInstanceSetItem = EvtStdDataSetItem;\r
99 \r
100         status = WdfWmiInstanceCreate(  Device,\r
101                 &instanceConfig, WDF_NO_OBJECT_ATTRIBUTES, WDF_NO_HANDLE );\r
102 \r
103         return status;\r
104 }\r
105 \r
106 //\r
107 // WMI System Call back functions\r
108 //\r
109 NTSTATUS\r
110 EvtStdDataSetItem(\r
111         IN  WDFWMIINSTANCE WmiInstance,\r
112         IN  ULONG DataItemId,\r
113         IN  ULONG InBufferSize,\r
114         IN  PVOID InBuffer\r
115         )\r
116 /*++\r
117 \r
118 Routine Description:\r
119 \r
120         This routine is a callback into the driver to set for the contents of\r
121         an instance.\r
122 \r
123 Arguments:\r
124 \r
125         WmiInstance is the instance being set\r
126 \r
127         DataItemId has the id of the data item being set\r
128 \r
129         InBufferSize has the size of the data item passed\r
130 \r
131         InBuffer has the new values for the data item\r
132 \r
133 Return Value:\r
134 \r
135         status\r
136 \r
137 --*/\r
138 {\r
139         PFDO_DEVICE_DATA fdoData;\r
140 \r
141         PAGED_CODE();\r
142 \r
143         fdoData = FdoGetData(WdfWmiInstanceGetDevice(WmiInstance));\r
144 \r
145         switch(DataItemId)\r
146         {\r
147         case 1:\r
148                 if (InBufferSize < sizeof(ULONG)) {\r
149                         return STATUS_BUFFER_TOO_SMALL;\r
150                 }\r
151                 fdoData->WmiData.DebugPrintLevel = *((PULONG)InBuffer);\r
152                 return STATUS_SUCCESS;\r
153 \r
154         case 2:\r
155                 if (InBufferSize < sizeof(ULONG)) {\r
156                         return STATUS_BUFFER_TOO_SMALL;\r
157                 }\r
158                 fdoData->WmiData.DebugPrintFlags = *((PULONG)InBuffer);\r
159                 return STATUS_SUCCESS;\r
160 \r
161         default:\r
162                 return STATUS_WMI_READ_ONLY;\r
163         }\r
164 }\r
165 \r
166 NTSTATUS\r
167 EvtStdDataSetInstance(\r
168         IN  WDFWMIINSTANCE WmiInstance,\r
169         IN  ULONG InBufferSize,\r
170         IN  PVOID InBuffer\r
171         )\r
172 /*++\r
173 \r
174 Routine Description:\r
175 \r
176         This routine is a callback into the driver to set for the contents of\r
177         an instance.\r
178 \r
179 Arguments:\r
180 \r
181         WmiInstance is the instance being set\r
182 \r
183         BufferSize has the size of the data block passed\r
184 \r
185         Buffer has the new values for the data block\r
186 \r
187 Return Value:\r
188 \r
189         status\r
190 \r
191 --*/\r
192 {\r
193         PFDO_DEVICE_DATA   fdoData;\r
194 \r
195         UNREFERENCED_PARAMETER(InBufferSize);\r
196 \r
197         PAGED_CODE();\r
198 \r
199         fdoData = FdoGetData(WdfWmiInstanceGetDevice(WmiInstance));\r
200 \r
201         //\r
202         // We will update only writable elements.\r
203         //\r
204         memcpy( &fdoData->WmiData, InBuffer, \r
205                 min(sizeof(HCA_WMI_STD_DATA), InBufferSize));\r
206 \r
207         return STATUS_SUCCESS;\r
208 }\r
209 \r
210 NTSTATUS\r
211 EvtStdDataQueryInstance(\r
212         IN  WDFWMIINSTANCE WmiInstance,\r
213         IN  ULONG OutBufferSize,\r
214         IN  PVOID OutBuffer,\r
215         OUT PULONG BufferUsed\r
216         )\r
217 /*++\r
218 \r
219 Routine Description:\r
220 \r
221         This routine is a callback into the driver to set for the contents of\r
222         a wmi instance\r
223 \r
224 Arguments:\r
225 \r
226         WmiInstance is the instance being set\r
227 \r
228         OutBufferSize on has the maximum size available to write the data\r
229                 block.\r
230 \r
231         OutBuffer on return is filled with the returned data block\r
232 \r
233         BufferUsed pointer containing how many bytes are required (upon failure) or\r
234                 how many bytes were used (upon success)\r
235 \r
236 Return Value:\r
237 \r
238         status\r
239 \r
240 --*/\r
241 {\r
242         PFDO_DEVICE_DATA fdoData;\r
243 \r
244         UNREFERENCED_PARAMETER(OutBufferSize);\r
245 \r
246         PAGED_CODE();\r
247 \r
248         fdoData = FdoGetData(WdfWmiInstanceGetDevice(WmiInstance));\r
249 \r
250         *BufferUsed = sizeof (HCA_WMI_STD_DATA);\r
251         * (PHCA_WMI_STD_DATA) OutBuffer = fdoData->WmiData;\r
252 \r
253         return STATUS_SUCCESS;\r
254 }\r
255 \r
256 #endif\r
257 \r