NewSlaveDmaChannel method creates a new instance of a subordinate DMA channel.
NTSTATUS NewSlaveDmaChannel( [out] PDMACHANNELSLAVE *DmaChannel, [in] PUNKNOWN OuterUnknown, [in] PRESOURCELIST ResourceList, [in] ULONG DmaIndex, [in] ULONG MaximumLength, [in] BOOLEAN DemandMode, [in] DMA_SPEED DmaSpeed );
- DmaChannel [out]
Pointer to a caller-allocated pointer variable into which the method writes a pointer to the new DMA-channel object's IDmaChannelSlave interface. Specify a valid, non-NULL pointer value for this parameter.
- OuterUnknown [in]
Pointer to the IUnknown interface of an object that needs to aggregate the DMA-channel object. This parameter is optional. If aggregation is not required, specify this parameter as NULL.
- ResourceList [in]
Pointer to an IResourceList object. This resource list contains the resource that describes the DMA channel.
- DmaIndex [in]
Index in the resource list of the DMA-channel descriptor. The function uses this value as a call parameter to the ResourceList object's IResourceList::FindxxxEntry method.
- MaximumLength [in]
Maximum length in bytes of the cyclic DMA buffer that will be associated with this channel.
- DemandMode [in]
Indicates whether the device associated with the DMA channel supports demand mode.
- DmaSpeed [in]
The DMA speed can be specified as one of the following DMA_SPEED enumeration values: Compatible, TypeA, TypeB, TypeC, or TypeF.
NewSlaveDmaChannel returns STATUS_SUCCESS if the call was successful. Otherwise, the method returns an appropriate error code.
Parameters MaximumLength, DemandMode, and DmaSpeed are similar in meaning to the members of the DEVICE_DESCRIPTION structure with the same names.
A WaveCyclic device that lacks DMA-hardware capabilities is referred to as a subordinate device. In contrast, a master device has built-in bus-mastering DMA hardware. A subordinate device has to rely on the system DMA controller to perform any data transfers that it requires. The
NewSlaveDmaChannel method creates a DMA-channel object for a subordinate device. To create a DMA-channel object for a master device, call the IPortWaveCyclic::NewMasterDmaChannel method instead. The sb16 sample audio driver in the Microsoft Windows Driver Kit (WDK) is an example of a WaveCyclic miniport driver for a subordinate device. For more information about master and subordinate devices, see IDmaChannel and IDmaChannelSlave.
The DmaChannel, OuterUnknown, and ResourceList parameters follow the reference-counting conventions for COM objects.