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

交换芯片支持:报文、计数、表项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个优先级

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,858评论 6 13
  • 姓名:周崇杰 学号:16140120059 专业:机械设计制造及其自动化 转载自:http://blog.csd...
    CJbaby阅读 4,676评论 0 5
  • 文章图片上传不正常,如需文档,可联系微信:1017429387 目录 1 安装... 4 1.1 配置探针... ...
    Mrhappy_a7eb阅读 6,280评论 0 5
  • # STM32之串口DMA接收不定长数据 ## 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,...
    杰杰T_T阅读 529评论 0 0
  • 夕阳红光,彩霞朝应;红尘梦事,何处是头。晚霞辉映,一缕青丝留头、淡淡忧伤,心中碧波万千,清澈之眸,望穿秋水,只为一...
    孤独是生命的葬礼阅读 254评论 0 0