AM64x MCU+ SDK  10.00.00
udma_ch.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018-2024 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_UTC ((uint32_t) 0x0020U)
110 
111 #define UDMA_CH_FLAG_HC ((uint32_t) 0x0040U)
112 
113 #define UDMA_CH_FLAG_UHC ((uint32_t) 0x0080U)
114 
115 #define UDMA_CH_FLAG_MAPPED ((uint32_t) 0x0100U)
116 
127 #define UDMA_CH_TYPE_TR_BLK_COPY (UDMA_CH_FLAG_BLK_COPY | \
128  UDMA_CH_FLAG_TX | \
129  UDMA_CH_FLAG_RX)
130 
131 #define UDMA_CH_TYPE_TR_BLK_COPY_HC (UDMA_CH_FLAG_BLK_COPY | \
132  UDMA_CH_FLAG_TX | \
133  UDMA_CH_FLAG_RX | \
134  UDMA_CH_FLAG_HC)
135 
136 #define UDMA_CH_TYPE_TR_BLK_COPY_UHC (UDMA_CH_FLAG_BLK_COPY | \
137  UDMA_CH_FLAG_TX | \
138  UDMA_CH_FLAG_RX | \
139  UDMA_CH_FLAG_UHC)
140 
141 #define UDMA_CH_TYPE_TX (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PSIL)
142 
143 #define UDMA_CH_TYPE_TX_HC (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_HC)
144 
145 #define UDMA_CH_TYPE_TX_UHC (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_UHC)
146 
148 #define UDMA_CH_TYPE_RX (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PSIL)
149 
150 #define UDMA_CH_TYPE_RX_HC (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_HC)
151 
152 #define UDMA_CH_TYPE_RX_UHC (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_UHC)
153 
155 #define UDMA_CH_TYPE_PDMA_TX (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PDMA)
156 
157 #define UDMA_CH_TYPE_PDMA_TX_HC (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PDMA | UDMA_CH_FLAG_HC)
158 
159 #define UDMA_CH_TYPE_PDMA_TX_UHC (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PDMA | UDMA_CH_FLAG_UHC)
160 
162 #define UDMA_CH_TYPE_PDMA_RX (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PDMA)
163 
164 #define UDMA_CH_TYPE_PDMA_RX_HC (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PDMA | UDMA_CH_FLAG_HC)
165 
166 #define UDMA_CH_TYPE_PDMA_RX_UHC (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PDMA | UDMA_CH_FLAG_UHC)
167 
173 #define UDMA_CH_TYPE_TX_MAPPED (UDMA_CH_FLAG_TX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_MAPPED)
174 
179 #define UDMA_CH_TYPE_RX_MAPPED (UDMA_CH_FLAG_RX | UDMA_CH_FLAG_PSIL | UDMA_CH_FLAG_MAPPED)
180 
186 #define UDMA_CH_TYPE_UTC (UDMA_CH_FLAG_UTC)
187 
195 #define UDMA_PDMA_ES_8BITS ((uint32_t) 0x00U)
196 #define UDMA_PDMA_ES_16BITS ((uint32_t) 0x01U)
197 #define UDMA_PDMA_ES_24BITS ((uint32_t) 0x02U)
198 #define UDMA_PDMA_ES_32BITS ((uint32_t) 0x03U)
199 #define UDMA_PDMA_ES_64BITS ((uint32_t) 0x04U)
200 
201 #define UDMA_PDMA_ES_DONTCARE ((uint32_t) 0x00U)
202 
204 /* ========================================================================== */
205 /* Structure Declarations */
206 /* ========================================================================== */
207 
211 typedef struct
212 {
213  uint32_t chNum;
223  uint32_t peerChNum;
239  uint32_t mappedChGrp;
247  void *appData;
266 } Udma_ChPrms;
267 
271 typedef struct
272 {
273  uint8_t pauseOnError;
275  uint8_t filterEinfo;
277  uint8_t filterPsWords;
279  uint8_t addrType;
282  uint8_t chanType;
284  uint16_t fetchWordSize;
286  uint8_t busPriority;
288  uint8_t busQos;
290  uint8_t busOrderId;
292  uint8_t dmaPriority;
296  uint8_t txCredit;
298  uint16_t fifoDepth;
313  uint8_t burstSize;
332  uint8_t supressTdCqPkt;
339 } Udma_ChTxPrms;
340 
344 typedef struct
345 {
346  uint8_t pauseOnError;
348  uint8_t addrType;
351  uint8_t chanType;
353  uint16_t fetchWordSize;
355  uint8_t busPriority;
357  uint8_t busQos;
359  uint8_t busOrderId;
361  uint8_t dmaPriority;
379  uint8_t flowSopOffset;
386  uint8_t ignoreLongPkts;
398  uint8_t burstSize;
417 } Udma_ChRxPrms;
418 
422 typedef struct
423 {
424  uint32_t elemSize;
433  uint32_t elemCnt;
452  uint32_t fifoCnt;
470 
474 typedef struct
475 {
476  uint32_t packetCnt;
480  uint32_t startedByteCnt;
482 } Udma_ChStats;
483 
484 /* ========================================================================== */
485 /* Function Declarations */
486 /* ========================================================================== */
487 
510 int32_t Udma_chOpen(Udma_DrvHandle drvHandle,
511  Udma_ChHandle chHandle,
512  uint32_t chType,
513  const Udma_ChPrms *chPrms);
514 
527 int32_t Udma_chClose(Udma_ChHandle chHandle);
528 
546 int32_t Udma_chConfigTx(Udma_ChHandle chHandle, const Udma_ChTxPrms *txPrms);
547 
567 int32_t Udma_chConfigRx(Udma_ChHandle chHandle, const Udma_ChRxPrms *rxPrms);
568 
585  const Udma_ChPdmaPrms *pdmaPrms);
586 
599 int32_t Udma_chEnable(Udma_ChHandle chHandle);
600 
622 int32_t Udma_chDisable(Udma_ChHandle chHandle, uint32_t timeout);
623 
637 int32_t Udma_chPause(Udma_ChHandle chHandle);
638 
652 int32_t Udma_chResume(Udma_ChHandle chHandle);
653 
666 uint32_t Udma_chGetNum(Udma_ChHandle chHandle);
667 
677 
687 
697 
708 
721 
731 
748 uint32_t Udma_chGetTriggerEvent(Udma_ChHandle chHandle, uint32_t trigger);
749 
770 
793 int32_t Udma_chSetSwTrigger(Udma_ChHandle chHandle, uint32_t trigger);
794 
817 int32_t Udma_chSetChaining(Udma_ChHandle triggerChHandle,
818  Udma_ChHandle chainedChHandle,
819  uint32_t trigger);
820 
833 int32_t Udma_chBreakChaining(Udma_ChHandle triggerChHandle,
834  Udma_ChHandle chainedChHandle);
835 
836 /*
837  * Structure Init functions
838  */
846 void UdmaChPrms_init(Udma_ChPrms *chPrms, uint32_t chType);
847 
855 void UdmaChTxPrms_init(Udma_ChTxPrms *txPrms, uint32_t chType);
856 
864 void UdmaChRxPrms_init(Udma_ChRxPrms *rxPrms, uint32_t chType);
865 
873 
886 int32_t Udma_chGetStats(Udma_ChHandle chHandle, Udma_ChStats *chStats);
887 
897 int32_t Udma_getPeerData(Udma_ChHandle chHandle, uint32_t *peerData);
898 
908 int32_t Udma_clearPeerData(Udma_ChHandle chHandle, uint32_t peerData);
909 
910 #if (UDMA_SOC_CFG_RA_NORMAL_PRESENT == 1)
911 
927 int32_t Udma_chDequeueTdResponse(Udma_ChHandle chHandle,
928  CSL_UdmapTdResponse *tdResponse);
929 #endif
930 /* ========================================================================== */
931 /* Static Function Definitions */
932 /* ========================================================================== */
933 
934 /* None */
935 
936 /* ========================================================================== */
937 /* Internal/Private Structure Declarations */
938 /* ========================================================================== */
939 
943 typedef struct Udma_ChObject_t
944 {
945  #if defined (SOC_AM65X)
946  uintptr_t rsv[200U];
947  #else
948  uintptr_t rsv[150U];
949  #endif
950 
951 } Udma_ChObject;
952 
953 #ifdef __cplusplus
954 }
955 #endif
956 
957 #endif /* #ifndef UDMA_CH_H_ */
958 
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:346
Udma_ChStats::startedByteCnt
uint32_t startedByteCnt
Definition: udma_ch.h:480
Udma_FlowHandle
void * Udma_FlowHandle
UDMA flow handle.
Definition: udma_types.h:73
Udma_ChRxPrms::flowIdFwRangeStart
uint16_t flowIdFwRangeStart
Definition: udma_ch.h:365
Udma_ChTxPrms
UDMA TX channel parameters.
Definition: udma_ch.h:272
Udma_ChPrms
UDMA channel open parameters.
Definition: udma_ch.h:212
Udma_ChRxPrms::ignoreLongPkts
uint8_t ignoreLongPkts
Definition: udma_ch.h:386
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:390
Udma_ChTxPrms::fetchWordSize
uint16_t fetchWordSize
Definition: udma_ch.h:284
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:376
Udma_ChRxPrms
UDMA RX channel parameters.
Definition: udma_ch.h:345
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:296
Udma_ChTxPrms::busOrderId
uint8_t busOrderId
Definition: udma_ch.h:290
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:433
Udma_ChRxPrms::ignoreShortPkts
uint8_t ignoreShortPkts
Definition: udma_ch.h:382
Udma_ChPdmaPrms
UDMA PDMA channel Static TR parameters.
Definition: udma_ch.h:423
UdmaChPdmaPrms_init
void UdmaChPdmaPrms_init(Udma_ChPdmaPrms *pdmaPrms)
Udma_ChPdmaPrms structure init function.
Udma_ChPrms::mappedChGrp
uint32_t mappedChGrp
Definition: udma_ch.h:239
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:252
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:355
Udma_ChRxPrms::flowPsInfoPresent
uint8_t flowPsInfoPresent
Definition: udma_ch.h:373
Udma_ChRxPrms::flowSopOffset
uint8_t flowSopOffset
Definition: udma_ch.h:379
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:259
Udma_ChPrms::cqRingPrms
Udma_RingPrms cqRingPrms
Definition: udma_ch.h:254
Udma_RingHandle
void * Udma_RingHandle
UDMA ring handle.
Definition: udma_types.h:71
Udma_ChRxPrms::flowEInfoPresent
uint8_t flowEInfoPresent
Definition: udma_ch.h:370
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:424
Udma_ChObject
Opaque UDMA channel object.
Definition: udma_ch.h:944
Udma_chResume
int32_t Udma_chResume(Udma_ChHandle chHandle)
UDMA channel resume API.
Udma_ChTxPrms::burstSize
uint8_t burstSize
Definition: udma_ch.h:313
Udma_ChTxPrms::filterPsWords
uint8_t filterPsWords
Definition: udma_ch.h:277
Udma_ChTxPrms::busPriority
uint8_t busPriority
Definition: udma_ch.h:286
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:213
Udma_ChPdmaPrms::fifoCnt
uint32_t fifoCnt
Definition: udma_ch.h:452
Udma_ChTxPrms::addrType
uint8_t addrType
Definition: udma_ch.h:279
Udma_ChRxPrms::fetchWordSize
uint16_t fetchWordSize
Definition: udma_ch.h:353
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:223
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:478
Udma_ChRxPrms::dmaPriority
uint8_t dmaPriority
Definition: udma_ch.h:361
Udma_ChStats
UDMA channel statistics.
Definition: udma_ch.h:475
Udma_ChTxPrms::fifoDepth
uint16_t fifoDepth
Definition: udma_ch.h:298
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:332
Udma_ChTxPrms::pauseOnError
uint8_t pauseOnError
Definition: udma_ch.h:273
Udma_ChRxPrms::flowIdFwRangeCnt
uint16_t flowIdFwRangeCnt
Definition: udma_ch.h:367
Udma_chClose
int32_t Udma_chClose(Udma_ChHandle chHandle)
UDMA close channel.
Udma_ChStats::packetCnt
uint32_t packetCnt
Definition: udma_ch.h:476
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:282
Udma_ChPrms::appData
void * appData
Definition: udma_ch.h:247
Udma_ChRxPrms::burstSize
uint8_t burstSize
Definition: udma_ch.h:398
Udma_ChTxPrms::dmaPriority
uint8_t dmaPriority
Definition: udma_ch.h:292
Udma_ChRxPrms::busOrderId
uint8_t busOrderId
Definition: udma_ch.h:359
Udma_ChTxPrms::filterEinfo
uint8_t filterEinfo
Definition: udma_ch.h:275
Udma_ChRxPrms::addrType
uint8_t addrType
Definition: udma_ch.h:348
Udma_ChRxPrms::chanType
uint8_t chanType
Definition: udma_ch.h:351
Udma_ChTxPrms::busQos
uint8_t busQos
Definition: udma_ch.h:288
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:357
Udma_chGetFqRingNum
uint16_t Udma_chGetFqRingNum(Udma_ChHandle chHandle)
Returns the default free ring number to be programmed in descriptor.