美文网首页
交换芯片收发包的 DMA 实现原理

交换芯片收发包的 DMA 实现原理

作者: BensonLiang | 来源:发表于2018-11-14 15:35 被阅读0次

交换芯片支持:报文、计数、表项3种DMA类型,其中报文DMA包括系统从芯片到接收报文或发送报文到交换芯片,计数DMA用来从片上获取统计计数,表项DMA功能分为SLAM DMA(系统内存DMA到片上交换芯片表项内)和TABLE DMA(从芯片的表项内获取内容DMA到系统内存),是ram和交换芯片之间的两个方向上的操作。
交换芯片包含的每一个CMIC控制器都有4个DMA通道,其中CMIC1和2控制器只在内部使用,只有CMIC0控制器的4个DMA通道可以被用来收发报文,CMIC0内的3个DMA通道用于接收芯片上的数据到PCI内存空间,1个DMA通道用于发送PCI内存空间上的数据到芯片内,通道的报文收发功能是通过DMA Control Blocks(DCBs)和相关寄存器(CMIC_CMC0_DMA_DESC[3:0], CMIC_CMC0_DMA_STAT and CMIC_CMC0_CH[3:0]_DMA_CTRL.)配合完成的。
为了提高报文的DMA性能,CMIC使用CMIC_CMC0_DMA_CH[3:0]_INTR_COAL寄存器,基于每一个通道,使用可配置的定时器中断和可配置指定数目的描述符请求中断2种方式配合实现的,只要其中一种条件满足,都会上报中断给CPU,实现低时延、高负载的性能要求。

CMIC0内的4个DMA通道,其中3个用来接收DMA,1个用来发送DMA,3个接收DMA支持配置CoS队列,交换芯片支持3个接收DMA基于CoS同时进行收包,满足CPU通过COS收包的功能,通过CMIC_CMC0_CH[3:0]COS_CTRL_RX[1:0]寄存器可以把CoS配置到不同的DMA通道内,如果某一个CoS没有被配置到DMA内,该队列上的报文会被CMIC清空。DMA过程中发生的奇偶校验和其他致命错误都会被记录到CMIC_CMC0_DMA_STAT内,复位该寄存器的ENABLE位可以清除错误。BCM交换芯片的DMA控制器链表形式的DCBs(DMA控制块)来控制报文的收发操作,每一个DCM都由16个32长度的bit位组成(需要保证4字节对齐),包含了所有发送需要的信息,通过多个DCB组成的链表可以实现一个物理上连续的数组发送,或者接收报文到多个连续的内存地址。

1、收发报文控制块描述字

交换芯片所有的DMA收发包动作都是通过DCBs来完成的,使用一个或一组DCB可以实现连续内存的报文发送,或者连续接收不同存储空间的报文。

收发控制块描述字格式如下:

image

描述字内的具体内如如下:

image image image

DMA对齐要求:接收时,要求DCB.MEMORY_ADDRESS内存地址是4字节对齐,发送时要求字节对齐即可,DCBs在发送和接收时都要求4字节对齐。

2、DMA报文收发流程

DMA报文发送流程

image

1、 设置DCB在PCI内存的地址,填充在DCB.MEMORY_ADDRESS内;

2、 设置发送报文的物理内存地址到Block0 [31:0];

3、 设置DCB本次发送的报文字节个数Block1 [15:0];

4、 如果该DCB不是最后一个,C设置为1,Block1 [16];

5、 如果是多分片报文,当前DCB和下一个DCB描述字连续的,则设置S/G为1,Block1 [17];

6、 如果统计已更新,设置STAT为1,Block1 [20];

7、 如果当前描述字内的报文未PAUSE帧,置位PAUSE,Block1 [21];

8、 丢弃的报文,置位PURGE, Block1 [22];

9、 HG类型的报文,置位HG, Block1 [19];

10、 如果是HG1或HG2类型的报文,设置Block6-Block9;

11、 设置已发送的报文统计个数到BLOCK15[15:0]

image image

DMA报文接收流程

image

1、 设置报文在PCI的内存地址存储空间,4字节对齐;

2、 设置本次DMA发送的字节个数;

3、 如果是连续的DCB,C置位1;

