免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: tqkangkang

请教e1000中DMA传输的问题 [复制链接]

论坛徽章:
0
发表于 2007-04-25 17:14 |显示全部楼层
> 5. i386系统有没有CPU可以控制的DMA控制器我不是很清楚。
这话不大通啊, DMA控制器本身就是BUS Master方式访问内存的, 怎么可能受CPU控制呢?

论坛徽章:
0
发表于 2007-04-25 17:31 |显示全部楼层
在有些嵌入式系统是做DMA需要CPU去配置 dst, src, count,然后启动

但是在e1000这样的设备不需要配置src, count,也不需要cpu去启动dma,dma是网卡内部自己控制的

论坛徽章:
0
发表于 2007-04-25 18:37 |显示全部楼层
原帖由 tqkangkang 于 2007-4-25 08:53 发表于 1楼  
想通过修改e1000驱动,实现把网卡接收到的包以DMA方式传到指定的buffer里面。然而却找不到e1000是如何与dma交互的,请各位大虾指教,谢谢!


如果没有记错的话,驱动本身就是走的DMA方式吧??为什么还要改呢?

很久以前写过一篇e100的,不知对你有用没有??

http://www.skynet.org.cn/viewthread.php?tid=14&extra=page%3D1

[ 本帖最后由 独孤九贱 于 2007-4-25 18:46 编辑 ]

论坛徽章:
0
发表于 2007-04-26 10:04 |显示全部楼层

回复 #13 独孤九贱 的帖子

看来大家还是没有搞清楚PCI和DMA的区别啊。
1.E1000驱动针对的是intel的PCI网卡,没有也不需要使用DMA,只是借用了DMA这个概念,而实际的数据传输是通过PCI总线写到指定的内存中去,而这个操作是不需要CPU干预的,只需要在初始化时设置好缓冲区并通过PCI命令写入到网卡内部寄存器就行了。但这并不是DMA,具体请参考PCI2.2规范。需要者青留下邮箱。
2.CPU和DSP自带的DMA分为两种,一种是需要设置的,也就是说你需要指定源地址,目的地址,字节数,工作方式,更复杂的甚至要DMA描述符队列;一种是不需要设置的,也就是说你只要指定缓冲区,CPU和DSP就会隐式地调用DMA进行数据传输。

论坛徽章:
0
发表于 2007-04-26 16:48 |显示全部楼层
原帖由 zu_xf 于 2007-4-26 10:04 发表于 14楼  
看来大家还是没有搞清楚PCI和DMA的区别啊。
1.E1000驱动针对的是intel的PCI网卡,没有也不需要使用DMA,只是借用了DMA这个概念,而实际的数据传输是通过PCI总线写到指定的内存中去,而这个操作是不需要CPU干预 ...



给我一份PCI 2.2的DS吧,谢谢
bekars @ gmail.com

论坛徽章:
0
发表于 2007-04-26 18:58 |显示全部楼层

回复 #15 bekars 的帖子

已发,请查收,3M多

论坛徽章:
0
发表于 2007-04-27 09:39 |显示全部楼层
是不是可以这样理解:有些设备的DMA访问是不需要独立的DMA控制器的,我想zu_xf所指的DMA指的就是这种方式吧,但有些设备需要系统中有DMA控制器才能使用DMA方式工作,这也是有些设备需要使用request_dma(),有些则不用,特别是PCI设备不用的原因。

论坛徽章:
0
发表于 2007-04-27 11:13 |显示全部楼层
也可以这么说.不过准确地说,应该是这样子的.
DMA分为专有DMA和通用DMA两种.前者是不需要设置的;后者就是我们常说的DMA,执行内存到内存,内存到外设,外设到内存的数据移动任务.但是这两种DMA都有DMA控制器,只不过前者的控制器不归你管,呵呵.
另外要注意,PCI总线传输是通过PCI命令完成的,并不是DMA,也不需要什么DMA控制器.
原帖由 raise_sail 于 2007-4-27 09:39 发表于 17楼  
是不是可以这样理解:有些设备的DMA访问是不需要独立的DMA控制器的,我想zu_xf所指的DMA指的就是这种方式吧,但有些设备需要系统中有DMA控制器才能使用DMA方式工作,这也是有些设备需要使用request_dma(),有些 ...

论坛徽章:
0
发表于 2007-04-27 15:56 |显示全部楼层
原帖由 zu_xf 于 2007-4-26 10:04 发表于 14楼  
看来大家还是没有搞清楚PCI和DMA的区别啊。
1.E1000驱动针对的是intel的PCI网卡,没有也不需要使用DMA,只是借用了DMA这个概念,而实际的数据传输是通过PCI总线写到指定的内存中去,而这个操作是不需要CPU干预 ...



我也要一份 pci2.2 规范

why_641@hotmail.com

谢谢

:)

论坛徽章:
0
发表于 2007-04-27 16:01 |显示全部楼层
I-E标准的最大特点就是串行总线,和普通pci的区别类似于ide和sata的区别,具体说起来就比较麻烦了,简单来看指标的话,频率为2.5Ghz(这个恐怖,串行的好处,同样因为串行,位宽就没意义了,但是据说是什么8bit/10bit的传输),带宽 pci-E 1X单向传输250MBps,双向也就500了,同时pci-e的倍速最高可达16X,多少就自己乘吧,要注意的是pci-e不存在共享问题,也就是说挂在总线上的任何一个设备都会达到这个速度而不是所有设备带宽的总合。下面引用一篇文章的一段,感兴趣的自己看一下:

  在工作原理上,PCI Express与并行体系的PCI没有任何相似之处,它采用串行方式传输数据,而依靠高频率来获得高性能,因此PCI Express也一度被人称为“串行PCI”。由于串行传输不存在信号干扰,总线频率提升不受阻碍,PCI Express很顺利就达到2.5GHz的超高工作频率。其次,PCI Express采用全双工运作模式,最基本的PCI Express拥有4根传输线路,其中2线用于数据发送,2线用于数据接收,也就是发送数据和接收数据可以同时进行。相比之下,PCI总线和PCI-X总线在一个时钟周期内只能作单向数据传输,效率只有PCI Express的一半;加之PCI Express使用8b/10b编码的内嵌时钟技术,时钟信息被直接写入数据流中,这比PCI总线能更有效节省传输通道,提高传输效率。第三,PCI Express没有沿用传统的共享式结构,它采用点对点工作模式(Peer to Peer,也被简称为P2P),每个PCI Express设备都有自己的专用连接,这样就无需向整条总线申请带宽,避免多个设备争抢带宽的糟糕情形发生,而此种情况在共享架构的PCI系统中司空见惯。

    由于工作频率高达2.5GHz,最基本的PCI Express总线可提供的单向带宽便达到250MBps(2.5Gbps×1 B/8bit×8b/10b=250MBps),再考虑全双工运作,该总线的总带宽达到500MBps-这仅仅是最基本的PCI Express ×1模式。如果使用两个通道捆绑的×2模式,PCI Express便可提供1GBps的有效数据带宽。依此类推,PCI Express ×4、×8和×16模式的有效数据传输速率分别达到2GBps、4GBps和8GBps。这与PCI总线可怜的共享式133MBps速率形成极其鲜明的对比,更何况这些都还是每个PCI Express可独自占用的带宽。
-----------------------------
上面是以前看到过的一段

我想问问


pci-E , 对 intel e1000 这种使用 dma 概念的 驱动有没有什么影响
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP