Lennart Sorensen wrote:
On Tue, Oct 27, 2009 at 04:05:25PM +0100, Màrius Montón wrote:
Màrius Montón wrote:
Hello,
For my PCI device to QEMU, I need the real address the PCI bus is using
to access my device. For a IO BAR (PCI_ADDRESS_SPACE_IO), I receive the
real address (like 0xc200 or similar), but when registering a
PCI_ADDRESS_SPACE_MEM I only receive the offset to the BAR.
How I can receive or obtaint the real address on each access to my device?
Cjeers,
Màrius
nobody can tell me anything? :(
Add the offset to the address in the bar?
The problem is how to know what bar is accessing in case I have only
one function for all BARs.
After all the OS is allowed to change your BAR if it wants to.
So internally the only thing that makes sense to a PCI device is the
offset from it's base address.
You listen to addresses at your IO range, and at your memory BAR range.
What you do when you see a request for your range then depends on the
offset that address had from the current base. This would also be true
for the IO.
I know all PCI internals, but I don't understand why for IO I receive
all address and only the offset for MEM BARs (or I'm wrong?)
Màrius
|