xuye
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-05-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:2345回复:6

pci BaseAddress

楼主#
更多 发布于:2001-07-09 16:14
我通过ddk提供的函数HalGetBusData()等获得pci的BaseAddress(IO Space), 根据pci定义offset 0-1是vendor ID, 结果这样做结果却读不出vendor ID: USHORT value = READ_PORT_USHORT(BaseAddress).是何原因?
panyx
游客
游客
沙发#
发布于:2001-07-09 19:21
好象PCI配置空间与BaseAddress0没有直接对应关系,除非象9054那样有一个类似PCI配置空间头的寄存器地址空间。
dos
dos
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-07-10 10:04
根据我对pci配置空间理解,pci配置空间保存着和某一pci设备有关的各种信息,包括供应商标识(VendorID),设备号(DeviceID),基址(BaseAddress)等.BaseAddress0-5寄存器和VendorID寄存器都是pci配置空间的一部分.BaseAddress0在pci配置空间中的偏移量为0x10,而Vendor ID在pci配置空间中偏移量为0x0,两者之间没有什么直接的关系.况且BaseAddress的值并不能直接使用,应根据它是映射在I/O空间还是Memory空间进行地址转换.具体转换方法还是参照pci spec.,网站上有.
xuye
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-05-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-07-10 10:16
感谢两位大虾指点. 但是我说的不是这个意思. 首先这是IO空间, 我通过获得BbaseAddress0-5的值, 产生一个IO指针(PhisalAddress.LowPart), 那么这个指针指向的是那儿? 配置头应该也有一个基地址, 和这个指针有什么关系?
dos
dos
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-07-10 10:46
pci的设备寄存器在Memory空间一般情况下被映射到很高的地址空间,必须经过重映射才能访问
[dos 编辑于 2001-07-10 16:00]
xuye
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-05-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-07-10 13:24
ULONG addressSpace;
PHYSICAL_ADDRESS address;
PULONG portStart;

HalTranslateBusAddress(
                   ...
                   &addressSpace,
                   &address
                   );
//
// now, addressSpace == 1
//

portStart = address.LowPart;

//
//now, portStart == 0xe000
//

portStart指向什么地方?
如果READ_PORT_ULONG(portStart)返回什么值?
dos
dos
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-07-10 16:00
这当然和pci设备有关,portStart与pci设备的起始寄存器相对应.读出的是该设备第一个寄存器的值.从所给的地址(0xe000)看,这应该是映射到I/O空间的地址,可以直接访问.
游客

返回顶部