I’ve got I/O PCI card, that has io address = 0xdc00;
dev_info.CpuBaseAddress returns 0xdc01
PCI_IO_ADDR(dev_info.CpuBaseAddress) returns 0xdc00;
example code from QNX site has line:
io_base = mmap_device_io(dev_info.BaseAddressSize, dev_info.CpuBaseAddress);
is it correct?
or it should be like this:
io_base = mmap_device_io(dev_info.BaseAddressSize, PCI_IO_ADDR(dev_info.CpuBaseAddress));
It is cleaner to use the PCI_IO_ADDR() macro to have more portable code (mask out some bits within that value that may on other platforms contain additional information that are not part of the physical I/O address itself) but for x86 there is no difference.
I’ve got this problem on x86
and I have to pass PCI_IO_ADDR( base_io ) to mmap_device_io();
when I use example from Talking to hardware under QNX Neutrino by Dave Donohoe,
I’ve got too big base_io;
the example is wrong - look at source PCI_IO_ADDR() mmap_device_io() for X86 systems