1*c2c66affSColin Finck #include "miniport.h"
2*c2c66affSColin Finck #include "BusLogic958.h" // includes scsi.h
3*c2c66affSColin Finck #include "wmistr.h" // WMI definitions
4*c2c66affSColin Finck
5*c2c66affSColin Finck #include "BT958dt.h"
6*c2c66affSColin Finck
7*c2c66affSColin Finck #define BT958Wmi_MofResourceName L"MofResource"
8*c2c66affSColin Finck
9*c2c66affSColin Finck #define BT958_SETUP_GUID_INDEX 0
10*c2c66affSColin Finck
11*c2c66affSColin Finck GUID BT958WmiExtendedSetupInfoGuid = BT958Wmi_ExtendedSetupInfo_Guid;
12*c2c66affSColin Finck
13*c2c66affSColin Finck UCHAR
14*c2c66affSColin Finck BT958ReadExtendedSetupInfo
15*c2c66affSColin Finck (
16*c2c66affSColin Finck IN PHW_DEVICE_EXTENSION HwDeviceExtension,
17*c2c66affSColin Finck OUT PUCHAR Buffer
18*c2c66affSColin Finck );
19*c2c66affSColin Finck
20*c2c66affSColin Finck BOOLEAN
21*c2c66affSColin Finck BT958QueryWmiDataBlock
22*c2c66affSColin Finck (
23*c2c66affSColin Finck IN PVOID Context,
24*c2c66affSColin Finck IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
25*c2c66affSColin Finck IN ULONG GuidIndex,
26*c2c66affSColin Finck IN ULONG InstanceIndex,
27*c2c66affSColin Finck IN ULONG InstanceCount,
28*c2c66affSColin Finck IN OUT PULONG InstanceLengthArray,
29*c2c66affSColin Finck IN ULONG OutBufferSize,
30*c2c66affSColin Finck OUT PUCHAR Buffer
31*c2c66affSColin Finck );
32*c2c66affSColin Finck
33*c2c66affSColin Finck UCHAR
34*c2c66affSColin Finck BT958QueryWmiRegInfo
35*c2c66affSColin Finck (
36*c2c66affSColin Finck IN PVOID Context,
37*c2c66affSColin Finck IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
38*c2c66affSColin Finck OUT PWCHAR *MofResourceName
39*c2c66affSColin Finck );
40*c2c66affSColin Finck
41*c2c66affSColin Finck SCSIWMIGUIDREGINFO BT958GuidList[] =
42*c2c66affSColin Finck {
43*c2c66affSColin Finck {&BT958WmiExtendedSetupInfoGuid,
44*c2c66affSColin Finck 1,
45*c2c66affSColin Finck 0
46*c2c66affSColin Finck },
47*c2c66affSColin Finck };
48*c2c66affSColin Finck
49*c2c66affSColin Finck #define BT958GuidCount (sizeof(BT958GuidList) / sizeof(SCSIWMIGUIDREGINFO))
50*c2c66affSColin Finck
51*c2c66affSColin Finck
BT958WmiInitialize(IN PHW_DEVICE_EXTENSION HwDeviceExtension)52*c2c66affSColin Finck void BT958WmiInitialize(
53*c2c66affSColin Finck IN PHW_DEVICE_EXTENSION HwDeviceExtension
54*c2c66affSColin Finck )
55*c2c66affSColin Finck {
56*c2c66affSColin Finck PSCSI_WMILIB_CONTEXT WmiLibContext;
57*c2c66affSColin Finck
58*c2c66affSColin Finck WmiLibContext = &HwDeviceExtension->WmiLibContext;
59*c2c66affSColin Finck
60*c2c66affSColin Finck WmiLibContext->GuidList = BT958GuidList;
61*c2c66affSColin Finck WmiLibContext->GuidCount = BT958GuidCount;
62*c2c66affSColin Finck WmiLibContext->QueryWmiRegInfo = BT958QueryWmiRegInfo;
63*c2c66affSColin Finck WmiLibContext->QueryWmiDataBlock = BT958QueryWmiDataBlock;
64*c2c66affSColin Finck WmiLibContext->SetWmiDataItem = NULL;
65*c2c66affSColin Finck WmiLibContext->SetWmiDataBlock = NULL;
66*c2c66affSColin Finck WmiLibContext->WmiFunctionControl = NULL;
67*c2c66affSColin Finck WmiLibContext->ExecuteWmiMethod = NULL;
68*c2c66affSColin Finck }
69*c2c66affSColin Finck
70*c2c66affSColin Finck
71*c2c66affSColin Finck
72*c2c66affSColin Finck BOOLEAN
BT958WmiSrb(IN PHW_DEVICE_EXTENSION HwDeviceExtension,IN OUT PSCSI_WMI_REQUEST_BLOCK Srb)73*c2c66affSColin Finck BT958WmiSrb(
74*c2c66affSColin Finck IN PHW_DEVICE_EXTENSION HwDeviceExtension,
75*c2c66affSColin Finck IN OUT PSCSI_WMI_REQUEST_BLOCK Srb
76*c2c66affSColin Finck )
77*c2c66affSColin Finck /*++
78*c2c66affSColin Finck
79*c2c66affSColin Finck Routine Description:
80*c2c66affSColin Finck
81*c2c66affSColin Finck Process an SRB_FUNCTION_WMI request packet.
82*c2c66affSColin Finck
83*c2c66affSColin Finck This routine is called from the SCSI port driver synchronized with the
84*c2c66affSColin Finck kernel via BT958StartIo. On completion of WMI processing, the SCSI
85*c2c66affSColin Finck port driver is notified that the adapter can take another request, if
86*c2c66affSColin Finck any are available.
87*c2c66affSColin Finck
88*c2c66affSColin Finck Arguments:
89*c2c66affSColin Finck
90*c2c66affSColin Finck HwDeviceExtension - HBA miniport driver's adapter data storage.
91*c2c66affSColin Finck
92*c2c66affSColin Finck Srb - IO request packet.
93*c2c66affSColin Finck
94*c2c66affSColin Finck Return Value:
95*c2c66affSColin Finck
96*c2c66affSColin Finck Value to return to BT958StartIo caller. Always TRUE.
97*c2c66affSColin Finck
98*c2c66affSColin Finck --*/
99*c2c66affSColin Finck {
100*c2c66affSColin Finck UCHAR status;
101*c2c66affSColin Finck SCSIWMI_REQUEST_CONTEXT requestContext;
102*c2c66affSColin Finck ULONG retSize;
103*c2c66affSColin Finck BOOLEAN pending;
104*c2c66affSColin Finck
105*c2c66affSColin Finck // Validate our assumptions.
106*c2c66affSColin Finck ASSERT(Srb->Function == SRB_FUNCTION_WMI);
107*c2c66affSColin Finck ASSERT(Srb->Length == sizeof(SCSI_WMI_REQUEST_BLOCK));
108*c2c66affSColin Finck ASSERT(Srb->DataTransferLength >= sizeof(ULONG));
109*c2c66affSColin Finck ASSERT(Srb->DataBuffer);
110*c2c66affSColin Finck
111*c2c66affSColin Finck // Check if the WMI SRB is targeted for the adapter or one of the disks
112*c2c66affSColin Finck if (!(Srb->WMIFlags & SRB_WMI_FLAGS_ADAPTER_REQUEST))
113*c2c66affSColin Finck {
114*c2c66affSColin Finck
115*c2c66affSColin Finck // This is targeted to one of the disks, since there are no per disk
116*c2c66affSColin Finck // wmi information we return an error. Note that if there was per
117*c2c66affSColin Finck // disk information, then you'd likely have a differen WmiLibContext
118*c2c66affSColin Finck // and a different set of guids.
119*c2c66affSColin Finck Srb->DataTransferLength = 0;
120*c2c66affSColin Finck Srb->SrbStatus = SRB_STATUS_SUCCESS;
121*c2c66affSColin Finck
122*c2c66affSColin Finck }
123*c2c66affSColin Finck else
124*c2c66affSColin Finck {
125*c2c66affSColin Finck // Process the incoming WMI request.
126*c2c66affSColin Finck pending = ScsiPortWmiDispatchFunction(&HwDeviceExtension->WmiLibContext,
127*c2c66affSColin Finck Srb->WMISubFunction,
128*c2c66affSColin Finck HwDeviceExtension,
129*c2c66affSColin Finck &requestContext,
130*c2c66affSColin Finck Srb->DataPath,
131*c2c66affSColin Finck Srb->DataTransferLength,
132*c2c66affSColin Finck Srb->DataBuffer);
133*c2c66affSColin Finck
134*c2c66affSColin Finck // We assume that the wmi request will never pend so that we can
135*c2c66affSColin Finck // allocate the requestContext from stack. If the WMI request could
136*c2c66affSColin Finck // ever pend then we'd need to allocate the request context from
137*c2c66affSColin Finck // the SRB extension.
138*c2c66affSColin Finck //
139*c2c66affSColin Finck ASSERT(! pending);
140*c2c66affSColin Finck
141*c2c66affSColin Finck retSize = ScsiPortWmiGetReturnSize(&requestContext);
142*c2c66affSColin Finck status = ScsiPortWmiGetReturnStatus(&requestContext);
143*c2c66affSColin Finck
144*c2c66affSColin Finck // We can do this since we assume it is done synchronously
145*c2c66affSColin Finck Srb->DataTransferLength = retSize;
146*c2c66affSColin Finck
147*c2c66affSColin Finck //
148*c2c66affSColin Finck // Adapter ready for next request.
149*c2c66affSColin Finck //
150*c2c66affSColin Finck
151*c2c66affSColin Finck Srb->SrbStatus = status;
152*c2c66affSColin Finck }
153*c2c66affSColin Finck
154*c2c66affSColin Finck ScsiPortNotification(RequestComplete, HwDeviceExtension, Srb);
155*c2c66affSColin Finck ScsiPortNotification(NextRequest, HwDeviceExtension, NULL);
156*c2c66affSColin Finck
157*c2c66affSColin Finck return TRUE;
158*c2c66affSColin Finck }
159*c2c66affSColin Finck
160*c2c66affSColin Finck
161*c2c66affSColin Finck
162*c2c66affSColin Finck BOOLEAN
BT958QueryWmiDataBlock(IN PVOID Context,IN PSCSIWMI_REQUEST_CONTEXT RequestContext,IN ULONG GuidIndex,IN ULONG InstanceIndex,IN ULONG InstanceCount,IN OUT PULONG InstanceLengthArray,IN ULONG OutBufferSize,OUT PUCHAR Buffer)163*c2c66affSColin Finck BT958QueryWmiDataBlock(
164*c2c66affSColin Finck IN PVOID Context,
165*c2c66affSColin Finck IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
166*c2c66affSColin Finck IN ULONG GuidIndex,
167*c2c66affSColin Finck IN ULONG InstanceIndex,
168*c2c66affSColin Finck IN ULONG InstanceCount,
169*c2c66affSColin Finck IN OUT PULONG InstanceLengthArray,
170*c2c66affSColin Finck IN ULONG OutBufferSize,
171*c2c66affSColin Finck OUT PUCHAR Buffer
172*c2c66affSColin Finck )
173*c2c66affSColin Finck /*++
174*c2c66affSColin Finck
175*c2c66affSColin Finck Routine Description:
176*c2c66affSColin Finck
177*c2c66affSColin Finck This routine is a callback into the miniport to query for the contents of
178*c2c66affSColin Finck one or more instances of a data block. This callback may be called with
179*c2c66affSColin Finck an output buffer that is too small to return all of the data queried.
180*c2c66affSColin Finck In this case the callback is responsible to report the correct output
181*c2c66affSColin Finck buffer size needed.
182*c2c66affSColin Finck
183*c2c66affSColin Finck If the request can be completed immediately without pending,
184*c2c66affSColin Finck ScsiPortWmiPostProcess should be called from within this callback and
185*c2c66affSColin Finck FALSE returned.
186*c2c66affSColin Finck
187*c2c66affSColin Finck If the request cannot be completed within this callback then TRUE should
188*c2c66affSColin Finck be returned. Once the pending operations are finished the miniport should
189*c2c66affSColin Finck call ScsiPortWmiPostProcess and then complete the srb.
190*c2c66affSColin Finck
191*c2c66affSColin Finck Arguments:
192*c2c66affSColin Finck
193*c2c66affSColin Finck DeviceContext is a caller specified context value originally passed to
194*c2c66affSColin Finck ScsiPortWmiDispatchFunction.
195*c2c66affSColin Finck
196*c2c66affSColin Finck RequestContext is a context associated with the srb being processed.
197*c2c66affSColin Finck
198*c2c66affSColin Finck GuidIndex is the index into the list of guids provided when the
199*c2c66affSColin Finck miniport registered
200*c2c66affSColin Finck
201*c2c66affSColin Finck InstanceIndex is the index that denotes first instance of the data block
202*c2c66affSColin Finck is being queried.
203*c2c66affSColin Finck
204*c2c66affSColin Finck InstanceCount is the number of instances expected to be returned for
205*c2c66affSColin Finck the data block.
206*c2c66affSColin Finck
207*c2c66affSColin Finck InstanceLengthArray is a pointer to an array of ULONG that returns the
208*c2c66affSColin Finck lengths of each instance of the data block. This may be NULL when
209*c2c66affSColin Finck there is not enough space in the output buffer to fufill the request.
210*c2c66affSColin Finck In this case the miniport should call ScsiPortWmiPostProcess with
211*c2c66affSColin Finck a status of SRB_STATUS_DATA_OVERRUN and the size of the output buffer
212*c2c66affSColin Finck needed to fufill the request.
213*c2c66affSColin Finck
214*c2c66affSColin Finck BufferAvail on entry has the maximum size available to write the data
215*c2c66affSColin Finck blocks in the output buffer. If the output buffer is not large enough
216*c2c66affSColin Finck to return all of the data blocks then the miniport should call
217*c2c66affSColin Finck ScsiPortWmiPostProcess with a status of SRB_STATUS_DATA_OVERRUN
218*c2c66affSColin Finck and the size of the output buffer needed to fufill the request.
219*c2c66affSColin Finck
220*c2c66affSColin Finck Buffer on return is filled with the returned data blocks. Note that each
221*c2c66affSColin Finck instance of the data block must be aligned on a 8 byte boundry. This
222*c2c66affSColin Finck may be NULL when there is not enough space in the output buffer to
223*c2c66affSColin Finck fufill the request. In this case the miniport should call
224*c2c66affSColin Finck ScsiPortWmiPostProcess with a status of SRB_STATUS_DATA_OVERRUN and
225*c2c66affSColin Finck the size of the output buffer needed to fufill the request.
226*c2c66affSColin Finck
227*c2c66affSColin Finck
228*c2c66affSColin Finck Return Value:
229*c2c66affSColin Finck
230*c2c66affSColin Finck TRUE if request is pending else FALSE
231*c2c66affSColin Finck
232*c2c66affSColin Finck --*/
233*c2c66affSColin Finck {
234*c2c66affSColin Finck PHW_DEVICE_EXTENSION HwDeviceExtension = (PHW_DEVICE_EXTENSION)Context;
235*c2c66affSColin Finck ULONG size = 0;
236*c2c66affSColin Finck UCHAR status;
237*c2c66affSColin Finck
238*c2c66affSColin Finck //
239*c2c66affSColin Finck // Only ever registers 1 instance per guid
240*c2c66affSColin Finck ASSERT((InstanceIndex == 0) &&
241*c2c66affSColin Finck (InstanceCount == 1));
242*c2c66affSColin Finck
243*c2c66affSColin Finck switch (GuidIndex)
244*c2c66affSColin Finck {
245*c2c66affSColin Finck case BT958_SETUP_GUID_INDEX:
246*c2c66affSColin Finck {
247*c2c66affSColin Finck size = sizeof(BT958ExtendedSetupInfo)-1;
248*c2c66affSColin Finck if (OutBufferSize < size)
249*c2c66affSColin Finck {
250*c2c66affSColin Finck //
251*c2c66affSColin Finck // The buffer passed to return the data is too small
252*c2c66affSColin Finck //
253*c2c66affSColin Finck status = SRB_STATUS_DATA_OVERRUN;
254*c2c66affSColin Finck break;
255*c2c66affSColin Finck }
256*c2c66affSColin Finck
257*c2c66affSColin Finck if ( !BT958ReadExtendedSetupInfo(HwDeviceExtension,
258*c2c66affSColin Finck Buffer))
259*c2c66affSColin Finck {
260*c2c66affSColin Finck ASSERT(FALSE);
261*c2c66affSColin Finck size = 0;
262*c2c66affSColin Finck status = SRB_STATUS_ERROR;
263*c2c66affSColin Finck }
264*c2c66affSColin Finck else
265*c2c66affSColin Finck {
266*c2c66affSColin Finck *InstanceLengthArray = size;
267*c2c66affSColin Finck status = SRB_STATUS_SUCCESS;
268*c2c66affSColin Finck }
269*c2c66affSColin Finck break;
270*c2c66affSColin Finck }
271*c2c66affSColin Finck
272*c2c66affSColin Finck default:
273*c2c66affSColin Finck {
274*c2c66affSColin Finck status = SRB_STATUS_ERROR;
275*c2c66affSColin Finck }
276*c2c66affSColin Finck }
277*c2c66affSColin Finck
278*c2c66affSColin Finck ScsiPortWmiPostProcess( RequestContext,
279*c2c66affSColin Finck status,
280*c2c66affSColin Finck size);
281*c2c66affSColin Finck
282*c2c66affSColin Finck return status;
283*c2c66affSColin Finck }
284*c2c66affSColin Finck
285*c2c66affSColin Finck UCHAR
BT958QueryWmiRegInfo(IN PVOID Context,IN PSCSIWMI_REQUEST_CONTEXT RequestContext,OUT PWCHAR * MofResourceName)286*c2c66affSColin Finck BT958QueryWmiRegInfo(
287*c2c66affSColin Finck IN PVOID Context,
288*c2c66affSColin Finck IN PSCSIWMI_REQUEST_CONTEXT RequestContext,
289*c2c66affSColin Finck OUT PWCHAR *MofResourceName
290*c2c66affSColin Finck )
291*c2c66affSColin Finck /*++
292*c2c66affSColin Finck
293*c2c66affSColin Finck Routine Description:
294*c2c66affSColin Finck
295*c2c66affSColin Finck This routine is a callback into the driver to retrieve information about
296*c2c66affSColin Finck the guids being registered.
297*c2c66affSColin Finck
298*c2c66affSColin Finck Implementations of this routine may be in paged memory
299*c2c66affSColin Finck
300*c2c66affSColin Finck Arguments:
301*c2c66affSColin Finck
302*c2c66affSColin Finck DeviceObject is the device whose registration information is needed
303*c2c66affSColin Finck
304*c2c66affSColin Finck *RegFlags returns with a set of flags that describe all of the guids being
305*c2c66affSColin Finck registered for this device. If the device wants enable and disable
306*c2c66affSColin Finck collection callbacks before receiving queries for the registered
307*c2c66affSColin Finck guids then it should return the WMIREG_FLAG_EXPENSIVE flag. Also the
308*c2c66affSColin Finck returned flags may specify WMIREG_FLAG_INSTANCE_PDO in which case
309*c2c66affSColin Finck the instance name is determined from the PDO associated with the
310*c2c66affSColin Finck device object. Note that the PDO must have an associated devnode. If
311*c2c66affSColin Finck WMIREG_FLAG_INSTANCE_PDO is not set then Name must return a unique
312*c2c66affSColin Finck name for the device. These flags are ORed into the flags specified
313*c2c66affSColin Finck by the GUIDREGINFO for each guid.
314*c2c66affSColin Finck
315*c2c66affSColin Finck InstanceName returns with the instance name for the guids if
316*c2c66affSColin Finck WMIREG_FLAG_INSTANCE_PDO is not set in the returned *RegFlags. The
317*c2c66affSColin Finck caller will call ExFreePool with the buffer returned.
318*c2c66affSColin Finck
319*c2c66affSColin Finck *RegistryPath returns with the registry path of the driver. This is
320*c2c66affSColin Finck required
321*c2c66affSColin Finck
322*c2c66affSColin Finck *MofResourceName returns with the name of the MOF resource attached to
323*c2c66affSColin Finck the binary file. If the driver does not have a mof resource attached
324*c2c66affSColin Finck then this can be returned as NULL.
325*c2c66affSColin Finck
326*c2c66affSColin Finck *Pdo returns with the device object for the PDO associated with this
327*c2c66affSColin Finck device if the WMIREG_FLAG_INSTANCE_PDO flag is returned in
328*c2c66affSColin Finck *RegFlags.
329*c2c66affSColin Finck
330*c2c66affSColin Finck Return Value:
331*c2c66affSColin Finck
332*c2c66affSColin Finck status
333*c2c66affSColin Finck
334*c2c66affSColin Finck --*/
335*c2c66affSColin Finck {
336*c2c66affSColin Finck *MofResourceName = BT958Wmi_MofResourceName;
337*c2c66affSColin Finck return SRB_STATUS_SUCCESS;
338*c2c66affSColin Finck }
339*c2c66affSColin Finck
340*c2c66affSColin Finck
341*c2c66affSColin Finck UCHAR
BT958ReadExtendedSetupInfo(IN PHW_DEVICE_EXTENSION HwDeviceExtension,OUT PUCHAR Buffer)342*c2c66affSColin Finck BT958ReadExtendedSetupInfo(
343*c2c66affSColin Finck IN PHW_DEVICE_EXTENSION HwDeviceExtension,
344*c2c66affSColin Finck OUT PUCHAR Buffer
345*c2c66affSColin Finck )
346*c2c66affSColin Finck /*++
347*c2c66affSColin Finck
348*c2c66affSColin Finck Routine Description:
349*c2c66affSColin Finck
350*c2c66affSColin Finck Read the adapter setup information into the supplied buffer. The buffer
351*c2c66affSColin Finck must be RM_CFG_MAX_SIZE (255) bytes large.
352*c2c66affSColin Finck
353*c2c66affSColin Finck Arguments:
354*c2c66affSColin Finck
355*c2c66affSColin Finck HwDeviceExtension - HBA miniport driver's adapter data storage.
356*c2c66affSColin Finck
357*c2c66affSColin Finck Buffer - Buffer to hold adapter's setup information structure [manual 5-10].
358*c2c66affSColin Finck
359*c2c66affSColin Finck Return Value:
360*c2c66affSColin Finck
361*c2c66affSColin Finck TRUE on success, FALSE on failure.
362*c2c66affSColin Finck
363*c2c66affSColin Finck --*/
364*c2c66affSColin Finck {
365*c2c66affSColin Finck UCHAR numberOfBytes = sizeof(BT958ExtendedSetupInfo)-1;
366*c2c66affSColin Finck
367*c2c66affSColin Finck PHW_DEVICE_EXTENSION deviceExtension = HwDeviceExtension;
368*c2c66affSColin Finck BusLogic_HostAdapter_T *HostAdapter = &(deviceExtension->hcs);
369*c2c66affSColin Finck BusLogic_ExtendedSetupInformation_T ExtendedSetupInformation;
370*c2c66affSColin Finck BusLogic_RequestedReplyLength_T RequestedReplyLength = sizeof(ExtendedSetupInformation);
371*c2c66affSColin Finck BOOLEAN Result = TRUE;
372*c2c66affSColin Finck
373*c2c66affSColin Finck BusLogic_WmiExtendedSetupInformation_T WmiExtendedSetupInfo;
374*c2c66affSColin Finck PUCHAR SourceBuf = (PUCHAR) &WmiExtendedSetupInfo;
375*c2c66affSColin Finck
376*c2c66affSColin Finck
377*c2c66affSColin Finck //
378*c2c66affSColin Finck // Issue the Inquire Extended Setup Information command. Only genuine
379*c2c66affSColin Finck // BusLogic Host Adapters and TRUE clones support this command. Adaptec 1542C
380*c2c66affSColin Finck // series Host Adapters that respond to the Geometry Register I/O port will
381*c2c66affSColin Finck // fail this command.
382*c2c66affSColin Finck RequestedReplyLength = sizeof(ExtendedSetupInformation);
383*c2c66affSColin Finck if (BusLogic_Command(HostAdapter,
384*c2c66affSColin Finck BusLogic_InquireExtendedSetupInformation,
385*c2c66affSColin Finck &RequestedReplyLength,
386*c2c66affSColin Finck sizeof(RequestedReplyLength),
387*c2c66affSColin Finck &ExtendedSetupInformation,
388*c2c66affSColin Finck sizeof(ExtendedSetupInformation))
389*c2c66affSColin Finck != sizeof(ExtendedSetupInformation))
390*c2c66affSColin Finck {
391*c2c66affSColin Finck Result = FALSE;
392*c2c66affSColin Finck }
393*c2c66affSColin Finck
394*c2c66affSColin Finck WmiExtendedSetupInfo.BusType = ExtendedSetupInformation.BusType;
395*c2c66affSColin Finck WmiExtendedSetupInfo.BIOS_Address = ExtendedSetupInformation.BIOS_Address;
396*c2c66affSColin Finck WmiExtendedSetupInfo.ScatterGatherLimit = ExtendedSetupInformation.ScatterGatherLimit;
397*c2c66affSColin Finck WmiExtendedSetupInfo.MailboxCount = ExtendedSetupInformation.MailboxCount;
398*c2c66affSColin Finck WmiExtendedSetupInfo.BaseMailboxAddress = ExtendedSetupInformation.BaseMailboxAddress;
399*c2c66affSColin Finck WmiExtendedSetupInfo.FastOnEISA = ExtendedSetupInformation.Misc.FastOnEISA;
400*c2c66affSColin Finck WmiExtendedSetupInfo.LevelSensitiveInterrupt = ExtendedSetupInformation.Misc.LevelSensitiveInterrupt;
401*c2c66affSColin Finck WmiExtendedSetupInfo.FirmwareRevision[0] = ExtendedSetupInformation.FirmwareRevision[0];
402*c2c66affSColin Finck WmiExtendedSetupInfo.FirmwareRevision[1] = ExtendedSetupInformation.FirmwareRevision[1];
403*c2c66affSColin Finck WmiExtendedSetupInfo.FirmwareRevision[2] = ExtendedSetupInformation.FirmwareRevision[2];
404*c2c66affSColin Finck WmiExtendedSetupInfo.HostWideSCSI = ExtendedSetupInformation.HostWideSCSI;
405*c2c66affSColin Finck WmiExtendedSetupInfo.HostDifferentialSCSI= ExtendedSetupInformation.HostDifferentialSCSI;
406*c2c66affSColin Finck WmiExtendedSetupInfo.HostSupportsSCAM = ExtendedSetupInformation.HostSupportsSCAM;
407*c2c66affSColin Finck WmiExtendedSetupInfo.HostUltraSCSI = ExtendedSetupInformation.HostUltraSCSI;
408*c2c66affSColin Finck WmiExtendedSetupInfo.HostSmartTermination= ExtendedSetupInformation.HostSmartTermination;
409*c2c66affSColin Finck
410*c2c66affSColin Finck for (; numberOfBytes; numberOfBytes--)
411*c2c66affSColin Finck {
412*c2c66affSColin Finck *Buffer++ = *SourceBuf++;
413*c2c66affSColin Finck }
414*c2c66affSColin Finck return TRUE;
415*c2c66affSColin Finck }
416*c2c66affSColin Finck
417