dev(SF-60): Незначительные доработки
This commit is contained in:
parent
53229dbfa7
commit
75a0d57eb4
@ -53,7 +53,7 @@ free_rtos::EthRxFlow::EthRxFlow(TEthFrameMacAddr& mac_addr, EthStackIface& eth_s
|
|||||||
EnetQueue_initQ(&rx_free_pktq_);
|
EnetQueue_initQ(&rx_free_pktq_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_rtos::EthRxFlow::initRxFreePktQ(uint32_t qCount, void * appPriv)
|
void free_rtos::EthRxFlow::initRxFreePktQ(void * appPriv, EnetDma_PktQ * p_packet_queue, uint32_t qCount)
|
||||||
{
|
{
|
||||||
EnetDma_PktQ rxReadyQ;
|
EnetDma_PktQ rxReadyQ;
|
||||||
EnetDma_Pkt *pPktInfo;
|
EnetDma_Pkt *pPktInfo;
|
||||||
@ -69,11 +69,12 @@ void free_rtos::EthRxFlow::initRxFreePktQ(uint32_t qCount, 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(&rx_free_pktq_, &pPktInfo->node);
|
EnetQueue_enq(p_packet_queue, &pPktInfo->node);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieve any packets which are ready */
|
/* Retrieve any packets which are ready */
|
||||||
EnetQueue_initQ(&rxReadyQ);
|
EnetQueue_initQ(&rxReadyQ);
|
||||||
|
|
||||||
status = EnetDma_retrieveRxPktQ(dma_handle_, &rxReadyQ);
|
status = EnetDma_retrieveRxPktQ(dma_handle_, &rxReadyQ);
|
||||||
EnetAppUtils_assert(status == ENET_SOK);
|
EnetAppUtils_assert(status == ENET_SOK);
|
||||||
|
|
||||||
@ -89,7 +90,7 @@ void free_rtos::EthRxFlow::submitFreeRxPkts(uint32_t qCount)
|
|||||||
|
|
||||||
EnetQueue_initQ(&rxSubmitQ);
|
EnetQueue_initQ(&rxSubmitQ);
|
||||||
|
|
||||||
while((rxPktInfo != nullptr) && (qCount > 0))
|
while((qCount > 0) && (rxPktInfo != nullptr))
|
||||||
{
|
{
|
||||||
EnetQueue_enq(&rxSubmitQ, &rxPktInfo->node);
|
EnetQueue_enq(&rxSubmitQ, &rxPktInfo->node);
|
||||||
|
|
||||||
@ -102,23 +103,13 @@ void free_rtos::EthRxFlow::submitFreeRxPkts(uint32_t qCount)
|
|||||||
ENET_PKTSTATE_APP_WITH_DRIVER);
|
ENET_PKTSTATE_APP_WITH_DRIVER);
|
||||||
|
|
||||||
status = EnetDma_submitRxPktQ(dma_handle_, &rxSubmitQ);
|
status = EnetDma_submitRxPktQ(dma_handle_, &rxSubmitQ);
|
||||||
|
|
||||||
if(status != ENET_SOK) {
|
|
||||||
EnetAppUtils_print("rx_flow %u: failed to reload rx dma flow\r\n", id_);
|
|
||||||
EnetAppUtils_assert(status == ENET_SOK);
|
EnetAppUtils_assert(status == ENET_SOK);
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
qCount = EnetQueue_getQCount(&rxSubmitQ);
|
qCount = EnetQueue_getQCount(&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 */
|
||||||
if(qCount != 0U) {
|
|
||||||
EnetAppUtils_print("rx_flow %u: number of DMA descriptors should be equal to the number of free Ethernet buffers\r\n", id_);
|
|
||||||
EnetAppUtils_assert(qCount == 0U);
|
EnetAppUtils_assert(qCount == 0U);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void free_rtos::EthRxFlow::rxProcessPktTask()
|
void free_rtos::EthRxFlow::rxProcessPktTask()
|
||||||
{
|
{
|
||||||
@ -132,19 +123,16 @@ void free_rtos::EthRxFlow::rxProcessPktTask()
|
|||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
status = sem_[e_signalRxPkt].pend();
|
status = sem_[e_signalRxPkt].pend();
|
||||||
|
|
||||||
if(status != SystemP_SUCCESS) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
EnetDma_PktQ rxFreeQ;
|
||||||
|
|
||||||
|
EnetQueue_initQ(&rxFreeQ);
|
||||||
|
|
||||||
status = EnetDma_retrieveRxPktQ(dma_handle_, &rxReadyQ);
|
status = EnetDma_retrieveRxPktQ(dma_handle_, &rxReadyQ);
|
||||||
EnetAppUtils_assert(status == ENET_SOK);
|
EnetAppUtils_assert(status == ENET_SOK);
|
||||||
|
|
||||||
readyQCount = EnetQueue_getQCount(&rxReadyQ);
|
readyQCount = EnetQueue_getQCount(&rxReadyQ);
|
||||||
|
EnetAppUtils_assert(readyQCount != 0);
|
||||||
if(readyQCount == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reload DMA with a new rx free queue as fast as possible
|
// Reload DMA with a new rx free queue as fast as possible
|
||||||
submitFreeRxPkts(readyQCount);
|
submitFreeRxPkts(readyQCount);
|
||||||
@ -159,17 +147,16 @@ void free_rtos::EthRxFlow::rxProcessPktTask()
|
|||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
|
|
||||||
EnetDma_checkPktState(&rxPktInfo->pktState,
|
EnetQueue_enq(&rxFreeQ, &rxPktInfo->node);
|
||||||
ENET_PKTSTATE_MODULE_APP,
|
|
||||||
|
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);
|
||||||
|
}
|
||||||
|
|
||||||
|
EnetAppUtils_validatePacketState(&rxFreeQ,
|
||||||
ENET_PKTSTATE_APP_WITH_DRIVER,
|
ENET_PKTSTATE_APP_WITH_DRIVER,
|
||||||
ENET_PKTSTATE_APP_WITH_FREEQ);
|
ENET_PKTSTATE_APP_WITH_FREEQ);
|
||||||
|
|
||||||
EnetQueue_enq(&rx_free_pktq_, &rxPktInfo->node);
|
EnetQueue_append(&rx_free_pktq_, &rxFreeQ);
|
||||||
|
|
||||||
rxPktInfo = (EnetDma_Pkt *)EnetQueue_deq(&rxReadyQ);
|
|
||||||
|
|
||||||
++rx_pkt_counter_;
|
|
||||||
}
|
|
||||||
} while(readyQCount > 0);
|
} while(readyQCount > 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -181,8 +168,6 @@ bool free_rtos::EthRxFlow::open(uint32_t id, int32_t enetDmaRxChId, UBaseType_t
|
|||||||
|
|
||||||
EnetAppUtils_print("rx_flow %u: opening flow...\r\n", id);
|
EnetAppUtils_print("rx_flow %u: opening flow...\r\n", id);
|
||||||
|
|
||||||
rx_pkt_counter_ = 0;
|
|
||||||
|
|
||||||
if (open_) {
|
if (open_) {
|
||||||
EnetAppUtils_print("rx_flow %u: rx flow is already open. Do nothing.\r\n", id_);
|
EnetAppUtils_print("rx_flow %u: rx flow is already open. Do nothing.\r\n", id_);
|
||||||
return true;
|
return true;
|
||||||
@ -230,7 +215,7 @@ bool free_rtos::EthRxFlow::open(uint32_t id, int32_t enetDmaRxChId, UBaseType_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <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>
|
||||||
initRxFreePktQ(ENET_SYSCFG_TOTAL_NUM_RX_PKT/2, this);
|
initRxFreePktQ(this, &rx_free_pktq_, ENET_SYSCFG_TOTAL_NUM_RX_PKT/2);
|
||||||
submitFreeRxPkts(ENET_SYSCFG_TOTAL_NUM_RX_PKT/4);
|
submitFreeRxPkts(ENET_SYSCFG_TOTAL_NUM_RX_PKT/4);
|
||||||
|
|
||||||
open_ = true;
|
open_ = true;
|
||||||
|
|||||||
@ -40,7 +40,7 @@ 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 initRxFreePktQ(void * appPriv, EnetDma_PktQ * p_packet_queue, uint32_t qCount);
|
||||||
void submitFreeRxPkts(uint32_t qCount);
|
void submitFreeRxPkts(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>
|
||||||
@ -60,11 +60,8 @@ private:
|
|||||||
|
|
||||||
TEthFrameMacAddr& mac_addr_; /// mac <20><><EFBFBD><EFBFBD><EFBFBD>
|
TEthFrameMacAddr& mac_addr_; /// mac <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
uint32_t rx_pkt_counter_;
|
|
||||||
|
|
||||||
EthStackIface& eth_stack_;
|
EthStackIface& eth_stack_;
|
||||||
|
|
||||||
///------------------------------------
|
|
||||||
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_;
|
||||||
|
|||||||
@ -26,16 +26,13 @@
|
|||||||
/**
|
/**
|
||||||
* <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> p_packet_queue
|
* <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> p_packet_queue
|
||||||
*/
|
*/
|
||||||
static void eth_initTxFreePktQ(void * appPriv, EnetDma_PktQ * p_packet_queue)
|
static void eth_initTxFreePktQ(void * appPriv, EnetDma_PktQ * p_packet_queue, uint32_t qCount)
|
||||||
{
|
{
|
||||||
EnetDma_Pkt *pPktInfo;
|
EnetDma_Pkt *pPktInfo;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
int i_max = (ENET_SYSCFG_TOTAL_NUM_TX_PKT);
|
|
||||||
|
|
||||||
/* Initialize TX EthPkts and queue them to txFreePktInfoQ */
|
/* Initialize TX EthPkts and queue them to txFreePktInfoQ */
|
||||||
for (i = 0U; i < i_max; i++)
|
for (i = 0U; i < qCount; i++)
|
||||||
{
|
{
|
||||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
pPktInfo = EnetMem_allocEthPkt(appPriv,
|
pPktInfo = EnetMem_allocEthPkt(appPriv,
|
||||||
@ -125,7 +122,7 @@ bool free_rtos::EthTxFlow::open(uint32_t id, int32_t enetDmaTxChId)
|
|||||||
dma_handle_ = txChInfo.hTxCh;
|
dma_handle_ = txChInfo.hTxCh;
|
||||||
|
|
||||||
EnetAppUtils_assert(txChInfo.useGlobalEvt == true);
|
EnetAppUtils_assert(txChInfo.useGlobalEvt == true);
|
||||||
EnetAppUtils_assert(txChInfo.maxNumTxPkts >= (ENET_SYSCFG_TOTAL_NUM_TX_PKT));
|
EnetAppUtils_assert(txChInfo.maxNumTxPkts >= ENET_SYSCFG_TOTAL_NUM_TX_PKT);
|
||||||
|
|
||||||
if (dma_handle_ == nullptr)
|
if (dma_handle_ == nullptr)
|
||||||
{
|
{
|
||||||
@ -134,7 +131,7 @@ bool free_rtos::EthTxFlow::open(uint32_t id, int32_t enetDmaTxChId)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
eth_initTxFreePktQ(this, &tx_free_pktq_);
|
eth_initTxFreePktQ(this, &tx_free_pktq_, ENET_SYSCFG_TOTAL_NUM_TX_PKT);
|
||||||
|
|
||||||
open_= true;
|
open_= true;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user