阅读:1219回复:6
分配资源时,遇到下面的问题不明白?
在PCI进行I/O口资源分配时遇到了下面的问题?
u.Port.Start.LowPart中LowPart指的是什么,还有HighPart又代表了什么呢?这个是不是PHYSICAL_ADDRESS的一种表示方法,我不太明白,那位能给我讲讲 ,谢谢了! 另外我还见到了前端端口和后端端口的叫法,他们具体指的是什么啊? |
|
|
沙发#
发布于:2003-01-02 16:25
Start是一个PHYSICAL_ADDRESS结构,其实就是LARGE_INTEGER:
typedef union _LARGE_INTEGER { struct { DWORD LowPart; LONG HighPart; }; LONGLONG QuadPart; } LARGE_INTEGER; |
|
|
板凳#
发布于:2003-01-02 17:04
楼上的,谢谢了
你能不能解释以下它与PCI片中的I/O基址是如何对应的呢? 比如: 在基址寄存器中从10h开始,有一个要映射到I/O空间的32位基址寄存器,我向其中写入全1后,读取到2-31位的0的个数,这时候应该知道了I/O所需存储空间的大小,然后就要给它进行映射 可是LowPart写入的是什么呢,HighPart又是什么? LowPart放的是不是就是上面I/O寄存器的32位数据 |
|
|
地板#
发布于:2003-01-02 17:21
还有,我们从配置寄存器好象只能得知所需资源的大小,并不能知道它的具体的物理起始地址吧?
那我们是如何知道这个开始的硬件地址呢,是不是BIOS上电时所得知并存储下来的?然后读取这个数据后再进行映射。 |
|
|
地下室#
发布于:2003-01-02 19:50
物理地址怎么得到已经了解了,就是u.Port.Start,这是起始地址,应该是BIOS上电时分配的
[编辑 - 1/2/03 by zshuc] |
|
|
5楼#
发布于:2003-01-02 19:59
PHYSICAL_ADDRESS 不应该叫物理地址,这样叫会引起误会,物理地址不可能有4G那么大!!该叫它总线地址,这样也许好一点,其表示的是pci总线的基址寄存器的值。为什么有low 和high呢,我看到资料上将,其要表示的是64位,所以有两部分,因为pci总线可以扩展到64位宽度,所以我叫它总线地址,而不叫它物理地址的原因所在!
|
|
6楼#
发布于:2003-01-03 09:52
谢谢两位的解释,我现在的理解是这样的,PHYSICAL_ADDRESS是一个64位长的LARGE-INTEGER数据类型,所以它既可以作为一个8字节长的整型数(QuadPart),也可作为两个4字节长的整型联合结构,其具体用法根据编译器是否支持64位而定。
由于在PCI中映射到I/O地址空间的基址寄存器总是32位,所以只用LowPart就可以搞定了 |
|
|