AM64x MCU+ SDK  08.02.00
udma_ch.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018-2021 Texas Instruments Incorporated
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the
14  * distribution.
15  *
16  * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
48 #ifndef UDMA_CH_H_
49 #define UDMA_CH_H_
50 
51 /* ========================================================================== */
52 /* Include Files */
53 /* ========================================================================== */
54 
55 /* None */
56 
57 #ifdef __cplusplus
58 extern "C" {
59 #endif
60 
61 /* ========================================================================== */
62 /* Macros & Typedefs */
63 /* ========================================================================== */
64 
69 #define UDMA_DMA_CH_INVALID ((uint32_t) 0xFFFF0000U)
70 
74 #define UDMA_DMA_CH_ANY ((uint32_t) 0xFFFF0001U)
75 
79 #define UDMA_DMA_CH_NA ((uint32_t) 0xFFFF0002U)
80 
81 #define UDMA_MAPPED_GROUP_INVALID ((uint32_t) 0xFFFF0004U)
82 
84 #define UDMA_DMSC_EXTENDED_CH_TYPE_BCDMA_BLK_CPY ((uint8_t) 1U)
85 
87 #define UDMA_DMSC_EXTENDED_CH_TYPE_BCDMA_SPLIT_TR_TX ((uint8_t) 0U)
88 
89 
99 #define UDMA_CH_FLAG_TX ((uint32_t) 0x0001U)
100 
101 #define UDMA_CH_FLAG_RX ((uint32_t) 0x0002U)
102 
103 #define UDMA_CH_FLAG_BLK_COPY ((uint32_t) 0x0004U)
104 
105 #define UDMA_CH_FLAG_PDMA ((uint32_t) 0x0008U)
106 
107 #define UDMA_CH_FLAG_PSIL ((uint32_t) 0x0010U)
108 
109 #define UDMA_CH_FLAG_HC ((uint32_t) 0x0040U)
110 
111 #define UDMA_CH_FLAG_UHC ((uint32_t) 0x0080U)
112 
113 #define UDMA_CH_FLAG_MAPPED ((uint32_t) 0x0100U)
114 
125 #define UDMA_CH_TYPE_TR_BLK_COPY (UDMA_CH_FLAG_BLK_COPY | \
126  UDMA_CH_FLAG_TX | \
127  UDMA_CH_FLAG_RX)
128 
129 #define UDMA_CH_TYPE_TR_BLK_COPY_HC (UDMA_CH_FLAG_BLK_COPY | \
130  UDMA_CH_FLAG_TX | \
131  UDMA_CH_FLAG_RX | \
132  UDMA_CH_FLAG_HC)
133 
134 #define UDMA_CH_TYPE_TR_BLK_COPY_UHC (UDMA_CH_FLAG_BLK_COPY | \
135  UDMA_CH_FLAG_TX | \
136  UDMA_CH_FLAG_RX | \
137  UDMA_CH_FLAG_UHC)
138 
139 #define UDMA_CH_TYPE_TX (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PSIL)
140 
141 #define UDMA_CH_TYPE_TX_HC (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_HC)
142 
143 #define UDMA_CH_TYPE_TX_UHC (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_UHC)
144 
146 #define UDMA_CH_TYPE_RX (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PSIL)
147 
148 #define UDMA_CH_TYPE_RX_HC (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_HC)
149 
150 #define UDMA_CH_TYPE_RX_UHC (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_UHC)
151 
153 #define UDMA_CH_TYPE_PDMA_TX (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PDMA)
154 
155 #define UDMA_CH_TYPE_PDMA_TX_HC (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PDMA | UDMA_CH_FLAG_HC)
156 
157 #define UDMA_CH_TYPE_PDMA_TX_UHC (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PDMA | UDMA_CH_FLAG_UHC)
158 
160 #define UDMA_CH_TYPE_PDMA_RX (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PDMA)
161 
162 #define UDMA_CH_TYPE_PDMA_RX_HC (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PDMA | UDMA_CH_FLAG_HC)
163 
164 #define UDMA_CH_TYPE_PDMA_RX_UHC (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PDMA | UDMA_CH_FLAG_UHC)
165 
171 #define UDMA_CH_TYPE_TX_MAPPED (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_MAPPED)
172 
177 #define UDMA_CH_TYPE_RX_MAPPED (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_MAPPED)
178 
186 #define UDMA_PDMA_ES_8BITS ((uint32_t) 0x00U)
187 #define UDMA_PDMA_ES_16BITS ((uint32_t) 0x01U)
188 #define UDMA_PDMA_ES_24BITS ((uint32_t) 0x02U)
189 #define UDMA_PDMA_ES_32BITS ((uint32_t) 0x03U)
190 #define UDMA_PDMA_ES_64BITS ((uint32_t) 0x04U)
191 
192 #define UDMA_PDMA_ES_DONTCARE ((uint32_t) 0x00U)
193 
195 /* ========================================================================== */
196 /* Structure Declarations */
197 /* ========================================================================== */
198 
202 typedef struct
203 {
204  uint32_t chNum;
214  uint32_t peerChNum;
230  uint32_t mappedChGrp;
238  void *appData;
257 } Udma_ChPrms;
258 
262 typedef struct
263 {
264  uint8_t pauseOnError;
266  uint8_t filterEinfo;
268  uint8_t filterPsWords;
270  uint8_t addrType;
273  uint8_t chanType;
275  uint16_t fetchWordSize;
277  uint8_t busPriority;
279  uint8_t busQos;
281  uint8_t busOrderId;
283  uint8_t dmaPriority;
287  uint8_t txCredit;
289  uint16_t fifoDepth;
304  uint8_t burstSize;
323  uint8_t supressTdCqPkt;
330 } Udma_ChTxPrms;
331 
335 typedef struct
336 {
337  uint8_t pauseOnError;
339  uint8_t addrType;
342  uint8_t chanType;
344  uint16_t fetchWordSize;
346  uint8_t busPriority;
348  uint8_t busQos;
350  uint8_t busOrderId;
352  uint8_t dmaPriority;
370  uint8_t flowSopOffset;
377  uint8_t ignoreLongPkts;
389  uint8_t burstSize;
408 } Udma_ChRxPrms;
409 
413 typedef struct
414 {
415  uint32_t elemSize;
424  uint32_t elemCnt;
443  uint32_t fifoCnt;
461 
465 typedef struct
466 {
467  uint32_t packetCnt;
471  uint32_t startedByteCnt;
473 } Udma_ChStats;
474 
475 /* ========================================================================== */
476 /* Function Declarations */
477 /* ========================================================================== */
478 
501 int32_t Udma_chOpen(Udma_DrvHandle drvHandle,
502  Udma_ChHandle chHandle,
503  uint32_t chType,
504  const Udma_ChPrms *chPrms);
505 
518 int32_t Udma_chClose(Udma_ChHandle chHandle);
519 
537 int32_t Udma_chConfigTx(Udma_ChHandle chHandle, const Udma_ChTxPrms *txPrms);
538 
558 int32_t Udma_chConfigRx(Udma_ChHandle chHandle, const Udma_ChRxPrms *rxPrms);
559 
576  const Udma_ChPdmaPrms *pdmaPrms);
577 
590 int32_t Udma_chEnable(Udma_ChHandle chHandle);
591 
613 int32_t Udma_chDisable(Udma_ChHandle chHandle, uint32_t timeout);
614 
628 int32_t Udma_chPause(Udma_ChHandle chHandle);
629 
643 int32_t Udma_chResume(Udma_ChHandle chHandle);
644 
657 uint32_t Udma_chGetNum(Udma_ChHandle chHandle);
658 
668 
678 
688 
699 
712 
722 
739 uint32_t Udma_chGetTriggerEvent(Udma_ChHandle chHandle, uint32_t trigger);
740 
761 
784 int32_t Udma_chSetSwTrigger(Udma_ChHandle chHandle, uint32_t trigger);
785 
808 int32_t Udma_chSetChaining(Udma_ChHandle triggerChHandle,
809  Udma_ChHandle chainedChHandle,
810  uint32_t trigger);
811 
824 int32_t Udma_chBreakChaining(Udma_ChHandle triggerChHandle,
825  Udma_ChHandle chainedChHandle);
826 
827 /*
828  * Structure Init functions
829  */
837 void UdmaChPrms_init(Udma_ChPrms *chPrms, uint32_t chType);
838 
846 void UdmaChTxPrms_init(Udma_ChTxPrms *txPrms, uint32_t chType);
847 
855 void UdmaChRxPrms_init(Udma_ChRxPrms *rxPrms, uint32_t chType);
856 
864 
877 int32_t Udma_chGetStats(Udma_ChHandle chHandle, Udma_ChStats *chStats);
878 
888 int32_t Udma_getPeerData(Udma_ChHandle chHandle, uint32_t *peerData);
889 
899 int32_t Udma_clearPeerData(Udma_ChHandle chHandle, uint32_t peerData);
900 /* ========================================================================== */
901 /* Static Function Definitions */
902 /* ========================================================================== */
903 
904 /* None */
905 
906 /* ========================================================================== */
907 /* Internal/Private Structure Declarations */
908 /* ========================================================================== */
909 
913 typedef struct Udma_ChObject_t
914 {
915  uintptr_t rsv[150U];
917 } Udma_ChObject;
918 
919 #ifdef __cplusplus
920 }
921 #endif
922 
923 #endif /* #ifndef UDMA_CH_H_ */
924 
Udma_chGetCqRingHandle
Udma_RingHandle Udma_chGetCqRingHandle(Udma_ChHandle chHandle)
Returns the default completion ring handle of the channel.
Udma_ChRxPrms::pauseOnError
uint8_t pauseOnError
Definition: udma_ch.h:337
Udma_ChStats::startedByteCnt
uint32_t startedByteCnt
Definition: udma_ch.h:471
Udma_FlowHandle
void * Udma_FlowHandle
UDMA flow handle.
Definition: udma_types.h:73
Udma_ChRxPrms::flowIdFwRangeStart
uint16_t flowIdFwRangeStart
Definition: udma_ch.h:356
Udma_ChTxPrms
UDMA TX channel parameters.
Definition: udma_ch.h:263
Udma_ChPrms
UDMA channel open parameters.
Definition: udma_ch.h:203
Udma_ChRxPrms::ignoreLongPkts
uint8_t ignoreLongPkts
Definition: udma_ch.h:377
Udma_RingPrms
UDMA ring parameters.
Definition: udma_ring.h:124
Udma_chOpen
int32_t Udma_chOpen(Udma_DrvHandle drvHandle, Udma_ChHandle chHandle, uint32_t chType, const Udma_ChPrms *chPrms)
UDMA open channel.
Udma_ChRxPrms::configDefaultFlow
uint32_t configDefaultFlow
Definition: udma_ch.h:381
Udma_ChTxPrms::fetchWordSize
uint16_t fetchWordSize
Definition: udma_ch.h:275
Udma_chEnable
int32_t Udma_chEnable(Udma_ChHandle chHandle)
UDMA channel enable API.
Udma_ChHandle
void * Udma_ChHandle
UDMA channel handle.
Definition: udma_types.h:67
Udma_ChRxPrms::flowErrorHandling
uint8_t flowErrorHandling
Definition: udma_ch.h:367
Udma_ChRxPrms
UDMA RX channel parameters.
Definition: udma_ch.h:336
Udma_chGetTdCqRingHandle
Udma_RingHandle Udma_chGetTdCqRingHandle(Udma_ChHandle chHandle)
Returns the teardown completion ring handle of the channel.
Udma_ChTxPrms::txCredit
uint8_t txCredit
Definition: udma_ch.h:287
Udma_ChTxPrms::busOrderId
uint8_t busOrderId
Definition: udma_ch.h:281
Udma_chDisable
int32_t Udma_chDisable(Udma_ChHandle chHandle, uint32_t timeout)
UDMA channel teardown and disable API.
Udma_ChPdmaPrms::elemCnt
uint32_t elemCnt
Definition: udma_ch.h:424
Udma_ChRxPrms::ignoreShortPkts
uint8_t ignoreShortPkts
Definition: udma_ch.h:373
Udma_ChPdmaPrms
UDMA PDMA channel Static TR parameters.
Definition: udma_ch.h:414
UdmaChPdmaPrms_init
void UdmaChPdmaPrms_init(Udma_ChPdmaPrms *pdmaPrms)
Udma_ChPdmaPrms structure init function.
Udma_ChPrms::mappedChGrp
uint32_t mappedChGrp
Definition: udma_ch.h:230
Udma_chGetStats
int32_t Udma_chGetStats(Udma_ChHandle chHandle, Udma_ChStats *chStats)
Get real-time channel statistics.
Udma_chGetNum
uint32_t Udma_chGetNum(Udma_ChHandle chHandle)
Returns the channel number offset with in a channel type - TX, RX and External (UTC) channel types.
Udma_chPause
int32_t Udma_chPause(Udma_ChHandle chHandle)
UDMA channel pause API.
Udma_ChPrms::fqRingPrms
Udma_RingPrms fqRingPrms
Definition: udma_ch.h:243
Udma_chGetDefaultFlowHandle
Udma_FlowHandle Udma_chGetDefaultFlowHandle(Udma_ChHandle chHandle)
Returns the default flow handle of the RX channel.
Udma_ChRxPrms::busPriority
uint8_t busPriority
Definition: udma_ch.h:346
Udma_ChRxPrms::flowPsInfoPresent
uint8_t flowPsInfoPresent
Definition: udma_ch.h:364
Udma_ChRxPrms::flowSopOffset
uint8_t flowSopOffset
Definition: udma_ch.h:370
Udma_chConfigTx
int32_t Udma_chConfigTx(Udma_ChHandle chHandle, const Udma_ChTxPrms *txPrms)
UDMA configure TX channel.
Udma_chSetSwTrigger
int32_t Udma_chSetSwTrigger(Udma_ChHandle chHandle, uint32_t trigger)
Sets the software trigger register based on the trigger mode provided.
Udma_ChPrms::tdCqRingPrms
Udma_RingPrms tdCqRingPrms
Definition: udma_ch.h:250
Udma_ChPrms::cqRingPrms
Udma_RingPrms cqRingPrms
Definition: udma_ch.h:245
Udma_RingHandle
void * Udma_RingHandle
UDMA ring handle.
Definition: udma_types.h:71
Udma_ChRxPrms::flowEInfoPresent
uint8_t flowEInfoPresent
Definition: udma_ch.h:361
Udma_getPeerData
int32_t Udma_getPeerData(Udma_ChHandle chHandle, uint32_t *peerData)
Get real-time peer data which contains number of bytes written.
Udma_ChPdmaPrms::elemSize
uint32_t elemSize
Definition: udma_ch.h:415
Udma_ChObject
Opaque UDMA channel object.
Definition: udma_ch.h:914
Udma_chResume
int32_t Udma_chResume(Udma_ChHandle chHandle)
UDMA channel resume API.
Udma_ChTxPrms::burstSize
uint8_t burstSize
Definition: udma_ch.h:304
Udma_ChTxPrms::filterPsWords
uint8_t filterPsWords
Definition: udma_ch.h:268
Udma_ChTxPrms::busPriority
uint8_t busPriority
Definition: udma_ch.h:277
Udma_chGetSwTriggerRegister
void * Udma_chGetSwTriggerRegister(Udma_ChHandle chHandle)
Returns the software trigger register address for the channel.
Udma_ChPrms::chNum
uint32_t chNum
Definition: udma_ch.h:204
Udma_ChPdmaPrms::fifoCnt
uint32_t fifoCnt
Definition: udma_ch.h:443
Udma_ChTxPrms::addrType
uint8_t addrType
Definition: udma_ch.h:270
Udma_ChRxPrms::fetchWordSize
uint16_t fetchWordSize
Definition: udma_ch.h:344
Udma_chGetTriggerEvent
uint32_t Udma_chGetTriggerEvent(Udma_ChHandle chHandle, uint32_t trigger)
Returns the global trigger event for the channel.
Udma_chGetCqRingNum
uint16_t Udma_chGetCqRingNum(Udma_ChHandle chHandle)
Returns the default completion ring number to be programmed in descriptor.
UdmaChPrms_init
void UdmaChPrms_init(Udma_ChPrms *chPrms, uint32_t chType)
Udma_ChPrms structure init function.
Udma_chSetChaining
int32_t Udma_chSetChaining(Udma_ChHandle triggerChHandle, Udma_ChHandle chainedChHandle, uint32_t trigger)
Chains the trigger channel with the chained channel.
Udma_ChPrms::peerChNum
uint32_t peerChNum
Definition: udma_ch.h:214
UdmaChTxPrms_init
void UdmaChTxPrms_init(Udma_ChTxPrms *txPrms, uint32_t chType)
Udma_ChTxPrms structure init function.
UdmaChRxPrms_init
void UdmaChRxPrms_init(Udma_ChRxPrms *rxPrms, uint32_t chType)
Udma_ChRxPrms structure init function.
Udma_ChStats::completedByteCnt
uint32_t completedByteCnt
Definition: udma_ch.h:469
Udma_ChRxPrms::dmaPriority
uint8_t dmaPriority
Definition: udma_ch.h:352
Udma_ChStats
UDMA channel statistics.
Definition: udma_ch.h:466
Udma_ChTxPrms::fifoDepth
uint16_t fifoDepth
Definition: udma_ch.h:289
Udma_clearPeerData
int32_t Udma_clearPeerData(Udma_ChHandle chHandle, uint32_t peerData)
Clear real-time peer data which contains number of bytes written.
Udma_DrvHandle
void * Udma_DrvHandle
UDMA driver handle.
Definition: udma_types.h:65
Udma_ChTxPrms::supressTdCqPkt
uint8_t supressTdCqPkt
Definition: udma_ch.h:323
Udma_ChTxPrms::pauseOnError
uint8_t pauseOnError
Definition: udma_ch.h:264
Udma_ChRxPrms::flowIdFwRangeCnt
uint16_t flowIdFwRangeCnt
Definition: udma_ch.h:358
Udma_chClose
int32_t Udma_chClose(Udma_ChHandle chHandle)
UDMA close channel.
Udma_ChStats::packetCnt
uint32_t packetCnt
Definition: udma_ch.h:467
Udma_chGetFqRingHandle
Udma_RingHandle Udma_chGetFqRingHandle(Udma_ChHandle chHandle)
Returns the default free ring handle of the channel.
Udma_chConfigPdma
int32_t Udma_chConfigPdma(Udma_ChHandle chHandle, const Udma_ChPdmaPrms *pdmaPrms)
UDMA configure PDMA channel (peerChNum as part of Udma_ChPrms) paired with the UDMAP channel.
Udma_ChTxPrms::chanType
uint8_t chanType
Definition: udma_ch.h:273
Udma_ChPrms::appData
void * appData
Definition: udma_ch.h:238
Udma_ChRxPrms::burstSize
uint8_t burstSize
Definition: udma_ch.h:389
Udma_ChTxPrms::dmaPriority
uint8_t dmaPriority
Definition: udma_ch.h:283
Udma_ChRxPrms::busOrderId
uint8_t busOrderId
Definition: udma_ch.h:350
Udma_ChTxPrms::filterEinfo
uint8_t filterEinfo
Definition: udma_ch.h:266
Udma_ChRxPrms::addrType
uint8_t addrType
Definition: udma_ch.h:339
Udma_ChRxPrms::chanType
uint8_t chanType
Definition: udma_ch.h:342
Udma_ChTxPrms::busQos
uint8_t busQos
Definition: udma_ch.h:279
Udma_chBreakChaining
int32_t Udma_chBreakChaining(Udma_ChHandle triggerChHandle, Udma_ChHandle chainedChHandle)
Breaks the chaining by resetting the trigger channel's OES.
Udma_chConfigRx
int32_t Udma_chConfigRx(Udma_ChHandle chHandle, const Udma_ChRxPrms *rxPrms)
UDMA configure RX channel.
Udma_ChRxPrms::busQos
uint8_t busQos
Definition: udma_ch.h:348
Udma_chGetFqRingNum
uint16_t Udma_chGetFqRingNum(Udma_ChHandle chHandle)
Returns the default free ring number to be programmed in descriptor.