阅读:1216回复:7
小端口内核流驱动的DMA问题
class driver为minidriver分配的dma缓冲区是commonbuffer吗,如国我要用这个缓冲区作dma,如何将该缓冲区转化为逻辑地址
|
|
沙发#
发布于:2002-08-21 17:46
你是用内核流的方式实现DMA的,而我打算用基于包的DMA方式来实现,估计用我这种方式比较容易吧?不过你要是实现了,别忘了共享!谢谢
|
|
板凳#
发布于:2002-08-21 18:02
class driver为minidriver分配的dma缓冲区是commonbuffer吗,如国我要用这个缓冲区作dma,如何将该缓冲区转化为逻辑地址 pSrb->CommandData.DataBufferArray->Data |
|
地板#
发布于:2002-08-22 10:44
我是说在HW_INITIAL_DATA中指定的dma buffer,尔不是将用户给出的缓冲区锁定的那种。因为在只能获得它的虚拟地址,尔用port_configuartion_information中给处的dma adapter去调用ioallocateadpterchannel是需要指定numberofmapreigister(通常是在iogetadapter中返回。尔此处的dmaadapter就是给出的指针。既然classdriver为mini driver分配了连续的缓冲区,就应该可用,是不是呢,这是猜测,怎么用就更不知道了。ddk文档的也没有发现太多的相关说明,有没有更多的文档呢,望见告。
|
|
地下室#
发布于:2002-08-22 11:06
函数一:StreamClassGetDmaBuffer获得dma通道的虚拟地址
函数二:StreamClassGetPhysicalAddress获得dma通道的物理地址 记得给分啊!:) |
|
5楼#
发布于:2002-08-22 11:17
但我编程硬件需要逻辑地址,是否只要物理连续的非分页缓冲区,它需要的mapregister就只有一个,在调用ioallocateadapterchannel 时指定numofmapregister为一可以吗。另外,在minidriver的driverentry中并未指明dmaadapter的属性是否为scatter/gather,class driver怎么知道这种情况呢
|
|
6楼#
发布于:2002-08-23 14:46
MIKE_wang兄说的很对。
|
|
7楼#
发布于:2002-08-23 16:07
呵呵,难得碰到通路中人,你到主题“文件系统(过滤)驱动程序开发“来吧,一个叫gung的人也很不错,大家可以经常讨论stream driver的问题
|
|