gz_david
驱动牛犊
驱动牛犊
  • 注册日期2003-01-08
  • 最后登录2003-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:915回复:1

求助高手:如何修改PCI映射内存的cache属性

楼主#
更多 发布于:2003-02-27 21:12
    我有一块PCI板卡,卡上有CPU及SDRAM,当驱动程序把该卡上SDRAM的物理地址映射为WINDOWS程序侧的线性地址后,Windows程序读取该片内存时,只会获得第1次卡上CPU写入的值,原因是该片内存被Cache了。请问如何修改该片内存的Cache属性?

    1、通过该线性地址,找到该片内存对应的页表地址,然后修改该片内存空间对应的页表项属性,将Cache属性去掉。请问Ring 3级的程序能够直接修改页表吗?
    2、驱动程序在调用VMMCall _MapPhysToLinear < dwPhysAddr, dwBytes, dwFlags >时,dwFlags中是否可以设置No Cache属性?

    另外,PCI板卡插入计算机后,其物理地址是如何分配的?
gz_david
驱动牛犊
驱动牛犊
  • 注册日期2003-01-08
  • 最后登录2003-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-01 14:55
问题基本解决,经过确认,是PCI板卡上的CPU做了写Cache,造成数据没有Write through到SDRAM。

VXD的VMMCall _MapPhysToLinear < dwPhysAddr, dwBytes, dwFlags >,dwFlags就是设置Cache属性的。

WDM的 MmMapIoSpace( IN PHYSICAL_ADDRESS  PhysicalAddress, IN ULONG  NumberOfBytes, IN BOOL  CacheType);中的CacheType设置为FALSE,映射后的内存就不会进行Cache操作。

第1次接触驱动程序的编写,让大家见笑了。
游客

返回顶部