Add extern "C"
[reactos.git] / include / ddk / scsiwmi.h
1 /*
2 * scsiwmi.h
3 *
4 * SCSI WMILIB interface.
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef __SCSIWMI_H
24 #define __SCSIWMI_H
25
26 #include "srb.h"
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 #pragma pack(push,4)
33
34 typedef struct _SCSIWMI_REQUEST_CONTEXT {
35 PVOID UserContext;
36 ULONG BufferSize;
37 PUCHAR Buffer;
38 UCHAR MinorFunction;
39 UCHAR ReturnStatus;
40 ULONG ReturnSize;
41 } SCSIWMI_REQUEST_CONTEXT, *PSCSIWMI_REQUEST_CONTEXT;
42
43 #ifdef _GUID_DEFINED
44 # warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
45 #endif
46
47 #if ! (defined _GUID_DEFINED || defined GUID_DEFINED)
48 #define GUID_DEFINED
49 typedef struct _GUID {
50 unsigned long Data1;
51 unsigned short Data2;
52 unsigned short Data3;
53 unsigned char Data4[ 8 ];
54 } GUID;
55 #endif
56
57 typedef struct _SCSIWMIGUIDREGINFO {
58 LPCGUID Guid;
59 ULONG InstanceCount;
60 ULONG Flags;
61 } SCSIWMIGUIDREGINFO, *PSCSIWMIGUIDREGINFO;
62
63 typedef UCHAR
64 (DDKAPI *PSCSIWMI_QUERY_REGINFO)(
65 IN PVOID DeviceContext,
66 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
67 OUT PWCHAR *MofResourceName);
68
69 typedef BOOLEAN
70 (DDKAPI *PSCSIWMI_QUERY_DATABLOCK)(
71 IN PVOID Context,
72 IN PSCSIWMI_REQUEST_CONTEXT DispatchContext,
73 IN ULONG GuidIndex,
74 IN ULONG InstanceIndex,
75 IN ULONG InstanceCount,
76 IN OUT PULONG InstanceLengthArray,
77 IN ULONG BufferAvail,
78 OUT PUCHAR Buffer);
79
80 typedef BOOLEAN
81 (DDKAPI *PSCSIWMI_SET_DATABLOCK)(
82 IN PVOID DeviceContext,
83 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
84 IN ULONG GuidIndex,
85 IN ULONG InstanceIndex,
86 IN ULONG BufferSize,
87 IN PUCHAR Buffer);
88
89 typedef BOOLEAN
90 (DDKAPI *PSCSIWMI_SET_DATAITEM)(
91 IN PVOID DeviceContext,
92 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
93 IN ULONG GuidIndex,
94 IN ULONG InstanceIndex,
95 IN ULONG DataItemId,
96 IN ULONG BufferSize,
97 IN PUCHAR Buffer);
98
99 typedef BOOLEAN
100 (DDKAPI *PSCSIWMI_EXECUTE_METHOD)(
101 IN PVOID DeviceContext,
102 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
103 IN ULONG GuidIndex,
104 IN ULONG InstanceIndex,
105 IN ULONG MethodId,
106 IN ULONG InBufferSize,
107 IN ULONG OutBufferSize,
108 IN OUT PUCHAR Buffer);
109
110 typedef enum _SCSIWMI_ENABLE_DISABLE_CONTROL {
111 ScsiWmiEventControl,
112 ScsiWmiDataBlockControl
113 } SCSIWMI_ENABLE_DISABLE_CONTROL;
114
115 typedef BOOLEAN
116 (DDKAPI *PSCSIWMI_FUNCTION_CONTROL)(
117 IN PVOID DeviceContext,
118 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
119 IN ULONG GuidIndex,
120 IN SCSIWMI_ENABLE_DISABLE_CONTROL Function,
121 IN BOOLEAN Enable);
122
123 typedef struct _SCSIWMILIB_CONTEXT {
124 ULONG GuidCount;
125 PSCSIWMIGUIDREGINFO GuidList;
126 PSCSIWMI_QUERY_REGINFO QueryWmiRegInfo;
127 PSCSIWMI_QUERY_DATABLOCK QueryWmiDataBlock;
128 PSCSIWMI_SET_DATABLOCK SetWmiDataBlock;
129 PSCSIWMI_SET_DATAITEM SetWmiDataItem;
130 PSCSIWMI_EXECUTE_METHOD ExecuteWmiMethod;
131 PSCSIWMI_FUNCTION_CONTROL WmiFunctionControl;
132 } SCSI_WMILIB_CONTEXT, *PSCSI_WMILIB_CONTEXT;
133
134 SCSIPORTAPI
135 BOOLEAN
136 DDKAPI
137 ScsiPortWmiDispatchFunction(
138 IN PSCSI_WMILIB_CONTEXT WmiLibInfo,
139 IN UCHAR MinorFunction,
140 IN PVOID DeviceContext,
141 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
142 IN PVOID DataPath,
143 IN ULONG BufferSize,
144 IN PVOID Buffer);
145
146 #define ScsiPortWmiFireAdapterEvent( \
147 HwDeviceExtension, \
148 Guid, \
149 InstanceIndex, \
150 EventDataSize, \
151 EventData) \
152 ScsiPortWmiFireLogicalUnitEvent( \
153 HwDeviceExtension, \
154 0xff, \
155 0, \
156 0, \
157 Guid, \
158 InstanceIndex, \
159 EventDataSize, \
160 EventData)
161
162 /*
163 * ULONG
164 * ScsiPortWmiGetReturnSize(
165 * PSCSIWMI_REQUEST_CONTEXT RequestContext);
166 */
167 #define ScsiPortWmiGetReturnSize(RequestContext) \
168 ((RequestContext)->ReturnSize)
169
170 /* UCHAR
171 * ScsiPortWmiGetReturnStatus(
172 * PSCSIWMI_REQUEST_CONTEXT RequestContext);
173 */
174 #define ScsiPortWmiGetReturnStatus(RequestContext) \
175 ((RequestContext)->ReturnStatus)
176
177 SCSIPORTAPI
178 VOID
179 DDKAPI
180 ScsiPortWmiPostProcess(
181 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
182 IN UCHAR SrbStatus,
183 IN ULONG BufferUsed);
184
185 SCSIPORTAPI
186 VOID
187 DDKAPI
188 ScsiPortWmiFireLogicalUnitEvent(
189 IN PVOID HwDeviceExtension,
190 IN UCHAR PathId,
191 IN UCHAR TargetId,
192 IN UCHAR Lun,
193 IN LPGUID Guid,
194 IN ULONG InstanceIndex,
195 IN ULONG EventDataSize,
196 IN PVOID EventData);
197
198 #pragma pack(pop)
199
200 #ifdef __cplusplus
201 }
202 #endif
203
204 #endif /* __SCSIWMI_H */