fix(UML-1780): Добавлена упреждающая перезарядка DMA
This commit is contained in:
parent
cc4ee9225c
commit
692be72ffc
@ -67,6 +67,8 @@ bool free_rtos::Eth::Init(Settings& sett)
|
|||||||
for (int i = 0; i < macPortNum_; ++i) {
|
for (int i = 0; i < macPortNum_; ++i) {
|
||||||
linkUp_[i] = false;
|
linkUp_[i] = false;
|
||||||
macPort_[i] = sett.macPort[i];
|
macPort_[i] = sett.macPort[i];
|
||||||
|
rxTaskPriority_[i] = sett.rxTaskPriority[i];
|
||||||
|
rxTaskStackSize_[i] = sett.rxTaskStackSize[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
core_id_ = EnetSoc_getCoreId();
|
core_id_ = EnetSoc_getCoreId();
|
||||||
@ -223,7 +225,7 @@ void free_rtos::Eth::link_task()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!rx_flow_[i].open(i, ENET_DMA_RX_CH0 + i))
|
if (!rx_flow_[i].open(i, ENET_DMA_RX_CH0 + i, rxTaskPriority_[i], rxTaskStackSize_[i]))
|
||||||
{
|
{
|
||||||
EnetAppUtils_print("link_task: %s: Failed to open rx flow: %u\n", name_.c_str(), i);
|
EnetAppUtils_print("link_task: %s: Failed to open rx flow: %u\n", name_.c_str(), i);
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@ -47,6 +47,8 @@ public:
|
|||||||
|
|
||||||
/* Peripheral's MAC ports to use */
|
/* Peripheral's MAC ports to use */
|
||||||
Enet_MacPort macPort[e_ethMacTotal];
|
Enet_MacPort macPort[e_ethMacTotal];
|
||||||
|
UBaseType_t rxTaskPriority[e_ethMacTotal];
|
||||||
|
UBaseType_t rxTaskStackSize[e_ethMacTotal];
|
||||||
|
|
||||||
/* Number of MAC ports in macPorts array */
|
/* Number of MAC ports in macPorts array */
|
||||||
uint32_t macPortNum;
|
uint32_t macPortNum;
|
||||||
@ -106,6 +108,8 @@ private:
|
|||||||
|
|
||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mac <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mac <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
Enet_MacPort macPort_[e_ethMacTotal];
|
Enet_MacPort macPort_[e_ethMacTotal];
|
||||||
|
UBaseType_t rxTaskPriority_[e_ethMacTotal];
|
||||||
|
UBaseType_t rxTaskStackSize_[e_ethMacTotal];
|
||||||
|
|
||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MAC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MAC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
uint32_t macPortNum_;
|
uint32_t macPortNum_;
|
||||||
|
|||||||
@ -7,7 +7,6 @@
|
|||||||
#include "free_rtos/ethernet/eth_rx_flow.hpp"
|
#include "free_rtos/ethernet/eth_rx_flow.hpp"
|
||||||
|
|
||||||
#include <networking/enet/core/include/core/enet_soc.h>
|
#include <networking/enet/core/include/core/enet_soc.h>
|
||||||
#include <networking/enet/core/include/core/enet_queue.h>
|
|
||||||
#include <networking/enet/utils/include/enet_board.h>
|
#include <networking/enet/utils/include/enet_board.h>
|
||||||
#include <networking/enet/utils/include/enet_appmemutils.h>
|
#include <networking/enet/utils/include/enet_appmemutils.h>
|
||||||
#include <networking/enet/utils/include/enet_appmemutils_cfg.h>
|
#include <networking/enet/utils/include/enet_appmemutils_cfg.h>
|
||||||
@ -42,17 +41,22 @@ void free_rtos::rxTaskHandler(void *appData)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void eth_initRxReadyPktQ(EnetDma_RxChHandle hRxCh, void * appPriv)
|
free_rtos::EthRxFlow::EthRxFlow(TEthFrameMacAddr& mac_addr, EthStackIface& eth_stack) :
|
||||||
|
mac_addr_{mac_addr},
|
||||||
|
eth_stack_{eth_stack},
|
||||||
|
passive_mode_{false}
|
||||||
|
{
|
||||||
|
EnetQueue_initQ(&rx_free_pktq_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void free_rtos::EthRxFlow::initRxFreePktQ(uint32_t qCount, void * appPriv)
|
||||||
{
|
{
|
||||||
EnetDma_PktQ rxReadyQ;
|
EnetDma_PktQ rxReadyQ;
|
||||||
EnetDma_PktQ rxFreeQ;
|
|
||||||
EnetDma_Pkt *pPktInfo;
|
EnetDma_Pkt *pPktInfo;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
int32_t status;
|
int32_t status;
|
||||||
|
|
||||||
EnetQueue_initQ(&rxFreeQ);
|
for (i = 0U; i < qCount; ++i)
|
||||||
|
|
||||||
for (i = 0U; i < (ENET_SYSCFG_TOTAL_NUM_RX_PKT/2); ++i)
|
|
||||||
{
|
{
|
||||||
pPktInfo = EnetMem_allocEthPkt(appPriv,
|
pPktInfo = EnetMem_allocEthPkt(appPriv,
|
||||||
ENET_MEM_LARGE_POOL_PKT_SIZE,
|
ENET_MEM_LARGE_POOL_PKT_SIZE,
|
||||||
@ -61,40 +65,47 @@ static void eth_initRxReadyPktQ(EnetDma_RxChHandle hRxCh, void * appPriv)
|
|||||||
|
|
||||||
ENET_UTILS_SET_PKT_APP_STATE(&pPktInfo->pktState, ENET_PKTSTATE_APP_WITH_FREEQ);
|
ENET_UTILS_SET_PKT_APP_STATE(&pPktInfo->pktState, ENET_PKTSTATE_APP_WITH_FREEQ);
|
||||||
|
|
||||||
EnetQueue_enq(&rxFreeQ, &pPktInfo->node);
|
EnetQueue_enq(&rx_free_pktq_, &pPktInfo->node);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieve any packets which are ready */
|
/* Retrieve any packets which are ready */
|
||||||
EnetQueue_initQ(&rxReadyQ);
|
EnetQueue_initQ(&rxReadyQ);
|
||||||
status = EnetDma_retrieveRxPktQ(hRxCh, &rxReadyQ);
|
status = EnetDma_retrieveRxPktQ(dma_handle_, &rxReadyQ);
|
||||||
EnetAppUtils_assert(status == ENET_SOK);
|
EnetAppUtils_assert(status == ENET_SOK);
|
||||||
|
|
||||||
/* There should not be any packet with DMA during init */
|
/* There should not be any packet with DMA during init */
|
||||||
EnetAppUtils_assert(EnetQueue_getQCount(&rxReadyQ) == 0U);
|
EnetAppUtils_assert(EnetQueue_getQCount(&rxReadyQ) == 0U);
|
||||||
|
}
|
||||||
|
|
||||||
EnetAppUtils_validatePacketState(&rxFreeQ,
|
void free_rtos::EthRxFlow::reloadDmaRxPktQ(uint32_t qCount)
|
||||||
|
{
|
||||||
|
EnetDma_PktQ rxSubmitQ;
|
||||||
|
EnetDma_Pkt* rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rx_free_pktq_);
|
||||||
|
|
||||||
|
EnetQueue_initQ(&rxSubmitQ);
|
||||||
|
|
||||||
|
while((rxPktInfo != nullptr) && (qCount > 0))
|
||||||
|
{
|
||||||
|
EnetQueue_enq(&rxSubmitQ, &rxPktInfo->node);
|
||||||
|
|
||||||
|
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rx_free_pktq_);
|
||||||
|
qCount--;
|
||||||
|
}
|
||||||
|
|
||||||
|
EnetAppUtils_validatePacketState(&rxSubmitQ,
|
||||||
ENET_PKTSTATE_APP_WITH_FREEQ,
|
ENET_PKTSTATE_APP_WITH_FREEQ,
|
||||||
ENET_PKTSTATE_APP_WITH_DRIVER);
|
ENET_PKTSTATE_APP_WITH_DRIVER);
|
||||||
|
|
||||||
EnetDma_submitRxPktQ(hRxCh, &rxFreeQ);
|
EnetDma_submitRxPktQ(dma_handle_, &rxSubmitQ);
|
||||||
|
|
||||||
/* Assert here, as during init, the number of DMA descriptors should be equal to
|
/* Assert here, as during init, the number of DMA descriptors should be equal to
|
||||||
* the number of free Ethernet buffers available with app */
|
* the number of free Ethernet buffers available with app */
|
||||||
EnetAppUtils_assert(EnetQueue_getQCount(&rxFreeQ) == 0U);
|
EnetAppUtils_assert(EnetQueue_getQCount(&rxSubmitQ) == 0U);
|
||||||
}
|
|
||||||
|
|
||||||
free_rtos::EthRxFlow::EthRxFlow(TEthFrameMacAddr& mac_addr, EthStackIface& eth_stack) :
|
|
||||||
mac_addr_{mac_addr},
|
|
||||||
eth_stack_{eth_stack},
|
|
||||||
passive_mode_{false}
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_rtos::EthRxFlow::rxProcessPktTask()
|
void free_rtos::EthRxFlow::rxProcessPktTask()
|
||||||
{
|
{
|
||||||
EnetDma_PktQ rxReadyQ; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
EnetDma_PktQ rxReadyQ; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||||
EnetDma_PktQ rxFreeQ; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
EnetDma_Pkt* rxPktInfo; /// <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
EnetDma_Pkt* rxPktInfo; /// <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
int32_t status;
|
int32_t status;
|
||||||
|
|
||||||
@ -105,13 +116,14 @@ void free_rtos::EthRxFlow::rxProcessPktTask()
|
|||||||
|
|
||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||||
EnetQueue_initQ(&rxReadyQ);
|
EnetQueue_initQ(&rxReadyQ);
|
||||||
EnetQueue_initQ(&rxFreeQ);
|
|
||||||
|
|
||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> rxReadyQ
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> rxReadyQ
|
||||||
status = EnetDma_retrieveRxPktQ(dma_handle_, &rxReadyQ);
|
status = EnetDma_retrieveRxPktQ(dma_handle_, &rxReadyQ);
|
||||||
EnetAppUtils_assert(status == ENET_SOK);
|
EnetAppUtils_assert(status == ENET_SOK);
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Reload DMA with a new rx free queue as fast as possible
|
||||||
|
reloadDmaRxPktQ(EnetQueue_getQCount(&rxReadyQ));
|
||||||
|
|
||||||
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);
|
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);
|
||||||
|
|
||||||
while(rxPktInfo != nullptr)
|
while(rxPktInfo != nullptr)
|
||||||
@ -133,7 +145,7 @@ void free_rtos::EthRxFlow::rxProcessPktTask()
|
|||||||
ENET_PKTSTATE_APP_WITH_FREEQ);
|
ENET_PKTSTATE_APP_WITH_FREEQ);
|
||||||
|
|
||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
EnetQueue_enq(&rxFreeQ, &rxPktInfo->node);
|
EnetQueue_enq(&rx_free_pktq_, &rxPktInfo->node);
|
||||||
|
|
||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);
|
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);
|
||||||
@ -141,22 +153,10 @@ void free_rtos::EthRxFlow::rxProcessPktTask()
|
|||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
++rx_pkt_counter_;
|
++rx_pkt_counter_;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ENET_PKTSTATE_APP_WITH_FREEQ)
|
|
||||||
* <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ENET_PKTSTATE_APP_WITH_DRIVER. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EnetDma_checkPktState.
|
|
||||||
*/
|
|
||||||
EnetAppUtils_validatePacketState(&rxFreeQ,
|
|
||||||
ENET_PKTSTATE_APP_WITH_FREEQ,
|
|
||||||
ENET_PKTSTATE_APP_WITH_DRIVER);
|
|
||||||
|
|
||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
EnetDma_submitRxPktQ(dma_handle_, &rxFreeQ);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool free_rtos::EthRxFlow::open(uint32_t id, int32_t enetDmaRxChId)
|
bool free_rtos::EthRxFlow::open(uint32_t id, int32_t enetDmaRxChId, UBaseType_t task_priority, UBaseType_t task_stack_size)
|
||||||
{
|
{
|
||||||
EnetApp_GetDmaHandleInArgs rxInArgs;
|
EnetApp_GetDmaHandleInArgs rxInArgs;
|
||||||
EnetApp_GetRxDmaHandleOutArgs rxChInfo;
|
EnetApp_GetRxDmaHandleOutArgs rxChInfo;
|
||||||
@ -170,7 +170,7 @@ bool free_rtos::EthRxFlow::open(uint32_t id, int32_t enetDmaRxChId)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!rx_task.Create("rx_task", RX_TASK_PRIORITY, rxTaskHandler, this, RX_TASK_STACK_SIZE))
|
if (!rx_task.Create("rx_task", task_priority, rxTaskHandler, this, task_stack_size))
|
||||||
{
|
{
|
||||||
EnetAppUtils_print("rx_flow %u: failed to create rx task.\r\n", id_);
|
EnetAppUtils_print("rx_flow %u: failed to create rx task.\r\n", id_);
|
||||||
return false;
|
return false;
|
||||||
@ -212,7 +212,8 @@ bool free_rtos::EthRxFlow::open(uint32_t id, int32_t enetDmaRxChId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
eth_initRxReadyPktQ(dma_handle_, this);
|
initRxFreePktQ(ENET_SYSCFG_TOTAL_NUM_RX_PKT/2, this);
|
||||||
|
reloadDmaRxPktQ(ENET_SYSCFG_TOTAL_NUM_RX_PKT/4);
|
||||||
|
|
||||||
open_ = true;
|
open_ = true;
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <networking/enet/core/include/dma/udma/enet_udma.h>
|
#include <networking/enet/core/include/dma/udma/enet_udma.h>
|
||||||
|
#include <networking/enet/core/include/core/enet_dma.h>
|
||||||
|
#include <networking/enet/core/include/core/enet_queue.h>
|
||||||
|
|
||||||
#include "free_rtos/handler_store/handler_store.hpp"
|
#include "free_rtos/handler_store/handler_store.hpp"
|
||||||
#include "free_rtos/semaphore/semaphore.hpp"
|
#include "free_rtos/semaphore/semaphore.hpp"
|
||||||
@ -25,7 +27,7 @@ class EthRxFlow {
|
|||||||
public:
|
public:
|
||||||
EthRxFlow(TEthFrameMacAddr& mac_addr, EthStackIface& eth_stack);
|
EthRxFlow(TEthFrameMacAddr& mac_addr, EthStackIface& eth_stack);
|
||||||
|
|
||||||
bool open(uint32_t id, int32_t enetDmaRxChId);
|
bool open(uint32_t id, int32_t enetDmaRxChId, UBaseType_t task_priority, UBaseType_t task_stack_size);
|
||||||
|
|
||||||
bool is_open() {return open_;}
|
bool is_open() {return open_;}
|
||||||
|
|
||||||
@ -37,6 +39,9 @@ private:
|
|||||||
|
|
||||||
friend void rxTaskHandler(void *appData); ///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
friend void rxTaskHandler(void *appData); ///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
void initRxFreePktQ(uint32_t qCount, void * appPriv);
|
||||||
|
void reloadDmaRxPktQ(uint32_t qCount);
|
||||||
|
|
||||||
void rxProcessPktTask(); ///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
void rxProcessPktTask(); ///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -62,6 +67,7 @@ private:
|
|||||||
uint32_t rx_start_flow_idx_;
|
uint32_t rx_start_flow_idx_;
|
||||||
uint32_t rx_flow_idx_;
|
uint32_t rx_flow_idx_;
|
||||||
EnetDma_RxChHandle dma_handle_;
|
EnetDma_RxChHandle dma_handle_;
|
||||||
|
EnetDma_PktQ rx_free_pktq_;
|
||||||
|
|
||||||
bool passive_mode_; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
bool passive_mode_; /// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
};
|
};
|
||||||
|
|||||||
@ -13,10 +13,7 @@
|
|||||||
#include "free_rtos/task/task.hpp"
|
#include "free_rtos/task/task.hpp"
|
||||||
|
|
||||||
namespace free_rtos {
|
namespace free_rtos {
|
||||||
static constexpr uint32_t RX_TASK_PRIORITY = Task::TaskPriorityHiest - 2;
|
static constexpr uint32_t LINK_TASK_PRIORITY = tskIDLE_PRIORITY + 2;
|
||||||
static constexpr uint32_t RX_TASK_STACK_SIZE = (10U * 1024U);
|
|
||||||
|
|
||||||
static constexpr uint32_t LINK_TASK_PRIORITY = 2;
|
|
||||||
static constexpr uint32_t LINK_TASK_STACK_SIZE = (10U * 1024U);
|
static constexpr uint32_t LINK_TASK_STACK_SIZE = (10U * 1024U);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user