在看multicore navigator有关文档和代码时,关于收发队列是如何关联起来的不清楚。descriper是如何从发队列到收队列的?在配置descriper和发对列时没有看到地址或者类似的东西指向特定的收队列,如果有多个收发队列,之间是怎么区分的,descriptor怎么知道该到哪里去?用的例子是c6678 驱动中pa_emac_example。
Bruce Chen1:
您好!
每个descriptor都会有一个指定的 Rx flow ,由Rx flow 指定将descriptor放到哪个RxQ.
striker Qian:
回复 Bruce Chen1:
这个rxflow是在收端制定的还是在descriptor上定义的?在Host packet descriptor上没有看到定义rxflow的域啊?
striker Qian:
回复 Andy Yin1:
以host packet descriptor为例,和包rxflow是在哪里指定的呢?另外“将descriptor回收到RX FLOW中配置的RxQ”的操作是手动编辑完成的吗?
Bruce Chen1:
回复 striker Qian:
您好!
1. 程序初始化时候配置好RxFlow,
For loopback PKTDMA modes (i.e. infrastructure cases), the Rx flow is specified in the
Tx descriptor, in the SOURCE_TAG_LO field. The PKTDMA will pass this value to the
streaming I/F as flow index.
In non-loopback cases, the Rx flow is specified in the packet
info structure of the Streaming I/F.
In the event no Rx flow is specified, the Rx DMA will use Rx flow N for Rx channel N.
2.你只需在RxFlow中配置好RxQ, Rx DMA 会将decriptor 放到指定的queue中;无须手动编辑
striker Qian:
回复 Bruce Chen1:
1,确实在文档中看到了这一段,但是还是有些不解。首先SOURCE_TAG_LO field和the packet
info structure of the Streaming I/F在TX descriptor中似乎是一段;其次,我用的例子是PA_EMAC EXAMPLE,其中SOURCE_TAG_LO field这个域并没有配置,而是在PA内部有申明。是不是RXFLOW的配置还和具体的外设有关?另外,Streaming I/F具体怎么解释?
2,在Rxflow的配置中找到了有关RXQ的配置,但我所用的例子PA_EMAC EXAMPLE仍有手动将完成操作的descriptor手动PUSH回RXFQ的语句
/* Reset the buffer lenght and put the descriptor back on the free queue */
pHostDesc->buffLen = pHostDesc->origBufferLen;
Qmss_queuePush (gRxFreeQHnd, (Ptr)pHostDesc, pHostDesc->buffLen, SIZE_HOST_DESC, Qmss_Location_TAIL);
这是为什么?
谢谢~~~
Wei:
回复 striker Qian:
在PA的例子里面,收到的RX报文是需要软件处理的,在软件处理结束以后,再由软件推送到FreeQ。如果自动回收,软件在什么时候通过什么方式能够处理收到的数据呢?:)
lyman_uestc:
回复 Bruce Chen1:
这里列举了三种情况,loopback、no loopback和no flow,这三种情况有什么区别么,loopback是在做回环么?