阅读:2786回复:12
关于HalTranslateBusAddress
我知道HalTranslateBusAddress可以将bus address转成physical address,可是从physical address转到bus address用什么函数,我查了ddk help,没有发现,谢谢大家!
|
|
沙发#
发布于:2005-03-30 18:34
MapTransfer().......返回编程DMA的物理地址(主控设备)
[编辑 - 3/31/05 by aiwadgj] |
|
|
板凳#
发布于:2005-03-31 08:32
谢谢aiwadgj
我再试试 |
|
地板#
发布于:2005-03-31 08:57
谢谢aiwadgj 其实这个函数严格的来说,,,不能完成你说的功能,,, 看你干什么用了。。。主控DMA的,,用它返回传输起始地址,,这个地址应该就是你说的那个了。。。。 你问这个函数有什么用啊。。。?。。 |
|
|
地下室#
发布于:2005-03-31 09:43
是这样,硬件是pci总线的,在内存中映射出一块区域存放硬件的配置信息,硬件运行后,也要往内存中写入数据,这个内存地址必须写到硬件配置信息中,而且需要其bus address!所以需要将地址转化成bus address后再写入!不知用MmGetPhysicalAddress()函数写入物理地址是否也可以,还没有试呢!
我不了解dma,不知这和dma有什么关系! 谢谢! |
|
5楼#
发布于:2005-03-31 11:11
是这样,硬件是pci总线的,在内存中映射出一块区域存放硬件的配置信息,硬件运行后,也要往内存中写入数据,这个内存地址必须写到硬件配置信息中,而且需要其bus address!所以需要将地址转化成bus address后再写入!不知用MmGetPhysicalAddress()函数写入物理地址是否也可以,还没有试呢! 看样子就是我说那个情形了,,,就是往硬件配置信息区域写传输起始地址启动DMA吧。。。总线主控的话,用MapTransfer返回的那个值写入就可以了,, [编辑 - 3/31/05 by aiwadgj] |
|
|
6楼#
发布于:2005-03-31 13:41
谢谢aiwadgj
关于MmGetPhysicalAddress,我看了ddk help,可上面描述: MmGetPhysicalAddress returns the physical address that corresponds to the given virtual address. 这不是说返回的为物理地址吗,你怎么说是系统虚拟地址? 也许我又将它们混淆了,请再解释一下,谢谢! |
|
7楼#
发布于:2005-03-31 14:03
谢谢aiwadgj 呵呵,,不好意思,,是我刚看错了。。。。 我看成是MmGetSyestemAddressForMdl了。。。。 :cool: |
|
|
8楼#
发布于:2005-04-01 09:57
谢谢aiwadgj,请再次指教:
是不是用MmGetPhysicalAddress也可以,并不一定非要用MapTransfer? 如果必须用MapTransfer,那它和使用MmGetPhysicalAddress有什么区别? 感觉MapTransfer与dma有联系,,但我的硬件并不需要在driver中控制dma!! 谢谢! |
|
9楼#
发布于:2005-04-01 10:26
谢谢aiwadgj,请再次指教: 一般的如果编程DMA的话就用MapTransfer就可以了。而且他也可以用在Alpha平台。其实MmGetPhysicalAddress也可以编程DMA的,,不过这个函数的使用受平台的限制(好像限制用在X86平台,,不是很清楚了,,呵呵) 在一个就是MmGetPhysicalAddress更具有通用性,要获得虚拟地址的相应的物理地址的话就用它就可以了,,,而MapTransfer是专用于DMA的,, |
|
|
10楼#
发布于:2005-04-01 12:05
谢谢aiwadgj
|
|
11楼#
发布于:2005-04-01 12:14
to aiwadgj:
我刚才结贴后发现没给你加上分,而且一楼的\"给分\"按钮也消失了,不知是什么原因!! |
|
12楼#
发布于:2005-04-01 14:25
to aiwadgj: 没有关系。。。呵呵。。互相学习最重要。。。 这两天是有问题的。。。有不少人反映给不了分的。。呵呵 |
|
|