4、 如果下一个DCB是同一报文的描述字,设置S/G为1;

5、 如果下一个DCB的存储空间不连续,设置RLD为1;

6、 其他BIT置0;

image image

报文接收或发送的描述字设置后,配置通道((CMIC_CMC0_CH[3:0]_DMA_CTRL))指导读写操作,开始读写时,CMIC_CMC0_CH[3:0]_DMA_CTRL.DMA_EN 置1,DMA结束后,CPU收到一个中断,如果只有1个描述字,则CHx_DESC_DONE置1,如果是描述字链表,CHx_CHAIN_DONE 位置1;

3、中断处理

交换芯片的DMA动作有2种中断类型,一种是end-of-descriptor,另一种是end-of-chain,当一个描述字完成后,end-of-descriptor中断上报,同一组内的所有描述字完成后,上报end-of-chain中断,如图所示:

image

软件收到中断后,通过检查当前DMA的状态字CMIC_CMC0_IRQ_STAT[4:0]判断中断类型,通过CMIC_CMC0_PCIE_IRQ_MASK[4:0]寄存器掩码该中断,防止同一类型的中断多次上报,根据置位的内容处理中断,处理完成后清空该中断,重新打开中断掩码。

4、配置CoS队列

DMA接收通道支持并发读取操作,3个DMA通道最大可以配置48个CoS优先级队列,配置寄存器CMIC_CMC0_CH[3:0]COS_CTRL_RX[1:0]内容如下

Huahuan(config)# hw-rw 0 command l/CMIC_CMC0_CH0_COS_CTRL_RX_0

Register: CMIC_CMC0_CH0_COS_CTRL_RX_0.cmic0 cpu register address 0x00031168

Flags:

Blocks: cmic0 (1 copy)

Description: When COS_RX_EN of CMIC_CONFIG is set, this register

indicates which cos are admitted by channel. This register

gives only the LS byte.

Displaying: reset defaults, reset value 0 mask 0xffffffff

COS_BMP<31:0> = 0

CMIC_CMC0_CH0_COS_CTRL_RX_1--配置后16个优先级

同一优先级队列不能配置到多个通道上,如果所有通道都没有配置指定的优先级队列,该优先级上的报文作丢弃处理。

相关文章

  • 交换芯片收发包的 DMA 实现原理

    交换芯片支持:报文、计数、表项3种DMA类型,其中报文DMA包括系统从芯片到接收报文或发送报文到交换芯片,计数DM...

  • 第三层交换机和路由器

    三层交换机和路由器之间的功能差距主要的差距还是在 设计的原理上 三层交换机的转发功能的实现是通过芯片进行的 路由器...

  • python-socket连续发包遇到的问题

    单次发包比较容易实现,多次发包的话,假如有10个地址,如果都在一个socket中完成的话,那么发包和收包不能同时进...

  • DMA详解

    这篇文章是对DMA基本概念、工作原理、常见问题做一个总结。 DMA概述 DMA的英文拼写是“Direct Memo...

  • 5、ReentrantLock

    ReentrantLock 是 java并发包下互斥锁,功能和synchronized差不多。但是他们的实现原理有...

  • 第九章 DMA控制接口

    9.1 DMA控制器8237A 每个8237A芯片有四个独立的DMA通道,每个通道具有不同的优先权,每个通道有4种...

  • 三层交换机简介

    功能: 实现不同网络之间的数据传输与交换。 特点: 1)交换技术和路由技术有机融合,按路由表选择端口并转发包。 2...

  • iOS 防止方法未实现造成的崩溃

    实现原理基于runtime的方法交换和消息发送机制 方法交换 method_exchangeImplementat...

  • P4编程 仿真实现IPv4与IPv6数据包的解析转发

    实验设置: mininet上仿真实现两台虚拟主机h1 h2python scapy实现发包(send.py)和收包...

  • SNP芯片的原理

    SNP芯片的原理 Illumina的SNP芯片原理Illumina的SNP生物芯片的优势在于:第1,它的检测通量很...

网友评论

      本文标题:交换芯片收发包的 DMA 实现原理

      本文链接:https://www.haomeiwen.com/subject/zijjfqtx.html