I have the following output from running
lspci -vv -s 00:00 on my single board computer running Linux.
07:05.0 RAID bus controller: Adaptec AAC-RAID (Rocket) (rev 03) Subsystem: Adaptec ASR-2230S + ASR-2230SLP PCI-X (Lancer) Control: I/O- Mem+ BusMaster+ SpecCycle+ MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR- Latency: 64 (250ns min, 250ns max), Cache Line Size: 64 bytes Interrupt: pin A routed to IRQ 74 Region 0: Memory at f7a00000 (64-bit, non-prefetchable) [size=2M] Region 2: Memory at f79ff000 (64-bit, non-prefetchable) [Remaining output truncated]
The above is only example output and not exactly what I am getting but it contains the items of interest.
I understand most of the output from the lspci command, but I would like someone to explain to me the lines that begin with Region ... What type of memory am I looking at here specified by the Region line? How might I access it? With that asked, I am trying to accomplish communication between two single board computers connected over the PCI bus. I should be able to talk directly. All there is a PCI arbiter running the bus. This is what I've accomplished so far...
I created a Linux kernel module for outbound PCI traffic. Basically it maps all the way down from userspace (with a user space application) using the driver mmap implementation. I write to the location returned by mmap and I actually see the traffic with a bus analyzer! Now on the other single board computer I try read its sysfs resource for the PCI device but only see all FFs and no changes.
Any advice or explanation on how all of this memory mapping occurs, involving PCI, would be greatly appreciated.