zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1219回复:6

分配资源时,遇到下面的问题不明白?

楼主#
更多 发布于:2003-01-02 15:10
在PCI进行I/O口资源分配时遇到了下面的问题?
u.Port.Start.LowPart中LowPart指的是什么,还有HighPart又代表了什么呢?这个是不是PHYSICAL_ADDRESS的一种表示方法,我不太明白,那位能给我讲讲 ,谢谢了!
另外我还见到了前端端口和后端端口的叫法,他们具体指的是什么啊?
大家好!
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-02 16:25
Start是一个PHYSICAL_ADDRESS结构,其实就是LARGE_INTEGER:
typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;
        LONG  HighPart;
    };
    LONGLONG QuadPart;
} LARGE_INTEGER;
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-02 17:04
楼上的,谢谢了
你能不能解释以下它与PCI片中的I/O基址是如何对应的呢?
比如:
在基址寄存器中从10h开始,有一个要映射到I/O空间的32位基址寄存器,我向其中写入全1后,读取到2-31位的0的个数,这时候应该知道了I/O所需存储空间的大小,然后就要给它进行映射
可是LowPart写入的是什么呢,HighPart又是什么?
LowPart放的是不是就是上面I/O寄存器的32位数据

大家好!
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-02 17:21
还有,我们从配置寄存器好象只能得知所需资源的大小,并不能知道它的具体的物理起始地址吧?
那我们是如何知道这个开始的硬件地址呢,是不是BIOS上电时所得知并存储下来的?然后读取这个数据后再进行映射。
大家好!
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-02 19:50
物理地址怎么得到已经了解了,就是u.Port.Start,这是起始地址,应该是BIOS上电时分配的

[编辑 -  1/2/03 by  zshuc]
大家好!
wfeiisch
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-02 19:59
PHYSICAL_ADDRESS 不应该叫物理地址,这样叫会引起误会,物理地址不可能有4G那么大!!该叫它总线地址,这样也许好一点,其表示的是pci总线的基址寄存器的值。为什么有low 和high呢,我看到资料上将,其要表示的是64位,所以有两部分,因为pci总线可以扩展到64位宽度,所以我叫它总线地址,而不叫它物理地址的原因所在!
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-03 09:52
谢谢两位的解释,我现在的理解是这样的,PHYSICAL_ADDRESS是一个64位长的LARGE-INTEGER数据类型,所以它既可以作为一个8字节长的整型数(QuadPart),也可作为两个4字节长的整型联合结构,其具体用法根据编译器是否支持64位而定。
由于在PCI中映射到I/O地址空间的基址寄存器总是32位,所以只用LowPart就可以搞定了
大家好!
游客

返回顶部