diff -r c734af59ce98 -r 5b5d147c7838 kernel/eka/include/drivers/dmadefs.h --- a/kernel/eka/include/drivers/dmadefs.h Tue May 11 17:28:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,739 +0,0 @@ -// 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 - - -/** 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__