airy1727
驱动牛犊
驱动牛犊
  • 注册日期2003-01-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分141分
  • 威望25点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:1077回复:3

可否这样使用转换的用户缓冲区!

楼主#
更多 发布于:2003-06-23 20:56
我的板卡上有两块DSP,分别有自己的内存资源,我将它们映射为虚拟地址后,然后分别映射到用户地址以供使用,但是同样的办法,最后始终只有一块DSP能够正常运行,另一块怎么也不动!
在其中两次将虚拟地址映射为用户地址,不知道映射有没有什么要求。最后始终只有后者的内存能够正常使用。
太郁闷了,希望各位给点意见.

映射的方法如下:
if ( ( Mdl = IoAllocateMdl (
(PVOID)DeviceList->SDRAMAddrKernel,
0x2000000,
FALSE,
FALSE,
NULL ) ) == NULL )
{
         DbgPrint(\"tmman:sectionMapPhysicalAddress:IoAllocateMdl:FAIL\\n\");
// goto sectionMapPhysicalAddressExit1;
}

MmBuildMdlForNonPagedPool ( Mdl );

   
if ( ( SDRAMAddrUser = MmMapLockedPages (
Mdl,
UserMode ) ) == NULL )
{
DbgPrint(\"tmman:sectionMapPhysicalAddress:MmMapLockedPages:FAIL\\n\");
// goto sectionMapPhysicalAddressExit2;
}

SDRAMAddrUser就是最后所获得的用户地址。
(PVOID)DeviceList->SDRAMAddrKernel,是最开始将物理地址映射后的虚拟地址。
zytzjx
驱动牛犊
驱动牛犊
  • 注册日期2001-12-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-06-24 21:27
Bar0, bar1
Wecan
hong
驱动小牛
驱动小牛
  • 注册日期2001-09-19
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-24 22:23
your code just for one on board mem, can you pls print out both so we can help you to check why one is ok and the other is not.
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-25 23:45
0x2000000 硬编码,只能有一块映射进来,pci配置空间里,可以控制需要哪些地址空间,在这些配置空间确定了,系统将会分配地质空间给你,而这些地质空间究竟隐射到哪儿,是由你的配置空间设置的,好像是在Bar0, bar1,...bar5里面设置的,假设你现在需要两端地址空间,你应该将bar0,bar1设置好,驱动程序将会自动获得内存资源,假设你是wdm驱程
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
游客

返回顶部