--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/drivers/dmadefs.h Mon Jan 18 21:31:10 2010 +0200
@@ -0,0 +1,739 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// include/drivers/dmadefs.h
+// DMA Framework - General class, enum, constant and type definitions.
+//
+//
+
+#ifndef __DMADEFS_H__
+#define __DMADEFS_H__
+
+
+#include <e32def.h>
+
+
+/** The client request callback type */
+enum TDmaCallbackType
+ {
+ /** Transfer request completion callback */
+ EDmaCallbackRequestCompletion = 0x01,
+ /** Transfer request completion callback - source side */
+ EDmaCallbackRequestCompletion_Src = 0x02,
+ /** Transfer request completion callback - destination side */
+ EDmaCallbackRequestCompletion_Dst = 0x04,
+
+ /** Descriptor completion callback */
+ EDmaCallbackDescriptorCompletion = 0x08,
+ /** Descriptor completion callback - source side */
+ EDmaCallbackDescriptorCompletion_Src = 0x10,
+ /** Descriptor completion callback - destination side */
+ EDmaCallbackDescriptorCompletion_Dst = 0x20,
+
+ /** Frame completion callback */
+ EDmaCallbackFrameCompletion = 0x40,
+ /** Frame completion callback - source side */
+ EDmaCallbackFrameCompletion_Src = 0x80,
+ /** Frame completion callback - destination side */
+ EDmaCallbackFrameCompletion_Dst = 0x100,
+
+ /** H/W descriptor pause event callback */
+ EDmaCallbackLinkedListPaused = 0x200,
+ /** H/W descriptor pause event callback - source side */
+ EDmaCallbackLinkedListPaused_Src = 0x400,
+ /** H/W descriptor pause event callback - destination side */
+ EDmaCallbackLinkedListPaused_Dst = 0x800
+ };
+
+
+/** The outcome of the transfer request */
+enum TDmaResult
+ {
+ /** Completed without error */
+ EDmaResultOK = 0,
+ /** There was an error */
+ EDmaResultError
+ };
+
+
+
+/** To be used with address mode field of the DMA transfer config struct.
+
+ @see TDmaTransferConfig::iAddrMode
+*/
+enum TDmaAddrMode
+ {
+ /** Constant addressing. The address remains the same for consecutive
+ accesses.
+ */
+ KDmaAddrModeConstant,
+ /** Post-increment addressing. The address increases by the element size
+ after each access.
+ */
+ KDmaAddrModePostIncrement,
+ /** Post-decrement addressing. The address decreases by the element size
+ after each access.
+ */
+ KDmaAddrModePostDecrement,
+ /** 1D-index addressing. The address always increases by the element size
+ plus the element skip value after each access.
+ */
+ KDmaAddrMode1DIndex,
+ /** 2D-index addressing. The address increases by the element size plus the
+ element skip value - but only within a frame. Once a full frame has been
+ transferred, the address increases by the element size plus the element
+ skip value plus the frame skip value.
+ */
+ KDmaAddrMode2DIndex
+ };
+
+
+/** To be used with the burst size field of the DMA transfer config struct.
+
+ @see SDmacCaps::iBurstTransactions
+ @see TDmaTransferConfig::iBurstSize
+*/
+enum TDmaBurstSize
+ {
+ /** Don't use burst transactions */
+ KDmaNoBursts = -1,
+ /** Don't care (the default) */
+ KDmaBurstSizeAny = 0x00,
+ /** 4 bytes */
+ KDmaBurstSize4 = 0x04,
+ /** 8 bytes */
+ KDmaBurstSize8 = 0x08,
+ /** 16 bytes */
+ KDmaBurstSize16 = 0x10,
+ /** 32 bytes */
+ KDmaBurstSize32 = 0x20,
+ /** 64 bytes */
+ KDmaBurstSize64 = 0x40,
+ /** 128 bytes */
+ KDmaBurstSize128 = 0x80
+ };
+
+
+/** To be used with the flags field of the DMA transfer config struct.
+
+ @see TDmaTransferConfig::iFlags
+*/
+enum TDmaTransferFlags
+ {
+ /** Location is address of a memory buffer (as opposed to a peripheral or a
+ register).
+ */
+ KDmaMemAddr = 0x01,
+ /** Address is a physical address (as opposed to a linear one).
+ If it is a memory address then KDmaMemIsContiguous will need to be set
+ as well.
+ */
+ KDmaPhysAddr = 0x02,
+ /** Target memory is known to be physically contiguous, hence there is
+ no need for the framework to check for memory fragmentation.
+ */
+ KDmaMemIsContiguous = 0x04,
+ /** Don't use packed access (if possible) */
+ KDmaDontUsePacked = 0x08,
+ /** Location is big endian (little endian if not set).
+
+ To have any effect, this flag requires the DMAC to support endianness
+ conversion.
+
+ @see SDmacCaps::iEndiannessConversion
+ */
+ KDmaBigEndian = 0x10,
+ /** Don't do endianness conversion even if applicable.
+
+ To have any effect, this flag requires the DMAC to support endianness
+ conversion.
+
+ @see SDmacCaps::iEndiannessConversion
+ */
+ KDmaLockEndian = 0x20,
+ /** Execute client request callback after each subtransfer (streaming /
+ loop case).
+
+ This option is only taken into account if the respective
+ TDmaTransferConfig::iRepeatCount is non-zero.
+
+ The callback will complete with a TDmaCallbackType of
+ EDmaCallbackRequestCompletion (even if the repeat counts for source and
+ destination are different), unless the flag
+ TDmaPILFlags::KDmaAsymCompletionCallback is set too, in which case what
+ is described there applies.
+ */
+ KDmaCallbackAfterEveryTransfer = 0x40,
+ /** Execute client request callback after each completed hardware
+ descriptor.
+
+ Requires the DMAC to support this feature. Unless the DMAC supports
+ asymmetric descriptor interrupts as well, this flag should not be set
+ on only one (source or destination) side.
+
+ @see SDmacCaps::iDescriptorInterrupt
+ @see SDmacCaps::iAsymDescriptorInterrupt
+ */
+ KDmaCallbackAfterEveryDescriptor = 0x80,
+ /** Execute client request callback after each completed frame.
+
+ Requires the DMAC to support this feature. Unless the DMAC supports
+ asymmetric frame interrupts as well, this flag should not be set on
+ only one (source or destination) side.
+
+ @see SDmacCaps::iFrameInterrupt
+ @see SDmacCaps::iAsymFrameInterrupt
+ */
+ KDmaCallbackAfterEveryFrame = 0x100
+ };
+
+
+/** To be used with the synchronization flags field of a DMA transfer
+ config struct.
+
+ @see SDmacCaps::iSynchronizationTypes
+ @see TDmaTransferConfig::iSyncFlags
+*/
+enum TDmaTransferSyncFlags
+ {
+ /** Leave the decision on whether the transfer is hardware synchronized at
+ this end (either source or destination) to the Framework. This is the
+ default.
+ */
+ KDmaSyncAuto = 0x00,
+ /** Transfer is not hardware synchronized at this end (either source or
+ destination).
+ */
+ KDmaSyncNone = 0x01,
+ /** Transfer is hardware synchronized at this end (either source or
+ destination). This option can also be used on its own, without any
+ of the following sync sizes.
+ */
+ KDmaSyncHere = 0x02,
+ /** H/W synchronized at this end: transfer one ELEMENT (a number of
+ bytes, depending on the configured element size) per sync event.
+ */
+ KDmaSyncSizeElement = 0x04,
+ /** H/W synchronized at this end: transfer one FRAME (a number of
+ elements, depending on the configured frame size) per sync event.
+ */
+ KDmaSyncSizeFrame = 0x08,
+ /** H/W synchronized at this end: transfer one BLOCK (a number of
+ frames, depending on the configured transfer size) per sync
+ event. This is the most common use case.
+ */
+ KDmaSyncSizeBlock = 0x10,
+ /** H/W synchronized at this end: transfer one PACKET (a number of
+ elements, depending on the configured packet size) per sync event.
+ In cases where the transfer block size is not a multiple of the
+ packet size the last packet will consist of the remaining elements.
+ */
+ KDmaSyncSizePacket = 0x20
+ };
+
+
+/** To be used with the Graphics operation field of a DMA transfer request.
+
+ @see TDmaTransferArgs::iGraphicsOps
+*/
+enum TDmaGraphicsOps
+ {
+ /** Don't use any graphics acceleration feature (the default) */
+ KDmaGraphicsOpNone = 0x00,
+ /** Enable graphics acceleration feature 'Constant Fill' */
+ KDmaGraphicsOpConstantFill = 0x01,
+ /** Enable graphics acceleration feature 'TransparentCopy' */
+ KDmaGraphicsOpTransparentCopy = 0x02
+ };
+
+
+/** To be used with the PIL flags field of a DMA transfer request.
+
+ @see TDmaTransferArgs::iFlags
+*/
+enum TDmaPILFlags
+ {
+ /** Request a different max transfer size (for instance for test
+ purposes).
+ */
+ KDmaAltTransferLength = 0x01,
+ /** Execute client request callback in ISR context instead of from a
+ DFC.
+ */
+ KDmaRequestCallbackFromIsr = 0x02,
+ /** Execute descriptor completion callback in ISR context instead of
+ from a DFC. This option is to be used in conjunction with the
+ TDmaTransferFlags::KDmaCallbackAfterEveryDescriptor flag.
+ */
+ KDmaDescriptorCallbackFromIsr = 0x04,
+ /** Execute frame completion callback in ISR context instead of
+ from a DFC. This option is to be used in conjunction with the
+ TDmaTransferFlags::KDmaCallbackAfterEveryFrame flag.
+ */
+ KDmaFrameCallbackFromIsr = 0x08,
+ /** Execute the client request callback separately for source and
+ destination subtransfers.
+
+ This flag also determines the TDmaCallbackType value returned. If set,
+ the callback will complete with EDmaCallbackRequestCompletion_Src or
+ EDmaCallbackRequestCompletion_Dst, respectively, instead of with
+ EDmaCallbackRequestCompletion.
+
+ Requires the DMAC to support this feature.
+
+ @see SDmacCaps::iAsymCompletionInterrupt
+ */
+ KDmaAsymCompletionCallback = 0x10,
+ /** Execute the descriptor completion callback separately for source
+ and destination subtransfers.
+
+ This flag modifies the behaviour of the
+ TDmaTransferFlags::KDmaCallbackAfterEveryDescriptor flag and also
+ determines the TDmaCallbackType value returned. If set, the callback
+ will complete with EDmaCallbackDescriptorCompletion_Src or
+ EDmaCallbackDescriptorCompletion_Dst, respectively, instead of with
+ EDmaCallbackDescriptorCompletion.
+
+ Requires the DMAC to support this feature.
+
+ @see SDmacCaps::iAsymDescriptorInterrupt
+ */
+ KDmaAsymDescriptorCallback = 0x20,
+ /** Execute the frame completion callback separately for source and
+ destination subtransfers.
+
+ This flag modifies the behaviour of the
+ TDmaTransferFlags::KDmaCallbackAfterEveryFrame flag. If set, the
+ callback will complete with EDmaCallbackFrameCompletion_Src or
+ EDmaCallbackFrameCompletion_Dst, respectively, instead of with
+ EDmaCallbackFrameCompletion.
+
+ Requires the DMAC to support this feature.
+
+ @see SDmacCaps::iAsymFrameInterrupt
+ */
+ KDmaAsymFrameCallback = 0x40,
+ /** This transfer (only) should use the channel priority indicated by
+ TDmaTransferArgs::iChannelPriority.
+ */
+ KDmaRequestChannelPriority = 0x80
+ };
+
+
+/** Values which can be used with the priority field when opening a channel
+ and/or when fragmenting a transfer request.
+
+ @see TDmaChannel::SCreateInfo::iPriority
+ @see TDmaTransferArgs::iChannelPriority
+*/
+enum TDmaPriority
+ {
+ /** No transfer priority preference (don't care value) */
+ KDmaPriorityNone = 0x0,
+ /** Platform-independent transfer priority 1 (lowest) */
+ KDmaPriority1 = 0x80000001,
+ /** Platform-independent transfer priority 2 */
+ KDmaPriority2 = 0x80000002,
+ /** Platform-independent transfer priority 3 */
+ KDmaPriority3 = 0x80000003,
+ /** Platform-independent transfer priority 4 */
+ KDmaPriority4 = 0x80000004,
+ /** Platform-independent transfer priority 5 */
+ KDmaPriority5 = 0x80000005,
+ /** Platform-independent transfer priority 6 */
+ KDmaPriority6 = 0x80000006,
+ /** Platform-independent transfer priority 7 */
+ KDmaPriority7 = 0x80000007,
+ /** Platform-independent transfer priority 8 (highest) */
+ KDmaPriority8 = 0x80000008
+ };
+
+
+/** Contains the configuration values for either the source or the
+ destination side of a DMA transfer.
+
+ Note that some fields (notably iElementSize, iElementsPerFrame and
+ iFramesPerTransfer) may only differ between source and destination if
+ the underlying DMAC supports this.
+
+ @see SDmacCaps::iSrcDstAsymmetry
+ @see TDmaTransferArgs::iSrcConfig
+ @see TDmaTransferArgs::iDstConfig
+*/
+struct TDmaTransferConfig
+ {
+friend struct TDmaTransferArgs;
+
+ /** Default constructor. Initializes all fields with meaningful default
+ values.
+ */
+#ifdef DMA_APIV2
+ KIMPORT_C
+#endif
+ TDmaTransferConfig();
+
+ /** Intended for general use ie. not 2D or 1D transfers
+ */
+#ifdef DMA_APIV2
+ KIMPORT_C
+#endif
+ TDmaTransferConfig (
+ TUint32 aAddr,
+ TUint aTransferFlags,
+ TDmaAddrMode aAddrMode = KDmaAddrModePostIncrement,
+ TUint aSyncFlags = KDmaSyncAuto,
+ TDmaBurstSize aBurstSize = KDmaBurstSizeAny,
+ TUint aElementSize = 0,
+ TUint aElementsPerPacket = 0,
+ TUint aPslTargetInfo = 0,
+ TInt aRepeatCount = 0
+ );
+
+ /** Intended for 1D and 2D transfers
+ */
+#ifdef DMA_APIV2
+ KIMPORT_C
+#endif
+ TDmaTransferConfig (
+ TUint32 aAddr,
+ TUint aElementSize,
+ TUint aElementsPerFrame,
+ TUint aFramesPerTransfer,
+ TInt aElementSkip,
+ TInt aFrameSkip,
+ TUint aTransferFlags,
+ TUint aSyncFlags = KDmaSyncAuto,
+ TDmaBurstSize aBurstSize = KDmaBurstSizeAny,
+ TUint aElementsPerPacket = 0,
+ TUint aPslTargetInfo = 0,
+ TInt aRepeatCount = 0
+ );
+
+ /** Transfer start address */
+ TUint32 iAddr;
+ /** Address mode */
+ TDmaAddrMode iAddrMode;
+ /** Element size in bytes (1/2/4/8) */
+ TUint iElementSize;
+ /** Number of elements per frame */
+ TUint iElementsPerFrame;
+ /** Number of elements per packet */
+ TUint iElementsPerPacket;
+ /** Number of frames to transfer (result is the transfer block) */
+ TUint iFramesPerTransfer;
+ /** Element skip in bytes (for addr modes E1DIndex or E2DIndex) */
+ TInt iElementSkip;
+ /** Frame skip in bytes (for addr mode E2DIndex) */
+ TInt iFrameSkip;
+ /** Use burst transactions of the specified size (in bytes)
+ @see TDmaBurstSize
+ */
+ TInt iBurstSize;
+ /** PIL src/dst config flags.
+ @see TDmaTransferFlags
+ */
+ TUint32 iFlags;
+ /** Transfer synchronization flags.
+ @see TDmaTransferSyncFlags
+ */
+ TUint32 iSyncFlags;
+ /** Information passed to the PSL */
+ TUint iPslTargetInfo;
+ /** How often to repeat this (sub-)transfer:
+ 0 no repeat (the default)
+ 1..n once / n times
+ -1 endlessly.
+ */
+ TInt iRepeatCount;
+ /** Structure contents delta vector (usage tbd) */
+ TUint32 iDelta;
+ /** Reserved for future use */
+ TUint32 iReserved;
+
+private:
+ /** Private constructor. Initializes fields with the values passed in by
+ the legacy version of the DDmaRequest::Fragment() call.
+ */
+ TDmaTransferConfig(TUint32 aAddr, TUint aFlags, TBool aAddrInc);
+ };
+
+
+/** To be used by the client to pass DMA transfer request details to the
+ framework.
+
+ Also used internally by the framework as a pseudo descriptor if the
+ controller doesn't support hardware descriptors (scatter/gather LLI).
+
+ @see DDmaRequest::Fragment
+*/
+struct TDmaTransferArgs
+ {
+ friend class DDmaRequest;
+ friend class TDmaChannel;
+ friend class TDmac;
+ friend class DmaChannelMgr;
+
+ /** Default constructor. Initializes all fields with meaningful default
+ values.
+ */
+#ifdef DMA_APIV2
+ KIMPORT_C
+#endif
+ TDmaTransferArgs();
+
+ /** For transfers where src and dst TDmaTransferConfig structs share some
+ of the same options ie. iDmaTransferFlags, iAddrMode, iSyncFlags,
+ iBurstSize, and iElementSize.
+
+ @param aSrcAddr
+ @param aDstAddr
+ @param aCount Number of bytes to transfer
+ @param aDmaTransferFlags Bitmask of TDmaTransferFlags for src and dst
+ @param aDmaSyncFlags Bitmask of TDmaTransferSyncFlags for src and dst
+ @param aMode Address mode for src and dst
+ @param aDmaPILFlags Bitmask of TDmaPILFlags
+ @param aElementSize In bytes (1/2/4/8) for src and dst
+ @param aChannelPriority
+ @param aBurstSize for src and dst
+ @param aPslRequestInfo Info word passed to the PSL
+ @param aGraphicOp Graphics operation to be executed
+ @param aColour Colour value for graphics operation
+ */
+#ifdef DMA_APIV2
+ KIMPORT_C
+#endif
+ TDmaTransferArgs (
+ TUint aSrcAddr, TUint aDstAddr, TUint aCount,
+ TUint aDmaTransferFlags, TUint aDmaSyncFlags = KDmaSyncAuto,
+ TUint aDmaPILFlags = 0,
+ TDmaAddrMode aMode = KDmaAddrModePostIncrement, TUint aElementSize = 0,
+ TUint aChannelPriority = KDmaPriorityNone,
+ TDmaBurstSize aBurstSize = KDmaBurstSizeAny, TUint aPslRequestInfo = 0,
+ TDmaGraphicsOps aGraphicOp = KDmaGraphicsOpNone, TUint32 aColour = 0
+ );
+
+ /** For transfers needing specific options for source and destination
+ TDmaTransferConfig structs.
+
+ @param aSrc Configuration values for the source
+ @param aDst Configuration values for the destination
+ @param aFlags @see TDmaPILFlags
+ @param aChannelPriority Use for this request (only) the indicated
+ channel priority. Requires KDmaRequestChannelPriority to be set in
+ iFlags as well. @see TDmaPriority
+
+ @param aPslRequestInfo Info word passed to the PSL
+ @param aGraphicOp Graphics operation to be executed
+ @param aColour Colour value for graphics operation
+ */
+#ifdef DMA_APIV2
+ KIMPORT_C
+#endif
+ TDmaTransferArgs (
+ const TDmaTransferConfig& aSrc,
+ const TDmaTransferConfig& aDst,
+ TUint32 aFlags = 0,
+ TUint aChannelPriority = KDmaPriorityNone,
+ TUint aPslRequestInfo = 0,
+ TDmaGraphicsOps aGraphicOp = KDmaGraphicsOpNone, TUint32 aColour = 0
+ );
+
+ /** Configuration values for the source */
+ TDmaTransferConfig iSrcConfig;
+ /** Configuration values for the destination */
+ TDmaTransferConfig iDstConfig;
+
+ /** Number of bytes to transfer (optional).
+
+ A non-zero value here must be consistent with iElementSize,
+ iElementsPerFrame and iFramesPerTransfer in iSrcConfig and iDstConfig
+ if the latter are specified as well (or instead, they may be left at
+ their default values of zero).
+
+ If zero, the PIL will fill in a value calculated from multiplying
+ iElementSize, iElementsPerFrame and iFramesPerTransfer in iSrcConfig,
+ so that the PSL can rely on it being always non-zero and valid.
+ */
+ TUint iTransferCount;
+ /** Graphics operation to be executed */
+ TDmaGraphicsOps iGraphicsOps;
+ /** Colour value for graphics operations */
+ TUint32 iColour;
+ /** PIL common flags
+ @see TDmaPILFlags
+ */
+ TUint32 iFlags;
+ /** Use for this request (only) the indicated channel priority.
+ Requires KDmaRequestChannelPriority to be set in iFlags as well.
+ @see TDmaPriority
+ */
+ TUint iChannelPriority;
+ /** Info word passed to the PSL */
+ TUint iPslRequestInfo;
+
+ /** Structure contents delta vector (usage tbd) */
+ TUint32 iDelta;
+ /** Reserved for future use */
+ TUint32 iReserved1;
+
+private:
+ /** Private constructor. Initializes fields with the values passed in by
+ the legacy version of the DDmaRequest::Fragment() call.
+ */
+ TDmaTransferArgs(TUint32 aSrcAddr, TUint32 aDstAddr, TInt aCount,
+ TUint aFlags, TUint32 aPslInfo);
+ /** Stores the PSL cookie returned by TDmaChannel::PslId() at request
+ fragmentation time.
+ The value PslId() is often (but not necessarily) identical with the
+ client's TDmaChannel::SCreateInfo::iCookie, which gets passed by the
+ PIL into DmaChannelMgr::Open() as 'aOpenId'.
+ */
+ TUint32 iChannelCookie;
+ /** Reserved for future use */
+ TUint32 iReserved2;
+ };
+
+
+/** DMAC capabilities info structure.
+
+ Instances are to be filled in by the PSL and then linked to via TDmaChannel
+ objects after they have been opened.
+
+ The contents may vary even between channels on the same DMAC (but will
+ remain constant for a given channel for the duration that it is open),
+ depending on static or dynamic factors which only the PSL knows about.
+
+ @see TDmaChannel::Open
+ @see TDmaChannel::DmacCaps
+*/
+struct SDmacCaps
+ {
+ /** DMAC supports n + 1 different channel priorities. */
+ TUint iChannelPriorities;
+ /** DMAC supports the pausing and resuming of channels. */
+ TBool iChannelPauseAndResume;
+ /** DMA addresses must be aligned on an element size boundary. */
+ TBool iAddrAlignedToElementSize;
+ /** DMAC supports 1D (element) index addressing in hardware. */
+ TBool i1DIndexAddressing;
+ /** DMAC supports 2D (frame) index addressing in hardware. */
+ TBool i2DIndexAddressing;
+ /** DMAC supports these transfer synchronization types (bitmap of values).
+
+ @see TDmaTransferSyncFlags
+ */
+ TUint iSynchronizationTypes;
+ /** DMAC supports burst transactions with these sizes (bitmap of values).
+
+ @see TDmaBurstSize
+ */
+ TUint iBurstTransactions;
+ /** DMAC supports a 'h/w descriptor complete' interrupt. */
+ TBool iDescriptorInterrupt;
+ /** DMAC supports a 'frame transfer complete' interrupt. */
+ TBool iFrameInterrupt;
+ /** DMAC supports a 'linked-list pause event' interrupt. */
+ TBool iLinkedListPausedInterrupt;
+ /** DMAC supports endianness conversion. */
+ TBool iEndiannessConversion;
+ /** DMAC supports these graphics operations (bitmap of values).
+
+ @see TDmaGraphicsOps
+ */
+ TUint iGraphicsOps;
+ /** DMAC supports repeated transfers (loops). */
+ TBool iRepeatingTransfers;
+ /** DMAC supports logical channel linking (chaining). */
+ TBool iChannelLinking;
+ /** DMAC supports scatter/gather mode (linked list items). */
+ TBool iHwDescriptors;
+ /** DMAC supports asymmetric source and destination transfer
+ parameters (such as element size).
+ */
+ TBool iSrcDstAsymmetry;
+ /** DMAC supports asymmetric h/w descriptor lists.
+
+ ETrue here requires ETrue for iHwDescriptors and iSrcDstAsymmetry as
+ well.
+ */
+ TBool iAsymHwDescriptors;
+ /** DMAC with asymmetric descriptor support has the limitation that the
+ number of bytes transferred in source and destination must be equal in
+ every link segment (i.e. in each src/dst descriptor pair).
+
+ ETrue here requires ETrue for iAsymHwDescriptors as well.
+ */
+ TBool iBalancedAsymSegments;
+ /** DMAC supports separate transfer completion notifications for source and
+ destination side subtransfers.
+
+ This capability is required for the asymmetric transfer completion
+ callback API feature.
+
+ @see TDmaPILFlags::KDmaAsymCompletionCallback
+ */
+ TBool iAsymCompletionInterrupt;
+ /** DMAC supports separate descriptor completion notifications for source and
+ destination side.
+
+ This capability is required for the asymmetric descriptor completion
+ callback API feature.
+
+ ETrue here requires ETrue for both iDescriptorInterrupt and
+ iAsymHwDescriptors as well.
+
+ @see TDmaPILFlags::KDmaAsymDescriptorCallback
+ */
+ TBool iAsymDescriptorInterrupt;
+ /** DMAC supports separate frame completion notifications for source and
+ destination side.
+
+ This capability is required for the asymmetric frame completion
+ callback API feature.
+
+ ETrue here requires ETrue for iFrameInterrupt as well.
+
+ @see TDmaPILFlags::KDmaAsymFrameCallback
+ */
+ TBool iAsymFrameInterrupt;
+
+ /** Reserved for future use */
+ TUint32 iReserved[5];
+ };
+
+
+struct TDmaV2TestInfo
+ {
+ enum {KMaxChannels=32};
+ /** Maximum transfer size in bytes for all channels (ie. the minimum of all channels' maximum size)*/
+ TUint iMaxTransferSize;
+ /** 3->Memory buffers must be 4-byte aligned, 7->8-byte aligned, ... */
+ TUint iMemAlignMask;
+ /** Cookie to pass to DDmaRequest::Fragment for memory-memory transfer */
+ TUint32 iMemMemPslInfo;
+ /** Number of test single-buffer channels */
+ TInt iMaxSbChannels;
+ /** Pointer to array containing single-buffer test channel ids */
+ TUint32 iSbChannels[KMaxChannels];
+ /** Number of test double-buffer channels */
+ TInt iMaxDbChannels;
+ /** Pointer to array containing double-buffer test channel ids */
+ TUint32 iDbChannels[KMaxChannels];
+ /** Number of test scatter-gather channels */
+ TInt iMaxSgChannels;
+ /** Pointer to array containing scatter-gather test channel ids */
+ TUint32 iSgChannels[KMaxChannels];
+ };
+
+
+#endif // #ifndef __DMADEFS_H__