删除了ul方向数据包是否及时被RC读取的判断

This commit is contained in:
yonglin.gui 2023-09-09 10:10:39 +08:00
parent cf575de36e
commit 842d1d638d

View File

@ -176,11 +176,12 @@ static inline int32_t ucp_pcie_dl_worker(uint32_t inst_id)
} }
} }
uint32_t extInc, intInc; uint32_t extInc = 0;
uint32_t t_idx; uint32_t intInc = 0;
uint32_t t_idx = 0;
uint32_t i = 0; uint32_t i = 0;
UcpPcieDmaThread_t* pDmaThread; UcpPcieDmaThread_t* pDmaThread = NULL;
UcpPcieDmaComplete_t* pCmplt; UcpPcieDmaComplete_t* pCmplt = NULL;
uint32_t num_rx_queues = MAX_Q_NUM_DL_TRAFFIC;//跟业务queue对应共6个queue uint32_t num_rx_queues = MAX_Q_NUM_DL_TRAFFIC;//跟业务queue对应共6个queue
//按照传输队列判断是否有队列已经传输完成传输队列一共有6个 //按照传输队列判断是否有队列已经传输完成传输队列一共有6个
for(i = 0; i < MAX_INSTANCE_NUM; i++) for(i = 0; i < MAX_INSTANCE_NUM; i++)
@ -222,19 +223,21 @@ static inline int32_t ucp_pcie_dl_worker(uint32_t inst_id)
} }
} }
//uint32_t dma_idx; //uint32_t dma_idx;
uint32_t n, N; uint32_t n =0;
uint32_t N = 0;
//uint32_t ext_size; //uint32_t ext_size;
uint32_t freed; uint32_t freed = 0;
uint32_t ext_idx; uint32_t ext_idx = 0;
//int8_t desc_idx; //int8_t desc_idx;
uint32_t pcieOffset; uint32_t pcieOffset = 0;
uint32_t H, L; uint32_t H = 0;
uint64_t dst_addr; uint32_t L = 0;
UcpExtTraffic_t* ext_ch; uint64_t dst_addr = 0;
PcieTrafficDescriptor_t *desc_hdr; UcpExtTraffic_t* ext_ch = NULL;
PcieTrafficDescriptor_t *desc; PcieTrafficDescriptor_t *desc_hdr = NULL;
MsgMemBufAttr_t* attr; PcieTrafficDescriptor_t *desc = NULL;
DwPcieEpDmaChDesc_t rdma_desc_ch[MAX_CH_NUM_UCP_DMA]; MsgMemBufAttr_t* attr = NULL;
DwPcieEpDmaChDesc_t rdma_desc_ch[MAX_CH_NUM_UCP_DMA] = {0};
//判断是否有业务队列需要接收数据包如果有需要接收的数据则寻找一个空闲DMA读通道进行接收 //判断是否有业务队列需要接收数据包如果有需要接收的数据则寻找一个空闲DMA读通道进行接收
for (k = 0; k < num_rx_queues; k++) { for (k = 0; k < num_rx_queues; k++) {
ext_ch = pUcpPcieMemInfo->pExtDlTraffic[inst_id][k]; ext_ch = pUcpPcieMemInfo->pExtDlTraffic[inst_id][k];
@ -411,10 +414,11 @@ static inline int32_t ucp_pcie_ul_worker(uint32_t inst_id)
} }
} }
uint32_t extInc, intInc; uint32_t extInc = 0;
uint32_t t_idx; uint32_t intInc = 0;
UcpPcieDmaThread_t* pDmaThread; uint32_t t_idx = 0;
UcpPcieDmaComplete_t* pCmplt; UcpPcieDmaThread_t* pDmaThread = NULL;
UcpPcieDmaComplete_t* pCmplt = NULL;
uint32_t num_tx_queues = MAX_Q_NUM_UL_TRAFFIC; uint32_t num_tx_queues = MAX_Q_NUM_UL_TRAFFIC;
uint32_t i = 0; uint32_t i = 0;
for(i = 0; i < MAX_INSTANCE_NUM; i++) for(i = 0; i < MAX_INSTANCE_NUM; i++)
@ -464,22 +468,24 @@ static inline int32_t ucp_pcie_ul_worker(uint32_t inst_id)
} }
} }
//uint32_t dma_idx; //uint32_t dma_idx;
uint32_t n, N; uint32_t n = 0;
uint32_t int_num, ext_num; uint32_t N = 0;
uint32_t int_num, ext_num = 0;
//uint32_t ext_size; //uint32_t ext_size;
uint32_t freed; uint32_t freed = 0;
uint32_t ext_idx; uint32_t ext_idx = 0;
//uint32_t desc_idx; //uint32_t desc_idx;
//int8_t buf_idx; //int8_t buf_idx;
uint32_t pcieOffset; uint32_t pcieOffset = 0;
uint32_t H, L; uint32_t H = 0;
uint64_t src_addr; uint32_t L = 0;
UcpExtTraffic_t* ext_ch; uint64_t src_addr = 0;
MsgQueueLocalInfo_t* int_ch; UcpExtTraffic_t* ext_ch = NULL;
PcieTrafficDescriptor_t *desc_hdr; MsgQueueLocalInfo_t* int_ch = NULL;
PcieTrafficDescriptor_t *desc; PcieTrafficDescriptor_t *desc_hdr = NULL;
MsgMemBufAttr_t* attr; PcieTrafficDescriptor_t *desc = NULL;
DwPcieEpDmaChDesc_t wdma_desc_ch[MAX_CH_NUM_UCP_DMA]; MsgMemBufAttr_t* attr = NULL;
DwPcieEpDmaChDesc_t wdma_desc_ch[MAX_CH_NUM_UCP_DMA] = {0};
//检查是否有通道需要有数据发送一共6个queue逐个通道检查 //检查是否有通道需要有数据发送一共6个queue逐个通道检查
for (k = 0; k < num_tx_queues; k++, N = 0) { for (k = 0; k < num_tx_queues; k++, N = 0) {
//ucp_queue_ul_update_in(k); //ucp_queue_ul_update_in(k);
@ -489,7 +495,7 @@ static inline int32_t ucp_pcie_ul_worker(uint32_t inst_id)
int_num = int_ch->in - int_ch->out;//本次要传输的数据包的个数 int_num = int_ch->in - int_ch->out;//本次要传输的数据包的个数
if(0 == int_num) if(0 == int_num)
{ {
PCIE_DEBUG_LOG("UL no pkt need send! TRCCNT[[%d][%d] = %d epcntIng = %d\n", inst_id, k, pCnt->dlTxCounter[inst_id][k], ext_ch->epCntIng); PCIE_DEBUG_LOG("UL no pkt need send! TRCCNT[[%d][%d] = %d epcntIng = %d\n", inst_id, k, pCnt->ulTxCounter[inst_id][k], ext_ch->epCntIng);
continue; continue;
} }
if(int_num > pCnt->ulDescNum[inst_id][k])//MAX_THREAD_NUM_UCP_DMA) if(int_num > pCnt->ulDescNum[inst_id][k])//MAX_THREAD_NUM_UCP_DMA)
@ -503,6 +509,8 @@ static inline int32_t ucp_pcie_ul_worker(uint32_t inst_id)
PCIE_DEBUG_LOG("UL localUlQueue[%d][%d] int_ch->in=%d int_ch->out=%d int_num= %d \n", inst_id, k, int_ch->in, int_ch->out, int_num); PCIE_DEBUG_LOG("UL localUlQueue[%d][%d] int_ch->in=%d int_ch->out=%d int_num= %d \n", inst_id, k, int_ch->in, int_ch->out, int_num);
PCIE_DEBUG_LOG("UL pCnt->ulDescNum[%d][%d] = %d ext_ch->epCntIng=%d pCnt->ulRxCounter[%d][%d]=%d \n", PCIE_DEBUG_LOG("UL pCnt->ulDescNum[%d][%d] = %d ext_ch->epCntIng=%d pCnt->ulRxCounter[%d][%d]=%d \n",
inst_id, k, pCnt->ulDescNum[inst_id][k], ext_ch->epCntIng, inst_id, k, pCnt->ulRxCounter[inst_id][k]); inst_id, k, pCnt->ulDescNum[inst_id][k], ext_ch->epCntIng, inst_id, k, pCnt->ulRxCounter[inst_id][k]);
N = int_num;
#if 0
ext_num = pCnt->ulDescNum[inst_id][k] - ((ext_ch->epCntIng - pCnt->ulRxCounter[inst_id][k]) & pCnt->ulDescNum[inst_id][k]); //此处需要对描述符取模否则如果一直发送但是没有接收则会导致DMA无法启动 ext_num = pCnt->ulDescNum[inst_id][k] - ((ext_ch->epCntIng - pCnt->ulRxCounter[inst_id][k]) & pCnt->ulDescNum[inst_id][k]); //此处需要对描述符取模否则如果一直发送但是没有接收则会导致DMA无法启动
N = (int_num < ext_num) ? int_num : ext_num; //此处是判断Bar空间上的传输描述符个数是否够本次传输取出本次传输的数据包的个数 N = (int_num < ext_num) ? int_num : ext_num; //此处是判断Bar空间上的传输描述符个数是否够本次传输取出本次传输的数据包的个数
if (0 == N) if (0 == N)
@ -510,6 +518,7 @@ static inline int32_t ucp_pcie_ul_worker(uint32_t inst_id)
PCIE_DEBUG_LOG("UL not free bar desc N = %d\n", N); PCIE_DEBUG_LOG("UL not free bar desc N = %d\n", N);
continue; continue;
} }
#endif
PCIE_DEBUG_LOG("UL INT_CH[%d][%d] = 0x%x N = %d in = %d out = %d ext_num = %d \n", inst_id, k, (uint32_t)int_ch, N, int_ch->in, int_ch->out, ext_num); PCIE_DEBUG_LOG("UL INT_CH[%d][%d] = 0x%x N = %d in = %d out = %d ext_num = %d \n", inst_id, k, (uint32_t)int_ch, N, int_ch->in, int_ch->out, ext_num);
PCIE_DEBUG_LOG("UL pCnt->ulRxCounter[%d][%d]= %d pCnt->ulTxCounter[%d][%d] = %d\n", inst_id, k, pCnt->ulRxCounter[inst_id][k], inst_id, k, pCnt->ulTxCounter[inst_id][k]); PCIE_DEBUG_LOG("UL pCnt->ulRxCounter[%d][%d]= %d pCnt->ulTxCounter[%d][%d] = %d\n", inst_id, k, pCnt->ulRxCounter[inst_id][k], inst_id, k, pCnt->ulTxCounter[inst_id][k]);