I would like to change the IOaddress of a PCI device by writing the new (page aligned) address into BAR0/1. When I did that using a BIOS funct开发者_开发知识库ion I could not access the PCI device at the new address.
Is there anything else that needs to be done to get that to work? I am using Assembler in real mode.
Overwriting the BAR should change the address of the device. (As long as you did it properly.)
Is the device behind a bridge? If so, you will also need to update the bridge configuration registers.
Also, the chipset/root complex may have it's own bus decode configuration. Check the chipset datasheet.
if your end point device is behind the bridge then change the Pre-fetchable Base Upper 32 Bit and Pre-fetchable Limit Upper 32 Bit registers appropriately. I dont think you need to worry about root complex.
精彩评论