📄 edma3_drv.h
字号:
/** Number of QDMA Channels supported by the underlying EDMA3 Controller */
unsigned int numQdmaChannels;
/**
* Number of Interrupt Channels supported by the underlying EDMA3
* Controller
*/
unsigned int numTccs;
/** Number of PaRAM Sets supported by the underlying EDMA3 Controller */
unsigned int numPaRAMSets;
/** Number of Event Queues in the underlying EDMA3 Controller */
unsigned int numEvtQueue;
/**
* Number of Transfer Controllers (TCs) in the underlying EDMA3 Controller
*/
unsigned int numTcs;
/** Number of Regions in the underlying EDMA3 Controller */
unsigned int numRegions;
/**
* \brief Channel mapping existence
*
* A value of 0 (No channel mapping) implies that there is fixed
* association between a DMA channel and a PaRAM Set or, in other words,
* DMA channel n can ONLY use PaRAM Set n (No availability of DCHMAP
* registers) for transfers to happen.
*
* A value of 1 implies the presence of DCHMAP registers for the DMA
* channels and hence the flexibility of associating any DMA channel to
* any PaRAM Set. In other words, ANY PaRAM Set can be used for ANY DMA
* channel (like QDMA Channels).
*/
unsigned short dmaChPaRAMMapExists;
/** Existence of memory protection feature */
unsigned short memProtectionExists;
/** Base address of EDMA3 CC memory mapped registers. */
void *globalRegs;
/** Base address of EDMA3 TCs memory mapped registers. */
void *tcRegs[EDMA3_MAX_TC];
/**
* EDMA3 transfer completion interrupt line (could be different for ARM
* and DSP)
*/
unsigned int xferCompleteInt;
/** EDMA3 CC error interrupt line (could be different for ARM and DSP) */
unsigned int ccError;
/** EDMA3 TCs error interrupt line (could be different for ARM and DSP) */
unsigned int tcError[EDMA3_MAX_TC];
/**
* \brief EDMA3 TC priority setting
*
* User can program the priority of the Event Queues
* at a system-wide level. This means that the user can set the
* priority of an IO initiated by either of the TCs (Transfer Controllers)
* relative to IO initiated by the other bus masters on the
* device (ARM, DSP, USB, etc)
*/
unsigned int evtQPri [EDMA3_MAX_EVT_QUE];
/**
* \brief Event Queues Watermark Levels
* To Configure the Threshold level of number of events
* that can be queued up in the Event queues. EDMA3CC error register
* (CCERR) will indicate whether or not at any instant of time the
* number of events queued up in any of the event queues exceeds
* or equals the threshold/watermark value that is set
* in the queue watermark threshold register (QWMTHRA).
*/
unsigned int evtQueueWaterMarkLvl [EDMA3_MAX_EVT_QUE];
/**
* \brief Default Burst Size (DBS) of TCs.
* An optimally-sized command is defined by the transfer controller
* default burst size (DBS). Different TCs can have different
* DBS values. It is defined in Bytes.
*/
unsigned int tcDefaultBurstSize[EDMA3_MAX_TC];
/**
* \brief Mapping from DMA channels to PaRAM Sets
* If channel mapping exists (DCHMAP registers are present), this array
* stores the respective PaRAM Set for each DMA channel. User can
* initialize each array member with a specific PaRAM Set or with
* EDMA3_DRV_CH_NO_PARAM_MAP.
* If channel mapping doesn't exist, it is of no use as the EDMA3 RM
* automatically uses the right PaRAM Set for that DMA channel.
* Useful only if mapping exists, otherwise of no use.
*/
unsigned int dmaChannelPaRAMMap [EDMA3_MAX_DMA_CH];
/**
* \brief Mapping from DMA channels to TCCs
*
* This array stores the respective TCC (interrupt channel) for each
* DMA channel. User can initialize each array member with a specific TCC
* or with EDMA3_DRV_CH_NO_TCC_MAP. This specific
* TCC code will be returned when the transfer is completed
* on the mapped DMA channel.
*/
unsigned int dmaChannelTccMap [EDMA3_MAX_DMA_CH];
/**
* \brief Mapping from DMA channels to Hardware Events
*
* Each bit in this array corresponds to one DMA channel and tells whether
* this DMA channel is tied to any peripheral. That is whether any
* peripheral can send the synch event on this DMA channel or not.
* 1 means the channel is tied to some peripheral; 0 means it is not.
* DMA channels which are tied to some peripheral are RESERVED for that
* peripheral only. They are not allocated when user asks for 'ANY' DMA
* channel.
* All channels need not be mapped, some can be free also.
*/
unsigned int dmaChannelHwEvtMap [EDMA3_MAX_DMA_CHAN_DWRDS];
} EDMA3_DRV_GblConfigParams;
/**\struct EDMA3_DRV_InstanceInitConfig
* \brief Init-time Region Specific Configuration structure for
* EDMA3 Driver, to provide region specific Information.
*
* This configuration structure is used to specify which EDMA3 resources are
* owned and reserved by the EDMA3 Driver instance. This configuration
* structure is shadow region specific and will be provided by the user at
* run-time while calling EDMA3_DRV_open ().
*
* Owned resources:
* ****************
*
* EDMA3 Driver Instances are tied to different shadow regions and hence different
* masters. Regions could be:
*
* a) ARM,
* b) DSP,
* c) IMCOP (Imaging Co-processor) etc.
*
* User can assign each EDMA3 resource to a shadow region using this structure.
* In this way, user specifies which resources are owned by the specific EDMA3
* DRV Instance.
* This assignment should also ensure that the same resource is not assigned
* to more than one shadow regions (unless desired in that way). Any assignment
* not following the above mentioned approach may have catastrophic
* consequences.
*
*
* Reserved resources:
* *******************
*
* During EDMA3 DRV initialization, user can reserve some of the EDMA3 resources
* for future use, by specifying which resources to reserve in the configuration
* data structure. These (critical) resources are reserved in advance so that
* they should not be allocated to someone else and thus could be used in
* future for some specific purpose.
*
* User can request different EDMA3 resources using two methods:
* a) By passing the resource type and the actual resource id,
* b) By passing the resource type and ANY as resource id
*
* For e.g. to request DMA channel 31, user will pass 31 as the resource id.
* But to request ANY available DMA channel (mainly used for memory-to-memory
* data transfer operations), user will pass EDMA3_DRV_DMA_CHANNEL_ANY as the
* resource id.
*
* During initialization, user may have reserved some of the DMA channels for
* some specific purpose (mainly for peripherals using EDMA). These reserved
* DMA channels then will not be returned when user requests ANY as the
* resource id.
*
* Same logic applies for QDMA channels and TCCs.
*
* For PaRAM Set, there is one difference. If the DMA channels are one-to-one
* tied to their respective PaRAM Sets (i.e. user cannot 'choose' the PaRAM Set
* for a particular DMA channel), EDMA3 Driver automatically reserves all those
* PaRAM Sets which are tied to the DMA channels. Then those PaRAM Sets would
* not be returned when user requests for ANY PaRAM Set (specifically for
* linking purpose). This is done in order to avoid allocating the PaRAM Set,
* tied to a particular DMA channel, for linking purpose. If this constraint is
* not there, that DMA channel thus could not be used at all, because of the
* unavailability of the desired PaRAM Set.
*/
typedef struct
{
/** PaRAM Sets owned by the EDMA3 Driver Instance. */
unsigned int ownPaRAMSets[EDMA3_MAX_PARAM_DWRDS];
/** DMA Channels owned by the EDMA3 Driver Instance. */
unsigned int ownDmaChannels[EDMA3_MAX_DMA_CHAN_DWRDS];
/** QDMA Channels owned by the EDMA3 Driver Instance. */
unsigned int ownQdmaChannels[EDMA3_MAX_QDMA_CHAN_DWRDS];
/** TCCs owned by the EDMA3 Driver Instance. */
unsigned int ownTccs[EDMA3_MAX_TCC_DWRDS];
/**
* \brief Reserved PaRAM Sets
*
* PaRAM Sets reserved during initialization for future use. These will not
* be given when user requests for ANY available PaRAM Set for linking
* using 'EDMA3_DRV_LINK_CHANNEL' as channel id.
*/
unsigned int resvdPaRAMSets[EDMA3_MAX_PARAM_DWRDS];
/**
* \brief Reserved DMA channels
*
* DMA channels reserved during initialization for future use. These will
* not be given when user requests for ANY available DMA channel using
* 'EDMA3_DRV_DMA_CHANNEL_ANY' as channel id.
*/
unsigned int resvdDmaChannels[EDMA3_MAX_DMA_CHAN_DWRDS];
/**
* \brief Reserved QDMA channels
*
* QDMA channels reserved during initialization for future use. These will
* not be given when user requests for ANY available QDMA channel using
* 'EDMA3_DRV_QDMA_CHANNEL_ANY' as channel id.
*/
unsigned int resvdQdmaChannels[EDMA3_MAX_QDMA_CHAN_DWRDS];
/**
* \brief Reserved TCCs
*
* TCCs reserved during initialization for future use. These will not
* be given when user requests for ANY available TCC using
* 'EDMA3_DRV_TCC_ANY' as resource id.
*/
unsigned int resvdTccs[EDMA3_MAX_TCC_DWRDS];
}EDMA3_DRV_InstanceInitConfig;
/**\struct EDMA3_DRV_InitConfig
* \brief Used to Initialize the EDMA3 Driver Instance
*
* This configuration structure is used to initialize the EDMA3 DRV Instance.
* This configuration information is passed while opening the DRV instance.
*/
typedef struct
{
/** Region Identification */
EDMA3_RM_RegionId regionId;
/**
* It tells whether the EDMA3 DRV instance is Master or not. Only the shadow
* region associated with this master instance will receive the EDMA3
* interrupts (if enabled).
*/
unsigned short isMaster;
/**
* EDMA3 resources related shadow region specific information. Which all
* EDMA3 resources are owned and reserved by this particular instance are
* told in this configuration structure.
* User can also pass this structure as NULL. In that case, default static
* configuration would be taken from the platform specific configuration
* files (part of the Resource Manager), if available.
*/
EDMA3_DRV_InstanceInitConfig *drvInstInitConfig;
/**
* EDMA3 Driver Instance specific semaphore handle.
* Used to share resources (DMA/QDMA channels, PaRAM Sets, TCCs etc)
* among different users.
*/
void *drvSemHandle;
/**
* Instance wide global callback function to catch non-channel
* specific errors from the Channel controller. for eg, TCC
* error, queue threshold exceed error etc.
*/
EDMA3_RM_GblErrCallback gblerrCb;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -