交换芯片支持:报文、计数、表项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可以实现连续内存的报文发送,或者连续接收不同存储空间的报文。

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

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

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

2、DMA报文收发流程

DMA报文发送流程

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]

DMA报文接收流程

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

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

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

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

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

6、  其他BIT置0;

报文接收或发送的描述字设置后,配置通道((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中断,如图所示:

软件收到中断后,通过检查当前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 实现原理的更多相关文章

  1. DPDK收发包全景分析

    前言:DPDK收发包是基础核心模块,从网卡收到包到驱动把包拷贝到系统内存中,再到系统对这块数据包的内存管理,由于在处理过程中实现了零拷贝,数据包从接收到发送始终只有一份,对这个报文的管理在前面的mem ...

  2. 基于335X平台Linux交换芯片驱动开发

    基于335X平台Linux交换芯片驱动开发   一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.Kernel版本:4.4.12,采用FDT 3.交换芯片MARVEL ...

  3. UDP收发buffer尺寸对收发包流量的影响

    下午验证一个高流量发包问题时,发现了一个值得记录的问题:socket的收发buffer尺寸是会影响收发包的效率的,高流量通讯时,若socket的收发buffer尺寸过小会一定程度降低收发包效率. 自己 ...

  4. BCM策略路由交换芯片

    BCM几个交换芯片的寄存器和相关的路由 EGR_L3_NEXT_HOP.EGR_L3_INTF.ING_L3_NEXT_HOP BCM XGS系列SDK中和路由相关的几个命令 l3 l3table. ...

  5. kernel笔记——网络收发包流程

    本文将介绍网络连接建立的过程.收发包流程,以及其中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 应用层 对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个 ...

  6. 基于335X平台的UBOOT中交换芯片驱动移植

    基于335X平台的UBOOT中交换芯片驱动移植 一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3 ...

  7. [development][dpdk][pktgen] 网卡收发包性能测试

    一: 多队列及中断信息收集 [root@T185 ~]# ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: RX Mini ...

  8. python 爬虫 ~ 查看收发包的情况

    DebugLog 可以用来查看收发包的情况,比较有意思,现特意记录下来: Sample: import urllib2 httpHandler = urllib2.HTTPHandler(debugl ...

  9. linux系统上用户态pppoe收发包过程

    花了几天看了一下ppp/pppoe有关的东西,画了一下用户态pppoe收发包的示意图.

随机推荐

  1. (转) The major advancements in Deep Learning in 2016

    The major advancements in Deep Learning in 2016 Pablo Tue, Dec 6, 2016 in MACHINE LEARNING DEEP LEAR ...

  2. Controller

    http://www.cnblogs.com/artech/archive/2012/08/15/action-result-03.html

  3. facebook darkforest围棋ai测试

    0.darkforest说明 darkforest是facebook田渊栋博士开发的深度学习围棋程序,2016的uec cup得了第二名(http://jsb.cs.uec.ac.jp/~igo/en ...

  4. 查看死锁 的存储过程 ,工具存储过程 sp_who_lock

    http://blog.sina.com.cn/s/blog_95b5eb8c010162jp.html if exists (select * from dbo.sysobjects where i ...

  5. Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory'

    1.根本原因在http://askubuntu.com/questions/606732/php-fatal-error-uncaught-exception-pdoexception-with-me ...

  6. .NET中的动态编译

    代码的动态编译并执行是一个.NET平台提供给我们的很强大的工具用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序.这在很大程度上给我们提供了另外 ...

  7. 高通AR增强现实Unity3D

    AR: 增强现实,台湾翻译叫做扩张实境 1.注册.然后下载sdk(注册账号主要是为了第3步中制作识别图而用的) 下载地址:https://developer.vuforia.com/resources ...

  8. json在项目中的应用大总结

    一.摘要 刚开始接触json的时候,那时候还不太清楚json到底是个什么东西,然后就在项目中使用了它.因为没有搞明白json的本质,所以刚开始使用json的时候走了不少弯路.这次总结一些json的知识 ...

  9. easyUI+mvc权限管理后台

    通过按钮和菜单,组合成基本的功能,菜单的功能可以编码修改,但浏览功能是菜单基本的入口,只有角色赋予了浏览功能,才能访问. 基本按钮表 菜单模块 菜单分配按钮 角色授权 下面是对一张表的基本操作 模型 ...

  10. Microsoft Capicom 2.1 On 64bit OS

    第一步下载capicom.dll http://files.cnblogs.com/files/chen110xi/DLL.7z 第二步注册capicom.dll至SysWow64 第三步VS中设置 ...