[EMAIL PROTECTED] wrote:
> Hi,
>
> we are currently implementing an RTDM driver for our PCI based fieldbus card
> running in a MPC5200 system (Xenomai 2.3.5/Kernel 2.4 PPC). In order to
> provide backward compatibility for existing applications (using an older
> Linux version of the driver) we need an ioctl to let those applications
> read/write to a mapped io memory. Therefore we used the following
> (incomplete) piece of code :
>
> void map_dpm_to_user(pcidev_t *pcidev, rtdm_user_info_t *user_info, void
> *arg)
> {
> unsigned long memaddr = 0, memlen = 0;
> unsigned char *dpm = NULL;
>
> /* Get start address and length of resource */
> memaddr = pci_resource_start(pcidev, 2);
> memlen = pci_resource_len(pcidev, 2);
>
> memaddr &= PCI_BASE_ADDRESS_IO_MASK;
>
> /* Request resource */
> request_mem_region(memaddr, memlen, NULL);
>
> /* Remap for direct access in kernel space */
> dpm = (unsigned char*)ioremap(memaddrmask, memlen);
>
> /* Map to user */
> rtdm_iomap_to_user(user_info, memaddr, memlen,
> PROT_READ|PROT_WRITE, (void **)arg, NULL, NULL);
> }
>
> This code executes without errors but the application freezes on accessing
> the mapped memory. There was a similar question posted earlier
> (https://mail.gna.org/public/xenomai-core/2007-09/msg00030.html) but the
> suggested solution can not be used with a 2.4 kernel because
> phys_mem_access_prot was introduced with the kernel version 2.6 (afaik). Can
> you confirm this problem? Are there any related patches in the current
> Xenomai version (2.4.x)?
>
This has partially been fixed in v2.4.x and beyond, by using pgprot_noncached()
so set the VMA protection bits in wrap_remap_io_page_range(), and fixing
rtdm_mmap_buffer() to better distinguish protection flags between I/O memory and
kmem areas. The point is that you need _PAGE_NO_CACHE | _PAGE_GUARDED to be set
in the VMA prot bits.
However, ppc is a bit special, since there may be the added requirement to clear
the _PAGE_GUARDED flag in case the mapped area is actually some prefetchable IO
memory resource from a PCI device.
Well, you could try the 2.4.x fixes, in case that fits your needs. But we will
likely have to change wrap_remap_io_page_range() and rtdm_mmap_buffer() anew, to
use phys_mem_access_prot() where available.
> Thanks
> Thomas
>
> MAN Roland Druckmaschinen AG
> Vorsitzender des Aufsichtsrates: Hanno C. Fiedler
> Vorstand: Gerd Finkbeiner (Vorsitzender), Dr. Ingo Koch, Dr. Markus Rall,
> Paul Steidle
> Sitz der Gesellschaft: Offenbach am Main, Registergericht: Amtsgericht
> Offenbach HRB-Nr. 42592
> USt-Ident-Nr. DE 250200933
>
> _______________________________________________
> Xenomai-help mailing list
> [email protected]
> https://mail.gna.org/listinfo/xenomai-help
>
--
Philippe.
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help