AM263x MCU+ SDK  09.02.00
enet_cpdma.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_CPDMA_H_
48 #define ENET_CPDMA_H_
49 
50 /* ========================================================================== */
51 /* Include Files */
52 /* ========================================================================== */
53 
54 #include <stdint.h>
56 #include <include/core/enet_base.h>
59 
60 #ifdef __cplusplus
61 extern "C" {
62 #endif
63 
64 /* ========================================================================== */
65 /* Macros */
66 /* ========================================================================== */
67 
77 #define ENET_CPDMA_CPSW_MAX_TX_CH (8U)
78 
80 #define ENET_CPDMA_CPSW_MAX_RX_CH (8U)
81 
85 #define ENET_CPDMA_CPSW_MAX_SG_LIST (4U)
86 
87 #if ((__ARM_ARCH == 7) && (__ARM_ARCH_PROFILE == 'R'))
88 
89 #define ENETDMA_CACHELINE_ALIGNMENT (32U)
90 #else
91 #error "Enet library compilation not supported on non cortex R cores. Update correct cache line size"
92 #endif
93 
96 #define ENET_CPDMA_CSUM_START_BYTE_SHIFT (16U)
97 
98 #define ENET_CPDMA_CSUM_START_BYTE_MASK (((uint32_t) 0xFFU) << ENET_CPDMA_CSUM_START_BYTE_SHIFT)
99 
100 #define ENET_CPDMA_CSUM_RESULT_BYTE_SHIFT (24U)
101 
102 #define ENET_CPDMA_CSUM_RESULT_BYTE_MASK (((uint32_t) 0xFFU) << ENET_CPDMA_CSUM_RESULT_BYTE_SHIFT)
103 
104 #define ENET_CPDMA_CSUM_BYTE_COUNT_SHIFT (0U)
105 
106 #define ENET_CPDMA_CSUM_BYTE_COUNT_MASK (((uint32_t) 0x3FFU) << ENET_CPDMA_CSUM_BYTE_COUNT_SHIFT)
107 
108 #define ENET_CPDMA_GET_CSUM_RESULT_BYTE(chkSumInfo) \
109  ENET_FEXT(chkSumInfo, ENET_CPDMA_CSUM_RESULT_BYTE)
110 
111 #define ENET_CPDMA_GET_CSUM_START_BYTE(chkSumInfo) \
112  ENET_FEXT(chkSumInfo, ENET_CPDMA_CSUM_START_BYTE)
113 
114 #define ENET_CPDMA_GET_CSUM_BYTE_COUNT(chkSumInfo) \
115  ENET_FEXT(chkSumInfo, ENET_CPDMA_CSUM_BYTE_COUNT)
116 
129 typedef struct EnetCpdma_Cfg_s EnetDma_Cfg;
130 
131 /* TODO: may be deleted */
138 typedef void (*EnetDma_PktNotifyCb)(void *cbArg);
139 
142 /* ========================================================================== */
143 /* Structures and Enums */
144 /* ========================================================================== */
145 
156 /*
157  * TODO: CPDMA does not support timestamp within packet
158  * Stub to share the application code?
159  */
160 
166 typedef struct EnetCpdma_PktTsInfo_s
167 {
170 
172  uint32_t txPktSeqId;
173 
175  uint8_t txPktMsgType;
176 
178  uint8_t txPktDomain;
179 
181  uint64_t rxPktTs;
183 
192 typedef struct EnetCpdma_SGListEntry_s
193 {
195  uint8_t *bufPtr;
196 
199 
201  uint32_t segmentAllocLen;
202 
205 
217 typedef struct EnetCpdma_SGList_s
218 {
227 
229 
258 typedef struct EnetCpdma_PktInfo_s
259 {
264 
266  void *appPriv;
267 
273  uint32_t pktState;
274 
284  uint32_t chkSumInfo;
285 
296 
307 
312 
315  uint32_t txPktTc;
316 
319  uint32_t txTsId;
320 
328 
347 typedef struct EnetCpdma_OpenTxChPrms_s
348 {
351 
353  uint32_t chNum;
354 
358 
361  uint32_t numTxPkts;
362 
365  void *cbArg;
366 
368 
374 typedef struct EnetCpdma_OpenRxChPrms_s
375 {
378 
380  uint32_t chNum;
381 
385 
388  uint32_t numRxPkts;
389 
392  void *cbArg;
393 
395 
401 
408 typedef struct EnetCpdma_RxChInitPrms_s
409 {
411  uint32_t rxBufferOffset;
413 
420 typedef struct EnetCpdma_Cfg_s
421 {
424 
427 
434 
437 
440 
442  uint32_t maxTxChannels;
443 
445  uint32_t maxRxChannels;
446 
447 } EnetCpdma_Cfg;
448 
454 typedef struct EnetDma_initCfg_s
455 {
456 }
460 /* ========================================================================== */
461 /* Global Variables Declarations */
462 /* ========================================================================== */
463 
464 /* None */
465 
466 /* ========================================================================== */
467 /* Function Declarations */
468 /* ========================================================================== */
469 
482  uint32_t instId,
483  const void *dmaCfg,
484  uint32_t appCoreId);
485 
497  uint32_t instId,
498  uint32_t appCoreId);
499 
507 int32_t EnetCpdma_close(EnetDma_Handle hEnetDma);
508 
517 
532 
546 int32_t EnetCpdma_rxIsr(EnetDma_Handle hEnetDma);
547 
561 int32_t EnetCpdma_txIsr(EnetDma_Handle hEnetDma);
562 
577 int32_t EnetCpdma_miscIsrGetStatus(EnetDma_Handle hEnetDma, uint32_t *pStatusMask);
578 
590 
602 void EnetCpdma_initParams(Enet_Type enetType, EnetDma_Cfg *pDmaConfig);
603 
604 /* ========================================================================== */
605 /* Deprecated Function Declarations */
606 /* ========================================================================== */
607 
608 /* None */
609 
610 /* ========================================================================== */
611 /* Static Function Definitions */
612 /* ========================================================================== */
613 
614 /* None */
615 
616 #ifdef __cplusplus
617 }
618 #endif
619 
620 #endif /* ENET_CPDMA_H_ */
621 
EnetCpdma_open
EnetDma_Handle EnetCpdma_open(Enet_Type enetType, uint32_t instId, const void *dmaCfg, uint32_t appCoreId)
Set default data path parameters.
EnetCpdma_PktInfo::txTsId
uint32_t txTsId
Definition: enet_cpdma.h:319
EnetCpdma_txIsr
int32_t EnetCpdma_txIsr(EnetDma_Handle hEnetDma)
ENET CPDMA Tx interrupt service routine.
EnetDma_Cfg
struct EnetCpdma_Cfg_s EnetDma_Cfg
Opaque handle that holds config Info for Enet DMA channel.
Definition: enet_cpdma.h:129
EnetCpdma_RxChInitPrms
Global Param struct for the Rx channel open.
Definition: enet_cpdma.h:409
ENET_CPDMA_CPSW_MAX_SG_LIST
#define ENET_CPDMA_CPSW_MAX_SG_LIST
Definition: enet_cpdma.h:85
EnetDma_PktNotifyCb
void(* EnetDma_PktNotifyCb)(void *cbArg)
Function pointer type for packet notify call back.
Definition: enet_cpdma.h:138
EnetCpdma_PktTsInfo::txPktDomain
uint8_t txPktDomain
Definition: enet_cpdma.h:178
EnetCpdma_PktInfo::txPortNum
Enet_MacPort txPortNum
Definition: enet_cpdma.h:306
EnetCpdma_PktInfo::node
EnetQ_Node node
Definition: enet_cpdma.h:263
EnetCpdma_Cfg::maxTxChannels
uint32_t maxTxChannels
Definition: enet_cpdma.h:442
EnetCpdma_saveCtxt
int32_t EnetCpdma_saveCtxt(EnetDma_Handle hEnetDma)
Saves and closes Enet DMA (data path).
EnetCpdma_miscIsrGetStatus
int32_t EnetCpdma_miscIsrGetStatus(EnetDma_Handle hEnetDma, uint32_t *pStatusMask)
ENET CPDMA Miscellaneous interrupt service routine.
EnetCpdma_OpenRxChPrms::chNum
uint32_t chNum
Definition: enet_cpdma.h:380
EnetCpdma_SGListEntry::disableCacheOps
bool disableCacheOps
Definition: enet_cpdma.h:203
EnetCpdma_Cfg::enHostRxTsFlag
bool enHostRxTsFlag
Definition: enet_cpdma.h:436
EnetCpdma_SGListEntry::segmentAllocLen
uint32_t segmentAllocLen
Definition: enet_cpdma.h:201
enet_types.h
This file contains the basic types using across the Enet driver.
EnetCpdma_OpenRxChPrms::hEnet
Enet_Handle hEnet
Definition: enet_cpdma.h:377
enet_cpdma_types.h
This file contains the base DMA definitions.
EnetCpdma_PktTsInfo::txPktSeqId
uint32_t txPktSeqId
Definition: enet_cpdma.h:172
Enet_MacPort
Enet_MacPort
MAC port.
Definition: enet_types.h:409
EnetCpdma_Cfg::rxInterruptPerMSec
uint32_t rxInterruptPerMSec
Definition: enet_cpdma.h:426
EnetCpdma_initParams
void EnetCpdma_initParams(Enet_Type enetType, EnetDma_Cfg *pDmaConfig)
Initialize CPDMA config params.
EnetCpdma_PktInfo
Packet data structure.
Definition: enet_cpdma.h:259
EnetCpdma_PktInfo::chkSumInfo
uint32_t chkSumInfo
Definition: enet_cpdma.h:284
enet_queue.h
This file contains the type definitions and helper macros for the Enet software queue.
EnetCpdma_OpenTxChPrms::hEnet
Enet_Handle hEnet
Definition: enet_cpdma.h:350
EnetCpdma_Cfg
Config structure for Enet CPDMA.
Definition: enet_cpdma.h:421
EnetCpdma_OpenTxChPrms::notifyCb
EnetDma_PktNotifyCb notifyCb
Definition: enet_cpdma.h:357
EnetCpdma_SGListEntry::bufPtr
uint8_t * bufPtr
Definition: enet_cpdma.h:195
EnetCpdma_Cfg::txInterruptPerMSec
uint32_t txInterruptPerMSec
Definition: enet_cpdma.h:423
EnetCpdma_OpenTxChPrms::chNum
uint32_t chNum
Definition: enet_cpdma.h:353
EnetCpdma_restoreCtxt
EnetDma_Handle EnetCpdma_restoreCtxt(Enet_Type enetType, uint32_t instId, uint32_t appCoreId)
Open DMA with default data path parameters.
EnetCpdma_ackMiscIsr
int32_t EnetCpdma_ackMiscIsr(EnetDma_Handle hEnetDma)
EnetQ_Node
A generic node structure for a single link list.
Definition: enet_queue.h:74
EnetCpdma_OpenTxChPrms::numTxPkts
uint32_t numTxPkts
Definition: enet_cpdma.h:361
EnetCpdma_Cfg::maxRxChannels
uint32_t maxRxChannels
Definition: enet_cpdma.h:445
EnetCpdma_SGListEntry
Transmit Packet scatter gather list entry.
Definition: enet_cpdma.h:193
EnetCpdma_OpenRxChPrms::numRxPkts
uint32_t numRxPkts
Definition: enet_cpdma.h:388
EnetCpdma_PktTsInfo
CPPI buffer timestamp info.
Definition: enet_cpdma.h:167
EnetDma_OpenRxChPrms
EnetCpdma_OpenRxChPrms EnetDma_OpenRxChPrms
Param struct for the RX channel open function. We include this typedef as top level DMA APIs use Enet...
Definition: enet_cpdma.h:400
EnetCpdma_OpenRxChPrms::notifyCb
EnetDma_PktNotifyCb notifyCb
Definition: enet_cpdma.h:384
EnetCpdma_rxThreshIsr
int32_t EnetCpdma_rxThreshIsr(EnetDma_Handle hEnetDma)
ENET CPDMA Rx Threshold interrupt service routine.
EnetCpdma_Cfg::enChOverrideFlag
bool enChOverrideFlag
Definition: enet_cpdma.h:433
EnetCpdma_OpenTxChPrms::cbArg
void * cbArg
Definition: enet_cpdma.h:365
EnetCpdma_PktInfo::rxPortNum
Enet_MacPort rxPortNum
Definition: enet_cpdma.h:311
EnetCpdma_SGListEntry::segmentFilledLen
uint32_t segmentFilledLen
Definition: enet_cpdma.h:198
Enet_Type
Enet_Type
Ethernet peripheral type.
Definition: enet_types.h:199
EnetDma_Handle
struct EnetCpdma_DrvObj_s * EnetDma_Handle
Opaque handle for Enet CPDMA driver object.
Definition: enet_cpdma_types.h:86
EnetCpdma_PktInfo::sgList
EnetCpdma_SGList sgList
Definition: enet_cpdma.h:326
EnetCpdma_PktTsInfo::txPktMsgType
uint8_t txPktMsgType
Definition: enet_cpdma.h:175
EnetCpdma_PktInfo::txPktTc
uint32_t txPktTc
Definition: enet_cpdma.h:315
EnetCpdma_close
int32_t EnetCpdma_close(EnetDma_Handle hEnetDma)
Close Enet DMA (data path).
enet_base.h
This file contains the type definitions and helper macros for the Enet Peripheral interface.
EnetCpdma_SGList
Transmit packet scatter list info.
Definition: enet_cpdma.h:218
EnetCpdma_PktInfo::pktState
uint32_t pktState
Definition: enet_cpdma.h:273
EnetDma_initCfg
Config structure for Enet CPDMA Data Path initialization.
Definition: enet_cpdma.h:455
EnetCpdma_RxChInitPrms::rxBufferOffset
uint32_t rxBufferOffset
Definition: enet_cpdma.h:411
EnetCpdma_OpenRxChPrms::cbArg
void * cbArg
Definition: enet_cpdma.h:392
EnetCpdma_PktInfo::appPriv
void * appPriv
Definition: enet_cpdma.h:266
EnetDma_SGListEntry
EnetCpdma_SGListEntry EnetDma_SGListEntry
Definition: enet_cpdma.h:228
EnetCpdma_Cfg::rxChInitPrms
EnetCpdma_RxChInitPrms rxChInitPrms
Definition: enet_cpdma.h:439
EnetCpdma_OpenRxChPrms
Param struct for the RX channel open function.
Definition: enet_cpdma.h:375
EnetCpdma_SGList::numScatterSegments
uint32_t numScatterSegments
Definition: enet_cpdma.h:223
EnetCpdma_PktInfo::tsInfo
EnetCpdma_PktTsInfo tsInfo
Definition: enet_cpdma.h:295
EnetCpdma_PktTsInfo::enableHostTxTs
bool enableHostTxTs
Definition: enet_cpdma.h:169
EnetCpdma_PktTsInfo::rxPktTs
uint64_t rxPktTs
Definition: enet_cpdma.h:181
Enet_Handle
struct Enet_Obj_s * Enet_Handle
Ethernet driver handle.
Definition: enet_base.h:105
EnetCpdma_OpenTxChPrms
Param struct for the TX channel open function.
Definition: enet_cpdma.h:348
EnetCpdma_rxIsr
int32_t EnetCpdma_rxIsr(EnetDma_Handle hEnetDma)
ENET CPDMA Rx interrupt service routine.