chinabird
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1789回复:12

有关MTRRS的设置问题

楼主#
更多 发布于:2002-11-14 10:08
1.如果一个PCI设备的地址空间为0E000_0000H to 0E000_4000H,我是否能在MTRR中对这段地址空间进行设置?MTRR的设置范围是否只能是物理内存?
2.再问一个很菜的问题,如果要在DOS下对这个PCI设备的地址空间进行操作,是否直接用比如MOV 0E0002000H,EAX 就可以了?
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-14 10:51
MTRR只需要设置物理内存范围。
可以直接这样访问,但要保证你当前的环境是可访问4G内存范围。怎样切换到这种32位平板式内存空间访问环境,本站有专门贴介绍。最好用指针如:
 mov ebx,040002000h
 mov eax,[ebx]
少了e,就少了全部
chinabird
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-14 11:08
谢谢,我想再问一下
对这个PCI设备的地址空间为0E000_0000H to 0E000_4000H,我能否在MTRR中进行设置?或者只能设置为UC方式?

另,你是否熟悉815E的芯片组?
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-14 11:14
应该是不能在MTRR中设置,MTRR只对系统的物理内存(不包括PCI设备的映射内存)有效。
说不上很熟悉,但有做过815E的BIOS。
少了e,就少了全部
chinabird
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-14 17:47
我看了intel的datasheet,它并没有明确地说明,而且看它给的例子中有
MTRRPhysBase5 = 0000_0000_A000_0001h
MTRRPhysMask5 = 0000_000F_FF80_0800h
Cache A0000000h-A0800000 as WC type.
所以很迷惑,是否它也可以对memory mapped的io devices 可以用,只不过产生什么后果就不知道了

做过815E的BIOS?应该另外开贴给分的,不过先就着问一下
如果我只用internal graphics,并且设了最高1M作为share memory,这1M空间是否保存了一些与显示有关的驱动程序?
我想这驱动就是i815.vga。问题在于这儿:在i815.vga中,它肯定要去内存的容量,那它是根据写在数据区的信息来确定,还是根据北桥填的值?


minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-15 08:45
share memory是显存,不是存放显示驱动的内存,而是直接写屏用的内存。(知道这样说清楚了么)驱程用显存根据PCI配置空间的资源BAR寄存器获知。
基本内存的减小受share memory影响,它是读北桥的值决定,而北桥的值又会BIOS根据用户在CMOS中的设置写入。
看看MTRRPhysBase指物理内存。
少了e,就少了全部
chinabird
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-15 09:40
----北桥的值又会BIOS根据用户在CMOS中的设置写入。
北桥的值是BIOS根据内存条的特性写入。我曾经玩了一个小把戏,插一根双面的256的内存条,在bios中又把它改为192m(改北桥的寄存器就可以了),然后启动dos,读写192以上的值失败了。然后我又直接在dos下改北桥值为256m内存的值,黑屏了!!!接下来(摸黑)再改为192m,屏幕又正常显示。问题在于显示上面,所以我又写了一个程序,把北桥值改为256,读写250m的值到192m以下的内存中,在改北桥的值到192,显示告诉我,读写250m的内容成功了!所以我很奇怪,i815.vga是怎么操纵这一切的!!!

不好意思,再纠缠一下第一个问题,(我是想对这条路彻底死心...)
下面是从intel 的datasheet中拷的The memory type range registers (MTRRs) provide a mechanism for associating the memory types with physical-address ranges in system memory. They allow the processor to optimize operations for different types of memory such as RAM, ROM, frame-buffer memory, and memory-mapped I/O devices.
......
Intel recommends the use of the UC (uncached) memory type for all physical memory addresses where memory does not exist.
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-15 11:59
BIOS是这样做的
1、通过I2C读取当前物理内存的总量 MS(memory size)
2、读取CMOS中用户设定的共享内存大小SS(share memory size)
3、计算TOM(top of memory)=MS-SS写入北桥。
显示芯片很可能就从TOM中的值为显存起始地址,由硬件内部逻辑实现。所以就有你上面的那种现象。程序欲访问显存得将地址按PCI规范重新映射后,才能读写,而不是象你那样直接在DOS读写,那样肯定失败,而你直接修改TOM则显示芯片不知道怎样读写显存了。
少了e,就少了全部
chinabird
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-15 12:53
BIOS是这样做的
1、通过I2C读取当前物理内存的总量 MS(memory size)
2、读取CMOS中用户设定的共享内存大小SS(share memory size)

---从source code中是读北桥寄存器70h(对815e来说)

3、计算TOM(top of memory)=MS-SS写入北桥。

---北桥的值就是根据1所读出来的信息判断再填入的,不会减去SS,看寄存器52H的资料。


显示芯片很可能就从TOM中的值为显存起始地址,由硬件内部逻辑实现。所以就有你上面的那种现象。程序欲访问显存得将地址按PCI规范重新映射后,才能读写,而不是象你那样直接在DOS读写,那样肯定失败,而你直接修改TOM则显示芯片不知道怎样读写显存了。

share memory是显存,不是存放显示驱动的内存,而是直接写屏用的内存。

我在修改过程中不显示,是能对192-255M之间的内存进行操作的。如果share memory不是存放显示驱动的内存,而是直接写屏用的内存的话,我修改TOM应该没有影响啊?而且我插一块PCI显卡的话,就一切如我所愿了,不会有黑屏等现象。

罗嗦了,请多指教!!
chinabird
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-18 11:50
自己再up一下
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-19 09:17
Hi,Sorry.几天没来。
我想有点误解了,我说的TOM是指内存平面的最大物理内存,而你说的52H单元是指插在DIM槽上的物理内存容量,它是包含显存的就是我说的MS。由于显存也存在于DRAM中,所以软件对这种系统不是能访问所有的物理内存,显存部分必须重映射后才可访问,还有如果你更改了52单元而没调整TOM,那显存部分就成了不存在的内存空间了。
由于是1年前的事了,具体每个Register的定义我也忘了,看你这么一问,我得再细细读DATASHEET。
如果有错误请指正。
少了e,就少了全部
chinabird
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-19 09:41
谢谢你的耐心回答 :)

TOM 应该就是TOM OF MAIN MEMORY吧?
----显存部分必须重映射后才可访问
我就是不太了解这一点,具体是怎么实现的?

----如果你更改了52单元而没调整TOM
815E芯片也就支持三根内存条,通过填52H,54H,每4个BIT描述一根内存条,所以TOM就是把这三个值加起来。当然此时北桥的总值跟填在主存中数据区的信息就是不一样了,主存中的信息就是少了64M。
chinabird
驱动牛犊
驱动牛犊
  • 注册日期2002-11-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-11-22 09:58
多谢minsoft的回答,周末了,给分先!!

不解之处,希望各位有兴趣,有能力的大虾继续讨论,说的妙的话另外开贴给分。
游客

返回顶部