描述符
以太网子系统中的DMA基于描述符的链表来传输数据。该应用程序将在系统内存中创建这些描述符。支持以下两种类型的描述符:NormaldescriptorContextdescriptor
普通描述符用于包数据,并提供适用于要传输的包的控制信息。每个普通描述符包含两个缓冲区和两个地址指针。这些缓冲区使适配器端口能够与各种类型的内存管理方案兼容。Normaldescriptor根据传输方向又可分为:TransmitNormaldescriptorReceiveNormaldescriptor
上下文描述符用于提供适用于要传输的数据包的控制信息。
描述符列表
描述符环和链结构如下所示:在环状结构中,描述符由在DMA_CH#_Control寄存器的DSL字段中编程的Word、DWord或LWord号分隔。该应用程序需要对总环的长度进行编程,即在一个DMA信道的以下寄存器中,环跨度中的描述符的总数:TransmitDescriptorRingLengthRegisterReceiveDescriptorRingLengthRegister描述符尾指针寄存器包含指向描述符地址的指针。基本地址和当前描述符指针决定了DMA可以处理的当前描述符的地址。比描述符尾指针所指示的位置小于一个位置的描述符为DMA所有。DMA会继续处理描述符,直到出现以下情况:当前描述符指针==描述符尾指针;
当此情况发生时,DMA将进入暂停模式。应用程序必须执行对描述符尾指针寄存器的写入,并更新尾指针,以便满足以下条件:当前描述符指针<描述符尾指针;
当到达环的末端时,DMA会自动封装基本地址。对于应用程序拥有的描述符,DES3的OWN位被重置为0;对于DMA拥有的描述符,OWN位被设置为如果应用程序在开头只有一个描述符,则应用程序将最后一个描述符地址设置为描述符基本地址+DMA处理第一个描述符,然后等待应用程序推进尾指针。
DWC_ether_qos中的DMA需要一个传输数据包的至少一个描述符。除了两个缓冲区、两个字节计数缓冲区和两个地址指针外,传输描述符还具有控制字段,可用于控制每个传输包的MAC操作。
传输普通描述符有两种格式:读取格式回写格式
TDES0缓冲区1地址指针或TSO标头地址指针这些位表示缓冲区1的物理地址。
TDES1缓冲区2或缓冲区1地址指针。此位表示在使用描述符环结构时,缓冲区2的物理地址。
IOC:完成时中断。TTSE/TMWD:启用传输时间戳或启用外部TSO内存写入。B2L:缓冲区2长度。VTIR:VLAN标签插入或替换器。HL/B1L:标头长度或缓冲区1长度。TDES3
OWN:归属位。CTXT:上下文类型。FD:第一个描述符。LD:最后一个描述符。CPC:CRC垫控制。SAIO:SA插入控制。值。)SLOTNUM/THL:AV模式下的槽号控制位。TCP/UDP标题长度TSE:TCP分段使能。CIC/TPL:校验和插入控制或TCP有效负载长度。TPL:预留长度或TCP有效载荷长度。FL/TPL:帧长度或TCP有效载荷长度。
传输描述符的回写格式包括时间戳低、时间戳高、OWN和状态位。回写格式仅适用于相应数据包的最后一个描述符。LD位设置在描述符中,其中DMA写回相应的传输包的状态和时间戳信息。TDES0TTSL:传输数据包时间戳低。
TDES1TTSH:传输数据包时间戳高。
TDES2Reserved:保留。
TDES3OWN:归属位。CTXT:上下文类型。FD:第一个描述符。LD:最后一个描述符。Rsvd[27:24]:Reserved,保留。DE[23]:描述符错误。Rsvd[22:18]:Reserved,保留。TTSS:Tx时间戳状态。EUE:ECC不可校正错误状态。FF=1报告了传输FIFO内存中的不可纠正错误。这是因为,所有这些数据包都被DWC_ether_qos刷新了。)ES:错误概要。JT:jabbertimeout,超时。FF:PacketFlushed,包刷新。PCE:PayloadChecksumError,有效载荷校验和错误。LoC:LossofCarrior,负载损失。NC:NoCarrior,无负载。LC:LateCollision,晚碰撞。EC:ExcessiveCollision,过度碰撞。CC:CollisionCount,碰撞计数。ED:ExcessiveDeferral,过度延迟。UF:UnderfolwError,下流错误。DB:DeferredBit,延迟位。IHE:IPHeaderError,IP头错误。
上下文描述符用于提供针对一步式时间戳校正的时间戳,即针对VLAN插入特性的VLAN标记ID。在上下文描述符之前可以在任何时间提供传输上下文描述符。该上下文对当前数据包和后续数据包都有效。
TDES0TTSL:传输数据包时间戳低。
TDES1TTSH:传输数据包时间戳高。
TDES2IVT:InnerVLANTag,内部VLAN标签。Rsvd:Reserved,保留。MSS:MaximumSegmentSize,最大段大小。
TDES3OWN:归属位。CTXT:上下文类型。Rsvd[29:28]:Reserved,保留。OSTC:One-StepTimestampCorrectionEnable,一步式时间戳校正使能。TCMSSV:One-StepTimestampCorrectionInputorMSSValid,一步式时间戳校正输入或MSS有效。Rsvd[25:24]:Reserved,保留。CDE:ContextDescriptorError,上下文描述符错误。Rsvd[22:20]:Reserved,保留。IVLTV:InnerVLANTagValid,内部VLAN标签有效。VLTV:VLANTagValid,VLAN标签有效。VT:VLANTag,VLAN标签。
DWC_ether_qos中的DMA只有在尾指针与基本指针或当前指针不才会尝试读取描述符。建议有一个长度的描述符环,可以容纳MAC接收到的至少两个完整的数据包。否则,由于描述符不可用,DMA的性能会受到很大影响。在这种情况下,MTL中的RxFIFO变满并开始丢弃数据包。
现在提供了以下接收描述符:NormalDescriptorContextDescriptor
所有RX描述符均由软件准备,并作为“普通”描述符交给DMA,内容如接收正常描述符所示。DMA读取此描述符,在将接收到的包传输到描述符指示的缓冲区后,RxDMA以相应的包状态关闭描述符。此状态的格式为“接收正常描述符”。
对于某些数据包,普通的描述符位不足以写入完整的状态。对于这样的数据包,RXDMA会将扩展状态写入下一个描述符。描述符回写的格式和内容在“接收上下文描述符”中进行了描述。
接收普通描述符有两种格式:读取格式回写格式
接收正常描述符的读取格式由头或缓冲区1地址、保留字段、有效负载或缓冲区2或下一个描述符地址、30位保留文件、OWN位和中断位组成。TDES0BUF1AP:标题或缓冲区1地址指针。
TDES1Reserved/BUF1AP:保留或缓冲区1地址指针。
TDES2BUF2AP:缓冲区2地址指针。,并写入完整的位置。)
TDES3OWN:归属位。IOC:完成中断使能。Rsvd[29:26]:Reserved,保留。BUF2V:缓冲区2地址有效。BUF1V:缓冲区1地址有效。Rsvd[23:16]:Reserved,保留。BUF2AP:缓冲区2地址指针。
此描述符对于该应用程序是只读的。只有DMA可以写入此描述符。上下文描述符提供与最后接收的包相关的扩展状态的信息。RDES3的第30位表示上下文类型描述符。TDES0RTSL:接收数据包时间戳低。
TDES1RTSH:接收数据包时间戳高。
TDES2Reserved:保留。
TDES3OWN:归属位。CTXT:上下文类型。DE:DescriptorError,描述符错误。Rsvd[28:0]:Reserved,保留。
文章为作者独立观点,不代表股票交易接口观点