zlybupt
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2002-04-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2076回复:4

一个问题!

楼主#
更多 发布于:2002-04-08 15:59
这些日子看了一下linux下的网卡驱动程序,就是对驱动如何完成从网卡自身的fifo和系统内存间 的包传输问题不是很明白,我看源码中有pci_alloc_consistent分配一段内存,返回一个dma handle(我可能对dma机制不是很清楚),然后又用pci_map_single函数进行地址映射,我想问一下这里的地址映射是什么地址间的映射?另外驱动是怎样实现访问网卡自身的fifo中的内容的,fifo的地址跟网卡的io基地址是什么关系?
shownxu
驱动小牛
驱动小牛
  • 注册日期2002-02-05
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-08 17:04
首先, 这两个函数是在linux kernel 2.4中出现的。
pci_alloc_consistent确实分配一段内存,并且返回的是分配的一段内存的物理地址(dma handle, 由卡使用)和虚拟地址(driver使用),pci_map_single函数进行地址映射实际上是一个空操作。网卡自身的fifo中的内容是不可以由driver访问的, 由卡将fifo中的内容通过dma机制移到内存中, 再由driver访问。
shownxu
驱动小牛
驱动小牛
  • 注册日期2002-02-05
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-08 17:20
更正:

pci_alloc_consistent分配一段内存,返回一个dma handle,这段内存在driver的生存期间最好不要释放。一句话 pci_alloc_consistent适合于分配一段大的内存, 并且不是经常的释放和分配。
pci_map_single是将一块已经分配的内存作为参数, 得到这块内存的物理地址, 适合由于分配较小的内存, 并且经常的需要释放和重新分配的。
这两个函数不应该混合使用的。
zlybupt
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2002-04-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-08 19:31
请问那个通过dma机制将卡中fifo的内容传入内存是在何处实现,driver中又在何处得以调用这部分的内容的呢?我好像在代码中没有看到这一部分的内容呀?还望大侠继续指教!
shownxu
驱动小牛
驱动小牛
  • 注册日期2002-02-05
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-10 14:58
由硬件实现的, 不是由driver实现的, 当硬件将收到的packet移到memory后, 会发一个receive complete的中断, 这时调用driver的中断处理程序将收到的packet传给tcp/ip层 :)
游客

返回顶部