- 论坛徽章:
- 0
|
基本上是这样.不过有几点是可变更的.
>>此寄存器存放着UHCI 被映射到 I/O space 的地址 即总线地址!
配置寄存器用法PCI规范上有.BAR就是PCI设备内存在PCI总线或物理地址中的偏移.
对于X86还有个IO地址空间.是和物理地址并行的地址空间.PCI同时也支持.也就是PCI总线地址空间本来就有2个空间. 但是通常只把设备内存分配到物理地址空间而把IO地址空间不使用
>>所以只能通过 host bridge 向设备的配置寄存器组中写入数据
这句话中要特别标明设备是指PCI总线设备.配置寄存器组也是PCI总线设备配置寄存器组
>>若用 base 表示 UHCI 的总线地址,addr 表示UHCI 中寄存器的偏移,那么 inw(base + addr) 就表示读取 UHCI 中配置寄存器组中的偏移为 addr 的寄存器的值!
这里必须强调"总线地址"PCI总线.而不是USB总线.
这里的"UHCI 中配置寄存器组"其实就是上面所说的PCI设备的内存.
--另外这条的理解不一定和实现完全一致. UHCI不是总线. 而是个控制器. 如果它作为一个PCI设备,则可以按上理解.有时候它并不以一个PCI设备出现.而可能直接就是集成在北桥或南桥中.这个时候它的控制寄存器组就直接呈现在物理地址空间.于是省略掉了前面的PCI配置过程. 可以直接访问了. |
|