访问PCI/PCIE设备

访问PCI/PCIE的空间的方式

X86系统中,对PCIE设备配置空间的地址映射一般有两种方式:内存映射和IO映射。因此开发者也可以通过内存访问或者IO访问来访问其配置空间

1.通过IO访问

X86处理器定义了两个I/O端口寄存器,分别为CONFIG_ADDRESS何CONFIG_DATA寄存器,地址为0xCF8和0xCFC,用户可通过这组寄存器来对PCIE的前256个Byte进行访问。简单来说就是把需要访问的PCI设备信息按特定格式写入CONFIG_ADDRESS(0xCF8)寄存器,然后读写CONFIG_DATA(0xCFC)寄存器即可。

通过这种方式访问还需要注意,最后两位已固定是0,所以访问的地址需要 & 0xFC。

例如当你需要访问0ffset 19h时,这时向端口0xCF8写入0x19,但实际上写入的地址是0x19 & 0xFC = 0X18,此时通过CFC读取到的数据,实际上是offset 18h的值。要想获取0ffset 19h的值,此时需要读取CFD(CF8+1)

2.通过memory访问

是直接访问PCI设备的memory地址,地址是在配置空间的基础上Bus,Device,Function全部左移四位,以Intel为例:Address = PCIe Configuration Register Base Address Register (BAR)+(Bus<<20)+(Device<<15)+(Function<<12)+Register.
BAR为PCIE在内存中的基地址,根据不同CPU这个值也不同。可以通过查看PCI设备B0D31F1, Offset 10h来确认这个基地址的实际值。(eg:BAR = 0xFD000000)              

因为PCIE比PCI多一段扩展空间(0x100~0xFFF),而且IO方式只能访问256字节(PCI的配置空间0x00~0xFF,就是256字节),所以这一段空间只能通过memory方式访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值