- Merge aicom-network-fixes up to r36740
[reactos.git] / reactos / 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 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #include "srb.h"
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 #pragma pack(push,4)
37
38 typedef struct _SCSIWMI_REQUEST_CONTEXT {
39 PVOID UserContext;
40 ULONG BufferSize;
41 PUCHAR Buffer;
42 UCHAR MinorFunction;
43 UCHAR ReturnStatus;
44 ULONG ReturnSize;
45 } SCSIWMI_REQUEST_CONTEXT, *PSCSIWMI_REQUEST_CONTEXT;
46
47 #ifdef _GUID_DEFINED
48 # warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
49 #endif
50
51 #if ! (defined _GUID_DEFINED || defined GUID_DEFINED)
52 #define GUID_DEFINED
53 typedef struct _GUID {
54 unsigned long Data1;
55 unsigned short Data2;
56 unsigned short Data3;
57 unsigned char Data4[ 8 ];
58 } GUID;
59 #endif
60
61 typedef struct _SCSIWMIGUIDREGINFO {
62 LPCGUID Guid;
63 ULONG InstanceCount;
64 ULONG Flags;
65 } SCSIWMIGUIDREGINFO, *PSCSIWMIGUIDREGINFO;
66
67 typedef UCHAR DDKAPI
68 (*PSCSIWMI_QUERY_REGINFO)(
69 IN PVOID DeviceContext,
70 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
71 OUT PWCHAR *MofResourceName);
72
73 typedef BOOLEAN DDKAPI
74 (*PSCSIWMI_QUERY_DATABLOCK)(
75 IN PVOID Context,
76 IN PSCSIWMI_REQUEST_CONTEXT DispatchContext,
77 IN ULONG GuidIndex,
78 IN ULONG InstanceIndex,
79 IN ULONG InstanceCount,
80 IN OUT PULONG InstanceLengthArray,
81 IN ULONG BufferAvail,
82 OUT PUCHAR Buffer);
83
84 typedef BOOLEAN DDKAPI
85 (*PSCSIWMI_SET_DATABLOCK)(
86 IN PVOID DeviceContext,
87 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
88 IN ULONG GuidIndex,
89 IN ULONG InstanceIndex,
90 IN ULONG BufferSize,
91 IN PUCHAR Buffer);
92
93 typedef BOOLEAN DDKAPI
94 (*PSCSIWMI_SET_DATAITEM)(
95 IN PVOID DeviceContext,
96 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
97 IN ULONG GuidIndex,
98 IN ULONG InstanceIndex,
99 IN ULONG DataItemId,
100 IN ULONG BufferSize,
101 IN PUCHAR Buffer);
102
103 typedef BOOLEAN DDKAPI
104 (*PSCSIWMI_EXECUTE_METHOD)(
105 IN PVOID DeviceContext,
106 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
107 IN ULONG GuidIndex,
108 IN ULONG InstanceIndex,
109 IN ULONG MethodId,
110 IN ULONG InBufferSize,
111 IN ULONG OutBufferSize,
112 IN OUT PUCHAR Buffer);
113
114 typedef enum _SCSIWMI_ENABLE_DISABLE_CONTROL {
115 ScsiWmiEventControl,
116 ScsiWmiDataBlockControl
117 } SCSIWMI_ENABLE_DISABLE_CONTROL;
118
119 typedef BOOLEAN DDKAPI
120 (*PSCSIWMI_FUNCTION_CONTROL)(
121 IN PVOID DeviceContext,
122 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
123 IN ULONG GuidIndex,
124 IN SCSIWMI_ENABLE_DISABLE_CONTROL Function,
125 IN BOOLEAN Enable);
126
127 typedef struct _SCSIWMILIB_CONTEXT {
128 ULONG GuidCount;
129 PSCSIWMIGUIDREGINFO GuidList;
130 PSCSIWMI_QUERY_REGINFO QueryWmiRegInfo;
131 PSCSIWMI_QUERY_DATABLOCK QueryWmiDataBlock;
132 PSCSIWMI_SET_DATABLOCK SetWmiDataBlock;
133 PSCSIWMI_SET_DATAITEM SetWmiDataItem;
134 PSCSIWMI_EXECUTE_METHOD ExecuteWmiMethod;
135 PSCSIWMI_FUNCTION_CONTROL WmiFunctionControl;
136 } SCSI_WMILIB_CONTEXT, *PSCSI_WMILIB_CONTEXT;
137
138 SCSIPORTAPI
139 BOOLEAN
140 DDKAPI
141 ScsiPortWmiDispatchFunction(
142 IN PSCSI_WMILIB_CONTEXT WmiLibInfo,
143 IN UCHAR MinorFunction,
144 IN PVOID DeviceContext,
145 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
146 IN PVOID DataPath,
147 IN ULONG BufferSize,
148 IN PVOID Buffer);
149
150 #define ScsiPortWmiFireAdapterEvent( \
151 HwDeviceExtension, \
152 Guid, \
153 InstanceIndex, \
154 EventDataSize, \
155 EventData) \
156 ScsiPortWmiFireLogicalUnitEvent( \
157 HwDeviceExtension, \
158 0xff, \
159 0, \
160 0, \
161 Guid, \
162 InstanceIndex, \
163 EventDataSize, \
164 EventData)
165
166 /*
167 * ULONG
168 * ScsiPortWmiGetReturnSize(
169 * PSCSIWMI_REQUEST_CONTEXT RequestContext);
170 */
171 #define ScsiPortWmiGetReturnSize(RequestContext) \
172 ((RequestContext)->ReturnSize)
173
174 /* UCHAR
175 * ScsiPortWmiGetReturnStatus(
176 * PSCSIWMI_REQUEST_CONTEXT RequestContext);
177 */
178 #define ScsiPortWmiGetReturnStatus(RequestContext) \
179 ((RequestContext)->ReturnStatus)
180
181 SCSIPORTAPI
182 VOID
183 DDKAPI
184 ScsiPortWmiPostProcess(
185 IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
186 IN UCHAR SrbStatus,
187 IN ULONG BufferUsed);
188
189 SCSIPORTAPI
190 VOID
191 DDKAPI
192 ScsiPortWmiFireLogicalUnitEvent(
193 IN PVOID HwDeviceExtension,
194 IN UCHAR PathId,
195 IN UCHAR TargetId,
196 IN UCHAR Lun,
197 IN LPGUID Guid,
198 IN ULONG InstanceIndex,
199 IN ULONG EventDataSize,
200 IN PVOID EventData);
201
202 #pragma pack(pop)
203
204 #ifdef __cplusplus
205 }
206 #endif
207
208 #endif /* __SCSIWMI_H */