PDK API Guide for AM65xx
enet_udma.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) Texas Instruments Incorporated 2020
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 
47 #ifndef ENET_UDMA_H_
48 #define ENET_UDMA_H_
49 
50 /* ========================================================================== */
51 /* Include Files */
52 /* ========================================================================== */
53 
54 #include <stdint.h>
58 
59 #include <ti/drv/udma/udma.h>
60 
61 #ifdef __cplusplus
62 extern "C" {
63 #endif
64 
65 /* ========================================================================== */
66 /* Macros */
67 /* ========================================================================== */
68 
78 #define ENET_UDMA_HPD_SIZE (128U)
79 
81 #define ENET_UDMA_EXTENDED_PKT_INFO_BLOCK_SIZE (16U)
82 
84 #define ENET_UDMA_PROTOCOL_SPECIFIC_INFO_BLOCK_SIZE (16U)
85 
87 #define ENET_UDMA_PKT_DESC_RESERVED_SIZE ( ENET_UDMA_HPD_SIZE - \
88  sizeof(CSL_UdmapCppi5HMPD) - \
89  (ENET_UDMA_EXTENDED_PKT_INFO_BLOCK_SIZE + \
90  ENET_UDMA_PROTOCOL_SPECIFIC_INFO_BLOCK_SIZE))
91 
93 #define ENET_UDMA_RING_MEM_SIZE (sizeof(uint64_t))
94 
110 #define ENET_UDMA_RXMTU_ALIGN (1U << 5U)
111 
113 #define ENET_UDMA_HPD_SRC_TAG_LOW_MASK (0xFF)
114 
118 typedef struct EnetUdma_Cfg_s EnetDma_Cfg;
119 
125 typedef struct EnetUdma_DmaDescQ_s *EnetUdma_DmaDescQHandle;
126 
137 typedef uint8_t *(*EnetUdma_AllocRingMemFxn)(void *appPriv,
138  uint32_t numRingEle,
139  uint32_t alignSize);
140 
142 typedef void (*EnetUdma_FreeRingMemFxn)(void *appPriv,
143  void *pRingMem,
144  uint32_t numRingEle);
145 
147 typedef struct EnetUdma_DmaDesc_s *(*EnetUdma_AllocDmaDescFxn)(void *appPriv,
148  uint32_t alignSize);
149 
151 typedef void (*EnetUdma_FreeDmaDescFxn)(void *appPriv,
152  struct EnetUdma_DmaDesc_s *dmaDescPtr);
153 
160 typedef void (*EnetDma_PktNotifyCb)(void *cbArg);
161 
164 /* ========================================================================== */
165 /* Structures and Enums */
166 /* ========================================================================== */
167 
183 typedef struct EnetUdma_PktTsInfo_s
184 {
187 
189  uint32_t txPktSeqId;
190 
192  uint8_t txPktMsgType;
193 
195  uint8_t txPktDomain;
196 
198  uint64_t rxPktTs;
200 
207 typedef struct EnetUdma_PktInfo_s
208 {
213 
215  uint8_t *bufPtr;
216 
218  uint32_t orgBufLen;
219 
221  uint32_t userBufLen;
222 
224  void *appPriv;
225 
231  uint32_t pktState;
232 
242  uint32_t chkSumInfo;
243 
254 
265 
270 
273  uint32_t txPktTc;
274 
276  uint32_t txTsId;
277 
279 
285 typedef struct EnetUdma_CpswHpdDesc_s
286 {
289 
298  uint8_t extendedPktInfo[ENET_UDMA_EXTENDED_PKT_INFO_BLOCK_SIZE];
299 
309 
313 
320 typedef struct EnetUdma_DmaDesc_s
321 {
326 
328  struct EnetUdma_DmaDesc_s *pNextDesc;
329 
335 
354 typedef struct EnetUdma_RingMonCfg_s
355 {
357  uint8_t mode;
358 
368  uint32_t data0;
369 
379  uint32_t data1;
381 
387 typedef struct EnetUdma_UdmaRingPrms_s
388 {
391  uint8_t orderId;
392 
394  uint8_t mode;
395 
401 
405 
412 typedef struct EnetUdma_UdmaChPrms_s
413 {
416 
420 
426 typedef struct EnetUdma_UdmaFlowPrms_s
427 {
429  uint8_t einfoPresent;
430 
433  uint8_t psInfoPresent;
434 
437  uint16_t sopOffset;
438 
440  uint16_t defaultRxCQ;
441 
445  uint8_t srcTagHi;
446 
450  uint8_t srcTagLo;
451 
455  uint8_t srcTagHiSel;
456 
460  uint8_t srcTagLoSel;
461 
465  uint8_t destTagHi;
466 
470  uint8_t destTagLo;
471 
475  uint8_t destTagHiSel;
476 
480  uint8_t destTagLoSel;
481 
484  uint8_t sizeThreshEn;
485 
487 
493 typedef struct EnetUdma_UdmaChTxPrms_s
494 {
496  uint8_t filterEinfo;
497 
499  uint8_t filterPsWords;
500 
503  uint8_t addrType;
504 
506  uint8_t chanType;
507 
509  uint8_t busPriority;
510 
512  uint8_t busQos;
513 
515  uint8_t busOrderId;
516 
520  uint8_t dmaPriority;
521 
523  uint8_t txCredit;
524 
530  uint16_t fifoDepth;
532 
536 typedef struct EnetUdma_AutoReclaimPrms_s
537 {
551 
556 
560  Udma_RingHandle hReclaimRing;
562 
570 typedef struct EnetUdma_OpenRxFlowPrms_s
571 {
573  Udma_DrvHandle hUdmaDrv;
574 
576  uint32_t startIdx;
577 
579  uint32_t flowIdx;
580 
583 
587 
591 
594 
597  uint32_t numRxPkts;
598 
601 
604  uint32_t rxFlowMtu;
605 
613 
616 
619 
622 
625  void *cbArg;
626 
631  bool useProxy;
632 
636 
642 
648 typedef struct EnetUdma_OpenTxChPrms_s
649 {
651  Udma_DrvHandle hUdmaDrv;
652 
656  uint32_t chNum;
657 
660 
663 
667 
671 
674  uint32_t numTxPkts;
675 
678 
686 
689 
692 
695 
698  void *cbArg;
699 
704  bool useProxy;
705 
709 
716 typedef struct EnetUdma_RxChInitPrms_s
717 {
721  uint8_t dmaPriority;
723 
730 typedef struct EnetUdma_Cfg_s
731 {
733  Udma_DrvHandle hUdmaDrv;
734 
737 } EnetUdma_Cfg;
738 
744 typedef struct EnetUdma_DmaCfg_s
745 {
747  Udma_DrvHandle hUdmaDrv;
749 
752 /* ========================================================================== */
753 /* Global Variables Declarations */
754 /* ========================================================================== */
755 
756 /* None */
757 
758 /* ========================================================================== */
759 /* Function Declarations */
760 /* ========================================================================== */
761 
764  uint32_t instId,
765  const EnetDma_initCfg *pDmaInitCfg);
766 int32_t EnetUdma_deInitDataPath(EnetDma_Handle hEnetUdma);
767 
788  uint32_t margin);
789 
811  uint32_t margin);
812 
823 Udma_RingHandle EnetUdma_getTxChFqHandle(EnetDma_TxChHandle hTxCh);
824 
836 
847 Udma_RingHandle EnetUdma_getRxFlowFqHandle(EnetDma_RxChHandle hRxFlow);
848 
860 
861 /* ========================================================================== */
862 /* Deprecated Function Declarations */
863 /* ========================================================================== */
864 
865 /* None */
866 
867 /* ========================================================================== */
868 /* Static Function Definitions */
869 /* ========================================================================== */
870 
871 /* None */
872 
873 #ifdef __cplusplus
874 }
875 #endif
876 
877 #endif /* ENET_UDMA_H_ */
878 
Udma_DrvHandle hUdmaDrv
Definition: enet_udma.h:747
uint8_t einfoPresent
Definition: enet_udma.h:429
int32_t EnetUdma_checkTxChSanity(EnetDma_TxChHandle hTxCh, uint32_t margin)
Check if any packet loss in TX Channel FQ and CQ rings.
Enet_Type
Ethernet peripheral type.
Definition: enet_types.h:195
struct EnetUdma_TxChObj_s * EnetDma_TxChHandle
Opaque handle that holds software state for Enet TX DMA channel.
Definition: enet_udma_types.h:100
void * appPriv
Definition: enet_udma.h:224
bool enableHostTxTs
Definition: enet_udma.h:186
UDMA ring monitor config parameters.
Definition: enet_udma.h:354
Enet UDMA RX flow/TX channel ring configuration parameters.
Definition: enet_udma.h:412
EnetQ_Node node
Definition: enet_udma.h:212
uint32_t chkSumInfo
Definition: enet_udma.h:242
A generic node structure for a single link list.
Definition: enet_queue.h:73
int32_t EnetUdma_checkRxFlowSanity(EnetDma_RxChHandle hRxFlow, uint32_t margin)
Check if any packet loss in RX flow FQ and CQ rings.
UDMA RX channel flow parameters.
Definition: enet_udma.h:426
uint8_t srcTagLo
Definition: enet_udma.h:450
CPPI DMA descriptor.
Definition: enet_udma.h:320
EnetUdma_AutoReclaimPrms autoReclaimPrms
Definition: enet_udma.h:707
Param struct for the RX channel open.
Definition: enet_udma.h:716
Enet UDMA TX channel parameters.
Definition: enet_udma.h:493
#define UDMA_CACHELINE_ALIGNMENT
Cache line size for alignment of descriptor and buffers.
Definition: udma_types.h:80
bool enableFlag
Definition: enet_udma.h:550
bool disableCacheOpsFlag
Definition: enet_udma.h:677
Enet_MacPort rxPortNum
Definition: enet_udma.h:269
bool useGlobalEvt
Definition: enet_udma.h:586
uint8_t dmaPriority
Definition: enet_udma.h:721
Enet UDMA descriptor format.
Definition: enet_udma.h:285
uint32_t rxFlowMtu
Definition: enet_udma.h:604
void(* EnetUdma_FreeRingMemFxn)(void *appPriv, void *pRingMem, uint32_t numRingEle)
Function pointer type for packet free function.
Definition: enet_udma.h:142
uint8_t busQos
Definition: enet_udma.h:512
This file contains the basic types using across the Enet driver.
uint32_t txTsId
Definition: enet_udma.h:276
This file contains the type definitions and helper macros for the Enet software queue.
Enet_MacPort txPortNum
Definition: enet_udma.h:264
struct EnetUdma_RxFlowObj_s * EnetDma_RxChHandle
Opaque handle that holds software state for Enet RX DMA flow.
Definition: enet_udma_types.h:95
Enet UDMA channel ring parameters.
Definition: enet_udma.h:387
struct EnetUdma_PktInfo_s EnetDma_Pkt
Opaque handle that represents a DMA packet.
Definition: enet_udma_types.h:105
EnetUdma_AutoReclaimPrms autoReclaimPrms
Definition: enet_udma.h:634
Config structure for Enet UDMA Data Path initialization.
Definition: enet_udma.h:744
uint8_t orderId
Definition: enet_udma.h:391
uint8_t srcTagLoSel
Definition: enet_udma.h:460
uint8_t mode
Definition: enet_udma.h:394
uint8_t addrType
Definition: enet_udma.h:503
uint32_t startIdx
Definition: enet_udma.h:576
EnetUdma_DmaDescQHandle hDmaDescPool
Definition: enet_udma.h:555
uint32_t data0
Definition: enet_udma.h:368
uint16_t defaultRxCQ
Definition: enet_udma.h:440
uint8_t dmaPriority
Definition: enet_udma.h:520
uint8_t busOrderId
Definition: enet_udma.h:515
EnetUdma_RingMonCfg ringMonCfg
Definition: enet_udma.h:403
EnetUdma_PktTsInfo tsInfo
Definition: enet_udma.h:253
struct EnetUdma_DrvObj_s * EnetDma_Handle
Opaque handle for Enet UDMA driver object.
Definition: enet_udma_types.h:86
void(* EnetUdma_FreeDmaDescFxn)(void *appPriv, struct EnetUdma_DmaDesc_s *dmaDescPtr)
Function pointer type for DMA descriptor free function.
Definition: enet_udma.h:151
Config structure for Enet UDMA.
Definition: enet_udma.h:730
EnetUdma_AllocRingMemFxn ringMemAllocFxn
Definition: enet_udma.h:612
uint8_t txCredit
Definition: enet_udma.h:523
uint8_t txPktMsgType
Definition: enet_udma.h:192
bool useProxy
Definition: enet_udma.h:704
struct EnetUdma_DmaDesc_s *(* EnetUdma_AllocDmaDescFxn)(void *appPriv, uint32_t alignSize)
Function pointer type for DMA descriptor allocation function.
Definition: enet_udma.h:147
EnetDma_PktNotifyCb notifyCb
Definition: enet_udma.h:670
EnetUdma_UdmaRingPrms cqRingPrms
Definition: enet_udma.h:418
This file contains the base DMA definitions.
UDMA Driver API/interface file.
void * cbArg
Definition: enet_udma.h:625
EnetUdma_UdmaChPrms udmaChPrms
Definition: enet_udma.h:659
Udma_DrvHandle hUdmaDrv
Definition: enet_udma.h:651
EnetUdma_UdmaChTxPrms udmaTxChPrms
Definition: enet_udma.h:662
uint8_t psInfoPresent
Definition: enet_udma.h:433
EnetUdma_CpswHpdDesc hpdDesc
Definition: enet_udma.h:325
uint8_t filterEinfo
Definition: enet_udma.h:496
#define ENET_UDMA_EXTENDED_PKT_INFO_BLOCK_SIZE
Extended Packet Info Block size.
Definition: enet_udma.h:81
Param struct for the get default flowId open parameters.
Definition: enet_udma.h:570
CPPI buffer timestamp info.
Definition: enet_udma.h:183
uint32_t data1
Definition: enet_udma.h:379
EnetUdma_UdmaChPrms udmaChPrms
Definition: enet_udma.h:582
struct EnetUdma_DmaDesc_s * pNextDesc
Definition: enet_udma.h:328
Udma_RingHandle EnetUdma_getRxFlowFqHandle(EnetDma_RxChHandle hRxFlow)
Get RX flow FQ handle.
EnetUdma_DmaDescQHandle EnetUdma_getTxChDescPoolHandle(EnetDma_TxChHandle hTxCh)
Get handle to DMA descriptor free pool for TX channel.
typedef __attribute__
void * cbArg
Definition: enet_udma.h:698
EnetUdma_DmaDescQHandle EnetUdma_getRxFlowDescPoolHandle(EnetDma_RxChHandle hRxFlow)
Get handle to DMA descriptor free pool for RX flow.
uint8_t sizeThreshEn
Definition: enet_udma.h:484
Udma_DrvHandle hUdmaDrv
Definition: enet_udma.h:573
uint32_t numRxPkts
Definition: enet_udma.h:597
uint8_t destTagLo
Definition: enet_udma.h:470
uint8_t * bufPtr
Definition: enet_udma.h:215
uint8_t srcTagHiSel
Definition: enet_udma.h:455
Packet data structure.
Definition: enet_udma.h:207
EnetUdma_AllocDmaDescFxn dmaDescAllocFxn
Definition: enet_udma.h:691
Udma_DrvHandle hUdmaDrv
Definition: enet_udma.h:733
uint64_t rxPktTs
Definition: enet_udma.h:198
uint8_t *(* EnetUdma_AllocRingMemFxn)(void *appPriv, uint32_t numRingEle, uint32_t alignSize)
Function pointer type for packet allocation function.
Definition: enet_udma.h:137
Udma_RingHandle hReclaimRing
Definition: enet_udma.h:560
EnetUdma_FreeDmaDescFxn dmaDescFreeFxn
Definition: enet_udma.h:621
EnetUdma_UdmaFlowPrms flowPrms
Definition: enet_udma.h:593
#define ENET_UDMA_PROTOCOL_SPECIFIC_INFO_BLOCK_SIZE
Extended Packet Info Block size.
Definition: enet_udma.h:84
uint32_t txPktSeqId
Definition: enet_udma.h:189
uint8_t chanType
Definition: enet_udma.h:506
void EnetUdma_initDataPathParams(EnetDma_initCfg *pDmaConfig)
uint32_t pktState
Definition: enet_udma.h:231
uint8_t destTagHiSel
Definition: enet_udma.h:475
Enet UDMA channel/flow auto-reclaim config struct.
Definition: enet_udma.h:536
Param struct for the TX channel open function.
Definition: enet_udma.h:648
uint32_t numTxPkts
Definition: enet_udma.h:674
struct EnetUdma_DmaDescQ_s * EnetUdma_DmaDescQHandle
Opaque handle to Enet UDMA descriptor queue.
Definition: enet_udma.h:125
EnetUdma_UdmaRingPrms fqRingPrms
Definition: enet_udma.h:415
int32_t EnetUdma_deInitDataPath(EnetDma_Handle hEnetUdma)
#define ENET_UDMA_PKT_DESC_RESERVED_SIZE
Extended Packet Info Block size.
Definition: enet_udma.h:87
uint32_t userBufLen
Definition: enet_udma.h:221
uint8_t destTagHi
Definition: enet_udma.h:465
EnetUdma_OpenRxFlowPrms EnetDma_OpenRxChPrms
Param struct for the RX channel open function. We include this typedef as top level DMA APIs use Enet...
Definition: enet_udma.h:641
EnetUdma_AllocRingMemFxn ringMemAllocFxn
Definition: enet_udma.h:685
bool useGlobalEvt
Definition: enet_udma.h:666
struct EnetUdma_Cfg_s EnetDma_Cfg
Opaque handle that holds config Info for Enet DMA channel.
Definition: enet_udma.h:118
EnetDma_Handle EnetUdma_initDataPath(Enet_Type enetType, uint32_t instId, const EnetDma_initCfg *pDmaInitCfg)
Enet_MacPort
MAC port.
Definition: enet_types.h:402
uint8_t filterPsWords
Definition: enet_udma.h:499
uint8_t txPktDomain
Definition: enet_udma.h:195
uint8_t mode
Definition: enet_udma.h:357
Udma_RingHandle EnetUdma_getTxChFqHandle(EnetDma_TxChHandle hTxCh)
Get TX channel FQ handle.
bool useRingMon
Definition: enet_udma.h:400
EnetDma_PktNotifyCb notifyCb
Definition: enet_udma.h:590
uint8_t busPriority
Definition: enet_udma.h:509
EnetUdma_FreeRingMemFxn ringMemFreeFxn
Definition: enet_udma.h:615
uint8_t destTagLoSel
Definition: enet_udma.h:480
uint16_t sopOffset
Definition: enet_udma.h:437
uint16_t reserved
Definition: tisci_boardcfg_rm.h:437
bool disableCacheOpsFlag
Definition: enet_udma.h:600
void(* EnetDma_PktNotifyCb)(void *cbArg)
Function pointer type for packet notify call back.
Definition: enet_udma.h:160
uint8_t srcTagHi
Definition: enet_udma.h:445
uint32_t orgBufLen
Definition: enet_udma.h:218
uint32_t flowIdx
Definition: enet_udma.h:579
EnetUdma_RxChInitPrms rxChInitPrms
Definition: enet_udma.h:736
uint16_t fifoDepth
Definition: enet_udma.h:530
uint32_t chNum
Definition: enet_udma.h:656
Host-mode packet and buffer descriptor.
Definition: csl_udmap_cppi5.h:100
EnetUdma_FreeRingMemFxn ringMemFreeFxn
Definition: enet_udma.h:688
EnetDma_Pkt * dmaPkt
Definition: enet_udma.h:333
bool useProxy
Definition: enet_udma.h:631
EnetUdma_AllocDmaDescFxn dmaDescAllocFxn
Definition: enet_udma.h:618
uint32_t txPktTc
Definition: enet_udma.h:273
EnetUdma_FreeDmaDescFxn dmaDescFreeFxn
Definition: enet_udma.h:694