Porting a driver for a VME-PCI bridge from 2.4 to 2.6
tilmanglotzner
tilmanglotzner at googlemail.com
Thu Apr 24 09:24:53 UTC 2008
Hello
I am trying to port a vme driver for a VMIC-7750, a single board computer
with an Intel architecture and a PCI to VME bridge.
PCI-VME Bridge
=============
The bridge is a FPGA that links the PCI bus and the VME bus by mapping
part of the address range of the VME bus into a memory block of the PCI
bus. Tundra, the chip manifacturer, calls this a "window". Up to 8 windows
can be dynamically allocated.
There are 2 types of windows, a master window, and a slave window. If
configured as master window, the bridge acts as VME-master on the bus,
i.e. writing or reading into the window from the PCI side results in
transactions on the VME bus.
If configured as slave, a VME master can write or read into the allocated
VME addresses. That then triggers a transaction on the PCI bus.
The Driver
========
The ported driver compiles, and links -- data however seems not to
transferred over the PCI->VME bridge. I can write via an application into
the window, and read from it -- I do however not receive the data I am
expecting.
I had this driver running a couple of years ago with an 2.4 kernel. I
have not deep inside into the kernel development - that leaves me clueless
on how to debug the driver.
The driver is available here:
https://daq-plone.triumf.ca/HR/vmic/vmisft-7433-3.4.tar.gz/view
Changes:
========
To accommodate the 2.6 kernel, I did the following changes to the driver
code located in misft-7433-3.4/vme_universe/module
a) Changed all MODULE_PARM to module_param
b) Changed all EXPORT_SYMBOL_NOVERS to EXPORT_SYMBOL
c) Changed "vma->vm_flags |= VM_RESERVED | VM_LOCKED | VM_IO | VM_SHM" to
vma->vm_flags |= VM_RESERVED | VM_LOCKED | VM_IO;
d) Changed "return remap_page_range(vma, vma->vm_start, vma->vm_pgoff <<
PAGE_SHIFT,vma->vm_end - vma->vm_start, vma->vm_page_prot);"
to
"return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff << PAGE_SHIFT,
vma->vm_end - vma->vm_start, vma->vm_page_prot);"
e) Changed "if (request_irq(universe_pci_dev->irq, universe_isr, SA_SHIRQ,
MODULE_NAME, universe_pci_dev)"
to
"if (request_irq(universe_pci_dev->irq, universe_isr, IRQF_SHARED,
MODULE_NAME, universe_pci_dev)"
Questions
=========
a) the number of arguments for MODULE_PARAM allowed optional parameters
in 2.4, like MODULE_PARM(location_monitor, "2-2i").
Is there a mechanism like that available in the 2.6 series ?
b) Is there an flag replacing VM_SHM ?
c) I googled for the kernel procedures. The thread below seems describe a
similar issue. A driver working with 2.4 did no longer work with 2.6. This
could be traced back remap_pfn_range. Are there alternativs to
remap_pfn_range ?
http://mhonarc.axis.se/dev-etrax/msg08036.html
I would appreciate suggestions on how to debug this. It there are
questions that require clarification from you side, I will be happy to
provide this.
Thanks
Tilman
More information about the devel
mailing list