Merilainen, Jussi (GE Healthcare) wrote:
> I'm porting a PCI driver for a custom board from VxWorks to Xenomai/Linux. My 
> goal is to keep the driver as much as possible in user-space. Implementing 
> the HW interrupt handler should be quite straight forward as presented in 
> 'Writing user-space device drivers' in Native-API-Tour manual.
> My concern is the PCI DMA transfer. Does the Xenomai API provide any support 
> for this in user-space? Does anyone have experience on this subject?

Actually, this need not be a Xenomai-specific issue. User space device
drivers are of increasing common interest in the Linux community. I only
collected some projects so far, I did not dig into the APIs:

- libpci as part of the pciutils provides ways to access device
  information, don't know if it also allows to map DMA memory to user

- The Gelato project [1] developed some libs and kernel patches for user
  level drivers.

- Don't know if it is related to the former, but this research project
  [2] implemented user-level drivers as well.

- David Schleef's usddk [3] is another user space driver development
  lib, but it looks a bit premature.

Why am I listing these? Xenomai is not providing PCI access functions,
and I'm not sure yet if it actually has to do this on its own (in user
space, in kernel definitely not). All init/cleanup work can perfectly
use standard Linux infrastructure - if there is one of course. Only
services which may need rescheduling in time-critical contexts (IRQ
handlers, RT tasks) have to be mapped on the Xenomai infrastructure.

Nevertheless, user space support for RTDM, Xenomai's driver model, is
planned, so I'm already collecting input on what services are
additionally required and may have to be provided by RTDM itself (and
not some third-party lib). So, if you find some solution or anyone else
has ideas, please let me know.

> Another thing is the Device I/O handling from user-space. Simple question: 
> how do I perform read/write operations? In VxWorks, I have for example 
> following function for reading an I/O register of the board:
> ...

On x86, iopl() or ioperm() opens in/out to a user space process. Memory
mapped I/O should be accessible via /dev/mem on any arch.



Attachment: signature.asc
Description: OpenPGP digital signature

Xenomai-core mailing list

Reply via email to